材料出库签字后推送高压ims中间表

This commit is contained in:
lihao 2025-11-14 09:14:58 +08:00
parent ab0a8975be
commit d1385afbe4
3 changed files with 97 additions and 1 deletions

View File

@ -13,6 +13,8 @@ import nc.bs.ic.m4d.base.BPPlugInPoint;
import nc.bs.ic.m4d.base.UpdateSCOnhandRule; import nc.bs.ic.m4d.base.UpdateSCOnhandRule;
import nc.bs.ic.m4d.sign.rule.AfterSignRuleForLiabilityProcess; import nc.bs.ic.m4d.sign.rule.AfterSignRuleForLiabilityProcess;
import nc.bs.ic.m4d.sign.rule.PullProcessEpicMesRule; import nc.bs.ic.m4d.sign.rule.PullProcessEpicMesRule;
import nc.bs.ic.m4d.sign.rule.UpdateGyimsRule;
import nc.bs.ic.m4d.sign.rule.PushSaveIAandTOBill; import nc.bs.ic.m4d.sign.rule.PushSaveIAandTOBill;
import nc.bs.ic.pub.util.SagasUtils; import nc.bs.ic.pub.util.SagasUtils;
import nc.bs.scmpub.rule.VOSagaFrozenValidateRule; import nc.bs.scmpub.rule.VOSagaFrozenValidateRule;
@ -37,6 +39,8 @@ public class SignBP implements ISignBP<MaterialOutVO>, ISignRuleProvider<Materia
// processor.addAfterRule(new CheckDbizdateProcess()); // processor.addAfterRule(new CheckDbizdateProcess());
// 推送艾普MES-领料需求/退库单 // 推送艾普MES-领料需求/退库单
processor.addAfterRule(new PullProcessEpicMesRule("Y")); processor.addAfterRule(new PullProcessEpicMesRule("Y"));
processor.addAfterRule(new UpdateGyimsRule());
} }
public void addBeforeRule(MaterialOutVO[] vos, AroundProcesser<MaterialOutVO> processor) { public void addBeforeRule(MaterialOutVO[] vos, AroundProcesser<MaterialOutVO> processor) {

View File

@ -0,0 +1,92 @@
package nc.bs.ic.m4d.sign.rule;
import nc.bs.dao.BaseDAO;
import nc.bs.uapbd.util.ImsDaoUtil;
import nc.bs.uapbd.util.MyHelper;
import nc.vo.fi.pub.SqlUtils;
import nc.vo.ic.m4d.entity.MaterialOutVO;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.vo.org.OrgVO;
import nc.vo.pub.BusinessException;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 材料出库签字后修改高压ims
* 上月(2025-10-01)
* 本月(2025-11-30)
*/
public class UpdateGyimsRule implements IRule<MaterialOutVO> {
// IMS数据源
public BaseDAO imsDao;
private Map<String, String> configParams;
public UpdateGyimsRule() {
}
/**
* 获取IMS数据源
*/
public BaseDAO getImsDao() {
if (imsDao == null) {
imsDao = new BaseDAO("gyims");
// 禁用时间戳ts
imsDao.setAddTimeStamp(false);
}
return imsDao;
}
@Override
public void process(MaterialOutVO[] materialOutVOS) {
Set<String> imsIdSet = new HashSet<>();
try {
configParams = MyHelper.getConfigParams("gy-config", null);
if (configParams.isEmpty()) {
throw new BusinessException("高压的gyims接口缺少配置");
}
for (MaterialOutVO materialOutVO : materialOutVOS) {
// 判断物料的业务单元是否是高压公司不是则跳过
String pkOrg = materialOutVO.getHead().getPk_org();
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
if (checkIfOrg(orgCode, configParams)) {
continue;
}
imsIdSet.add(materialOutVO.getHead().getVbillcode());
}
if (!imsIdSet.isEmpty()) {
// 修改状态为 完成优化SQL条件拼接避免语法错误和SQL注入风险
// 1. 生成带引号的ID字符串 'id1','id2','id3'
String ids = imsIdSet.stream()
.map(id -> "'" + id.replace("'", "''") + "'") // 处理单引号转义防止SQL注入
.collect(Collectors.joining(","));
// 2. 构建更新SQL假设vbillcode是字符串类型字段
String updateSql = "update BIPOutMainTab set status = '2' where vbillcode in (" + ids + ")";
// 3. 执行更新注意这里不需要再传递参数SQL已拼接完成
int rows = ImsDaoUtil.executeUpdate(updateSql,ids);
}
} catch (BusinessException e) {
throw new RuntimeException(e);
}
}
private boolean checkIfOrg(String code, Map<String, String> configParams) throws BusinessException {
String targetCode = configParams.get("imsOrg");
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

@ -170,7 +170,7 @@ public class MaterialOutGyImsPlugin implements IBackgroundWorkPlugin {
if (!imsIdSet.isEmpty()) { if (!imsIdSet.isEmpty()) {
// 修改状态为 完成 // 修改状态为 完成
String inSql = SqlUtils.getInStr("cgeneralhid", imsIdSet.toArray(new String[0]), Boolean.TRUE); String inSql = SqlUtils.getInStr("cgeneralhid", imsIdSet.toArray(new String[0]), Boolean.TRUE);
String updateSql = "update BIPOutMainTab set status = '2',err_msg = null where " + inSql; String updateSql = "update BIPOutMainTab set status = '1',err_msg = null where " + inSql;
// NCCForUAPLogger.debug("updateSql-suc = " + updateSql); // NCCForUAPLogger.debug("updateSql-suc = " + updateSql);
int rows = ImsDaoUtil.executeUpdate(updateSql, imsIdSet.toString()); int rows = ImsDaoUtil.executeUpdate(updateSql, imsIdSet.toString());
} }