feat(sc/m61, mmpac/pickm): 新增委外订单和生产bom审批后同步至RZMOM的功能
- 新增 AfterApproceRuleSyncRZWMSProcess 类实现销售出库单审批后同步至RZMOM - 新增 AfterApproveRuleSyncRZWMS 类实现生产领料单审批后同步至RZMOM - 新增 PickmApproveBP 类实现生产领料单批量审批 - 新增 SCOrderApproveAction 类实现销售订单审批
This commit is contained in:
parent
61fe3c2d6b
commit
faa18d08c2
|
@ -100,6 +100,8 @@ public class AfterSignRuleSyncMesProcess implements IRule<GeneralOutVO> {
|
||||||
requestData.put("operation_type", "I");// 固定给I 操作
|
requestData.put("operation_type", "I");// 固定给I 操作
|
||||||
requestData.put("info", info);
|
requestData.put("info", info);
|
||||||
obmlog.debug("其它出库requestData:" + requestData.toJSONString());
|
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")) {
|
if (generalOutVO.getHead().getVtrantypecode().equals("4I-02")) {
|
||||||
|
@ -167,7 +169,7 @@ public class AfterSignRuleSyncMesProcess implements IRule<GeneralOutVO> {
|
||||||
obmlog.debug("其它出库requestData:" + requestData.toJSONString());
|
obmlog.debug("其它出库requestData:" + requestData.toJSONString());
|
||||||
|
|
||||||
IHttpPostOtherSys httpService = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
|
IHttpPostOtherSys httpService = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
|
||||||
httpService.sendToExternalSystem("test", requestData);
|
httpService.sendToExternalSystem("/GTHINKING/AjaxService/N_KCSJJS/101527009.ashx/gt_rec_api_dbckdj", requestData);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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<AggPickmVO> processer) {
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addBeforeRule(CompareAroundProcesser<AggPickmVO> processer) {
|
||||||
|
ICompareRule<AggPickmVO> pickmstatusFilterRule = new PickmApproveCheckStatusRule(true);
|
||||||
|
processer.addBeforeRule(pickmstatusFilterRule);
|
||||||
|
IRule<AggPickmVO> sagasCheckrule = new MMVOSagaFrozenValidateRule(true);
|
||||||
|
processer.addBeforeRule(sagasCheckrule);
|
||||||
|
IRule<AggPickmVO> pickmAuditCheckRule = new PickmCheckAuditRule();
|
||||||
|
processer.addBeforeRule(pickmAuditCheckRule);
|
||||||
|
IRule<AggPickmVO> mmatoMaterialCheckRule = new MMATOMaterialCheckRule("cmaterialvid", (String) null, "cffileid");
|
||||||
|
processer.addBeforeRule(mmatoMaterialCheckRule);
|
||||||
|
IRule<AggPickmVO> checkFbackFlusTime = new PickmFbackflustimeCheckRule();
|
||||||
|
processer.addBeforeRule(checkFbackFlusTime);
|
||||||
|
IRule<AggPickmVO> pickmSetStatusRule = new PickmSetStatusRule(FbillstatusEnum.AUDIT_STATE);
|
||||||
|
processer.addBeforeRule(pickmSetStatusRule);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AggPickmVO[] batchApprovePickm(AggPickmVO[] vos) {
|
||||||
|
if (MMValueCheck.isEmpty(vos)) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
UpdateBPTemplate<AggPickmVO> bpTemplate = new UpdateBPTemplate(PickmPluginPoint.APPROVE);
|
||||||
|
BillTransferTool<AggPickmVO> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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<AggPickmVO> {
|
||||||
|
|
||||||
|
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<AggPickmVO> 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<AggPickmVO> checkAndFilterBillSrcOrg(AggPickmVO[] aggPickmVOS) throws BusinessException {
|
||||||
|
List<AggPickmVO> 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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<SCOrderVO> {
|
||||||
|
|
||||||
|
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<SCOrderVO> 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<SCOrderVO> checkAndFilterBillSrcOrg(SCOrderVO[] SCOrderVOS) throws BusinessException {
|
||||||
|
List<SCOrderVO> 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -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<SCOrderVO> 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<SCOrderVO> util = new PfParameterUtil(script == null ? null : script.getPfParameterVO(), vos);
|
||||||
|
SCOrderVO[] originBills = (SCOrderVO[]) util.getOrginBills();
|
||||||
|
SCOrderVO[] clientBills = (SCOrderVO[]) util.getClientFullInfoBill();
|
||||||
|
CompareAroundProcesser<SCOrderVO> 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<String, Serializable> 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<SCOrderVO> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue