负计划校验优化

This commit is contained in:
lihao 2025-10-29 16:58:47 +08:00
parent 646c0d842f
commit fb999d54b5
4 changed files with 113 additions and 11 deletions

View File

@ -6,8 +6,14 @@
package nc.bs.pu.m20.rewrite.pu.rule; package nc.bs.pu.m20.rewrite.pu.rule;
import java.util.Map; import java.util.Map;
import nc.bs.dao.BaseDAO;
import nc.bs.uapbd.util.MyHelper;
import nc.impl.pubapp.pattern.rule.IRule; import nc.impl.pubapp.pattern.rule.IRule;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.vo.am.common.util.StringUtils;
import nc.vo.ml.NCLangRes4VoTransl; import nc.vo.ml.NCLangRes4VoTransl;
import nc.vo.org.StockOrgVO;
import nc.vo.pu.m20.entity.PraybillItemVO; import nc.vo.pu.m20.entity.PraybillItemVO;
import nc.vo.pu.m20.entity.PraybillViewVO; import nc.vo.pu.m20.entity.PraybillViewVO;
import nc.vo.pu.m20.entity.writeback.OrderWriteBackVO; import nc.vo.pu.m20.entity.writeback.OrderWriteBackVO;
@ -16,6 +22,7 @@ import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDouble; import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.pattern.exception.ExceptionUtils; import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.MathTool; import nc.vo.pubapp.pattern.pub.MathTool;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
public class CheckOrderNumCalcRule implements IRule<PraybillViewVO> { public class CheckOrderNumCalcRule implements IRule<PraybillViewVO> {
@ -25,6 +32,22 @@ public class CheckOrderNumCalcRule implements IRule<PraybillViewVO> {
public void process(PraybillViewVO[] views) { public void process(PraybillViewVO[] views) {
for(PraybillViewVO vo : views) { for(PraybillViewVO vo : views) {
PraybillItemVO itemVO=vo.getItem(); PraybillItemVO itemVO=vo.getItem();
Map<String, String> configParams = MyHelper.getConfigParams("xb-config", null);
if (configParams.isEmpty()) {
return;
}
String pkOrg = vo.getHead().getPk_org();
String orgCode = null;
try {
orgCode = transferCodeByPk(StockOrgVO.getDefaultTableName(), StockOrgVO.CODE, StockOrgVO.PK_STOCKORG, pkOrg);
// 只有箱变公司才赋值生产BOM字段
if (checkIfOrg(orgCode, configParams)) {
continue;
}
} catch (BusinessException e) {
throw new RuntimeException(e);
}
if(null != itemVO.getAttributeValue("vbdef33") && null!=itemVO.getNaccumulatenum()&& itemVO.getNaccumulatenum().compareTo(new UFDouble(String.valueOf(itemVO.getAttributeValue("vbdef33"))))>0){ if(null != itemVO.getAttributeValue("vbdef33") && null!=itemVO.getNaccumulatenum()&& itemVO.getNaccumulatenum().compareTo(new UFDouble(String.valueOf(itemVO.getAttributeValue("vbdef33"))))>0){
try { try {
throw new BusinessException("请购单累计订货数量大于最终需求数量不能生成采购订单!"); throw new BusinessException("请购单累计订货数量大于最终需求数量不能生成采购订单!");
@ -34,4 +57,35 @@ public class CheckOrderNumCalcRule implements IRule<PraybillViewVO> {
} }
} }
} }
private boolean checkIfOrg(String code, Map<String, String> configParams) throws BusinessException {
String targetCode = configParams.get("xbOrg");
if (targetCode == null || StringUtils.isEmpty(targetCode)) {
throw new BusinessException("未配置组织参数");
}
String[] orgItem = targetCode.split(",");
for (String orgCode : orgItem) {
if (!orgCode.isEmpty() && orgCode.equals(code)) {
return false;
}
}
return true;
}
/**
* 根据主键查询编码
*/
private String transferCodeByPk(String tableName, String selectField, String pkField, String pk) throws BusinessException {
if (nc.vo.cmp.util.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 = new BaseDAO().executeQuery(sqlBuilder.toString(), new ColumnProcessor());
if (o == null) {
throw new BusinessException("未查询到编码信息sql【" + sqlBuilder + "");
}
return o.toString();
}
} }

View File

@ -19,13 +19,13 @@ public class CheckOrderFinalNumRule implements IRule<OrderVO> {
public void process(OrderVO[] orderVOS) { public void process(OrderVO[] orderVOS) {
if (!ArrayUtil.isEmpty(orderVOS)) { if (!ArrayUtil.isEmpty(orderVOS)) {
for (OrderVO vo : orderVOS) { for (OrderVO vo : orderVOS) {
if(vo.getPrimaryKey()!=null){ // if(vo.getPrimaryKey()!=null){
continue; // continue;
} // }
for (OrderItemVO itemVO:vo.getBVO()){ for (OrderItemVO itemVO:vo.getBVO()){
if(null != itemVO.getAttributeValue("vbdef33") && itemVO.getNastnum().compareTo(new UFDouble(String.valueOf(itemVO.getAttributeValue("vbdef33"))))>0){ if(null != itemVO.getAttributeValue("vbdef33") && null!=itemVO.getNaccumarrvnum() && itemVO.getNaccumarrvnum().compareTo(new UFDouble(String.valueOf(itemVO.getAttributeValue("vbdef33"))))>0){
try { try {
throw new BusinessException("采购数量大于最终需求数量不能生成采购订单!"); throw new BusinessException("累计到货主数量大于最终需求数量不能生成到货单!");
} catch (BusinessException e) { } catch (BusinessException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -7,16 +7,21 @@ package nc.bs.pu.m23.writeback.ic.rule;
import nc.bs.dao.BaseDAO; import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException; import nc.bs.dao.DAOException;
import nc.bs.uapbd.util.MyHelper;
import nc.impl.pubapp.pattern.rule.IRule; import nc.impl.pubapp.pattern.rule.IRule;
import nc.jdbc.framework.processor.ColumnProcessor; import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapProcessor; import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.am.common.util.StringUtils;
import nc.vo.ml.NCLangRes4VoTransl; import nc.vo.ml.NCLangRes4VoTransl;
import nc.vo.org.FactoryVO;
import nc.vo.org.StockOrgVO;
import nc.vo.pu.m23.entity.ArriveItemVO; import nc.vo.pu.m23.entity.ArriveItemVO;
import nc.vo.pu.m23.entity.ArriveViewVO; import nc.vo.pu.m23.entity.ArriveViewVO;
import nc.vo.pub.BusinessException; import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDouble; import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.pattern.data.ValueUtils; import nc.vo.pubapp.pattern.data.ValueUtils;
import nc.vo.pubapp.pattern.exception.ExceptionUtils; import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
import java.util.Map; import java.util.Map;
@ -26,12 +31,24 @@ public class ChknaccumstorenumRule implements IRule<ArriveViewVO> {
public void process(ArriveViewVO[] vos) { public void process(ArriveViewVO[] vos) {
if (vos != null && vos.length != 0) { if (vos != null && vos.length != 0) {
Map<String, String> configParams = MyHelper.getConfigParams("xb-config", null);
if (configParams.isEmpty()) {
return;
}
for(ArriveViewVO view : vos) { for(ArriveViewVO view : vos) {
try { try {
UFDouble naccumstorenum1= getNaccumstorenum(view.getBVO().getPk_arriveorder_b()); UFDouble naccumstorenum1= getNaccumstorenum(view.getBVO().getPk_arriveorder_b());
} catch (DAOException e) { String pkOrg = view.getHVO().getPk_org();
String orgCode = null;
orgCode = transferCodeByPk(StockOrgVO.getDefaultTableName(), StockOrgVO.CODE, StockOrgVO.PK_STOCKORG, pkOrg);
// 只有箱变公司才赋值生产BOM字段
if (checkIfOrg(orgCode, configParams)) {
continue;
}
} catch (BusinessException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
UFDouble naccumstorenum = view.getBVO().getNaccumstorenum(); UFDouble naccumstorenum = view.getBVO().getNaccumstorenum();
Object vbdef33 = view.getBVO().getVbdef33(); Object vbdef33 = view.getBVO().getVbdef33();
if(null != vbdef33 && null!=naccumstorenum && naccumstorenum.compareTo(new UFDouble(String.valueOf(vbdef33)))>0) { if(null != vbdef33 && null!=naccumstorenum && naccumstorenum.compareTo(new UFDouble(String.valueOf(vbdef33)))>0) {
@ -45,6 +62,37 @@ public class ChknaccumstorenumRule implements IRule<ArriveViewVO> {
} }
} }
private boolean checkIfOrg(String code, Map<String, String> configParams) throws BusinessException {
String targetCode = configParams.get("xbOrg");
if (targetCode == null || StringUtils.isEmpty(targetCode)) {
throw new BusinessException("未配置组织参数");
}
String[] orgItem = targetCode.split(",");
for (String orgCode : orgItem) {
if (!orgCode.isEmpty() && orgCode.equals(code)) {
return false;
}
}
return true;
}
/**
* 根据主键查询编码
*/
private String transferCodeByPk(String tableName, String selectField, String pkField, String pk) throws BusinessException {
if (nc.vo.cmp.util.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 = new BaseDAO().executeQuery(sqlBuilder.toString(), new ColumnProcessor());
if (o == null) {
throw new BusinessException("未查询到编码信息sql【" + sqlBuilder + "");
}
return o.toString();
}
private UFDouble getNaccumstorenum(String pkArriveorderB) throws DAOException { private UFDouble getNaccumstorenum(String pkArriveorderB) throws DAOException {

View File

@ -17,9 +17,9 @@ public class CheckFinalNumRule implements IRule<ArriveVO> {
public void process(ArriveVO[] arriveVOS) { public void process(ArriveVO[] arriveVOS) {
for (ArriveVO vo : arriveVOS) { for (ArriveVO vo : arriveVOS) {
if (vo.getPrimaryKey() != null) { // if (vo.getPrimaryKey() != null) {
continue; // continue;
} // }
if (vo == null || vo.getHVO() == null) { if (vo == null || vo.getHVO() == null) {
try { try {
throw new BusinessException("到货单主信息不能为空"); throw new BusinessException("到货单主信息不能为空");
@ -29,9 +29,9 @@ public class CheckFinalNumRule implements IRule<ArriveVO> {
} }
ArriveItemVO[] bodys=vo.getBVO(); ArriveItemVO[] bodys=vo.getBVO();
for(ArriveItemVO body : bodys) { for(ArriveItemVO body : bodys) {
if(null!=body.getAttributeValue("vbdef33") && body.getNastnum().compareTo(new UFDouble(String.valueOf(body.getAttributeValue("vbdef33"))))>0){ if(null!=body.getAttributeValue("vbdef33") && null !=body.getNaccumstorenum() && body.getNaccumstorenum().compareTo(new UFDouble(String.valueOf(body.getAttributeValue("vbdef33"))))>0){
try { try {
throw new BusinessException("数量大于最终需求数量不能生成到货单!"); throw new BusinessException("累计入库主数量大于最终需求数量不能生成入库单!");
} catch (BusinessException e) { } catch (BusinessException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }