diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowPutBP.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowPutBP.java index 61426323..7ebb5468 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowPutBP.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowPutBP.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterPmoSyncJmQMSRule; +import nc.bs.mmpac.pmo.pac0002.bp.rule.PutBeforeCheckStatusRule; import nc.bs.mmpac.pmo.pac0002.bp.service.PMOBPService; import nc.bs.mmpac.pmo.pac0002.bp.util.PMOBPUtil; import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint; @@ -33,95 +34,96 @@ import nc.vo.pub.CircularlyAccessibleValueObject; import nc.vo.pubapp.pattern.exception.ExceptionUtils; public class PMORowPutBP { - public PMOAggVO[] rowput(PMOAggVO[] vos) { - try { - GCBillConcurrentTool lockTool = new GCBillConcurrentTool(); - lockTool.lockBill(vos); + public PMOAggVO[] rowput(PMOAggVO[] vos) { + try { + GCBillConcurrentTool lockTool = new GCBillConcurrentTool(); + lockTool.lockBill(vos); - (new VOConcurrentTool()).checkTSWithDB(vos[0].getChildrenVO()); + (new VOConcurrentTool()).checkTSWithDB(vos[0].getChildrenVO()); - GCUpdateBPTemplate bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWPUT); - CompareAroundProcesser processer = bp.getAroundProcesser(); + GCUpdateBPTemplate bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWPUT); + CompareAroundProcesser processer = bp.getAroundProcesser(); - addRowPutBeforeRule(processer); + addRowPutBeforeRule(processer); - addRowPutAfterRule(processer); + addRowPutAfterRule(processer); - PMOAggVO[] returnvos = (PMOAggVO[]) processer.before(vos, vos); + PMOAggVO[] returnvos = (PMOAggVO[]) processer.before(vos, vos); - List upditemList = new ArrayList(); - Map upditemMap = new HashMap(); - for (PMOAggVO aggvo : returnvos) { - PMOItemVO[] items = aggvo.getChildrenVO(); - for (PMOItemVO item : items) { - upditemList.add(item); - upditemMap.put(item.getCmoid(), item); - } - } - PMOAggVO aggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid()); + List upditemList = new ArrayList(); + Map upditemMap = new HashMap(); + for (PMOAggVO aggvo : returnvos) { + PMOItemVO[] items = aggvo.getChildrenVO(); + for (PMOItemVO item : items) { + upditemList.add(item); + upditemMap.put(item.getCmoid(), item); + } + } + PMOAggVO aggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid()); - PMOItemVO[] olditems = aggvo.getChildrenVO(); - List tempitems = new ArrayList(); - for (PMOItemVO item : olditems) { - if (!upditemMap.containsKey(item.getCmoid())) { - tempitems.add(item); - } else { + PMOItemVO[] olditems = aggvo.getChildrenVO(); + List tempitems = new ArrayList(); + for (PMOItemVO item : olditems) { + if (!upditemMap.containsKey(item.getCmoid())) { + tempitems.add(item); + } else { - ((PMOItemVO) upditemMap.get(item.getCmoid())).setStatus(1); - PMOBPUtil.setGrandVOStatusUpdate((PMOItemVO) upditemMap.get(item.getCmoid())); - tempitems.add((PMOItemVO) upditemMap.get(item.getCmoid())); - } - } - aggvo.setChildrenVO((CircularlyAccessibleValueObject[]) tempitems.toArray(new PMOItemVO[tempitems.size()])); + ((PMOItemVO) upditemMap.get(item.getCmoid())).setStatus(1); + PMOBPUtil.setGrandVOStatusUpdate((PMOItemVO) upditemMap.get(item.getCmoid())); + tempitems.add((PMOItemVO) upditemMap.get(item.getCmoid())); + } + } + aggvo.setChildrenVO((CircularlyAccessibleValueObject[]) tempitems.toArray(new PMOItemVO[tempitems.size()])); - PMOAggVO[] aggvos = { aggvo }; + PMOAggVO[] aggvos = {aggvo}; - GCBillTransferTool transferTool = new GCBillTransferTool(aggvos); - PMOAggVO[] originBills = (PMOAggVO[]) transferTool.getOriginBills(); - GCBillUpdate billupdate = new GCBillUpdate(); - PMOAggVO[] newaggvos = (PMOAggVO[]) billupdate.update(aggvos, originBills); + GCBillTransferTool transferTool = new GCBillTransferTool(aggvos); + PMOAggVO[] originBills = (PMOAggVO[]) transferTool.getOriginBills(); + GCBillUpdate billupdate = new GCBillUpdate(); + PMOAggVO[] newaggvos = (PMOAggVO[]) billupdate.update(aggvos, originBills); - PMOItemVO[] totalitems = newaggvos[0].getChildrenVO(); - Map newitemMap = new HashMap(); - for (PMOItemVO item : totalitems) { - if (upditemMap.containsKey(item.getCmoid())) { - newitemMap.put(item.getCmoid(), item); - } - } - returnvos[0] - .setChildrenVO((CircularlyAccessibleValueObject[]) newitemMap.values().toArray(new PMOItemVO[0])); + PMOItemVO[] totalitems = newaggvos[0].getChildrenVO(); + Map newitemMap = new HashMap(); + for (PMOItemVO item : totalitems) { + if (upditemMap.containsKey(item.getCmoid())) { + newitemMap.put(item.getCmoid(), item); + } + } + returnvos[0] + .setChildrenVO((CircularlyAccessibleValueObject[]) newitemMap.values().toArray(new PMOItemVO[0])); - processer.after(returnvos, returnvos); + processer.after(returnvos, returnvos); - PMOAggVO newaggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid()); + PMOAggVO newaggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid()); - return new PMOAggVO[] { newaggvo }; + return new PMOAggVO[]{newaggvo}; - } catch (Exception e) { - ExceptionUtils.wrappException(e); + } catch (Exception e) { + ExceptionUtils.wrappException(e); - return null; - } - } + return null; + } + } - private void addRowPutBeforeRule(CompareAroundProcesser processer) { - MMVOSagaFrozenValidateRule mMVOSagaFrozenValidateRule = new MMVOSagaFrozenValidateRule(true); - processer.addBeforeRule(mMVOSagaFrozenValidateRule); - processer.addBeforeRule( - new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT)); + private void addRowPutBeforeRule(CompareAroundProcesser processer) { + MMVOSagaFrozenValidateRule mMVOSagaFrozenValidateRule = new MMVOSagaFrozenValidateRule(true); + processer.addBeforeRule(mMVOSagaFrozenValidateRule); + processer.addBeforeRule( + new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT)); - processer.addBeforeRule( - new PMOFilterRowStatusRule(PMOConstLang.getMSG_RULE_NO_ROWDATA(), PMOFItemStatusEnum.AUDIT)); + processer.addBeforeRule( + new PMOFilterRowStatusRule(PMOConstLang.getMSG_RULE_NO_ROWDATA(), PMOFItemStatusEnum.AUDIT)); - processer.addBeforeRule(new PMOCheckDeptNotNullRule()); - processer.addBeforeRule(new PMOPutAutoAuditPickmRule()); - processer.addBeforeRule(new PMOFillPutValueRule(false)); - processer.addBeforeRule(new PMOFillBatchCodeRule()); - processer.addBeforeRule(new putBeforeCheckRule()); - } + processer.addBeforeRule(new PMOCheckDeptNotNullRule()); + processer.addBeforeRule(new PMOPutAutoAuditPickmRule()); + processer.addBeforeRule(new PMOFillPutValueRule(false)); + processer.addBeforeRule(new PMOFillBatchCodeRule()); + processer.addBeforeRule(new putBeforeCheckRule()); + processer.addBeforeRule(new PutBeforeCheckStatusRule()); + } - private void addRowPutAfterRule(CompareAroundProcesser processer) { - IRule rule = new AfterPmoSyncJmQMSRule("put"); - processer.addAfterRule(rule); - } + private void addRowPutAfterRule(CompareAroundProcesser processer) { + IRule rule = new AfterPmoSyncJmQMSRule("put"); + processer.addAfterRule(rule); + } } diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/PutBeforeCheckStatusRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/PutBeforeCheckStatusRule.java new file mode 100644 index 00000000..237a38f0 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/PutBeforeCheckStatusRule.java @@ -0,0 +1,97 @@ +package nc.bs.mmpac.pmo.pac0002.bp.rule; + +import nc.bs.framework.common.NCLocator; +import nc.bs.uapbd.util.MyHelper; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.itf.uif.pub.IUifService; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; +import nc.vo.org.DeptVO; +import nc.vo.org.OrgVO; +import nc.vo.pub.BusinessException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 电力电子-流程生产订单投放前检查艾普MES的传输状态 + * + * @author mzr + * @date 2025/9/24 + */ +public class PutBeforeCheckStatusRule implements IRule { + + private static IUifService service = (IUifService) NCLocator.getInstance().lookup(IUifService.class.getName()); + private Map configParams; + private Map deptParams; + + @Override + public void process(PMOAggVO[] vos) { + try { + configParams = MyHelper.getConfigParams("Dldz-config", null); + if (configParams.isEmpty()) { + return; + } + deptParams = MyHelper.getConfigParams("Dldz-dept", null); + if (deptParams.isEmpty()) { + return; + } + String deptRange = String.join(",", deptParams.keySet()); + configParams.put("deptRange", deptRange); + List filteredOrders = checkAndFilterBillSrcOrg(vos); + if (filteredOrders.isEmpty()) { + return; + } + for (PMOAggVO vo : vos) { + PMOItemVO[] itemVOS = vo.getChildrenVO(); + for (PMOItemVO itemVO : itemVOS) { + Object vdef34 = itemVO.getAttributeValue("vdef34"); + if (!"Y".equals(vdef34)) { + throw new BusinessException("请先将流程生产订单推送艾普MES成功后再投放"); + } + } + } + } catch (BusinessException e) { + throw new RuntimeException(e); + } + } + + /** + * 检查并筛选需要同步的单据 + */ + private List checkAndFilterBillSrcOrg(PMOAggVO[] pmoAggVOS) throws BusinessException { + Set billTypeCodes = Set.of( + "55A2-Cxx-01", "55A2-Cxx-18" + ); + List aggvoList = new ArrayList<>(); + for (PMOAggVO aggVo : pmoAggVOS) { + PMOHeadVO headVO = aggVo.getParentVO(); + // 判断订单类型,期初订单不处理 + String vtrantypecode = headVO.getVtrantypecode(); + if (billTypeCodes.contains(vtrantypecode)) { + continue; + } + String pkOrg = headVO.getPk_org(); + String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); + // 检查当前组织是否为电力电子 + if (MyHelper.checkIfDldzOrg(orgCode, configParams)) { + continue; + } + // 按照部门筛选生产订单,只传消弧车间、电容车间、成套车间(部门是配置项) + PMOItemVO childrenVO = aggVo.getChildrenVO()[0]; + String cdeptid = childrenVO.getCdeptid(); + String deptCode = MyHelper.transferField(DeptVO.getDefaultTableName(), DeptVO.CODE, DeptVO.PK_DEPT, cdeptid); + // 如果部门不在范围内则跳过本次循环 + String deptRange = configParams.get("deptRange"); + if (deptCode == null || !deptRange.contains(deptCode)) { + continue; + } + aggvoList.add(aggVo); + } + + return aggvoList; + } +} diff --git a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java index 23374443..25ce8095 100644 --- a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java +++ b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java @@ -189,13 +189,13 @@ public class MaterialToEpicMesListener implements IBusinessListener { String[] orgItem = targetCode.split(","); String inStr = SqlUtils.getInStr("b.code", orgItem, Boolean.TRUE); // 物料-库存信息-物料类型 DR=分销补货;FR=工厂补货;MR=制造件;PR=采购件;OT=委外件;ET=其他 - // mes物料类型 制造1 其它0(ERP多个组织中如果有一个是制造件就传1) + // mes物料类型 制造1 其它0(ERP多个组织中如果有一个是制造件或虚拟件(其他)就传1) String mesType = "0"; // String martype = MyHelper.transferField(MaterialStockVO.getDefaultTableName(), MaterialStockVO.MARTYPE, MaterialStockVO.PK_MATERIAL, pkMaterial); String countSql = "SELECT count(1)" + " FROM bd_materialstock a" + " LEFT JOIN org_stockorg b ON a.pk_org = b.pk_stockorg" + - " WHERE a.dr = 0 AND a.martype = 'MR' " + + " WHERE a.dr = 0 AND a.martype IN ('MR','ET') " + " AND a.pk_material = '[pkMaterial]'" + " AND " + inStr; countSql = countSql.replace("[pkMaterial]", pkMaterial);