Merge remote-tracking branch 'origin/master'

This commit is contained in:
lihao 2025-03-12 15:57:36 +08:00
commit 50842be6f9
7 changed files with 3511 additions and 28 deletions

View File

@ -0,0 +1,32 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nccloud.web.gl.verify.action;
import nc.vo.pub.BusinessException;
import nccloud.dto.gl.verify.VerifyInfoWebVO;
import nccloud.framework.core.exception.ExceptionUtils;
import nccloud.framework.service.ServiceLocator;
import nccloud.framework.web.action.itf.ICommonAction;
import nccloud.framework.web.container.IRequest;
import nccloud.framework.web.json.JsonFactory;
import nccloud.pubitf.gl.lightgl.verify.IVerifyWebService;
public class VerifyMulAction implements ICommonAction {
public VerifyMulAction() {
}
public Object doAction(IRequest request) {
String json = request.read();
VerifyInfoWebVO verifyInfoWebVO = (VerifyInfoWebVO)JsonFactory.create().fromJson(json, VerifyInfoWebVO.class);
try {
return ((IVerifyWebService)ServiceLocator.find(IVerifyWebService.class)).onVerifyMul(verifyInfoWebVO);
} catch (BusinessException e) {
ExceptionUtils.wrapException(e);
return null;
}
}
}

View File

@ -0,0 +1,83 @@
<authorizes>
<authorize>
<!--核销-->
<appcode>20020NAIPT,20020VRIFY,20020VYOBS,20021DLANL,20021VYBAL,20021VYQRY</appcode>
<actions>
<!--查询财务核算账簿是否启用二级核算等信息-->
<action>gl.voucher.queryBookCombineInfo</action>
<!--根据会计科目查询辅助核算项目-->
<action>>gl.voucher.queryAssItem</action>
<!--核销查询-->
<action>gl.verify.query</action>
<!--核销-->
<action>gl.verify.onverify</action>
<!--异币种核销-->
<action>gl.verify.onverifyMul</action>
<!--核销历史查询-->
<action>gl.verify.historyquery</action>
<!--核销历史打印-->
<action>gl.verify.verhistoryprint</action>
<!--核销历史输出-->
<action>gl.verify.verhistoryoutput</action>
<!--期初未达打印-->
<action>gl.verify.verifybeginprint</action>
<!--期初未达输出-->
<action>gl.verify.verifybeginoutput</action>
<!--取消核销-->
<action>gl.verify.unverify</action>
<!--红蓝对冲-->
<action>gl.verify.onRedBlue</action>
<!--自动核销-->
<action>gl.verify.onAutoVerify</action>
<!--自动红蓝对冲-->
<action>gl.verify.onAutoRedBlue</action>
<!--核销余额查询-->
<action>gl.verify.verBalanceQuery</action>
<!--核销余额打印-->
<action>gl.verify.verbalanceprint</action>
<!--核销余额输出-->
<action>gl.verify.verbalanceoutput</action>
<!--核销明细查询-->
<action>gl.verify.verDetailQuery</action>
<!--联查核销情况-->
<action>gl.verify.verDetailLinkQuery</action>
<!--往来核销查询(汇总)-->
<action>gl.verify.accountAgeAnalysis</action>
<!--往来核销查询(明细)-->
<action>gl.verify.accountAgeAnalysisDetail</action>
<!--查询坏账比率-->
<action>gl.verify.badaccountrate</action>
<!--核销对象查询-->
<action>gl.verify.verifyobjquery</action>
<!--核销对象保存-->
<action>gl.verify.verifyobjsave</action>
<!--核销对象删除-->
<action>gl.verify.verifyobjdelete</action>
<!--核销对象启用校验-->
<action>gl.verify.verifyobjcheck</action>
<!--核销对象启用-->
<action>gl.verify.verifyobjenable</action>
<!--核销对象停用-->
<action>gl.verify.verifyobjdisable</action>
<!--期初未达查询-->
<action>gl.verify.verifyinitquery</action>
<!--期初未达表头信息-->
<action>gl.verify.verifyinitheadtitle</action>
<!--期初未达保存-->
<action>gl.verify.verifyinitsave</action>
<!--期初未达导入期初余额-->
<action>gl.verify.verifyinitimportqc</action>
<!--期初未达导入凭证-->
<action>gl.verify.verifyinitfromvoucher</action>
<!--期初未达导出excel-->
<action>gl.verify.verifyinitexportexcel</action>
<!--期初未达导入excel-->
<action>gl.verify.verifyinitimportexcel</action>
<!--核销对象检查是否显示业务单元-->
<action>gl.verify.verifyobjcheckbu</action>
<!--会计科目查询核销对象-->
<action>gl.verify.verifyobjinfo</action>
<action>gl.voucher.voucherRelatedApp</action>
</actions>
</authorize>
</authorizes>

View File

