From 971b20e955e96a8b02a2623b25fc5f848d8b148b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B1=9F=E7=8E=AE?= Date: Sat, 22 Oct 2022 15:23:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- acs/hd/logPath_IS_UNDEFINED/2022-10-21.0.log | 0 .../java/org/nl/hand/rest/PadController.java | 65 ++++++ .../java/org/nl/hand/service/PadService.java | 45 ++++ .../java/org/nl/hand/service/dto/PadDto.java | 80 +++++++ .../nl/hand/service/impl/PadServiceImpl.java | 218 ++++++++++++++++++ .../main/java/org/nl/hand/wql/QHAND_QUERY.wql | 176 ++++++++++++++ .../main/java/org/nl/hand/wql/sys_table.xls | Bin 0 -> 179200 bytes .../resources/config/application-prod.yml | 2 +- .../org/nl/wms/pad/rest/PadController.java | 68 ++++++ .../org/nl/wms/pad/service/PadService.java | 19 ++ .../wms/pad/service/impl/PadServiceImpl.java | 143 +++++++++++- .../src/main/java/org/nl/wms/pad/wql/PAD.wql | 43 ++++ .../sch/service/impl/PointServiceImpl.java | 19 +- .../java/org/nl/wms/sch/tasks/CallTask.java | 68 ++++-- .../java/org/nl/wms/sch/tasks/SendTask.java | 67 ++++-- .../java/org/nl/wms/sch/wql/SEND_TASK.wql | 39 ++-- .../nl/wms/st/inbill/wql/ST_REGION_IN_01.wql | 2 - lms/qd/src/views/wms/sch/point/index.vue | 25 +- lms/qd/src/views/wms/sch/task/index.vue | 8 +- 19 files changed, 1003 insertions(+), 84 deletions(-) create mode 100644 acs/hd/logPath_IS_UNDEFINED/2022-10-21.0.log create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/hand/rest/PadController.java create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/hand/service/PadService.java create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/hand/service/dto/PadDto.java create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/hand/service/impl/PadServiceImpl.java create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/hand/wql/QHAND_QUERY.wql create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/hand/wql/sys_table.xls diff --git a/acs/hd/logPath_IS_UNDEFINED/2022-10-21.0.log b/acs/hd/logPath_IS_UNDEFINED/2022-10-21.0.log new file mode 100644 index 0000000..e69de29 diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/hand/rest/PadController.java b/acs/hd/nladmin-system/src/main/java/org/nl/hand/rest/PadController.java new file mode 100644 index 0000000..9d72386 --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/hand/rest/PadController.java @@ -0,0 +1,65 @@ + +package org.nl.hand.rest; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.hand.service.PadService; +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; + +import java.util.Map; + +/** + * @author qxuan + * @date 2021-07-21 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "平板接口") +@RequestMapping("/api/axg/hand") +@Slf4j +public class PadController { + private final PadService HandService; + + @PostMapping("/tasks") + @Log("查询任务") + @ApiOperation("查询任务") + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity queryTask(@RequestBody Map whereJson) { + + return new ResponseEntity<>(HandService.queryTask(whereJson), HttpStatus.OK); + } + + @PostMapping("/insts") + @Log("查询指令") + @ApiOperation("查询指令") + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity queryInst(@RequestBody Map whereJson) { + + return new ResponseEntity<>(HandService.queryInst(whereJson), HttpStatus.OK); + } + + @PostMapping("/inst") + @Log("指令操作") + @ApiOperation("指令操作") + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity Instoperation(@RequestBody Map whereJson) { + return new ResponseEntity<>(HandService.Instoperation(whereJson), HttpStatus.OK); + } + + @PostMapping("/taskoperation") + @Log("任务操作") + @ApiOperation("任务操作") + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity Taskoperation(@RequestBody Map whereJson) { + return new ResponseEntity<>(HandService.Taskoperation(whereJson), HttpStatus.OK); + } +} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/hand/service/PadService.java b/acs/hd/nladmin-system/src/main/java/org/nl/hand/service/PadService.java new file mode 100644 index 0000000..c17358f --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/hand/service/PadService.java @@ -0,0 +1,45 @@ + +package org.nl.hand.service; + + +import java.util.Map; + +/** + * @author qxuan + * @description 服务接口 + * @date 2021-07-21 + **/ +public interface PadService { + + /** + * 查询指令 + * + * @param jsonObject 条件 + * @return Map + */ + Map queryInst(Map jsonObject); + + /** + * 查询任务 + * + * @param jsonObject 条件 + * @return Map + */ + Map queryTask(Map jsonObject); + + /** + * 指令操作 + * + * @param jsonObject 条件 + * @return Map + */ + Map Instoperation(Map jsonObject); + + /** + * 任务操作 + * + * @param jsonObject 条件 + * @return Map + */ + Map Taskoperation(Map jsonObject); +} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/hand/service/dto/PadDto.java b/acs/hd/nladmin-system/src/main/java/org/nl/hand/service/dto/PadDto.java new file mode 100644 index 0000000..f4a68dc --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/hand/service/dto/PadDto.java @@ -0,0 +1,80 @@ +package org.nl.hand.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author qxuan + * @description / + * @date 2021-07-21 + **/ +@Data +public class PadDto implements Serializable { + + /** + * 库区标识 + */ + private String sect_uuid; + + /** + * 库区编码 + */ + private String sect_code; + + /** + * 库区名称 + */ + private String sect_name; + + /** + * 库区简称 + */ + private String simple_name; + + /** + * 库区类型 + */ + private String sect_type; + + /** + * 顺序号 + */ + private BigDecimal order_seq; + + /** + * 仓库标识 + */ + private String store_uuid; + + /** + * 是否启用 + */ + private String is_active; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 创建者 + */ + private String create_by; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改者 + */ + private String update_by; + + /** + * 修改时间 + */ + private String update_time; +} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/hand/service/impl/PadServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/hand/service/impl/PadServiceImpl.java new file mode 100644 index 0000000..58a1d0f --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/hand/service/impl/PadServiceImpl.java @@ -0,0 +1,218 @@ + +package org.nl.hand.service.impl; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.server.AgvService; +import org.nl.acs.agv.server.NDCAgvService; +import org.nl.acs.config.AcsConfig; +import org.nl.acs.config.server.AcsConfigService; +import org.nl.acs.config.server.impl.AcsConfigServiceImpl; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.instruction.service.dto.Instruction; +import org.nl.acs.instruction.service.impl.InstructionServiceImpl; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.impl.TaskServiceImpl; +import org.nl.exception.BadRequestException; +import org.nl.hand.service.PadService; +import org.nl.modules.system.util.CodeUtil; +import org.nl.utils.SpringContextHolder; +import org.nl.wql.WQL; +import org.nl.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author qxuan + * @description 服务实现 + * @date 2021-07-21 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class PadServiceImpl implements PadService { + + @Override + public Map queryInst(Map jsonObject) { + //查询位完成的指令 + JSONObject resultJson = new JSONObject(); + JSONArray resultArr = WQL.getWO("QHAND_QUERY").addParam("flag", "4").addParamMap((HashMap) jsonObject).process().getResultJSONArray(0); + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + resultJson.put("result", resultArr); + return resultJson; + } + + @Override + public Map queryTask(Map jsonObject) { + String key = jsonObject.get("keyword"); + String start_point = jsonObject.get("start_devicecode"); + String next_point = jsonObject.get("next_devicecode"); + HashMap map = new HashMap<>(); + map.put("flag", "2"); + map.put("key", key); + map.put("start_point", start_point); + map.put("next_point", next_point); + //查询有任务 但是没有指令的任务 + JSONArray result = WQL.getWO("QHAND_QUERY").addParamMap(map).process().getResultJSONArray(0); + JSONObject resultJson = new JSONObject(); + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + resultJson.put("result", result); + return resultJson; + } + + @Override + public Map Instoperation(Map jsonObject) { + JSONObject jo = new JSONObject(); + String type = jsonObject.get("type"); + String inst_uuid = jsonObject.get("inst_uuid"); + JSONObject instwo = WQLObject.getWQLObject("acs_instruction").query("instruction_id='" + inst_uuid + "'").uniqueResult(0); + if (instwo == null) { + throw new BadRequestException("未找到该指令!"); + } + InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); + NDCAgvService agvService = SpringContextHolder.getBean(NDCAgvService.class); + AcsConfigService acsConfigService = SpringContextHolder.getBean(AcsConfigServiceImpl.class); + + String task_id = instwo.getString("task_id"); + /* 1 指令撤销 + 2 重新下发 + 3 强制完成*/ + if (type.equals("1")) { + //调用agv删除任务的接口 + agvService = SpringContextHolder.getBean("agvServiceImpl"); + try { + agvService.deleteAgvInstToNDC(instwo.toJavaObject(Instruction.class)); + instructionService.cancel(inst_uuid); + + } catch (Exception e) { + jo.put("code", "2"); + jo.put("desc", e.getMessage()); + jo.put("result", ""); + return jo; + } + } + if (type.equals("2")) { + Instruction instdto = (Instruction) JSONObject.toJavaObject(instwo, Instruction.class); + AgvService agvserver = SpringContextHolder.getBean("agvServiceImpl"); + try { + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.FORKAGV).toString(), "1")) { + + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.AGVTYPE).toString(), "1")) { + agvService.sendAgvInstToNDC(instdto); + } else if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.AGVTYPE).toString(), "2")) { + agvService.sendAgvInstToNDC(instdto); + } + } + } catch (Exception e) { + jo.put("code", "2"); + jo.put("desc", e.getMessage()); + jo.put("result", ""); + return jo; + } + + } + if (type.equals("3")) { + //完成指令 + try { + instructionService.finish(inst_uuid); + } catch (Exception e) { + jo.put("code", "2"); + jo.put("desc", e.getMessage()); + jo.put("result", ""); + return jo; + } + } + + + jo.put("code", "1"); + jo.put("desc", "操作成功"); + jo.put("result", new JSONObject()); + return jo; + } + + @Override + public Map Taskoperation(Map jsonObject) { + JSONObject jo = new JSONObject(); + String task_uuid = jsonObject.get("inst_uuid"); + String type = jsonObject.get("type"); + JSONObject taskjo = WQLObject.getWQLObject("acs_task").query("task_id='" + task_uuid + "'").uniqueResult(0); + if (StrUtil.isEmpty(task_uuid)) { + throw new BadRequestException("id不能为空!"); + } + if (StrUtil.isEmpty(type)) { + throw new BadRequestException("操作类型不能为空!"); + } + //重新生成 + if (type.equals("1")) { + //重新生产指令 + Instruction instdto = new Instruction(); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setInstruction_code(CodeUtil.getNewCode("INSTRUCT_NO")); + instdto.setRemark(taskjo.getString("remark")); + instdto.setMaterial(taskjo.getString("taskjo")); + instdto.setTask_id(taskjo.getString("task_id")); + instdto.setTask_code(taskjo.getString("task_code")); + instdto.setVehicle_code(taskjo.getString("vehicle_code")); + String now = DateUtil.now(); + instdto.setCreate_time(now); + instdto.setCreate_by("auto"); + instdto.setStart_point_code(taskjo.getString("start_point_code")); + instdto.setNext_point_code(taskjo.getString("next_point_code")); + instdto.setStart_device_code(taskjo.getString("start_device_code")); + instdto.setNext_device_code(taskjo.getString("next_device_code")); + instdto.setInstruction_status("0"); + InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); + try { + instructionService.create(instdto); + TaskDto acsTask = (TaskDto) JSONObject.toJavaObject(taskjo, TaskDto.class); + acsTask.setTask_status("1"); + WQLObject taskwo = WQLObject.getWQLObject("acs_task"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(acsTask)); + taskwo.update(json); + } catch (Exception e) { + jo.put("code", "2"); + jo.put("desc", e.getMessage()); + jo.put("result", ""); + return jo; + } + + instdto.setExecute_device_code(taskjo.getString("start_point_code")); + //下发指令给agv +// AgvService agvserver = SpringContextHolder.getBean("agvServiceImpl"); +// try { +// agvserver.sendAgvInstToMagic(instdto); +// } catch (Exception e) { +// jo.put("code", "2"); +// jo.put("desc", e.getMessage()); +// jo.put("result", ""); +// return jo; +// } + + } + //强制完成 + if (type.equals("2")) { + //手工完成 + TaskService taskService = SpringContextHolder.getBean(TaskServiceImpl.class); + TaskDto acsTask = (TaskDto) JSONObject.toJavaObject(taskjo, TaskDto.class); + taskService.finish(acsTask.getTask_id()); + } + + + jo.put("code", "1"); + jo.put("desc", "操作成功"); + jo.put("result", new JSONObject()); + return jo; + } +} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/hand/wql/QHAND_QUERY.wql b/acs/hd/nladmin-system/src/main/java/org/nl/hand/wql/QHAND_QUERY.wql new file mode 100644 index 0000000..9a20999 --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/hand/wql/QHAND_QUERY.wql @@ -0,0 +1,176 @@ +[交易说明] + 交易名: 手持接口查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.key TYPEAS s_string + 输入.keyword TYPEAS s_string + 输入.start_devicecode TYPEAS s_string + 输入.next_devicecode TYPEAS s_string + 输入.detail_id TYPEAS s_string + 输入.start_point TYPEAS s_string + 输入.next_point TYPEAS s_string + + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + IF 输入.flag = "1" + QUERY + SELECT + dtl.detail_id as region_id, + dtl.label as region_name, + dtl.value as region_code + FROM + sys_dict sys + LEFT JOIN sys_dict_detail dtl ON dtl.dict_id = sys.dict_id + WHERE + sys.NAME = "region_type" + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + task.task_id AS task_uuid, + task.task_code AS task_no, + task.start_point_code AS start_devicecode, + task.next_point_code AS next_devicecode, + task.task_type AS task_type, + sys2.VALUE AS material_type_name, + sys2.label AS material_type, + sys.VALUE AS task_status_name, + sys.label AS task_status, + task.vehicle_code AS carrier, + task.create_time, + task.priority + FROM + acs_task task + LEFT JOIN sys_dict_detail sys ON sys.label = task.task_status + AND sys.NAME = 'task_status' + LEFT JOIN sys_dict_detail sys2 ON sys2.VALUE = task.material + AND sys2.NAME = 'material_type' + where + ( task.task_status ='1' or task.task_status ='0' ) + and + ( task.task_id IN (select inst.task_id FROM acs_instruction inst where inst.is_delete<>1 and (instruction_status<>'1' and instruction_status <>'2' and instruction_status <>'0')) or task.task_id not in (select inst.task_id FROM acs_instruction inst where inst.is_delete<>1 + )) + OPTION 输入.key <> "" + (task.task_code like 输入.key or task.task_status like 输入.key) + ENDOPTION + OPTION 输入.start_point <> "" + task.start_point_code = 输入.start_point + ENDOPTION + OPTION 输入.next_point <> "" + task.next_point_code = 输入.next_point + ENDOPTION + ORDER BY task.create_time + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + * + FROM + sys_dict_detail detl + WHERE + 1=1 + OPTION 输入.detail_id <> "" + detl.detail_id = 输入.detail_id + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + inst.instruction_id AS inst_uuid, + inst.task_code AS task_no, + inst.instruction_code AS inst_no, + inst.start_point_code AS start_devicecode, + inst.next_point_code AS next_devicecode, + inst.instruction_status AS inst_status, + dtl.VALUE AS inst_status_name, + inst.execute_message AS inst_step, + inst.vehicle_code AS carrier, + inst.carno, + inst.priority, + inst.create_time, + inst.material AS material_type, + dtl2.VALUE AS material_type_name + FROM + acs_instruction inst + LEFT JOIN sys_dict_detail AS dtl ON dtl.label = inst.instruction_status + AND dtl.NAME = 'task_status' + LEFT JOIN sys_dict_detail AS dtl2 ON dtl2.label = inst.material + AND dtl2.NAME = 'material_type' + WHERE + inst.is_delete = '0' + AND (inst.instruction_status ='1' + OR inst.instruction_status ='0') + OPTION 输入.keyword <> "" + (inst.instruction_code like 输入.keyword + or + inst.task_code like 输入.keyword + or inst.execute_device_code like 输入.keyword) + ENDOPTION + OPTION 输入.start_devicecode <> "" + inst.start_point_code = 输入.start_devicecode + ENDOPTION + OPTION 输入.next_devicecode <> "" + inst.next_point_code = 输入.next_devicecode + ENDOPTION + ORDER BY inst.create_time desc + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + detl.label AS label, + detl. + VALUE + AS value + FROM + sys_dict_detail detl + WHERE + detl.name = 'material_type' + ENDSELECT + ENDQUERY + ENDIF diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/hand/wql/sys_table.xls b/acs/hd/nladmin-system/src/main/java/org/nl/hand/wql/sys_table.xls new file mode 100644 index 0000000000000000000000000000000000000000..751479679b30a73467ece03087ffaf038089a156 GIT binary patch literal 179200 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 J_y1f9{2x|iJ8b{} literal 0 HcmV?d00001 diff --git a/acs/hd/nladmin-system/src/main/resources/config/application-prod.yml b/acs/hd/nladmin-system/src/main/resources/config/application-prod.yml index fec9f7c..77674f9 100644 --- a/acs/hd/nladmin-system/src/main/resources/config/application-prod.yml +++ b/acs/hd/nladmin-system/src/main/resources/config/application-prod.yml @@ -8,7 +8,7 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:lnsh_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:xugong_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true # url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:rljn_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} # password: ${DB_PWD:P@ssw0rd} diff --git a/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/rest/PadController.java b/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/rest/PadController.java index e97fb6f..b9d24dd 100644 --- a/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/rest/PadController.java +++ b/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/rest/PadController.java @@ -203,4 +203,72 @@ public class PadController { return new ResponseEntity<>(padService.send(startPointCode), HttpStatus.OK); } + + /** + * 查询该区域已锁定或未锁定的排号 + * + * @param param String region_id 区域id + * String type 类型 0-未锁定 1-已锁定 + * @return 该区域已锁定或未锁定的排号 + */ + @PostMapping("/row") + @Log("查询该区域已锁定或未锁定的排号") + @ApiOperation("查询该区域已锁定或未锁定的排号") + public ResponseEntity row(@RequestBody JSONObject param) { + // 参数校验 + String regionId = param.getString("region_id"); + if (StrUtil.isEmpty(regionId)) { + JSONObject resultJSON = new JSONObject(); + resultJSON.put("code", "0"); + resultJSON.put("desc", "区域不能为空"); + return new ResponseEntity<>(resultJSON, HttpStatus.OK); + } + String type = param.getString("type"); + if (StrUtil.isEmpty(type)) { + JSONObject resultJSON = new JSONObject(); + resultJSON.put("code", "0"); + resultJSON.put("desc", "类型不能为空"); + return new ResponseEntity<>(resultJSON, HttpStatus.OK); + } + + return new ResponseEntity<>(padService.row(regionId, type), HttpStatus.OK); + } + + /** + * 锁定排或解锁排 + * + * @param param String region_id 区域id + * String col 排号 + * String type 操作类型 0-锁定 1-解锁 + * @return 提示 + */ + @PostMapping("/lockrow") + @Log("锁定排或解锁排") + @ApiOperation("锁定排或解锁排") + public ResponseEntity lockRow(@RequestBody JSONObject param) { + // 参数校验 + String regionId = param.getString("region_id"); + if (StrUtil.isEmpty(regionId)) { + JSONObject resultJSON = new JSONObject(); + resultJSON.put("code", "0"); + resultJSON.put("desc", "区域不能为空"); + return new ResponseEntity<>(resultJSON, HttpStatus.OK); + } + String col = param.getString("col"); + if (StrUtil.isEmpty(col)) { + JSONObject resultJSON = new JSONObject(); + resultJSON.put("code", "0"); + resultJSON.put("desc", "排号不能为空"); + return new ResponseEntity<>(resultJSON, HttpStatus.OK); + } + String type = param.getString("type"); + if (StrUtil.isEmpty(type)) { + JSONObject resultJSON = new JSONObject(); + resultJSON.put("code", "0"); + resultJSON.put("desc", "操作类型不能为空"); + return new ResponseEntity<>(resultJSON, HttpStatus.OK); + } + + return new ResponseEntity<>(padService.lockRow(regionId, col, type), HttpStatus.OK); + } } diff --git a/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/service/PadService.java b/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/service/PadService.java index f56d79c..98e80a3 100644 --- a/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/service/PadService.java +++ b/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/service/PadService.java @@ -71,4 +71,23 @@ public interface PadService { * @return 提示 */ JSONObject send(String startPointCode); + + /** + * 查询该区域已锁定或未锁定的排号 + * + * @param regionId 区域id + * @param type 类型 0-未锁定 1-已锁定 + * @return 该区域已锁定或未锁定的排号 + */ + JSONObject row(String regionId, String type); + + /** + * 锁定排或解锁排 + * + * @param regionId 区域id + * @param col 排号 + * @param type 操作类型 0-锁定 1-解锁 + * @return 提示 + */ + JSONObject lockRow(String regionId, String col, String type); } diff --git a/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/service/impl/PadServiceImpl.java b/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/service/impl/PadServiceImpl.java index a970129..508d682 100644 --- a/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/service/impl/PadServiceImpl.java +++ b/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/service/impl/PadServiceImpl.java @@ -60,6 +60,14 @@ public class PadServiceImpl implements PadService { private final SendTask sendTask; + /** + * 手持登陆 + * + * @param user 用户名 + * @param password 密码 + * @param request 本次请求 + * @return 登陆成功将携带用户id和token返回 + */ @Override public JSONObject login(String user, String password, HttpServletRequest request) { // 返回值 @@ -97,10 +105,9 @@ public class PadServiceImpl implements PadService { Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authentication); String token = tokenProvider.createToken(authentication); - final JwtUserDto jwtUserDto = (JwtUserDto) authentication.getPrincipal(); // 保存在线信息 - onlineUserService.save(jwtUserDto, token, request); + onlineUserService.save((JwtUserDto) authentication.getPrincipal(), token, request); // 返回 resultJSON.put("code", "1"); @@ -113,6 +120,11 @@ public class PadServiceImpl implements PadService { return resultJSON; } + /** + * 查询所有区域信息 + * + * @return 所有区域信息 + */ @Override public JSONObject region() { // 返回值 @@ -127,6 +139,12 @@ public class PadServiceImpl implements PadService { return resultJSON; } + /** + * 根据区域查询点位 + * + * @param regionId 区域id + * @return 该区域下的所有点位 + */ @Override public JSONObject point(String regionId) { // 返回值 @@ -144,7 +162,7 @@ public class PadServiceImpl implements PadService { for (Object o : result) { JSONObject point = (JSONObject) o; - // 如果点位已锁定,则为有任务,status为2,status_name为有任务 + // 如果锁定类型为 01,则为有任务,status为2,status_name为有任务 if (StrUtil.equals(point.getString("lock_type"), "01")) { point.put("status", "2"); point.put("status_name", "有任务"); @@ -158,6 +176,11 @@ public class PadServiceImpl implements PadService { return resultJSON; } + /** + * 查询物料 + * + * @return 所有物料 + */ @Override public JSONObject material() { // 返回值 @@ -172,6 +195,14 @@ public class PadServiceImpl implements PadService { return resultJSON; } + /** + * 点位状态绑定 + * + * @param type 操作类型 + * @param pointCode 点位编码 + * @param materialType 物料类型 + * @return 提示 + */ @Transactional(rollbackFor = Exception.class) @Override public JSONObject bindPoint(String type, String pointCode, String materialType) { @@ -192,7 +223,7 @@ public class PadServiceImpl implements PadService { // 判断是否已被锁定 if (StrUtil.equals(point.getString("lock_type"), "01")) { resultJSON.put("code", "0"); - resultJSON.put("desc", "该点位已被锁定"); + resultJSON.put("desc", "该点位存在任务"); return resultJSON; } @@ -233,6 +264,13 @@ public class PadServiceImpl implements PadService { return resultJSON; } + /** + * 叫料(确定终点) + * + * @param nextPointCode 终点编码 + * @param materialType 物料类型 + * @return 提示 + */ @Override public JSONObject call(String nextPointCode, String materialType) { // 返回值 @@ -256,6 +294,12 @@ public class PadServiceImpl implements PadService { return resultJSON; } + /** + * 送料(确定起点) + * + * @param startPointCode 起点编码 + * @return 提示 + */ @Override public JSONObject send(String startPointCode) { // 返回值 @@ -277,4 +321,95 @@ public class PadServiceImpl implements PadService { resultJSON.put("desc", "已创建任务"); return resultJSON; } + + /** + * 查询该区域已锁定或未锁定的排号 + * + * @param regionId 区域id + * @param type 类型 0-未锁定 1-已锁定 + * @return 该区域已锁定或未锁定的排号 + */ + @Override + public JSONObject row(String regionId, String type) { + // 返回值 + JSONObject resultJSON = new JSONObject(); + + // 根据操作类型做不同的操作 + JSONArray result = new JSONArray(); + switch (type) { + case "0": + // 未锁定 + result = WQL + .getWO("PAD") + .addParam("flag", "4") + .addParam("region_id", regionId) + .addParam("lock_type", "00") + .process() + .getResultJSONArray(0); + break; + case "1": + // 已锁定 + result = WQL + .getWO("PAD") + .addParam("flag", "4") + .addParam("region_id", regionId) + .addParam("lock_type", "02") + .process() + .getResultJSONArray(0); + } + + // 返回 + resultJSON.put("code", "1"); + resultJSON.put("desc", "查询成功"); + resultJSON.put("result", result); + return resultJSON; + } + + /** + * 锁定排或解锁排 + * + * @param regionId 区域id + * @param col 排号 + * @param type 操作类型 0-锁定 1-解锁 + * @return 提示 + */ + @Override + public JSONObject lockRow(String regionId, String col, String type) { + // 返回值 + JSONObject resultJSON = new JSONObject(); + + // 先查询该排有没有被任务锁的点位 + JSONObject lockPoint = WQL + .getWO("PAD") + .addParam("flag", "5") + .addParam("region_id", regionId) + .addParam("col", col) + .process() + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(lockPoint)) { + resultJSON.put("code", "0"); + resultJSON.put("desc", "该排有点位存在任务"); + return resultJSON; + } + + // 根据操作类型做不同操作 + JSONObject rowStatus = new JSONObject(); + switch (type) { + case "0": + // 锁定 + rowStatus.put("lock_type", "02"); + break; + case "1": + // 解锁 + rowStatus.put("lock_type", "00"); + } + WQLObject + .getWQLObject("sch_base_point") + .update(rowStatus, "is_delete = '0' AND is_used = '1' AND region_id = '" + regionId + "' AND col = " + col); + + // 返回 + resultJSON.put("code", "1"); + resultJSON.put("desc", "操作成功"); + return resultJSON; + } } diff --git a/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/wql/PAD.wql b/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/wql/PAD.wql index 733f43f..fadeca2 100644 --- a/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/wql/PAD.wql +++ b/lms/hd/nladmin-system/src/main/java/org/nl/wms/pad/wql/PAD.wql @@ -15,6 +15,8 @@ ################################################# 输入.flag TYPEAS s_string 输入.region_id TYPEAS s_string + 输入.lock_type TYPEAS s_string + 输入.col TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -93,3 +95,44 @@ ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "4" + QUERY + SELECT DISTINCT + col + FROM + sch_base_point + WHERE + is_delete = '0' + AND is_used = '1' + OPTION 输入.region_id <> "" + region_id = 输入.region_id + ENDOPTION + OPTION 输入.lock_type <> "" + lock_type = 输入.lock_type + ENDOPTION + ORDER BY + col + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + * + FROM + sch_base_point + WHERE + is_delete = '0' + AND is_used = '1' + AND lock_type = '01' + OPTION 输入.region_id <> "" + region_id = 输入.region_id + ENDOPTION + OPTION 输入.col <> "" + col = 输入.col + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java b/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java index 706528f..9666b16 100644 --- a/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java +++ b/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java @@ -90,11 +90,11 @@ public class PointServiceImpl implements PointService { } if (!StrUtil.equals(dto.getMaterial_type(), "14")) { int count = WQLObject.getWQLObject("sch_base_point") - .query("is_delete = '0' AND seq = " + dto.getSeq() + " AND region_id = " + dto.getRegion_id() + " AND material_type = '" + dto.getMaterial_type() + "'") + .query("is_delete = '0' AND seq = " + dto.getSeq() + " AND region_id = " + dto.getRegion_id() + "'") .getResultJSONArray(0) .size(); if (count > 0) { - throw new BadRequestException("该区域存放该物料的点位中存在相同的出入库顺序"); + throw new BadRequestException("该区域存在相同的出入库顺序"); } } if (StrUtil.equals(dto.getPoint_status(), "00") && !StrUtil.equals(dto.getCurrent_material_type(), "14")) { @@ -107,7 +107,16 @@ public class PointServiceImpl implements PointService { throw new BadRequestException("出入库顺序号不能小于0"); } if (dto.getCol() < 0L) { - throw new BadRequestException("列不能小于0"); + throw new BadRequestException("排号不能小于0"); + } + JSONObject colPoint = WQLObject.getWQLObject("sch_base_point").query("region_id = '" + dto.getRegion_id() + "' AND col = " + dto.getCol()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(colPoint) && !StrUtil.equals(colPoint.getString("material_type"), dto.getMaterial_type())) { + throw new BadRequestException("当前排不能限定这种物料"); + } + if (!StrUtil.equals(dto.getCurrent_material_type(), "14") + && !StrUtil.equals(dto.getMaterial_type(), "14") + && !StrUtil.equals(dto.getMaterial_type(), dto.getCurrent_material_type())) { + throw new BadRequestException("当前存放物料与限定物料不一致"); } Long currentUserId = SecurityUtils.getCurrentUserId(); @@ -142,11 +151,11 @@ public class PointServiceImpl implements PointService { } if (!StrUtil.equals(dto.getMaterial_type(), "14")) { int count = WQLObject.getWQLObject("sch_base_point") - .query("is_delete = '0' AND seq = " + dto.getSeq() + " AND region_id = " + dto.getRegion_id() + " AND material_type = '" + dto.getMaterial_type() + "' AND point_id <> " + pointId) + .query("is_delete = '0' AND seq = " + dto.getSeq() + " AND region_id = " + dto.getRegion_id() + " AND point_id <> " + pointId) .getResultJSONArray(0) .size(); if (count > 0) { - throw new BadRequestException("该区域存放该物料的其他点位中存在相同的出入库顺序"); + throw new BadRequestException("该区域的其他点位中存在相同的出入库顺序"); } } if (StrUtil.equals(dto.getPoint_status(), "00") && !StrUtil.equals(dto.getCurrent_material_type(), "14")) { diff --git a/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallTask.java b/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallTask.java index 863dc0e..c9e659d 100644 --- a/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallTask.java +++ b/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallTask.java @@ -2,11 +2,14 @@ package org.nl.wms.sch.tasks; 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.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; @@ -23,7 +26,7 @@ import org.springframework.transaction.annotation.Transactional; @Slf4j public class CallTask extends AbstractAcsTask { - private final SendTask sendTask; + private final SendTask sendTask = new SendTask(); /** * 更新任务状态 @@ -34,7 +37,7 @@ public class CallTask extends AbstractAcsTask { @Transactional(rollbackFor = Exception.class) @Override public void updateTaskStatus(JSONObject taskJSON, String status) { - sendTask.updateTaskStatus(taskJSON, status); + new SendTask().updateTaskStatus(taskJSON, status); } @Override @@ -54,6 +57,7 @@ public class CallTask extends AbstractAcsTask { * String material_type 物料类型 * @return 任务id */ + @Transactional(rollbackFor = Exception.class) @Override public String createTask(JSONObject param) { String nextPointCode = param.getString("next_point_code"); @@ -86,7 +90,7 @@ public class CallTask extends AbstractAcsTask { } // 判断点位有没有被锁定 - if (StrUtil.equals(nextPoint.getString("lock_type"), "01")) { + if (!StrUtil.equals(nextPoint.getString("lock_type"), "00")) { throw new BadRequestException("该点位已被锁定"); } @@ -96,45 +100,59 @@ public class CallTask extends AbstractAcsTask { } // 起点 - JSONObject startPoint; + JSONObject startPoint = null; - // 查询该区域存放此物料一共有几排 - long colCount = WQL + // 查询该区域存放此物料的排 + JSONArray colArray = WQL .getWO("SEND_TASK") - .addParam("flag", "3") + .addParam("flag", "2") .addParam("region_id", startRegionId) .addParam("material_type", materialType) .process() - .uniqueResult(0) - .getLongValue("col"); - - // 从第一排开始查询起点 - long currentCol = 1L; - do { - // 如果当前这排已经超过了总排数,说明没有找到叫料点位 - if (currentCol > colCount) { - throw new BadRequestException("未找到合适的叫料点位"); - } + .getResultJSONArray(0); + // 遍历该区域存放此物料的排寻找合适的点位 + for (Object o : colArray) { + // 查找该排有货 或 已锁定的点位(出入库顺序降序) startPoint = WQL .getWO("SEND_TASK") - .addParam("flag", "2") + .addParam("flag", "3") .addParam("region_id", startRegionId) - .addParam("material_type", materialType) - .addParam("col", String.valueOf(currentCol)) + .addParam("col", ((JSONObject) o).getString("col")) .process() .uniqueResult(0); - // 如果这排不存在合适点位 或 合适点位已被锁定,进入下一排查找 - currentCol++; - } while (ObjectUtil.isEmpty(startPoint) || StrUtil.equals(startPoint.getString("lock_type"), "01")); + // 点位不为空 且 点位未锁定,则为合适的叫料点位 + if (ObjectUtil.isNotEmpty(startPoint) && StrUtil.equals(startPoint.getString("lock_type"), "00")) { + break; + } + + // 如果不合适重置为null + startPoint = null; + } + if (ObjectUtil.isEmpty(startPoint)) { + throw new BadRequestException("未找到合适的叫料点位"); + } - return sendTask.createTaskRelated(startPoint, nextPoint, param, CallTask.class, "01", "1"); + assert startPoint != null; + return sendTask.createTaskRelated( + startPoint, + nextPoint, + param, + CallTask.class, + "01", + CodeUtil.getNewCode("CALL_BILL_CODE"), + "1"); } + /** + * 完成任务 + * + * @param task_id 任务标识 + */ @Override public void forceFinish(String task_id) { - + sendTask.forceFinish(task_id); } @Override diff --git a/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendTask.java b/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendTask.java index f27a2f1..d67878d 100644 --- a/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendTask.java +++ b/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendTask.java @@ -164,6 +164,7 @@ public class SendTask extends AbstractAcsTask { * @param param String start_point_code 点位编码 * @return 任务id */ + @Transactional(rollbackFor = Exception.class) @Override public String createTask(JSONObject param) { String startPointCode = param.getString("start_point_code"); @@ -184,7 +185,7 @@ public class SendTask extends AbstractAcsTask { } // 判断点位有没有被锁定 - if (StrUtil.equals(startPoint.getString("lock_type"), "01")) { + if (!StrUtil.equals(startPoint.getString("lock_type"), "00")) { throw new BadRequestException("该点位已被锁定"); } @@ -193,25 +194,59 @@ public class SendTask extends AbstractAcsTask { throw new BadRequestException("该点位是空位"); } - - // 查询入库点位 - JSONObject nextPoint = WQL - .getWO("SEND_TASK") - .addParam("flag", "1") - .addParam("region_id", nextRegionId) - .addParam("material_type", startPoint.getString("current_material_type")) - .process() - .uniqueResult(0); + // 如果起点是大吨位装配线下线区这根据物料类型给终点 + JSONObject nextPoint; + String startRegionId = startPoint.getString("region_id"); + String currentMaterialType = startPoint.getString("current_material_type"); + if (StrUtil.equals(startRegionId, "1578917189698850816") || StrUtil.equals(startRegionId, "1578917627470942208")) { + String nextPointCode = null; + if (StrUtil.equals(currentMaterialType, "08")) { + nextPointCode = "TZSXDCP1"; + } + if (StrUtil.equals(currentMaterialType, "09")) { + nextPointCode = "TZSXDCP2"; + } + nextPoint = WQLObject + .getWQLObject("sch_base_point") + .query("is_delete = '0' AND is_used = '1' AND point_code = '" + nextPointCode + "'") + .uniqueResult(0); + } else { + // 查送料点位(出入库顺序升序) + nextPoint = WQL + .getWO("SEND_TASK") + .addParam("flag", "1") + .addParam("region_id", nextRegionId) + .addParam("material_type", currentMaterialType) + .process() + .uniqueResult(0); + } if (ObjectUtil.isEmpty(nextPoint)) { throw new BadRequestException("未找到合适的送料点位"); } - return createTaskRelated(startPoint, nextPoint, param, SendTask.class, "02", "2"); + return createTaskRelated( + startPoint, + nextPoint, + param, + SendTask.class, + "02", + CodeUtil.getNewCode("SEND_BILL_CODE"), + "2"); } @Override public void forceFinish(String task_id) { - + // 根据id查code + String taskCode = WQLObject + .getWQLObject("sch_base_task") + .query("task_id = " + task_id) + .uniqueResult(0) + .getString("task_code"); + + // 调用更新任务状态逻辑 + JSONObject taskJSON = new JSONObject(); + taskJSON.put("task_code", taskCode); + updateTaskStatus(taskJSON, TaskStatusEnum.FINISHED.getCode()); } @Override @@ -226,17 +261,19 @@ public class SendTask extends AbstractAcsTask { /** * 创建任务相关(创建任务、创建单据、锁定点位) + * CallTask 和 SendTask 可用 * * @param startPoint 起点 * @param nextPoint 终点 * @param requestParam 请求参数 * @param handler 处理类 * @param taskType 任务类型 字典表 name = 'SCH_TASK_TYPE' + * @param billCode 单据编码 * @param ioType 单据类型 字典表 name = 'io_type' * @return 任务id */ @Transactional(rollbackFor = Exception.class) - public String createTaskRelated(JSONObject startPoint, JSONObject nextPoint, JSONObject requestParam, Class handler, String taskType, String ioType) { + public String createTaskRelated(JSONObject startPoint, JSONObject nextPoint, JSONObject requestParam, Class handler, String taskType, String billCode, String ioType) { String taskId = IdUtil.getSnowflake(1, 1).nextId() + ""; String startRegionId = startPoint.getString("region_id"); String startPointCode = startPoint.getString("point_code"); @@ -252,7 +289,7 @@ public class SendTask extends AbstractAcsTask { task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); task.put("task_type", taskType); task.put("acs_task_type", "1"); - task.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + task.put("task_status", TaskStatusEnum.ISSUE.getCode()); task.put("start_point_code", startPointCode); task.put("start_area", startRegionId); task.put("request_param", requestParam.toJSONString()); @@ -272,7 +309,7 @@ public class SendTask extends AbstractAcsTask { // 创建搬运单 JSONObject bill = new JSONObject(); bill.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId()); - bill.put("bill_code", CodeUtil.getNewCode("SEND_BILL_CODE")); + bill.put("bill_code", billCode); bill.put("io_type", ioType); bill.put("bill_status", "30"); bill.put("start_point_code", startPointCode); diff --git a/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/SEND_TASK.wql b/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/SEND_TASK.wql index a5d8b36..b825593 100644 --- a/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/SEND_TASK.wql +++ b/lms/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/SEND_TASK.wql @@ -65,25 +65,21 @@ IF 输入.flag = "2" QUERY - SELECT - * + SELECT DISTINCT + col FROM - sch_base_point + `sch_base_point` WHERE is_delete = '0' AND is_used = '1' - AND ( point_status = '01' OR lock_type = '01' ) OPTION 输入.region_id <> "" region_id = 输入.region_id ENDOPTION OPTION 输入.material_type <> "" material_type = 输入.material_type ENDOPTION - OPTION 输入.col <> "" - col = 输入.col - ENDOPTION ORDER BY - seq DESC + col ENDSELECT ENDQUERY ENDIF @@ -91,22 +87,21 @@ IF 输入.flag = "3" QUERY SELECT - point.region_id, - region.region_name, - point.material_type, - COUNT( DISTINCT point.col ) AS col + * FROM - sch_base_point point - LEFT JOIN sch_base_region region ON point.region_id = region.region_id + sch_base_point WHERE - point.is_delete = '0' - AND point.is_used = '1' - OPTION 输入.region_id <> "" - point.region_id = 输入.region_id - ENDOPTION - OPTION 输入.material_type <> "" - point.material_type = 输入.material_type - ENDOPTION + is_delete = '0' + AND is_used = '1' + AND (point_status = '01' OR lock_type IN ('01', '02')) + OPTION 输入.region_id <> "" + region_id = 输入.region_id + ENDOPTION + OPTION 输入.col <> "" + col = 输入.col + ENDOPTION + ORDER BY + seq DESC ENDSELECT ENDQUERY ENDIF \ No newline at end of file diff --git a/lms/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql b/lms/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql index 31114c0..32b940a 100644 --- a/lms/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql +++ b/lms/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql @@ -68,8 +68,6 @@ LEFT JOIN sch_base_point point2 ON point2.point_code = ios.end_point_code WHERE ios.is_delete = '0' - AND ios.io_type = '0' - OPTION 输入.bill_code <> "" ios.bill_code like 输入.bill_code ENDOPTION diff --git a/lms/qd/src/views/wms/sch/point/index.vue b/lms/qd/src/views/wms/sch/point/index.vue index a0763a9..f3fb313 100644 --- a/lms/qd/src/views/wms/sch/point/index.vue +++ b/lms/qd/src/views/wms/sch/point/index.vue @@ -30,6 +30,7 @@ > @@ -48,6 +49,7 @@ > @@ -66,6 +68,7 @@ > @@ -83,6 +86,7 @@ > @@ -100,6 +104,7 @@ > @@ -132,14 +137,14 @@ width="600px" > - + - + - + @@ -166,6 +172,7 @@ > @@ -181,6 +188,7 @@ > @@ -196,18 +204,20 @@ > - + {{ item.label }} @@ -221,6 +231,7 @@ > @@ -234,6 +245,7 @@ > @@ -247,6 +259,7 @@ > @@ -281,7 +294,7 @@ - + @@ -386,7 +399,7 @@ export default { { required: true, message: '当前存放物料类型不能为空', trigger: 'blur' } ], col: [ - { required: true, message: '列不能为空', trigger: 'blur' } + { required: true, message: '排号不能为空', trigger: 'blur' } ] // lock_type: [ // { required: true, message: '锁定类型不能为空', trigger: 'blur' } diff --git a/lms/qd/src/views/wms/sch/task/index.vue b/lms/qd/src/views/wms/sch/task/index.vue index 93650ab..b14ceae 100644 --- a/lms/qd/src/views/wms/sch/task/index.vue +++ b/lms/qd/src/views/wms/sch/task/index.vue @@ -56,7 +56,7 @@ /> - + - +