Merge remote-tracking branch 'origin/main'

This commit is contained in:
lihao 2025-09-11 11:03:40 +08:00
commit 4cc545d3c2
4 changed files with 301 additions and 166 deletions

View File

@ -4,6 +4,8 @@ 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;
@ -16,6 +18,7 @@ import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillPutValueRule;
import nc.bs.mmpac.pmo.pac0002.bp.rule.putBeforeCheckRule;
import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule;
import nc.impl.pubapp.pattern.data.vo.tool.VOConcurrentTool;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
import nc.util.mmf.framework.gc.GCBillConcurrentTool;
import nc.util.mmf.framework.gc.GCBillTransferTool;
@ -118,5 +121,7 @@ public class PMORowPutBP {
}
private void addRowPutAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
IRule<PMOAggVO> rule = new AfterPmoSyncJmQMSRule("put");
processer.addAfterRule(rule);
}
}

View File

@ -0,0 +1,115 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
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;
import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterBillStatusRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterRowStatusRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelActApplyRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelBatchBindRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelDispatchNumRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelHoldNumRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelOperationRepRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckPutCancelWrNumRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOPutCancelCheckPutPlanStatusRule;
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillPutValueRule;
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;
public class PMORowPutCancelBP {
public PMORowPutCancelBP() {
}
public PMOAggVO[] rowputcancel(PMOAggVO[] vos) {
GCUpdateBPTemplate<PMOAggVO> bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWUNPUT);
CompareAroundProcesser<PMOAggVO> processer = bp.getAroundProcesser();
this.addRowPutCancelBeforeRule(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);
}
}
PMOAggVO aggvo = new PMOAggVO();
try {
aggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid());
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
}
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);
this.addRowPutCancelAfterRule(processer);
processer.after(returnvos, returnvos);
return aggvos;
}
private void addRowPutCancelBeforeRule(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.PUT));
processer.addBeforeRule(new PMOCheckPutCancelWrNumRule());
processer.addBeforeRule(new PMOCheckPutCancelActApplyRule());
processer.addBeforeRule(new PMOCheckPutCancelHoldNumRule());
processer.addBeforeRule(new PMOCheckPutCancelBatchBindRule());
processer.addBeforeRule(new PMOFillPutValueRule(true));
processer.addBeforeRule(new PMOCheckPutCancelDispatchNumRule());
processer.addBeforeRule(new PMOCheckPutCancelOperationRepRule());
IRule<PMOAggVO> putCancelCheckPutPlanStatusRule = new PMOPutCancelCheckPutPlanStatusRule();
processer.addBeforeRule(putCancelCheckPutPlanStatusRule);
}
private void addRowPutCancelAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
IRule<PMOAggVO> rule = new AfterPmoSyncJmQMSRule("putCancel");
processer.addAfterRule(rule);
}
}

View File

