From 3dadb084f3ad4f617ead1fc3f7a28d97de8c14bd Mon Sep 17 00:00:00 2001 From: lihao Date: Thu, 27 Nov 2025 10:07:49 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E6=8A=A5=E5=91=8A=E5=9B=9E?= =?UTF-8?q?=E5=86=99=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pwr/action/PwrCheckRewriteAction.java | 602 ++++++++++++++++++ .../config/authorize/mmpac_authorize.xml | 1 + .../mmpac/pwr/config/action/action.xml | 555 ++++++++++++++++ 3 files changed, 1158 insertions(+) create mode 100644 mmpac/src/client/nccloud/web/mmpac/pwr/action/PwrCheckRewriteAction.java create mode 100644 mmpac/src/client/yyconfig/modules/mmpac/pwr/config/action/action.xml diff --git a/mmpac/src/client/nccloud/web/mmpac/pwr/action/PwrCheckRewriteAction.java b/mmpac/src/client/nccloud/web/mmpac/pwr/action/PwrCheckRewriteAction.java new file mode 100644 index 00000000..97ad02d9 --- /dev/null +++ b/mmpac/src/client/nccloud/web/mmpac/pwr/action/PwrCheckRewriteAction.java @@ -0,0 +1,602 @@ +package nccloud.web.mmpac.pwr.action; + +import nc.bs.dao.BaseDAO; +import nc.bs.dao.DAOException; +import nc.bs.framework.common.NCLocator; +import nc.bs.mmpac.pmo.pac0002.bp.query.PMOAggVOQueryBP; +import nc.bs.mmpac.pmo.pac0002.bp.service.PMOBPService; +import nc.bs.mmpac.pmo.pac0002.bp.util.PMOBPCalUtil; +import nc.bs.mmpac.pmo.pac0002.bp.util.PMOBPUtil; +import nc.bs.pubapp.AppBsContext; +import nc.bs.uapbd.util.MyHelper; +import nc.impl.pubapp.pattern.data.vo.tool.VOConcurrentTool; +import nc.itf.mmpac.pickm.IPickmQueryService; +import nc.itf.uap.IUAPQueryBS; +import nc.jdbc.framework.processor.ColumnListProcessor; +import nc.jdbc.framework.processor.ColumnProcessor; +import nc.jdbc.framework.processor.MapListProcessor; +import nc.mmbd.utils.factoryparam.MMBDFactoryParameter; +import nc.util.mmf.busi.measure.NumScaleUtil; +import nc.util.mmf.framework.base.MMArrayUtil; +import nc.util.mmf.framework.base.MMMapUtil; +import nc.util.mmf.framework.base.MMNumberUtil; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.util.mmf.framework.db.MMTempTable; +import nc.util.mmf.framework.gc.GCBillTransferTool; +import nc.util.mmf.framework.gc.GCBillUpdate; +import nc.vo.bd.material.MaterialVO; +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.pmo.pac0002.constant.PMOConstLang; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOPlanOutputVO; +import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFItemStatusEnum; +import nc.vo.mmpac.pmo.parameter.PMORewriteParaVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFBoolean; +import nc.vo.pub.lang.UFDateTime; +import nc.vo.pub.lang.UFDouble; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.pub.MapList; +import nc.vo.util.BDPKLockUtil; +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.*; + +public class PwrCheckRewriteAction implements ICommonAction { + @Override + public Object doAction(IRequest iRequest) { + String read = iRequest.read(); + IJson json = JsonFactory.create(); + // 获取请求查询信息 + + try { + Map map2 = json.fromJson(read, Map.class); + + MapList paraMapList = new MapList(); + List hidList = new ArrayList(); + hidList.add((String) map2.get("Cpmohid")); + + + PMOAggVO[] aggvos = (new PMOAggVOQueryBP()).getPMOAggVOsByIds((String[])hidList.toArray(new String[0])); + if (MMValueCheck.isEmpty(aggvos)) { + ExceptionUtils.wrappBusinessException(PMOConstLang.getMSG_REWRITE_WRNUM_AUTOERROR()); + } + + Set originbidSet = new HashSet(); + Set bidSet = paraMapList.keySet(); + Map headMap = new HashMap(); + Map itemMap = new HashMap(); + + for(PMOAggVO aggvo : aggvos) { + PMOHeadVO headvo = aggvo.getParentVO(); + if (hidList.contains(headvo.getCpmohid())) { + headMap.put(headvo.getCpmohid(), headvo); + } + + PMOItemVO[] items = aggvo.getChildrenVO(); + if (!MMArrayUtil.isEmpty(items)) { + for(PMOItemVO item : items) { + originbidSet.add(item.getCmoid()); + if (bidSet.contains(item.getCmoid())) { + itemMap.put(item.getCmoid(), item); + } + } + } + } + + if (MMMapUtil.isEmpty(itemMap)) { + return null; + } + + PMOItemVO[] items = (PMOItemVO[])itemMap.values().toArray(new PMOItemVO[0]); + List bids = (List) map2.get("bids"); + for(String para : bids) { + if (!originbidSet.contains(para)) { + ExceptionUtils.wrappBusinessException(PMOConstLang.getMSG_PMO_DeleteLine()); + } + } + BDPKLockUtil.lockSuperVO(items); + this.checkMOstatus(items, headMap); + Set cmaterials = new HashSet(); + Set ctrantypes = new HashSet(); + Set pk_orgs = new HashSet(); + MapList sortOrgMarMap = new MapList(); + + for(PMOItemVO item : items) { + if (!cmaterials.contains(item.getCmaterialvid())) { + cmaterials.add(item.getCmaterialvid()); + } + + PMOHeadVO head = (PMOHeadVO)headMap.get(item.getCpmohid()); + if (!MMValueCheck.isEmpty(head) && !ctrantypes.contains(head.getCtrantypeid())) { + ctrantypes.add(head.getCtrantypeid()); + } + + if (!pk_orgs.contains(item.getPk_org())) { + pk_orgs.add(item.getPk_org()); + } + + sortOrgMarMap.put(item.getPk_org(), item.getCmaterialvid()); + } + + Map prodtolerance = new HashMap(); + + for(Map.Entry> entry : sortOrgMarMap.entrySet()) { + Map tempdowntolerance = PMOBPCalUtil.getProdtolerance((String)entry.getKey(), (String[])((List)entry.getValue()).toArray(new String[0])); + if (MMMapUtil.isNotEmpty(tempdowntolerance)) { + prodtolerance.putAll(tempdowntolerance); + } + } + + Map intolerance = PMOBPCalUtil.getInStockControlScope((String[])cmaterials.toArray(new String[0])); + Map autodonepara = PMOBPService.getIPMOTransTypeQueryService().getBAutoFinishByTranTypeIDs((String[])ctrantypes.toArray(new String[0])); + Map bpara = MMBDFactoryParameter.getPAC012BatchParaBoolean((String[])pk_orgs.toArray(new String[0])); + this.checkWrts(paraMapList, items); + List planoutputList = new ArrayList(); + + for(int i = 0; i < items.length; ++i) { + List paraList = paraMapList.get(items[i].getCmoid()); + PMOPlanOutputVO[] moPlanOutVOS = items[i].getPlanoutputs(); + if (!MMArrayUtil.isEmpty(moPlanOutVOS)) { + for(PMOPlanOutputVO planOutVO : moPlanOutVOS) { + boolean isupd = false; + + for(PMORewriteParaVO paravo : paraList) { + if (!MMMapUtil.isEmpty(paravo.getPoutMap())) { + UFDouble delNum = MMNumberUtil.toNotNullValue((UFDouble)paravo.getPoutMap().get(planOutVO.getCplanoutputid())); + if (MMNumberUtil.isNotNullAndNotZero(delNum)) { + (new NumScaleUtil()).checkNumberScale(new UFDouble[]{delNum}, planOutVO.getCunitid()); + } + + if (MMNumberUtil.isNotNullAndNotZero(delNum)) { + UFDouble wrNum = MMNumberUtil.add(new UFDouble[]{delNum, MMNumberUtil.toNotNullValue(planOutVO.getNwrnum())}); + planOutVO.setNwrnum(wrNum); + planOutVO.setStatus(1); + PMOBPCalUtil.fillReAssNumber("nplanoutputnum", "nastplanoutputnum", planOutVO, "vchangerate", "nwrnum", "nwrastnum"); + isupd = true; + } + } + } + + if (isupd) { + planoutputList.add(planOutVO); + } + } + } + + for(PMORewriteParaVO paravo : paraList) { + UFDouble delNum = MMNumberUtil.toNotNullValue(paravo.getDelNum()); + if (MMNumberUtil.isNotNullAndNotZero(delNum)) { + (new NumScaleUtil()).checkNumberScale(new UFDouble[]{delNum}, items[i].getCunitid()); + } + + UFDouble wrNum = MMNumberUtil.add(new UFDouble[]{delNum, MMNumberUtil.toNotNullValue(items[i].getNwrnum())}); + items[i].setNwrnum(wrNum); + PMOBPCalUtil.fillReAssNumber("nplanputnum", "nplanputastnum", items[i], "vchangerate", "nwrnum", "nwrastnum"); + items[i].setStatus(1); + } + } + + List filterList = new ArrayList(); + List putplanfinishList = new ArrayList(); + + for(PMOItemVO item : items) { + String var10001 = item.getPk_org(); + UFDouble downPara = (UFDouble)prodtolerance.get(var10001 + "#" + item.getCmaterialvid()); + UFDouble compareplanputnum = item.getNplanputnum(); + if (MMNumberUtil.isGtZero(downPara)) { + compareplanputnum = MMNumberUtil.multiply(new UFDouble[]{item.getNplanputnum(), MMNumberUtil.sub(UFDouble.ONE_DBL, new UFDouble[]{downPara.div((double)100.0F)})}); + } + + UFBoolean flag = UFBoolean.FALSE; + if (!MMMapUtil.isEmpty(bpara)) { + flag = (UFBoolean)bpara.get(item.getPk_org()); + if (null == flag) { + flag = UFBoolean.FALSE; + } + } + + if (flag.booleanValue()) { + UFDouble dpara = (UFDouble)intolerance.get(item.getCmaterialvid()); + UFDouble dparabl = UFDouble.ONE_DBL; + if (!MMValueCheck.isEmpty(bpara)) { + dparabl = MMNumberUtil.add(new UFDouble[]{UFDouble.ONE_DBL, dpara.div((double)100.0F)}); + } + + UFDouble totalputnum = MMNumberUtil.add(new UFDouble[]{item.getNplanputnum(), item.getNrejectnum()}); + if (MMNumberUtil.isLsEqual(item.getNwrnum(), MMNumberUtil.multiply(new UFDouble[]{totalputnum, dparabl}))) { + filterList.add(item); + } + + if (MMNumberUtil.isGtEqual(item.getNwrnum(), compareplanputnum) && !MMMapUtil.isEmpty(autodonepara)) { + PMOHeadVO head = (PMOHeadVO)headMap.get(item.getCpmohid()); + UFBoolean autoFlag = (UFBoolean)autodonepara.get(head.getCtrantypeid()); + if (autoFlag.booleanValue()) { + BaseDAO dao = new BaseDAO(); + // 查询备料计划 如果下游备料计划未出库数量(计划出库-累计出库)小于0,生产订单自动完工取消 naccoutnum 累计出库数量 nplanoutnum计划出库 + String pickmsql = "select cbmaterialvid,vrowno,nplanoutnum,naccoutnum from mm_pickm_b where cpickmid in ( select cpickmid from mm_pickm where csourcebillrowid='" + item.getCmoid() + "' and dr=0) and dr = 0"; + List> hmateral = (List>) dao.executeQuery(pickmsql, new MapListProcessor()); + List vrownos = new ArrayList(); + List> maps = new ArrayList(); + + Boolean l=false; + for (Map map : hmateral) { + String material = MaterialVO.CODE+","+MaterialVO.NAME+","+MaterialVO.OUTTOLERANCE; + // 物料出库容差 % 0.0000 + Map goodsMap = MyHelper.transferFields(MaterialVO.getDefaultTableName(), material, MaterialVO.PK_MATERIAL, item.getCmaterialvid()); + String Outtolerance= null !=goodsMap.get("outtolerance") ? goodsMap.get("outtolerance").toString() : "0"; + if(null != map.get("nplanoutnum") && null != map.get("naccoutnum") && (new UFDouble(String.valueOf(map.get("nplanoutnum").toString())).sub(new UFDouble(String.valueOf(map.get("naccoutnum").toString()))).abs()).compareTo(new UFDouble(String.valueOf(map.get("nplanoutnum").toString())).multiply(new UFDouble(String.valueOf(Outtolerance.toString())))) > 0) { + l=true; + Map map1 =new HashMap<>(); + map1.put("vrowno",map.get("vrowno").toString()); + map1.put("mrlname",goodsMap.get("name").toString()); + map1.put("mrlcode",goodsMap.get("code").toString()); + maps.add(map1); + } + } + if(l){ + // String pickm = " select vbillcode,cpickmid from mm_pickm where csourcebillrowid='" + item.getCmoid() + "' and dr=0"; + // List> pickms = (List>) dao.executeQuery(pickm, new MapListProcessor()); + String err=""; + for (Map vrowno : maps) { + String pmobillcode= head.getVbillcode(); + String pmovrowno= item.getVrowno(); + // String pickmbillcode= pickms.get(0).get("vbillcode").toString(); + String pickmvrowno= vrowno.get("vrowno").toString(); + String mrlname= vrowno.get("mrlname").toString(); + String mrlcode= vrowno.get("mrlcode").toString(); + err=err+"生产订单"+pmobillcode+"行"+pmovrowno+"的备料计划行"+pickmvrowno+"物料【"+mrlcode+","+mrlname+"】检查不通过\n"; + } + return err; + } + + } + } + + } else { + UFDouble divNum = MMNumberUtil.add(new UFDouble[]{item.getNzcgnum(), item.getNzwwnum()}); + divNum = MMNumberUtil.add(new UFDouble[]{divNum, item.getNzdbnum()}); + UFDouble totalWRnum = MMNumberUtil.add(new UFDouble[]{divNum, item.getNwrnum()}); + if (!MMNumberUtil.isLsZero(item.getNwrnum())) { + filterList.add(item); + } + + if (totalWRnum.doubleValue() >= compareplanputnum.doubleValue() && !MMMapUtil.isEmpty(autodonepara)) { + + + PMOHeadVO head = (PMOHeadVO)headMap.get(item.getCpmohid()); + UFBoolean autoFlag = (UFBoolean)autodonepara.get(head.getCtrantypeid()); + if (autoFlag.booleanValue()) { + BaseDAO dao = new BaseDAO(); + // 查询备料计划 如果下游备料计划未出库数量(计划出库-累计出库)小于0,生产订单自动完工取消 naccoutnum 累计出库数量 nplanoutnum计划出库 + String pickmsql = "select cbmaterialvid,vrowno,nplanoutnum,naccoutnum from mm_pickm_b where cpickmid in ( select cpickmid from mm_pickm where csourcebillrowid='" + item.getCmoid() + "' and dr=0) and dr = 0"; + List> hmateral = (List>) dao.executeQuery(pickmsql, new MapListProcessor()); + List vrownos = new ArrayList(); + List> maps = new ArrayList(); + + Boolean l=false; + for (Map map : hmateral) { + String material =MaterialVO.CODE+","+MaterialVO.NAME+","+MaterialVO.OUTTOLERANCE; + // 物料出库容差 % 0.0000 + Map goodsMap = MyHelper.transferFields(MaterialVO.getDefaultTableName(), material, MaterialVO.PK_MATERIAL, item.getCmaterialvid()); + String Outtolerance= null !=goodsMap.get("outtolerance") ? goodsMap.get("outtolerance").toString() : "0"; + if(null != map.get("nplanoutnum") && null != map.get("naccoutnum") && (new UFDouble(map.get("nplanoutnum").toString()).sub(new UFDouble(String.valueOf(map.get("naccoutnum").toString()))).abs()).compareTo(new UFDouble(String.valueOf(map.get("nplanoutnum").toString())).multiply(new UFDouble(String.valueOf(Outtolerance.toString())))) > 0) { + UFDouble num1 = new UFDouble(map.get("nplanoutnum").toString()).sub(new UFDouble(String.valueOf(map.get("naccoutnum").toString()))).abs(); + + l=true; + Map map1 =new HashMap<>(); + map1.put("vrowno",map.get("vrowno").toString()); + map1.put("mrlname",goodsMap.get("name").toString()); + map1.put("mrlcode",goodsMap.get("code").toString()); + maps.add(map1); + } + } + if(l){ + // String pickm = " select vbillcode,cpickmid from mm_pickm where csourcebillrowid='" + item.getCmoid() + "' and dr=0"; + // List> pickms = (List>) dao.executeQuery(pickm, new MapListProcessor()); + String err=""; + for (Map vrowno : maps) { + String pmobillcode= head.getVbillcode(); + String pmovrowno= item.getVrowno(); + // String pickmbillcode= pickms.get(0).get("vbillcode").toString(); + String pickmvrowno= vrowno.get("vrowno").toString(); + String mrlname= vrowno.get("mrlname").toString(); + String mrlcode= vrowno.get("mrlcode").toString(); + err=err+"生产订单"+pmobillcode+"行"+pmovrowno+"的备料计划行"+pickmvrowno+"物料【"+mrlcode+","+mrlname+"】检查不通过\n"; + } + return err; + } + item.setFitemstatus(Integer.valueOf(PMOFItemStatusEnum.FINISH.getEnumValue().getValue())); + item.setTactendtime(new UFDateTime(AppBsContext.getInstance().getBusiDate().toPersisted())); + item.setStatus(1); + putplanfinishList.add(item.getCmoid()); + } + } + } + } + return null; + } catch (BusinessException e) { + throw new RuntimeException(e); + } + } + private void checkMOstatus(PMOItemVO[] items, Map headMap) { + if (!MMArrayUtil.isEmpty(items)) { + StringBuilder msg = new StringBuilder(""); + + for(PMOItemVO item : items) { + if (PMOFItemStatusEnum.PLAN.equalsValue(item.getFitemstatus()) || PMOFItemStatusEnum.AUDIT.equalsValue(item.getFitemstatus())) { + PMOHeadVO head = (PMOHeadVO)headMap.get(item.getCpmohid()); + String vbillcode = ""; + String vrowno = ""; + if (!MMValueCheck.isEmpty(head)) { + vbillcode = head.getVbillcode(); + vrowno = item.getVrowno(); + } + + msg.append(PMOConstLang.getMSG_REWRITE_WRNUM_AUTOERROR(vbillcode, vrowno)).append("\n"); + } + + if (PMOFItemStatusEnum.CLOSE.equalsValue(item.getFitemstatus())) { + PMOHeadVO head = (PMOHeadVO)headMap.get(item.getCpmohid()); + String vbillcode = ""; + String vrowno = ""; + if (!MMValueCheck.isEmpty(head)) { + vbillcode = head.getVbillcode(); + vrowno = item.getVrowno(); + } + + msg.append(PMOConstLang.getMSG_REWRITE_WRNUM_CLOSEERROR(vbillcode, vrowno)).append("\n"); + } + } + + if (msg.length() > 0) { + ExceptionUtils.wrappBusinessException(msg.toString()); + } + } + + } + private void checkWrts(MapList mapList, PMOItemVO[] vos) { + if (MMValueCheck.isEmpty(mapList) || MMArrayUtil.isEmpty(vos)) { + ExceptionUtils.wrappBusinessException(PMOConstLang.getMSG_REWRITE_PARAERROR()); + } + + MapList paraList = new MapList(); + List itemList = new ArrayList(); + + for(int i = 0; i < vos.length; ++i) { + List paraListByid = mapList.get(vos[i].getCmoid()); + if (2 == ((PMORewriteParaVO)paraListByid.get(0)).getBillStatus() && !MMValueCheck.isEmpty(((PMORewriteParaVO)paraListByid.get(0)).getBillTs())) { + paraList.putAll(vos[i].getCmoid(), paraListByid); + itemList.add(vos[i]); + } + } + + if (paraList.size() > 0) { + PMOItemVO[] newvos = (PMOItemVO[])itemList.toArray(new PMOItemVO[0]); + PMOItemVO[] originalVOs = this.construcnVOs(paraList, newvos); + (new VOConcurrentTool()).checkTS(newvos, originalVOs); + } + } + + private PMOItemVO[] construcnVOs(MapList paraMapList, PMOItemVO[] vos) { + List itemList = new ArrayList(); + + for(int i = 0; i < vos.length; ++i) { + List paraListByid = paraMapList.get(vos[i].getCmoid()); + PMOItemVO vo = new PMOItemVO(); + vo.setTs(((PMORewriteParaVO)paraListByid.get(0)).getBillTs()); + vo.setPrimaryKey(vos[i].getPrimaryKey()); + itemList.add(vo); + } + + return (PMOItemVO[])itemList.toArray(new PMOItemVO[itemList.size()]); + } + + public Map filterDelieveredMo(String[] moids) throws BusinessException { + try { + IUAPQueryBS service = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class); + StringBuilder sql = new StringBuilder(); + sql.append(" select ").append("csourcebillid").append(" from ").append(PickmHeadVO.getDefaultTableName()).append(" inner join ").append(PickmItemVO.getDefaultTableName()).append(" on ").append(PickmHeadVO.getDefaultTableName()).append(".").append("cpickmid").append("=").append(PickmItemVO.getDefaultTableName()).append(".").append("cpickmid").append(" where ").append("vsourcebilltype").append("='55A2'").append(" and ").append(MMTempTable.getWhereInSQL("tmp_mm_srcbid", moids, "csourcebillid")); + StringBuilder sql1 = sql.append(" and ").append(PickmItemVO.getDefaultTableName()).append(".").append("naccoutnum").append(">0").append(" and ").append(PickmItemVO.getDefaultTableName()).append(".").append("bbackflush").append("='N'"); + List doutMoids = (List)service.executeQuery(sql1.toString(), new ColumnListProcessor()); + StringBuilder sql2 = sql.append(" and ").append(PickmItemVO.getDefaultTableName()).append(".").append("bbackflush").append("='Y'"); + List transMoids = (List)service.executeQuery(sql2.toString(), new ColumnListProcessor()); + doutMoids.addAll(transMoids); + Map returnmap = new HashMap(); + + for(String moid : moids) { + if (doutMoids.contains(moid)) { + returnmap.put(moid, UFBoolean.TRUE); + } else { + returnmap.put(moid, UFBoolean.FALSE); + } + } + + return returnmap; + } catch (Exception e) { + ExceptionUtils.marsh(e); + return null; + } + } + + /** + * 处理聚合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.vdef14 = 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.vdef14 = 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.vdef14 = 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.vdef14 = 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.vdef14 = 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.vdef14 = 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(bomcode != null && !bomcode.equals("")) { + if(bomcode.equals(type)){ + isValid = false; // 不符合条件 + } + }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 ("2".equals(type)) { + // 请购单:非制造件或PR类型不符合 + if (null == matType || "PR".equals(matType) || "".equals(matType)) { + isValid = false; + } + } else if ("1".equals(type)) { + // 生产订单:可能有更严格的过滤条件 + if (null == matType || "MR".equals(matType) || "".equals(matType)) { + isValid = false; + } + } + } + + +// // 判断是否为不符合条件的数据(根据类型可能有不同判断标准) +// 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 ("2".equals(type)) { +// // 请购单:非制造件或PR类型不符合 +// if (null == matType || "PR".equals(matType) || "".equals(matType)) { +// isValid = false; +// } +// } else if ("1".equals(type)) { +// // 生产订单:可能有更严格的过滤条件 +// if (null == matType || "MR".equals(matType) || "".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()); +// 1 制造件 +// 2 采购件 + + // 根据订单类型判断不符合条件 + if ("1".equals(type)) { + // 请购单:采购件或未知类型不符合 + if (null == bomcode || "1".equals(bomcode) || "".equals(bomcode)) { + isValid = false; + } + } else if ("2".equals(type)) { + // 生产订单:可能有不同的判断标准 + if (null == bomcode || "1".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/yyconfig/modules/mmpac/config/authorize/mmpac_authorize.xml b/mmpac/src/client/yyconfig/modules/mmpac/config/authorize/mmpac_authorize.xml index 567ca688..5179faca 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 @@ -402,6 +402,7 @@ mmpac.applytask.opreqpushtotask mmpac.applytask.bodyAfterEdit mmpac.applytask.queryByCond + mmpac.pwr.checkRewrite diff --git a/mmpac/src/client/yyconfig/modules/mmpac/pwr/config/action/action.xml b/mmpac/src/client/yyconfig/modules/mmpac/pwr/config/action/action.xml new file mode 100644 index 00000000..c68da3ba --- /dev/null +++ b/mmpac/src/client/yyconfig/modules/mmpac/pwr/config/action/action.xml @@ -0,0 +1,555 @@ + + + + mmpac.pwr.queryPmos + + nccloud.web.mmpac.pwr.action.QueryPmoAction + + + mmpac.pwr.transfromPmo + + nccloud.web.mmpac.pwr.action.TransFromPmoAction + + + mmpac.pwr.queryDmos + + nccloud.web.mmpac.pwr.action.QueryDmoAction + + + mmpac.pwr.transfromDmo + + nccloud.web.mmpac.pwr.action.TransFromDmoAction + + + mmpac.pwr.queryPputplan + + nccloud.web.mmpac.pwr.pull.action.QueryPPutPlanAction + + + mmpac.pwr.transfromPputplan + + nccloud.web.mmpac.pwr.pull.action.TransFromPPutPlanAction + + + + mmpac.pwr.queryDputplan + + nccloud.web.mmpac.pwr.pull.action.QueryDPutPlanAction + + + mmpac.pwr.transfromDputplan + + nccloud.web.mmpac.pwr.pull.action.TransFromDPutPlanAction + + + + mmpac.pwr.queryList + + nccloud.web.mmpac.pwr.action.PwrQueryAction + + + mmpac.pwr.queryPage + + nccloud.web.mmpac.pwr.action.QueryPageAction + + + mmpac.pwr.queryPwrCard + + nccloud.web.mmpac.pwr.action.PwrCardQueryAction + + + mmpac.pwr.edit + + nccloud.web.mmpac.pwr.action.PwrEditAction + + + mmpac.pwr.copyPwrCard + + nccloud.web.mmpac.pwr.action.PwrCopyAction + + + mmpac.pwr.queryPwrPick + + nccloud.web.mmpac.pwr.action.PwrPickQueryAction + + + mmpac.pwr.queryPwrQuality + + nccloud.web.mmpac.pwr.action.PwrQualityQueryAction + + + mmpac.pwr.newSave + + nccloud.web.mmpac.pwr.action.PwrNewSaveAction + + + + mmpac.pwr.editSave + + nccloud.web.mmpac.pwr.action.PwrEditSaveAction + + + + mmpac.pwr.SaveCommit + + nccloud.web.mmpac.pwr.action.PwrSaveCommitAction + + + + mmpac.pwr.delete + + nccloud.web.mmpac.pwr.action.PwrDeleteAction + + + + mmpac.pwr.batchdelete + + nccloud.web.mmpac.pwr.action.PwrBatchDeleteAction + + + + mmpac.pwr.headAfterEdit + + nccloud.web.mmpac.pwr.event.HeadAfterEditAction + + + + mmpac.pwr.headBeforeEdit + + nccloud.web.mmpac.pwr.event.HeadBeforeEditAction + + + + mmpac.pwr.bodyBeforeEdit + + nccloud.web.mmpac.pwr.event.BodyBeforeEditAction + + + + mmpac.pwr.bodyAfterEdit + + nccloud.web.mmpac.pwr.event.BodyAfterEditAction + + + + mmpac.pwr.orgChangEvent + + nccloud.web.mmpac.pwr.event.OrgChangeEventAction + + + + mmpac.pwr.commit + + nccloud.web.mmpac.pwr.action.PwrCommitAction + + + + mmpac.pwr.uncommit + + nccloud.web.mmpac.pwr.action.PwrUncommitAction + + + + mmpac.pwr.ApplyCheck + + nccloud.web.mmpac.pwr.action.PwrApplyCheckAction + + + + mmpac.pwr.EmpassCheck + + nccloud.web.mmpac.pwr.action.PwrEmpassCheckAction + + + + mmpac.pwr.Pick + + nccloud.web.mmpac.pwr.action.PwrBatchPickAction + + + + mmpac.pwr.CardPick + + nccloud.web.mmpac.pwr.action.PwrCardPickAction + + + + mmpac.pwr.UnPick + + nccloud.web.mmpac.pwr.action.PwrBatchUnPickAction + + + + mmpac.pwr.CardUnPick + + nccloud.web.mmpac.pwr.action.PwrCardUnPickAction + + + + mmpac.pwr.BackFlush + + nccloud.web.mmpac.pwr.action.PwrBatchBackFlushAction + + + + mmpac.pwr.CardBackFlush + + nccloud.web.mmpac.pwr.action.PwrCardBackFlushAction + + + + mmpac.pwr.UnBackFlush + + nccloud.web.mmpac.pwr.action.PwrBatchUnBackFlushAction + + + + mmpac.pwr.CardUnBackFlush + + nccloud.web.mmpac.pwr.action.PwrCardUnBackFlushAction + + + + mmpac.pwr.GrandAfterEdit + + nccloud.web.mmpac.pwr.action.PwrGrandAfterEventAction + + + + mmpac.pwr.CreateOutput + + nccloud.web.mmpac.pwr.action.PwrCardCreateOutputAction + + + + mmpac.pwr.CreatePick + + nccloud.web.mmpac.pwr.action.PwrCreatePickAction + + + + mmpac.pwr.WorkDoneSetCheckClick + + nccloud.web.mmpac.pwr.action.PwrWorkDoneSetCheckAction + + + + mmpac.pwr.ListProdInQueryQuality + + nccloud.web.mmpac.pwr.action.PwrProdInQueryQualityAction + + + + + mmpac.pwr.ListProdIn + + nccloud.web.mmpac.pwr.action.PwrProdInAction + + + + mmpac.pwr.ListDiscardInQueryQuality + + nccloud.web.mmpac.pwr.action.PwrDiscardInQueryQualityAction + + + + + mmpac.pwr.DiscardBatchIn + + nccloud.web.mmpac.pwr.action.PwrDiscardBatchInAction + + + + mmpac.pwr.discardbatchinafteredit + + nccloud.web.mmpac.pwr.action.PwrDiscardBatchInAfterEditAction + + + + + mmpac.pwr.prodinafteredit + + nccloud.web.mmpac.pwr.action.PwrProdinAfterEditAction + + + + mmpac.pwr.discardinafteredit + + nccloud.web.mmpac.pwr.action.PwrDiscardinAfterEditAction + + + + + mmpac.pwr.DiscardIn + + nccloud.web.mmpac.pwr.action.PwrDiscardInAction + + + + mmpac.pwr.DiscardInAddMo + + nccloud.web.mmpac.pwr.action.PwrDiscardInAddMoAction + + + + mmpac.pwr.DiscardInAddPut + + nccloud.web.mmpac.pwr.action.PwrDiscardInAddPutAction + + + + mmpac.pwr.manualExamQueryQuality + + nccloud.web.mmpac.pwr.action.PwrManualExamQueryQualityAction + + + + mmpac.pwr.manualExam + + nccloud.web.mmpac.pwr.action.PwrManualExamAction + + + mmpac.pwr.ManualBodyAfterEdit + + nccloud.web.mmpac.pwr.action.PwrManualBodyAfterEditAction + + + + + mmpac.pwr.CardProdInQueryQuality + + nccloud.web.mmpac.pwr.action.PwrCardProdInQueryQualityAction + + + + + mmpac.pwr.prodInSnQuery + + nccloud.web.mmpac.pwr.action.PwrProdInSnQueryQualityAction + + + + + mmpac.pwr.prodInSn + + nccloud.web.mmpac.pwr.action.PwrProdInSnAction + + + + mmpac.pwr.CardDiscardInQueryQuality + + nccloud.web.mmpac.pwr.action.PwrCardDiscardInQueryQualityAction + + + + + mmpac.pwr.CardDiscardBatchInQueryQuality + + nccloud.web.mmpac.pwr.action.PwrCardDiscardBatchInQueryQualityAction + + + + + mmpac.pwr.ManualConfirmAction + + nccloud.web.mmpac.pwr.action.PwrManualConfirmAction + + + mmpac.pwr.HandOverValidatorAction + + nccloud.web.mmpac.pwr.event.HandOverValidatorAction + + + mmpac.pwr.HandOverVaildInGrandAction + + nccloud.web.mmpac.pwr.event.HandOverVaildInGrandAction + + + mmpac.pwr.HandOverOkAction + + nccloud.web.mmpac.pwr.action.HandOverOkAction + + + + mmpac.pwr.GrandGetProdin + + nccloud.web.mmpac.pwr.action.PwrGrandGetProdInAction + + + + mmpac.pwr.GrandGetDiscardin + + nccloud.web.mmpac.pwr.action.PwrGrandGetDiscardInAction + + + + mmpac.pwr.GrandGetDiscardBatchin + + nccloud.web.mmpac.pwr.action.PwrGrandGetDiscardBatchInAction + + + + mmpac.pwr.ManualBodyBeforeEdit + + nccloud.web.mmpac.pwr.action.PwrManualBodyBeforeEditAction + + + + + mmpac.pwr.ListRework + + nccloud.web.mmpac.pwr.action.PwrListReworkAction + + + + mmpac.pwr.CardRework + + nccloud.web.mmpac.pwr.action.PwrCardReworkAction + + + + mmpac.pwr.GrandRework + + nccloud.web.mmpac.pwr.action.PwrGrandReworkAction + + + + mmpac.pwr.print + + nccloud.web.mmpac.pwr.action.PwrPrintAction + + + + mmpac.pwr.printpick + + nccloud.web.mmpac.pwr.action.PwrPrintPickAction + + + + mmpac.pwr.dirprintbarcode + + nccloud.web.mmpac.pwr.action.PwrDirPrintBarcodeAction + + + + mmpac.pwr.qrybillinfo + + nccloud.web.mmpac.pwr.action.PwrQryPrintBarCodeAction + + + + mmpac.pwr.printbarcode + + nccloud.web.mmpac.pwr.action.PwrPrintBarcodeAction + + + + mmpac.pwr.queryidentify + + nccloud.web.mmpac.pwr.action.PwrGetIdentifyAction + + + + mmpac.pwr.copyquality + + nccloud.web.mmpac.pwr.action.PwrCopyQualityAction + + + + mmpac.pwr.isFreeCheck + + nccloud.web.mmpac.pwr.action.PwrIsFreeCheckAction + + + + mmpac.pwr.ManualRowCopyProcessNum + + nccloud.web.mmpac.pwr.action.PwrManualRowCopyProcessNum + + + + mmpac.pwr.DiscardBatchInBeforeEdit + + nccloud.web.mmpac.pwr.event.DiscardBatchInBeforeEditAction + + + + + mmpac.pwr.DiscardInBeforeEdit + + nccloud.web.mmpac.pwr.event.DiscardInBeforeEditAction + + + + mmpac.pwr.MMToWr + + nccloud.web.mmpac.pwr.action.MMToWrAction + + + + mmpac.pwr.querymotranstype + + nccloud.web.mmpac.pwr.action.PwrGetMoTranstypeAction + + + mmpac.pwr.checkpermission + + nccloud.web.mmpac.pwr.action.CheckPwrDataPermission + + + mmpac.pwr.transtypeExtQuery + + nccloud.web.mmpac.pwr.transtype.action.WrTransTypeExtQuery + + + + mmpac.pwr.queryserial + + nccloud.web.mmpac.pwr.action.QuerySerialAction + + + mmpac.pwr.serialnoBodyBeforeEdit + + nccloud.web.mmpac.pwr.event.WrSerNoBodyBeforeEditAction + + + mmpac.pwr.serialnoBodyAfterEdit + + nccloud.web.mmpac.pwr.event.WrSerNoBodyAfterEditAction + + + mmpac.pwr.geneSerNo + + nccloud.web.mmpac.pwr.sn.action.WrGeneSerNoAction + + + mmpac.pwr.serNoOk + + nccloud.web.mmpac.pwr.sn.action.WrSerNoOkAction + + + mmpac.pwr.serNoAddLine + + nccloud.web.mmpac.pwr.sn.action.WrSerNoAddLineAction + + + mmpac.pwr.serNoRowChange + + nccloud.web.mmpac.pwr.event.WrSerNoRowChangeAction + + + mmpac.pwr.task + + nccloud.web.mmpac.pwr.action.PwrTaskAction + + + mmpac.pwr.queryByCond + + nccloud.web.mmpac.pwr.action.PwrQueryByConditionAction + + + mmpac.pwr.checkRewrite + + nccloud.web.mmpac.pwr.action.PwrCheckRewriteAction + +