This commit is contained in:
lihao 2025-07-24 09:25:33 +08:00
parent 1a8b16b11e
commit bac5210a7d
5 changed files with 130 additions and 12 deletions

View File

@ -0,0 +1,56 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.ic.m4d.cancelsign;
import com.yonyou.cloud.ncc.plugin.entity.OperationInfo;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import nc.bs.ic.general.cancelsign.CancelSignBPTemplate;
import nc.bs.ic.general.cancelsign.ICancelSignBP;
import nc.bs.ic.general.cancelsign.ICancelSignRuleProvider;
import nc.bs.ic.general.cancelsign.rule.CancelSignCheckAssetFlag;
import nc.bs.ic.general.cancelsign.rule.CheckHandoverState;
import nc.bs.ic.m4d.base.BPPlugInPoint;
import nc.bs.ic.m4d.base.UpdateSCOnhandRule;
import nc.bs.ic.m4d.cancelsign.rule.AfterCancelSignRuleForLiabilityProcess;
import nc.bs.ic.m4d.cancelsign.rule.PushDeleteIAandTOBills;
import nc.bs.ic.pub.util.SagasUtils;
import nc.bs.scmpub.rule.VOSagaFrozenValidateRule;
import nc.impl.pubapp.pattern.rule.processer.AroundProcesser;
import nc.itf.ic.m4d.compensate.IMaterialOutSagasCompensate;
import nc.vo.ic.m4d.entity.MaterialOutVO;
import nc.vo.ic.pub.util.VOEntityUtil;
import nc.vo.scmpub.res.billtype.ICBillType;
public class CancelSignBP implements ICancelSignBP<MaterialOutVO>, ICancelSignRuleProvider<MaterialOutVO> {
public CancelSignBP() {
}
public void addAfterRule(MaterialOutVO[] vos, AroundProcesser<MaterialOutVO> processor) {
processor.addAfterRule(new UpdateSCOnhandRule(true));
processor.addAfterRule(new AfterCancelSignRuleForLiabilityProcess());
processor.addAfterRule(new PushDeleteIAandTOBills());
// processor.addAfterRule(new PullProcess());
}
public void addBeforeRule(MaterialOutVO[] vos, AroundProcesser<MaterialOutVO> processor) {
processor.addBeforeRule(new VOSagaFrozenValidateRule(true));
processor.addBeforeRule(new CancelSignCheckAssetFlag());
processor.addBeforeRule(new CheckHandoverState());
}
public MaterialOutVO[] cancelSign(MaterialOutVO[] vos) {
CancelSignBPTemplate<MaterialOutVO> cancelBP = new CancelSignBPTemplate(BPPlugInPoint.CancelSignBP, this);
SagasUtils.frozenAndAddSaga(vos, ICBillType.MaterialOut.getCode(), "1", (OperationInfo)null);
Map<String, Serializable> paramMap = new HashMap();
paramMap.put("actionname", "cancelsign_4D");
paramMap.put("hid", VOEntityUtil.getPksFromAggVO(vos));
SagasUtils.compensate(paramMap, IMaterialOutSagasCompensate.class);
return (MaterialOutVO[])cancelBP.cancelSign(vos);
}
}

View File

@ -12,6 +12,7 @@ import nc.bs.ic.general.sign.SignBPTemplate;
import nc.bs.ic.m4d.base.BPPlugInPoint;
import nc.bs.ic.m4d.base.UpdateSCOnhandRule;
import nc.bs.ic.m4d.sign.rule.AfterSignRuleForLiabilityProcess;
import nc.bs.ic.m4d.sign.rule.CheckDbizdateProcess;
import nc.bs.ic.m4d.sign.rule.PullProcess;
import nc.bs.ic.m4d.sign.rule.PushSaveIAandTOBill;
import nc.bs.ic.pub.util.SagasUtils;
@ -34,6 +35,7 @@ public class SignBP implements ISignBP<MaterialOutVO>, ISignRuleProvider<Materia
processor.addAfterRule(new UpdateSCOnhandRule(false));
processor.addAfterRule(new PushSaveIAandTOBill());
processor.addAfterRule(new AfterSignRuleForLiabilityProcess());
processor.addAfterRule(new CheckDbizdateProcess());
// 导入领料需求
processor.addAfterRule(new PullProcess());
}

View File

@ -0,0 +1,50 @@
package nc.bs.ic.m4d.sign.rule;
import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapListProcessor;
import nc.vo.ic.m4d.entity.MaterialOutBodyVO;
import nc.vo.ic.m4d.entity.MaterialOutVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDate;
public class CheckDbizdateProcess implements IRule<MaterialOutVO> {
public CheckDbizdateProcess() {
}
@Override
public void process(MaterialOutVO[] vos) {
for (MaterialOutVO vo : vos) {
if (vo.getBodys().length > 0){
for (MaterialOutBodyVO bodyVO : vo.getBodys()) {
// 查询流程生产订单 完工时间
// String sql = "SELECT m.twillendtime from mm_mo m LEFT join mm_pmo p ON p.cpmohid=m.cpmohid WHERE p.VBILLCODE = '"+bodyVO.getVproductbatch()+"' and m.VFIRSTBID='"+bodyVO.getCsrc2billbid()+"'";
String sql = "SELECT m.twillendtime from mm_mo m WHERE m.cmoid in (SELECT\n" +
"\tm.VSOURCEMOROWID\n" +
"FROM\n" +
"\tmm_pickm_b b\n" +
"LEFT JOIN mm_pickm m ON\n" +
"\tm.cpickmid = b.cpickmid\n" +
"WHERE\n" +
"\tb.CPICKM_BID = '"+bodyVO.getCpickmbid()+"' )";
BaseDAO dao = new BaseDAO();
try {
String data =(String) dao.executeQuery(sql, new ColumnProcessor());
if(bodyVO.getDbizdate().getDateAfter(7).compareTo(new UFDate(data)) >0){
throw new BusinessException("材料出库单审批的时候出库日期如果大于对应流程生产订单上的完工日期7天不能审核。");
};
} catch (DAOException e) {
throw new RuntimeException(e);
} catch (BusinessException e) {
throw new RuntimeException(e);
}
}
}
}
}
}

View File

