From 11b9be61edd8c850ad193736713428e722137148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B1=9F=E7=8E=AE?= Date: Sat, 10 Dec 2022 17:55:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=8B=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rest/CallMaterialController.java | 39 --- .../service/CallMaterialService.java | 19 -- .../service/impl/CallMaterialServiceImpl.java | 55 ----- .../pda/callmaterial/wql/PDA_CALLMATERIAL.wql | 77 ------ .../rest/CallVehicleController.java | 40 ---- .../service/CallVehicleService.java | 19 -- .../service/impl/CallVehicleServiceImpl.java | 70 ------ .../callvehicle/wql/PDA_CALLVEHICLE_01.wql | 0 .../wms/pda/check/rest/CheckController.java | 89 ------- .../wms/pda/check/service/CheckService.java | 50 ---- .../check/service/impl/CheckServiceImpl.java | 80 ------- .../org/nl/wms/pda/check/wql/PDA_CHECK.wql | 91 ------- .../org/nl/wms/pda/rest/PdaController.java | 222 ++++++++++++++++++ .../sendempty/rest/SendEmptyController.java | 88 ------- .../sendempty/service/SendEmptyService.java | 38 --- .../service/impl/SendEmptyServiceImpl.java | 63 ----- .../wms/pda/sendempty/wql/PDA_SENDEMPTY.wql | 67 ------ .../rest/SendMaterialController.java | 39 --- .../service/SendMaterialService.java | 19 -- .../service/impl/SendMaterialServiceImpl.java | 70 ------ .../sendmaterial/wql/PDA_SENDMATERIAL_01.wql | 0 .../rest/SendVehicleController.java | 41 ---- .../service/SendVehicleService.java | 19 -- .../service/impl/SendVehicleServiceImpl.java | 78 ------ .../sendvehicle/wql/PDA_SENDVEHICLE_01.wql | 0 .../org/nl/wms/pda/service/PdaService.java | 93 ++++++++ .../wms/pda/service/impl/PdaServiceImpl.java | 201 ++++++++++++++++ .../java/org/nl/wms/pda/util/PdaUtils.java | 8 +- .../main/java/org/nl/wms/pda/wql/LNSH_PDA.wql | 141 +++++++++++ .../callMaterial/YzjCallMaterialTask.java | 7 - .../sendEmpty/YzjSendEmpVehicleTask.java | 6 +- .../src/main/java/org/nl/wms/wms.xls | Bin 327168 -> 291840 bytes 32 files changed, 665 insertions(+), 1164 deletions(-) delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/rest/CallMaterialController.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/CallMaterialService.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/impl/CallMaterialServiceImpl.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/wql/PDA_CALLMATERIAL.wql delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/rest/CallVehicleController.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/CallVehicleService.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/impl/CallVehicleServiceImpl.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/wql/PDA_CALLVEHICLE_01.wql delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/check/rest/CheckController.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/check/service/CheckService.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/check/service/impl/CheckServiceImpl.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/check/wql/PDA_CHECK.wql create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/rest/SendEmptyController.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/service/SendEmptyService.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/service/impl/SendEmptyServiceImpl.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/wql/PDA_SENDEMPTY.wql delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/rest/SendMaterialController.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/SendMaterialService.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/impl/SendMaterialServiceImpl.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/wql/PDA_SENDMATERIAL_01.wql delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/rest/SendVehicleController.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/SendVehicleService.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/PDA_SENDVEHICLE_01.wql create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/LNSH_PDA.wql diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/rest/CallMaterialController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/rest/CallMaterialController.java deleted file mode 100644 index 322deb7..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/rest/CallMaterialController.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.nl.wms.pda.callmaterial.rest; - -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; -import org.nl.wms.pda.callmaterial.service.CallMaterialService; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequiredArgsConstructor -@Api(tags = "手持叫料") -@RequestMapping("api/pda/callMaterial") -@Slf4j -public class CallMaterialController { - - private final CallMaterialService callMaterialService; - - @PostMapping("/queryPoint") - @Log("查询区域点位") - @ApiOperation("查询区域点位") - public ResponseEntity queryPoint() { - return new ResponseEntity<>(callMaterialService.queryPoint(), HttpStatus.OK); - } - - @PostMapping("/confirm") - @Log("叫料确定") - @ApiOperation("叫料确定") - public ResponseEntity confirm(@RequestBody JSONObject whereJson) { - return new ResponseEntity<>(callMaterialService.confirm(whereJson), HttpStatus.OK); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/CallMaterialService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/CallMaterialService.java deleted file mode 100644 index e85a64b..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/CallMaterialService.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.nl.wms.pda.callmaterial.service; - -import com.alibaba.fastjson.JSONObject; - -public interface CallMaterialService { - - /** - * 查询区域点位 - * @return json - */ - JSONObject queryPoint(); - - /** - * 叫料确定 - * @param whereJson / - * @return JSONObject - */ - JSONObject confirm(JSONObject whereJson); -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/impl/CallMaterialServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/impl/CallMaterialServiceImpl.java deleted file mode 100644 index 5c152c6..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/impl/CallMaterialServiceImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.nl.wms.pda.callmaterial.service.impl; - -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.wql.WQL; -import org.nl.wms.ext.acs.service.AcsToWmsService; -import org.nl.wms.pda.callmaterial.service.CallMaterialService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -@Slf4j -public class CallMaterialServiceImpl implements CallMaterialService { - private final AcsToWmsService acsToWmsService; - - @Override - public JSONObject queryPoint() { - JSONObject resultJSON = new JSONObject(); - - // 查询压机 9 10 的料盅位 - JSONArray points = WQL.getWO("PDA_CALLMATERIAL").addParam("flag", "1").process().getResultJSONArray(0); - - resultJSON.put("code", "1"); - resultJSON.put("desc", "操作成功!"); - resultJSON.put("result", points); - return resultJSON; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public JSONObject confirm(JSONObject whereJson) { - JSONObject result = new JSONObject(); - // 1、准备参数:point_code、type = 4 - JSONObject param = new JSONObject(); - param.put("type", "4"); - param.put("point_code", whereJson.getString("point_code")); - // 2、调用接口 - JSONObject json = acsToWmsService.apply(param); - if (ObjectUtil.isEmpty(json) || StrUtil.equals(json.getString("status"), "200")) { - result.put("result", ""); - result.put("code", "1"); - result.put("desc", "操作成功"); - } else { - result.put("result", ""); - result.put("code", "0"); - result.put("desc", "操作失败:" + json.getString("message")); - } - return result; - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/wql/PDA_CALLMATERIAL.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/wql/PDA_CALLMATERIAL.wql deleted file mode 100644 index 5c04541..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/wql/PDA_CALLMATERIAL.wql +++ /dev/null @@ -1,77 +0,0 @@ -[交易说明] - 交易名: 手持叫料查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_id TYPEAS s_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - QUERY - SELECT - point_id, - point_code, - point_name - FROM - sch_base_point - WHERE - is_used = '1' - AND is_delete = '0' - AND region_code = 'KLHJ' - AND point_type = '3' - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "2" - QUERY - SELECT - point_id, - point_code, - point_name - FROM - sch_base_point - WHERE - is_used = '1' - AND is_delete = '0' - AND point_type = '3' - - OPTION 输入.region_id <> "" - region_id = 输入.region_id - ENDOPTION - - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/rest/CallVehicleController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/rest/CallVehicleController.java deleted file mode 100644 index 41b8b3f..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/rest/CallVehicleController.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.nl.wms.pda.callvehicle.rest; - -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; -import org.nl.wms.pda.callvehicle.service.CallVehicleService; -import org.nl.wms.pda.sendmaterial.service.SendMaterialService; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequiredArgsConstructor -@Api(tags = "手持呼叫空托盘") -@RequestMapping("api/pda/callEmpty") -@Slf4j -public class CallVehicleController { - - private final CallVehicleService callVehicleService; - - @PostMapping("/queryPoint") - @Log("查询区域点位") - @ApiOperation("查询区域点位") - public ResponseEntity queryPoint() { - return new ResponseEntity<>(callVehicleService.queryPoint(), HttpStatus.OK); - } - - @PostMapping("/confirm") - @Log("呼叫空托盘确定") - @ApiOperation("呼叫空托盘确定") - public ResponseEntity confirm(@RequestBody JSONObject whereJson) { - return new ResponseEntity<>(callVehicleService.confirm(whereJson), HttpStatus.OK); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/CallVehicleService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/CallVehicleService.java deleted file mode 100644 index 66d4c7b..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/CallVehicleService.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.nl.wms.pda.callvehicle.service; - -import com.alibaba.fastjson.JSONObject; - -public interface CallVehicleService { - - /** - * 查询区域点位 - * @return JSONObject - */ - JSONObject queryPoint(); - - /** - * 呼叫空托盘确定 - * @param whereJson / - * @return JSONObject - */ - JSONObject confirm(JSONObject whereJson); -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/impl/CallVehicleServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/impl/CallVehicleServiceImpl.java deleted file mode 100644 index 1f193db..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/impl/CallVehicleServiceImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.nl.wms.pda.callvehicle.service.impl; - -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.wms.ext.acs.service.AcsToWmsService; -import org.nl.wms.pda.callvehicle.service.CallVehicleService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -@Slf4j -public class CallVehicleServiceImpl implements CallVehicleService { - - private final AcsToWmsService acsToWmsService; - - @Override - public JSONObject queryPoint() { - JSONObject result = new JSONObject(); - // 1.查询区域:油漆区域 YQQY01、共挤区域 GJQY01 - JSONArray regionArr = WQL.getWO("PDA_CALLVEHICLE_01").addParam("flag", "1").process().getResultJSONArray(0); - // 2.根据区域查询对应的物料上料位 - JSONObject resultJson = new JSONObject(); - for (int i = 0; i < regionArr.size(); i++) { - JSONObject jsonRegion = regionArr.getJSONObject(i); - JSONArray pointArr = WQL.getWO("PDA_CALLVEHICLE_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); - jsonRegion.put("pointArr", pointArr); - } - resultJson.put("regionja", regionArr); - result.put("result", resultJson); - result.put("code", "1"); - result.put("desc", "查询成功"); - return result; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public JSONObject confirm(JSONObject whereJson) { - JSONObject result = new JSONObject(); - // 1、准备参数:point_code、type:1为共挤区域,3为油漆区域 - JSONObject param = new JSONObject(); - - String region_id = whereJson.getString("region_id"); - JSONObject jsonObject = WQLObject.getWQLObject("sch_base_region").query("region_id ='" + region_id + "'").uniqueResult(0); - String region_code = jsonObject.getString("region_code"); - if (StrUtil.equals(region_code, "GJQY01")) param.put("type", "1"); - if (StrUtil.equals(region_code, "YQQY01")) param.put("type", "3"); - - param.put("point_code", whereJson.getString("point_code")); - param.put("vehicle_num", whereJson.getString("qty")); - // 2、调用接口 - JSONObject json = acsToWmsService.apply(param); - if (ObjectUtil.isEmpty(json) || StrUtil.equals(json.getString("status"), "200")) { - result.put("result", ""); - result.put("code", "1"); - result.put("desc", "操作成功"); - } else { - result.put("result", ""); - result.put("code", "0"); - result.put("desc", "操作失败:" + json.getString("message")); - } - return result; - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/wql/PDA_CALLVEHICLE_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/wql/PDA_CALLVEHICLE_01.wql deleted file mode 100644 index e69de29..0000000 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/rest/CheckController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/rest/CheckController.java deleted file mode 100644 index a186d82..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/rest/CheckController.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.nl.wms.pda.check.rest; - -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; -import org.nl.wms.pda.check.service.CheckService; -import org.nl.wms.pda.util.PdaUtils; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 辽宁晟华盘点管理控制层 - * - * @author 张江玮 - * @date 2022/11/30 14:47 - */ -@RestController -@RequiredArgsConstructor -@Api(tags = "盘点管理") -@RequestMapping("api/pda/check") -@Slf4j -public class CheckController { - - private final CheckService checkService; - - @PostMapping("/queryMaterial") - @Log("查询物料") - @ApiOperation("查询物料") - public ResponseEntity queryMaterial() { - log.info("手持 [盘点管理]-[查询物料] 接口被访问"); - - return PdaUtils.buildSuccessResponseEntity(checkService.queryMaterial()); - } - - @PostMapping("/queryIvt") - @Log("查询盘点单据") - @ApiOperation("查询盘点单据") - public ResponseEntity queryIvt() { - log.info("手持 [盘点管理]-[查询盘点单据] 接口被访问"); - - return PdaUtils.buildSuccessResponseEntity(checkService.queryIvt()); - } - - @PostMapping("/confirm") - @Log("盘点确定") - @ApiOperation("盘点确定") - public ResponseEntity confirm(@RequestBody JSONObject param) { - log.info("手持 [盘点管理]-[盘点确定] 接口被访问, 请求参数-{}", param); - - JSONArray structs = param.getJSONArray("JSONarray"); - if (ObjectUtil.isEmpty(structs)) { - return PdaUtils.buildFailResponseEntity("请选择仓位"); - } - - return PdaUtils.buildSuccessResponseEntity(checkService.confirm(structs)); - } - - @PostMapping("/querySectCode") - @Log("查询库区") - @ApiOperation("查询库区") - public ResponseEntity querySectCode() { - log.info("手持 [盘点管理]-[查询库区] 接口被访问"); - - return PdaUtils.buildSuccessResponseEntity(checkService.querySectCode()); - } - - @PostMapping("/queryStructCode") - @Log("查询仓位") - @ApiOperation("查询仓位") - public ResponseEntity queryStructCode(@RequestBody JSONObject param) { - log.info("手持 [盘点管理]-[查询仓位] 接口被访问, 请求参数-{}", param); - - String region_id = param.getString("sect_uuid"); - if (StrUtil.isEmpty(region_id)) { - return PdaUtils.buildFailResponseEntity("库区不能为空"); - } - - return PdaUtils.buildSuccessResponseEntity(checkService.queryStructCode(region_id)); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/service/CheckService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/service/CheckService.java deleted file mode 100644 index 50273f6..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/service/CheckService.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.nl.wms.pda.check.service; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; - -/** - * 辽宁晟华盘点管理服务层接口 - * - * @author 张江玮 - * @date 2022/11/30 14:50 - */ -public interface CheckService { - - /** - * 查询物料 - * - * @return 物料信息 - */ - JSONArray queryMaterial(); - - /** - * 查询盘点单据 - * - * @return 盘点单据信息 - */ - JSONObject queryIvt(); - - /** - * 盘点确定 - * - * @param structs 选择的仓位 - * @return 操作提示 - */ - JSONObject confirm(JSONArray structs); - - /** - * 查询库区 - * - * @return 库区信息 - */ - JSONArray querySectCode(); - - /** - * 查询仓位 - * - * @param region_id 库区id - * @return 仓位信息 - */ - JSONArray queryStructCode(String region_id); -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/service/impl/CheckServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/service/impl/CheckServiceImpl.java deleted file mode 100644 index bc6ae2b..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/service/impl/CheckServiceImpl.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.nl.wms.pda.check.service.impl; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.wql.WQL; -import org.nl.wms.pda.check.service.CheckService; -import org.springframework.stereotype.Service; - -/** - * 辽宁晟华盘点管理服务层实现类 - * - * @author 张江玮 - * @date 2022/11/30 14:50 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class CheckServiceImpl implements CheckService { - - @Override - public JSONArray queryMaterial() { - return WQL - .getWO("PDA_CHECK") - .addParam("flag", "1") - .process() - .getResultJSONArray(0); - } - - /** - * 查询盘点单据 - * - * @return 盘点单据信息 - */ - @Override - public JSONObject queryIvt() { - return null; - } - - /** - * 盘点确定 - * - * @param structs 选择的仓位 - * @return 操作提示 - */ - @Override - public JSONObject confirm(JSONArray structs) { - return null; - } - - /** - * 查询库区 - * - * @return 库区信息 - */ - @Override - public JSONArray querySectCode() { - return WQL - .getWO("PDA_CHECK") - .addParam("flag", "4") - .process() - .getResultJSONArray(0); - } - - /** - * 查询仓位 - * - * @param region_id 库区id - * @return 仓位信息 - */ - @Override - public JSONArray queryStructCode(String region_id) { - return WQL - .getWO("PDA_CHECK") - .addParam("flag", "5") - .process() - .getResultJSONArray(0); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/wql/PDA_CHECK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/wql/PDA_CHECK.wql deleted file mode 100644 index e41ebd5..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/check/wql/PDA_CHECK.wql +++ /dev/null @@ -1,91 +0,0 @@ -[交易说明] - 交易名: 手持叫料查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_id TYPEAS s_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - QUERY - SELECT - material_id AS 'material_uuid', - material_code, - material_name - FROM - md_me_materialbase - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "2" - ENDIF - - IF 输入.flag = "3" - ENDIF - - IF 输入.flag = "4" - QUERY - SELECT - region_id AS 'sect_uuid', - region_code AS 'sect_code', - region_name AS 'sect_name' - FROM - sch_base_region - WHERE - region_code IN ( 'KLHJ', 'RYZCQ', 'CYZCQ', 'BZZCQ' ) - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "5" - QUERY - SELECT - point_id AS 'struct_uuid', - point_code AS 'struct_code', - point_name AS 'struct_name' - FROM - sch_base_point - WHERE - is_used = '1' - AND is_delete = '0' - OPTION 输入.region_id <> "" - region_id = 输入.region_id - ENDOPTION - ORDER BY - point_code - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java new file mode 100644 index 0000000..e08029e --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java @@ -0,0 +1,222 @@ +package org.nl.wms.pda.rest; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pda.service.PdaService; +import org.nl.wms.pda.util.PdaUtils; +import org.nl.wms.sch.manage.RegionEnum; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 辽宁晟华手持控制层 + * + * @author 张江玮 + * @date 2022/12/02 10:02 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "辽宁晟华手持") +@RequestMapping("/api/pda") +@Slf4j +public class PdaController { + + private final PdaService pdaService; + + @PostMapping("/warehouse") + @Log("查询所有库区") + @ApiOperation("查询所有库区") + public ResponseEntity warehouse() { + log.info("辽宁晟华手持 [查询所有库区] 接口被请求"); + + try { + return PdaUtils.buildSuccessResponseEntity(pdaService.warehouse()); + } catch (Exception e) { + return PdaUtils.buildFailResponseEntity(e.getMessage()); + } + } + + @PostMapping("/point") + @Log("根据区域查询点位") + @ApiOperation("根据区域查询点位") + public ResponseEntity point(@RequestBody JSONObject param) { + log.info("辽宁晟华手持 [根据区域查询点位] 接口被请求, 请求参数-{}", param); + + String region_code = param.getString("region_code"); + if (StrUtil.isEmpty(region_code)) { + return PdaUtils.buildFailResponseEntity("区域不能为空"); + } + + try { + return PdaUtils.buildSuccessResponseEntity(pdaService.point(region_code)); + } catch (Exception e) { + return PdaUtils.buildFailResponseEntity(e.getMessage()); + } + } + + @PostMapping("/pointInfo") + @Log("查询点位详细信息") + @ApiOperation("查询点位详细信息") + public ResponseEntity pointInfo(@RequestBody JSONObject param) { + log.info("辽宁晟华手持 [查询点位详细信息] 接口被请求, 请求参数-{}", param); + + String region_code = param.getString("region_code"); + if (StrUtil.isEmpty(region_code)) { + return PdaUtils.buildFailResponseEntity("区域不能为空"); + } + String point_code = param.getString("point_code"); + if (StrUtil.isEmpty(point_code)) { + return PdaUtils.buildFailResponseEntity("点位不能为空"); + } + + try { + return PdaUtils.buildSuccessResponseEntity(pdaService.pointInfo(region_code, point_code)); + } catch (Exception e) { + return PdaUtils.buildFailResponseEntity(e.getMessage()); + } + } + + @PostMapping("/material") + @Log("查询物料") + @ApiOperation("查询物料") + public ResponseEntity material(@RequestBody JSONObject param) { + log.info("辽宁晟华手持 [查询物料] 接口被请求, 请求参数-{}", param); + + try { + return PdaUtils.buildSuccessResponseEntity(pdaService.material( + param.getString("condition") + )); + } catch (Exception e) { + return PdaUtils.buildFailResponseEntity(e.getMessage()); + } + } + + @PostMapping("/stockOperation") + @Log("库存操作") + @ApiOperation("库存操作") + public ResponseEntity stockOperation(@RequestBody JSONObject param) { + log.info("辽宁晟华手持 [库存操作] 接口被请求, 请求参数-{}", param); + + try { + String type = param.getString("type"); + if (StrUtil.isEmpty(type)) { + return PdaUtils.buildFailResponseEntity("请点击确认或清空"); + } else { + String region_code = param.getString("region_code"); + if (StrUtil.isEmpty(region_code)) { + return PdaUtils.buildFailResponseEntity("区域不能为空"); + } + String point_code = param.getString("point_code"); + if (StrUtil.isEmpty(point_code)) { + return PdaUtils.buildFailResponseEntity("点位不能为空"); + } + + switch (type) { + case "1": + // 确认 + String vehicle_code = param.getString("vehicle_code"); + if (!StrUtil.equals(region_code, RegionEnum.RYZCQ.getCode()) && StrUtil.isEmpty(vehicle_code)) { + return PdaUtils.buildFailResponseEntity("载具编码不能为空"); + } + String qty = param.getString("qty"); + if (StrUtil.isEmpty(qty)) { + return PdaUtils.buildFailResponseEntity("物料数量/重量不能为空"); + } + String is_full = param.getString("is_full"); + if (StrUtil.isEmpty(is_full)) { + return PdaUtils.buildFailResponseEntity("是否满托不能为空"); + } + + pdaService.updateStock(region_code, point_code, vehicle_code, qty, is_full); + break; + case "2": + // 清空 + pdaService.emptyStock(point_code); + break; + default: + return PdaUtils.buildFailResponseEntity("操作错误"); + } + + return PdaUtils.buildSuccessResponseEntity(null); + } + } catch (Exception e) { + return PdaUtils.buildFailResponseEntity(e.getMessage()); + } + } + + @PostMapping("/queryYZCallMaterialPoint") + @Log("查询压制叫料点位") + @ApiOperation("查询压制叫料点位") + public ResponseEntity queryYZCallMaterialPoint() { + log.info("辽宁晟华手持 [查询压制叫料点位] 接口被请求"); + + try { + return PdaUtils.buildSuccessResponseEntity(pdaService.queryYZCallMaterialPoint()); + } catch (Exception e) { + return PdaUtils.buildFailResponseEntity(e.getMessage()); + } + } + + @PostMapping("/yzCallMaterial") + @Log("压制叫料") + @ApiOperation("压制叫料") + public ResponseEntity yzCallMaterial(@RequestBody JSONObject param) { + log.info("辽宁晟华手持 [压制叫料] 接口被请求, 请求参数-{}", param); + + String point_code = param.getString("point_code"); + if (StrUtil.isEmpty(point_code)) { + return PdaUtils.buildFailResponseEntity("点位不能为空"); + } + + try { + pdaService.yzCallMaterial(point_code); + return PdaUtils.buildSuccessResponseEntity(null); + } catch (Exception e) { + return PdaUtils.buildFailResponseEntity(e.getMessage()); + } + } + + @PostMapping("/queryEmptyCupPoint") + @Log("查询空盅点位") + @ApiOperation("查询空盅点位") + public ResponseEntity queryEmptyCupPoint() { + log.info("辽宁晟华手持 [查询空盅点位] 接口被请求"); + + try { + return PdaUtils.buildSuccessResponseEntity(pdaService.queryEmptyCupPoint()); + } catch (Exception e) { + return PdaUtils.buildFailResponseEntity(e.getMessage()); + } + } + + @PostMapping("/sendEmptyCup") + @Log("送空盅") + @ApiOperation("送空盅") + public ResponseEntity sendEmptyCup(@RequestBody JSONObject param) { + log.info("辽宁晟华手持 [送空盅] 接口被请求, 请求参数-{}", param); + + String point_code = param.getString("point_code"); + if (StrUtil.isEmpty(point_code)) { + return PdaUtils.buildFailResponseEntity("点位不能为空"); + } + String vehicle_code = param.getString("vehicle_code"); + if (StrUtil.isEmpty(vehicle_code)) { + return PdaUtils.buildFailResponseEntity("料盅编码不能为空"); + } + + try { + pdaService.sendEmptyCup(point_code, vehicle_code); + return PdaUtils.buildSuccessResponseEntity(null); + } catch (Exception e) { + return PdaUtils.buildFailResponseEntity(e.getMessage()); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/rest/SendEmptyController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/rest/SendEmptyController.java deleted file mode 100644 index 0135ab5..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/rest/SendEmptyController.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.nl.wms.pda.sendempty.rest; - -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; -import org.nl.wms.pda.sendempty.service.SendEmptyService; -import org.nl.wms.pda.util.PdaUtils; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 辽宁晟华托盘点位绑定控制层 - * - * @author 张江玮 - * @date 2022/11/30 16:29 - */ -@RestController -@RequiredArgsConstructor -@Api(tags = "托盘点位绑定") -@RequestMapping("api/pda") -@Slf4j -public class SendEmptyController { - - private final SendEmptyService sendEmptyService; - - @PostMapping("/sendEmpty/queryArea") - @Log("查询区域") - @ApiOperation("查询区域") - public ResponseEntity queryArea() { - log.info("手持 [托盘点位绑定]-[查询区域] 接口被访问"); - - return PdaUtils.buildSuccessResponseEntity(sendEmptyService.queryArea()); - } - - @PostMapping("/sendEmpty/queryPointByArea") - @Log("根据区域查询点位") - @ApiOperation("根据区域查询点位") - public ResponseEntity queryPointByArea(@RequestBody JSONObject param) { - log.info("手持 [托盘点位绑定]-[根据区域查询点位] 接口被访问, 请求参数-{}", param); - - String region_code = param.getString("area_code"); - if (StrUtil.isEmpty(region_code)) { - return PdaUtils.buildFailResponseEntity("区域不能为空"); - } - - return PdaUtils.buildSuccessResponseEntity(sendEmptyService.queryPointByArea(region_code)); - } - - @PostMapping("/binding/confirm") - @Log("托盘点位绑定确认") - @ApiOperation("托盘点位绑定确认") - public ResponseEntity confirm(@RequestBody JSONObject param) { - log.info("手持 [托盘点位绑定]-[托盘点位绑定确认] 接口被访问, 请求参数-{}", param); - - String point_code = param.getString("point_code"); - if (StrUtil.isEmpty(point_code)) { - return PdaUtils.buildFailResponseEntity("点位不能为空"); - } - String vehicle_code = param.getString("vehicle_code"); - if (StrUtil.isEmpty(vehicle_code)) { - return PdaUtils.buildFailResponseEntity("托盘条码不能为空"); - } - String point_status = param.getString("point_status"); - if (StrUtil.isEmpty(point_status)) { - return PdaUtils.buildFailResponseEntity("点位状态不能为空"); - } - String lock_type = param.getString("is_lock"); - if (StrUtil.isEmpty(lock_type)) { - return PdaUtils.buildFailResponseEntity("是否锁定不能为空"); - } - - sendEmptyService.confirm( - point_code, - vehicle_code, - String.valueOf(Integer.parseInt(point_status.substring(1)) + 1), - lock_type - ); - - return PdaUtils.buildSuccessResponseEntity(null); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/service/SendEmptyService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/service/SendEmptyService.java deleted file mode 100644 index e3719a2..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/service/SendEmptyService.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.nl.wms.pda.sendempty.service; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; - -/** - * 辽宁晟华托盘点位绑定服务层接口 - * - * @author 张江玮 - * @date 2022/11/30 16:51 - */ -public interface SendEmptyService { - - /** - * 查询区域 - * - * @return 所有区域 - */ - JSONArray queryArea(); - - /** - * 根据区域查询点位 - * - * @param region_code 区域编码 - * @return 该区域下的所有点位信息 - */ - JSONArray queryPointByArea(String region_code); - - /** - * 托盘点位绑定确认 - * - * @param point_code 点位编码 - * @param vehicle_code 托盘编码 - * @param point_status 点位状态 - * @param lock_type 是否锁定 - */ - void confirm(String point_code, String vehicle_code, String point_status, String lock_type); -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/service/impl/SendEmptyServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/service/impl/SendEmptyServiceImpl.java deleted file mode 100644 index d641793..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/service/impl/SendEmptyServiceImpl.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.nl.wms.pda.sendempty.service.impl; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.wql.WQL; -import org.nl.wms.pda.sendempty.service.SendEmptyService; -import org.springframework.stereotype.Service; - -/** - * 辽宁晟华托盘点位绑定服务层实现类 - * - * @author 张江玮 - * @date 2022/11/30 16:51 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class SendEmptyServiceImpl implements SendEmptyService { - - /** - * 查询区域 - * - * @return 所有区域 - */ - @Override - public JSONArray queryArea() { - return WQL - .getWO("PDA_SENDEMPTY") - .addParam("flag", "1") - .process() - .getResultJSONArray(0); - } - - /** - * 根据区域查询点位 - * - * @param region_code 区域编码 - * @return 该区域下的所有点位信息 - */ - @Override - public JSONArray queryPointByArea(String region_code) { - return WQL - .getWO("PDA_SENDEMPTY") - .addParam("flag", "2") - .process() - .getResultJSONArray(0); - } - - /** - * 托盘点位绑定确认 - * - * @param point_code 点位编码 - * @param vehicle_code 托盘编码 - * @param point_status 点位状态 - * @param lock_type 是否锁定 - */ - @Override - public void confirm(String point_code, String vehicle_code, String point_status, String lock_type) { - - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/wql/PDA_SENDEMPTY.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/wql/PDA_SENDEMPTY.wql deleted file mode 100644 index 2545d81..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendempty/wql/PDA_SENDEMPTY.wql +++ /dev/null @@ -1,67 +0,0 @@ -[交易说明] - 交易名: 手持叫料查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - QUERY - SELECT - region_code AS 'area_code', - region_name AS 'area_name' - FROM - sch_base_region - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "2" - QUERY - SELECT - point_id, - point_code, - point_name - FROM - sch_base_point - WHERE - is_used = '1' - AND is_delete = '0' - OPTION 输入.region_code <> "" - region_code = 输入.region_code - ENDOPTION - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/rest/SendMaterialController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/rest/SendMaterialController.java deleted file mode 100644 index 4e283d4..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/rest/SendMaterialController.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.nl.wms.pda.sendmaterial.rest; - -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; -import org.nl.wms.pda.sendmaterial.service.SendMaterialService; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequiredArgsConstructor -@Api(tags = "手持送料") -@RequestMapping("api/pda/sendMaterial") -@Slf4j -public class SendMaterialController { - - private final SendMaterialService sendMaterialService; - - @PostMapping("/queryPoint") - @Log("查询区域点位") - @ApiOperation("查询区域点位") - public ResponseEntity queryPoint() { - return new ResponseEntity<>(sendMaterialService.queryPoint(), HttpStatus.OK); - } - - @PostMapping("/confirm") - @Log("送料确定") - @ApiOperation("送料确定") - public ResponseEntity confirm(@RequestBody JSONObject whereJson) { - return new ResponseEntity<>(sendMaterialService.confirm(whereJson), HttpStatus.OK); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/SendMaterialService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/SendMaterialService.java deleted file mode 100644 index 8e00ec0..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/SendMaterialService.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.nl.wms.pda.sendmaterial.service; - -import com.alibaba.fastjson.JSONObject; - -public interface SendMaterialService { - - /** - * 查询区域点位 - * @return JSONObject - */ - JSONObject queryPoint(); - - /** - * 送料确定 - * @param whereJson / - * @return JSONObject - */ - JSONObject confirm(JSONObject whereJson); -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/impl/SendMaterialServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/impl/SendMaterialServiceImpl.java deleted file mode 100644 index 3253249..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/impl/SendMaterialServiceImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.nl.wms.pda.sendmaterial.service.impl; - -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.wms.ext.acs.service.AcsToWmsService; -import org.nl.wms.pda.sendmaterial.service.SendMaterialService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -@Slf4j -public class SendMaterialServiceImpl implements SendMaterialService { - - private final AcsToWmsService acsToWmsService; - - @Override - public JSONObject queryPoint() { - JSONObject result = new JSONObject(); - // 1.查询区域:豪凯区域 HKQY01、共挤区域 GJQY01 - JSONArray regionArr = WQL.getWO("PDA_SENDMATERIAL_01").addParam("flag", "1").process().getResultJSONArray(0); - // 2.根据区域查询对应的物料上料位 - JSONObject resultJson = new JSONObject(); - for (int i = 0; i < regionArr.size(); i++) { - JSONObject jsonRegion = regionArr.getJSONObject(i); - JSONArray pointArr = WQL.getWO("PDA_SENDMATERIAL_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); - jsonRegion.put("pointArr", pointArr); - } - resultJson.put("regionja", regionArr); - result.put("result", resultJson); - result.put("code", "1"); - result.put("desc", "查询成功"); - return result; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public JSONObject confirm(JSONObject whereJson) { - JSONObject result = new JSONObject(); - // 1、准备参数:point_code、type:2为共挤区域,8为豪凯区域 - JSONObject param = new JSONObject(); - - String region_id = whereJson.getString("region_id"); - JSONObject jsonObject = WQLObject.getWQLObject("sch_base_region").query("region_id ='" + region_id + "'").uniqueResult(0); - String region_code = jsonObject.getString("region_code"); - if (StrUtil.equals(region_code, "GJQY01")) param.put("type", "2"); - if (StrUtil.equals(region_code, "HKQY01")) param.put("type", "8"); - - param.put("point_code", whereJson.getString("point_code")); - param.put("material_num", whereJson.getString("qty")); - // 2、调用接口 - JSONObject json = acsToWmsService.apply(param); - if (ObjectUtil.isEmpty(json) || StrUtil.equals(json.getString("status"), "200")) { - result.put("result", ""); - result.put("code", "1"); - result.put("desc", "操作成功"); - } else { - result.put("result", ""); - result.put("code", "0"); - result.put("desc", "操作失败:" + json.getString("message")); - } - return result; - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/wql/PDA_SENDMATERIAL_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/wql/PDA_SENDMATERIAL_01.wql deleted file mode 100644 index e69de29..0000000 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/rest/SendVehicleController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/rest/SendVehicleController.java deleted file mode 100644 index 150fb22..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/rest/SendVehicleController.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.nl.wms.pda.sendvehicle.rest; - -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; -import org.nl.wms.pda.callvehicle.service.CallVehicleService; -import org.nl.wms.pda.sendmaterial.service.SendMaterialService; -import org.nl.wms.pda.sendvehicle.service.SendVehicleService; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequiredArgsConstructor -@Api(tags = "手持送空托盘") -@RequestMapping("api/pda/sendEmpty") -@Slf4j -public class SendVehicleController { - - private final SendVehicleService sendVehicleService; - - @PostMapping("/queryPoint") - @Log("查询区域点位") - @ApiOperation("查询区域点位") - public ResponseEntity queryPoint() { - return new ResponseEntity<>(sendVehicleService.queryPoint(), HttpStatus.OK); - } - - @PostMapping("/confirm") - @Log("送空托盘确定") - @ApiOperation("送空托盘确定") - public ResponseEntity confirm(@RequestBody JSONObject whereJson) { - return new ResponseEntity<>(sendVehicleService.confirm(whereJson), HttpStatus.OK); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/SendVehicleService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/SendVehicleService.java deleted file mode 100644 index f4d5ad0..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/SendVehicleService.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.nl.wms.pda.sendvehicle.service; - -import com.alibaba.fastjson.JSONObject; - -public interface SendVehicleService { - - /** - * 查询区域点位 - * @return JSONObject - */ - JSONObject queryPoint(); - - /** - * 送空托盘确定 - * @param whereJson / - * @return JSONObject - */ - JSONObject confirm(JSONObject whereJson); -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java deleted file mode 100644 index 737fe0f..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.nl.wms.pda.sendvehicle.service.impl; - -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.wms.ext.acs.service.AcsToWmsService; -import org.nl.wms.pda.sendvehicle.service.SendVehicleService; -import org.nl.wms.sch.manage.RegionTypeEnum; - - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -@Slf4j -public class SendVehicleServiceImpl implements SendVehicleService { - - private final AcsToWmsService acsToWmsService; - - @Override - public JSONObject queryPoint() { - JSONObject result = new JSONObject(); - // 1.查询区域:输送区域 SSX01、油漆区域 YQQY01 - JSONArray regionArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "1").process().getResultJSONArray(0); - // 2.根据区域查询对应的物料上料位 - JSONObject resultJson = new JSONObject(); - for (int i = 0; i < regionArr.size(); i++) { - JSONObject jsonRegion = regionArr.getJSONObject(i); - if (StrUtil.equals(jsonRegion.getString("region_id"), RegionTypeEnum.SSX.getId())) { - JSONArray pointArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); - jsonRegion.put("pointArr", pointArr); - } else { - JSONArray pointArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "3").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); - jsonRegion.put("pointArr", pointArr); - } - } - resultJson.put("regionja", regionArr); - result.put("result", resultJson); - result.put("code", "1"); - result.put("desc", "查询成功"); - return result; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public JSONObject confirm(JSONObject whereJson) { - JSONObject result = new JSONObject(); - // 1、准备参数:point_code、type:6为输送线区域,5为油漆区域 - JSONObject param = new JSONObject(); - - String region_id = whereJson.getString("region_id"); - JSONObject jsonObject = WQLObject.getWQLObject("sch_base_region").query("region_id ='" + region_id + "'").uniqueResult(0); - String region_code = jsonObject.getString("region_code"); - if (StrUtil.equals(region_code, "SSX01")) param.put("type","6"); - if (StrUtil.equals(region_code, "YQQY01")) param.put("type","5"); - - param.put("point_code",whereJson.getString("point_code")); - param.put("vehicle_code",whereJson.getString("vehicle_code")); - param.put("vehicle_num",whereJson.getString("qty")); - // 2、调用接口 - JSONObject json = acsToWmsService.apply(param); - if (StrUtil.equals(json.getString("status"), "200")) { - result.put("result", ""); - result.put("code", "1"); - result.put("desc", "操作成功"); - } else { - result.put("result", ""); - result.put("code", "0"); - result.put("desc", "操作失败:"+json.getString("message")); - } - return result; - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/PDA_SENDVEHICLE_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/PDA_SENDVEHICLE_01.wql deleted file mode 100644 index e69de29..0000000 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java new file mode 100644 index 0000000..b17209f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java @@ -0,0 +1,93 @@ +package org.nl.wms.pda.service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * 辽宁晟华手持服务层接口 + * + * @author 张江玮 + * @date 2022/12/02 10:04 + */ +public interface PdaService { + + /** + * 查询所有区域 + * + * @return 所有区域的编码和名称 + */ + JSONArray warehouse(); + + /** + * 根据区域查询点位 + * + * @param region_code 区域编码 + * @return 该区域下的点位编码、名称和状态 + */ + JSONArray point(String region_code); + + /** + * 查询点位详细信息 + * + * @param region_code 区域编码 + * @param point_code 点位编码 + * @return 点位上的组盘信息 + */ + JSONObject pointInfo(String region_code, String point_code); + + /** + * 查询所有物料 + * + * @param condition 查询条件, 用于模糊查询 + * @return 物料的编码和名称 + */ + JSONArray material(String condition); + + /** + * 库存操作-点击确认 + * + * @param region_code 区域编码 + * @param point_code 点位编码 + * @param vehicle_code 载具编码, 如果是入窑暂存区该参数将被无视 + * @param qty 物料数量/重量 + * @param is_full 是否满托 + */ + void updateStock(String region_code, String point_code, String vehicle_code, String qty, String is_full); + + /** + * 库存操作-点击清空 + * + * @param point_code 点位编码 + */ + void emptyStock(String point_code); + + /** + * 查询压制叫料点位 + * + * @return 压制叫料点位编码和名称 + */ + JSONArray queryYZCallMaterialPoint(); + + /** + * 压制叫料 + * + * @param point_code 点位编码 + */ + void yzCallMaterial(String point_code); + + /** + * 查询空盅点位 + * + * @return 空盅点位编码和名称 + */ + JSONArray queryEmptyCupPoint(); + + /** + * 送空盅 + * + * @param point_code 点位编码 + * @param vehicle_code 料盅编码 + */ + void sendEmptyCup(String point_code, String vehicle_code); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java new file mode 100644 index 0000000..803368a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java @@ -0,0 +1,201 @@ +package org.nl.wms.pda.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.pda.service.PdaService; +import org.nl.wms.sch.manage.RegionEnum; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.callMaterial.YzjCallMaterialTask; +import org.nl.wms.sch.tasks.sendEmpty.YzjSendEmpVehicleTask; +import org.springframework.stereotype.Service; + +/** + * @author 张江玮 + * @date 2022/12/02 10:04 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class PdaServiceImpl implements PdaService { + + private final YzjCallMaterialTask yzjCallMaterialTask; + + private final YzjSendEmpVehicleTask yzjSendEmpVehicleTask; + + /** + * 查询所有区域 + * + * @return 所有区域的编码和名称 + */ + @Override + public JSONArray warehouse() { + return WQL.getWO("LNSH_PDA").addParam("flag", "1").process().getResultJSONArray(0); + } + + /** + * 根据区域查询点位 + * + * @param region_code 区域编码 + * @return 该区域下的点位编码、名称和状态 + */ + @Override + public JSONArray point(String region_code) { + return WQL + .getWO("LNSH_PDA") + .addParam("flag", "2") + .addParam("region_code", region_code) + .process() + .getResultJSONArray(0); + } + + /** + * 查询点位详细信息 + * + * @param region_code 区域编码 + * @param point_code 点位编码 + * @return 点位上的组盘信息 + */ + @Override + public JSONObject pointInfo(String region_code, String point_code) { + JSONObject info = WQL + .getWO("LNSH_PDA") + .addParam("flag", "3") + .addParam("point_code", point_code) + .process() + .uniqueResult(0); + + // 如果区域位于入窑暂存区 则不展示载具编码 + if (StrUtil.equals(region_code, RegionEnum.RYZCQ.getCode())) { + info.put("has_vehicle_code", "0"); + } + + return info; + } + + /** + * 查询所有物料 + * + * @param condition 查询条件, 用于模糊查询 + * @return 物料的编码和名称 + */ + @Override + public JSONArray material(String condition) { + return WQL + .getWO("LNSH_PDA") + .addParam("flag", "4") + .addParam("condition", condition) + .process() + .getResultJSONArray(0); + } + + /** + * 库存操作-点击确认 + * + * @param region_code 区域编码 + * @param point_code 点位编码 + * @param vehicle_code 载具编码, 如果是入窑暂存区该参数将被无视 + * @param qty 物料数量/重量 + * @param is_full 是否满托 + */ + @Override + public void updateStock(String region_code, String point_code, String vehicle_code, String qty, String is_full) { + + } + + /** + * 库存操作-点击清空 + * + * @param point_code 点位编码 + */ + @Override + public void emptyStock(String point_code) { + + } + + /** + * 查询压制叫料点位 + * + * @return 压制叫料点位编码和名称 + */ + @Override + public JSONArray queryYZCallMaterialPoint() { + return WQL.getWO("LNSH_PDA").addParam("flag", "5").process().getResultJSONArray(0); + } + + /** + * 压制叫料 + * + * @param point_code 点位编码 + */ + @Override + public void yzCallMaterial(String point_code) { + isAvailable(point_code); + + yzjCallMaterialTask.createTask(new JSONObject() {{ + put("point_code2", point_code); + }}); + } + + /** + * 查询空盅点位 + * + * @return 空盅点位编码和名称 + */ + @Override + public JSONArray queryEmptyCupPoint() { + return WQL.getWO("LNSH_PDA").addParam("flag", "6").process().getResultJSONArray(0); + } + + /** + * 送空盅 + * + * @param point_code 点位编码 + */ + @Override + public void sendEmptyCup(String point_code, String vehicle_code) { + JSONObject point = isAvailable(point_code); + + yzjSendEmpVehicleTask.createTask(new JSONObject() {{ + put("point_code1", point_code); + put("vehicle_code", vehicle_code); + put("vehicle_type", StrUtil.equals(point.getString("point_type"), "2") ? "2" : "1"); + }}); + } + + /** + * 查询点位是否可用 + * 如果点位未被删除 且 未被禁用 且 不存在未完成的任务 即为可用 + * 不可用将报错 + * + * @param point_code 点位编码 + * @return 点位 + */ + private JSONObject isAvailable(String point_code) { + JSONObject point = WQLObject + .getWQLObject("sch_base_point") + .query("is_delete = '0' AND is_used = '1' AND point_code = '" + point_code + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("该点位已被删除或已禁用"); + } + + JSONObject task = WQLObject + .getWQLObject("sch_base_task") + .query("is_delete = '0' " + + "AND ( point_code1 = '" + point_code + "' OR point_code2 = '" + point_code + "' ) " + + "AND task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(task)) { + throw new BadRequestException("该点位存在未完成的任务"); + } + + return point; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java index 5d5838d..6789736 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java @@ -17,7 +17,7 @@ public final class PdaUtils { * 控制层调用方法 * 创建操作成功返回的 ResponseEntity 并携带需要返回的数据 * - * @param result 需要返回的数据 + * @param result 需要返回的数据, 可为 NULL * @return 携带了返回数据的 ResponseEntity */ public static ResponseEntity buildSuccessResponseEntity(JSON result) { @@ -28,7 +28,7 @@ public final class PdaUtils { * 控制层调用方法 * 创建操作失败返回的 ResponseEntity * - * @param desc 错误提示 + * @param desc 错误提示, 可为 NULL * @return 自定义错误提示的 ResponseEntity */ public static ResponseEntity buildFailResponseEntity(String desc) { @@ -39,7 +39,7 @@ public final class PdaUtils { * 服务层调用方法 * 创建操作成功的 JSONObject 并携带需要返回的数据 * - * @param result 返回数据 + * @param result 返回数据, 可为 NULL * @return 携带了返回数据的 JSONObject */ public static JSONObject buildSuccessJSON(JSON result) { @@ -54,7 +54,7 @@ public final class PdaUtils { * 服务层调用方法 * 创建操作失败的 JSONObject * - * @param desc 错误提示 + * @param desc 错误提示, 可为 NULL * @return 自定义错误提示的 JSONObject */ public static JSONObject buildFailJSON(String desc) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/LNSH_PDA.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/LNSH_PDA.wql new file mode 100644 index 0000000..79f22cf --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/LNSH_PDA.wql @@ -0,0 +1,141 @@ +[交易说明] + 交易名: 基础点位分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.region_code TYPEAS s_string + 输入.point_code TYPEAS s_string + 输入.condition TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + region_code, + region_name + FROM + sch_base_region + WHERE + region_code IN ( 'KLHJ', 'RYZCQ', 'CYZCQ', 'BZZCQ' ) + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point.point_code, + point.point_name, + IF ( task1.task_code IS NULL AND task2.task_code IS NULL, point.point_status, '4' ) AS 'point_status' + FROM + sch_base_point point + LEFT JOIN sch_base_task task1 ON point.point_code = task1.point_code1 AND task1.task_status < '7' + LEFT JOIN sch_base_task task2 ON point.point_code = task2.point_code2 AND task1.task_status < '7' + WHERE + point.is_delete = '0' + AND point.is_used = '1' + AND point.region_code = 输入.region_code + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + point.vehicle_code, + `group`.material_code, + `group`.material_name, + `group`.qty, + `group`.is_full + FROM + sch_base_point point + INNER JOIN st_buss_vehiclegroup `group` ON point.group_id = `group`.group_id + WHERE + point.is_delete = '0' + AND point.is_used = '1' + AND point.point_code = 输入.point_code + ENDSELECT + ENDQEURY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + material_code, + material_name + FROM + md_me_materialbase + WHERE + is_delete = '0' + OPTION 输入.condition <> "" + material_code LIKE CONCAT ( '%', 输入.condition, '%' ) + OR material_name LIKE CONCAT ( '%', 输入.condition, '%' ) + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + point_code, + point_name + FROM + sch_base_point + WHERE + is_used = '1' + AND is_delete = '0' + AND region_code = 'KLHJ' + AND point_type = '3' + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "6" + QUERY + SELECT + point_code, + point_name + FROM + `sch_base_point` + WHERE + is_used = '1' + AND is_delete = '0' + AND region_code = 'KLHJ' + AND point_type IN ( '2', '4' ) + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java index 96eb7f7..b2a1348 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java @@ -151,9 +151,6 @@ public class YzjCallMaterialTask extends AbstractAcsTask { @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { String point_code2 = form.getString("point_code2"); - String vehicle_type = form.getString("vehicle_type"); - String vehicle_code = form.getString("vehicle_code"); - String qty = form.getString("qty"); //生产工单表【PDM_BD_WorkOrder】 WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); @@ -178,17 +175,13 @@ public class YzjCallMaterialTask extends AbstractAcsTask { .task_code(CodeUtil.getNewCode("TASK_CODE")) .task_type("task_type") .task_name("压制机叫料") - .material_qty(qty) .acs_task_type("2") .vehicle_type(workOrderObj.getString("is_new")) .workorder_id(workOrderObj.getLong("workorder_id")) .task_status(TaskStatusEnum.SURE_END.getCode()) .point_code2(point_code2) - .vehicle_code(vehicle_code) - .vehicle_type(workOrderObj.getString("vehicle_type")) .workorder_id(workOrderObj.getLong("workorder_id")) .material_id(workOrderObj.getLong("material_id")) - .vehicle_type(vehicle_type) .handle_class(THIS_CLASS) .create_time(DateUtil.now()) .request_param(form.toJSONString()) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java index 7ae1196..71ede51 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java @@ -140,7 +140,8 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 String point_code1 = form.getString("point_code1"); - SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId()) + SchTaskDto dto = SchTaskDto.builder() + .task_id(org.nl.wms.util.IdUtil.getLongId()) .task_code(CodeUtil.getNewCode("TASK_CODE")) .task_type("") .task_name("压制机空盅入库") @@ -148,12 +149,13 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { .point_code1(point_code1) .vehicle_code(form.getString("vehicle_code")) // 送空盅需要 .vehicle_type(form.getString("vehicle_type")) - .vehicle_qty(form.getIntValue("qty")) + .vehicle_qty(1) .handle_class(THIS_CLASS) .create_time(DateUtil.now()) .build(); JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); taskTab.insert(json); + this.immediateNotifyAcs(); return String.valueOf(dto.getTask_id()); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls index d7c8d989def3bea1fb4e1df45485b2e4a9ce240f..8f6d60ad12aa7831c9cc9cf32c22f199898b333d 100644 GIT binary patch delta 26428 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 delta 55740 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