@ -0,0 +1,181 @@
package nc.bs.mmpac.pmo.pac0002.bp.rule;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import nc.bs.dao.BaseDAO;
import nc.bs.logging.Log;
import nc.bs.uapbd.util.MyHelper;
import nc.bs.uapbd.util.ThirdPartyPostRequestUtil;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.bc.pmpub.project.ProjectHeadVO;
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.OrgVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.sm.UserVO;
import java.util.Map;
/**
* 精密-流程生产订单投放后推送QMS
*
* @author mzr
* @date 2025/9/9
*/
public class AfterPmoSyncJmQMSRule implements IRule<PMOAggVO> {
private static final String LOG_INFO_NAME = "qyMesLog";
private static final Log logger = Log.getInstance(LOG_INFO_NAME);
private static final String reqUrl = "/IF_QyErpApi.ashx?action=addscjh";
private Map<String, String> configParams;
private String flag = "";
public AfterPmoSyncJmQMSRule() {
}
public AfterPmoSyncJmQMSRule(String flag) {
this.flag = flag;
}
@Override
public void process(PMOAggVO[] pmoAggVOS) {
try {
configParams = MyHelper.getConfigParams("jm-config", null);
if (configParams.isEmpty()) {
throw new BusinessException("精密的启源接口缺少配置");
}
buildSyncData(pmoAggVOS);
} catch (BusinessException e) {
throw new RuntimeException(e);
}
}
/**
* 构建同步数据
*/
private void buildSyncData(PMOAggVO[] useVOs) throws BusinessException {
BaseDAO baseDAO = new BaseDAO();
for (PMOAggVO vo : useVOs) {
// 判断物料的业务单元是否是配置的公司不是则跳过
String pkOrg = vo.getParentVO().getPk_org();
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
if (checkIfOrg(orgCode, configParams)) {
continue;
}
// 组装数据
JSONObject singleObj = new JSONObject();
PMOHeadVO pmoHeadVO = vo.getParentVO();
PMOItemVO[] itemVOS = vo.getChildrenVO();
String sql = " select user_name from sm_user where dr = 0 and cuserid = '" + pmoHeadVO.getBillmaker() + "' ";
String billmakerName = (String) baseDAO.executeQuery(sql, new ColumnProcessor());
singleObj.put("batchid", System.currentTimeMillis());
singleObj.put("scdh", pmoHeadVO.getVbillcode());
singleObj.put("xdrq", pmoHeadVO.getDbilldate().toString());
singleObj.put("jhy", billmakerName);
singleObj.put("bz", pmoHeadVO.getVnote());
// 处理Content数组
JSONArray contentArray = new JSONArray();
for (PMOItemVO item : itemVOS) {
String cmaterialvid = item.getCmaterialvid();
String whereSql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + cmaterialvid + "' ";
Map<String, Object> mrlmap = (Map<String, Object>) baseDAO.executeQuery(whereSql, new MapProcessor());
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 + "'");
// 行状态 0=自由;4=审批通过;1=投放;2=完工;3=关闭;
Integer fitemstatus = item.getFitemstatus();
JSONObject itemObj = new JSONObject();
itemObj.put("sgdh", projectCode);// 施工单号-BIP项目编码
itemObj.put("xshth", item.getVfirstcode());// 销售合同号-BIP源头单据号
itemObj.put("htqdxh", item.getVfirstrowno());// 合同清单序号-BIP源头单据行号
itemObj.put("wlbh", mrlmap.get("code"));// 产品编号
itemObj.put("wlmc", mrlmap.get("name"));// 产品名称
itemObj.put("wlxhgg", mrlmap.get("materialspec") + (String) mrlmap.get("materialtype"));// 产品型号规格
itemObj.put("jhsl", item.getNastnum().toString());// 计划数量该产品的生产计划数量
UFDateTime tplanendtime = item.getTplanendtime();
String tplanendtimeStr = "";
if (tplanendtime != null) {
tplanendtimeStr = tplanendtime.toString();
}
itemObj.put("jhrq", tplanendtimeStr);// 计划数量该产品的生产计划数量
int flag_wg = 0;
int flag_jqbz = 0;
if (fitemstatus == 2) {
flag_wg = 1;
}
if (fitemstatus == 3) {
flag_wg = 1;
flag_jqbz = 1;
}
itemObj.put("flag_wg", flag_wg);// 完工标志 1/0 1.完工
itemObj.put("flag_jqbz", flag_jqbz);// 结清标志 1 代表结清 0 或者空代表非结清
itemObj.put("jqr", mocloserName);// 结清人-BIP关闭人
UFDateTime tmoclosedtime = item.getTmoclosedtime();
String tmoclosedtimeStr = "";
if (tmoclosedtime != null) {
tmoclosedtimeStr = tmoclosedtime.toString();
}
itemObj.put("jqrq", tmoclosedtimeStr);// 结清日期-BIP关闭日期
itemObj.put("bz", item.getVnote());// 清单备注
contentArray.add(itemObj);
}
singleObj.put("Content", contentArray);
pushData(singleObj);
}
}
/**
* 推送同步数据
*/
private void pushData(JSONObject param) throws BusinessException {
// String jsonString = param.toJSONString();
// 转json字符串的时候保留null值
String jsonStr = JSON.toJSONString(param,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty
);
logger.error("QMS-PMO-JM-param = " + jsonStr);
// NCCForUAPLogger.debug("QMS-PMO-JM-param = " + jsonStr);
String baseUrl = configParams.get("qmsBaseUrl");
String requestUrl = baseUrl + reqUrl;
logger.error("QMS-PMO-JM-url = " + requestUrl);
String result = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, jsonStr);
JSONObject resultObj = JSONObject.parseObject(result);
logger.error("QMS-PMO-JM-res = " + result);
if (!"true".equals(resultObj.getString("success"))) {
// throw new BusinessException("QMS-PMO-JM-error:" + resultObj.getString("msg"));
logger.error("QMS-PMO-JM-error,result[" + resultObj.toJSONString() + "]");
}
}
private boolean checkIfOrg(String code, Map<String, String> configParams) throws BusinessException {
String targetCode = configParams.get("jmOrg");
if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) {
throw new BusinessException("未配置组织参数");
}
String[] orgItem = targetCode.split(",");
for (String orgCode : orgItem) {
if (!orgCode.isEmpty() && orgCode.equals(code)) {
return false;
}
}
return true;
}
}

View File

