refactor(pmo):优化生产订单的行状态和订单类型同步启源

This commit is contained in:
mzr 2025-10-31 11:40:28 +08:00
parent fb9e58e6ee
commit bb40b3e24c
3 changed files with 118 additions and 27 deletions

View File

@ -5,10 +5,7 @@
package nc.bs.mmpac.pmo.pac0002.bp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterPmoSyncJmQMSRule;
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;
@ -31,6 +28,11 @@ import nc.vo.pub.BusinessException;
import nc.vo.pub.CircularlyAccessibleValueObject;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PMORowFinishBP {
public PMORowFinishBP() {
}
@ -40,14 +42,14 @@ public class PMORowFinishBP {
CompareAroundProcesser<PMOAggVO> processer = bp.getAroundProcesser();
this.addRowFinishBeforeRule(processer);
this.addRowFinishAfterRule(processer);
PMOAggVO[] returnvos = (PMOAggVO[])processer.before(vos, vos);
PMOAggVO[] returnvos = (PMOAggVO[]) processer.before(vos, vos);
List<PMOItemVO> upditemList = new ArrayList();
Map<String, PMOItemVO> upditemMap = new HashMap();
for(PMOAggVO aggvo : returnvos) {
for (PMOAggVO aggvo : returnvos) {
PMOItemVO[] items = aggvo.getChildrenVO();
for(PMOItemVO item : items) {
for (PMOItemVO item : items) {
upditemList.add(item);
upditemMap.put(item.getCmoid(), item);
}
@ -58,32 +60,32 @@ public class PMORowFinishBP {
PMOItemVO[] olditems = aggvo.getChildrenVO();
List<PMOItemVO> tempitems = new ArrayList();
for(PMOItemVO item : olditems) {
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()));
((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()]));
aggvo.setChildrenVO((CircularlyAccessibleValueObject[]) tempitems.toArray(new PMOItemVO[tempitems.size()]));
PMOAggVO[] aggvos = new PMOAggVO[]{aggvo};
GCBillTransferTool<PMOAggVO> transferTool = new GCBillTransferTool(aggvos);
PMOAggVO[] originBills = (PMOAggVO[])transferTool.getOriginBills();
PMOAggVO[] originBills = (PMOAggVO[]) transferTool.getOriginBills();
GCBillUpdate<PMOAggVO> billupdate = new GCBillUpdate();
PMOAggVO[] newaggvos = (PMOAggVO[])billupdate.update(aggvos, originBills);
PMOAggVO[] newaggvos = (PMOAggVO[]) billupdate.update(aggvos, originBills);
PMOItemVO[] totalitems = newaggvos[0].getChildrenVO();
Map<String, PMOItemVO> newitemMap = new HashMap();
for(PMOItemVO item : totalitems) {
for (PMOItemVO item : totalitems) {
if (upditemMap.containsKey(item.getCmoid())) {
newitemMap.put(item.getCmoid(), item);
}
}
returnvos[0].setChildrenVO((CircularlyAccessibleValueObject[])newitemMap.values().toArray(new PMOItemVO[0]));
returnvos[0].setChildrenVO((CircularlyAccessibleValueObject[]) newitemMap.values().toArray(new PMOItemVO[0]));
processer.after(returnvos, returnvos);
// /** 同步修改备料计划完成(生产订单强制完工时) */
@ -109,5 +111,7 @@ public class PMORowFinishBP {
private void addRowFinishAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
processer.addAfterRule(new PMOFinishAutoFinishPutPlanRule());
IRule<PMOAggVO> rule = new AfterPmoSyncJmQMSRule("finish");
processer.addAfterRule(rule);
}
}

View File

@ -0,0 +1,89 @@
package nc.bs.mmpac.pmo.pac0002.bp;
import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterPmoSyncJmQMSRule;
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;
import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterBillStatusRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterRowStatusRule;
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillFinishValueRule;
import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
import nc.util.mmf.framework.gc.GCBillTransferTool;
import nc.util.mmf.framework.gc.GCBillUpdate;
import nc.util.mmf.framework.gc.GCUpdateBPTemplate;
import nc.vo.mmpac.pmo.pac0002.constant.PMOConstLang;
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFBillstatusEnum;
import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFItemStatusEnum;
import nc.vo.pub.BusinessException;
import nc.vo.pub.CircularlyAccessibleValueObject;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PMORowFinishCancelBP {
public PMORowFinishCancelBP() {
}
public PMOAggVO[] rowfinishcancel(PMOAggVO[] vos) {
GCUpdateBPTemplate<PMOAggVO> bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWUNFINISH);
CompareAroundProcesser<PMOAggVO> processer = bp.getAroundProcesser();
this.addRowFinishCancelBeforeRule(processer);
PMOAggVO[] returnvos = (PMOAggVO[]) processer.before(vos, vos);
List<PMOItemVO> upditemList = new ArrayList();
Map<String, PMOItemVO> upditemMap = new HashMap();
for (PMOAggVO aggvo : returnvos) {
PMOItemVO[] items = aggvo.getChildrenVO();
for (PMOItemVO item : items) {
upditemList.add(item);
upditemMap.put(item.getCmoid(), item);
}
}
try {
PMOAggVO aggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid());
PMOItemVO[] olditems = aggvo.getChildrenVO();
List<PMOItemVO> 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()]));
PMOAggVO[] aggvos = new PMOAggVO[]{aggvo};
GCBillTransferTool<PMOAggVO> transferTool = new GCBillTransferTool(aggvos);
PMOAggVO[] originBills = (PMOAggVO[]) transferTool.getOriginBills();
GCBillUpdate<PMOAggVO> billupdate = new GCBillUpdate();
billupdate.update(aggvos, originBills);
processer.after(returnvos, returnvos);
return aggvos;
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
return returnvos;
}
}
private void addRowFinishCancelBeforeRule(CompareAroundProcesser<PMOAggVO> processer) {
IRule<PMOAggVO> checkFrozenRule = new MMVOSagaFrozenValidateRule(true);
processer.addBeforeRule(checkFrozenRule);
processer.addBeforeRule(new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT));
processer.addBeforeRule(new PMOFilterRowStatusRule(PMOConstLang.getMSG_RULE_NO_ROWDATA(), PMOFItemStatusEnum.FINISH));
processer.addBeforeRule(new PMOFillFinishValueRule(true));
IRule<PMOAggVO> rule = new AfterPmoSyncJmQMSRule("finishCancel");
processer.addAfterRule(rule);
}
}

