diff --git a/ic/src/private/nc/bs/ic/m4i/sign/rule/AfterSignRuleSyncMesProcess.java b/ic/src/private/nc/bs/ic/m4i/sign/rule/AfterSignRuleSyncMesProcess.java index 4396110..a21bda9 100644 --- a/ic/src/private/nc/bs/ic/m4i/sign/rule/AfterSignRuleSyncMesProcess.java +++ b/ic/src/private/nc/bs/ic/m4i/sign/rule/AfterSignRuleSyncMesProcess.java @@ -100,6 +100,8 @@ public class AfterSignRuleSyncMesProcess implements IRule { requestData.put("operation_type", "I");// 固定给I 操作 requestData.put("info", info); obmlog.debug("其它出库requestData:" + requestData.toJSONString()); + IHttpPostOtherSys httpService = NCLocator.getInstance().lookup(IHttpPostOtherSys.class); + httpService.sendToExternalSystem("/GTHINKING/AjaxService/N_KCSJJS/101527004.ashx/gt_rec_api_qtckdj", requestData); } // 调拨出库/转库单 if (generalOutVO.getHead().getVtrantypecode().equals("4I-02")) { @@ -167,7 +169,7 @@ public class AfterSignRuleSyncMesProcess implements IRule { obmlog.debug("其它出库requestData:" + requestData.toJSONString()); IHttpPostOtherSys httpService = NCLocator.getInstance().lookup(IHttpPostOtherSys.class); - httpService.sendToExternalSystem("test", requestData); + httpService.sendToExternalSystem("/GTHINKING/AjaxService/N_KCSJJS/101527009.ashx/gt_rec_api_dbckdj", requestData); } } diff --git a/mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmApproveBP.java b/mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmApproveBP.java new file mode 100644 index 0000000..27a63fa --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmApproveBP.java @@ -0,0 +1,55 @@ +package nc.bs.mmpac.pickm.bp; + + +import nc.bs.mmpac.pickm.plugin.PickmPluginPoint; +import nc.bs.mmpac.pickm.rule.PickmApproveCheckStatusRule; +import nc.bs.mmpac.pickm.rule.PickmCheckAuditRule; +import nc.bs.mmpac.pickm.rule.PickmFbackflustimeCheckRule; +import nc.bs.mmpac.pickm.rule.PickmSetStatusRule; +import nc.bs.mmpub.rule.MMATOMaterialCheckRule; +import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule; +import nc.impl.pubapp.pattern.data.bill.template.UpdateBPTemplate; +import nc.impl.pubapp.pattern.data.bill.tool.BillTransferTool; +import nc.impl.pubapp.pattern.rule.ICompareRule; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.enumeration.FbillstatusEnum; + +public class PickmApproveBP { + + private void addAfterRule(CompareAroundProcesser processer) { + } + + private void addBeforeRule(CompareAroundProcesser processer) { + ICompareRule pickmstatusFilterRule = new PickmApproveCheckStatusRule(true); + processer.addBeforeRule(pickmstatusFilterRule); + IRule sagasCheckrule = new MMVOSagaFrozenValidateRule(true); + processer.addBeforeRule(sagasCheckrule); + IRule pickmAuditCheckRule = new PickmCheckAuditRule(); + processer.addBeforeRule(pickmAuditCheckRule); + IRule mmatoMaterialCheckRule = new MMATOMaterialCheckRule("cmaterialvid", (String) null, "cffileid"); + processer.addBeforeRule(mmatoMaterialCheckRule); + IRule checkFbackFlusTime = new PickmFbackflustimeCheckRule(); + processer.addBeforeRule(checkFbackFlusTime); + IRule pickmSetStatusRule = new PickmSetStatusRule(FbillstatusEnum.AUDIT_STATE); + processer.addBeforeRule(pickmSetStatusRule); + } + + public AggPickmVO[] batchApprovePickm(AggPickmVO[] vos) { + if (MMValueCheck.isEmpty(vos)) { + return null; + } else { + UpdateBPTemplate bpTemplate = new UpdateBPTemplate(PickmPluginPoint.APPROVE); + BillTransferTool transTool = new BillTransferTool(vos); + this.addBeforeRule(bpTemplate.getAroundProcesser()); + this.addAfterRule(bpTemplate.getAroundProcesser()); + AggPickmVO[] fullBills = (AggPickmVO[]) transTool.getClientFullInfoBill(); + AggPickmVO[] originBills = (AggPickmVO[]) transTool.getOriginBills(); + AggPickmVO[] retBills = (AggPickmVO[]) bpTemplate.update(fullBills, originBills); + return retBills; + } + } + +} diff --git a/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleSyncRZWMS.java b/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleSyncRZWMS.java new file mode 100644 index 0000000..8fe32a5 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleSyncRZWMS.java @@ -0,0 +1,127 @@ +package nc.bs.mmpac.pickm.bp.rule; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import nc.bs.dao.BaseDAO; +import nc.bs.logging.Log; +import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.jdbc.framework.processor.ColumnProcessor; +import nc.pubitf.para.SysInitQuery; +import nc.vo.bd.material.MaterialVO; +import nc.vo.bd.rt.rt0004.entity.RcVO; +import nc.vo.cmp.util.StringUtils; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmHeadVO; +import nc.vo.mmpac.pickm.entity.PickmItemVO; +import nc.vo.org.OrgVO; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.pub.SqlBuilder; +import nc.vo.scmpub.util.ArrayUtil; + +import java.util.ArrayList; +import java.util.List; + +public class AfterApproveRuleSyncRZWMS implements IRule { + + private static Log log = Log.getInstance("rzmomlog"); + + private static BaseDAO dao = new BaseDAO(); + + @Override + public void process(AggPickmVO[] vos) { + if (ArrayUtil.isEmpty(vos)) { + return; + } + try { + // 检查并筛选领料组织 + List newAggPickmVOS = checkAndFilterBillSrcOrg(vos); + if (newAggPickmVOS.isEmpty()) { + return; + } + pushToRZMOM(newAggPickmVOS.toArray(new AggPickmVO[0])); + } catch (Exception e) { + ExceptionUtils.wrappException(e); + } + } + + private void buildSyncData(PickmHeadVO head, PickmItemVO[] bodys, JSONArray details) throws BusinessException { + for (PickmItemVO body : bodys) { + JSONObject singleObj = new JSONObject(); + String vsourcebillcode = head.getVsourcebillcode(); + String wlbm_wbid = transferCodeByPk(MaterialVO.getDefaultTableName(), MaterialVO.CODE, MaterialVO.PK_MATERIAL, body.getCbmaterialvid()); + String scgx_wbid = transferCodeByPk(RcVO.getDefaultTableName(), RcVO.VRCCODE, RcVO.CRCID, head.getVstdprocid()); + String wbid = vsourcebillcode + "_" + wlbm_wbid + "_" + scgx_wbid; + + singleObj.put("scgx_wbid", scgx_wbid); // 第三方系统使用工序id + singleObj.put("scjh_wbid", vsourcebillcode); // 第三方系统生产计划ID + singleObj.put("dwyl", body.getNplanoutastnum()); // 单位用量 + singleObj.put("djyl", body.getNplanoutastnum()); // 单据用量 + singleObj.put("clyl", body.getNplanoutastnum()); // 材料用量 + singleObj.put("wlbm_wbid", wlbm_wbid); // 第三方系统材料id + singleObj.put("wbid", wbid); // 第三方系统主键id + + details.add(singleObj); + + } + } + + private List checkAndFilterBillSrcOrg(AggPickmVO[] aggPickmVOS) throws BusinessException { + List aggvoList = new ArrayList<>(); + for (AggPickmVO aggvo : aggPickmVOS) { + String pkOrg = aggvo.getParentVO().getPk_org(); // 假设领料组织在表头 + String orgCode = transferCodeByPk(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); + if ("30401".equals(orgCode)) { // 示例组织编码 + aggvoList.add(aggvo); + } + } + return aggvoList; + } + + private void pushToRZMOM(AggPickmVO[] aggPickmVOS) throws BusinessException { + String rzwmsip = SysInitQuery.getParaString("GLOBLE00000000000000", "RZWMSIP"); + JSONObject jsonObject = new JSONObject(); + JSONObject data = new JSONObject(); + JSONObject dataIn = new JSONObject(); + JSONObject dataIn2 = new JSONObject(); + JSONArray details = new JSONArray(); + jsonObject.put("dataflow", "泰开BIP→RZMOMv6"); + jsonObject.put("actionCode", "cpfhtzdb"); + + for (AggPickmVO aggPickmVO : aggPickmVOS) { + PickmHeadVO head = aggPickmVO.getParentVO(); + PickmItemVO[] bodys = (PickmItemVO[]) aggPickmVO.getChildrenVO(); + buildSyncData(head, bodys, details); + } + dataIn2.put("Details", details); + dataIn.put("Data", dataIn2); + data.put("data", dataIn); + jsonObject.put("data", data); + log.error("生产BOW推送锐制请求报文:" + jsonObject.toJSONString()); + String result = ThirdPartyPostRequestUtil.sendPostRequest(rzwmsip, jsonObject.toJSONString()); + JSONObject resultObj = JSONObject.parseObject(result); + if (resultObj == null || !"true".equals(resultObj.getString("success"))) { + String errorMsg = resultObj == null ? "接口返回为空" : resultObj.getString("msg"); + throw new BusinessException("RZ同步失败,原因:" + errorMsg); + } + } + + private String transferCodeByPk(String tableName, String selectField, String pkField, String pk) throws BusinessException { + if (StringUtils.isEmpty(pk)) { + return null; + } + SqlBuilder sqlBuilder = new SqlBuilder(); + sqlBuilder.append(" select " + selectField); + sqlBuilder.append(" from " + tableName); + sqlBuilder.append(" where "); + sqlBuilder.append(pkField, pk); + Object o = dao.executeQuery(sqlBuilder.toString(), new ColumnProcessor()); + if (o == null) { + throw new BusinessException("未查询到编码信息,sql【" + sqlBuilder + "】"); + } + return o.toString(); + } + +} diff --git a/sc/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java b/sc/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java new file mode 100644 index 0000000..bb8e7c5 --- /dev/null +++ b/sc/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java @@ -0,0 +1,141 @@ +package nc.bs.sc.m61.referred.rule.pm; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import nc.bs.dao.BaseDAO; +import nc.bs.logging.Log; +import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.jdbc.framework.processor.ColumnProcessor; +import nc.pubitf.para.SysInitQuery; +import nc.vo.bd.material.MaterialVO; +import nc.vo.bd.psn.PsndocVO; +import nc.vo.bd.stordoc.StordocVO; +import nc.vo.bd.supplier.SupplierVO; +import nc.vo.cmp.util.StringUtils; +import nc.vo.org.OrgVO; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.pub.SqlBuilder; +import nc.vo.sc.m61.entity.SCOrderHeaderVO; +import nc.vo.sc.m61.entity.SCOrderItemVO; +import nc.vo.sc.m61.entity.SCOrderVO; +import nc.vo.scmpub.util.ArrayUtil; + +import java.util.ArrayList; +import java.util.List; + +public class AfterApproceRuleSyncRZWMSProcess implements IRule { + + private static Log log = Log.getInstance("rzmomlog"); + + private static BaseDAO dao = new BaseDAO(); + + @Override + public void process(SCOrderVO[] vos) { + if (ArrayUtil.isEmpty(vos)) { + return; + } + try { + //检查并筛选销售出库单据为互感器公司 + List newSCOrderVOS = checkAndFilterBillSrcOrg(vos); + if (newSCOrderVOS == null || newSCOrderVOS.size() < 1) { + return; + } + pushToRZMOM(newSCOrderVOS.toArray(new SCOrderVO[0])); + } catch (Exception e) { + ExceptionUtils.wrappException(e); + } + } + + private void buildSyncData(SCOrderHeaderVO head, SCOrderItemVO[] bodys, JSONArray details) throws BusinessException { + + for (SCOrderItemVO body : bodys) { + JSONObject singleObj = new JSONObject(); + + // 单据类型 + singleObj.put("cgjh_wbid", body.getVsrctrantype()); + singleObj.put("cgxh", body.getVsrcrowno()); + singleObj.put("cgbh", body.getVsrccode()); + singleObj.put("bzsm", body.getVbmemo()); + singleObj.put("cght_wbid", head.getVbillcode()); + singleObj.put("htxsbh", head.getVbillcode()); + // 供应商 + singleObj.put("zbxx_gycs_wbid", transferCodeByPk(SupplierVO.getDefaultTableName(), SupplierVO.CODE, SupplierVO.PK_SUPPLIER, head.getPk_supplier())); + // 仓库 + singleObj.put("sdck", transferCodeByPk(StordocVO.getDefaultTableName(), StordocVO.CODE, StordocVO.PK_STORDOC, body.getPk_recvstordoc())); + // 物料 + singleObj.put("wlbm_wbid", transferCodeByPk(MaterialVO.getDefaultTableName(), MaterialVO.CODE, MaterialVO.PK_MATERIAL, body.getPk_material())); + + singleObj.put("cgsl", body.getNqtunitnum()); + singleObj.put("jhrq", body.getDplanarrvdate()); + singleObj.put("zbxx_cgrq", head.getDbilldate().toString()); + singleObj.put("cgrq", head.getDbilldate()).toString(); + + singleObj.put("htxh", body.getCrowno()); + // 业务员 + singleObj.put("zbxx_cgy_wbid", transferCodeByPk(PsndocVO.getDefaultTableName(), PsndocVO.CODE, PsndocVO.PK_PSNDOC, head.getCemployeeid())); + + details.add(singleObj); + } + } + + private List checkAndFilterBillSrcOrg(SCOrderVO[] SCOrderVOS) throws BusinessException { + List aggvoList = new ArrayList<>(); + for (SCOrderVO aggvo : SCOrderVOS) { + String pkOrg = aggvo.getParentVO().getPk_org(); + String orgCode = transferCodeByPk(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); + if ("30401".equals(orgCode)) { + aggvoList.add(aggvo); + } + } + return aggvoList; + } + + private void pushToRZMOM(SCOrderVO[] SCOrderVOS) throws BusinessException { + String rzwmsip = SysInitQuery.getParaString("GLOBLE00000000000000", "RZWMSIP"); + JSONObject jsonObject = new JSONObject(); + JSONObject data = new JSONObject(); + JSONObject dataIn = new JSONObject(); + JSONObject dataIn2 = new JSONObject(); + JSONArray details = new JSONArray(); + jsonObject.put("dataflow", "泰开BIP→RZMOMv6"); + jsonObject.put("actionCode", "cpfhtzdb"); + //单笔/批量按明细传 + for (SCOrderVO SCOrderVO : SCOrderVOS) { + SCOrderHeaderVO head = SCOrderVO.getParentVO(); + SCOrderItemVO[] bodys = SCOrderVO.getChildrenVO(); + // 构建需要同步的数据 + buildSyncData(head, bodys, details); + } + dataIn2.put("Details", details); + dataIn.put("Data", dataIn2); + data.put("data", dataIn); + jsonObject.put("data", data); + log.error("委外订单推送锐制请求报文:" + jsonObject.toJSONString()); + String result = ThirdPartyPostRequestUtil.sendPostRequest(rzwmsip, jsonObject.toJSONString()); + JSONObject resultObj = JSONObject.parseObject(result); + if ("false".equals(resultObj.getString("success"))) { + throw new BusinessException("RZMOM同步失败,原因:" + resultObj.getString("msg")); + } + } + + private String transferCodeByPk(String tableName, String selectField, String pkField, String pk) throws BusinessException { + if (StringUtils.isEmpty(pk)) { + return null; + } + SqlBuilder sqlBuilder = new SqlBuilder(); + sqlBuilder.append(" select " + selectField); + sqlBuilder.append(" from " + tableName); + sqlBuilder.append(" where "); + sqlBuilder.append(pkField, pk); + Object o = dao.executeQuery(sqlBuilder.toString(), new ColumnProcessor()); + if (o == null) { + throw new BusinessException("未查询到编码信息,sql【" + sqlBuilder + "】"); + } + return o.toString(); + } + + +} diff --git a/sc/src/private/nc/impl/sc/m61/action/approve/SCOrderApproveAction.java b/sc/src/private/nc/impl/sc/m61/action/approve/SCOrderApproveAction.java new file mode 100644 index 0000000..6205993 --- /dev/null +++ b/sc/src/private/nc/impl/sc/m61/action/approve/SCOrderApproveAction.java @@ -0,0 +1,102 @@ +package nc.impl.sc.m61.action.approve; + + +import nc.bs.pub.compiler.AbstractCompiler2; +import nc.bs.sc.m61.referred.rule.ic.ApproveSupplyRule; +import nc.bs.sc.m61.referred.rule.pm.AfterApproceRuleSyncRZWMSProcess; +import nc.bs.sc.m61.referred.rule.pm.SCOrderApprovePMSupplyRule; +import nc.bs.sc.m61.referred.rule.pm.SCOrderRewritePMStartDateRule; +import nc.bs.sc.plugin.SCOrderPluginPoint; +import nc.bs.scmpub.pf.PfParameterUtil; +import nc.bs.scmpub.rule.VOSagaFrozenValidateRule; +import nc.impl.pubapp.pattern.data.bill.BillUpdate; +import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; +import nc.impl.sc.m61.action.approve.rule.*; +import nc.itf.sc.m61.compenstate.IScOrderPmSagasCompensate; +import nc.itf.sc.reference.ic.ATPServices; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.sc.m61.entity.SCOrderVO; +import nc.vo.sc.m61.entity.context.SCOrderContxt; +import nc.vo.sc.pub.enumeration.SCBillStatus; +import nc.vo.scmpub.msg.rule.UpdateMsgStatusRule; +import nc.vo.scmpub.res.billtype.SCBillType; +import nc.vo.scmpub.util.AppInfoContext; +import nccloud.commons.lang.ArrayUtils; +import nccloud.pubitf.pu.pub.util.PuSagasUtil; +import nccloud.pubitf.sc.pub.util.SCOperationEnum; +import nccloud.pubitf.sc.pub.util.SCSagasOperationEnum; +import nccloud.pubitf.sc.pub.util.ScSagasUtil; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +public class SCOrderApproveAction { + + private void addRule(CompareAroundProcesser prcr) { + prcr.addBeforeRule(new VOSagaFrozenValidateRule(true)); + prcr.addBeforeFinalRule(new ApproveStatusChkRule()); + prcr.addBeforeFinalRule(new SupplierFrozeChkRule()); + prcr.addBeforeFinalRule(new UpdateMsgStatusRule("pk_order")); + prcr.addBeforeRule(new ApproveFlowCheckMnyRule()); + prcr.addAfterFinalRule(new UpdatePFlowInfoRule()); + prcr.addAfterRule(new FilterOrderByStatusRule(SCBillStatus.APPROVED.toInt())); + prcr.addAfterRule(new SCOrderRewritePMStartDateRule(true)); + prcr.addAfterRule(new ApproveSupplyRule()); + prcr.addAfterRule(new SCOrderApprovePMSupplyRule()); + prcr.addAfterRule(new AfterApproceRuleSyncRZWMSProcess()); + } + + public SCOrderVO[] approve(SCOrderVO[] vos, SCOrderContxt contxt, AbstractCompiler2 script) { + if (ArrayUtils.isEmpty(vos)) { + return vos; + } else { + PfParameterUtil util = new PfParameterUtil(script == null ? null : script.getPfParameterVO(), vos); + SCOrderVO[] originBills = (SCOrderVO[]) util.getOrginBills(); + SCOrderVO[] clientBills = (SCOrderVO[]) util.getClientFullInfoBill(); + CompareAroundProcesser prcr = new CompareAroundProcesser(SCOrderPluginPoint.APPROVE); + this.addRule(prcr); + prcr.before(clientBills, originBills); + if (null != script) { + try { + script.procFlowBacth(script.getPfParameterVO()); + } catch (Exception e) { + ExceptionUtils.wrappException(e); + } + } + + this.atpBeforeUpdate(clientBills); + + try { + AppInfoContext.setProductCode(SCSagasOperationEnum.OREDERAPPROVE.getResCommon()); + AppInfoContext.setResId(SCSagasOperationEnum.OREDERAPPROVE.getResId()); + ScSagasUtil.frozenAndAddSaga(vos, "scorderApprove", SCBillType.Order.getCode()); + Map paramMap = new HashMap(); + paramMap.put("actionname", "scorderApprove"); + paramMap.put("hid", originBills[0].getParentVO().getPrimaryKey()); + paramMap.put(SCOperationEnum.APPROVER, originBills[0].getParentVO().getApprover()); + paramMap.put(SCOperationEnum.TAUDITTIME, originBills[0].getParentVO().getTaudittime()); + paramMap.put(SCOperationEnum.FBILLSTATUS, originBills[0].getParentVO().getFstatusflag()); + PuSagasUtil.compensate(IScOrderPmSagasCompensate.class, paramMap); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + + BillUpdate update = new BillUpdate(); + SCOrderVO[] updateVOs = (SCOrderVO[]) update.update(clientBills, originBills); + prcr.after(clientBills, originBills); + this.atpAfterUpdate(updateVOs); + return updateVOs; + } + } + + private void atpAfterUpdate(SCOrderVO[] updateVOs) { + ATPServices.modifyATPAfter(SCBillType.Order.getCode(), updateVOs); + } + + private void atpBeforeUpdate(SCOrderVO[] clientBills) { + ATPServices.modifyATPBefore(SCBillType.Order.getCode(), clientBills); + } + +}