@ -0,0 +1,199 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<actions>
<action>
<name>gl.verify.rtverify</name>
<label>即时核销</label>
<clazz>nccloud.web.gl.verify.action.RTVerifyAction</clazz>
</action>
<action>
<name>gl.verify.refverify</name>
<label>参照核销</label>
<clazz>nccloud.web.gl.verify.action.RefVerifyAction</clazz>
</action>
<action>
<name>gl.verify.query</name>
<label>核销查询</label>
<clazz>nccloud.web.gl.verify.action.QueryVerifyAction</clazz>
</action>
<action>
<name>gl.verify.onverify</name>
<label>核销</label>
<clazz>nccloud.web.gl.verify.action.VerifyMulAction</clazz>
</action>
<action>
<name>gl.verify.onverifyMul</name>
<label>异币种核销</label>
<clazz>nccloud.web.gl.verify.action.VerifyMulAction</clazz>
</action>
<action>
<name>gl.verify.historyquery</name>
<label>核销历史查询</label>
<clazz>nccloud.web.gl.verify.action.HistoryQueryAction</clazz>
</action>
<action>
<name>gl.verify.verhistoryprint</name>
<label>核销历史打印</label>
<clazz>nccloud.web.gl.verify.action.VerHistoryPrintAction</clazz>
</action>
<action>
<name>gl.verify.verhistoryoutput</name>
<label>核销历史输出</label>
<clazz>nccloud.web.gl.verify.action.VerHistoryOutputAction</clazz>
</action>
<action>
<name>gl.verify.verifybeginprint</name>
<label>期初未达打印</label>
<clazz>nccloud.web.gl.verify.action.VerifyBeginPrintAction</clazz>
</action>
<action>
<name>gl.verify.verifybeginoutput</name>
<label>期初未达输出</label>
<clazz>nccloud.web.gl.verify.action.VerifyBeginOutputAction</clazz>
</action>
<action>
<name>gl.verify.unverify</name>
<label>取消核销</label>
<clazz>nccloud.web.gl.verify.action.UnVerifyAction</clazz>
</action>
<action>
<name>gl.verify.onRedBlue</name>
<label>红蓝对冲</label>
<clazz>nccloud.web.gl.verify.action.RedBlueAction</clazz>
</action>
<action>
<name>gl.verify.onAutoVerify</name>
<label>自动核销</label>
<clazz>nccloud.web.gl.verify.action.AutoVerifyAction</clazz>
</action>
<action>
<name>gl.verify.onAutoRedBlue</name>
<label>自动红蓝对冲</label>
<clazz>nccloud.web.gl.verify.action.AutoRedBlueAction</clazz>
</action>
<action>
<name>gl.verify.verBalanceQuery</name>
<label>核销余额查询</label>
<clazz>nccloud.web.gl.verify.action.VerBalanceQueryAction</clazz>
</action>
<action>
<name>gl.verify.verbalanceprint</name>
<label>核销余额打印</label>
<clazz>nccloud.web.gl.verify.action.VerBalancePrintAction</clazz>
</action>
<action>
<name>gl.verify.verbalanceoutput</name>
<label>核销余额输出</label>
<clazz>nccloud.web.gl.verify.action.VerBalanceOutputAction</clazz>
</action>
<action>
<name>gl.verify.verDetailQuery</name>
<label>核销明细查询</label>
<clazz>nccloud.web.gl.verify.action.VerDetailQueryAction</clazz>
</action>
<action>
<name>gl.verify.verDetailLinkQuery</name>
<label>联查核销情况</label>
<clazz>nccloud.web.gl.verify.action.VerDetailLinkQueryAction</clazz>
</action>
<action>
<name>gl.verify.accountAgeAnalysis</name>
<label>往来核销查询(汇总)</label>
<clazz>nccloud.web.gl.verify.action.AccoungAgeAnalysisAction</clazz>
</action>
<action>
<name>gl.verify.accountAgeAnalysisDetail</name>
<label>往来核销查询(明细)</label>
<clazz>nccloud.web.gl.verify.action.AccoungAgeAnalysisDetailAction</clazz>
</action>
<action>
<name>gl.verify.badaccountrate</name>
<label>查询坏账比率</label>
<clazz>nccloud.web.gl.verify.action.BadAccountRateAction</clazz>
</action>
<action>
<name>gl.verify.verifyobjquery</name>
<label>核销对象查询</label>
<clazz>nccloud.web.gl.verify.action.VerifyObjQueryAction</clazz>
</action>
<action>
<name>gl.verify.verifyobjsave</name>
<label>核销对象保存</label>
<clazz>nccloud.web.gl.verify.action.VerifyObjSaveAction</clazz>
</action>
<action>
<name>gl.verify.verifyobjdelete</name>
<label>核销对象删除</label>
<clazz>nccloud.web.gl.verify.action.VerifyObjDeleteAction</clazz>
</action>
<action>
<name>gl.verify.verifyobjcheck</name>
<label>核销对象启用校验</label>
<clazz>nccloud.web.gl.verify.action.VerifyObjCheckAction</clazz>
</action>
<action>
<name>gl.verify.verifyobjenable</name>
<label>核销对象启用</label>
<clazz>nccloud.web.gl.verify.action.VerifyObjEnableAction</clazz>
</action>
<action>
<name>gl.verify.verifyobjdisable</name>
<label>核销对象停用</label>
<clazz>nccloud.web.gl.verify.action.VerifyObjDisableAction</clazz>
</action>
<action>
<name>gl.verify.verifyinitquery</name>
<label>期初未达查询</label>
<clazz>nccloud.web.gl.verify.action.VerifyInitQueryAction</clazz>
</action>
<action>
<name>gl.verify.verifyinitheadtitle</name>
<label>期初未达表头信息</label>
<clazz>nccloud.web.gl.verify.action.VerifyInitHeadTitleAction</clazz>
</action>
<action>
<name>gl.verify.verifyinitsave</name>
<label>期初未达保存</label>
<clazz>nccloud.web.gl.verify.action.VerifyInitSaveAction</clazz>
</action>
<action>
<name>gl.verify.verifyinitimportqc</name>
<label>期初未达导入期初余额</label>
<clazz>nccloud.web.gl.verify.action.VerifyInitImportQCAction</clazz>
</action>
<action>
<name>gl.verify.verifyinitfromvoucher</name>
<label>期初未达导入凭证</label>
<clazz>nccloud.web.gl.verify.action.VerifyInitFromVoucherAction</clazz>
</action>
<action>
<name>gl.verify.verifyinitexportexcel</name>
<label>期初未达导出excel</label>
<clazz>nccloud.web.gl.verify.action.VerifyInitExportExcelAction</clazz>
</action>
<action>
<name>gl.verify.verifyinitimportexcel</name>
<label>期初未达导入excel</label>
<clazz>nccloud.web.gl.verify.action.VerifyInitImportExcelAction</clazz>
</action>
<action>
<name>gl.verify.verifyobjcheckbu</name>
<label>核销对象检查是否显示业务单元</label>
<clazz>nccloud.web.gl.verify.action.VerifyObjCheckBUAction</clazz>
</action>
<action>
<name>gl.verify.verifyobjinfo</name>
<label>会计科目查询核销对象</label>
<clazz>nccloud.web.gl.verify.action.VerifyObjInfoAction</clazz>
</action>
</actions>

File diff suppressed because it is too large Load Diff

View File

@ -244,8 +244,31 @@ public class VerifyWebServiceImpl implements IVerifyWebService {
verifyModel.setDebitVerify(debitVerifyVOs);
verifyModel.onVerify();
verifyModel.onQuery(verifyModel.getFilterVO(verifyInfoWebVO.getCondition()));
resultMap.put("credit", verifyModel.getCreditVerifyWebInfo());
resultMap.put("debit", verifyModel.getDebitVerifyWebInfo());
Map<String, Map<String, Object>>[] creditInfo = verifyModel.getCreditVerifyWebInfo();
Map<String, Map<String, Object>>[] debitInfo = verifyModel.getDebitVerifyWebInfo();
setCurrTypeNameForVerify(creditInfo, debitInfo);
resultMap.put("credit", creditInfo);
resultMap.put("debit", debitInfo);
return resultMap;
}
@Override
public Map<String, Object> onVerifyMul(VerifyInfoWebVO verifyInfoWebVO) throws BusinessException {
Map<String, Object> resultMap = new HashMap<String, Object>();
GlVerifyWebModel verifyModel = new GlVerifyWebModel();
verifyModel.setPk_accountingbook((String) verifyInfoWebVO.getCondition().get("pk_accountingbook"));
verifyModel.checkVerifyObj(verifyInfoWebVO.getCondition());
VerifyDetailVO[] creditVerifyVOs = verifyModel.transferWebToVO(verifyInfoWebVO.getCredit().toArray(new VerifyDetailWebVO[0]));
VerifyDetailVO[] debitVerifyVOs = verifyModel.transferWebToVO(verifyInfoWebVO.getDebit().toArray(new VerifyDetailWebVO[0]));
verifyModel.setCreditVerify(creditVerifyVOs);
verifyModel.setDebitVerify(debitVerifyVOs);
verifyModel.onVerifyMul();
verifyModel.onQuery(verifyModel.getFilterVO(verifyInfoWebVO.getCondition()));
Map<String, Map<String, Object>>[] creditInfo = verifyModel.getCreditVerifyWebInfo();
Map<String, Map<String, Object>>[] debitInfo = verifyModel.getDebitVerifyWebInfo();
setCurrTypeNameForVerify(creditInfo, debitInfo);
resultMap.put("credit", creditInfo);
resultMap.put("debit", debitInfo);
return resultMap;
}
@ -737,23 +760,27 @@ public class VerifyWebServiceImpl implements IVerifyWebService {
processCurrencyTypes(debitInfo, pk_currtypes);
// ²éѯ±ÒÖÖÃû³Æ
String pk_currtypeStr = String.join("','", pk_currtypes);
// NCCForUAPLogger.debug("pk_currtypeStr:" + pk_currtypeStr);
String sql = "select pk_currtype, name from bd_currtype where pk_currtype in ('" + pk_currtypeStr + "') and dr = 0";
List<Map> results = (List<Map>) new BaseDAO().executeQuery(sql, new MapListProcessor());
if (!pk_currtypes.isEmpty()) {
String pk_currtypeStr = String.join("','", pk_currtypes);
// NCCForUAPLogger.debug("pk_currtypeStr:" + pk_currtypeStr);
String sql = "select pk_currtype, name from bd_currtype where pk_currtype in ('" + pk_currtypeStr + "') and dr = 0";
List<Map> results = (List<Map>) new BaseDAO().executeQuery(sql, new MapListProcessor());
for (Map result : results) {
String pk_currtype = result.getOrDefault("pk_currtype", "") + "";
String name = result.getOrDefault("name", "") + "";
if (pk_currtype.isEmpty() || name.isEmpty()) {
continue;
for (Map result : results) {
String pk_currtype = result.getOrDefault("pk_currtype", "") + "";
String name = result.getOrDefault("name", "") + "";
if (pk_currtype.isEmpty() || name.isEmpty()) {
continue;
}
resMap.put(pk_currtype, name);
}
resMap.put(pk_currtype, name);
}
// ÉèÖñÒÖÖÃû³Æ
setCurrencyNameInArr(creditInfo, resMap);
setCurrencyNameInArr(debitInfo, resMap);
if (!resMap.isEmpty()) {
setCurrencyNameInArr(creditInfo, resMap);
setCurrencyNameInArr(debitInfo, resMap);
}
} catch (Exception e) {
NCCForUAPLogger.debug("setCurrTypeNameForVerify-exp:" + e.getMessage());
throw new RuntimeException(e);
@ -761,26 +788,30 @@ public class VerifyWebServiceImpl implements IVerifyWebService {
}
private void processCurrencyTypes(Map<String, Map<String, Object>>[] infoArray, Set<String> pk_currtypes) {
for (Map<String, Map<String, Object>> map : infoArray) {
Map<String, Object> currtypeMap = map.get("m_pk_currtype");
// NCCForUAPLogger.debug("infoArray-m_pk_currtype= " + currtypeMap);
if (!"".equals(currtypeMap.getOrDefault("value", ""))) {
String pk_currtype = currtypeMap.getOrDefault("value", "") + "";
pk_currtypes.add(pk_currtype);
if (infoArray != null) {
for (Map<String, Map<String, Object>> map : infoArray) {
Map<String, Object> currtypeMap = map.get("m_pk_currtype");
// NCCForUAPLogger.debug("infoArray-m_pk_currtype= " + currtypeMap);
if (!"".equals(currtypeMap.getOrDefault("value", ""))) {
String pk_currtype = currtypeMap.getOrDefault("value", "") + "";
pk_currtypes.add(pk_currtype);
}
}
}
}
private void setCurrencyNameInArr(Map<String, Map<String, Object>>[] infoArray, Map<String, String> resMap) {
for (Map<String, Map<String, Object>> map : infoArray) {
Map<String, Object> currtypeMap = map.get("m_pk_currtype");
String pk_currtype = currtypeMap.getOrDefault("value", "") + "";
String m_currtypeName = resMap.get(pk_currtype);
if (infoArray != null) {
for (Map<String, Map<String, Object>> map : infoArray) {
Map<String, Object> currtypeMap = map.get("m_pk_currtype");
String pk_currtype = currtypeMap.getOrDefault("value", "") + "";
String m_currtypeName = resMap.get(pk_currtype);
Map<String, Object> currtypeNameMap = new HashMap<>();
currtypeNameMap.put("value", m_currtypeName);
currtypeNameMap.put("display", m_currtypeName);
map.put("m_currtypeName", currtypeNameMap);
Map<String, Object> currtypeNameMap = new HashMap<>();
currtypeNameMap.put("value", m_currtypeName);
currtypeNameMap.put("display", m_currtypeName);
map.put("m_currtypeName", currtypeNameMap);
}
}
}

View File

@ -0,0 +1,661 @@
/*kOCZ2rdZQh+oO4IyZSOXGg0LHHc/urYgAeiJss7fL0A=*/
package nc.vo.glrp.com.verify;
import nc.bs.logging.Logger;
import nc.vo.gateway60.itfs.Currency;
import nc.vo.gateway60.pub.GlBusinessException;
import nc.vo.glcom.shellsort.CShellSort;
import nc.vo.glcom.sorttool.CVoSortTool;
import nc.vo.glrp.pub.VerifyMsg;
import nc.vo.glrp.pub.VoComparer;
import nc.vo.glrp.verify.VerifyDetailKey;
import nc.vo.glrp.verify.VerifyDetailVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDate;
import nc.vo.pub.lang.UFDouble;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.List;
/**
* @author mzr
* @ClassName: MultiMatch
* @Description: 异币种借贷核销实现类
* @date 2013-6-18 下午01:49:19
*/
public class MultiMatch implements IMatchTool {
public IVerifyVO[] m_debitvos;
public IVerifyVO[] m_creditvos;
private VerifyRuleVO m_rulevo;
private List<ILogVO> m_alLogs;
private Hashtable<String, List<IVerifyVO>> m_hash;
private VoComparer m_comparer;
private String pk_accountingbook;
private String pk_user;
private String pk_group;
private UFDate oprDate;
public String getPk_user() {
return this.pk_user;
}
public void setPk_user(String pk_user) {
this.pk_user = pk_user;
}
public String getPk_group() {
return this.pk_group;
}
public void setPk_group(String pk_group) {
this.pk_group = pk_group;
}
public UFDate getOprDate() {
return this.oprDate;
}
public void setOprDate(UFDate oprDate) {
this.oprDate = oprDate;
}
public void setDebitData(IVerifyVO[] debtDataVos) {
this.m_debitvos = debtDataVos;
}
public IVerifyVO[] getDebitData() {
return this.m_debitvos;
}
public void setCreditData(IVerifyVO[] creditDataVo) {
this.m_creditvos = creditDataVo;
}
public IVerifyVO[] getCreditData() {
return this.m_creditvos;
}
public void setRule(VerifyRuleVO rulevo) {
this.m_rulevo = rulevo;
}
public VerifyRuleVO getRule() {
return this.m_rulevo;
}
private Hashtable<String, List<IVerifyVO>> getHash() {
if (this.m_hash == null) {
this.m_hash = new Hashtable();
}
return this.m_hash;
}
private VoComparer getComparer() {
if (this.m_comparer == null) {
this.m_comparer = new VoComparer();
}
return this.m_comparer;
}
/**
* <p>Title: </p>
* <p>Description: </p>
*/
public MultiMatch() {
}
/* ( Javadoc)
* <p>Title: getLogData</p>
* <p>Description: </p>
* @return
* @see nc.vo.glrp.com.verify.IMatchTool#getLogData()
*/
public ILogVO[] getLogData() {
if (this.m_alLogs != null && !this.m_alLogs.isEmpty()) {
try {
ILogVO[] logs = (ILogVO[]) Array.newInstance(this.m_alLogs.get(0).getClass(), this.m_alLogs.size());
logs = (ILogVO[]) this.m_alLogs.toArray(logs);
return logs;
} catch (Exception ex) {
Logger.error(ex.getMessage(), ex);
return null;
}
} else {
return null;
}
}
/* ( Javadoc)
* <p>Title: getToolName</p>
* <p>Description: </p>
* @return
* @see nc.vo.glrp.com.verify.IMatchTool#getToolName()
*/
public String getToolName() {
return "GLMultiMatch";
}
/* ( Javadoc)
* <p>Title: onMatch</p>
* <p>Description: 异币种核销匹配算法 </p>
* @see nc.vo.glrp.com.verify.IMatchTool#onMatch()
*/
public void onMatch() throws Exception {
try {
// 检查借贷方数据为空
checkData();
removeOldData();
perpareData();
boolean bDebitLoop = true;
String shashKey;
bDebitLoop = (getDebitData().length < getCreditData().length);
IVerifyVO[] voloop = bDebitLoop ? getDebitData() : getCreditData();
String[] sObjkeys = bDebitLoop ? getRule().getDebtObjKeys() : getRule().getCreditObjKeys();
UFDouble[] dealMny = new UFDouble[2];// 记录较少的一方的未核销金额
UFDouble[] oppMny = new UFDouble[2];// 记录较多的一方的未核销金额
UFDouble[] verifyMny = new UFDouble[2];// 本次核销金额
if (getRule().getDateName() != null && getRule().getMaxDateError() != null) {
getComparer().setCompareKey(new String[]{getRule().getDateName()});
getComparer().setDaterange(getRule().getMaxDateError().intValue());
}
List<IVerifyVO> alOpp = null;
IVerifyVO voOpp = null;
for (int i = 0; i < voloop.length; i++) {
if (bDebitLoop) {
dealMny[0] = voloop[i].getDebit_Money_Y();
dealMny[1] = voloop[i].getDebit_Money_B();
} else {
dealMny[0] = voloop[i].getCredit_Money_Y();
dealMny[1] = voloop[i].getCredit_Money_B();
}
if (isSettled(dealMny)) {
continue;
}
shashKey = gethashKey(voloop[i], sObjkeys);
try {
alOpp = getHash().get(shashKey);
if (alOpp == null || alOpp.size() == 0) {
continue;
}
} catch (Exception ex) {
continue;
}
for (int j = 0; j < alOpp.size(); ) {
if (isSettled(dealMny)) {// 如果记录较少的一方未核销金额为0则表示改记录已核销完继续下一条记录
break;
}
voOpp = (IVerifyVO) alOpp.get(j);
if (bDebitLoop) {
oppMny[0] = voOpp.getCredit_Money_Y();
oppMny[1] = voOpp.getCredit_Money_B();
} else {
oppMny[0] = voOpp.getDebit_Money_Y();
oppMny[1] = voOpp.getDebit_Money_B();
}
if (isSettled(oppMny)) {
alOpp.remove(j);
continue;
}
if (!existInDateRange(voloop[i], voOpp)) {
j++;
continue;
}
//--add by pangjsh 判断数据方向是否同向
if (!isVerifyEnable(voloop[i], voOpp, bDebitLoop)) {
j++;
continue;
}
/*判断核销金额*/
/*如果是红对兰则按照兰字金额核销*/
for (int m = 0; m < verifyMny.length; m++) {
if (dealMny[m] != null && oppMny[m] != null) {// 取借贷方未核销金额少的作为本次核销金额
verifyMny[m] = dealMny[m].abs().compareTo(oppMny[m].abs()) > 0 ? oppMny[m] : dealMny[m];
} else {
verifyMny[m] = ZERO;
}
}
if (isSettled(verifyMny)) {
j++;
continue;
}
/*形成log回写余额*/
// 计算本次核销后记录较多的一方的未核销金额
if (bDebitLoop) {
m_alLogs.addAll(generateLogs(verifyMny, voloop[i], voOpp));
if (voOpp.getCredit_Money_Y() != null && !verifyMny[0].equals(ZERO)) {
voOpp.setCredit_Money_Y(
voOpp.getCredit_Money_Y().sub(verifyMny[0], verifyMny[0].getPower()));
}
if (voOpp.getCredit_Money_B() != null && !verifyMny[1].equals(ZERO)) {
voOpp.setCredit_Money_B(
voOpp.getCredit_Money_B().sub(verifyMny[1], verifyMny[1].getPower()));
}
} else {
m_alLogs.addAll(generateLogs(verifyMny, voOpp, voloop[i]));
if (voOpp.getDebit_Money_Y() != null && !verifyMny[0].equals(ZERO)) {
voOpp.setDebit_Money_Y(
voOpp.getDebit_Money_Y().sub(verifyMny[0], verifyMny[0].getPower()));
}
if (voOpp.getDebit_Money_B() != null && !verifyMny[1].equals(ZERO)) {
voOpp.setDebit_Money_B(
voOpp.getDebit_Money_B().sub(verifyMny[1], verifyMny[1].getPower()));
}
}
// 计算本次核销后记录较少的一方的未核销金额
for (int n = 0; n < dealMny.length; n++) {
if (dealMny[n] != null && !verifyMny[n].equals(ZERO)) {
dealMny[n] = dealMny[n].sub(verifyMny[n], verifyMny[n].getPower());
}
}
if (bDebitLoop) {
if (isSettled(new UFDouble[]{voOpp.getCredit_Money_Y(),
voOpp.getCredit_Money_B()})) {
alOpp.remove(j);
}
} else {
if (isSettled(new UFDouble[]{voOpp.getDebit_Money_Y(),
voOpp.getDebit_Money_B()})) {
alOpp.remove(j);
}
}
}
/*回写余额*/
if (bDebitLoop) {
voloop[i].setDebit_Money_Y(dealMny[0]);
voloop[i].setDebit_Money_B(dealMny[1]);
} else {
voloop[i].setCredit_Money_Y(dealMny[0]);
voloop[i].setCredit_Money_B(dealMny[1]);
}
}
} catch (Exception e) {
Logger.error(e.getMessage(), e);
throw new GlBusinessException(e.getMessage());
}
}
/**
* @param @throws BusinessException
* @return void
* @throws
* @Title: checkData
* @Description: 检查借贷方数据为空
*/
private void checkData() throws BusinessException {
if (getDebitData() == null || getDebitData().length == 0 || getCreditData() == null || getCreditData().length == 0) {
throw new BusinessException(VerifyMsg.getMSG_NOVERIFYDATA());
}
}
/**
* @param
* @return void
* @throws
* @Title: removeOldData
* @Description: 清除旧数据
*/
private void removeOldData() {
m_alLogs = new ArrayList<ILogVO>();
getHash().clear();
}
/**
* @param @throws Exception
* @return void
* @throws
* @Title: perpareData
* @Description: TODO(准备新数据)
*/
private void perpareData() throws BusinessException {
try {
// 借贷方有数据不存在就返回
if (getDebitData() == null || getDebitData().length == 0 || getCreditData() == null || getCreditData().length == 0) {
return;
}
// 按币种格式化借方金额
for (int i = 0; i < getDebitData().length; i++) {
// todo 1
String currPk = getDebitData()[i].getCurrPk();
getDebitData()[i].setDebit_Money_Y(Currency.formatByCurrType(currPk, getDebitData()[i].getDebit_Money_Y()));
getDebitData()[i].setDebit_Money_B(Currency.formatByCurrType(Currency.getLocalCurrPK(getPk_accountingbook()), getDebitData()[i].getDebit_Money_B()));
}
// 按币种格式化贷方金额
for (int i = 0; i < getCreditData().length; i++) {
// todo 1
String currPk = getCreditData()[i].getCurrPk();
getCreditData()[i].setCredit_Money_Y(Currency.formatByCurrType(currPk, getCreditData()[i].getCredit_Money_Y()));
getCreditData()[i].setCredit_Money_B(Currency.formatByCurrType(Currency.getLocalCurrPK(getPk_accountingbook()), getCreditData()[i].getCredit_Money_B()));
}
// 按规则排序借方数据
sortData(true, getRule().getDebtSortKeys());
// 按规则排序贷方数据
sortData(false, getRule().getCreditSortKeys());
if (getCreditData().length > getDebitData().length) {
fill2Hash(getCreditData(), false);
} else {
fill2Hash(getDebitData(), true);
}
} catch (Exception e) {
Logger.error(e.getMessage(), e);
throw new GlBusinessException(e.getMessage());
}
}
/**
* @param isDebit
* @param sortKeys
* @throws Exception
* @Title: sortData
* @Description: TODO(按照设置的排序字段排序)
*/
private void sortData(boolean isDebit, String[] sortKeys) throws Exception {
if (sortKeys != null && sortKeys.length > 0) {
int[] iIndex = sortKeys[0].equals("prepareddate") ?
new int[]{VerifyDetailKey.VOUCHDATE, VerifyDetailKey.VOUCHERTYPENAME,
VerifyDetailKey.DISP_VOUCHERNO, VerifyDetailKey.DETAILINDEX} :
new int[]{VerifyDetailKey.BUSINESSDATE, VerifyDetailKey.VOUCHERTYPENAME,
VerifyDetailKey.DISP_VOUCHERNO, VerifyDetailKey.DETAILINDEX};
CShellSort objShellSort = new CShellSort();
CVoSortTool objVoSortTool = new CVoSortTool();
objVoSortTool.setSortIndex(iIndex);
objShellSort.sort(isDebit ? getDebitData() : getCreditData(), objVoSortTool, !getRule().getVerifySeq().booleanValue());
} else {
getComparer().setDaterange(0);
getComparer().setAscend(getRule().getVerifySeq().booleanValue());
getComparer().setCompareKey(new String[]{getRule().getDateName()});
Arrays.sort(getDebitData(), getComparer());
}
}
/**
* @param @param vos
* @param @param bDebit
* @return void
* @throws
* @Title: fill2Hash
* @Description: TODO(将数据添加到hash表中)
*/
private void fill2Hash(IVerifyVO[] vos, boolean bDebit) {
// 得到核销部分标准按核销号金额相等末级科目按对账标识码按辅助项中的全部或部分
String[] sKeys = (bDebit ? getRule().getDebtObjKeys() : getRule().getCreditObjKeys());
String sCurrKey = null;
List<IVerifyVO> oCurrValues = null;
for (int i = 0; i < vos.length; i++) {
sCurrKey = gethashKey(vos[i], sKeys);
oCurrValues = getHash().get(sCurrKey);
if (oCurrValues == null) {
oCurrValues = new ArrayList<IVerifyVO>();
}
if (isEqual(vos[i], sKeys)) {
oCurrValues.add(vos[i]);
getHash().put(sCurrKey, oCurrValues);
}
}
}
/**
* @param @param verifyvo
* @param @param skeys
* @param @return
* @return String
* @throws
* @Title: gethashKey
* @Description: TODO(得到hash键值)
*/
private String gethashKey(IVerifyVO verifyvo, String[] skeys) {
StringBuffer shashKey = new StringBuffer();
if (skeys == null || skeys.length <= 0) {
return "null";
}
Object ob = null;
for (int i = 0; i < skeys.length; i++) {
if (skeys[i].equals("Mny")) {
// modified by shipl 2015-11-12 15:26:58 原币相等即可核销
if (verifyvo.getDirect().equals(IVerifyVO.I_DEBIT)) { /*借方*/
ob = verifyvo.getDebit_Money_Y();
shashKey.append("_").append(ob == null ? "null" : ob.toString());
// ob = verifyvo.getDebit_Money_B();
// shashKey.append("_").append(ob == null ? "null" : ob.toString());
} else { /*贷方*/
ob = verifyvo.getCredit_Money_Y();
shashKey.append("_").append(ob == null ? "null" : ob.toString());
// ob = verifyvo.getCredit_Money_B();
// shashKey.append("_").append(ob == null ? "null" : ob.toString());
}
} else {
ob = verifyvo.getAttributeValue(skeys[i]);
shashKey.append("_").append(ob == null ? "null" : ob.toString());
}
}
return shashKey.toString();
}
/**
* @param @param vo 当前待核销的数据
* @param @param sKeys 核销部分标准按核销号金额相等末级科目按对账标识码按辅助项中的全部或部分
* @param @return
* @return boolean
* @throws
* @Title: isEqual
* @Description: TODO(判断数据的辅助核算与自动核销按辅助项中辅助核算是否一致)
*/
private boolean isEqual(IVerifyVO vo, String[] sKeys) {
boolean result = true;
VerifyDetailVO vo1 = (VerifyDetailVO) vo;
if (null != sKeys && sKeys.length > 0) {
for (int i = 0; i < sKeys.length; i++) {
if (null != sKeys[i] && sKeys[i].startsWith("fzhs_")) {
String asstype = sKeys[i].substring(5, 25);
String assvalue = sKeys[i].substring(25);
for (int j = 0; vo1.getAss() != null && j < vo1.getAss().length; j++) {
if (vo1.getAss()[j] != null) {
if (vo1.getAss()[j].getPk_Checktype().equals(asstype)) {
if (!"null".equals(assvalue) && !isExists(vo1.getAss()[j].getPk_Checkvalue(), assvalue)) {
result = false;
break;
}
}
}
}
}
}
}
return result;
}
/**
* @param @param pk_checkvalue 比如pk_checkvalue="100288100000000000K2"
* @param @param assvalue 比如assvalue="100288100000000000K1,100288100000000000K2"
* @param @return
* @return boolean
* @throws
* @Title: isExists
* @Description: TODO(判断pk_checkvalue是否存在于assvalue中)
*/
private boolean isExists(String pk_checkvalue, String assvalue) {
String[] tmpArr = assvalue.split(",");
if (null != tmpArr && tmpArr.length > 0) {
for (int i = 0; i < tmpArr.length; i++) {
if (null != tmpArr[i] && tmpArr[i].equals(pk_checkvalue)) {
return true;
}
}
}
return false;
}
/**
* @param @param vo1
* @param @param vo2
* @param @return
* @return boolean
* @throws
* @Title: existInDateRange
* @Description: TODO(判断两vo是否在核销规则的日期误差天数内)
*/
private boolean existInDateRange(IVerifyVO vo1, IVerifyVO vo2) {
if (getRule().getMaxDateError() != null) {
getComparer().setDaterange(getRule().getMaxDateError().intValue());
getComparer().setCompareKey(new String[]{getRule().getDateName()});
return getComparer().compare(vo1, vo2) == 0 ? true : false;
}
return true;
}
/**
* 功能判断两vo是否数据同向
* 作者逄居升
* 创建时间(2014-6-19 13:05:15)
* 参数<|>
* 返回值
* 算法
*
* @param vo1 nc.vo.glrp.com.verify.IVerifyVO
* @param vo2 nc.vo.glrp.com.verify.IVerifyVO
* @return boolean
*/
private boolean isVerifyEnable(IVerifyVO vo1, IVerifyVO vo2, boolean bDebitLoop) {
if (bDebitLoop) {
UFDouble[] debit = new UFDouble[]{vo1.getDebit_Money_Y(), vo1.getDebit_Money_B()};
UFDouble[] credit = new UFDouble[]{vo2.getCredit_Money_Y(), vo2.getCredit_Money_B()};
for (int i = 0; i < debit.length; i++) {
if ((debit[i].doubleValue() > 0 && credit[i].doubleValue() > 0)
|| (debit[i].doubleValue() < 0 && credit[i].doubleValue() < 0)
|| (debit[i].equals(ZERO) && credit[i].equals(ZERO))) {// 本币原币不一致的可能原币已等于0而本币不等于0
continue;
} else {
return false;
}
}
} else {
UFDouble[] credit = new UFDouble[]{vo1.getCredit_Money_Y(), vo1.getCredit_Money_B()};
UFDouble[] debit = new UFDouble[]{vo2.getDebit_Money_Y(), vo2.getDebit_Money_B()};
for (int i = 0; i < debit.length; i++) {
if ((debit[i].doubleValue() > 0 && credit[i].doubleValue() > 0)
|| (debit[i].doubleValue() < 0 && credit[i].doubleValue() < 0)
|| (debit[i].equals(ZERO) && credit[i].equals(ZERO))) {
continue;
} else {
return false;
}
}
}
return true;
}
/**
* @param @param ufdMny 未核销余额
* @param @return
* @return boolean
* @throws
* @Title: isSettled
* @Description: TODO(判断一条数据的原币和组织本币金额是否已全部核销完)
*/
private boolean isSettled(UFDouble[] ufdMny) {
if (ufdMny == null || ufdMny.length < 1) {
return true;
}
for (int i = 0; i < ufdMny.length; i++) {
if (!ufdMny[i].equals(ZERO)) {
return false;
}
}
return true;
}
/* ( Javadoc)
* <p>Title: getPk_accountingbook</p>
* <p>Description: </p>
* @return
* @see nc.vo.glrp.com.verify.IMatchTool#getPk_accountingbook()
*/
@Override
public String getPk_accountingbook() {
return this.pk_accountingbook;
}
/* ( Javadoc)
* <p>Title: setPk_accountingbook</p>
* <p>Description: </p>
* @param pkAccountingbook
* @see nc.vo.glrp.com.verify.IMatchTool#setPk_accountingbook(java.lang.String)
*/
@Override
public void setPk_accountingbook(String pkAccountingbook) {
this.pk_accountingbook = pkAccountingbook;
}
/**
* @param @param verifyMoney 本次核销金额
* @param @param voDebit 借方数据
* @param @param voCredit 贷方数据
* @param @return
* @return List<ILogVO> 返回借贷方核销日志VO集合
* @throws
* @Title: generateLogs
* @Description: TODO(生成一条借方和一条贷方数据核销的核销日志)
*/
private List<ILogVO> generateLogs(UFDouble[] verifyMoney, IVerifyVO voDebit, IVerifyVO voCredit) {
List<ILogVO> logVOList = new ArrayList<ILogVO>();
// 借方数据核销日志
ILogVO debitLog = LogVOFactory.getNewLogVO(getRule().getLogClassName());
debitLog.setBatchID(getRule().getBatchId());
debitLog.setVerifyObjPK(getRule().getDebitVerifyObj());
debitLog.setOppVerifyObjPK(getRule().getCreditVerifyObj());
debitLog.setData(voDebit);
debitLog.setDataPk(voDebit.getPk());
debitLog.setDebitBalaMny_y(verifyMoney[0]);
debitLog.setDebitBalaMny_b(verifyMoney[1]);
debitLog.setCreDitBalaMny_b(ZERO);
debitLog.setCreDitBalaMny_y(ZERO);
debitLog.setFlag(MainFlag);// todo 1
debitLog.setOppData(voCredit);
debitLog.setOppDataPk(voCredit.getPk());
debitLog.setOprDate(getOprDate());
debitLog.setOprPk(getPk_user());
// debitLog.setOprType(ILogVO.VERIFY);
debitLog.setOprType(2); // 异币种核销 todo 1
debitLog.setPairNum(getRule().getNextPairNum());
debitLog.setPk_group(getPk_group());
logVOList.add(debitLog);
// 贷方数据核销日志
ILogVO creditLog = LogVOFactory.getNewLogVO(getRule().getLogClassName());
creditLog.setBatchID(getRule().getBatchId());
creditLog.setVerifyObjPK(getRule().getCreditVerifyObj());
creditLog.setOppVerifyObjPK(getRule().getDebitVerifyObj());
creditLog.setData(voCredit);
creditLog.setDataPk(voCredit.getPk());
creditLog.setDebitBalaMny_b(ZERO);
creditLog.setDebitBalaMny_y(ZERO);
creditLog.setCreDitBalaMny_y(verifyMoney[0]);
creditLog.setCreDitBalaMny_b(verifyMoney[1]);
creditLog.setFlag(AssFlag);// todo 1
creditLog.setOppData(voDebit);
creditLog.setOppDataPk(voDebit.getPk());
creditLog.setOprDate(getOprDate());
creditLog.setOprPk(getPk_user());
// creditLog.setOprType(ILogVO.VERIFY);
creditLog.setOprType(2); // 异币种核销 todo 1
creditLog.setPairNum(getRule().getPairNum());
creditLog.setPk_group(getPk_group());
logVOList.add(creditLog);
return logVOList;
}
}
/*kOCZ2rdZQh+oO4IyZSOXGg0LHHc/urYgAeiJss7fL0A=*/

View File

@ -0,0 +1,47 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nccloud.pubitf.gl.lightgl.verify;
import nc.vo.gl.pubvoucher.DetailVO;
import nc.vo.pub.BusinessException;
import nccloud.dto.gl.verify.VerifyInfoWebVO;
import java.util.List;
import java.util.Map;
public interface IVerifyWebService {
Map<String, Object> queryRtVerifyData(String var1, String var2, String var3) throws BusinessException;
Map<String, Object> queryVerifyDatas(Map<String, Object> var1) throws BusinessException;
Map<String, Object> onVerify(VerifyInfoWebVO var1) throws BusinessException;
Map<String, Object> onVerifyMul(VerifyInfoWebVO var1) throws BusinessException;
Map<String, Object> onAutoVerify(VerifyInfoWebVO var1) throws BusinessException;
Map<String, Object> queryHistoryDatas(Map<String, Object> var1) throws BusinessException;
Map<String, Object> unVerify(VerifyInfoWebVO var1) throws BusinessException;
Map<String, Object> onRedBlue(VerifyInfoWebVO var1) throws BusinessException;
Map<String, Object> onAutoRedBlue(VerifyInfoWebVO var1) throws BusinessException;
Map<String, Object> verBalanceQuery(Map<String, Object> var1) throws BusinessException;
Map<String, Object> verDetailQuery(Map<String, Object> var1) throws BusinessException;
Map<String, Object> verDetailLinkQuery(VerifyInfoWebVO var1) throws BusinessException;
Map<String, Object> onQuery(Map<String, Object> var1) throws BusinessException;
Map<String, Object> onDetailed(Map<String, Object> var1) throws BusinessException;
Map<String, Object> refVerify(DetailVO var1, String var2) throws BusinessException;
List<Object> queryBadAccountRate(String var1) throws BusinessException;
}