@ -1,166 +0,0 @@
package nc.bs.mmpac.pmo.pac0002.bp.rule;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import nc.bs.dao.BaseDAO;
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.impl.pubapp.pattern.rule.IRule;
import nc.jdbc.framework.processor.ColumnProcessor;
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.OrgVO;
import nc.vo.pub.BusinessException;
import nccloud.baseapp.core.log.NCCForUAPLogger;
import java.util.Date;
import java.util.Map;
/**
* 精密-流程生产订单投放后推送QMS
*
* @author mzr
* @date 2025/9/9
*/
public class AfterPutSyncQMSRule implements IRule<PMOAggVO> {
private static final String LOG_INFO_NAME = "qyMesLog";
private static final Log logger = Log.getInstance(LOG_INFO_NAME);
private static final String reqUrl = "/IF_QyErpApi.ashx?action=addscjh";
private Map<String, String> configParams;
@Override
public void process(PMOAggVO[] pmoAggVOS) {
try {
configParams = MyHelper.getConfigParams("xb-config", null);
if (configParams.isEmpty()) {
throw new BusinessException("箱变的QMS接口缺少配置");
}
buildSyncData(pmoAggVOS);
} catch (BusinessException e) {
throw new RuntimeException(e);
}
}
/**
* 构建同步数据
*/
private void buildSyncData(PMOAggVO[] useVOs) throws BusinessException {
BaseDAO baseDAO = new BaseDAO();
HYPubBO hybo = new HYPubBO();
for (PMOAggVO vo : useVOs) {
// 判断物料的业务单元是否是箱变公司不是则跳过
String pkOrg = vo.getParentVO().getPk_org();
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
if (checkIfOrg(orgCode, configParams)) {
continue;
}
// 组装数据
JSONObject singleObj = new JSONObject();
PMOHeadVO pmoHeadVO = vo.getParentVO();
PMOItemVO[] itemVOS = vo.getChildrenVO();
singleObj.put("batchid", new Date());
singleObj.put("scdh", pmoHeadVO.getVbillcode());
singleObj.put("xdrq", pmoHeadVO.getDbilldate());
String sql = " select user_name from sm_user where cuserid = '" + pmoHeadVO.getBillmaker() + "' ";
String billmakerName = (String) baseDAO.executeQuery(sql, new ColumnProcessor());
singleObj.put("jhy", billmakerName);
singleObj.put("bz", pmoHeadVO.getVnote());
// 处理Content数组
JSONArray contentArray = new JSONArray();
for (PMOItemVO item : itemVOS) {
JSONObject itemObj = new JSONObject();
itemObj.put("sgdh", pmoHeadVO.getVbillcode());
itemObj.put("xshth", item.getCprojectid());
// itemObj.put("htqdxh", item.getHtqdxh());
// Object no = hybo.findColValue("bd_material", "code", "pk_material = '"+item.getCmaterialvid()+"' ");
//
// Object name = hybo.findColValue("bd_material", "name", "pk_material = '"+item.getCmaterialvid()+"' ");
String wlsql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + item.getCmaterialvid() + "' ";
Map<String, Object> mrlmap = (Map<String, Object>) baseDAO.executeQuery(wlsql, new ColumnProcessor());
itemObj.put("wlbh", mrlmap.get("code"));
itemObj.put("wlmc", mrlmap.get("name"));
itemObj.put("wlxhgg", mrlmap.get("materialspec") + (String) mrlmap.get("materialtype"));
itemObj.put("jhsl", item.getNastnum());
itemObj.put("jhrq", item.getTplanendtime());
itemObj.put("bz", item.getVnote());
contentArray.add(itemObj);
}
singleObj.put("Content", contentArray);
/*
{
"batchid": "PO202408001",
"scdh": "PROD202408001",
"xdrq": "2024-08-21",
"jhy": "张三",
"bz": "紧急生产订单,优先安排",
"Content": [
{
"sgdh": "CON202408001",
"xshth": "SALE202408001",
"htqdxh": "001",
"wlbh": "ACC26711",
"wlmc": "铜排",
"wlxhgg": "15558190831",
"jhsl": "100",
"jhrq": "2024-08-25",
"bz": "需符合材质要求"
}
]
}
*/
pushData(singleObj);
}
}
/**
* 推送同步数据
*/
private void pushData(JSONObject param) throws BusinessException {
// String jsonString = param.toJSONString();
// 转json字符串的时候保留null值
String jsonStr = JSON.toJSONString(param,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty
);
logger.error("QMS-Material-param = " + jsonStr);
NCCForUAPLogger.debug("QMS-Material-param = " + jsonStr);
String baseUrl = configParams.get("qmsBaseUrl");
String requestUrl = baseUrl + reqUrl;
logger.error("QMS-Material-url = " + requestUrl);
String result = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, jsonStr);
JSONObject resultObj = JSONObject.parseObject(result);
logger.error("QMS-Material-res = " + result);
if (!"success".equals(resultObj.getString("success"))) {
// throw new BusinessException("QMS-Material-error:" + resultObj.getString("msg"));
logger.error("QMS-Material-error,result[" + resultObj.toJSONString() + "]");
}
}
private boolean checkIfOrg(String code, Map<String, String> configParams) throws BusinessException {
String targetCode = configParams.get("xbOrg");
if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) {
throw new BusinessException("未配置组织参数");
}
String[] orgItem = targetCode.split(",");
for (String orgCode : orgItem) {
if (!orgCode.isEmpty() && orgCode.equals(code)) {
return false;
}
}
return true;
}
}