diff --git a/uapbd/src/private/nccloud/api/uapbd/customer/tms/listener/kejian/AssignCustomerListener.java b/uapbd/src/private/nccloud/api/uapbd/customer/tms/listener/kejian/AssignCustomerListener.java index e2fdd69..d2c50e9 100644 --- a/uapbd/src/private/nccloud/api/uapbd/customer/tms/listener/kejian/AssignCustomerListener.java +++ b/uapbd/src/private/nccloud/api/uapbd/customer/tms/listener/kejian/AssignCustomerListener.java @@ -8,12 +8,16 @@ import nc.bs.businessevent.bd.BDCommonEvent; import nc.bs.dao.BaseDAO; import nc.bs.framework.common.InvocationInfoProxy; import nc.bs.uapbd.util.BaseOpenApiReq; +import nc.jdbc.framework.processor.ColumnListProcessor; import nc.vo.bd.cust.CustomerVO; import nc.vo.org.OrgVO; import nc.vo.pub.BusinessException; +import nccloud.baseapp.core.log.NCCForUAPLogger; +import nccloud.vo.sql.util.InSqlUtil; import java.util.Arrays; import java.util.Collection; +import java.util.List; /** * 创建客户后,自动分配组织 @@ -34,6 +38,10 @@ public class AssignCustomerListener implements IBusinessListener { public void assignOrgApi(CustomerVO customerVO) throws BusinessException { String[] customerPks = {customerVO.getPk_customer()}; + String sql = "select code from bd_customer where pk_customer = '[pk_customer]'"; + sql = sql.replace("[pk_customer]", customerVO.getPk_customer()); + List pks = (List) (new BaseDAO()).executeQuery(sql, new ColumnListProcessor()); + NCCForUAPLogger.debug("pks = " + pks); OrgVO[] virtulaOrg = getVirtulaOrg(); String[] assignOrgPks = Arrays.stream(virtulaOrg).map(OrgVO::getPk_org).toArray(String[]::new); JSONObject param = new JSONObject(); diff --git a/uapbd/src/public/nc/bs/pub/action/N_10KH_APPROVE.java b/uapbd/src/public/nc/bs/pub/action/N_10KH_APPROVE.java new file mode 100644 index 0000000..a0a0ecd --- /dev/null +++ b/uapbd/src/public/nc/bs/pub/action/N_10KH_APPROVE.java @@ -0,0 +1,391 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.pub.action; + +import com.alibaba.fastjson.JSONObject; +import nc.bs.bd.cust.baseinfo.validator.CustomerVersionValidator; +import nc.bs.bd.pub.util.BaseDocVoConvertUtil; +import nc.bs.dao.BaseDAO; +import nc.bs.framework.common.InvocationInfoProxy; +import nc.bs.framework.common.NCLocator; +import nc.bs.framework.json.core.exception.ExceptionUtils; +import nc.bs.pub.compiler.AbstractCompiler2; +import nc.bs.pub.compiler.IWorkFlowRet; +import nc.bs.pub.filesystem.IFileSystemService; +import nc.bs.uapbd.util.BaseOpenApiReq; +import nc.bs.uif2.validation.ValidationException; +import nc.bs.uif2.validation.ValidationFailure; +import nc.itf.bd.bankacc.cust.ICustBankaccQueryService; +import nc.itf.bd.bankacc.cust.ICustBankaccService; +import nc.itf.bd.bankacc.cust.ICustPfBankaccService; +import nc.itf.bd.cust.assign.ICustAssignService; +import nc.itf.bd.cust.baseinfo.ICustBaseInfoQueryService; +import nc.itf.bd.cust.baseinfo.ICustBaseInfoService; +import nc.itf.bd.cust.custaddress.ICustAddressQueryService; +import nc.itf.bd.cust.custaddress.ICustAddressService; +import nc.itf.bd.cust.pf.ICustPfAddressService; +import nc.itf.bd.cust.pf.ICustomerPfQueryService; +import nc.itf.bd.cust.pf.ICustomerPfService; +import nc.uap.utils.ResHelper; +import nc.vo.bd.bankaccount.cust.CustBankaccUnionVO; +import nc.vo.bd.cust.CustCountrytaxesVO; +import nc.vo.bd.cust.CustlinkmanVO; +import nc.vo.bd.cust.CustomerVO; +import nc.vo.bd.cust.custaddress.CustPfaddressVO; +import nc.vo.bd.cust.custaddress.CustaddressVO; +import nc.vo.bd.cust.pf.AggCustomerPfVO; +import nc.vo.bd.cust.pf.CustomerPfBaseVO; +import nc.vo.bd.cust.pf.CustomerPfVO; +import nc.vo.bd.meta.BatchOperateVO; +import nc.vo.ml.NCLangRes4VoTransl; +import nc.vo.org.OrgVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.BusinessRuntimeException; +import nc.vo.pub.compiler.PfParameterVO; +import nc.vo.uap.pf.PFBusinessException; +import nccloud.commons.lang.ArrayUtils; +import nccloud.pubitf.baseapp.apprbac.IDataPermPubService4NCC; +import nccloud.pubitf.platform.attachment.IAttachmentService; +import nccloud.pubitf.uapbd.forrpbill.IUapbd4RPbillSyncService; + +import java.util.*; + +public class N_10KH_APPROVE extends AbstractCompiler2 { + public N_10KH_APPROVE() { + } + + public Object runComClass(PfParameterVO vo) throws BusinessException { + try { + super.m_tmpVo = vo; + String cuserid = InvocationInfoProxy.getInstance().getUserId(); + String pk_group = InvocationInfoProxy.getInstance().getGroupId(); + IDataPermPubService4NCC dataPerService = (IDataPermPubService4NCC) NCLocator.getInstance().lookup(IDataPermPubService4NCC.class); + boolean userHasPermission = dataPerService.isUserHasPermission(cuserid, "customerpf", "approve", pk_group, ((AggCustomerPfVO) this.getVo()).getParentVO()); + if (!userHasPermission) { + ExceptionUtils.wrapBusinessException(ResHelper.getString("nccriauapbd0", "0nccriauapbd00215")); + } + + IWorkFlowRet woekFlowRet = (IWorkFlowRet) this.procActionFlow(vo); + ICustomerPfService pfService = (ICustomerPfService) NCLocator.getInstance().lookup(ICustomerPfService.class); + ICustomerPfQueryService qryPfService = (ICustomerPfQueryService) NCLocator.getInstance().lookup(ICustomerPfQueryService.class); + if (woekFlowRet == null) { + CustomerPfVO pfvo = (CustomerPfVO) ((AggCustomerPfVO) this.getVo()).getParentVO(); + CustomerPfBaseVO baseVO = qryPfService.queryCustomerPfBaseVOByPk(pfvo.getPk_customerpf_base()); + CustomerVO customer = BaseDocVoConvertUtil.customerPfBaseVO2CustomerVO(baseVO); + customer.setPk_customerpf(pfvo.getPrimaryKey()); + + try { + Integer applyType = pfvo.getApply_type(); + if (applyType != 2 && applyType != 5) { + customer.setIsCreateCust(-1); + CustCountrytaxesVO[] curTaxVOs = customer.getCusttaxtypes(); + if (curTaxVOs != null) { + for (CustCountrytaxesVO taxVO : curTaxVOs) { + taxVO.setStatus(2); + } + } + + CustlinkmanVO[] curLinkmanVOs = customer.getCustcontacts(); + if (curLinkmanVOs != null) { + for (CustlinkmanVO linkVO : curLinkmanVOs) { + linkVO.setStatus(2); + } + } + + customer = ((ICustBaseInfoService) NCLocator.getInstance().lookup(ICustBaseInfoService.class)).insertCustomerVO(customer, true); + // 分配客户的组织 + String[] customerPks = {customer.getPk_customer()}; + OrgVO[] virtulaOrg = getVirtulaOrg(); + String[] assignOrgPks = Arrays.stream(virtulaOrg).map(OrgVO::getPk_org).toArray(String[]::new); + NCLocator.getInstance().lookup(ICustAssignService.class).assignCustomerByPks(customerPks, assignOrgPks, null); + + ICustBankaccService uptBankService = (ICustBankaccService) NCLocator.getInstance().lookup(ICustBankaccService.class); + CustBankaccUnionVO[] newUnionVOs = ((ICustPfBankaccService) NCLocator.getInstance().lookup(ICustPfBankaccService.class)).queryCustBankaccUnionVOsByCustAndPfType(customer.getPk_customer(), 1, 1); + uptBankService.insertCustBankaccs(newUnionVOs); + this.dealCustAddress(customer); + } else { + customer.setTs(baseVO.getOldts()); + CustomerVersionValidator custversion = new CustomerVersionValidator(pfvo); + ValidationFailure vfail = custversion.validate(customer); + if (vfail != null) { + List fs = new ArrayList(); + fs.add(vfail); + throw new ValidationException(fs); + } + + ICustBaseInfoService service = (ICustBaseInfoService) NCLocator.getInstance().lookup(ICustBaseInfoService.class); + this.dealCustomerBank(customer); + this.dealCustAddressOfEditOrVersion(customer, applyType); + customer.setStatus(1); + ICustBaseInfoQueryService qryService = (ICustBaseInfoQueryService) NCLocator.getInstance().lookup(ICustBaseInfoQueryService.class); + CustomerVO originVO = qryService.queryDataByPkSet(new String[]{customer.getPk_customer()})[0]; + this.dealCountryTaxesVO(customer, originVO); + this.dealLinkManVO(customer, originVO); + if (applyType == 5) { + service.createCustomerVersion(customer); + } else { + service.updateCustomerVO(customer, false); + } + } + + if (applyType == 1 || applyType == 2) { + if (applyType == 2) { + String applyRootPath = "uapbd/e4f48eaf-5567-4383-a370-a59cb3e8a451/" + customer.getPrimaryKey(); + IFileSystemService fileMngService = (IFileSystemService) NCLocator.getInstance().lookup(IFileSystemService.class); + fileMngService.deleteNCFileNode(applyRootPath); + } + + String rootPath = "uapbd/6d6d4a15-d9bb-4b0c-9da3-80760872bf87/" + pfvo.getPrimaryKey(); + String destDirPath = "uapbd/e4f48eaf-5567-4383-a370-a59cb3e8a451/" + customer.getPrimaryKey(); + IAttachmentService aService = (IAttachmentService) NCLocator.getInstance().lookup(IAttachmentService.class); + aService.copyTo(rootPath, destDirPath); + } + } catch (BusinessException e) { + String msg = NCLangRes4VoTransl.getNCLangRes().getStrByID("10140custsup", "010140custsup0061", (String) null, new String[]{e.getMessage()}); + throw new BusinessRuntimeException(msg, e); + } + + CustomerPfBaseVO pfBaseVO = qryPfService.queryCustomerPfBaseVOByPk(pfvo.getPk_customerpf_base()); + pfBaseVO.setCode(customer.getCode()); + pfBaseVO.setPk_customer_v(customer.getPk_customer_v()); + pfvo.setCustomercode(customer.getCode()); + pfvo.setMemo((String) null); + pfvo = pfService.updateCustomerPfVOByActionWithBaseInfo("approve", pfvo, pfBaseVO); + // this.assignCustomerToOrg(pfvo, customer); + this.getVo().setParentVO(pfvo); + ((IUapbd4RPbillSyncService) NCLocator.getInstance().lookup(IUapbd4RPbillSyncService.class)).syncData("10KH", this.getVo(), "Approve"); + return this.getVo(); + } else { + CustomerPfVO pfvo = (CustomerPfVO) ((AggCustomerPfVO) woekFlowRet.m_inVo).getParentVO(); + pfvo = pfService.updateCustomerPfVOByAction("unapprove", pfvo); + ((AggCustomerPfVO) woekFlowRet.m_inVo).setParentVO(pfvo); + return woekFlowRet; + } + } catch (Exception ex) { + if (ex instanceof BusinessException) { + throw (BusinessException) ex; + } else { + throw new PFBusinessException(ex.getMessage(), ex); + } + } + } + + private void dealCustomerBank(CustomerVO customer) throws BusinessException { + ICustBankaccQueryService bankQryService = (ICustBankaccQueryService) NCLocator.getInstance().lookup(ICustBankaccQueryService.class); + CustBankaccUnionVO[] originVOs = bankQryService.queryCustBankaccUnionVOsByCust(customer.getPk_customer(), 1, true); + CustBankaccUnionVO[] applyBankVOs = ((ICustPfBankaccService) NCLocator.getInstance().lookup(ICustPfBankaccService.class)).queryCustBankaccUnionVOsByCustAndPfType(customer.getPk_customer(), 1, 1); + Map bankMap = new HashMap(); + if (originVOs != null) { + for (CustBankaccUnionVO bankVO : originVOs) { + bankMap.put(bankVO.getBankaccbasVO().getPrimaryKey(), bankVO); + } + } + + Map newBankMap = new HashMap(); + List insertBankList = new ArrayList(); + List updateBankList = new ArrayList(); + List deleteBankList = new ArrayList(); + if (applyBankVOs != null) { + for (CustBankaccUnionVO bankVO : applyBankVOs) { + String key = bankVO.getBankaccbasVO().getPrimaryKey(); + newBankMap.put(key, bankVO); + if (bankMap.containsKey(key)) { + updateBankList.add(bankVO); + } else { + bankVO.getCustbankVO().setPk_cust(customer.getPk_customer()); + insertBankList.add(bankVO); + } + } + } + + if (originVOs != null) { + for (CustBankaccUnionVO bankVO : originVOs) { + if (!newBankMap.containsKey(bankVO.getBankaccbasVO().getPrimaryKey())) { + deleteBankList.add(bankVO); + } + } + } + + ICustBankaccService uptBankService = (ICustBankaccService) NCLocator.getInstance().lookup(ICustBankaccService.class); + if (insertBankList.size() > 0) { + uptBankService.insertCustBankaccs((CustBankaccUnionVO[]) insertBankList.toArray(new CustBankaccUnionVO[0])); + } + + if (updateBankList.size() > 0) { + uptBankService.updateCustBankaccsFromPf((CustBankaccUnionVO[]) updateBankList.toArray(new CustBankaccUnionVO[0])); + } + + } + + private void dealCustAddress(CustomerVO customer) throws BusinessException { + CustPfaddressVO[] pfAddressVOs = ((ICustPfAddressService) NCLocator.getInstance().lookup(ICustPfAddressService.class)).queryCustPfaddressVOs(customer.getPk_customer()); + if (!ArrayUtils.isEmpty(pfAddressVOs)) { + List list = new ArrayList(); + + for (CustPfaddressVO pfAddressVO : pfAddressVOs) { + CustaddressVO addressVO = (CustaddressVO) BaseDocVoConvertUtil.convertVO(pfAddressVO, new CustaddressVO()); + list.add(addressVO); + } + + BatchOperateVO bovo = new BatchOperateVO(); + bovo.setAddObjs(list.toArray(new CustaddressVO[0])); + ((ICustAddressService) NCLocator.getInstance().lookup(ICustAddressService.class)).batchSaveCashAccount(bovo); + } + } + + private void dealCustAddressOfEditOrVersion(CustomerVO customer, Integer applyType) throws Exception { + String pk_group = InvocationInfoProxy.getInstance().getGroupId(); + String var10000 = customer.getPk_customer(); + String condition = "pk_customer = '" + var10000 + "' and pk_org = '" + pk_group + "'"; + CustaddressVO[] custaddressVOs = ((ICustAddressQueryService) NCLocator.getInstance().lookup(ICustAddressQueryService.class)).queryCustAddressVOsByCondition(condition); + if (custaddressVOs != null && custaddressVOs.length > 0) { + BatchOperateVO bovo = new BatchOperateVO(); + bovo.setDelObjs(custaddressVOs); + ((ICustAddressService) NCLocator.getInstance().lookup(ICustAddressService.class)).batchSaveCashAccount(bovo); + } + + CustPfaddressVO[] pfAddressVOs = ((ICustPfAddressService) NCLocator.getInstance().lookup(ICustPfAddressService.class)).queryCustPfaddressVOs(customer.getPk_customer()); + if (!ArrayUtils.isEmpty(pfAddressVOs)) { + List list = new ArrayList(); + + for (CustPfaddressVO pfAddressVO : pfAddressVOs) { + CustaddressVO addressVO = (CustaddressVO) BaseDocVoConvertUtil.convertVO(pfAddressVO, new CustaddressVO()); + list.add(addressVO); + } + + BatchOperateVO bov = new BatchOperateVO(); + bov.setAddObjs(list.toArray(new CustaddressVO[0])); + ((ICustAddressService) NCLocator.getInstance().lookup(ICustAddressService.class)).batchSaveCashAccount(bov); + } + } + + private void dealCountryTaxesVO(CustomerVO customer, CustomerVO originVO) { + CustCountrytaxesVO[] originTaxVOs = originVO.getCusttaxtypes(); + Map oldTaxMap = new HashMap(); + if (originTaxVOs != null) { + for (CustCountrytaxesVO taxVO : originTaxVOs) { + oldTaxMap.put(taxVO.getPrimaryKey(), taxVO); + } + } + + CustCountrytaxesVO[] curTaxVOs = customer.getCusttaxtypes(); + Map taxMap = new HashMap(); + List taxList = new ArrayList(); + if (curTaxVOs != null) { + for (CustCountrytaxesVO taxVO : curTaxVOs) { + if (oldTaxMap.containsKey(taxVO.getPrimaryKey())) { + taxVO.setStatus(1); + } else { + taxVO.setStatus(2); + } + + taxMap.put(taxVO.getPrimaryKey(), taxVO); + taxList.add(taxVO); + } + } + + if (originTaxVOs != null) { + for (CustCountrytaxesVO taxVO : originTaxVOs) { + if (!taxMap.containsKey(taxVO.getPrimaryKey())) { + taxVO.setStatus(3); + taxList.add(taxVO); + } + } + } + + customer.setCusttaxtypes((CustCountrytaxesVO[]) taxList.toArray(new CustCountrytaxesVO[0])); + } + + private void dealLinkManVO(CustomerVO customer, CustomerVO originVO) { + CustlinkmanVO[] originLinkmanVOs = originVO.getCustcontacts(); + Map oldLinkmanMap = new HashMap(); + if (originLinkmanVOs != null) { + for (CustlinkmanVO linkmanVO : originLinkmanVOs) { + oldLinkmanMap.put(linkmanVO.getPrimaryKey(), linkmanVO); + } + } + + CustlinkmanVO[] curLinkmanVOs = customer.getCustcontacts(); + Map linkmanMap = new HashMap(); + List linkmanList = new ArrayList(); + if (curLinkmanVOs != null) { + for (CustlinkmanVO linkmanVO : curLinkmanVOs) { + if (oldLinkmanMap.containsKey(linkmanVO.getPrimaryKey())) { + linkmanVO.setStatus(1); + } else { + linkmanVO.setStatus(2); + } + + linkmanMap.put(linkmanVO.getPrimaryKey(), linkmanVO); + linkmanList.add(linkmanVO); + } + } + + if (originLinkmanVOs != null) { + for (CustlinkmanVO linkmanVO : originLinkmanVOs) { + if (!linkmanMap.containsKey(linkmanVO.getPrimaryKey())) { + linkmanVO.setStatus(3); + linkmanList.add(linkmanVO); + } + } + } + + customer.setCustcontacts((CustlinkmanVO[]) linkmanList.toArray(new CustlinkmanVO[0])); + } + + private void assignCustomerToOrg(CustomerPfVO pfvo, CustomerVO vo) throws BusinessException { + if (this.isOrgData(vo)) { + this.getAssignService().assignCustomerToSelfOrg(vo); + } else { + this.getAssignService().assignCustomerForPf(vo.getPk_customer(), pfvo.getPk_org(), (String[]) null); + } + + } + + private boolean isOrgData(CustomerVO vo) { + return !vo.getPk_group().equals(vo.getPk_org()) && !"GLOBLE00000000000000".equals(vo.getPk_org()); + } + + public void assignOrgApi(CustomerVO customerVO) throws BusinessException { + String[] customerPks = {customerVO.getCode()}; + OrgVO[] virtulaOrg = getVirtulaOrg(); + String[] assignOrgPks = Arrays.stream(virtulaOrg).map(OrgVO::getCode).toArray(String[]::new); + JSONObject param = new JSONObject(); + JSONObject ufinterfaceJson = new JSONObject(); + JSONObject dataJson = new JSONObject(); + dataJson.put("customer", customerPks); + dataJson.put("org", assignOrgPks); + + ufinterfaceJson.put("sender", "default"); + ufinterfaceJson.put("data", dataJson); + param.put("ufinterface", ufinterfaceJson); + BaseOpenApiReq req = new BaseOpenApiReq(); + req.assignOrgApi("/nccloud/api/uapbd/customermanageext/customer/assign", param); + } + + /** + * 查询组织信息 + * + * @author mzr + * @date 2025/05/29 + */ + public OrgVO[] getVirtulaOrg() throws BusinessException { + String groupID = InvocationInfoProxy.getInstance().getGroupId(); + // NCCForUAPLogger.debug("groupID = " + groupID); + // enablestate 启用状态 isbusinessunit 是否业务单元数据 + String condition = "pk_group = '" + groupID + "' and ENABLESTATE = '2' and isbusinessunit='Y'"; + Collection collection = (new BaseDAO()).retrieveByClause(OrgVO.class, condition, "code"); + return collection.toArray(new OrgVO[0]); + } + + private ICustAssignService getAssignService() { + return (ICustAssignService) NCLocator.getInstance().lookup(ICustAssignService.class); + } + + public String getCodeRemark() { + return "\tIWorkFlowRet woekFlowRet = (IWorkFlowRet) procActionFlow(vo);\n\t\t\tICustomerPfService pfService = NCLocator.getInstance().lookup(\n\t\t\t\t\tICustomerPfService.class);\n\t\t\tif (woekFlowRet == null) {\n\t\t\t\tCustomerPfVO pfvo = (CustomerPfVO) ((AggCustomerPfVO) getVo())\n\t\t\t\t\t\t.getParentVO();\n\t\t\t\tCustomerVO customer = (CustomerVO) pfvo.getCustomerinfo();\n\t\t\t\tcustomer.setPk_customerpf(pfvo.getPrimaryKey());\n\t\t\t\ttry {\n\t\t\t\t\tcustomer = NCLocator.getInstance().lookup(\n\t\t\t\t\t\t\tICustBaseInfoService.class).insertCustomerVO(\n\t\t\t\t\t\t\tcustomer, true);\n\t\t\t\t} catch (BusinessException e) {\n\t\t\t\t\tString msg = NCLangRes4VoTransl.getNCLangRes().getStrByID(\n\t\t\t\t\t\t\t\"10140custsup\", \"010140custsup0061\", null,\n\t\t\t\t\t\t\tnew String[] { e.getMessage() })/*@res 客户基本信息校验失败,详细信息如下:\n{0}*/;\n\t\t\t\t\tpfService.writeErrMsgToMemo_RequiresNew(pfvo\n\t\t\t\t\t\t\t.getPrimaryKey(), msg);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t\tpfvo.setCustomerinfo(customer);\n\t\t\t\tpfvo.setMemo(null);\n\t\t\t\tpfvo = pfService.updateCustomerPfVO(pfvo);\n\t\t\t\tgetVo().setParentVO(pfvo);\n\t\t\t\treturn getVo();\n\t\t\t} else {\n\t\t\t\tCustomerPfVO pfvo = (CustomerPfVO) ((AggCustomerPfVO) woekFlowRet.m_inVo)\n\t\t\t\t\t\t.getParentVO();\n\t\t\t\tpfvo = pfService.updateCustomerPfVO(pfvo);\n\t\t\t\t((AggCustomerPfVO) woekFlowRet.m_inVo).setParentVO(pfvo);\n\t\t\t\treturn woekFlowRet;\n\t\t\t}\n"; + } +}