@ -47,15 +47,20 @@ PullProcess implements IRule<MaterialOutVO> {
continue;
}
if (vo.getBodys().length > 0 && vo.getBodys()[0].getNshouldassistnum().doubleValue() > 0) {
jsonArray1.add(this.buildSyncData(vo));
jsonArray1.add(this.buildSyncData(vo,17));
}
if (vo.getBodys().length > 0 && vo.getBodys()[0].getNshouldassistnum().doubleValue() < 0) {
jsonArray2.add(this.buildSyncData(vo));
jsonArray2.add(this.buildSyncData(vo,37));
}
}
pushData("/prj-v5-web/ext/api/mrl", jsonArray1);
pushData("/prj-v5-web/ext/api/mrl", jsonArray2);
if(jsonArray1.size() > 0){
pushData("/prj-v5-web/ext/api/getMrlReq", jsonArray1);
}
if(jsonArray2.size() > 0){
pushData("/prj-v5-web/ext/api/returnMrl", jsonArray2);
}
}
@ -66,11 +71,11 @@ PullProcess implements IRule<MaterialOutVO> {
}
}
private JSONObject buildSyncData(MaterialOutVO vo) throws BusinessException {
private JSONObject buildSyncData(MaterialOutVO vo,int businessType ) throws BusinessException {
JSONObject obj = new JSONObject();
obj.put("billCode", vo.getHead().getVbillcode()); // 已存在的billCode字段
obj.put("workOrderCode", null);
obj.put("businessType", 17);
obj.put("businessType", businessType);
obj.put("supplierCode", null);
obj.put("supplierName", null);
obj.put("conditionalCode", null);
@ -90,19 +95,22 @@ PullProcess implements IRule<MaterialOutVO> {
JSONObject detailItem = new JSONObject();
detailItem.put("billCode", vo.getHead().getVbillcode()); // 与主单据号一致
detailItem.put("workOrderCode", null);
detailItem.put("rowNum", 1);
detailItem.put("rowNum",Integer.parseInt(item.getCrowno()) );
String mrlsql = "select code,name from bd_material_v where pk_source = '" + item.getCmaterialoid() + "' ";
Map<String,Object> mrl = (Map<String, Object>) dao.executeQuery( mrlsql, new MapProcessor());
detailItem.put("mrlCode", mrl.get("code"));
detailItem.put("mrlName", mrl.get("name"));
detailItem.put("planInDate", item.getDbizdate());
detailItem.put("planInDate", item.getDbizdate().toStdString());
detailItem.put("planInQty", item.getNshouldassistnum().doubleValue());
String unitsql = "select code from bd_measdoc where pk_measdoc = '" + item.getCastunitid() + "' ";
Map<String,Object> unit = (Map<String, Object>) dao.executeQuery( unitsql, new MapProcessor());
detailItem.put("unit", unit.get("code"));
detailItem.put("contractNo", null);
detailItem.put("area", "S003");
detailItem.put("subArea", null);
String areasql = "select code from bd_stordoc where pk_stordoc = '" + item.getCbodywarehouseid() + "' ";
Map<String,Object> area = (Map<String, Object>) dao.executeQuery( areasql, new MapProcessor());
detailItem.put("area", area.get("code"));
detailItem.put("subArea", item.getVcontractcode());
jsonArray.add(detailItem);
}
obj.put("details", jsonArray);
@ -112,6 +120,7 @@ PullProcess implements IRule<MaterialOutVO> {
private void pushData(String requestUrl, JSONArray param) throws BusinessException {
String baseUrl = SysParaInitQuery.getParaString("GLOBLE00000000000000", "EPICMESURL");
// baseUrl="http://192.168.55.39:8080";
requestUrl = baseUrl + requestUrl;
String result = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, param.toJSONString());
JSONObject resultObj = JSONObject.parseObject(result);
@ -129,6 +138,7 @@ PullProcess implements IRule<MaterialOutVO> {
public boolean checkIfIncludeOrg(String code) throws BusinessException {
// 当当前操作人员是BIP的时候 直接return 不走同步MES的业务逻辑
String targetCode = SysParaInitQuery.getParaString("GLOBLE00000000000000", "INCLUDEORG");
// targetCode="C013;C014;C015;C017";
if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) {
throw new BusinessException("未配置组织参数,请前往 [业务参数设置-全局] 配置INCLUDEORG参数");
}

View File

@ -5,13 +5,13 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import nc.bs.dao.BaseDAO;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Log;
import nc.bs.trade.business.HYPubBO;
import nc.bs.uapbd.util.MyHelper;
import nc.bs.uapbd.util.ThirdPartyPostRequestUtil;
import nc.jdbc.framework.processor.MapListProcessor;
import nc.jdbc.framework.processor.MapProcessor;
import nc.pub.billcode.impl.BillCodeManageImpl;
import nc.pub.billcode.itf.IBillcodeManage;
import nc.vo.bc.pmpub.project.ProjectHeadVO;
import nc.vo.bd.bom.bom0202.entity.BomVO;
@ -318,7 +318,7 @@ public class SyncEpicMesUtil {
for (PMOItemVO item : vo.getChildrenVO()) {
HYPubBO hybo = new HYPubBO();
Object materialtype = hybo.findColValue("bd_material_v", "materialtype", "pk_source = '" + item.getCmaterialid() + "' ");
IBillcodeManage billcodeManage = new BillCodeManageImpl();
IBillcodeManage billcodeManage = NCLocator.getInstance().lookup(IBillcodeManage.class);;
String code = billcodeManage.getPreBillCode_RequiresNew("xxxxx-code-rule", hvo.getPk_group(), hvo.getPk_org());
String detailItem = materialtype + hvo.getDbilldate().toStdString().substring(0, 3) + hvo.getDbilldate().toStdString().substring(5, 6) + code;
jsonArray.add(detailItem);