备料计划转库存的其它入库-增加过滤条件和配置项获取

This commit is contained in:
mzr 2025-07-15 20:27:19 +08:00
parent 30c0f6f86e
commit 721f442b73
1 changed files with 57 additions and 121 deletions

View File

@ -1,34 +1,31 @@
package nccloud.web.mmpac.pickm.action; package nccloud.web.mmpac.pickm.action;
import nc.bs.dao.BaseDAO;
import nc.bs.uapbd.util.MyHelper; import nc.bs.uapbd.util.MyHelper;
import nc.itf.ic.m4a.IGeneralInMaintain; import nc.itf.ic.m4a.IGeneralInMaintain;
import nc.itf.mmpac.pickm.IPickmQueryService; import nc.itf.mmpac.pickm.IPickmQueryService;
import nc.itf.mmpac.pickm.IPickmTransTypeService;
import nc.itf.uap.pf.busiflow.PfButtonClickContext; import nc.itf.uap.pf.busiflow.PfButtonClickContext;
import nc.pubitf.mmpac.mo.pickm.IMoPubService4Pickm; import nc.jdbc.framework.processor.ColumnProcessor;
import nc.pubitf.para.SysInitQuery;
import nc.util.mmf.busi.service.PFPubService; import nc.util.mmf.busi.service.PFPubService;
import nc.util.mmf.framework.base.MMMapUtil;
import nc.util.mmf.framework.base.MMValueCheck; import nc.util.mmf.framework.base.MMValueCheck;
import nc.vo.bd.material.prod.MaterialProdModeEnum; import nc.vo.fi.pub.SqlUtils;
import nc.vo.ic.m4a.entity.GeneralInBodyVO; import nc.vo.ic.m4a.entity.GeneralInBodyVO;
import nc.vo.ic.m4a.entity.GeneralInHeadVO; import nc.vo.ic.m4a.entity.GeneralInHeadVO;
import nc.vo.ic.m4a.entity.GeneralInVO; import nc.vo.ic.m4a.entity.GeneralInVO;
import nc.vo.mmpac.mo.param.MoQueryParam4Pickm;
import nc.vo.mmpac.pickm.entity.AggPickmVO; import nc.vo.mmpac.pickm.entity.AggPickmVO;
import nc.vo.mmpac.pickm.entity.PickmHeadVO; import nc.vo.mmpac.pickm.entity.PickmHeadVO;
import nc.vo.mmpac.pickm.entity.PickmItemVO; import nc.vo.mmpac.pickm.entity.PickmItemVO;
import nc.vo.mmpac.pickm.enumeration.FbillstatusEnum; import nc.vo.mmpac.pickm.enumeration.FbillstatusEnum;
import nc.vo.mmpac.pickm.enumeration.FitemsourceEnum;
import nc.vo.mmpac.pickm.enumeration.FsourcetypeEnum; import nc.vo.mmpac.pickm.enumeration.FsourcetypeEnum;
import nc.vo.pub.AggregatedValueObject; import nc.vo.pub.AggregatedValueObject;
import nc.vo.pub.BusinessException; import nc.vo.pub.BusinessException;
import nc.vo.pub.billtype.BilltypeVO; import nc.vo.pub.billtype.BilltypeVO;
import nc.vo.pub.compiler.PfParameterVO; import nc.vo.pub.compiler.PfParameterVO;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.pub.lang.UFDouble; import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.pattern.pub.MapList; import nc.vo.pubapp.pattern.pub.SqlBuilder;
import nc.vo.scmpub.res.billtype.ICBillType; import nc.vo.scmpub.res.billtype.ICBillType;
import nccloud.baseapp.core.log.NCCForUAPLogger; import nccloud.commons.lang.StringUtils;
import nccloud.dto.mmpac.pickm.pub.entity.PickmQueryInfoDTO; import nccloud.dto.mmpac.pickm.pub.entity.PickmQueryInfoDTO;
import nccloud.framework.core.exception.ExceptionUtils; import nccloud.framework.core.exception.ExceptionUtils;
import nccloud.framework.core.json.IJson; import nccloud.framework.core.json.IJson;
@ -37,9 +34,8 @@ import nccloud.framework.web.action.itf.ICommonAction;
import nccloud.framework.web.container.IRequest; import nccloud.framework.web.container.IRequest;
import nccloud.framework.web.json.JsonFactory; import nccloud.framework.web.json.JsonFactory;
import java.util.ArrayList; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -49,6 +45,16 @@ import java.util.Map;
* @date 2025/7/4 * @date 2025/7/4
*/ */
public class PickmToGeneralInAction implements ICommonAction { public class PickmToGeneralInAction implements ICommonAction {
public BaseDAO dao;
public BaseDAO getDao() {
if (dao == null) {
dao = new BaseDAO();
}
return dao;
}
@Override @Override
public Object doAction(IRequest request) { public Object doAction(IRequest request) {
String read = request.read(); String read = request.read();
@ -73,11 +79,8 @@ public class PickmToGeneralInAction implements ICommonAction {
/*@res "单据已被修改或删除,请刷新界面重新操作!"*/ /*@res "单据已被修改或删除,请刷新界面重新操作!"*/
ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009")); ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009"));
} }
// 过滤 todo // 过滤
/*AggPickmVO[] filterVOs = this.filterAggPickmVO(aggVOs); this.filterAggPickmVO(aggVOs);
if (MMValueCheck.isEmpty(filterVOs)) {
ExceptionUtils.wrapBusinessException(PickmLangConsts.getErrNoDataToReqPickm());
}*/
// 转换数据 // 转换数据
GeneralInVO[] inVOS = convertToGeneralInVO(aggVOs, null); GeneralInVO[] inVOS = convertToGeneralInVO(aggVOs, null);
for (GeneralInVO inVO : inVOS) { for (GeneralInVO inVO : inVOS) {
@ -87,12 +90,13 @@ public class PickmToGeneralInAction implements ICommonAction {
if (body.getNnum() == null) { if (body.getNnum() == null) {
body.setNnum(UFDouble.ZERO_DBL); body.setNnum(UFDouble.ZERO_DBL);
} }
NCCForUAPLogger.debug("cgeneralbid.nnum = " + body.getNnum()); // NCCForUAPLogger.debug("cgeneralbid.nnum = " + body.getNnum());
} }
} }
// 其它入库新增 // 其它入库新增
IGeneralInMaintain generalInMaintain = ServiceLocator.find(IGeneralInMaintain.class); IGeneralInMaintain generalInMaintain = ServiceLocator.find(IGeneralInMaintain.class);
GeneralInVO[] insertVos = generalInMaintain.insert(inVOS); GeneralInVO[] insertVos = generalInMaintain.insert(inVOS);
// NCCForUAPLogger.debug("vbillcode = " + insertVos[0].getHead().getVbillcode());
Map<String, Object> returnMap = new HashMap<>(); Map<String, Object> returnMap = new HashMap<>();
returnMap.put("data", insertVos); returnMap.put("data", insertVos);
returnMap.put("success", true); returnMap.put("success", true);
@ -123,133 +127,65 @@ public class PickmToGeneralInAction implements ICommonAction {
if (MMValueCheck.isEmpty(inVOS)) { if (MMValueCheck.isEmpty(inVOS)) {
ExceptionUtils.wrapBusinessException("备料计划转换其它入库失败"); ExceptionUtils.wrapBusinessException("备料计划转换其它入库失败");
} }
String pkOrg = inVOS[0].getParentVO().getPk_org();
String typeCode = SysInitQuery.getParaString(pkOrg, "ICIN_TYPE");
String warehouseId = SysInitQuery.getParaString(pkOrg, "ICIN_CK");
if (StringUtils.isEmpty(typeCode) || StringUtils.isEmpty(warehouseId)) {
ExceptionUtils.wrapBusinessException("当前组织缺失参数配置,请前往 [业务参数设置-组织] 配置仓库或入库类型参数");
}
for (GeneralInVO inVO : inVOS) { for (GeneralInVO inVO : inVOS) {
String pk_billtypeid = MyHelper.transferField(BilltypeVO.TABLENAME, BilltypeVO.PK_BILLTYPE_ID, BilltypeVO.PK_BILLTYPECODE, "4A-01"); String pk_billtypeid = MyHelper.transferField(BilltypeVO.TABLENAME, BilltypeVO.PK_BILLTYPE_ID, BilltypeVO.PK_BILLTYPECODE, typeCode);
// String code = MyHelper.transferField(StordocVO.getDefaultTableName(), // String code = MyHelper.transferField(StordocVO.getDefaultTableName(),
// StordocVO.CODE, StordocVO.PK_STORDOC, ""); // StordocVO.CODE, StordocVO.PK_STORDOC, "");
// 其它入库单的仓库交易类型取自业务参数设置的默认值 // 其它入库单的仓库交易类型取自业务参数设置的默认值
GeneralInHeadVO head = inVO.getHead(); GeneralInHeadVO head = inVO.getHead();
// head.setCtrantypeid("0001A110000000001S1E"); // head.setCtrantypeid("0001A110000000001S1E");
head.setCtrantypeid(pk_billtypeid); head.setCtrantypeid(pk_billtypeid);
head.setVtrantypecode("4A-01"); head.setVtrantypecode(typeCode);
// 变压器公司的008借料库 head.setCwarehouseid(warehouseId);
head.setCwarehouseid("1001A110000002HYPMCB");
} }
return inVOS; return inVOS;
} }
/* /*
* 过滤备料计划 审批通过=1上游生产订单行是投放状态已生成的不能再生成 * 过滤备料计划 审批通过=1上游生产订单行是投放状态已生成的不能再生成
* fitemstatus 行状态 自由=0,审批通过=4,投放=1,完工=2,关闭=3
*/ */
private AggPickmVO[] filterAggPickmVO(AggPickmVO[] aggvos) throws BusinessException { private void filterAggPickmVO(AggPickmVO[] aggVos) throws BusinessException {
if (aggvos == null) { if (aggVos == null) {
return null; return;
} }
List<AggPickmVO> resultVO = new ArrayList<>(); for (AggPickmVO aggvo : aggVos) {
// 查询生产订单参数
List<MoQueryParam4Pickm> moParams = new ArrayList<>();
MapList<Integer, String> moidMap = new MapList<>();
List<String> transTypeIds = new ArrayList<>();
for (AggPickmVO aggvo : aggvos) {
PickmHeadVO head = aggvo.getParentVO(); PickmHeadVO head = aggvo.getParentVO();
// 完成态 if (!FbillstatusEnum.AUDIT_STATE.equalsValue(head.getFbillstatus())) {
if (FbillstatusEnum.FINISH_STATE.equalsValue(head.getFbillstatus())) { ExceptionUtils.wrapBusinessException("请选择审核通过的备料计划");
continue;
} }
// 表体为空 // 校验是否已经生成过去其它入库
if (MMValueCheck.isEmpty(aggvo.getChildren(PickmItemVO.class))) {
continue;
}
// 行判断是否符合
PickmItemVO[] items = (PickmItemVO[]) aggvo.getChildren(PickmItemVO.class); PickmItemVO[] items = (PickmItemVO[]) aggvo.getChildren(PickmItemVO.class);
List<PickmItemVO> itemList = new ArrayList<PickmItemVO>(); String[] pickmBidArray = Arrays.stream(items)
for (PickmItemVO item : items) { .map(PickmItemVO::getCpickm_bid)
// 发料为否 .toArray(String[]::new);
if (!MMValueCheck.isTrue(item.getBcandeliver())) { String bidStr = SqlUtils.getInStr("csourcebillbid", pickmBidArray, true);
continue; String countSql = "SELECT count(1) FROM ic_generalin_b"
+ " WHERE dr = 0 and " + bidStr;
Integer num = (Integer) getDao().executeQuery(countSql, new ColumnProcessor());
if (num > 0) {
ExceptionUtils.wrapBusinessException("存在已生成其它入库的行");
} }
// 备料来源不是备料 // 如果来源于生产订单判断上游生产订单行是投放状态
if (!FitemsourceEnum.PREPARE.equalsValue(item.getFitemsource())) {
continue;
}
itemList.add(item);
}
if (MMValueCheck.isEmpty(itemList)) {
continue;
}
AggPickmVO vo = new AggPickmVO();
vo.setParent(head);
vo.setChildren(PickmItemVO.class, itemList.toArray(new PickmItemVO[0]));
resultVO.add(vo);
transTypeIds.add(head.getVbusitypeid());
// 如果来源于生产订单,构造查询生产订单参数
if (FsourcetypeEnum.MOBILL_STATE.equalsValue(head.getFsourcetype())) { if (FsourcetypeEnum.MOBILL_STATE.equalsValue(head.getFsourcetype())) {
// 流程 SqlBuilder sqlBuilder = new SqlBuilder();
if (MaterialProdModeEnum.PRODMODE_PROD.equalsValue(head.getFprodmode())) { sqlBuilder.append(" select fitemstatus");
moidMap.put(head.getFprodmode(), head.getCsourcebillrowid()); sqlBuilder.append(" from mm_mo");
} sqlBuilder.append(" where dr = 0");
// 离散 sqlBuilder.append(" and ");
if (MaterialProdModeEnum.PRODMODE_SEPPROD.equalsValue(head.getFprodmode())) { sqlBuilder.append("cmoid", head.getCsourcebillrowid());// 来源生产订单明细id
moidMap.put(head.getFprodmode(), head.getCsourcebillid()); Integer fitemstatus = (Integer) getDao().executeQuery(sqlBuilder.toString(), new ColumnProcessor());
if (fitemstatus != 1) {
ExceptionUtils.wrapBusinessException("上游的生产订单行需要为投放状态");
} }
} }
}
// 过滤后结果为空
if (MMValueCheck.isEmpty(resultVO)) {
return null;
}
// 交易类型
IPickmTransTypeService wwService = ServiceLocator
.find(IPickmTransTypeService.class);
Map<String, Boolean> isWWPickm =
wwService.isWWPickmTransType(transTypeIds.toArray(new String[0]));
// 查询来源生产订单是否为完工或关闭态
Map<String, UFBoolean> ismoFinisOrClose = new HashMap<>();
// 来源生产订单信息为空
if (!MMMapUtil.isEmpty(moidMap)) {
// 构造查询生产订单参数
for (Integer prodmode : moidMap.keySet()) {
MoQueryParam4Pickm param = new MoQueryParam4Pickm();
param.setProdMode(prodmode);
param.setIds(moidMap.get(prodmode).toArray(new String[0]));
moParams.add(param);
}
IMoPubService4Pickm moService = ServiceLocator
.find(IMoPubService4Pickm.class);
ismoFinisOrClose =
moService.getMOItemFinishOrCloseStatus(moParams.toArray(new MoQueryParam4Pickm[0]));
} }
// 循环上一轮结果过滤来源生产订单为关闭或完工的备料 计划
List<AggPickmVO> resultMoVO = new ArrayList<>();
for (AggPickmVO aggvo : resultVO) {
PickmHeadVO head = aggvo.getParentVO();
// 交易类型非生产
if (isWWPickm.containsKey(head.getVbusitypeid())
&& MMValueCheck.isTrue(isWWPickm.get(head.getVbusitypeid()))) {
continue;
}
// 如果不是来源于生产订单,构造查询生产订单参数
if (!FsourcetypeEnum.MOBILL_STATE.equalsValue(head.getFsourcetype())) {
resultMoVO.add(aggvo);
continue;
}
String moid = "";
// 流程
if (MaterialProdModeEnum.PRODMODE_PROD.equalsValue(head.getFprodmode())) {
moid = head.getCsourcebillrowid();
}
// 来源生产订单为完工或关闭态
if (MMValueCheck.isNotEmpty(ismoFinisOrClose) && ismoFinisOrClose.containsKey(moid)
&& MMValueCheck.isTrue(ismoFinisOrClose.get(moid))) {
continue;
}
resultMoVO.add(aggvo);
}
if (MMValueCheck.isEmpty(resultMoVO)) {
return null;
}
return resultMoVO.toArray(new AggPickmVO[0]);
} }
} }