From d56a5e2ffbe25ee0a01f022854d91b0b3470fc13 Mon Sep 17 00:00:00 2001 From: lihao Date: Sun, 21 Sep 2025 13:55:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E6=96=99=E8=AE=A1=E5=88=92=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pickm/action/PickmCheckIsToAction.java | 195 ++++++++++++++ .../pickm/action/PickmToBuyingreqAction.java | 206 +++++---------- .../web/mmpac/pickm/action/PickmToPmo.java | 246 +++++++----------- .../mmpac/pickm/query/PickmDeliverAction.java | 9 +- .../config/authorize/mmpac_authorize.xml | 1 + .../pickm/config/action/pickm_action.xml | 6 + .../pmo/pac0002/PMOMaintainServiceImpl.java | 39 +++ 7 files changed, 410 insertions(+), 292 deletions(-) create mode 100644 mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmCheckIsToAction.java diff --git a/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmCheckIsToAction.java b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmCheckIsToAction.java new file mode 100644 index 00000000..1838d710 --- /dev/null +++ b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmCheckIsToAction.java @@ -0,0 +1,195 @@ +package nccloud.web.mmpac.pickm.action; + +import nc.bs.dao.BaseDAO; +import nc.bs.dao.DAOException; +import nc.itf.mmpac.pickm.IPickmQueryService; +import nc.jdbc.framework.processor.ColumnProcessor; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmItemVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDouble; +import nccloud.dto.mmpac.pickm.pub.entity.PickmQueryInfoDTO; +import nccloud.framework.core.json.IJson; +import nccloud.framework.service.ServiceLocator; +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.List; + +public class PickmCheckIsToAction implements ICommonAction { + @Override + public Object doAction(IRequest iRequest) { + String read = iRequest.read(); + IJson json = JsonFactory.create(); + try { + // 获取请求查询信息 + PickmQueryInfoDTO paramDTO = json.fromJson(read, PickmQueryInfoDTO.class); + // 获取主键和类型 + String[] cpickmbids = paramDTO.getCpickmbids(); + String type = paramDTO.getType(); // 获取类型:1是请购单,2是生产订单 + + AggPickmVO[] aggVOs = null; + IPickmQueryService service = ServiceLocator.find(IPickmQueryService.class); + AggPickmVO[] vos = null; + if (MMValueCheck.isNotEmpty(cpickmbids)) { + aggVOs = service.queryAggPickmVObyBid(cpickmbids); + // 传递参数:聚合VO、是否来自cpickmbids、订单类型 + vos = processAggVOs(aggVOs, type); + } + // 返回不符合条件的数据 + return vos; + } catch (BusinessException e) { + throw new RuntimeException(e.getMessage(), e); + } + } + + /** + * 处理聚合VO,根据订单类型获取不符合条件的数据 + * @param aggVOs 聚合VO数组 + * @param type 订单类型:1-请购单,2-生产订单 + * @return 不符合条件的聚合VO数组 + */ + public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs, String type) throws DAOException { + List invalidList = new ArrayList<>(); + BaseDAO dao = new BaseDAO(); // 保持DAO实例优化 + + for (AggPickmVO vo : aggVOs) { + PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class); + if (items != null) { + for (PickmItemVO child : items) { + boolean isValid = true; // 标识是否符合条件(符合则不收集) + + // 物料类型过滤逻辑:仅当不是来自cpickmbids时才执行判断 + + String materalType = child.getVbdef14(); + + if (null == materalType) { + // 查询物料信息 + String sql = "select cmaterialvid from mm_pickm where cpickmid = '" + child.getCpickmid() + "' and dr = 0"; + String hmateral = (String) dao.executeQuery(sql, new ColumnProcessor()); + + // 根据订单类型执行不同的BOM查询逻辑 + String bomcode = null; + if ("1".equals(type)) { // 请购单查询逻辑 + sql="SELECT bd_defdoc.code FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom " + + "where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' " + + "AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='" + child.getCbmaterialvid() + "'"; + bomcode = (String) dao.executeQuery(sql, new ColumnProcessor()); + } else if ("2".equals(type)) { // 生产订单查询逻辑 + sql="SELECT bd_defdoc.code FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom " + + "where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' " + + "AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='" + child.getCbmaterialvid() + "'"; + bomcode = (String) dao.executeQuery(sql, new ColumnProcessor()); + } + + // 如果初始查询无结果,执行二次查询(根据类型区分) + if (null == bomcode) { + if ("1".equals(type)) { // 请购单二次查询 + String secondsql=" SELECT bd_defdoc.code FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select bd_bom.cbomid from bd_bom bd_bom " + + "WHERE bd_bom.pk_org = '"+child.getPk_org()+"' and bd_bom.hcmaterialid in " + + "(SELECT bd_bom_b.cmaterialvid FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom " + + "where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' " + + "AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bisvirtual='Y') AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='"+child.getCbmaterialvid()+"'"; + bomcode = (String) dao.executeQuery(secondsql, new ColumnProcessor()); + } else if ("2".equals(type)) { // 生产订单二次查询 + String secondsql=" SELECT bd_defdoc.code FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select bd_bom.cbomid from bd_bom bd_bom " + + "WHERE bd_bom.pk_org = '"+child.getPk_org()+"' and bd_bom.hcmaterialid in " + + "(SELECT bd_bom_b.cmaterialvid FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom " + + "where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' " + + "AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bisvirtual='Y') AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='"+child.getCbmaterialvid()+"'"; + bomcode = (String) dao.executeQuery(secondsql, new ColumnProcessor()); + } + } + + // 判断是否为不符合条件的数据(根据类型可能有不同判断标准) + if (null != bomcode && "2".equals(bomcode)) { + isValid = false; // 采购件:不符合 + } else if (!(null != bomcode && "1".equals(bomcode))) { + // 检查物料类型(可根据订单类型添加不同判断) + sql = "select martype from bd_materialstock where pk_material = '" + child.getCbmaterialvid() + "' and pk_org = '" + child.getPk_org() + "' and dr = 0"; + String matType = (String) dao.executeQuery(sql, new ColumnProcessor()); + + // 请购单和生产订单可能有不同的物料类型过滤标准 + if ("1".equals(type)) { + // 请购单:非制造件或PR类型不符合 + if (null == matType || "PR".equals(matType) || "".equals(matType)) { + isValid = false; + } + } else if ("2".equals(type)) { + // 生产订单:可能有更严格的过滤条件 + if (null == matType || "PR".equals(matType) || "".equals(matType) || "MO".equals(matType)) { + isValid = false; + } + } + } + } else { + // 有物料类型时的判断 + String sql = "SELECT bd_defdoc.code FROM bd_defdoc where bd_defdoc.pk_defdoc = '" + materalType + "'"; + String bomcode = (String) dao.executeQuery(sql, new ColumnProcessor()); + + // 根据订单类型判断不符合条件 + if ("1".equals(type)) { + // 请购单:采购件或未知类型不符合 + if (null == bomcode || "2".equals(bomcode) || "".equals(bomcode)) { + isValid = false; + } + } else if ("2".equals(type)) { + // 生产订单:可能有不同的判断标准 + if (null == bomcode || "2".equals(bomcode) || "3".equals(bomcode) || "".equals(bomcode)) { + isValid = false; + } + } + } + + + // 检查是否为项目专用料(可根据订单类型调整判断逻辑) + if (!child.getBprojectmaterial().booleanValue()) { + // 生产订单可能对项目专用料有更严格要求 + if ("2".equals(type) || "1".equals(type)) { + isValid = false; + } + } + + // 收集不符合条件的数据 + if (!isValid) { + List pickmItemVOList = new ArrayList<>(); + pickmItemVOList.add(child); + + AggPickmVO newVO = new AggPickmVO(); + newVO.setParent(vo.getParent()); + newVO.setChildren(PickmItemVO.class, pickmItemVOList.toArray(new PickmItemVO[0])); + invalidList.add(newVO); + } + } + } + } + return invalidList.toArray(new AggPickmVO[0]); + } +} diff --git a/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToBuyingreqAction.java b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToBuyingreqAction.java index a88974d8..21906cb3 100644 --- a/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToBuyingreqAction.java +++ b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToBuyingreqAction.java @@ -54,23 +54,24 @@ public class PickmToBuyingreqAction implements ICommonAction { // 获取主键 String[] cpickmids = paramDTO.getCpickmids(); String[] cpickmbids = paramDTO.getCpickmbids(); -// if (MMValueCheck.isEmpty(cpickmids) && (null == cpickmbids || cpickmbids.length == 0)) { -// return null; -// } + AggPickmVO[] aggVOs = null; IPickmQueryService service = ServiceLocator.find(IPickmQueryService.class); + AggPickmVO[] vos = null; if (MMValueCheck.isNotEmpty(cpickmbids)) { aggVOs = service.queryAggPickmVObyBid(cpickmbids); + // 传递true标识来自cpickmbids,取消物料过滤 + vos = processAggVOs(aggVOs, true); } else if (MMValueCheck.isNotEmpty(cpickmids)) { aggVOs = service.queryBillsByPks(cpickmids); + // 传递false标识来自cpickmids,保留物料过滤 + vos = processAggVOs(aggVOs, false); } + if (MMValueCheck.isEmpty(aggVOs)) { - /*@res "单据已被修改或删除,请刷新界面重新操作!"*/ ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009")); } -// AggPickmVO[] aggPickmVOS=processAggVOs(aggVOs); - // 转换数据 - AggPickmVO[] vos = processAggVOs(aggVOs); + if(vos.length == 0){ throw new BusinessException("未检测到符合生成请购单数据,不能生成!"); } @@ -92,7 +93,6 @@ public class PickmToBuyingreqAction implements ICommonAction { for (AggPickmVO prayVO : vos) { PickmItemVO[] items = (PickmItemVO[]) prayVO.getChildren(PickmItemVO.class); for (int j=0;j returnMap = new HashMap<>(); returnMap.put("data", res); returnMap.put("success", true); @@ -110,7 +109,6 @@ public class PickmToBuyingreqAction implements ICommonAction { updetaPmo(pk); } if(!updateList.isEmpty()){ -// 回写已经下达数量 updetaPmoNum(updateList); } return returnMap; @@ -127,34 +125,26 @@ public class PickmToBuyingreqAction implements ICommonAction { BaseDAO dao = new BaseDAO(); for (Map updateMap : updateList) { String sql = " update mm_pickm_b set vbdef16 = '"+((UFDouble)updateMap.get("num")).toString()+"' where mm_pickm_b.cpickm_bid ='" + updateMap.get("pk") + "'"; - dao.executeUpdate(sql); } - - } + private PraybillVO[] convertToGeneralInVO(AggregatedValueObject[] sourceBillVOs, PfParameterVO srcParaVo) throws BusinessException { - // 来源交易类型或单据类型,需要在单据类型中注册 String srcBillOrTranstype = "55A3"; - // 目标交易类型或单据类型,需要在单据类型中注册 String destBillOrTranstype = "20"; - // classifyMode int型参数,调用模式,参照PfButtonClickContext中定义,代码中调用为接口方式 ClassifyByItfdef int classifyMode = PfButtonClickContext.ClassifyByItfdef; PraybillVO[] inVOS = (PraybillVO[]) PFPubService.runChangeData(srcBillOrTranstype, destBillOrTranstype, sourceBillVOs, srcParaVo, classifyMode); if (MMValueCheck.isEmpty(inVOS)) { ExceptionUtils.wrapBusinessException("备料计划转换请购单失败"); } for (PraybillVO inVO : inVOS) { - // 其它入库单的仓库、交易类型取自【业务参数设置】的默认值 PraybillHeaderVO head = inVO.getHVO(); String ctrantypeid = getValueByCondtion("bd_billtype", " pk_billtypeid ", " istransaction = 'Y' and nvl ( islock, 'N' ) = 'N' and parentbilltype = '20' and pk_group = '" + InvocationInfoProxy.getInstance().getGroupId() + "' and pk_billtypecode = '" + "20-01" + "' "); head.setCtrantypeid(ctrantypeid); - // head.setCwarehouseid(""); } - List resultList = new ArrayList<>(); Map> groupMap = new HashMap<>(); @@ -165,7 +155,6 @@ public class PickmToBuyingreqAction implements ICommonAction { for (Map.Entry> entry : groupMap.entrySet()) { List group = entry.getValue(); - // 修改1:使用ISuperVO列表收集子对象 List mergedChildren = new ArrayList(); for (PraybillVO vo : group) { for (PraybillItemVO child : vo.getBVO()) { @@ -177,17 +166,15 @@ public class PickmToBuyingreqAction implements ICommonAction { } PraybillVO newVO = new PraybillVO(); newVO.setParent(group.get(0).getHVO()); - // 修改2:转换为ISuperVO数组 newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PraybillItemVO[0])); resultList.add(newVO); } return resultList.toArray(new PraybillVO[0]); -// return inVOS; } + private String getValueByCondtion(String tablename, String fieldname, String contion) throws BusinessException { BaseDAO dao = new BaseDAO(); - String result = ""; StringBuffer sb = new StringBuffer(); sb.append(" SELECT " + fieldname + " FROM " + tablename + " "); @@ -202,159 +189,110 @@ public class PickmToBuyingreqAction implements ICommonAction { StringBuilder sb = new StringBuilder(); if (arrayList.size() > 1) { for (int i = 0; i < arrayList.size(); i++) { - - sb.append("'").append(arrayList.get(i)).append("'"); if (i < arrayList.size() - 1) { sb.append(","); } } - result = sb.toString(); } else { result = "'" + (String) arrayList.get(0) + "'"; } String sql = " update mm_pickm_b set vbdef30='Y' where mm_pickm_b.cpickm_bid in(" + result + ")"; - BaseDAO dao = new BaseDAO(); dao.executeUpdate(sql); } - - public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs) throws DAOException { -// Map> groupMap = new HashMap<>(); -// -// for (AggPickmVO vo : aggVOs) { -// Object pk_org = vo.getParentVO().getPk_org(); -// groupMap.computeIfAbsent(pk_org, k -> new ArrayList<>()).add(vo); -// } - + // 增加isFromBid参数,标识是否来自cpickmbids查询 + public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs, boolean isFromBid) throws DAOException { List resultList = new ArrayList<>(); + List mergedChildren = new ArrayList(); -// for (Map.Entry> entry : groupMap.entrySet()) { -// List group = entry.getValue(); - - // 修改1:使用ISuperVO列表收集子对象 - List mergedChildren = new ArrayList(); - for (AggPickmVO vo : aggVOs) { - PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class); - if (items != null) { - for (PickmItemVO child : items) { - // 未下达子表 切 若物料类型为“采购件”,则备料计划中所有采购件生成一张请购单 - if(null != child.getAttributeValue("vbdef30") && child.getAttributeValue("vbdef30").equals("Y") ){ -// 如果已经下达数量 大于等于 需要下达数量 则不可继续下达 - if(null==child.getVbdef16() || (new UFDouble(child.getVbdef16()).compareTo(child.getNplanoutnum().sub(null!=child.getNaccoutastnum() ?child.getNaccoutastnum():UFDouble.ZERO_DBL)) >=0)){ - continue; - }else{ - - } -// if(new UFDouble(child.getVbdef16()).compareTo(child.getNplanoutnum().add(child.getNaccoutastnum())) >0){ -// -// }else{ -// -// } + for (AggPickmVO vo : aggVOs) { + PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class); + if (items != null) { + for (PickmItemVO child : items) { + // 已下达判断逻辑保持不变 + if(null != child.getAttributeValue("vbdef30") && child.getAttributeValue("vbdef30").equals("Y") ){ + if(null==child.getVbdef16() || (new UFDouble(child.getVbdef16()).compareTo( + child.getNplanoutnum().sub(null!=child.getNaccoutastnum() ? + child.getNaccoutastnum():UFDouble.ZERO_DBL)) >=0)){ + continue; } - String materalType = child.getVbdef14(); - if(null == materalType){ -// MR=制造件; -// PR=采购件; -// 1=制造件; -// 2=采购件; - String sql = " select cmaterialvid from mm_pickm where cpickmid='" + child.getCpickmid() + "' and dr=0"; + } +// 是否转为通用件若为Y,不下达请购单 + if(null != child.getAttributeValue("vbdef29") && child.getAttributeValue("vbdef29").equals("Y") ){ + continue; + } + + // 物料类型过滤逻辑:仅当不是来自cpickmbids时才执行过滤 + String materalType = child.getVbdef14(); + if(!isFromBid) { // 核心修改:增加isFromBid判断 + if(null == materalType){ + String sql = " select cmaterialvid from mm_pickm where cpickmid='" + child.getCpickmid() + "' and dr=0"; BaseDAO dao = new BaseDAO(); String hmateral = (String) dao.executeQuery(sql, new ColumnProcessor()); - - sql="SELECT\n" + - "\n" + - " bd_defdoc.code \n" + - "FROM\n" + - " bd_bom_b \n" + - " LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc\n" + - "WHERE\n" + - " bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) \n" + - " AND bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='" + child.getCbmaterialvid() + "'"; + sql="SELECT bd_defdoc.code FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom " + + "where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' " + + "AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='" + child.getCbmaterialvid() + "'"; String bomcode = (String) dao.executeQuery(sql, new ColumnProcessor()); - - // MR=制造件; - // PR=采购件; if(null==bomcode){ - String secondsql=" SELECT\n" + - "\n" + - " bd_defdoc.code\n" + - "FROM\n" + - " bd_bom_b \n" + - " LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc\n" + - "WHERE\n" + - " bd_bom_b.cbomid in (select bd_bom.cbomid from bd_bom bd_bom WHERE bd_bom.pk_org = '"+child.getPk_org()+"' and bd_bom.hcmaterialid in (SELECT\n" + - " bd_bom_b.cmaterialvid \n" + - "FROM\n" + - " bd_bom_b \n" + - " LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc\n" + - "WHERE\n" + - " bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) \n" + - "AND bisvirtual='Y') AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) \n" + - " AND \n" + - " bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='"+child.getCbmaterialvid()+"'"; + String secondsql=" SELECT bd_defdoc.code FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select bd_bom.cbomid from bd_bom bd_bom " + + "WHERE bd_bom.pk_org = '"+child.getPk_org()+"' and bd_bom.hcmaterialid in " + + "(SELECT bd_bom_b.cmaterialvid FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom " + + "where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' " + + "AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bisvirtual='Y') AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='"+child.getCbmaterialvid()+"'"; bomcode = (String) dao.executeQuery(secondsql, new ColumnProcessor()); } + if(null != bomcode && "2".equals(bomcode) ){ -// sql = " select martype from bd_materialstock where pk_material='" + child.getCbmaterialvid() + "' and pk_org='"+child.getPk_org()+"' and dr=0"; -// String matType = (String) dao.executeQuery(sql, new ColumnProcessor()); -// if(null == matType || "MR".equals(matType) || "".equals(matType)){ -// continue; -// } + // 采购件保留 }else if(null != bomcode && "1".equals(bomcode)){ - continue; + continue; // 制造件过滤 }else{ sql = " select martype from bd_materialstock where pk_material='" + child.getCbmaterialvid() + "' and pk_org='"+child.getPk_org()+"' and dr=0"; String matType = (String) dao.executeQuery(sql, new ColumnProcessor()); if(null == matType || "MR".equals(matType) || "".equals(matType)){ - continue; + continue; // 非采购件过滤 } } }else { - String sql="SELECT\n" + - "\n" + - " bd_defdoc.code \n" + - "FROM\n" + - " bd_defdoc where bd_defdoc.bd_defdoc.pk_defdoc='" + materalType + "'"; + String sql="SELECT bd_defdoc.code FROM bd_defdoc where bd_defdoc.pk_defdoc='" + materalType + "'"; BaseDAO dao = new BaseDAO(); String bomcode = (String) dao.executeQuery(sql, new ColumnProcessor()); if(null == bomcode || "1".equals(bomcode) || "".equals(bomcode) ){ - continue; + continue; // 制造件或未知类型过滤 } } - //只合并项目专用料数据 - if(child.getBprojectmaterial().booleanValue()){ -// mergedChildren.add(child); - List pickmItemVOList = new ArrayList(); - pickmItemVOList.add(child); - AggPickmVO newVO = new AggPickmVO(); - newVO.setParent(vo.getParent()); - // 修改2:转换为ISuperVO数组 - newVO.setChildren(PickmItemVO.class, pickmItemVOList.toArray(new PickmItemVO[0])); - resultList.add(newVO); - } - // CircularlyAccessibleValueObject 实现了 ISuperVO + } // 物料类型过滤逻辑结束 + + // 只合并项目专用料数据 + if(child.getBprojectmaterial().booleanValue()){ + List pickmItemVOList = new ArrayList(); + pickmItemVOList.add(child); + AggPickmVO newVO = new AggPickmVO(); + newVO.setParent(vo.getParent()); + newVO.setChildren(PickmItemVO.class, pickmItemVOList.toArray(new PickmItemVO[0])); + resultList.add(newVO); } } } -// if(mergedChildren.size() == 0){ -// continue; -// } - -// AggPickmVO newVO = new AggPickmVO(); -// newVO.setParent(group.get(0).getParentVO()); -// // 修改2:转换为ISuperVO数组 -// newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PickmItemVO[0])); -// -// resultList.add(newVO); -// } - + } return resultList.toArray(new AggPickmVO[0]); } - } diff --git a/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToPmo.java b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToPmo.java index 448e1b0c..b54ab5d6 100644 --- a/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToPmo.java +++ b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToPmo.java @@ -48,22 +48,24 @@ public class PickmToPmo implements ICommonAction { // 获取主键 String[] cpickmids = paramDTO.getCpickmids(); String[] cpickmbids = paramDTO.getCpickmbids(); -// if (MMValueCheck.isEmpty(cpickmids) && (null == cpickmbids || cpickmbids.length == 0)) { -// return null; -// } + AggPickmVO[] aggVOs = null; IPickmQueryService service = ServiceLocator.find(IPickmQueryService.class); + AggPickmVO[] vos = null; if (MMValueCheck.isNotEmpty(cpickmbids)) { aggVOs = service.queryAggPickmVObyBid(cpickmbids); + // 传递true标识来自cpickmbids,取消物料过滤 + vos = processAggVOs(aggVOs, true); } else if (MMValueCheck.isNotEmpty(cpickmids)) { aggVOs = service.queryBillsByPks(cpickmids); + // 传递false标识来自cpickmids,保留物料过滤 + vos = processAggVOs(aggVOs, false); } + if (MMValueCheck.isEmpty(aggVOs)) { - /*@res "单据已被修改或删除,请刷新界面重新操作!"*/ ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009")); } - AggPickmVO[] vos = processAggVOs(aggVOs); if(vos.length == 0){ throw new BusinessException("未检测到符合生成生产单数据,不能生成!"); } @@ -108,18 +110,14 @@ public class PickmToPmo implements ICommonAction { throw new RuntimeException(ex); } } -// return null; } private void updetaPmoNum(List> updateList) throws DAOException { BaseDAO dao = new BaseDAO(); for (Map updateMap : updateList) { String sql = " update mm_pickm_b set vbdef16 = '"+((UFDouble)updateMap.get("num")).toString()+"' where mm_pickm_b.cpickm_bid ='" + updateMap.get("pk") + "'"; - dao.executeUpdate(sql); } - - } private void updetaPmo(List arrayList) throws DAOException { @@ -127,22 +125,18 @@ public class PickmToPmo implements ICommonAction { StringBuilder sb = new StringBuilder(); if (arrayList.size() > 1) { for (int i = 0; i < arrayList.size(); i++) { - - sb.append("'").append(arrayList.get(i)).append("'"); if (i < arrayList.size() - 1) { sb.append(","); } } - result = sb.toString(); } else { result = "'" + (String) arrayList.get(0) + "'"; } String sql = " update mm_pickm_b set vbdef30='Y' where mm_pickm_b.cpickm_bid in(" + result + ")"; - BaseDAO dao = new BaseDAO(); - dao.executeUpdate(sql); + dao.executeUpdate(sql); } private PMOAggVO[] convertToGeneralInVO(AggPickmVO[] sourceBillVOs, PfParameterVO srcParaVo) @@ -164,58 +158,47 @@ public class PickmToPmo implements ICommonAction { for (PMOAggVO inVO : inVOS) { // 其它入库单的仓库、交易类型取自【业务参数设置】的默认值 PMOHeadVO head = inVO.getParentVO(); - // head.setCtrantypeid("0001A110000000001S1E"); String ctrantypeid = getValueByCondtion("bd_billtype", " pk_billtypeid ", " istransaction = 'Y' and nvl ( islock, 'N' ) = 'N' and parentbilltype = '55A2' and pk_group = '" + InvocationInfoProxy.getInstance().getGroupId() + "' and pk_billtypecode = '" + "55A2-Cxx-08" + "' "); head.setCtrantypeid(ctrantypeid); for (PMOItemVO itemVO: inVO.getChildrenVO()){ -// itemVO.setTplanendtime(); for(AggPickmVO aggPickmVO:sourceBillVOs){ -// if(itemVO.getVsrcid().equals(aggPickmVO.getParentVO().getCpickmid())){ + if(null!=aggPickmVO.getParentVO().getVfirstbilltype() && aggPickmVO.getParentVO().getVfirstbilltype().equals("55A2") ){ + String[] ids = new String[1]; + ids[0] = aggPickmVO.getParentVO().getVfirstmoid(); - if(null!=aggPickmVO.getParentVO().getVfirstbilltype() &&aggPickmVO.getParentVO().getVfirstbilltype().equals("55A2") ){ - String[] ids = new String[1]; - ids[0] = aggPickmVO.getParentVO().getVfirstmoid(); - - PMOAggVO[] rvo = query.queryByPks(ids); - if(null == rvo || rvo.length == 0){ - continue; - } - for (PMOItemVO ritem: rvo[0].getChildrenVO()){ - if(ritem.getVrowno().equals(aggPickmVO.getParentVO().getVfirstbillrowno())){ - itemVO.setTplanendtime(ritem.getTplanendtime()); - } + PMOAggVO[] rvo = query.queryByPks(ids); + if(null == rvo || rvo.length == 0){ + continue; + } + for (PMOItemVO ritem: rvo[0].getChildrenVO()){ + if(ritem.getVrowno().equals(aggPickmVO.getParentVO().getVfirstbillrowno())){ + itemVO.setTplanendtime(ritem.getTplanendtime()); } } + } - if(null!=aggPickmVO.getParentVO().getVsourcebilltype() &&aggPickmVO.getParentVO().getVsourcebilltype().equals("55A2") ){ - String[] ids = new String[1]; - ids[0] = aggPickmVO.getParentVO().getVsourcemoid(); + if(null!=aggPickmVO.getParentVO().getVsourcebilltype() && aggPickmVO.getParentVO().getVsourcebilltype().equals("55A2") ){ + String[] ids = new String[1]; + ids[0] = aggPickmVO.getParentVO().getVsourcemoid(); - PMOAggVO[] rvo = query.queryByPks(ids); - if(null == rvo || rvo.length == 0){ - continue; - } - for (PMOItemVO ritem: rvo[0].getChildrenVO()){ - if(ritem.getVrowno().equals(aggPickmVO.getParentVO().getVsourcebillrowno())){ - itemVO.setTplanendtime(ritem.getTplanendtime()); - } + PMOAggVO[] rvo = query.queryByPks(ids); + if(null == rvo || rvo.length == 0){ + continue; + } + for (PMOItemVO ritem: rvo[0].getChildrenVO()){ + if(ritem.getVrowno().equals(aggPickmVO.getParentVO().getVsourcebillrowno())){ + itemVO.setTplanendtime(ritem.getTplanendtime()); } } - -// } + } } if(null !=itemVO.getCprojectid() && null!=itemVO.getCmaterialvid()){ - -// OrgVO orgvo = (OrgVO)hy.queryByPrimaryKey(OrgVO.class, ); - - String cbomid = (String) hy.findColValue("bd_bmrt", "cbomid", "cprojectid = '"+itemVO.getCprojectid()+"' AND cmaterialid= '"+itemVO.getCmaterialvid()+"' AND dr = '0' AND pk_org= '"+head.getPk_org()+"'"); itemVO.setCbomversionid(cbomid); } } - // head.setCwarehouseid(""); } List resultList = new ArrayList<>(); Map> groupMap = new HashMap<>(); @@ -227,49 +210,40 @@ public class PickmToPmo implements ICommonAction { for (Map.Entry> entry : groupMap.entrySet()) { List group = entry.getValue(); - // 修改1:使用ISuperVO列表收集子对象 List mergedChildren = new ArrayList(); for (PMOAggVO vo : group) { - for (PMOItemVO child : vo.getChildrenVO()) { - mergedChildren.add(child); - } + for (PMOItemVO child : vo.getChildrenVO()) { + mergedChildren.add(child); + } } if(mergedChildren.isEmpty()){ continue; } PMOAggVO newVO = new PMOAggVO(); newVO.setParent(group.get(0).getParentVO()); - // 修改2:转换为ISuperVO数组 newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PMOItemVO[0])); resultList.add(newVO); } return resultList.toArray(new PMOAggVO[0]); } + private UFDateTime getnextmonth(UFDateTime date) { if (date == null) { throw new IllegalArgumentException("输入的 UFDateTime 不能为 null"); } - // 1. 获取原始时间戳(UTC 毫秒数) long originalTime = date.getMillis(); - - // 2. 使用 UFDateTime 默认时区(与原类保持一致)创建日历对象 - // 注:UFDateTime 内部使用 basezoneCalendar() 时依赖 Calendars.getGMTDefault(),此处保持一致 - TimeZone defaultTimeZone = Calendars.getGMTDefault(); // 需确保 Calendars 类可访问 + TimeZone defaultTimeZone = Calendars.getGMTDefault(); GregorianCalendar calendar = new GregorianCalendar(defaultTimeZone); calendar.setTimeInMillis(originalTime); - - // 3. 将月份加 1(日历自动处理 12月→次年1月,及月份天数不足的情况) calendar.add(java.util.Calendar.MONTH, 1); - - // 4. 基于调整后的时间戳创建新的 UFDateTime 对象 long nextMonthTime = calendar.getTimeInMillis(); return new UFDateTime(nextMonthTime); } + private String getValueByCondtion(String tablename, String fieldname, String contion) throws BusinessException { BaseDAO dao = new BaseDAO(); - String result = ""; StringBuffer sb = new StringBuffer(); sb.append(" SELECT " + fieldname + " FROM " + tablename + " "); @@ -278,129 +252,91 @@ public class PickmToPmo implements ICommonAction { result = (String) dao.executeQuery(sb.toString(), new ColumnProcessor()); return result; } - public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs) throws DAOException { -// Map> groupMap = new HashMap<>(); -// -// for (AggPickmVO vo : aggVOs) { -// Object pk_org = vo.getParentVO().getPk_org(); -// groupMap.computeIfAbsent(pk_org, k -> new ArrayList<>()).add(vo); -// } + // 增加isFromBid参数,标识是否来自cpickmbids查询 + public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs, boolean isFromBid) throws DAOException { List resultList = new ArrayList<>(); -// for (Map.Entry> entry : groupMap.entrySet()) { -// List group = entry.getValue(); - - // 修改1:使用ISuperVO列表收集子对象 - List mergedChildren = new ArrayList(); - for (AggPickmVO vo : aggVOs) { - PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class); - if (items != null) { - for (PickmItemVO child : items) { - -// 未下达子表 切 若物料类型为“制造件”,则备料计划中所有制造件件生成一张开立状态的流程生产订单 - if(null != child.getAttributeValue("vbdef30") && child.getAttributeValue("vbdef30").equals("Y") ){ -// continue; - if(null==child.getVbdef16() || (new UFDouble(child.getVbdef16()).compareTo(child.getNplanoutnum().sub(null!=child.getNaccoutastnum() ?child.getNaccoutastnum():UFDouble.ZERO_DBL)) >=0)){ - continue; - }else{ - - } + for (AggPickmVO vo : aggVOs) { + PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class); + if (items != null) { + for (PickmItemVO child : items) { + // 已下达判断逻辑保持不变 + if(null != child.getAttributeValue("vbdef30") && child.getAttributeValue("vbdef30").equals("Y") ){ + if(null==child.getVbdef16() || (new UFDouble(child.getVbdef16()).compareTo( + child.getNplanoutnum().sub(null!=child.getNaccoutastnum() ? + child.getNaccoutastnum():UFDouble.ZERO_DBL)) >=0)){ + continue; } - String rowno=child.getVrowno(); - String materalType = child.getVbdef14(); - if(null == materalType){ -// 1=制造件; -// 2=采购件; - String sql = " select cmaterialvid from mm_pickm where cpickmid='" + child.getCpickmid() + "' and dr=0"; + } + // 物料类型过滤逻辑:仅当不是来自cpickmbids时才执行过滤 + String materalType = child.getVbdef14(); + if(!isFromBid) { // 核心修改:增加isFromBid判断 + if(null == materalType){ + String sql = " select cmaterialvid from mm_pickm where cpickmid='" + child.getCpickmid() + "' and dr=0"; BaseDAO dao = new BaseDAO(); String hmateral = (String) dao.executeQuery(sql, new ColumnProcessor()); - - sql="SELECT\n" + - "\n" + - " bd_defdoc.code \n" + - "FROM\n" + - " bd_bom_b \n" + - " LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc\n" + - "WHERE\n" + - " bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) \n" + - " AND bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='" + child.getCbmaterialvid() + "'"; + sql="SELECT bd_defdoc.code FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom " + + "where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' " + + "AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='" + child.getCbmaterialvid() + "'"; String bomcode = (String) dao.executeQuery(sql, new ColumnProcessor()); - - // MR=制造件; - // PR=采购件; if(null==bomcode){ - String secondsql=" SELECT\n" + - "\n" + - " bd_defdoc.code\n" + - "FROM\n" + - " bd_bom_b \n" + - " LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc\n" + - "WHERE\n" + - " bd_bom_b.cbomid in (select bd_bom.cbomid from bd_bom bd_bom WHERE bd_bom.pk_org = '"+child.getPk_org()+"' and bd_bom.hcmaterialid in (SELECT\n" + - " bd_bom_b.cmaterialvid \n" + - "FROM\n" + - " bd_bom_b \n" + - " LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc\n" + - "WHERE\n" + - " bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) \n" + - "AND bisvirtual='Y') AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) \n" + - " AND \n" + - " bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='"+child.getCbmaterialvid()+"'"; + String secondsql=" SELECT bd_defdoc.code FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select bd_bom.cbomid from bd_bom bd_bom " + + "WHERE bd_bom.pk_org = '"+child.getPk_org()+"' and bd_bom.hcmaterialid in " + + "(SELECT bd_bom_b.cmaterialvid FROM bd_bom_b " + + "LEFT JOIN bd_defdoc ON bd_bom_b.vdef1 = bd_defdoc.pk_defdoc " + + "WHERE bd_bom_b.cbomid in (select distinct bd_bom.cbomid from bd_bom bd_bom " + + "where ( bd_bom.pk_org = '"+child.getPk_org()+"' AND bd_bom.hcmaterialid = '"+hmateral+"' " + + "AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' ) " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bisvirtual='Y') AND bd_bom.hfbomcategory = 1 AND bd_bom.hbcustomized = 'N' " + + "and bd_bom.dr = 0 and bd_bom.hbcustomized = 'N' and bd_bom.fbomtype != 3 ) " + + "AND bd_bom_b.dr = 0 and bd_bom_b.cmaterialvid='"+child.getCbmaterialvid()+"'"; bomcode = (String) dao.executeQuery(secondsql, new ColumnProcessor()); } - if(null != bomcode && "1".equals(bomcode) ){ + if(null != bomcode && "1".equals(bomcode) ){ + // 制造件保留 }else if(null != bomcode && "2".equals(bomcode)){ - continue; + continue; // 采购件过滤 }else{ sql = " select martype from bd_materialstock where pk_material='" + child.getCbmaterialvid() + "' and pk_org='"+child.getPk_org()+"' and dr=0"; String matType = (String) dao.executeQuery(sql, new ColumnProcessor()); if(null == matType || "PR".equals(matType) || "".equals(matType)){ - continue; + continue; // 非制造件过滤 } } }else { - String sql="SELECT\n" + - "\n" + - " bd_defdoc.code \n" + - "FROM\n" + - " bd_defdoc where bd_defdoc.bd_defdoc.pk_defdoc='" + materalType + "'"; + String sql="SELECT bd_defdoc.code FROM bd_defdoc where bd_defdoc.pk_defdoc='" + materalType + "'"; BaseDAO dao = new BaseDAO(); String bomcode = (String) dao.executeQuery(sql, new ColumnProcessor()); if(null == bomcode || "2".equals(bomcode) || "".equals(bomcode) ){ - continue; + continue; // 采购件或未知类型过滤 } } - //只合并项目专用料数据 - if(child.getBprojectmaterial().booleanValue()){ - List pickmItemVOList = new ArrayList(); - pickmItemVOList.add(child); - AggPickmVO newVO = new AggPickmVO(); - newVO.setParent(vo.getParent()); - // 修改2:转换为ISuperVO数组 - newVO.setChildren(PickmItemVO.class, pickmItemVOList.toArray(new PickmItemVO[0])); - resultList.add(newVO); - } - // CircularlyAccessibleValueObject 实现了 ISuperVO + } // 物料类型过滤逻辑结束 + + // 只合并项目专用料数据 + if(child.getBprojectmaterial().booleanValue()){ + List pickmItemVOList = new ArrayList(); + pickmItemVOList.add(child); + AggPickmVO newVO = new AggPickmVO(); + newVO.setParent(vo.getParent()); + newVO.setChildren(PickmItemVO.class, pickmItemVOList.toArray(new PickmItemVO[0])); + resultList.add(newVO); } } } -// if(resultList.size() == 0){ -// continue; -// } - -// AggPickmVO newVO = new AggPickmVO(); -// newVO.setParent(group.get(0).getParentVO()); -// // 修改2:转换为ISuperVO数组 -// newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PickmItemVO[0])); -// -// resultList.add(newVO); -// } - + } return resultList.toArray(new AggPickmVO[0]); } } diff --git a/mmpac/src/client/nccloud/web/mmpac/pickm/query/PickmDeliverAction.java b/mmpac/src/client/nccloud/web/mmpac/pickm/query/PickmDeliverAction.java index 727b112b..8a87cc79 100644 --- a/mmpac/src/client/nccloud/web/mmpac/pickm/query/PickmDeliverAction.java +++ b/mmpac/src/client/nccloud/web/mmpac/pickm/query/PickmDeliverAction.java @@ -92,7 +92,7 @@ public class PickmDeliverAction implements ICommonAction { } List pks = new ArrayList(); - + String errormessage=""; for(AggPickmVO agg : aggVOs) { for(PickmItemVO item : (PickmItemVO[])agg.getChildrenVO()) { // 流程生产订单明细表 @@ -103,10 +103,11 @@ public class PickmDeliverAction implements ICommonAction { "\tm.cmoid = '"+id+"' "; BaseDAO dao = new BaseDAO(); String data =(String) dao.executeQuery(sql, new ColumnProcessor()); - + data=data.substring(0,10); UFDate now=new UFDate(); // 领料校验 当前时间必须在计划结束时间前七天 if(null!=data && (now.compareTo(new UFDate(data)) >0 || now.getDateAfter(7).compareTo(new UFDate(data)) <0)){ + errormessage=errormessage+"当前时间不在"+item.getVrowno()+"行数据计划结束时间"+data+"前七天 禁止领料\n"; continue; }; @@ -114,7 +115,9 @@ public class PickmDeliverAction implements ICommonAction { pks.add(item.getCpickm_bid()); } } - + if(errormessage.length()>0){ + throw new BusinessException(errormessage); + } String deliverAppcode = "50080105"; String deliverPagecode = "5008010501"; if (MMValueCheck.isNotEmpty(paramDTO.getAppcode()) && paramDTO.getAppcode().startsWith("5009")) { diff --git a/mmpac/src/client/yyconfig/modules/mmpac/config/authorize/mmpac_authorize.xml b/mmpac/src/client/yyconfig/modules/mmpac/config/authorize/mmpac_authorize.xml index 43070abf..cfe04dc3 100644 --- a/mmpac/src/client/yyconfig/modules/mmpac/config/authorize/mmpac_authorize.xml +++ b/mmpac/src/client/yyconfig/modules/mmpac/config/authorize/mmpac_authorize.xml @@ -262,6 +262,7 @@ mmpac.pickm.convertOtherIn mmpac.pickm.buyingreq mmpac.pickm.pom + mmpac.pickm.checkPickm mmpac.pickm.pickmItemsQuery mmpac.pickm.pickmByIdsQuery diff --git a/mmpac/src/client/yyconfig/modules/mmpac/pickm/config/action/pickm_action.xml b/mmpac/src/client/yyconfig/modules/mmpac/pickm/config/action/pickm_action.xml index 16af4bc7..1cc5de37 100644 --- a/mmpac/src/client/yyconfig/modules/mmpac/pickm/config/action/pickm_action.xml +++ b/mmpac/src/client/yyconfig/modules/mmpac/pickm/config/action/pickm_action.xml @@ -173,6 +173,12 @@ nccloud.web.mmpac.pickm.action.PickmToPmo + + mmpac.pickm.checkPickm + + nccloud.web.mmpac.pickm.action.PickmCheckIsToAction + + mmpac.pickm.pushrzmes diff --git a/mmpac/src/private/nc/impl/mmpac/pmo/pac0002/PMOMaintainServiceImpl.java b/mmpac/src/private/nc/impl/mmpac/pmo/pac0002/PMOMaintainServiceImpl.java index 37cf84aa..37e41dd9 100644 --- a/mmpac/src/private/nc/impl/mmpac/pmo/pac0002/PMOMaintainServiceImpl.java +++ b/mmpac/src/private/nc/impl/mmpac/pmo/pac0002/PMOMaintainServiceImpl.java @@ -28,11 +28,13 @@ import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckDeptNotNullRule; import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckItemNotNullRule; import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckItemParentProcedureRule; import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckParentProcedureNoRule; +import nc.bs.trade.business.HYPubBO; import nc.impl.pubapp.bd.userdef.UserDefSaveRule; import nc.impl.pubapp.pattern.rule.processer.AroundProcesser; import nc.itf.mmpac.pmo.pac0002.IPMOMaintainService; import nc.itf.uap.rbac.IUserManageQuery_C; import nc.jdbc.framework.generator.SequenceGenerator; +import nc.pub.billcode.itf.IBillcodeManage; import nc.util.mmf.busi.measure.MeasureHelper; import nc.util.mmf.busi.service.OrgUnitPubService; import nc.util.mmf.framework.base.MMArrayUtil; @@ -278,6 +280,43 @@ public class PMOMaintainServiceImpl implements IPMOMaintainService { } public PMOAggVO[] fillVOInfo4AID(PMOAggVO[] aggvos) throws BusinessException { + if (!MMArrayUtil.isEmpty(aggvos)){ + + List xbitemList = new ArrayList(); + HYPubBO hybo = new HYPubBO(); + String org = hybo.findColValue("org_adminorg", "pk_adminorg", " code = 'C030' ") + ""; + + for (PMOAggVO vo : aggvos) { + for(PMOItemVO itemVO : vo.getChildrenVO()) { + if(itemVO.getPk_org().equals(org)) { + xbitemList.add(itemVO); + } + } + } + if(xbitemList.size() > 0) { + PMOItemVO[] vos = (PMOItemVO[])xbitemList.toArray(new PMOItemVO[xbitemList.size()]); + IBillcodeManage billcodeManage = (IBillcodeManage)NCLocator.getInstance().lookup(IBillcodeManage.class); + String[] billcodes = null; + try { + billcodes = billcodeManage.getBatchBillCodes_RequiresNew("55A2-2", vos[0].getPk_group(), vos[0].getPk_org(), vos[0],1); + } catch (BusinessException ex) { + ExceptionUtils.wrappException(ex); + } + for (PMOItemVO vo : vos) { + vo.setVbatchcode(billcodes[0]); + } + for (PMOAggVO vo : aggvos) { + for(PMOItemVO itemVO : vo.getChildrenVO()) { + for (PMOItemVO xb : vos) { + if(itemVO.getCmoid().equals(xb.getCmoid())) { + itemVO.setVbatchcode(billcodes[0]); + } + } + } + } + } + + } return MMArrayUtil.isEmpty(aggvos) ? null : (new PMOBPUtil()).fillVOInfo4AID(aggvos); }