From 721f442b73fe0e6c792cf654fa537aaf812a9d5b Mon Sep 17 00:00:00 2001 From: mzr Date: Tue, 15 Jul 2025 20:27:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E6=96=99=E8=AE=A1=E5=88=92=E8=BD=AC?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E7=9A=84=E5=85=B6=E5=AE=83=E5=85=A5=E5=BA=93?= =?UTF-8?q?-=E5=A2=9E=E5=8A=A0=E8=BF=87=E6=BB=A4=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E5=92=8C=E9=85=8D=E7=BD=AE=E9=A1=B9=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pickm/action/PickmToGeneralInAction.java | 178 ++++++------------ 1 file changed, 57 insertions(+), 121 deletions(-) diff --git a/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToGeneralInAction.java b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToGeneralInAction.java index 77b31e0..6b099a0 100644 --- a/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToGeneralInAction.java +++ b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToGeneralInAction.java @@ -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 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 resultVO = new ArrayList<>(); - // 查询生产订单参数 - List moParams = new ArrayList<>(); - MapList moidMap = new MapList<>(); - List 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 itemList = new ArrayList(); - 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 isWWPickm = - wwService.isWWPickmTransType(transTypeIds.toArray(new String[0])); - // 查询来源生产订单是否为完工或关闭态 - Map 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 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]); } }