View File

@ -98,9 +98,9 @@ public class AfterPmoSyncJmQMSRule implements IRule<PMOAggVO> {
String mocloser = item.getMocloser();// BIP关闭人
String mocloserName = MyHelper.getStrValByCondition("sm_user", UserVO.USER_NAME,
UserVO.CUSERID + " = '" + mocloser + "'");
String cprojectid = item.getCprojectid();// 项目id
String projectCode = MyHelper.getStrValByCondition(ProjectHeadVO.getDefaultTableName(), ProjectHeadVO.PROJECT_CODE,
ProjectHeadVO.PK_PROJECT + " = '" + cprojectid + "'");
// String cprojectid = item.getCprojectid();// 项目id
// String projectCode = MyHelper.getStrValByCondition(ProjectHeadVO.getDefaultTableName(), ProjectHeadVO.PROJECT_CODE,
// ProjectHeadVO.PK_PROJECT + " = '" + cprojectid + "'");
// 行状态 0=自由;4=审批通过;1=投放;2=完工;3=关闭;
Integer fitemstatus = item.getFitemstatus();
@ -121,23 +121,20 @@ public class AfterPmoSyncJmQMSRule implements IRule<PMOAggVO> {
tplanendtimeStr = tplanendtime.toString();
}
itemObj.put("jhrq", tplanendtimeStr);// 计划日期该产品的计划生产日期
// BIP-行状态 0=自由;4=审批通过;1=投放;2=完工;3=关闭;
// 生产订单从BIP传启源强制关闭取消投放强制完工都传1反向操作传0
int flag_wg = 0;
int flag_jqbz = 0;
if (fitemstatus == 2) {
flag_wg = 1;
flag_jqbz = 1;
}
if (fitemstatus == 3) {
flag_wg = 1;
flag_jqbz = 1;
}
if ("putCancel".equals(flag)) {
flag_jqbz = 2;// 2.取消投放
}
if ("close".equals(flag)) {// 关闭
flag_jqbz = 1;
}
if ("closeCancel".equals(flag)) {// 取消关闭
flag_jqbz = 0;
if ("putCancel".equals(flag) || "close".equals(flag) || "finish".equals(flag)) {
flag_jqbz = 1;// 结清
}
itemObj.put("flag_wg", flag_wg);// 完工标志 1/0 1.完工
itemObj.put("flag_jqbz", flag_jqbz);// 结清标志 1 代表结清 0 或者空代表非结清
@ -149,6 +146,7 @@ public class AfterPmoSyncJmQMSRule implements IRule<PMOAggVO> {
}
itemObj.put("jqrq", tmoclosedtimeStr);// 结清日期-BIP关闭日期
itemObj.put("bz", item.getVnote());// 清单备注
itemObj.put("ddlx", vtrantypecode);// 单据类型
contentArray.add(itemObj);
}