备料计划转库存的其它入库-增加过滤条件和配置项获取
This commit is contained in:
parent
30c0f6f86e
commit
721f442b73
|
@ -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]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue