diff --git a/arap/src/client/nccloud/web/arap/arappub/viewhandler/bodyafter/BodyCuspAfterEditHandler.java b/arap/src/client/nccloud/web/arap/arappub/viewhandler/bodyafter/BodyCuspAfterEditHandler.java new file mode 100644 index 0000000..38d79e8 --- /dev/null +++ b/arap/src/client/nccloud/web/arap/arappub/viewhandler/bodyafter/BodyCuspAfterEditHandler.java @@ -0,0 +1,925 @@ +package nccloud.web.arap.arappub.viewhandler.bodyafter; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import org.apache.commons.lang3.ArrayUtils; +import com.google.gson.Gson; +import nc.itf.arap.fieldmap.IBillFieldGet; +import nc.itf.bd.bankacc.cust.ICustBankaccQueryService; +import nc.itf.gl.api.IResourceService; +import nc.md.model.MetaDataException; +import nc.md.persist.framework.IMDPersistenceQueryService; +import nc.pubitf.arap.pub.ICurrentVersionService; +import nc.pubitf.uapbd.ICustomerPubService; +import nc.pubitf.uapbd.ISupplierPubService; +import nc.vo.arap.basebill.BaseItemVO; +import nc.vo.arap.pay.PayBillVO; +import nc.vo.arap.pub.BillEnumCollection.ObjType; +import nc.vo.arap.utils.StringUtil; +import nc.vo.bd.bankaccount.BankAccSubVO; +import nc.vo.bd.bankaccount.cust.CustBankaccUnionVO; +import nc.vo.bd.cust.CustomerVO; +import nc.vo.bd.cust.finance.CustFinanceVO; +import nc.vo.bd.cust.saleinfo.CustsaleVO; +import nc.vo.bd.supplier.SupplierVO; +import nc.vo.bd.supplier.finance.SupFinanceVO; +import nc.vo.gl.openapi.GLQueryWebVO; +import nc.vo.org.AccountingBookVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDate; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nccloud.api.rest.utils.NCCRestUtils; +import nccloud.framework.service.ServiceLocator; +import nccloud.framework.web.ui.model.row.Cell; +import nccloud.framework.web.ui.pattern.billcard.CardBodyAfterEditEvent; +import nccloud.framework.web.ui.pattern.grid.ChangedRow; +import nccloud.web.arap.arappub.util.AfterEditEventUtil; +import nccloud.web.arap.arappub.util.ArapUiUtil; +import nccloud.web.arap.arappub.util.BillEventHandlerUtil; + +/** + * @author hanzhhm + */ +public class BodyCuspAfterEditHandler extends BodyBatchBillHandler { + /** + * 220201/224103/224105/224101科目的期末余额 + */ + private String endlocamount220201 = ""; + private String endlocamount224103 = ""; + private String endlocamount224105 = ""; + private String endlocamount224101 = ""; + IMDPersistenceQueryService imDPersistenceService = ServiceLocator.find(IMDPersistenceQueryService.class); + + @Override + public void handle() { + String key = getKey(); + String pk_billtype = (String) getHeadValue(IBillFieldGet.PK_BILLTYPE); + Integer objtype = (Integer) getBodyValue(IBillFieldGet.OBJTYPE); + + if (IBillFieldGet.CUSTOMER.equals(key) || IBillFieldGet.CUSTOMER_V.equals(key)) { + // 增加客户版本化处理 qinwfh 2021-07-05 + // 分别处理编辑客户和客户版本字段 + UFDate thisbilldate = getHeadValue(IBillFieldGet.BILLDATE); + Map customerPKtoVIDMap = new HashMap();// 接收根据customer返回的customer对customer_v的MAP值 + Map customerVIDtoPKMap = new HashMap();// 接收根据customer_v和单击日期返回的customer_v对customer的MAP值 + if (IBillFieldGet.CUSTOMER_V.equals(key)) { + // 根据客户customer_v去获取对应的customer + String[] customer_vid = new String[] { (String) getBodyValue(IBillFieldGet.CUSTOMER_V) }; + if (StringUtil.isEmptyWithTrim(customer_vid[0])) { + setBodyValue(null, IBillFieldGet.CUSTOMER); + } else { + try { + customerVIDtoPKMap = ServiceLocator.find(ICustomerPubService.class) + .getCustomerOIDByVid(customer_vid); + } catch (BusinessException e1) { + ExceptionUtils.wrappException(e1); + } + // 设置表头和表体客户CUSTOMER_V字段值 + if (customerVIDtoPKMap != null && !customerVIDtoPKMap.isEmpty() && customerVIDtoPKMap.size() > 0) { + setBodyValue(customerVIDtoPKMap.get(customer_vid[0]), IBillFieldGet.CUSTOMER); + } + } + } else { + // 根据客户customer和时间去获取对应最新的customer_v + String customer_oid = (String) getBodyValue(IBillFieldGet.CUSTOMER); + if (StringUtil.isEmptyWithTrim(customer_oid)) { + setBodyValue(null, IBillFieldGet.CUSTOMER_V); + } else { + Map customerAndDateMap = new HashMap(); + customerAndDateMap.put(customer_oid, thisbilldate); + try { + customerPKtoVIDMap = ServiceLocator.find(ICustomerPubService.class) + .getCustomerLastVIDByOidAndDate(customerAndDateMap); + } catch (BusinessException e1) { + ExceptionUtils.wrappException(e1); + } + // 设置表头和表体客户CUSTOMER字段值 + // 同时,考虑升级问题,历史数据可能没有Vid值,则设置为oid + if (customerPKtoVIDMap != null && customerPKtoVIDMap.size() != 0) { + setBodyValue(customerPKtoVIDMap.get(customer_oid), IBillFieldGet.CUSTOMER_V); + } else { + setBodyValue(customer_oid, IBillFieldGet.CUSTOMER_V); + } + } + } + super.doChange4RateWithCuSp(); + + // setHeadValueByFirstLine(IBillFieldGet.CUSTOMER); + if (IBillFieldGet.F2.equals(pk_billtype) || IBillFieldGet.F0.equals(pk_billtype)) { + if (ObjType.SUPPLIER.VALUE.intValue() != objtype) { + Map customerMap = new HashMap(); + try { + customerMap = setBodyChanel(); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + + // 带出财务信息页签 默认 币种、收付款协议、业务员、部门 modify by zhongfsh3 + // 2019-06-01 + CustomerVO customerVO = (customerMap != null && customerMap.get("customerVO") != null) + ? (CustomerVO) customerMap.get("customerVO") + : null; + if (customerVO != null) { + CustFinanceVO[] finances = customerVO.getFinances(); + if (finances != null && finances.length > 0) { + String pk_org = (String) getHeadValue(IBillFieldGet.PK_ORG); + + for (CustFinanceVO custFinanceVO : finances) { + // 根据组织匹配过滤客户基本档案财务页签 + if (custFinanceVO.getPk_org().equals(pk_org)) { + String pk_currtype = custFinanceVO.getPk_currtype1(); + String pk_payitem = custFinanceVO.getPk_payterm(); + String pk_resppsn = custFinanceVO.getPk_resppsn1(); + String pk_respdept = custFinanceVO.getPk_respdept1(); + String pk_respdept_v = null; + if (pk_respdept != null) { + try { + UFDate billdate = getHeadValue(IBillFieldGet.BILLDATE); + ICurrentVersionService service = ServiceLocator + .find(ICurrentVersionService.class); + pk_respdept_v = service.queryDeptPkVidByPKAndDate(pk_respdept, billdate); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + // 值不为空且发生改变,自动带出 + if (pk_currtype != null + && !Objects.equals(pk_currtype, getBodyValue(BaseItemVO.PK_CURRTYPE))) { + bodyAfterEdit(pk_currtype, IBillFieldGet.PK_CURRTYPE); + } + if (pk_payitem != null + && !Objects.equals(pk_payitem, getBodyValue(BaseItemVO.PK_PAYTERM))) { + bodyAfterEdit(pk_payitem, IBillFieldGet.PK_PAYTERM); + } + if (pk_resppsn != null + && !Objects.equals(pk_resppsn, getBodyValue(BaseItemVO.PK_PSNDOC))) { + bodyAfterEdit(pk_resppsn, IBillFieldGet.PK_PSNDOC); + } + if (pk_respdept != null + && !Objects.equals(pk_respdept, getBodyValue(BaseItemVO.PK_DEPTID))) { + bodyAfterEdit(pk_respdept, IBillFieldGet.PK_DEPTID); + } + if (pk_respdept_v != null && !Objects.equals(pk_respdept_v, + getBodyValue(IBillFieldGet.PK_DEPTID_V))) { + bodyAfterEdit(pk_respdept_v, IBillFieldGet.PK_DEPTID_V); + } + break; + } + } + } + } + // 清空付款银行 + if (isClear(IBillFieldGet.PAYACCOUNT, IBillFieldGet.CUSTOMER)) { + setBodyValue(null, IBillFieldGet.PAYACCOUNT); // 2012版本判断银行账户是否停用,停用清空 + } + setBodyValue(null, IBillFieldGet.FREECUST); + // setHeadValueByFirstLine(IBillFieldGet.CUSTOMER); + String cusBankAccs = (customerMap != null && customerMap.get("cusBankaccs") != null) + ? (String) customerMap.get("cusBankaccs") + : null; + String defaultBankSubAccCurrtype = (customerMap != null + && customerMap.get("defaultBankSubAccCurrtype") != null) + ? ((BankAccSubVO) customerMap.get("defaultBankSubAccCurrtype")).getPk_currtype() + : null; + String editRowCurrtype = (String) getBodyValueByRowIndex(IBillFieldGet.PK_CURRTYPE, getRowindex()); + if (null != defaultBankSubAccCurrtype && null != editRowCurrtype + && defaultBankSubAccCurrtype.equals(editRowCurrtype)) { + setBodyValue(cusBankAccs, IBillFieldGet.PAYACCOUNT); + } + // setHeadValueByFirstLine(IBillFieldGet.PAYACCOUNT); + } + // 订单客户与发票客户不做联动 addBy baoxina 恢复by baoxina + setBodyValue(getBodyValue(IBillFieldGet.CUSTOMER), IBillFieldGet.ORDERCUBASDOC); + // 编辑客户版本字段时联动订单客户版本字段 qinwfh 2021-07-06 + setBodyValue(getBodyValue(IBillFieldGet.CUSTOMER_V), IBillFieldGet.ORDERCUBASDOC_V); + } else if ((IBillFieldGet.F1.equals(pk_billtype) || IBillFieldGet.F3.equals(pk_billtype))) { + if (ObjType.CUSTOMER.VALUE.intValue() == objtype) { + Map customerMap = new HashMap(); + try { + customerMap = setBodyChanel(); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + + // 带出财务信息页签 默认 币种、收付款协议、业务员、部门 modify by zhongfsh3 + // 2019-06-01 + CustomerVO customerVO = (customerMap != null && customerMap.get("customerVO") != null) + ? (CustomerVO) customerMap.get("customerVO") + : null; + if (customerVO != null) { + CustFinanceVO[] finances = customerVO.getFinances(); + if (finances != null && finances.length > 0) { + String pk_org = (String) getHeadValue(IBillFieldGet.PK_ORG); + + for (CustFinanceVO custFinanceVO : finances) { + // 根据组织匹配过滤客户基本档案财务页签 + if (custFinanceVO.getPk_org().equals(pk_org)) { + String pk_currtype = custFinanceVO.getPk_currtype1(); + String pk_payitem = custFinanceVO.getPk_payterm(); + String pk_resppsn = custFinanceVO.getPk_resppsn1(); + String Pk_respdept = custFinanceVO.getPk_respdept1(); + String Pk_respdept_v = null; + if (Pk_respdept != null) { + try { + UFDate billdate = getHeadValue(IBillFieldGet.BILLDATE); + ICurrentVersionService service = ServiceLocator + .find(ICurrentVersionService.class); + Pk_respdept_v = service.queryDeptPkVidByPKAndDate(Pk_respdept, billdate); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + // 值不为空且发生改变,自动带出 + if (pk_currtype != null + && !Objects.equals(pk_currtype, getBodyValue(BaseItemVO.PK_CURRTYPE))) { + bodyAfterEdit(pk_currtype, IBillFieldGet.PK_CURRTYPE); + } + if (pk_payitem != null + && !Objects.equals(pk_payitem, getBodyValue(BaseItemVO.PK_PAYTERM))) { + bodyAfterEdit(pk_payitem, IBillFieldGet.PK_PAYTERM); + } + if (pk_resppsn != null + && !Objects.equals(pk_resppsn, getBodyValue(BaseItemVO.PK_PSNDOC))) { + bodyAfterEdit(pk_resppsn, IBillFieldGet.PK_PSNDOC); + } + if (Pk_respdept != null + && !Objects.equals(Pk_respdept, getBodyValue(BaseItemVO.PK_DEPTID))) { + bodyAfterEdit(Pk_respdept, IBillFieldGet.PK_DEPTID); + } + if (Pk_respdept_v != null && !Objects.equals(Pk_respdept_v, + getBodyValue(IBillFieldGet.PK_DEPTID_V))) { + bodyAfterEdit(Pk_respdept_v, IBillFieldGet.PK_DEPTID_V); + } + break; + } + } + } + } + // 清空收款银行 + if (isClear(IBillFieldGet.RECACCOUNT, IBillFieldGet.CUSTOMER)) { + setBodyValue(null, IBillFieldGet.RECACCOUNT);// 2012版本 + } + setBodyValue(null, IBillFieldGet.FREECUST); + // setHeadValueByFirstLine(IBillFieldGet.CUSTOMER); + String cusBankAccs = (customerMap != null && customerMap.get("cusBankaccs") != null) + ? (String) customerMap.get("cusBankaccs") + : null; + String defaultBankSubAccCurrtype = (customerMap != null + && customerMap.get("defaultBankSubAccCurrtype") != null) + ? ((BankAccSubVO) customerMap.get("defaultBankSubAccCurrtype")).getPk_currtype() + : null; + String editRowCurrtype = (String) getBodyValueByRowIndex(IBillFieldGet.PK_CURRTYPE, getRowindex()); + if (null != defaultBankSubAccCurrtype && null != editRowCurrtype + && defaultBankSubAccCurrtype.equals(editRowCurrtype)) { + setBodyValue(cusBankAccs, IBillFieldGet.RECACCOUNT); + } + } + } + + // 订单客户与发票客户不做联动 addBy baoxina 恢复by baoxina + // setBodyValue(getBodyValue(IBillFieldGet.CUSTOMER), + // IBillFieldGet.ORDERCUBASDOC); + // 编辑客户版本字段时联动订单客户版本字段 qinwfh 2021-07-06 + // setBodyValue(getBodyValue(IBillFieldGet.CUSTOMER_V), + // IBillFieldGet.ORDERCUBASDOC_V); + } else if (IBillFieldGet.SUPPLIER.equals(key) || IBillFieldGet.SUPPLIER_V.equals(key)) { + // 增加供应商版本化处理 + // 增加版本化处理 qinwfh 2021-07-05 + // 分别处理编辑供应商和供应商版本字段 + Map supplierPKtoVIDMap = new HashMap();// 接收根据supplier返回的supplier对supplier_v的MAP值 + Map supplierVIDtoPKMap = new HashMap();// 接收根据supplier_v和单击日期返回的supplier_v对customer的MAP值 + UFDate thisbilldate = getHeadValue(IBillFieldGet.BILLDATE); + if (IBillFieldGet.SUPPLIER_V.equals(key)) { + // 根据供应商supplier_v去获取对应的supplier + String[] supplier_vid = new String[] { (String) getBodyValue(IBillFieldGet.SUPPLIER_V) }; + if (StringUtil.isEmptyWithTrim(supplier_vid[0])) { + setBodyValue(null, IBillFieldGet.SUPPLIER); + setBodyValue(null, "def30"); + setBodyValue(null, "def31"); + setBodyValue(null, "def32"); + setBodyValue(null, "def33"); + } else { + try { + supplierVIDtoPKMap = ServiceLocator.find(ISupplierPubService.class) + .getSupplierOIDByVid(supplier_vid); + } catch (BusinessException e1) { + ExceptionUtils.wrappException(e1); + } + // 设置表头和表体供应商SUPPLIER_V字段值 + if (supplierVIDtoPKMap != null && !supplierVIDtoPKMap.isEmpty() && supplierVIDtoPKMap.size() > 0) { + setBodyValue(supplierVIDtoPKMap.get(supplier_vid[0]), IBillFieldGet.SUPPLIER); + } + } + } else { + // 根据供应商supplier和时间去获取对应最新的supplier_v + String supplier_oid = (String) getBodyValue(IBillFieldGet.SUPPLIER); + if (StringUtil.isEmptyWithTrim(supplier_oid)) { + setBodyValue(null, IBillFieldGet.SUPPLIER_V); + setBodyValue(null, "def30"); + setBodyValue(null, "def31"); + setBodyValue(null, "def32"); + setBodyValue(null, "def33"); + } else { + Map supplierAndDateMap = new HashMap(); + supplierAndDateMap.put(supplier_oid, thisbilldate); + try { + supplierPKtoVIDMap = ServiceLocator.find(ISupplierPubService.class) + .getSupplierLastVIDByOidAndDate(supplierAndDateMap); + } catch (BusinessException e1) { + ExceptionUtils.wrappException(e1); + } + // 设置表头和表体供应商SUPPLIER_V字段值 + // 考虑升级问题,当Vid为空时,将oid值赋值给vid + if (supplierPKtoVIDMap != null && supplierPKtoVIDMap.size() != 0) { + setBodyValue(supplierPKtoVIDMap.get(supplier_oid), IBillFieldGet.SUPPLIER_V); + } else { + setBodyValue(supplier_oid, IBillFieldGet.SUPPLIER_V); + } + } + } + super.doChange4RateWithCuSp(); + + if (IBillFieldGet.F3.equals(pk_billtype) || IBillFieldGet.F1.equals(pk_billtype)) { + if (ObjType.CUSTOMER.VALUE.intValue() != objtype) { + String supplier = (String) getBodyValue(IBillFieldGet.SUPPLIER); + + // 带出财务信息页签 默认 币种、收付款协议、业务员、部门 add by zhongfsh3 2019-06-01 + SupplierVO supplierVO = BillEventHandlerUtil.getSupplierVO(supplier); + if (supplierVO != null && supplierVO.getSupfinance() != null) { + SupFinanceVO[] financeVOs = supplierVO.getSupfinance(); + String pk_org = (String) getBodyValue(IBillFieldGet.PK_ORG); + if (financeVOs != null && financeVOs.length > 0) { + for (SupFinanceVO financeVO : financeVOs) { + // 根据组织匹配过滤客户基本档案财务页签 + if (financeVO.getPk_org().equals(pk_org)) { + String pk_currtype = financeVO.getPk_currtype(); + String pk_payitem = financeVO.getPk_payterm(); + String pk_resppsn = financeVO.getPk_resppsn(); + String Pk_respdept = financeVO.getPk_respdept(); + String Pk_respdept_v = null; + if (Pk_respdept != null) { + try { + UFDate billdate = getHeadValue(IBillFieldGet.BILLDATE); + ICurrentVersionService service = ServiceLocator + .find(ICurrentVersionService.class); + Pk_respdept_v = service.queryDeptPkVidByPKAndDate(Pk_respdept, billdate); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + // 值不为空且发生改变,自动带出 + if (pk_currtype != null + && !Objects.equals(pk_currtype, getBodyValue(BaseItemVO.PK_CURRTYPE))) { + bodyAfterEdit(pk_currtype, IBillFieldGet.PK_CURRTYPE); + } + if (pk_payitem != null + && !Objects.equals(pk_payitem, getBodyValue(BaseItemVO.PK_PAYTERM))) { + bodyAfterEdit(pk_payitem, IBillFieldGet.PK_PAYTERM); + } + if (pk_resppsn != null + && !Objects.equals(pk_resppsn, getBodyValue(BaseItemVO.PK_PSNDOC))) { + bodyAfterEdit(pk_resppsn, IBillFieldGet.PK_PSNDOC); + } + if (Pk_respdept != null + && !Objects.equals(Pk_respdept, getBodyValue(BaseItemVO.PK_DEPTID))) { + bodyAfterEdit(Pk_respdept, IBillFieldGet.PK_DEPTID); + } + if (Pk_respdept_v != null && !Objects.equals(Pk_respdept_v, + getBodyValue(IBillFieldGet.PK_DEPTID_V))) { + bodyAfterEdit(Pk_respdept_v, IBillFieldGet.PK_DEPTID_V); + } + break; + } + } + + } + } + // 泰开项目客开,带出供应商辅助余额111 + // 核算账薄编码 + if (supplierVO != null) { + PayBillVO billvo = (PayBillVO) aggvo.getParent(); + String pk_relorg = billvo.getPk_fiorg(); + String accbookCode = getAccbookCode(pk_relorg); + // 单据日期 + UFDate billdate = billvo.getBilldate(); + // 当前时间 + Long serverDate = System.currentTimeMillis(); + // 如果有单据号则为修改,修改时单据日期选择现在 + // 单据号 + String billno = billvo.getBillno(); + if (billno != null) { + billdate = new UFDate(serverDate); + } + getAccountingSubject(accbookCode, billdate, supplierVO.getCode(), supplierVO.getName()); + setBodyValue(endlocamount220201, "def30"); + setBodyValue(endlocamount224103, "def31"); + setBodyValue(endlocamount224105, "def32"); + setBodyValue(endlocamount224101, "def33"); + } + // 清空收款银行 + if (isClear(IBillFieldGet.RECACCOUNT, IBillFieldGet.SUPPLIER)) { + setBodyValue(null, IBillFieldGet.RECACCOUNT);// 2012版本 + } + setBodyValue(null, IBillFieldGet.FREECUST); + // setHeadValueByFirstLine(IBillFieldGet.SUPPLIER); + + String supBankAccs = BillEventHandlerUtil.getDefaultSupBankAccs(supplier); + String defaultBankSubAccCurrtype = BillEventHandlerUtil + .getDefaultBankSubAccCurrtypeByAccpk(supBankAccs); + String editRowCurrtype = (String) getBodyValueByRowIndex(IBillFieldGet.PK_CURRTYPE, getRowindex()); + String headCurrtype = (String) getHeadValue(IBillFieldGet.PK_CURRTYPE); + String headCustomer = (String) getHeadValue(IBillFieldGet.CUSTOMER); + if (null != defaultBankSubAccCurrtype && null != editRowCurrtype + && defaultBankSubAccCurrtype.equals(editRowCurrtype)) { + setBodyValue(supBankAccs, IBillFieldGet.RECACCOUNT); + } + if (headCurrtype != null && headCustomer != null && supplier != null && editRowCurrtype != null) { + if (editRowCurrtype.equals(headCurrtype) && supplier.equals(headCustomer)) { + if (defaultBankSubAccCurrtype != null && headCurrtype.equals(defaultBankSubAccCurrtype)) { + // setHeadValueByFirstLine(IBillFieldGet.RECACCOUNT); + } + } + } + // setHeadValueByFirstLine(IBillFieldGet.RECACCOUNT); + } + // 订单客户与发票客户不做联动 addBy baoxina 恢复by baoxina + setBodyValue(getBodyValue(IBillFieldGet.SUPPLIER), IBillFieldGet.ORDERCUBASDOC); + // 编辑客户版本字段时联动订单客户版本字段 qinwfh 2021-07-06 + setBodyValue(getBodyValue(IBillFieldGet.SUPPLIER_V), IBillFieldGet.ORDERCUBASDOC_V); + + } else if ((IBillFieldGet.F2.equals(pk_billtype) || IBillFieldGet.F0.equals(pk_billtype))) { + if (ObjType.SUPPLIER.VALUE.intValue() == objtype) { + String supplier = (String) getBodyValue(IBillFieldGet.SUPPLIER); + + // 带出财务信息页签 默认 币种、收付款协议、业务员、部门 add by zhongfsh3 2019-06-01 + SupplierVO supplierVO = BillEventHandlerUtil.getSupplierVO(supplier); + if (supplierVO != null && supplierVO.getSupfinance() != null) { + SupFinanceVO[] financeVOs = supplierVO.getSupfinance(); + String pk_org = (String) getBodyValue(IBillFieldGet.PK_ORG); + if (financeVOs != null && financeVOs.length > 0) { + for (SupFinanceVO financeVO : financeVOs) { + // 根据组织匹配过滤客户基本档案财务页签 + if (financeVO.getPk_org().equals(pk_org)) { + String pk_currtype = financeVO.getPk_currtype(); + String pk_payitem = financeVO.getPk_payterm(); + String pk_resppsn = financeVO.getPk_resppsn(); + String Pk_respdept = financeVO.getPk_respdept(); + String Pk_respdept_v = null; + if (Pk_respdept != null) { + try { + UFDate billdate = getHeadValue(IBillFieldGet.BILLDATE); + ICurrentVersionService service = ServiceLocator + .find(ICurrentVersionService.class); + Pk_respdept_v = service.queryDeptPkVidByPKAndDate(Pk_respdept, billdate); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + // 值不为空且发生改变,自动带出 + if (pk_currtype != null + && !Objects.equals(pk_currtype, getBodyValue(BaseItemVO.PK_CURRTYPE))) { + bodyAfterEdit(pk_currtype, IBillFieldGet.PK_CURRTYPE); + } + if (pk_payitem != null + && !Objects.equals(pk_payitem, getBodyValue(BaseItemVO.PK_PAYTERM))) { + bodyAfterEdit(pk_payitem, IBillFieldGet.PK_PAYTERM); + } + if (pk_resppsn != null + && !Objects.equals(pk_resppsn, getBodyValue(BaseItemVO.PK_PSNDOC))) { + bodyAfterEdit(pk_resppsn, IBillFieldGet.PK_PSNDOC); + } + if (Pk_respdept != null + && !Objects.equals(Pk_respdept, getBodyValue(BaseItemVO.PK_DEPTID))) { + bodyAfterEdit(Pk_respdept, IBillFieldGet.PK_DEPTID); + } + if (Pk_respdept_v != null && !Objects.equals(Pk_respdept_v, + getBodyValue(IBillFieldGet.PK_DEPTID_V))) { + bodyAfterEdit(Pk_respdept_v, IBillFieldGet.PK_DEPTID_V); + } + break; + } + } + + } + } + + // 清空收款银行 + if (isClear(IBillFieldGet.PAYACCOUNT, IBillFieldGet.SUPPLIER)) { + setBodyValue(null, IBillFieldGet.PAYACCOUNT);// 2012 + } + setBodyValue(null, IBillFieldGet.FREECUST); + // setHeadValueByFirstLine(IBillFieldGet.SUPPLIER); + + String supBankAccs = BillEventHandlerUtil.getDefaultSupBankAccs(supplier); + String defaultBankSubAccCurrtype = BillEventHandlerUtil + .getDefaultBankSubAccCurrtypeByAccpk(supBankAccs); + String editRowCurrtype = (String) getBodyValueByRowIndex(IBillFieldGet.PK_CURRTYPE, getRowindex()); + String headCurrtype = (String) getHeadValue(IBillFieldGet.PK_CURRTYPE); + String headCustomer = (String) getHeadValue(IBillFieldGet.CUSTOMER); + if (null != defaultBankSubAccCurrtype && null != editRowCurrtype + && defaultBankSubAccCurrtype.equals(editRowCurrtype)) { + setBodyValue(supBankAccs, IBillFieldGet.PAYACCOUNT); + } + if (headCurrtype != null && headCustomer != null && supplier != null && editRowCurrtype != null) { + if (editRowCurrtype.equals(headCurrtype) && supplier.equals(headCustomer)) { + if (defaultBankSubAccCurrtype != null && headCurrtype.equals(defaultBankSubAccCurrtype)) { + // setHeadValueByFirstLine(IBillFieldGet.RECACCOUNT); + } + } + } + } + } + // 订单客户与发票客户不做联动 addBy baoxina 恢复by baoxina + // setBodyValue(getBodyValue(IBillFieldGet.SUPPLIER), + // IBillFieldGet.ORDERCUBASDOC); + // 编辑客户版本字段时联动订单客户版本字段 qinwfh 2021-07-06 + // setBodyValue(getBodyValue(IBillFieldGet.SUPPLIER_V), + // IBillFieldGet.ORDERCUBASDOC_V); + } + } + + /** + * nccloud/api/gl/accountrep/assbalance 查询辅助余额接口.查220201/224103/224105的科目的期末余额 + * + * @param accbookCode 辅助核算编码 + * @param billdate 单据日期 + * @param checkvaluecode 供应商编码 + * @param checkvaluename 供应商名称 + */ + public void getAccountingSubject(String acccode, UFDate date, String code, String name) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + String strdate = formatter.format(date.toDate()); + + endlocamount220201 = getendlocamountBy(queryAssBalance(getRequest(acccode, strdate, code, name))); + endlocamount224103 = getendlocamountBy(queryAssBalance(getRequest1(acccode, strdate, code, name))); + endlocamount224105 = getendlocamountBy(queryAssBalance(getRequest2(acccode, strdate, code, name))); + endlocamount224101 = getendlocamountBy(queryAssBalance(getRequest3(acccode, strdate, code, name))); + } + + /** + * 解析json获取期末余额 + * + * @param json + * @return 期末余额 endlocamount + */ + public String getendlocamountBy(List> data) { + if (data == null) { + return null; + } + String str2 = (String) data.get(0).get("endlocamount"); + String str3 = (String) data.get(0).get("endorint"); + if (str2 == null || "".equals(str2)) { + str2 = "0.0"; + } else { + if ("借".equals(str3)) { + str2 = "-" + str2; + } + } + return str2; + } + + public List> queryAssBalance(String json) { + NCCRestUtils.initInvocationInfo(); + GLQueryWebVO qryWebVO = (GLQueryWebVO) new Gson().fromJson(json, GLQueryWebVO.class); + List> data = null; + try { + data = ServiceLocator.find(IResourceService.class).queryAssBalanceByVO(qryWebVO); + } catch (Exception e) { + e.printStackTrace(); + } + if (data == null) { + return null; + } + return data; + } + + private static String getRequest(String accbookCode, String strdate, String code, String name) { + Map map = new HashMap(); + List accbookcodeList = new ArrayList(); + accbookcodeList.add(accbookCode); + map.put("accbookCode", accbookcodeList); + map.put("queryByPeriod", "false"); + map.put("inclUntallyed", "true"); + map.put("inclTransfer", "true"); + map.put("inclError", "true"); + map.put("inclReclassify", "true"); + map.put("date", strdate); + map.put("endDate", strdate); + map.put("currtypeCode", "本币"); + + List> queryObjList = new ArrayList>(); + Map quyMap = new HashMap(); + Map typeMap = new HashMap(); + + typeMap.put("checktypecode", "会计科目"); + typeMap.put("checktypename", "会计科目"); + quyMap.put("checktype", typeMap); + List> valueList = new ArrayList>(); + Map valueMap = new HashMap(); + + valueMap.put("checkvaluecode", "220201"); + valueMap.put("checkvaluename", "应付款"); + valueList.add(valueMap); + quyMap.put("checkvalue", valueList); + queryObjList.add(quyMap); + // + Map quyMap1 = new HashMap(); + Map typeMap1 = new HashMap(); + + typeMap1.put("checktypecode", "0019"); + typeMap1.put("checktypename", "供应商档案"); + quyMap1.put("checktype", typeMap1); + List> valueList1 = new ArrayList>(); + Map valueMap1 = new HashMap(); + + valueMap1.put("checkvaluecode", code); + valueMap1.put("checkvaluename", name); + valueList1.add(valueMap1); + quyMap1.put("checkvalue", valueList1); + queryObjList.add(quyMap1); + map.put("queryObj", queryObjList); + return new Gson().toJson(map); + } + + private static String getRequest1(String accbookCode, String strdate, String code, String name) { + Map map = new HashMap(); + List accbookcodeList = new ArrayList(); + accbookcodeList.add(accbookCode); + map.put("accbookCode", accbookcodeList); + map.put("queryByPeriod", "false"); + map.put("inclUntallyed", "true"); + map.put("inclTransfer", "true"); + map.put("inclError", "true"); + map.put("inclReclassify", "true"); + map.put("date", strdate); + map.put("endDate", strdate); + map.put("currtypeCode", "本币"); + + List> queryObjList = new ArrayList>(); + Map quyMap = new HashMap(); + Map typeMap = new HashMap(); + + typeMap.put("checktypecode", "会计科目"); + typeMap.put("checktypename", "会计科目"); + quyMap.put("checktype", typeMap); + List> valueList = new ArrayList>(); + Map valueMap = new HashMap(); + + valueMap.put("checkvaluecode", "224103"); + valueMap.put("checkvaluename", "单位"); + valueList.add(valueMap); + quyMap.put("checkvalue", valueList); + queryObjList.add(quyMap); + // + Map quyMap1 = new HashMap(); + Map typeMap1 = new HashMap(); + + typeMap1.put("checktypecode", "0019"); + typeMap1.put("checktypename", "供应商档案"); + quyMap1.put("checktype", typeMap1); + List> valueList1 = new ArrayList>(); + Map valueMap1 = new HashMap(); + + valueMap1.put("checkvaluecode", code); + valueMap1.put("checkvaluename", name); + valueList1.add(valueMap1); + quyMap1.put("checkvalue", valueList1); + queryObjList.add(quyMap1); + map.put("queryObj", queryObjList); + return new Gson().toJson(map); + } + + private static String getRequest2(String accbookCode, String strdate, String code, String name) { + Map map = new HashMap(); + List accbookcodeList = new ArrayList(); + accbookcodeList.add(accbookCode); + map.put("accbookCode", accbookcodeList); + map.put("queryByPeriod", "false"); + map.put("inclUntallyed", "true"); + map.put("inclTransfer", "true"); + map.put("inclError", "true"); + map.put("inclReclassify", "true"); + map.put("date", strdate); + map.put("endDate", strdate); + map.put("currtypeCode", "本币"); + + List> queryObjList = new ArrayList>(); + Map quyMap = new HashMap(); + Map typeMap = new HashMap(); + + typeMap.put("checktypecode", "会计科目"); + typeMap.put("checktypename", "会计科目"); + quyMap.put("checktype", typeMap); + List> valueList = new ArrayList>(); + Map valueMap = new HashMap(); + + valueMap.put("checkvaluecode", "224105"); + valueMap.put("checkvaluename", "运费"); + valueList.add(valueMap); + quyMap.put("checkvalue", valueList); + queryObjList.add(quyMap); + // + Map quyMap1 = new HashMap(); + Map typeMap1 = new HashMap(); + + typeMap1.put("checktypecode", "0019"); + typeMap1.put("checktypename", "供应商档案"); + quyMap1.put("checktype", typeMap1); + List> valueList1 = new ArrayList>(); + Map valueMap1 = new HashMap(); + + valueMap1.put("checkvaluecode", code); + valueMap1.put("checkvaluename", name); + valueList1.add(valueMap1); + quyMap1.put("checkvalue", valueList1); + queryObjList.add(quyMap1); + map.put("queryObj", queryObjList); + return new Gson().toJson(map); + } + + private static String getRequest3(String accbookCode, String strdate, String code, String name) { + Map map = new HashMap(); + List accbookcodeList = new ArrayList(); + accbookcodeList.add(accbookCode); + map.put("accbookCode", accbookcodeList); + map.put("queryByPeriod", "false"); + map.put("inclUntallyed", "true"); + map.put("inclTransfer", "true"); + map.put("inclError", "true"); + map.put("inclReclassify", "true"); + map.put("date", strdate); + map.put("endDate", strdate); + map.put("currtypeCode", "本币"); + + List> queryObjList = new ArrayList>(); + Map quyMap = new HashMap(); + Map typeMap = new HashMap(); + + typeMap.put("checktypecode", "会计科目"); + typeMap.put("checktypename", "会计科目"); + quyMap.put("checktype", typeMap); + List> valueList = new ArrayList>(); + Map valueMap = new HashMap(); + + valueMap.put("checkvaluecode", "224101"); + valueMap.put("checkvaluename", "保证金"); + valueList.add(valueMap); + quyMap.put("checkvalue", valueList); + queryObjList.add(quyMap); + // + Map quyMap1 = new HashMap(); + Map typeMap1 = new HashMap(); + + typeMap1.put("checktypecode", "0019"); + typeMap1.put("checktypename", "供应商档案"); + quyMap1.put("checktype", typeMap1); + List> valueList1 = new ArrayList>(); + Map valueMap1 = new HashMap(); + + valueMap1.put("checkvaluecode", code); + valueMap1.put("checkvaluename", name); + valueList1.add(valueMap1); + quyMap1.put("checkvalue", valueList1); + queryObjList.add(quyMap1); + map.put("queryObj", queryObjList); + return new Gson().toJson(map); + } + + /** + * + * @return 获取核算账薄code + */ + public String getAccbookCode(String pk_relorg) { + List bills = null; + String sql = "pk_relorg = '" + pk_relorg + "' and dr = 0 "; + String accbookCode = ""; + try { + bills = (List) imDPersistenceService.queryBillOfVOByCond(AccountingBookVO.class, sql, + false); + if (bills.size() != 0) { + accbookCode = bills.get(0).getCode(); + } + } catch (MetaDataException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return accbookCode; + + } + + private Map setBodyChanel() throws BusinessException { + String pk_customer = (String) getBodyValue(IBillFieldGet.CUSTOMER); + String pk_org = (String) getHeadValue(IBillFieldGet.PK_ORG); + String chanel = null; + Map customerMap = new HashMap(); + Map> cuspAfterEditHandler = new HashMap>(); + if (null != pk_customer) { + cuspAfterEditHandler = BillEventHandlerUtil.getCuspAfterEditHandler(); + if (null != cuspAfterEditHandler) { + customerMap = cuspAfterEditHandler.get(pk_customer + pk_org); + if (customerMap == null) { + BillEventHandlerUtil.setCuspAfterEditHandler(pk_customer, pk_org); + cuspAfterEditHandler = BillEventHandlerUtil.getCuspAfterEditHandler(); + customerMap = cuspAfterEditHandler.get(pk_customer + pk_org); + } + } + if (customerMap != null && customerMap.get("custsaleVOs") != null) { + CustsaleVO[] vos = (CustsaleVO[]) customerMap.get("custsaleVOs"); + if (null != vos && vos.length > 0 && null != vos[0]) { + chanel = vos[0].getChannel(); + } + } + } + for (int i = 0; i < aggvo.getChildrenVO().length; i++) { + setBodyValue(chanel, IBillFieldGet.SO_TRANSTYPE); + } + return customerMap; + } + + /** + * 设置表体值并触发编辑事件 + * + * @param newValue + * @param fieldName + * @author zhongfsh3 + * @date 2019年6月12日 + */ + private void bodyAfterEdit(Object newValue, String fieldName) { + // 设置表体值 + setBodyValue(newValue, fieldName); + // 触发编辑事件 + Cell oldCell = getEvent().getCard().getBody().getModel().getRows()[getRowindex()].getCell(fieldName); + Cell newCell = ArapUiUtil.copyCell(oldCell); + newCell.setValue(newValue); + ChangedRow changeRow = new ChangedRow(newCell, oldCell, + getEvent().getCard().getBody().getModel().getRows()[getRowindex()].getRowid()); + CardBodyAfterEditEvent event = new CardBodyAfterEditEvent(fieldName, getEvent().getCard(), getRowindex(), + new ChangedRow[] { changeRow }); + AfterEditEventUtil.bodyAfterEdit(event, aggvo, getEventInfo()); + } + + private List keys = Arrays.asList(new String[] { IBillFieldGet.CUSTOMER, IBillFieldGet.SUPPLIER, + IBillFieldGet.SUPPLIER_V, IBillFieldGet.CUSTOMER_V }); + + @Override + protected Collection getFilterKey() { + return keys; + } + + /** + * 编辑供应商后,银行账户是否停用bd_bankaccbas(银行账户)bd_bankaccsub(客商银行账户子户) + * + * @param key银行账户相关字段 ,editkey 编辑的字段 + * @return + * @throws BusinessException + */ + private boolean isClear(String key, String editKey) { + boolean flag = true; + String keyValue = (String) getBodyValue(key); + String editValue = (String) getBodyValue(editKey);// 编辑的字段的值 + try { + CustBankaccUnionVO[] custBank = ServiceLocator.find(ICustBankaccQueryService.class) + .queryCustBankaccUnionVOsByCust(editValue, IBillFieldGet.SUPPLIER.equals(editKey) ? 3 : 1, true); + if (ArrayUtils.isEmpty(custBank)) { + return true; + } + + for (CustBankaccUnionVO vo : custBank) { + if (vo.getBankaccbasVO() == null) { + continue; + } + Integer enable = (Integer) vo.getAttributeValue("a.enablestate"); + if (enable == null || (enable != null && enable != 2)) { + continue; + } + String pk_bank = (String) vo.getAttributeValue("pk_bankaccsub"); + if (StringUtil.isEmptyWithTrim(pk_bank)) { + continue; + } + if (pk_bank.equals(keyValue)) { + flag = false; + break; + } + } + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + + } + if (editValue == null) { + return true; + } + return flag; + + } + +}