From 27057ae53d4abedc258aa5e3ea35e21399624ee2 Mon Sep 17 00:00:00 2001 From: zhangzhiqiang Date: Mon, 27 Mar 2023 20:20:46 +0800 Subject: [PATCH 1/5] =?UTF-8?q?mdf:=E4=BF=AE=E6=94=B9=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E7=BA=BF=E8=BD=BD=E5=85=B7=E5=AD=97=E6=AE=B5=EF=BC=9B=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E7=BA=BF=E5=8C=BA=E5=9F=9F=E5=85=B3=E7=B3=BB=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/nl/wms/sch/wql/sch.xls | Bin 183808 -> 183808 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls index 76abde1e6f1905de81af97f2d691c0427f9e5162..8076ea8361e9c901a92d2e9fe8962c58c4ef3727 100644 GIT binary patch delta 2140 zcmb7FeQZ-z6u+n6UAy(Qee3Ic>$+E%fW29GD2`m|HZ?2@DirWG-Y5Vzwb{ zPCiB;xN$T?U4W3thd>xUr6yx+L5w7Z=mH9Vpv+(bCMJM^L?U6H``QM|riop0?|HxT z`<-{r@7{JDeU6SkM}ORm*Ub5-nf*9m@!>Sfb69VUqL<9{oWZ982f?({xQYWQ6{o5 zMl*T+>#m4Ajo{m3eBlKC8P+)pMg<9EJS(c$mF1FU%B0uIPx872X@YEFGCM3t!ec4z z1-6Vr1+RHkD%~$8hm@zJ2p_oJLwQ4a%;ZbTtK1V6my%hsX@VgmdY0->s15$7HZ_#s zkzg|Nbw<)G8U&_d6CwKX;P)Oo9`v~ANp-7uNso9occ+(AxO;gR^+vE=^vgjSaAKFc zy%Dm4#)L_9>M~Y~K2q3)3rr=AD|H+)s-h(1q%?RE4zm?>cnA3?@jf)Ah04nPks&VHZPKe8jV27Cu%JwUgn#qBOv%T;Dc z*lnX)J&^k^xPn=dq-9DQpfFu**Zm$Zeh9~t{sXhpREESQ9H&ad>3X+dC?H|KJR_$E z=!Q<%v4?ktnaZh0I1e=d9y}HD;XNf1OskXpE+pFU@Yhubytp_gLNofuy^j1LgH*wIj?<;Q$4myTJ> z59R@F6?yvBs6LZvTKU)Q4^b;912N3a(mffKCuB{@$0>tn84QPKY=FLvSRtF+uO2Ma%}$~=a`^r#p>nj-q}{e zvBM(?>}n;ngc>-O#qxjTm=RWWOO|XpH_t%9QYIIg#5OkKe{gp*SShqGN zy=11Z@68G`=UQ&=GSYSyShIF;?KUGWd)ubPTKWOzX}`7pX@iJ%v2%_YA}Dt)q_w_l zkf89^D+1it%pcb{!LBXYf5u>Xp4sgfKD1~_AuC{QZ3|z3Xc0wY8=5=Y+K#V-XpElD z>~8M-bv1t~rl)|KNBey3+e1wT zuw%)Qc6c1WI#Qb9XkpCB2ib}Dj}%$9_cPX{;hyuKX`@Fs*$k}%JjT(Z^Rau_q%Dab zvpTpRi~;@mQ5t&J(shopjFA*i>mJVZ!X|C^`3|Gy`Y()Kx{^xiC6r5VWw_qE!&t2i z*!mn`cXI*vp1-T%)n`jV#Mi!@+G|i@qpOr&61Fl{76aD3fO8Hd`>@4#gg^i&jqjNR zaWUTT1enB(i>!n>ee`<_y`~B%vX&V<>;(Pqrh<+z4bNK+vv9n*0(L;}XazKGu7nen zhFw8Z>zk|A#QPczBXa|DzwQ`;Z=js$9V^~A9Vk4Vi1+=p`S7zFx9vgt zoN;zIM9OyrXqi1qmn_MoIs)n~N1G*XHT1v?z!jj-HJ3!a9w&Y8o`+{C%d_5c4hksh z3DS_u$#$N#g{{?~(i-<-)gRxE7@%RlOdAtLw(3cc{@+~=0l=MmUV!s#px?NHKbfj=8l z^kfn9u(SzX_KOn~ZnQW>pP`EvnNATVYOqMpFqx_ZnOuT7Yl;XiYV{}586jXEXNXpM z74L%~X6Q1Ryh&QSS{Z8vkzNnmXnB%k=aCJ(iY_PlX6f0ntbTcRGp2rk`iEz~;b>cXg>px_pa2gDZOU4=J{ZO*eICaaVGLQ1arI06h zecbNojQ<43Y0U}i8EJW_G?z#AJdbOV_0F1C09KAY6qkB|nvu0tMpQeY|eARj32r@Lt z#B?@IP@5ulWN^DOH{Sa77j?JjgUljzW>y}eOv;=Lb#3qw~Au!c(-$BGTBHq>o@xuaUcUc6>t zw<>UJ>N*WefZqo-%z|t7OlnG6p|R?Q43=fziQ3e4)jF#_j5^ETvSe8=y|g)3Dzha5 z49~M^T>J0=3;XFu*r@hx?y#uOZ0$iTQ>~4^Ix$QAqpie-S@hVRa(3Un=MsbF@4ey0 z@6@y-)gH`Ln@;p|)+%rz%|E%UGzwA3gvQ45N{mL?J0cVAHE(KbY&^SNi*s1q|JtUu zuQnKQE{l(|eQw39T5UfM;wy^k3$~@GcTYBOm`NMDTW~u4+&w$-$1MOJR_8Yd0USY~ zW4)gmI#>JQ40hsJWC=DT8Q9rs_Qi#~;Rj@mu zkh!Kg0Gzo9e=Ve|H{WEHRK@yJ(Ti9Z`(zTvgje&?inC))`REr~nz=Zb%|xy2s}$b_ zEkbCAg{(j$;$SCSWD#<9wr7D|CT@jJn95WJZiB-nZf7g)ZDu$-SfpKsmlL|-9p?2e z_?VXq4oh$fPV1i-dxow<0d$M3dam=xlbGY$2SuC@F4+BAbJN`Ep#8%jq(gelUWWT| zR|Q_E;0}ka$8X1Nj&-f)uFXm2j&9nI?_)7zwx*Sw|1A2Rv0hXuABpWf!~NpMk7L^| Ia=U&10?POK5dZ)H From 3d8ed010b96bcb0c3ed780a8fec2a2d57eeb6d23 Mon Sep 17 00:00:00 2001 From: baoge <751575283@qq.com> Date: Mon, 27 Mar 2023 21:34:34 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9Bwql?= =?UTF-8?q?=E8=AF=AD=E5=8F=A5=E7=9A=84=E7=A9=BA=E6=A0=BC=EF=BC=8C=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E5=86=99=E5=BC=95=E8=B5=B7=E7=9A=84=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/pda/rest/CacheLineHandController.java | 4 +-- .../wms/pda/service/CacheLineHandService.java | 2 +- .../impl/CacheLineHandServiceImpl.java | 31 +++++++++++------- .../java/org/nl/wms/pda/wql/PDA_QUERY.wql | 21 +++++++++--- .../nl/wms/sch/tasks/SpeMachineryTask.java | 5 ++- .../src/main/java/org/nl/wms/sch/wql/sch.xls | Bin 183808 -> 183808 bytes 6 files changed, 40 insertions(+), 23 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java index a7585146..b6c8833e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java @@ -112,14 +112,14 @@ public class CacheLineHandController{ @PostMapping("/instOperation") @Log("任务操作") @ApiOperation("任务操作") - public CommonResult instOperation(@RequestBody JSONObject param) { + public CommonResult instOperation(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [任务操作] 接口被请求, 请求参数-{}", param); return RestBusinessTemplate.execute(() -> { //任务类型和任务ID校验,instruct_uuid为前端参数命名,本来应为task_id if(StringUtils.isEmpty(param.getString("instruct_uuid")) || StringUtils.isEmpty(param.getString("opt_type"))) { throw new BizCoreException(ResultCode.MISS_PARAMETER); } - cacheLineHandService.instOperation(param); + return cacheLineHandService.instOperation(param); }); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java index d44791b5..886c018d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java @@ -94,7 +94,7 @@ public interface CacheLineHandService{ * @author gbx * @date 2023/3/23 */ - void instOperation(JSONObject param); + String instOperation(JSONObject param); /** * 任务分页查询 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java index f16587a3..b4993bad 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java @@ -31,6 +31,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.xml.transform.Result; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ThreadPoolExecutor; @@ -184,25 +185,28 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ } @Override - public void instOperation(JSONObject param) { + public String instOperation(JSONObject param) { String optType = param.getString("opt_type"); SpeMachineryTask SpeMachineryTask = new SpeMachineryTask(); WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); JSONObject taskObject = taskTab.query("task_id =" + param.getString("instruct_uuid")).uniqueResult(0); //01-取消、02-完成、03-任务下发,根据操作类型执行相关操作 if("01".equals(optType) || "02".equals(optType)) { - updateTaskStatus(taskObject, optType); + return updateTaskStatus(taskObject, optType); } //任务下发 - if("03".equals(optType)) { - SpeMachineryTask.createTask(taskObject); + else if("03".equals(optType)) { + return SpeMachineryTask.createTask(taskObject); + } + else{ + return null; } } /** * 任务取消和完成操作,更新任务状态 */ - public void updateTaskStatus(JSONObject taskObj, String status) { + public String updateTaskStatus(JSONObject taskObj, String status) { String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); HashMap map = new HashMap<>(4); @@ -210,12 +214,14 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ map.put("update_optid", currentUserId); map.put("update_optname", nickName); map.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("sch_base_task").update(map, "task_id = '" + taskObj.getString("task_id") + "'"); + int result = (WQLObject.getWQLObject("sch_base_task").update(map, "task_id = '" + taskObj.getString("task_id") + "'").getSucess()); + return Integer.toString(result); } @Override @Async - public void cacheLineMaterSync(String cachelineCode) { + public void cacheLineMaterSync( + String cachelineCode) { if(StringUtils.isEmpty(cachelineCode)) { return; } @@ -363,7 +369,8 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ @Override @Transactional(rollbackFor = Exception.class) - public void setEmptyBox(JSONObject param) { + public void setEmptyBox( + JSONObject param) { // 缓存线位置编码 String position_code = param.getString("position_code"); // 载具条码 @@ -558,7 +565,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ // JSONArray arr = WQLObject.getWQLObject("sch_cacheline_position").query("cacheLine_code like '%" + wcsdevice_code + "%'").getResultJSONArray(0); // StringBuilder sd = new StringBuilder(); // for(int i = 0; i < arr.size(); i++) { - // JSONObject row = arr.getJSONObject(i); + // JSONObject row = arr.getJSONObject(i);. // sd.append(row.getString("task_id")).append(","); // } // String taskIdList = sd.toString(); @@ -567,16 +574,16 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ String wcsdevice_code = param.getString("wcsdevice_code"); String position_code = param.getString("position_code"); //根据缓存线编码和缓存线点位查找任务ID - JSONObject posiObj = WQLObject.getWQLObject("sch_cacheline_position").query("position_code = " + position_code + " and cacheLine_code like '%" + wcsdevice_code + "%'").uniqueResult(0); + JSONObject posiObj = WQLObject.getWQLObject("sch_cacheline_position").query("position_code like '%" + position_code + "%'" + " and cacheLine_code like '%" + wcsdevice_code + "%'").uniqueResult(0); //查不到点位信息 if(null == posiObj) { throw new BadRequestException("未找到该缓存线的点位信息!"); } //查不到任务信息 - if(StringUtils.isNotEmpty(posiObj.getString("task_id"))) { + if(StringUtils.isEmpty(posiObj.getString("task_id"))) { throw new BadRequestException("未找到该缓存线的点位的任务信息!"); } - return WQL.getWO("QSCH_TASK_01").addParam("flag", 10).addParam("task_id", posiObj.getString("task_id")).process().getResultJSONArray(0); + return WQL.getWO("PDA_QUERY").addParam("flag", "10").addParam("task_id", posiObj.getString("task_id")).process().getResultJSONArray(0); } /** diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql index 96cd7597..2030afd2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql @@ -17,6 +17,14 @@ 输入.condition TYPEAS s_string 输入.cacheLine_code TYPEAS s_string 输入.product_area TYPEAS s_string + 输入.status TYPEAS s_string + 输入.inst_num TYPEAS s_string + 输入.start_point TYPEAS s_string + 输入.end_point TYPEAS s_string + 输入.start_date TYPEAS s_string + 输入.end_date TYPEAS s_string + 输入.task_id TYPEAS s_string + [临时表] @@ -239,17 +247,20 @@ OPTION 输入.status <> "" find_in_set(task.task_status,输入.status) ENDOPTION - OPTION 输入.inst_num <>"" - (task.task_code like 输入.inst_num) + OPTION 输入.inst_num <> "" + (task.task_code like CONCAT ('%', 输入.inst_num, '%')) ENDOPTION OPTION 输入.vehicle_code <> "" - (task.vehicle_code like 输入.vehicle_code) + (task.vehicle_code like CONCAT ('%', 输入.vehicle_code, '%')) ENDOPTION OPTION 输入.start_point <> "" - (task.point_code1 like 输入.start_point) + (task.point_code1 like CONCAT ('%', 输入.start_point, '%')) + ENDOPTION + OPTION 输入.task_id <> "" + (task.task_id = 输入.task_id ) ENDOPTION OPTION 输入.end_point <> "" - (task.point_code2 like 输入.end_point) + (task.point_code2 like CONCAT ('%', 输入.end_point, '%')) ENDOPTION OPTION 输入.start_date <> "" task.create_time >= 输入.start_date diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java index 871e6dbd..9b697de1 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java @@ -53,8 +53,8 @@ public class SpeMachineryTask extends AbstractAcsTask { @Override public String createTask(JSONObject form) { - String start_point_code = form.getString("start_point_code"); - String next_point_code = form.getString("next_point_code"); + String start_point_code = form.getString("point_code1"); + String next_point_code = form.getString("point_code2"); String vehicle_code = form.getString("vehicle_code"); String type = form.getString("type"); if (StrUtil.isEmpty(start_point_code)) { @@ -68,7 +68,6 @@ public class SpeMachineryTask extends AbstractAcsTask { } String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; JSONObject task = new JSONObject(); - task.put("taskdtl_id", taskdtl_id); task.put("task_id", taskdtl_id); task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); task.put("task_type", type); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls index 8076ea8361e9c901a92d2e9fe8962c58c4ef3727..ff5ecf078139335c26386b103d72247a861dcccf 100644 GIT binary patch delta 46637 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 delta 45889 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 From 60ba6a50112f6ce052191e91b8428eb9de02838e Mon Sep 17 00:00:00 2001 From: baoge <751575283@qq.com> Date: Tue, 28 Mar 2023 09:12:32 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E5=AD=97=E5=85=B8=E8=A1=A8=E6=95=B0=E5=80=BC=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=89=80=E6=9C=89=E4=B8=BA0=E5=BC=80=E5=A4=B4=E7=9A=84?= =?UTF-8?q?=E7=9A=84=E8=BD=BD=E5=85=B7=E7=8A=B6=E6=80=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CacheLineHandServiceImpl.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java index b4993bad..e93b70b8 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java @@ -191,11 +191,11 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); JSONObject taskObject = taskTab.query("task_id =" + param.getString("instruct_uuid")).uniqueResult(0); //01-取消、02-完成、03-任务下发,根据操作类型执行相关操作 - if("01".equals(optType) || "02".equals(optType)) { + if("1".equals(optType) || "2".equals(optType)) { return updateTaskStatus(taskObject, optType); } //任务下发 - else if("03".equals(optType)) { + else if("3".equals(optType)) { return SpeMachineryTask.createTask(taskObject); } else{ @@ -270,13 +270,13 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ json.put("quantity", "0"); //不展示 if("0".equals(json.getString("is_show"))) { - json.put("vehicle_status", "04"); + json.put("vehicle_status", "4"); } //展示 else{ //是否空位 if("1".equals(json.getString("is_empty"))) { - json.put("vehicle_status", "00"); + json.put("vehicle_status", "0"); } else{ // 载具不是空位 @@ -285,7 +285,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ JSONObject ivtObj = ivtTab.query("vehicle_code = '" + vehicle_code + "' and cacheLine_code like '%" + param.getString("wcsdevice_code") + "%'").uniqueResult(0); if(ivtObj == null) { //标记为红色异常 - json.put("vehicle_status", "03"); + json.put("vehicle_status", "3"); } else{ json.put("vehicle_status", ivtObj.getString("vehicle_status")); @@ -447,7 +447,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ afterIvt.put("vehmaterial_id", IdUtil.getStringId()); afterIvt.put("vehicle_code", vehicle_code); afterIvt.put("cacheLine_code", cacheLine_code); - afterIvt.put("vehicle_status", "01"); + afterIvt.put("vehicle_status", "1"); afterIvt.put("update_time", DateUtil.now()); afterIvt.put("create_time", DateUtil.now()); vehMaterTab.insert(afterIvt); @@ -455,7 +455,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ // 出空箱 if("2".equals(inOut_type)) { // 缓存线载具物料表 - JSONObject json = vehMaterTab.query("cacheLine_code = '" + cacheLine_code + "' and vehicle_status= '01' and vehicle_code = '" + vehicle_code + "'").uniqueResult(0); + JSONObject json = vehMaterTab.query("cacheLine_code = '" + cacheLine_code + "' and vehicle_status= '1' and vehicle_code = '" + vehicle_code + "'").uniqueResult(0); if(json == null) { throw new BadRequestException("无法找到缓存线【" + cacheLine_code + "】的空箱【" + vehicle_code + "】,出空箱失败"); } @@ -644,12 +644,12 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ json.put("material_name", meObj.getString("material_name")); json.put("quantity", instructObj.getString("material_qty")); json.put("product_area", instructObj.getString("product_area")); - json.put("vehicle_status", "02"); + json.put("vehicle_status", "2"); } // 出满箱扫码异常 if("2".equals(inOut_type)) { //5.重新新建该缓存线位置上的料箱为空箱子,是空料箱没有放物料等其他信息 - json.put("vehicle_status", "01"); + json.put("vehicle_status", "1"); json.put("material_uuid", ""); json.put("material_code", ""); json.put("material_spec", ""); @@ -776,7 +776,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ String opt_type = param.getString("opt_type"); // 类型:恢复是0,暂停是1 String type = "1"; - if("02".equals(opt_type)) { + if("2".equals(opt_type)) { type = "0"; } JSONArray jsonArray = new JSONArray(); From d3eadbd5fab81e9d777e8e753697f5402441f420 Mon Sep 17 00:00:00 2001 From: baoge <751575283@qq.com> Date: Tue, 28 Mar 2023 09:58:16 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E5=88=A0=E9=99=A4=E6=93=8D=E4=BD=9C=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=BF=94=E5=9B=9E=E7=8A=B6=E6=80=81=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E8=8E=B7=E5=8F=96=E4=B8=8D=E5=88=B0=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/pda/rest/CacheLineHandController.java | 12 +- .../wms/pda/service/CacheLineHandService.java | 68 ++++++------ .../impl/CacheLineHandServiceImpl.java | 105 +++++++++++------- 3 files changed, 105 insertions(+), 80 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java index b6c8833e..6d008fb0 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java @@ -119,7 +119,7 @@ public class CacheLineHandController{ if(StringUtils.isEmpty(param.getString("instruct_uuid")) || StringUtils.isEmpty(param.getString("opt_type"))) { throw new BizCoreException(ResultCode.MISS_PARAMETER); } - return cacheLineHandService.instOperation(param); + return cacheLineHandService.instOperation(param); }); } @@ -138,10 +138,10 @@ public class CacheLineHandController{ @PostMapping("/cacheLineOutBoxExceptionConfirm") @Log("缓存线出入箱异常-确认") @ApiOperation("缓存线出入箱异常-确认") - public CommonResult cacheLineOutBoxExceptionConfirm(@RequestBody JSONObject param) { + public CommonResult cacheLineOutBoxExceptionConfirm(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [缓存线出箱异常-确认] 接口被请求, 请求参数-{}", param); //参数校验 - if( StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("position_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) { + if(StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("position_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) { throw new BizCoreException(ResultCode.MISS_PARAMETER); } return RestBusinessTemplate.execute(() -> cacheLineHandService.cacheLineOutBoxExceptionConfirm(param)); @@ -158,7 +158,7 @@ public class CacheLineHandController{ @PostMapping("/inOutEmptyBox") @Log("空箱初始化--出入空箱") @ApiOperation("空箱初始化--出入空箱") - public CommonResult inOutEmptyBox(@RequestBody JSONObject param) { + public CommonResult inOutEmptyBox(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [空箱初始化--出入空箱] 接口被请求, 请求参数-{}", param); return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutEmptyBox(param)); } @@ -174,7 +174,7 @@ public class CacheLineHandController{ @PostMapping("/inOutExceptionInstConfirm") @Log("缓存线出入箱异常指令确认") @ApiOperation("缓存线出入箱异常指令确认") - public CommonResult inOutExceptionInstConfirm(@RequestBody JSONObject param) { + public CommonResult inOutExceptionInstConfirm(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [缓存线出入箱异常指令确认] 接口被请求, 请求参数-{}", param); return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutExceptionInstConfirm(param)); } @@ -246,7 +246,7 @@ public class CacheLineHandController{ @PostMapping("/cacheLineExcepOpt") @Log("缓存线异常处理") @ApiOperation("缓存线异常处理") - public CommonResult cacheLineExcepOpt(@RequestBody JSONObject param) { + public CommonResult cacheLineExcepOpt(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [缓存线异常处理] 接口被请求, 请求参数-{}", param); //参数校验 if(StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("opt_type"))) { diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java index 886c018d..d4c9dd40 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java @@ -86,16 +86,6 @@ public interface CacheLineHandService{ */ JSONArray instStatusQuery(String param); - /** - * 任务操作 - * - * @Param: form 任务参数 - * @return: 操作结果 - * @author gbx - * @date 2023/3/23 - */ - String instOperation(JSONObject param); - /** * 任务分页查询 * @@ -104,7 +94,7 @@ public interface CacheLineHandService{ * @author gbx * @date 2023/3/23 */ - Map instPageQuery(Map param, Pageable page); + Map instPageQuery(Map param, Pageable page); /** * 缓存线位置关系同步 @@ -124,15 +114,6 @@ public interface CacheLineHandService{ */ JSONArray cacheLineMaterInfoQuery(JSONObject param); - /** - * 空箱初始化--出入空箱 - * - * @param param 查询参数 inOut_type:1 入空箱 2 出空箱 vehicle_code:载具编码 - * @author gbx - * @date 2023/3/24 - */ - void inOutEmptyBox(JSONObject param); - /** * 缓存线出入箱异常指令查询 * @@ -150,7 +131,36 @@ public interface CacheLineHandService{ * @author gbx * @date 2023/3/24 */ - void inOutExceptionInstConfirm(JSONObject param); + String inOutExceptionInstConfirm(JSONObject param); + + /** + * 任务操作 + * + * @Param: form 任务参数 + * @return: 操作结果 + * @author gbx + * @date 2023/3/23 + */ + String instOperation(JSONObject param); + + /** + * 缓存线出箱异常-确认 + * + * @param param 查询参数 + * @return String 处理结果 + * @author gbx + * @date 2023/3/24 + */ + String cacheLineOutBoxExceptionConfirm(JSONObject param); + + /** + * 空箱初始化--出入空箱 + * + * @param param 查询参数 inOut_type:1 入空箱 2 出空箱 vehicle_code:载具编码 + * @author gbx + * @date 2023/3/24 + */ + String inOutEmptyBox(JSONObject param); /** * 设置满框 @@ -208,15 +218,6 @@ public interface CacheLineHandService{ */ void agvOutBoxExceptionConfirm(JSONObject param); - /** - * 缓存线出箱异常-确认 - * - * @param param 查询参数 - * @author gbx - * @date 2023/3/24 - */ - void cacheLineOutBoxExceptionConfirm(JSONObject param); - /** * 设置缓存线货位为空位置 * @@ -240,10 +241,11 @@ public interface CacheLineHandService{ * 缓存线异常处理 * * @param param 查询参数 + * @return String 处理结果 * @author gbx * @date 2023/3/24 */ - void cacheLineExcepOpt(JSONObject param); + String cacheLineExcepOpt(JSONObject param); /** * 倒料操作 @@ -256,6 +258,7 @@ public interface CacheLineHandService{ /** * 缓存线下拉框 + * * @param param * @return */ @@ -263,6 +266,7 @@ public interface CacheLineHandService{ /** * 缓存线物料信息盘点 + * * @param param * @return */ @@ -270,12 +274,14 @@ public interface CacheLineHandService{ /** * 获取生产区域下拉框 + * * @return */ JSONArray getProductArea(); /** * 删除箱子 + * * @param param */ void deleteBox(JSONObject param); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java index e93b70b8..40546593 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java @@ -16,6 +16,7 @@ import org.nl.common.enums.StatusEnum; import org.nl.common.utils.*; import org.nl.config.thread.ThreadPoolExecutorUtil; import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.exception.BizCoreException; import org.nl.modules.common.utils.RedisUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; @@ -337,9 +338,13 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ WQLObject meTab = WQLObject.getWQLObject("md_me_materialbase"); // 查询工序信息 JSONObject wpObj = wpTab.query("workprocedure_code = '" + workprocedure_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(wpObj)) throw new BadRequestException("工序查询错误,请检查工序"); + if(ObjectUtil.isEmpty(wpObj)) { + throw new BadRequestException("工序查询错误,请检查工序"); + } JSONObject meObj = meTab.query("material_id = '" + semimanufactures_uuid + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(meObj)) throw new BadRequestException("物料查询错误,请检查物料"); + if(ObjectUtil.isEmpty(meObj)) { + throw new BadRequestException("物料查询错误,请检查物料"); + } vehiobj.put("vehicle_code", vehicle_code); //2.缓存线位置通过扫码绑定料箱条码 positionTab.update(vehiobj); @@ -422,10 +427,12 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ * 出入空箱,出入类型 inOut_type 1 入空箱 2 出空箱 缓存线编码 wcsdevice_code 料箱码 vehicle_code */ @Override - public void inOutEmptyBox(JSONObject param) { + public String inOutEmptyBox(JSONObject param) { String inOut_type = param.getString("inOut_type"); String cacheLine_code = param.getString("wcsdevice_code"); String vehicle_code = param.getString("vehicle_code"); + String position_code = param.getString("position_code"); + int result = 1; // 缓存线位置表 WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); //缓存线载具物料表 @@ -438,30 +445,32 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ throw new BadRequestException("箱子【" + vehicle_code + "】已在库内,无法入空箱!"); } // 3.判断是否可以放入空箱子 - JSONObject json = positionTab.query("cacheLine_code = '" + cacheLine_code + "' and is_blank= '1'").uniqueResult(0); + JSONObject json = positionTab.query("cacheLine_code = '" + cacheLine_code +"position_code = '" + position_code + "' and is_blank= '1'").uniqueResult(0); if(json == null) { - throw new BadRequestException("无法找到缓存线【" + cacheLine_code + "】的空位,无法入空箱!"); + throw new BadRequestException("无法找到缓存线【" + position_code + "】的空位,无法入空箱!"); } // 3.入空箱子 JSONObject afterIvt = new JSONObject(); afterIvt.put("vehmaterial_id", IdUtil.getStringId()); afterIvt.put("vehicle_code", vehicle_code); afterIvt.put("cacheLine_code", cacheLine_code); + afterIvt.put("position_code", position_code); afterIvt.put("vehicle_status", "1"); afterIvt.put("update_time", DateUtil.now()); afterIvt.put("create_time", DateUtil.now()); - vehMaterTab.insert(afterIvt); + result = vehMaterTab.insert(afterIvt).getSucess(); } // 出空箱 if("2".equals(inOut_type)) { // 缓存线载具物料表 - JSONObject json = vehMaterTab.query("cacheLine_code = '" + cacheLine_code + "' and vehicle_status= '1' and vehicle_code = '" + vehicle_code + "'").uniqueResult(0); + JSONObject json = vehMaterTab.query("cacheLine_code = '" + position_code + "' and vehicle_status= '1' and vehicle_code = '" + vehicle_code + "'").uniqueResult(0); if(json == null) { throw new BadRequestException("无法找到缓存线【" + cacheLine_code + "】的空箱【" + vehicle_code + "】,出空箱失败"); } // 删除掉出库的箱子及关联物料 - vehMaterTab.delete("cacheLine_code = '" + cacheLine_code + "' and vehicle_code = '" + vehicle_code + "'"); + result = vehMaterTab.delete("cacheLine_code = '" + position_code + "' and vehicle_code = '" + vehicle_code + "'").getSucess(); } + return Integer.toString(result); } /** @@ -533,26 +542,56 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ */ @Override @Transactional(rollbackFor = Exception.class) - public void inOutExceptionInstConfirm(JSONObject param) { + public String inOutExceptionInstConfirm(JSONObject param) { // 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 String inOut_type = param.getString("inOut_type"); // 缓存线编码 String wcsdevice_code = param.getString("wcsdevice_code"); - // + //缓存线点位 + String position_code = param.getString("position_code"); + //载具编码 String vehicle_code = param.getString("vehicle_code"); - // 指令标识 - // String instruct_uuid = param.getString("instruct_uuid"); - // JSONObject instObj = instructTab.query("task_id = '" + instruct_uuid + - // "'").uniqueResult(0); // 封装给wcs的数据 JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = new JSONObject(); jsonObject.put("inOut_type", inOut_type); jsonObject.put("wcsdevice_code", wcsdevice_code); jsonObject.put("vehicle_code", vehicle_code); + jsonObject.put("position_code", position_code); jsonArray.add(jsonObject); - //TOFIX 等确定api后,换成下发的url - AcsUtil.notifyAcs("api", jsonArray); + try { + //TOFIX 等确定api后,换成下发的url + return AcsUtil.notifyAcs("api", jsonArray).getString("status"); + } + catch(Exception e) { + throw new BadRequestException(e.getMessage()); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String cacheLineExcepOpt(JSONObject param) { + // 缓存线编码 + String wcsdevice_code = param.getString("wcsdevice_code"); + // 1-暂停、2-启动 + String opt_type = param.getString("opt_type"); + // 类型:恢复是0,暂停是1 + String type = "1"; + if("2".equals(opt_type)) { + type = "0"; + } + JSONArray jsonArray = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("type", type); + jsonObject.put("wcsdevice_code", wcsdevice_code); + jsonArray.add(jsonObject); + try { + //TOFIX 等确定api后,换成下发的url + return AcsUtil.notifyAcs("api", jsonArray).getString("status"); + } + catch(Exception e) { + throw new BadRequestException(e.getMessage()); + } } /** @@ -594,7 +633,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ * 料箱码 vehicle_code */ @Override - public void cacheLineOutBoxExceptionConfirm(JSONObject param) { + public String cacheLineOutBoxExceptionConfirm(JSONObject param) { String inOut_type = param.getString("inOut_type"); String wcsdevice_code = param.getString("wcsdevice_code"); String position_code = param.getString("position_code"); @@ -660,7 +699,8 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ json.put("workprocedure_name", ""); json.put("product_area", ""); } - ivtTab.insert(json); + int result = ivtTab.insert(json).getSucess(); + return Integer.toString(result); } /** @@ -768,26 +808,6 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ // inst.updateInstStatus(instObj, "2"); } - @Override - public void cacheLineExcepOpt(JSONObject param) { - // 缓存线编码 - String wcsdevice_code = param.getString("wcsdevice_code"); - // 1-暂停、2-启动 - String opt_type = param.getString("opt_type"); - // 类型:恢复是0,暂停是1 - String type = "1"; - if("2".equals(opt_type)) { - type = "0"; - } - JSONArray jsonArray = new JSONArray(); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("type", type); - jsonObject.put("wcsdevice_code", wcsdevice_code); - jsonArray.add(jsonObject); - //TOFIX 等确定api后,换成下发的url - AcsUtil.notifyAcs("api", jsonArray); - } - @Override public void pourMaterial(JSONObject param) { // 指令标识 @@ -809,10 +829,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ public JSONArray getCacheLine(JSONObject param) { // 生产区域 String product_area = param.getString("product_area"); - JSONArray resultJSONArray = WQL.getWO("PDA_QUERY") - .addParamMap(MapOf.of("flag", "7", "product_area", product_area)) - .process() - .getResultJSONArray(0); + JSONArray resultJSONArray = WQL.getWO("PDA_QUERY").addParamMap(MapOf.of("flag", "7", "product_area", product_area)).process().getResultJSONArray(0); return resultJSONArray; } @@ -837,6 +854,8 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ public void deleteBox(JSONObject param) { WQLObject cvTab = WQLObject.getWQLObject("SCH_CacheLine_VehileMaterial"); String vehicleCode = param.getString("vehicle_code"); - if (ObjectUtil.isNotEmpty(vehicleCode)) cvTab.delete("vehicle_code = '" + vehicleCode + "'"); + if(ObjectUtil.isNotEmpty(vehicleCode)) { + cvTab.delete("vehicle_code = '" + vehicleCode + "'"); + } } } From 4cef6f035aa9fcf5536a8f399ddc092adc0d9a22 Mon Sep 17 00:00:00 2001 From: baoge <751575283@qq.com> Date: Tue, 28 Mar 2023 17:43:10 +0800 Subject: [PATCH 5/5] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=A8=A1=E7=B3=8A=E6=9F=A5=E8=AF=A2=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E3=80=82=202.=E4=BF=AE=E6=94=B9=E5=87=BA=E5=85=A5?= =?UTF-8?q?=E7=AE=B1=E6=89=AB=E7=A0=81=E5=BC=82=E5=B8=B8=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/pda/rest/CacheLineHandController.java | 21 +- .../impl/CacheLineHandServiceImpl.java | 76 +++---- .../java/org/nl/wms/pda/wql/PDA_QUERY.wql | 3 + .../resources/config/application-dev1.yml | 201 ++++++++++++++++++ .../src/main/resources/config/application.yml | 2 +- 5 files changed, 263 insertions(+), 40 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/resources/config/application-dev1.yml diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java index 6d008fb0..99e380af 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java @@ -44,8 +44,17 @@ public class CacheLineHandController{ @Log("物料查询") @ApiOperation("物料查询") public CommonResult> materialQuery(@RequestBody JSONObject form) { + String params = form.getString("search_bar"); + //任务类型和任务ID校验,instruct_uuid为前端参数命名,本来应为task_id + if(StringUtils.isNotEmpty(params)) { + //限制查询参数过短,模糊力度大 + int length = params.length(); + if(length < 3) { + throw new BizCoreException("您输入的条件匹配的范围太大,请重新输入稍长一点的内容。"); + } + } log.info("海亮缓存线手持服务 [查询物料] 接口被请求, 请求参数-{}", form); - return RestBusinessTemplate.execute(() -> cacheLineHandService.materialQuery(form.getString("search_bar"))); + return RestBusinessTemplate.execute(() -> cacheLineHandService.materialQuery(params)); } @PostMapping("/queryMaterial") @@ -160,6 +169,10 @@ public class CacheLineHandController{ @ApiOperation("空箱初始化--出入空箱") public CommonResult inOutEmptyBox(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [空箱初始化--出入空箱] 接口被请求, 请求参数-{}", param); + //参数校验 + if(StringUtils.isEmpty(param.getString("inOut_type")) || StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) { + throw new BizCoreException(ResultCode.MISS_PARAMETER); + } return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutEmptyBox(param)); } @@ -167,7 +180,7 @@ public class CacheLineHandController{ @Log("缓存线出入箱异常指令查询") @ApiOperation("缓存线出入箱异常指令查询") public CommonResult inOutExceptionInstQuery(@RequestBody JSONObject param) { - log.info("海亮缓存线手持服务 [缓存线出入箱异常指令查询] 接口被请求, 请求参数-{}", param); + log.info("海亮缓存线手持服务 [缓存线出入箱异常指令查询] 接口被·请求, 请求参数-{}", param); return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutExceptionInstQuery(param)); } @@ -176,6 +189,10 @@ public class CacheLineHandController{ @ApiOperation("缓存线出入箱异常指令确认") public CommonResult inOutExceptionInstConfirm(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [缓存线出入箱异常指令确认] 接口被请求, 请求参数-{}", param); + //参数校验 + if(StringUtils.isEmpty(param.getString("instruct_uuid")) || StringUtils.isEmpty(param.getString("inOut_type")) || StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) { + throw new BizCoreException(ResultCode.MISS_PARAMETER); + } return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutExceptionInstConfirm(param)); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java index 40546593..b88a2860 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java @@ -73,6 +73,9 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ // stopWatch.start(); // stopWatch.stop(); // System.out.println("缓存本地花费时间 totalTime = " + stopWatch.getTotalTimeMillis()); + if(StringUtils.isEmpty(param)) { + return WQL.getWO("PDA_QUERY").addParam("flag", "6").addParam("condition", param).process().getResultJSONArray(0).toJavaList(MaterialDto.class); + } List materialList; ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll(); //12W种物料信息,查本地缓存 @@ -83,7 +86,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ //2.查reids materialList = redisUtils.get("materialList", MaterialDto.class); if(null != materialList) { - //设置本地缓存 + // //设置本地缓存 cache.setLocalCache("materialList", materialList); return getMaterialDto(materialList, param); } @@ -112,7 +115,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ private List getMaterialDto(List materialList, String param) { if(StringUtils.isNotEmpty(param)) { //按条件搜索 - materialList = materialList.stream().filter(m -> (m.getMaterial_name().contains(param)) || m.getMaterial_code().contains(param) || m.getMaterial_spec().contains(param) || m.getClass_name().contains(param)).collect(Collectors.toList()); + materialList = materialList.stream().filter(m -> (m.getMaterial_name().indexOf(param) > -1) || (m.getMaterial_code().indexOf(param)) > -1 || (m.getMaterial_spec().indexOf(param)) > -1).collect(Collectors.toList()); return materialList; } return materialList; @@ -445,7 +448,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ throw new BadRequestException("箱子【" + vehicle_code + "】已在库内,无法入空箱!"); } // 3.判断是否可以放入空箱子 - JSONObject json = positionTab.query("cacheLine_code = '" + cacheLine_code +"position_code = '" + position_code + "' and is_blank= '1'").uniqueResult(0); + JSONObject json = positionTab.query("cacheLine_code = '" + cacheLine_code + "position_code = '" + position_code + "' and is_blank= '1'").uniqueResult(0); if(json == null) { throw new BadRequestException("无法找到缓存线【" + position_code + "】的空位,无法入空箱!"); } @@ -481,53 +484,52 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ */ @Override public JSONArray inOutExceptionInstQuery(JSONObject param) { - // 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 - // 出入类型 inOut_type - // 缓存线编码 wcsdevice_code - // 料箱码 vehicle_code - // {"inOut_type":"1","wcsdevice_code":"HCX01","vehicle_code":"10001"} + //料箱号 String vehicle_code = param.getString("vehicle_code"); + //缓存线编号 String wcsdevice_code = param.getString("wcsdevice_code"); + //出入箱类型 String inOut_type = param.getString("inOut_type"); + //任务表信息 WQLObject instructTab = WQLObject.getWQLObject("sch_base_task"); JSONArray result = new JSONArray(); // 入箱扫码异常 if("1".equals(inOut_type)) { - String where = "point_code2 = '" + wcsdevice_code + "' and instruct_status <> '06'"; + String where = "point_code2 = '" + wcsdevice_code + "' and task_status <> '7'"; if(StringUtils.isNotBlank(vehicle_code)) { - where = "point_code2 = '" + wcsdevice_code + "' and invehicle_code = '" + vehicle_code + "' and instruct_status <> '06'"; + where = "point_code2 = '" + wcsdevice_code + "' and vehicle_code = '" + vehicle_code + "' and task_status <> '7'"; } JSONArray arr = instructTab.query(where).getResultJSONArray(0); for(int i = 0; i < arr.size(); i++) { JSONObject row = arr.getJSONObject(i); JSONObject json = new JSONObject(); json.put("instruct_uuid", row.getString("task_id")); - json.put("instructorder_no", row.getString("instructorder_no")); + json.put("instructorder_no", row.getString("task_code")); json.put("wcsdevice_code", row.getString("point_code2")); - json.put("vehicle_code", row.getString("invehicle_code")); - json.put("startpoint_code", row.getString("startpoint_code")); - json.put("nextpoint_code", row.getString("nextpoint_code")); - json.put("nextpoint_code2", row.getString("nextpoint_code2")); + json.put("vehicle_code", row.getString("vehicle_code")); + json.put("startpoint_code", row.getString("point_code1")); + json.put("nextpoint_code", row.getString("point_code2")); + json.put("nextpoint_code2", row.getString("point_code3")); result.add(json); } } // 出箱扫码异常 if("2".equals(inOut_type)) { - String where = "startwcsdevice_code = '" + wcsdevice_code + "' and instruct_status <> '06'"; + String where = "point_code1 = '" + wcsdevice_code + "' and task_status <> '7'"; if(StringUtils.isNotBlank(vehicle_code)) { - where = "startwcsdevice_code = '" + wcsdevice_code + "' and outvehicle_code = '" + vehicle_code + "' and instruct_status <> '06'"; + where = "point_code1 = '" + wcsdevice_code + "' and vehicle_code = '" + vehicle_code + "' and task_status <> '7'"; } JSONArray arr = instructTab.query(where).getResultJSONArray(0); for(int i = 0; i < arr.size(); i++) { JSONObject row = arr.getJSONObject(i); JSONObject json = new JSONObject(); json.put("instruct_uuid", row.getString("task_id")); - json.put("instructorder_no", row.getString("instructorder_no")); - json.put("vehicle_code", row.getString("outvehicle_code")); - json.put("wcsdevice_code", row.getString("startwcsdevice_code")); - json.put("startpoint_code", row.getString("startpoint_code")); - json.put("nextpoint_code", row.getString("nextpoint_code")); - json.put("nextpoint_code2", row.getString("nextpoint_code2")); + json.put("instructorder_no", row.getString("task_code")); + json.put("vehicle_code", row.getString("vehicle_code")); + json.put("wcsdevice_code", row.getString("point_code1")); + json.put("startpoint_code", row.getString("point_code1")); + json.put("nextpoint_code", row.getString("point_code2")); + json.put("nextpoint_code2", row.getString("point_code3")); result.add(json); } } @@ -551,7 +553,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ String position_code = param.getString("position_code"); //载具编码 String vehicle_code = param.getString("vehicle_code"); - // 封装给wcs的数据 + // 封装给acs的数据 JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = new JSONObject(); jsonObject.put("inOut_type", inOut_type); @@ -713,7 +715,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ WQLObject instructTab = WQLObject.getWQLObject("sch_base_task"); String where = "point_code2 = '" + wcsdevice_code + "' and vehicle_code = '" + vehicle_code + "' and task_status <> '7'"; if(StringUtils.isEmpty(vehicle_code)) { - where = "point_code2 = '" + wcsdevice_code + "' and instruct_status <> '7'"; + where = "point_code2 = '" + wcsdevice_code + "' and task_status <> '7'"; } JSONArray arr = instructTab.query(where).getResultJSONArray(0); JSONArray result = new JSONArray(); @@ -721,11 +723,11 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ JSONObject row = arr.getJSONObject(i); JSONObject json = new JSONObject(); json.put("instruct_uuid", row.getString("task_id")); - json.put("instructorder_no", row.getString("instructorder_no")); + json.put("instructorder_no", row.getString("task_code")); json.put("wcsdevice_code", row.getString("point_code2")); - json.put("startpoint_code", row.getString("startpoint_code")); - json.put("nextpoint_code", row.getString("nextpoint_code")); - json.put("nextpoint_code2", row.getString("nextpoint_code2")); + json.put("point_code1", row.getString("point_code1")); + json.put("nextpoint_code", row.getString("point_code2")); + json.put("nextpoint_code2", row.getString("point_code3")); result.add(json); } return result; @@ -767,22 +769,22 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ JSONArray arr; WQLObject instructTab = WQLObject.getWQLObject("sch_base_task"); if(StringUtils.isEmpty(vehicle_code)) { - arr = instructTab.query("startwcsdevice_code = '" + wcsdevice_code + "' and instruct_status <> '06'").getResultJSONArray(0); + arr = instructTab.query("point_code1 = '" + wcsdevice_code + "' and task_status <> '7'").getResultJSONArray(0); } else{ - arr = instructTab.query("startwcsdevice_code = '" + wcsdevice_code + "' and outvehicle_code = '" + vehicle_code + "' and instruct_status <> '06'").getResultJSONArray(0); + arr = instructTab.query("point_code1 = '" + wcsdevice_code + "' and vehicle_code = '" + vehicle_code + "' and task_status <> '7'").getResultJSONArray(0); } JSONArray result = new JSONArray(); for(int i = 0; i < arr.size(); i++) { JSONObject row = arr.getJSONObject(i); JSONObject json = new JSONObject(); json.put("instruct_uuid", row.getString("task_id")); - json.put("instructorder_no", row.getString("instructorder_no")); - json.put("wcsdevice_code", row.getString("startwcsdevice_code")); - json.put("vehicle_code", row.getString("outvehicle_code")); - json.put("startpoint_code", row.getString("startpoint_code")); - json.put("nextpoint_code", row.getString("nextpoint_code")); - json.put("nextpoint_code2", row.getString("nextpoint_code2")); + json.put("instructorder_no", row.getString("task_code")); + json.put("wcsdevice_code", row.getString("point_code1")); + json.put("vehicle_code", row.getString("vehicle_code")); + json.put("startpoint_code", row.getString("point_code1")); + json.put("nextpoint_code", row.getString("point_code2")); + json.put("nextpoint_code2", row.getString("point_code3")); result.add(json); } return result; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql index 2030afd2..8c83281b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql @@ -148,6 +148,9 @@ LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id WHERE mb.is_delete = '0' + ORDER BY + mb.material_id desc + LIMIT 1000 OPTION 输入.condition <> "" mb.material_name LIKE CONCAT ('%', 输入.condition, '%') OR mb.material_code LIKE CONCAT ('%', 输入.condition, '%') diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-dev1.yml b/mes/hd/nladmin-system/src/main/resources/config/application-dev1.yml new file mode 100644 index 00000000..b1296e0a --- /dev/null +++ b/mes/hd/nladmin-system/src/main/resources/config/application-dev1.yml @@ -0,0 +1,201 @@ +server: + port: 8011 +#配置数据源 +spring: + data: + elasticsearch: + repositories: + enabled: true + client: + reactive: + #endpoints: 172.31.185.110:9200,172.31.154.9:9200 #内网 + # endpoints: 47.96.133.178:8200 #外网 + endpoints: http://47.96.133.178:8200 #外网 + elasticsearch: + rest: + #uris: 172.31.185.110:9200,172.31.154.9:9200 #内网 + # uris: 47.96.133.178:8200 #外网 + uris: http://47.96.133.178:8200 #外网 + username: elastic + password: 123456 + datasource: + druid: + db-type: com.alibaba.druid.pool.DruidDataSource + driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + #url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + username: ${DB_USER:shenhua} + #password: ${DB_PWD:P@ssw0rd} + #password: ${DB_PWD:root} + #password: ${DB_PWD:Root.123456} + password: ${DB_PWD:123456789} + # 初始连接数 + initial-size: 5 + # 最小连接数 + min-idle: 15 + # 最大连接数 + max-active: 30 + # 是否自动回收超时连接 + remove-abandoned: true + # 超时时间(以秒数为单位) + remove-abandoned-timeout: 180 + # 获取连接超时时间 + max-wait: 3000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filters: + DruidFilter,stat + + redis: + #数据库索引 + database: ${REDIS_DB:1} + #host: ${REDIS_HOST:127.0.0.1} + host: ${REDIS_HOST:localhost} + port: ${REDIS_PORT:6379} + password: ${REDIS_PWD:} + #连接超时时间 + timeout: 5000 + redisson: + config: | + threads: 4 + nettyThreads: 4 + singleServerConfig: + connectionMinimumIdleSize: 8 + connectionPoolSize: 8 + address: redis://127.0.0.1:6379 + idleConnectionTimeout: 10000 + timeout: 3000 +# 登录相关配置 +login: + # 登录缓存 + cache-enable: true + # 是否限制单用户登录 + single-login: false + # 验证码 + login-code: + # 验证码类型配置 查看 LoginProperties 类 + code-type: arithmetic + # 登录图形验证码有效时间/分钟 + expiration: 2 + # 验证码高度 + width: 111 + # 验证码宽度 + heigth: 36 + # 内容长度 + length: 2 + # 字体名称,为空则使用默认字体 + font-name: + # 字体大小 + font-size: 25 + +#jwt +jwt: + header: Authorization + # 令牌前缀 + token-start-with: Bearer + # 必须使用最少88位的Base64对该令牌进行编码 + base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= + # 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html + token-validity-in-seconds: 14400000 + # 在线用户key + online-key: online-token- + # 验证码 + code-key: code-key- + # token 续期检查时间范围(默认30分钟,单位毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期 + detect: 1800000 + # 续期时间范围,默认1小时,单位毫秒 + renew: 3600000 + +#是否允许生成代码,生产环境设置为false +generator: + enabled: true + +#是否开启 swagger-ui +swagger: + enabled: true + +# IP 本地解析 +ip: + local-parsing: true + +# 文件存储路径 +file: + mac: + path: ~/file/ + avatar: ~/avatar/ + linux: + path: /home/eladmin/file/ + avatar: /home/eladmin/avatar/ + windows: + path: C:\eladmin\file\ + avatar: C:\eladmin\avatar\ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 + +sa-token: + # token 名称 (同时也是cookie名称) + token-name: Authorization + # token 有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: random-128 + # 是否输出操作日志 + is-log: false + jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq + # token 前缀 + token-prefix: + cookie: + # 配置 Cookie 作用域:根据二级域名实现sso登入如lms.sso.com;acs.sso.com + domain: + +#jetcache: +# defaultCacheType: LOCAL +# statIntervalMinutes: 15 +# areaInCacheName: false +# hiddenPackages: com.yb +# local: +# default: +# type: caffeine +# limit: 100 +# keyConvertor: fastjson +# expireAfterWriteInMillis: 60000 +# remote: +# default: +# type: redis.lettuce +# keyConvertor: fastjson +# valueEncoder: kryo +# valueDecoder: kryo +# poolConfig: +# minIdle: 5 +# maxIdle: 200 +# maxTotal: 1000 +# uri: +# - redis://127.0.0.1:6379 +es: + index: mes_log diff --git a/mes/hd/nladmin-system/src/main/resources/config/application.yml b/mes/hd/nladmin-system/src/main/resources/config/application.yml index be230f1c..fc462dee 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application.yml @@ -43,7 +43,7 @@ rsa: private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A== logging: file: - path: E:\logs\nlwms\ + path: C:\logs\nlwms\ demo: monitor: server-url: https://www.demo-monitor.com