From 02e64679704f2cb3bd2ab3846f67f6a0cbdd3146 Mon Sep 17 00:00:00 2001 From: liuxy Date: Thu, 6 Aug 2026 19:02:20 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E6=96=B0=E5=A2=9E=E5=85=B6?= =?UTF-8?q?=E4=BB=96=E7=90=83=E7=A3=A8=E5=8F=82=E6=95=B0=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E3=80=81=E4=B8=8B=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/pda/pdm/otherQmUtil.java | 89 +++++ .../service/impl/PdmWorkTaskServiceImpl.java | 40 ++ .../rest/ProductProcessParamController.java | 15 + .../service/ProductProcessParamService.java | 26 ++ .../impl/ProductProcessParamServiceImpl.java | 70 +++- .../src/main/java/org/nl/wms/pdm/wql/pdm.xls | Bin 264704 -> 286208 bytes .../impl/InAndOutRetrunServiceImpl.java | 5 +- .../st/returns/wql/QST_IVT_INANDOUTRETRUN.wql | 42 +++ .../wms/basedata/pdm/productProcessParam.js | 18 +- .../BallMillParamDialog.vue | 341 ++++++++++++++++++ .../pdm/productProcessParam/index.vue | 51 ++- .../st/core/inbill/rawassist/DivDialog.vue | 4 +- 12 files changed, 688 insertions(+), 13 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/otherQmUtil.java create mode 100644 mes/qd/src/views/wms/basedata/pdm/productProcessParam/BallMillParamDialog.vue diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/otherQmUtil.java b/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/otherQmUtil.java new file mode 100644 index 00000000..e27d3719 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/otherQmUtil.java @@ -0,0 +1,89 @@ +package org.nl.pda.pdm; + +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.util.*; + +public class otherQmUtil { + /** + * 料浆卸料参数字段 + */ + static List rawPulpCodeList = Arrays.asList( + "slurry_angle1", "slurry_angle2", "slurry_angle3", "slurry_angle4", "slurry_angle5", "slurry_angle6", + "slurry_angle7", "slurry_angle8", "slurry_time1", "slurry_time2", "slurry_time3", "slurry_time4", + "slurry_time5", "slurry_time6", "slurry_time7", "slurry_time8" + ); + /** + * 酒精卸料参数表 + */ + static List alcoholCodeList = Arrays.asList( + "alc_qty1", "alc_qty2", "alc_qty3", "alc_qty4", "alc_qty5", "alc_qty6","alc_qty7","alc_qty8", + "alc_alcangle1", "alc_alcangle2", "alc_alcangle3", "alc_alcangle4", "alc_alcangle5", "alc_alcangle6","alc_alcangle7","alc_alcangle8", + "alc_angle1", "alc_angle2", "alc_angle3", "alc_angle4", "alc_angle5", "alc_angle6","alc_angle7","alc_angle8", + "alc_flattime1", "alc_flattime2", "alc_flattime3", "alc_flattime4", "alc_flattime5", "alc_flattime6","alc_flattime7","alc_flattime8", + "alc_time1", "alc_time2", "alc_time3", "alc_time4", "alc_time5", "alc_time6","alc_time7","alc_time8" + ); + /** + * 清洗参数表一 + */ + static List cleanseOneCodeList = Arrays.asList( + "clean_waterqty1", "clean_waterqty2", "clean_waterqty3", "clean_waterqty4", "clean_waterqty5", + "clean_waterangle1", "clean_waterangle2", "clean_waterangle3", "clean_waterangle4", "clean_waterangle5", + "clean_angle1", "clean_angle2", "clean_angle3", "clean_angle4", "clean_angle5", + "clean_flattime1", "clean_flattime2", "clean_flattime3", "clean_flattime4", "clean_flattime5", + "clean_time1", "clean_time2", "clean_time3", "clean_time4", "clean_time5", + "clean_resttime1", "clean_resttime2", "clean_resttime3", "clean_resttime4", "clean_resttime5" + ); + /** + * 清洗参数表二 + */ + static List cleanseTwoCodeList = Arrays.asList( + "extra_qty", "extra_alcangle", "extra_angle", "extra_flattime", "extra_time" + ); + + static Map> TYPE_CODE_MAP = new HashMap<>(); + + static { + // type -> List 映射表 + TYPE_CODE_MAP.put("A", rawPulpCodeList); + TYPE_CODE_MAP.put("B", alcoholCodeList); + TYPE_CODE_MAP.put("C", cleanseOneCodeList); + TYPE_CODE_MAP.put("D", cleanseTwoCodeList); + } + + /** + * 组织下发acs数组 + * @param typeTable 集合类型 { + * A:料浆卸料参数表 + * B:酒精卸料参数表 + * C:清洗参数表一 + * D:清洗参数表二 + * } + * @param json 具体表数据 + * @param deviceCode 设备编码 + * @return result + */ + static public JSONArray otherQm(String typeTable, JSONObject json, String deviceCode) { + JSONArray result = new JSONArray(); + // 根据type拿到对应数组,拿不到返回空 + List codeList = TYPE_CODE_MAP.get(typeTable); + if (codeList == null) { + return result; + } + + for (String code : codeList) { + JSONObject item = new JSONObject(); + item.put("code", code); + item.put("device_code", deviceCode); + item.put("value", ObjectUtil.isEmpty(json) + ? "0" + : (ObjectUtil.isEmpty(NumberUtil.round(json.getString(code),1)) ? "0" : NumberUtil.round(json.getString(code),1)) + ); + result.add(item); + } + return result; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/service/impl/PdmWorkTaskServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/service/impl/PdmWorkTaskServiceImpl.java index 321e2194..32b23c79 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/service/impl/PdmWorkTaskServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/service/impl/PdmWorkTaskServiceImpl.java @@ -14,6 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.exception.BadRequestException; import org.nl.ext.acs.service.WmsToAcsService; import org.nl.pda.exception.PdaRequestException; +import org.nl.pda.pdm.otherQmUtil; import org.nl.pda.pdm.service.PdmWorkTaskService; import org.nl.pda.st.vehicle.service.impl.EmptyVehicleServiceImpl; import org.nl.utils.SecurityUtils; @@ -975,6 +976,9 @@ public class PdmWorkTaskServiceImpl implements PdmWorkTaskService { array.add(data2); } + // 组织其他球磨参数 + JSONArray otherQMList = otherQM(material_id,device_jo.getString("device_code")); + array.addAll(otherQMList); Map result = wmsToAcsService.action(array); String status = MapUtil.getStr(result, "status"); if (!StrUtil.equals(status, "200")) { @@ -995,6 +999,42 @@ public class PdmWorkTaskServiceImpl implements PdmWorkTaskService { return returnjo; } + /** + * 其他球磨参数 + * @param materialId 物料标识 + * @param deviceCode 设备编码 + * @return JSONArray + */ + private JSONArray otherQM(String materialId, String deviceCode) { + JSONArray result = new JSONArray(); + // 浆卸料参数表 + WQLObject rawPulpWo = WQLObject.getWQLObject("PDM_BI_RawPulpParam"); + // 酒精卸料参数表 + WQLObject alcoholWo = WQLObject.getWQLObject("PDM_BI_AlcoholParam"); + // 清洗参数表一 + WQLObject cleanseOneWo = WQLObject.getWQLObject("PDM_BI_CleanseParamOne"); + // 清洗参数表二 + WQLObject cleanseTwoWo = WQLObject.getWQLObject("PDM_BI_CleanseParamTwo"); + + // 查询浆卸料参数 + JSONObject rawPulpWoJson = rawPulpWo.query("material_id = '" + materialId + "'").uniqueResult(0); + JSONArray rawPulpList = otherQmUtil.otherQm("A", rawPulpWoJson, deviceCode); + result.addAll(rawPulpList); + // 查询酒精卸料参数 + JSONObject alcoholWoJson = alcoholWo.query("material_id = '" + materialId + "'").uniqueResult(0); + JSONArray alcoholList = otherQmUtil.otherQm("B", alcoholWoJson, deviceCode); + result.addAll(alcoholList); + // 查询清洗参数一 + JSONObject cleanseOneWoJson = cleanseOneWo.query("material_id = '" + materialId + "'").uniqueResult(0); + JSONArray cleanseOneList = otherQmUtil.otherQm("C", cleanseOneWoJson, deviceCode); + result.addAll(cleanseOneList); + // 查询清洗参数二 + JSONObject cleanseTwoWoJson = cleanseTwoWo.query("material_id = '" + materialId + "'").uniqueResult(0); + JSONArray cleanseTwoList = otherQmUtil.otherQm("D", cleanseTwoWoJson, deviceCode); + result.addAll(cleanseTwoList); + return result; + } + @Override public Map moveQMVehicle(Map jsonObject) { if (ObjectUtil.isEmpty(jsonObject)) { diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/rest/ProductProcessParamController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/rest/ProductProcessParamController.java index bcd77c29..89d8c9eb 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/rest/ProductProcessParamController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/rest/ProductProcessParamController.java @@ -74,4 +74,19 @@ public class ProductProcessParamController { return new ResponseEntity<>(HttpStatus.OK); } + @PostMapping("/getBallMillParam") + @Log("获取其他球磨参数") + @ApiOperation("获取其他球磨参数") + public ResponseEntity getBallMillParam(@RequestBody Map whereJson) { + return new ResponseEntity<>(productProcessParamService.getBallMillParam(whereJson), HttpStatus.OK); + } + + @PostMapping("/saveBallMillParam") + @Log("保存其他球磨参数") + @ApiOperation("保存其他球磨参数") + public ResponseEntity saveBallMillParam(@RequestBody JSONObject whereJson) { + productProcessParamService.saveBallMillParam(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/ProductProcessParamService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/ProductProcessParamService.java index 17421112..99c09fc9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/ProductProcessParamService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/ProductProcessParamService.java @@ -49,4 +49,30 @@ public interface ProductProcessParamService { * 删除参数 */ void deleteAll(Map whereJson); + + /** + * 获取其他球磨参数 + * @param whereJson { + * material_id: 物料标识 + * } + * @return JSONObject { + * slurryParams: {} --原浆卸料 + * alcoholParams: {} --酒精卸料 + * cleanParams: {} --清洗一 + * extraAlcoholParams: {} --清洗二 + * } + */ + JSONObject getBallMillParam(Map whereJson); + + /** + * 保存其他球磨参数 + * @param whereJson { + * material_id : 物料标识 + * slurryParams: {} --原浆卸料 + * alcoholParams: {} --酒精卸料 + * cleanParams: {} --清洗 + * extraAlcoholParams: {} --清洗二 + * } + */ + void saveBallMillParam(JSONObject whereJson); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/ProductProcessParamServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/ProductProcessParamServiceImpl.java index de6dc436..baa3a380 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/ProductProcessParamServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/ProductProcessParamServiceImpl.java @@ -5,10 +5,10 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.nl.exception.BadRequestException; import org.nl.utils.SecurityUtils; import org.nl.wms.basedata.master.constant.MaterOptTypeEnum; @@ -44,8 +44,8 @@ public class ProductProcessParamServiceImpl implements ProductProcessParamServic public Map queryAll(Map whereJson, Pageable page) { String search = MapUtil.getStr(whereJson, "search"); //只能查询PG粉 - String classIds=classstandardService.getAllChildIdStr(MaterOptTypeEnum.PGF.getClass_idStr()); - String where = "is_delete ='0' and material_type_id in "+ classIds; + String classIds = classstandardService.getAllChildIdStr(MaterOptTypeEnum.PGF.getClass_idStr()); + String where = "is_delete ='0' and material_type_id in " + classIds; if (ObjectUtil.isNotEmpty(search)) { if (search.contains("\\")) search = search.replace("\\", "\\\\\\"); where += " AND (material_code like '%" + search + "%' OR material_code like '%" + search + "%' ) "; @@ -223,7 +223,67 @@ public class ProductProcessParamServiceImpl implements ProductProcessParamServic String material_id = (String) whereJson.get("material_id"); String workprocedure_code = (String) whereJson.get("workprocedure_code"); WQLObject wo = WQLObject.getWQLObject("PDM_BI_WorkProcedureParaProduct"); - wo.delete("material_id = '" + material_id + "' and workprocedure_code='"+workprocedure_code+"'"); + wo.delete("material_id = '" + material_id + "' and workprocedure_code='" + workprocedure_code + "'"); + } + + @Override + public JSONObject getBallMillParam(Map whereJson) { + // 浆卸料参数表 + WQLObject rawPulpWo = WQLObject.getWQLObject("PDM_BI_RawPulpParam"); + // 酒精卸料参数表 + WQLObject alcoholWo = WQLObject.getWQLObject("PDM_BI_AlcoholParam"); + // 清洗参数表一 + WQLObject cleanseOneWo = WQLObject.getWQLObject("PDM_BI_CleanseParamOne"); + // 清洗参数表二 + WQLObject cleanseOneTwo = WQLObject.getWQLObject("PDM_BI_CleanseParamTwo"); + String materialId = MapUtil.getStr(whereJson, "material_id"); + + JSONObject slurryParams = rawPulpWo.query("material_id = '" + materialId + "'").uniqueResult(0); + JSONObject alcoholParams = alcoholWo.query("material_id = '" + materialId + "'").uniqueResult(0); + JSONObject cleanParams = cleanseOneWo.query("material_id = '" + materialId + "'").uniqueResult(0); + JSONObject extraAlcoholParams = cleanseOneTwo.query("material_id = '" + materialId + "'").uniqueResult(0); + + JSONObject result = new JSONObject(); + result.put("slurryParams", slurryParams); + result.put("alcoholParams", alcoholParams); + result.put("cleanParams", cleanParams); + result.put("extraAlcoholParams", extraAlcoholParams); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveBallMillParam(JSONObject whereJson) { + // 料浆卸料参数表 + WQLObject rawPulpWo = WQLObject.getWQLObject("PDM_BI_RawPulpParam"); + // 酒精卸料参数表 + WQLObject alcoholWo = WQLObject.getWQLObject("PDM_BI_AlcoholParam"); + // 清洗参数表一 + WQLObject cleanseOneWo = WQLObject.getWQLObject("PDM_BI_CleanseParamOne"); + // 清洗参数表二 + WQLObject cleanseOneTwo = WQLObject.getWQLObject("PDM_BI_CleanseParamTwo"); + String materialId = MapUtil.getStr(whereJson, "material_id"); + + // 先删除后新增 + rawPulpWo.delete("material_id = '" + materialId + "'"); + JSONObject slurryParams = whereJson.getJSONObject("slurryParams"); + slurryParams.put("material_id", materialId); + rawPulpWo.insert(slurryParams); + + alcoholWo.delete("material_id = '" + materialId + "'"); + JSONObject alcoholParams = whereJson.getJSONObject("alcoholParams"); + alcoholParams.put("material_id", materialId); + alcoholWo.insert(alcoholParams); + + cleanseOneWo.delete("material_id = '" + materialId + "'"); + JSONObject cleanParams = whereJson.getJSONObject("cleanParams"); + cleanParams.put("material_id", materialId); + cleanseOneWo.insert(cleanParams); + + cleanseOneTwo.delete("material_id = '" + materialId + "'"); + JSONObject extraAlcoholParams = whereJson.getJSONObject("extraAlcoholParams"); + extraAlcoholParams.put("material_id", materialId); + cleanseOneTwo.insert(extraAlcoholParams); } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls index 746162188b9e569f5e52b35b88091547273a98d8..1b33cfb23bf62791af8e4c0c114109283e1f4636 100644 GIT binary patch delta 33592 zcmb`w2V4|K8~8u7S18g%qzQT)ARX>#f}+xnVg*65ph!6c1x_guWArd;Vq#QuV>TwS z#57Z1OOzA~CZ;E9Ofm6IVocP;BpRcs8s+!Q?Cf&OfxiF$@5g=SW@qNv=R40cv$H$1 zyGPrD9&P*kw--DAf)KJ|gl=MC=MK()*Zfs@1LufW@J`$y%_1mRx+j7g!MQ)W>g~OY zLchk_GOpq~L%-&m)GN8KPV(2(Ke^AJahYUEMSHGle)DiYZu*U8rk7kH@t&*RN!U?? z(74)`)A`AagWyTBFDez=gSWW^yRMy z1n|cKeEE(5Z+L{b02}+Jy!}L2+Y?8A@1`Q(o6(hEgxI z8@WU2#0Dr6zpASteD(zU&oN}7A$H-YXun7;)34u*;-Yb9zP%oEM_r6FwJ3Bf*iFkc<~3?9O4 z97Qed^_$-uk_TSswe0^spC3Qe7wd?RaS*?BXs(}LvgyJ8{e^x)Kcx1iwGQUL8R~;W z_@z1@-ZjLDzenfJ*M~Xrv0W)It2S;a)h3UmNZN-v?>#CHRhp934L@;uvhXMf$+^sP6AQQzGYJ z$T}DW1$#b^8bT5`4MfTlcZP2*ZegT&TFb z16Y+-22FJ|jaYa-Ee^JqMw9Kei9UYOAbf^%LMVk*f?>e+k+e}qN;1&J>|_pt(V?dP z{LMs%Jr_r|sd-IO0KY53iys)}%WsVEbq=8FVGK#xQ9i@nlf_%#adjT-MTVRPTHDhc~=?}-j*`-@L#uomyZDOxoO+Fl_sL9?5Hby*a zOI>D1jZaWer`dv>#@p!m!;TuCprD?yrS8qK+4ZS>rL7#8+4auRF4=Xi6K$kZZ4+kO z#CqGr0o%j{+r+>E8*Lf3iF(__CfmeYwu#?t6M=;`+VX7^Ew+irZ4)2aCjPNagif;2 zR%n|r_u{0tf3S&wCPUKFudHjUD(Xs~8pNWR2 zo_b2wAZZ;vdUTg`DIjU3dHnl%Mt*gUzWYd;Y1`=knmi6=JdNH``=f}DQ z7UYIZ>}ew%&blShAe@lle|!(L6pg z*T{#Bv9bKKG2O8frpS5JT4ysD{T+FB)ek`A;qzlWH;6zq!???nC$z< z?%lg(8zp;aUXT7k^Z3l17=GO(&+gWJ*0#5PW}Co8Ha#=OHZjdMv9ieCNyG)R58kqs z{;epILlL~S*oRLn_LVlx(q2-}{o9uDwn9C$}iiDD&ohr};A4J7>_H7L>uol$di; z%u$uzdjILAbpPg3y8kvY`cRDi7Nd}vw5&jk?h>ONGo{8UobAQ`Jkz(Y-sd-~?+TE1 zn?I{>kCArSJBwD3SazOnZYb+pVMZBs;es-H1Z^*)6+c?m=b_;?yKh|+XUFzs6F-|O zJ|sq@YFs(3Wk5MC$P*({uv#p5O3e9KjBbcgLZ`uPZ6TsftEPVpJ|hYsBc)sy>PTh!UY@x_6-%EfJ$<&3*26!Q8i7NvBP( zrd6C?-M84p+1~uF>OOnb>FPe=L+12ZR5pj&vAS=G4@8N-#3;Ci%1^A3`Z^gJHq^)+ z@=bB`>l*6(p|!Q74c6B#Bazo!x^KD|)y?g*QZLNy+Y96XQO)c703puIn@8(YF^}@r ziqUIgbbelLUwt^MuFo1Rue)`PPSxGIMnmdpjZ*7rjm%=SUW^XZ_ldpHchSg(KKEME zKq=%{>ujLhQ(}(R(&s)o7P?QP7;O=w_r>T>OW($WyRips;U(mM~NxOe`i*j;w_&4@>bmTSCs*%f!)s3`jJ7IHw zq(Q=xos@YAl-A{-)XC@5bk2g`fFNlQ$n{VkvzOI?7x~ExI^`4mXy_n

BQ zY~+XI)RJT1BGuko>;6AUx0Cw+&$`#&Qo5&aHV``;SS$0#?)2ZY^Uk>gtpooc_2)1y ztq@kiign{nl2+q;&6PF3uXd{@d9OOa8a?FAH#bx+zH4;}$r~CV=6yc_w+786d2T3A zNAgs-W|e-)z%n8g7%fT-X?bSCwUYGKl`zj+v!CQ?G0B_HZ))!s`O~FtsmB*|@ zbiK=X5TJ87Y5;7LSo$M0nIvUGOy+#H@(wJm;txIOgSGITn@XmcM5d=KWYIrT+1|<> zcCmp;<}@&U-} zDft+20{dGJaVUhCLmsF-PK{QBJi6J6Uz~hwY;mF2s9!&NVD#G=?^xdr_iL#xe&CVp z`?s0aKNPz0@v7CjnnF*f{&#=6-P_gl)Y?a0chrCNW#s*) zEuQtk=>t16w|7P#*IxepiO%SBzjZIJ-{pJim91?LEg0T*u}#(f@0>AD2BtL?o_2Rp zC7}G%ejC4xZMyPh)TC?kYY*<&oBC14OwWh4(<9o#6MU{d$Y(7!2W;r__FDYZH!m$u z{$=Z)N!!PJhCk!>(c>*UOU@TAiaaLpS=Pm$&3VUaS$$yAe_9Nqo0`o3iQMz_D<3cV zyX4xTCi7iyS6fOaA8nhn<)a^yR;7e=Jst7qm;-;lzyJPM-r94I_qNA|CpygeAmEpc z&%e)qJM8(AZ)S#cHAI8ROoygDYg5v<%ntl0J@vp(H)j9v{bNpBBIZ1MCFO75f(Zw$ zU(XrgF`An{*!tfqY2IIM_#ySLgwAl^S*Nxf{P)}Z^G_c;{l})OS*n9~Tq_bnMvK)~%N|z4!Fu=5+^epzF`6YewTl?uWLA ze*Sp%JfD{y_)qmi_x=8)dB1YR*Bd*YRau?y^3ttr+l(rA zO*yyV0nL_Qg`cMFxw0?r=Wl}=G{|@nOJC8^3Gd5*v9bj0CRPT9W)8Vw;U%Y@F zFT%lkqpPcnfBDO3-9M1H2H`q{e@OuZGSGKHAmhTGs?Q(8yH9t9uq}#A1Rzao^Lk$h{30s{-LFBAV)28XFgtl{d_( zGaGwqaTaA7%4!-~>Y*l;Jq3DT;t8ftij`sFdkSd~mMWS63tiN4-5EWld#QLrPZ=AH ziLyp3b4KDVYso5^bPJV9vPz~g>3`9f2)FQ+&go%l^8cbG`8G<1^{vF(-O|Huqa~$p zE!|2|dMa^IbgAardS#EYlHP4&^PlG5H`0!&=rKJ6?7NgbrLPV}05%=Uy2&i&+`is@ zbttlbcZY)37c*|JFcCzQ#~00!-BpQeH z)M($&>=pLtWfi3LWsNC4HQM(%dyRHojt#Su)*rk}9%eIOc&$VhR0E;zmcy*0*kQ}- zD$5o$FR~l{ptjp45!J`m8>QMx8TS2BQf3vk_0lQnz$Ph3usg&g1>*j_bV0@b_M;fv z-^$D(U9PtyOR9kVprx!pFC9!#0sG-f+~0~=1$yaE3I+CENLhg%-A5ifBm?X_4Ba1w z8CC(i-l7%HEusSXyr^)Jorrxy+leTfk`8lrGWN}7Ct}|qb|UsZw-Xs=wd+`RGWMQh zXL{neTV4vt0(RY7)?j5S>^iV4!369&XiovV9@taBu7?o;;(xiCc73R)3cEhS&Oc4F zerzQJU!Nx^Nx-guSji|Sm6FqsoFHcoIY9<}IY9<&IYGu+IgtXBT6!%=OtL$rk~39P8lp7J(>oeda|NWvkFb{FchF{G#;Lt%S8F` zodpA~)eIN44X6p8pzFTGod`MRUM_UmW$d;|iFIU>1D&QXy?jDM1@kN+iKhOIxY3&TK7j=;IjbmXSp4jv`og0Tohl zf-;$?OeV2eg1Cd+H>|x(B)UcHi2WoYQIMcWB`Q)$%vIBbig~v>GOS3F=+&80A$6vd zpw5&MNyx6JJ#d^|BkMvq@7qtQ#&ReH4?+9OC|-#cW_Rw_1q>q%nI+u!$2L8|x~2ALe_J zvFkCeYK$(rjnuryPQP3oTUDC zReCIaae+52+fB=BD1ekfK>6DLa42RgfgQt03icSApbMNqViPLM+?|{;z-q@jLHF$OMb! zmemLihXru;0|*_1_&JDM;Iuwr4MKjfTKzr5FG0LwEkYAvz@M@Xp&&TX3~Wc}TZkWr zxDF1aXjsnv3*t)&$KzX|cWO$bf*hKfD{6@}REQH0L=AoLT&d*LzO z!;c~KfFDA0HzSnf59M2+9O9*05z2=rWk+p;%D}U-)?tss8a_P4p1U0(&mpkW6NoOY z>7PXCBXHdt5ZA+^-Lj{^D!5Cs;%S89U~NA88H9d?_-}}x0N1{}11toWnx93;13apE z4xyb8=Ro`$#P>jK1P^}*@j{4qKabE%M`T4sFTm;`xcUQ#?*Lb?c@duAbq3*=5c&$@ z%@F5-tFxdXFF_o%6O@3fqjw>65?uTq#LeL15ql6i53cF2M)PTr&IXUI{1_p3@Yuc+(EjP* zvg4mXX9Aaf{V76oz-9k_1~mqk{rWj{JaAda7trg$WyUWNdL61h=IByOKMwqm?QFM?)brBdv%_pGu%1dQ(DmfX|@}x&YNNpidppCN?@8SY7#! zn@s~2u-!e;An?Wl3?F`Em&t){!S;PN+n;rB?+wD`SP~NM!&u%!_{=sD#NpL`jhGm5 z5N@+Z!(GiLEPsTzI2`5L*qwo!gc}?V_5THCIqry~cTYW#<7MczU>y8i79QWsC1@{W zn9d;~NQDOoAGqK^p-_eW9fqJGpkE{0t-{8*AQVIr@Cb4+jYHwKAxVe9hs4qF!N>vL zQHmw8u*`scgbOO1tzFdxT~8w{b;X?>SJikM7q$??VE_g|UkBNRxcj4}?Lexw2)hfr z`s0DtMOaI1B~7~s+kV7+(pHw|vryz2%dmskeM`^eFSoL@*hhl?7rx40*lg z!^xu8d>9&)`9gF*obRe*9iMb0PPn@tuEeAdmFEU9ClFM+9k8mUyZ&p+@-L{&4(`vf@-CfOtSUBW@Lxj~K__%XL z5Jp~+7^$P^(apId{_^$Yj+sO8@7%~X3}<}VUA8ssKFC+%SC|Z`-91?P+$*e&0ROHM zoFj1&zE7AHi6=tzQY6lT=!zI6N72-sB)VTXNTSsO7mb7Q1Hw=-8Y4yxVzhxoYlM9y zS}mLsGjEEKK8Eg>L!vdpToSDo){2?C#prXf>>7#g76!*cv|Pv(qiQj_UyNQ7qZ4BE zXDogOB)7!T9o~Q_c?BMY({VQaXwgX+b#{Os!r{fw5M(=67uYt&zv5W^Z_lyXV8Acv zC&pm(!Dx&ulQ1GTVj~t}^y?~&);)qz(Tf-jdcEVO0eh(<)?&C!fo9ReH%4o5pP!Bq zN%$=%kavQPP2|09BOfsuJ2`^d{zq{ zN$j1${@JD2>H_kuO#ac^$QQ20salXrMCxCy;-Z$sf6m{IgHsTvw1k&g8$jjlAD3{IQ#2?3!(Rxcn#% zu|IZ?UHj0F;t=cCiBG#fe*lgcV7>W0#20%Ewci@?yB#~u$nh8+Sr# zF@(DyEP>Dl!39oF|uj{z@GcMFBnrOal6a6AK(J!`5lq@z; z{T2LRnC>!0yHy;T>dm23;T&2qf5IZRFcxIFkd&lLsD&qvza4{!$|M zM4)>eUItgUHYj6?0= zejog`;S$>RWP2T6&b)h@o-9C5{@K%lSF(=7LC3M+6)NGrYq%Qn?_v2Wnt!iKz}K-? z!hF06@-eJ(s9-8rNwF%JmsinO)0c8&{^S5D@<-+%D&!~x&A=!as;FW$$Pu8h<~sHtNR+D;%GFG{@a1*vIn9C}VEW+gLeRd3>C?#i zG)$jp0Nev%251xpXcP>M#4!I$8S5BBOBp<45O;`m)+!iqubMHm3Wip}&`M4s>lVaG zzSKz$)JYo{(18Nm8PGunI!I13-e690P$+kh3|Ml58t@>~=ScN!WcnOseel!)b-L&z zN7(>Jg#nHVh9hIlgT*asfQ}mAL=AX|0i7sNU_d7s2=}UNfKD>dNda_H0G%YG%s26X zsrX@raHfb&3_<#$*eImqboX3m89`Q*x_hp(0^uy#M5foIQ9`Iq{isckGGIRne1rk} z$w0V0W&`Xe1N$j}{S?4{l1=qpw4okj3>V7S%or{*1Ma`tFkEDYi-O^zV7N$(KSah> z#&D&KZH(b6GvL0I4Z~GtxGET~3Wh6VY+S;TgK|4VxKYFt4B;jt;I4rUg1j0mjw)^n zgqs54CYhnZl<^c}z{(XI_)jy2yUc)lBQ^|onc=QrxGNa$5@U_X*ufYcl<_QMc*qP7 z1;ayTcqkYi3I?pO(a}-RaMX_H8KXaCyucX!Wd_{!vazGT%;>LR^j9$YGe!tmeIfnW zNc%Cl;IrVD7|@df|DzHf=QuBG_o3n`BRmxdPX)pg-gU1;JK?8{cGJ(h@b(88<;nWZ zI=mAYj?2?)1)C@_Fp7(juq zGhhG(?q|RN85p1d!qcj3tPW5B0~Ejj2}ssNN&ghD4FV~UymUl*Yaj(4WWYcf7^naS z%D_McFi-&ulz?#GiURf2!od`Hhye#vU?&3(mVtv6KzMS8SvXh$9IOBiWbC{m1~#3)*fV#Fv`jN)h{ z82fQL;g`AC5yy)e_5HX<#EH}hQ7}!+PjcZxgnAdwrE(~3QXTd18_dHx>R}D@uuk@{ zPT^sl>|ywgEt`u!ox;O9sSgFQCJm>+APRhw0m*Hy4Oq*7K{7B%0SuCXK?-1y0vIF# z^$ZwEfqDu&!hm`TbYMWe4Ad)tdKsu!0O5r|u$TOiiJ4vk1~XtZ1qM^#TMS5U;BCP4 ztw`v!!7?yd0SuOb!3too0vId-Ll`iY0z)Y9Z3YaXKqqElhztx-07GP8hyoa*0ES4w zPzE$mU?>H?!+_-0qd;l?PHwtd@OywK15cO?3{wEZWMG&A7^VP*Nx*Oh zOrXGU3Y2E^;S~5j1BT1Ma0M`228Jtu;R;~51dL$7L<)?cKxw)kL4hAIV1x{ePyi!j zV1xn~p#Vlmz(@v6qQFQBl;-}C6!;+nM#{iQ1u#+uMk;`j3ScAy3a*}Txsgn1QIsZ4 z{G%xCBSwpoX;BJVluV0K(4rKyD9OBNX5KIgBsb(OSXvn%&k9)ZQ3i~bfzb+Jv>ZY8E`ZOlGkc1 z_;UtKq`>|Rm?#4i6+rT^xd=>D0239!L z+$n}jk#Q-qEk(?h6ou*($(B@ROD44?l`7xD9F>Zi4p#t&OU^s($2lfuQS(Mn+LMeng3`Wb zv=K6Ggyg$H{+zh{KSH5-gk(w@GeuOMMwLIql&4YU-!SEAvhp;ADQU7PX$n))6u>kI zIFdD1HnnCX1wO}sBPsAS1CEq|BNf1rGH|27n%#Od795*#buEoOih zyO$O-z>D2Wiy7d_?xn>H@=9Fy+F}N{vwLkZ1KioYwwM9#>|R^UfS234mliX?i0-Au z40wXDducHPp55zSTFiiF&bpTtGtgMuwZ%-aXRx)!OxiP~wZ%-@Go-b}OxiQZS|ssb zCfEc^i^7fR*vE-H9Y$6XGsTs}ET&UjNz9@;zhk{E3v_OP$AiRiHB0VoS)i}`ESM$t zwk$<&%Tn~VEa`a4WA`t_;jo0CN?$# z!+?4^bIm^PLH#l^(26!;SZj-|i=1{^B` z$1QGvpu0tFDB8x^0=C}co!k*tsc z*E3)t1zu*rLK#>nSv0G{#-c(6pb!AdDsW(;xEMBxDwd|jlR)tXJeYO4NwVTelHwB; zINX6OS5A@~Q^e{iE_D@Ab<(7_h^iaH)D_9Y+-bE6ym;uG5F7jw- z_oTO&0(A^nECY)bz+xF#tN<1(fW;DUG6RZBU6UzLn)FVlz#s;kECVMifRkn5WCd`t z0ytR$PGLZCscQ-aN|W9x6sTvwDKc=10ysqmPEi1-D1cKWU*o3gA=)aH<5H z#(?5#*E9;0W^>ah@G1jNlY!F|z-cmYngTdY0i4EwLR>WGP=&;`F7i0C1xs_e=@j=n z!%dfQ(-pYsGH$v8H(i07F4;GO*(a`b&7eSOIyZv?|6srwGH`|hI70@`PylBrfHNdu zDFcdYU8NNGCm_hBY$*UY;9%BAOJ!iG0$3^oOBKLU1+Y|d=v{NLW1_gwMIPC-;J+Ac zCZ&Zi+Dw@?lhK6zbJ)3erb6>f$&^{l6md~&7FGT?Q$C9-4`s?{$;xLbOqnH{GD~5~ zECq0uWJ+5Nm?Exdl~LM1j8;ZzLm911rj^O2)L?%rIZKr(G?(={OUy<~;SrO%|MB)? z8|wW-rirt`L-MnY!o|7R0au7q!%A^#xUCkeg|l<92R4iO)nYV9jB039P;09O9+4!5 z5Y-hB#Pzn>)E(EDJ7!aNgfVx_mfbO1a)(PDbH{9jJK$k*SVXda{DpAV;p?ECOi?R< zb^9r5CG68ZMXiK=x~Hg>P``4k{P;^HRIq!FS_zfxo}*Sm59ywwRzff7o}yMl<-4b- zm5M29rDBR&shFZx(kZG{di9kH1tgpNo&bR8gNxQ`9Q3i9B^G9?4bI z=h76l3QX#L`lU+j^qx?sD!JE_No$ojX*Dy7IB7Lg%D+snnNn^*id-?7<(4(GmX-3Q z#Xz$RAbrNHXl=7}99J`-IBBh>z?%$MO}kP!>q^x!uv!7EmXG6V1+ZEHtd@Xt7*L$F zk_W>rxQhYjPzymjwQ!CMoTC8Fk%4m*z&Q%w90^#%fa0XJh5|7l$e>$8Erfs0L4h?g zutou_k%2V|V2uJ;!+=(D#FC>%oV3l*2=(I1+Z2I)+&It3Sez7N9;-D zZA9_#a_ctKhLjIS*uH4hZu?roS^8Rn|5=;Y65zFOgwn|u`4bAS-~oB?79l+00*@n- z$3MYga3H~!b`xZ8ay$oP1Nj#xme2s*_L!}oSfJH>_Jm@|;|9fa>8fRX4Ng!2%7fB>({ zpbHRwg77nhUxXL`%MFQ#7ZuST5dMVl7X)}C5d8z;8ieZ*{)KP@LKlhQ?G?mz+p;#avyt)4?g1*C*{vB*Q-@)Eb8 z)JxcQi1W6lAQMVL8StF|-zg{tnluT5iEbsLELZ@Gf&5JP=ZP7xWklJqodNMM_|5{^ zc)I5jv>5gx(%B%L1N$d~bT)iaL4s%<2Ki(w6=YIDA_gRqyg)$?*?>#~QySlq-^q3O z?fZ&bA3t^u{8;Ktcv|rV7|h5whyGAQKS8x{Ch3{q-bX$eiAzyI$5(Eu_J#POP=Alg zXiYICWtb8&z~aQDL{m&6R6a8%B{Mz)Y|PHgFb>PeN>7SU$XK!%MT1E>rsSCHY_KIJ zaac-x3>cA`6O){jl+&J^lxaYd;+MEqrRUaJD$48d>LSPa<(1e%{yQaScDX;R(OlkK zuCAyXIHaJ_TxHIytb@~&HoppeTC8qtam_Tf&bKsa&DgEKq1aqMzYf7~%4EY2uik+l z^2};!YPQtZa(AxI&aSQ36;DG2rn2nJ_;4dK7@~FY5xNY=CS4KQ*D%M`dD%Vg6DMV4 zjWhZ8-!{IesBqk)9@8H7Kt*{bQ*r);Y-E~RR-BPJ&ZH}{7H3Q5OuXkPCx8nplxA(}~m*3xiqHWJR&%XASt8*68g}w66!LOG&9{R4c^V{Pez4p;z zE`viIdtd+JGk*jQZ-YH6r!uC+AiJm#32vr$d)qWQDU;Z+sQZP+0_ z+C^8@ru{%2;p%MF!A~w^a-R0nN8?4Sx7>9DXiT4(555qsF-FpP^U zo$g6p?Q3#g{%#%$(ChTNp<}!ojN`lyyRJwyeh`|WwVDjAwavQpxUpJOgGZGvzxo~Z z1as>b&AQrmRKeJU>TqzUrLi1-)5aRSG`LGW<8<)$;irSQZFnd6-hQJ)Mh69((ddvM zO+?5!eSOp4O$+Ky>%Y-2Uvx-+NZ*C$t zS(f?=OD3|k#+PN)lsCLP#~i+Gg{yP9!!{K@tO?um$NT$V|4-+!H#%QDbR~CBxdRTp zUY6fb+gw|oQdfKDcdAJxm9@1EuT+^^e=0tVGgpqwKaKluYiP7A9IS%h`Slx)U7feq ztgjiVOIGW`zMu2*CwosNcb?dD=(+dzm%H$ei%^KGbJDapb&z`g^bDL1*N~m60oK?o zOG`tuikpx$z!;lRRh943Y~JZKMAh6BUOP1+wjsUUs0y21r2FeG&G+bpCicjN0FHN9 zpdNGue>Nm+_TWEUYIQL;b!TQ6aK@m+(^iJeclbPT*+b6ydUI1%#pC+&Ls(yuJ$5Vp z%~k*4q^xB)Y_v*WxD|hy&|jao0b8d!CX_g4mAJpBeHYJP+YUyAz3=$yCvPqbJA8cC zMYXH*TMow9qUJ?T+aIZ}-+;0kE%Q;fWnsg(+NNgQ-=GUSdEvEVhdQr(zW4oibQyU0 zP_NJTrm8c)4XDbpT&`=WZ)l&GzT{okF3p@SO_$~$O?>Q4&AEOFCBOC~AD#7rCgE32 zn0n{OMegtY`1zYh(Q|uGop}9~KR-UO;CgMU6fb^Q1dSLcr*H}Nc< zgT4#~!!?S}d8jI$iT1|XJr6xU2qdB{BwC2}SrvErU?L1mj_U58E zO`K*+^S0e5;!e58Y0AcLum6E$#c3=HgWlWZ{IqhVYm5KVB=><% z14nDlO?Mxt9hi7%w8n8DkzX*+d0;}E=2tNlt4WU3s0PmW>N0p0qHmLf@zwZ3q{o*H z51SjR%2N_xkg2$Mx}fHm&u8Xm9p>}KdmQd;bN_Z~Er9m8>&!dOLMcO!FXdY zD$A;?t(+GgfjZ_rpn5pais8J>K~O6kwoNeNBFlP$PWT}MRO2@00@B)21Do%A&7$$SSW1hAp}DRfiM(8 z1cWdM@SY`#f9o9I)xc^|tY}9YxQPmNxaQtz29`wggRlBWcQ6!wJlk&MuZEX-UAQrxX`C}W?VsAzT;*Y@Gmql@nou)> zGd}qxUvmLWnQBldO!C3V+{FfiA>ObvF~I;&Fsap9$XUf%-LR*@keIwA7{$jLf(^l0 z!%=BTZ9|o1VG}AXTGZ5Ru1`?Mm#WP1vCVZAD0m{A0yA2g+br-?>u|C{hUEw^H%+Xr zuB}{QS~U?>w~-5syG{OE+WJ4(hL@S*vvW{NwjnVqCJFqT5o0tMGh^B_vrS2Dri=`0 zTb6%fn;2DNrPs;z9aG+C;fk*=tw94-P%(Zrmb z{4A3(8I_JNni!isZk#swUXSJDb;jgagQIR@#j?Y?akUkO#`4BR2<~dY`wtFn-1wp# zOJlu9(Kofs7X_lGd@1qFfJ@JP}f=Z;m|mAZ3NOAJ5lxmZrpl8~g?o)N5H>xv@iHR9-$rzKIostj(zrAV9$co8~H^LQSVth(M z=CB+%H76w-S0zt|9|Ub|DkcA094#u%m_I+eycw03j)IMRaFB=cIw;E85C=BUH7fO$I7-?ZuSG?`@M`$;H-p6=4w+_ZL>*LJE>Es zMy5{dfm&nwp#*eSo7<5w@rk}k#$l`S3-%jh;~ld0kKMFpO=+XW(yT3A-kvT@GUb@E zqw|X^Qri0K9`CQq>a;X8H(KgOC+m`O@Ae#?+!|m&?Xv?KRc8a*YD_7a$%$~}m`o`# ziJ5Tl#H3~q%Zh=cCd*(<%1kiMPBLXLu?C+HNK2mbcc!T{+x_mO+4#9ZZEp9aBOlW; zcoeMjP3)C}zeVo)&5me5|L;)ir+(Y{q8f97xj7*hwsafJleZ-`r`P)LP{qHb3Yh$z zbKZ7j+`jeiZO;u}t%u)Gh^}z?p4aQu&QaTu-*(61n%X8*VriULVX@5Hk&EW~>Qu$s z+-f@)>Pxsq^H9aN~n(T;s<>)a6|;Dr$k%!)radB9u}UWMfk zKR8f`|6b+qS_#!11``i6R60SJ_PuIMkF1^cSq^7aqk2e9vd`LlR+ZgD>XLod=yP_u z?mwrR%jI#x&K;cp`uXX?iXT)S!oeM!qtJR@<-2}ODo0`8 z4sM_ja~`hWR^IX6V|V$U$a(3X%W(@0h9Ketm~x_o9b;U^oiR+<{Uv&9(GRcDDJ02{ zi#+(swx3F~Hr0nFKC+@=nk4U>^yITs^Je5fwQ82`#E19SNcm^4eD?1C`S<0n-5B@u zABz`nmGa}GN`E@OziVXfirl7SmnW{+E*0!Q_s1)RpFWbm!npYU8Oz^3D&=8aK9e$U{Jbvh~q$Tc2lNY&@$m)))A?R-ux@EEZpW1YHV_Qe!!ZU6s z@eQr9OWUPwcRlJX%=}3;SXlOxsst|+zWhn0$3?=wKdC;4H{ZuzQUwct{;XAL* zE$UL;%k5LEJ+M>T#u?NtD!xz?CZucB>6(Y3D-{bXHR`eOF3ZOxauNcy>Qx5vt5H9+ zFaP0*9p~2FeSYIk{{tZV B{}BKH delta 16398 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 F{{aDuP7weA diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java index 8a14f1c9..050999bd 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java @@ -357,7 +357,7 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { if (row.getString("bill_type").equals("000203")) { //通过入库单对象组织数据 HashMap map = new HashMap<>(); - map.put("flag", "2"); + map.put("flag", "222"); map.put("iostorinv_id", row.getString("iostorinv_id")); JSONArray dtl_rows = WQL.getWO("QST_IVT_INANDOUTRETRUN").addParamMap(map).process().getResultJSONArray(0); // 根据物料批次获取到货通知单的采购订单采购组织 @@ -2064,7 +2064,8 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { throw new BadRequestException("物料【"+dtl.getString("material_id")+"】,批次【"+dtl.getString("pcsn")+"】的通知单对应的采购订单库位为空!"); } } else { - throw new BadRequestException("找不到物料为【"+dtl.getString("material_id")+"】,批次为【"+dtl.getString("pcsn")+"】的到货通知单对应的采购订单!"); + // 没有采购订单的设默认值:如软废型材入库:erp提供 + erp_storage_id = "1002A11000000055U84C"; } // 出库仓库 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/returns/wql/QST_IVT_INANDOUTRETRUN.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/returns/wql/QST_IVT_INANDOUTRETRUN.wql index cdcdede5..9009da2a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/returns/wql/QST_IVT_INANDOUTRETRUN.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/returns/wql/QST_IVT_INANDOUTRETRUN.wql @@ -158,6 +158,48 @@ ENDQUERY ENDIF + IF 输入.flag = "222" + QUERY + SELECT + proc.PK_DEPT, + proc.VEND_ID, + proc.CEMPLOYEEID, + proc.PK_DEPT_V, + proc.VBILLCODE, + dtl.pcsn, + dtl.material_id, + proc.PRICE, + proc.PRICE_TAX, + (case when mst.bill_type not in ('000601','000501','010701') then dtl.real_qty else concat('-',dtl.plan_qty) end) AS real_qty, + proc.TAX, + proc.PURCHASE_ID_B, + proc.PURCHASE_ID, + mb.ext_id AS ITEM_ID, + proc.CROWNO, + proc.QTY, + mb.material_name, + unit.ext_id AS F_UNIT_ID, + unit.ext_id AS M_UNIT_ID, + userper.ext_id AS make_ext_id, + userper.extuser_id AS create_user_id, + mb.measrate AS vchangerate, + dict.label, + mst.biz_date, + mst.input_time + FROM + st_ivt_iostorinvdtl dtl + LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dtl.iostorinv_id + LEFT JOIN sys_dict_detail dict ON dict.`value` = mst.bill_type AND dict.name = 'IO_BUSS_TYPE' + LEFT JOIN pcs_if_purchaseorderproc proc ON proc.id = dtl.base_billdtl_id + LEFT JOIN sys_user userper ON userper.user_id = mst.input_optid + LEFT JOIN md_me_materialbase mb ON mb.material_id = dtl.material_id + LEFT JOIN md_pb_measureunit unit ON mb.base_unit_id = unit.measure_unit_id + WHERE + dtl.iostorinv_id = 输入.iostorinv_id + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "3" QUERY SELECT diff --git a/mes/qd/src/api/wms/basedata/pdm/productProcessParam.js b/mes/qd/src/api/wms/basedata/pdm/productProcessParam.js index be47059a..45586127 100644 --- a/mes/qd/src/api/wms/basedata/pdm/productProcessParam.js +++ b/mes/qd/src/api/wms/basedata/pdm/productProcessParam.js @@ -31,4 +31,20 @@ export function del(data) { }) } -export default { getTableTitle, getSetData, saveData, del } +export function getBallMillParam(data) { + return request({ + url: 'api/productProcessParam/getBallMillParam', + method: 'post', + data + }) +} + +export function saveBallMillParam(data) { + return request({ + url: 'api/productProcessParam/saveBallMillParam', + method: 'post', + data + }) +} + +export default { getTableTitle, getSetData, saveData, del, getBallMillParam, saveBallMillParam } diff --git a/mes/qd/src/views/wms/basedata/pdm/productProcessParam/BallMillParamDialog.vue b/mes/qd/src/views/wms/basedata/pdm/productProcessParam/BallMillParamDialog.vue new file mode 100644 index 00000000..b288e9fb --- /dev/null +++ b/mes/qd/src/views/wms/basedata/pdm/productProcessParam/BallMillParamDialog.vue @@ -0,0 +1,341 @@ + + + + + diff --git a/mes/qd/src/views/wms/basedata/pdm/productProcessParam/index.vue b/mes/qd/src/views/wms/basedata/pdm/productProcessParam/index.vue index 55344c0c..887f6f10 100644 --- a/mes/qd/src/views/wms/basedata/pdm/productProcessParam/index.vue +++ b/mes/qd/src/views/wms/basedata/pdm/productProcessParam/index.vue @@ -13,7 +13,19 @@ class="filter-item" /> - + + + 其他球磨参数设置 + + + @@ -50,6 +65,7 @@ + @@ -62,11 +78,11 @@ import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' import SetDialog from '@/views/wms/basedata/pdm/productProcessParam/SetDialog' -import crudBagrecord from '@/api/wms/basedata/master/bagrecord' +import BallMillParamDialog from '@/views/wms/basedata/pdm/productProcessParam/BallMillParamDialog' export default { name: 'ProductProcessParam', - components: { pagination, crudOperation, rrOperation, udOperation, SetDialog }, + components: { pagination, crudOperation, rrOperation, udOperation, SetDialog, BallMillParamDialog }, mixins: [presenter(), header(), form(), crud()], cruds() { return CRUD({ @@ -87,8 +103,11 @@ export default { data() { return { permission: {}, + currentRow: {}, workprocedure_code: null, setShow: false, + ballMillShow: false, + openParamFlag: true, openParam: {}, // 行转列:https://www.jb51.net/article/196058.htm cols: [], @@ -161,6 +180,32 @@ export default { this.crud.notify('删除成功', CRUD.NOTIFICATION_TYPE.SUCCESS) }) }) + }, + handleSelectionChange(val, row) { + if (val.length > 1) { + this.$refs.table.clearSelection() + this.$refs.table.toggleRowSelection(val.pop()) + this.currentRow = row + this.openParamFlag = false + } else if (val.length === 1) { + this.currentRow = row + this.openParamFlag = false + } else { + this.openParamFlag = true + this.currentRow = {} + } + }, + onSelectAll() { + this.$refs.table.clearSelection() + this.openParamFlag = true + this.currentRow = {} + }, + openParamView() { + this.openParam = { + optRow: this.currentRow.material_id, + workprocedure_code: this.workprocedure_code + } + this.ballMillShow = true } } } diff --git a/mes/qd/src/views/wms/st/core/inbill/rawassist/DivDialog.vue b/mes/qd/src/views/wms/st/core/inbill/rawassist/DivDialog.vue index 27e5d4fc..78e4c2f2 100644 --- a/mes/qd/src/views/wms/st/core/inbill/rawassist/DivDialog.vue +++ b/mes/qd/src/views/wms/st/core/inbill/rawassist/DivDialog.vue @@ -313,8 +313,8 @@ export default { crudSectattr.getSect({ 'is_materialstore': '1', 'sect_type_attr': '00' }).then(res => { this.sects = res.content }) - let area_type = '' - if (this.billType === '000101' || this.billType === '000102' || this.billType === '000201' || this.billType === '000202' || this.billType === '000305') { + let area_type = '\'21\'' + if (this.billType === '000101' || this.billType === '000102' || this.billType === '000201' || this.billType === '000202' || this.billType === '000203' || this.billType === '000305' || this.billType === '000103') { area_type = '\'21\'' } if (this.billType === '000301' || this.billType === '000303' || this.billType === '000304') {