备料计划转库存的其它入库-增加过滤条件和配置项获取
This commit is contained in:
parent
30c0f6f86e
commit
721f442b73
|
@ -1,34 +1,31 @@
|
|||
package nccloud.web.mmpac.pickm.action;
|
||||
|
||||
import nc.bs.dao.BaseDAO;
|
||||
import nc.bs.uapbd.util.MyHelper;
|
||||
import nc.itf.ic.m4a.IGeneralInMaintain;
|
||||
import nc.itf.mmpac.pickm.IPickmQueryService;
|
||||
import nc.itf.mmpac.pickm.IPickmTransTypeService;
|
||||
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.framework.base.MMMapUtil;
|
||||
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.GeneralInHeadVO;
|
||||
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.PickmHeadVO;
|
||||
import nc.vo.mmpac.pickm.entity.PickmItemVO;
|
||||
import nc.vo.mmpac.pickm.enumeration.FbillstatusEnum;
|
||||
import nc.vo.mmpac.pickm.enumeration.FitemsourceEnum;
|
||||
import nc.vo.mmpac.pickm.enumeration.FsourcetypeEnum;
|
||||
import nc.vo.pub.AggregatedValueObject;
|
||||
import nc.vo.pub.BusinessException;
|
||||
import nc.vo.pub.billtype.BilltypeVO;
|
||||
import nc.vo.pub.compiler.PfParameterVO;
|
||||
import nc.vo.pub.lang.UFBoolean;
|
||||
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 nccloud.baseapp.core.log.NCCForUAPLogger;
|
||||
import nccloud.commons.lang.StringUtils;
|
||||
import nccloud.dto.mmpac.pickm.pub.entity.PickmQueryInfoDTO;
|
||||
import nccloud.framework.core.exception.ExceptionUtils;
|
||||
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.json.JsonFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
@ -49,6 +45,16 @@ import java.util.Map;
|
|||
* @date 2025/7/4
|
||||
*/
|
||||
public class PickmToGeneralInAction implements ICommonAction {
|
||||
|
||||
public BaseDAO dao;
|
||||
|
||||
public BaseDAO getDao() {
|
||||
if (dao == null) {
|
||||
dao = new BaseDAO();
|
||||
}
|
||||
return dao;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object doAction(IRequest request) {
|
||||
String read = request.read();
|
||||
|
@ -73,11 +79,8 @@ public class PickmToGeneralInAction implements ICommonAction {
|
|||
/*@res "单据已被修改或删除,请刷新界面重新操作!"*/
|
||||
ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009"));
|
||||
}
|
||||
// 过滤 todo
|
||||
/*AggPickmVO[] filterVOs = this.filterAggPickmVO(aggVOs);
|
||||
if (MMValueCheck.isEmpty(filterVOs)) {
|
||||
ExceptionUtils.wrapBusinessException(PickmLangConsts.getErrNoDataToReqPickm());
|
||||
}*/
|
||||
// 过滤
|
||||
this.filterAggPickmVO(aggVOs);
|
||||
// 转换数据
|
||||
GeneralInVO[] inVOS = convertToGeneralInVO(aggVOs, null);
|
||||
for (GeneralInVO inVO : inVOS) {
|
||||
|
@ -87,12 +90,13 @@ public class PickmToGeneralInAction implements ICommonAction {
|
|||
if (body.getNnum() == null) {
|
||||
body.setNnum(UFDouble.ZERO_DBL);
|
||||
}
|
||||
NCCForUAPLogger.debug("cgeneralbid.nnum = " + body.getNnum());
|
||||
// NCCForUAPLogger.debug("cgeneralbid.nnum = " + body.getNnum());
|
||||
}
|
||||
}
|
||||
// 其它入库新增
|
||||
IGeneralInMaintain generalInMaintain = ServiceLocator.find(IGeneralInMaintain.class);
|
||||
GeneralInVO[] insertVos = generalInMaintain.insert(inVOS);
|
||||
// NCCForUAPLogger.debug("vbillcode = " + insertVos[0].getHead().getVbillcode());
|
||||
Map<String, Object> returnMap = new HashMap<>();
|
||||
returnMap.put("data", insertVos);
|
||||
returnMap.put("success", true);
|
||||
|
@ -123,133 +127,65 @@ public class PickmToGeneralInAction implements ICommonAction {
|
|||
if (MMValueCheck.isEmpty(inVOS)) {
|
||||
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) {
|
||||
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(),
|
||||
// StordocVO.CODE, StordocVO.PK_STORDOC, "");
|
||||
// 其它入库单的仓库、交易类型取自【业务参数设置】的默认值
|
||||
GeneralInHeadVO head = inVO.getHead();
|
||||
// head.setCtrantypeid("0001A110000000001S1E");
|
||||
head.setCtrantypeid(pk_billtypeid);
|
||||
head.setVtrantypecode("4A-01");
|
||||
// 变压器公司的008借料库
|
||||
head.setCwarehouseid("1001A110000002HYPMCB");
|
||||
head.setVtrantypecode(typeCode);
|
||||
head.setCwarehouseid(warehouseId);
|
||||
}
|
||||
return inVOS;
|
||||
}
|
||||
|
||||
/*
|
||||
* 过滤备料计划 审批通过=1,上游生产订单行是投放状态,已生成的不能再生成
|
||||
* fitemstatus 行状态 自由=0,审批通过=4,投放=1,完工=2,关闭=3
|
||||
*/
|
||||
private AggPickmVO[] filterAggPickmVO(AggPickmVO[] aggvos) throws BusinessException {
|
||||
if (aggvos == null) {
|
||||
return null;
|
||||
private void filterAggPickmVO(AggPickmVO[] aggVos) throws BusinessException {
|
||||
if (aggVos == null) {
|
||||
return;
|
||||
}
|
||||
List<AggPickmVO> resultVO = new ArrayList<>();
|
||||
// 查询生产订单参数
|
||||
List<MoQueryParam4Pickm> moParams = new ArrayList<>();
|
||||
MapList<Integer, String> moidMap = new MapList<>();
|
||||
List<String> transTypeIds = new ArrayList<>();
|
||||
for (AggPickmVO aggvo : aggvos) {
|
||||
for (AggPickmVO aggvo : aggVos) {
|
||||
PickmHeadVO head = aggvo.getParentVO();
|
||||
// 完成态
|
||||
if (FbillstatusEnum.FINISH_STATE.equalsValue(head.getFbillstatus())) {
|
||||
continue;
|
||||
if (!FbillstatusEnum.AUDIT_STATE.equalsValue(head.getFbillstatus())) {
|
||||
ExceptionUtils.wrapBusinessException("请选择审核通过的备料计划");
|
||||
}
|
||||
// 表体为空
|
||||
if (MMValueCheck.isEmpty(aggvo.getChildren(PickmItemVO.class))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 行判断是否符合
|
||||
// 校验是否已经生成过去其它入库
|
||||
PickmItemVO[] items = (PickmItemVO[]) aggvo.getChildren(PickmItemVO.class);
|
||||
List<PickmItemVO> itemList = new ArrayList<PickmItemVO>();
|
||||
for (PickmItemVO item : items) {
|
||||
// 发料为否
|
||||
if (!MMValueCheck.isTrue(item.getBcandeliver())) {
|
||||
continue;
|
||||
}
|
||||
// 备料来源不是备料
|
||||
if (!FitemsourceEnum.PREPARE.equalsValue(item.getFitemsource())) {
|
||||
continue;
|
||||
}
|
||||
itemList.add(item);
|
||||
String[] pickmBidArray = Arrays.stream(items)
|
||||
.map(PickmItemVO::getCpickm_bid)
|
||||
.toArray(String[]::new);
|
||||
String bidStr = SqlUtils.getInStr("csourcebillbid", pickmBidArray, true);
|
||||
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 (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 (MaterialProdModeEnum.PRODMODE_PROD.equalsValue(head.getFprodmode())) {
|
||||
moidMap.put(head.getFprodmode(), head.getCsourcebillrowid());
|
||||
}
|
||||
// 离散
|
||||
if (MaterialProdModeEnum.PRODMODE_SEPPROD.equalsValue(head.getFprodmode())) {
|
||||
moidMap.put(head.getFprodmode(), head.getCsourcebillid());
|
||||
SqlBuilder sqlBuilder = new SqlBuilder();
|
||||
sqlBuilder.append(" select fitemstatus");
|
||||
sqlBuilder.append(" from mm_mo");
|
||||
sqlBuilder.append(" where dr = 0");
|
||||
sqlBuilder.append(" and ");
|
||||
sqlBuilder.append("cmoid", head.getCsourcebillrowid());// 来源生产订单明细id
|
||||
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