diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java index 42830f3..2234d35 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java @@ -194,9 +194,13 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { String agvurl = paramService.findByCode(AcsConfig.AGVURL).getValue(); String agvport = paramService.findByCode(AcsConfig.AGVPORT).getValue(); - agvurl = agvurl + ":" + agvport + "/api/route/transportOrders/" + instCode + "/withdrawal"; + JSONObject param = new JSONObject(); + param.put("id", instCode); + param.put("disableVehicle", false); + agvurl = agvurl + ":" + agvport + "/terminate"; log.info("删除agv指令请求agvurl:{}", agvurl); HttpResponse result = HttpRequest.post(agvurl) + .body(param.toJSONString()) .timeout(20000)//超时,毫秒 .execute(); log.info("删除agv指令请求反馈:{}", result); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index dee7aaa..7380930 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -66,7 +66,7 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu @Autowired DeviceAppService deviceAppService; @Autowired - NDCAgvService ndcAgvService; + XianGongAgvService agvService; @Autowired ParamService paramService; @Autowired @@ -455,12 +455,13 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "2")) { if (StrUtil.equals("1", dto.getInstruction_type())) { - ndcAgvService.sendAgvTwoInstToNDC(dto, dto2); + agvService.sendOrderSequencesToXZ(dto); + agvService.sendOrderSequencesToXZ(dto2); dto.setSend_status("1"); dto2.setSend_status("1"); } else if (StrUtil.equals("2", dto.getInstruction_type())) { dto.setSend_status("1"); - ndcAgvService.sendAgvTwoInstToNDC(dto, null); + agvService.sendOrderSequencesToXZ(dto); } else if (StrUtil.equals("3", dto.getInstruction_type())) { } else if (StrUtil.equals("4", dto.getInstruction_type())) { @@ -469,13 +470,13 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu } else if (StrUtil.equals("6", dto.getInstruction_type())) { dto.setSend_status("1"); - ndcAgvService.sendAgvOneInstToNDC(dto); + agvService.sendOrderSequencesToXZ(dto); } else if (StrUtil.equals("7", dto.getInstruction_type())) { - ndcAgvService.sendAgvOneInstToNDC(dto); + agvService.sendOrderSequencesToXZ(dto); dto.setSend_status("1"); } else if (StrUtil.equals("8", dto.getInstruction_type())) { dto.setSend_status("1"); - ndcAgvService.sendAgvOneInstToNDC(dto); + agvService.sendOrderSequencesToXZ(dto); } } @@ -861,14 +862,14 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu // != 0 为agv任务 1=magic 2=NDC 3=XZ,4=ZHEDA if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "1") && !StrUtil.equals(entity.getSend_status(), "2")) { - MagicAgvService magicAgvService = SpringContextHolder.getBean(MagicAgvService.class); - magicAgvService.deleteAgvInst(entity.getInstruction_code()); + XianGongAgvService agvService = SpringContextHolder.getBean(XianGongAgvService.class); + agvService.deleteXZAgvInst(entity.getInstruction_code()); flag = true; } else if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "2")) { //NDC agv指令不当场取消指令,需要等agv上报 if (!StrUtil.isEmpty(entity.getAgv_jobno())) { - ndcAgvService.deleteAgvInstToNDC(entity); + agvService.deleteXZAgvInst(entity.getInstruction_code()); } else { flag = true; } diff --git a/acs/nladmin-system/src/main/java/org/nl/autotask/CleanLog.java b/acs/nladmin-system/src/main/java/org/nl/autotask/CleanLog.java index 3d82c43..2a08302 100644 --- a/acs/nladmin-system/src/main/java/org/nl/autotask/CleanLog.java +++ b/acs/nladmin-system/src/main/java/org/nl/autotask/CleanLog.java @@ -1,4 +1,4 @@ -package org.nl.wms.autotask; +package org.nl.autotask; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/acs/nladmin-system/src/main/java/org/nl/hand/amb/rest/HFHandController.java b/acs/nladmin-system/src/main/java/org/nl/hand/amb/rest/HFHandController.java new file mode 100644 index 0000000..65bf004 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/hand/amb/rest/HFHandController.java @@ -0,0 +1,167 @@ + +package org.nl.hand.amb.rest; + + +import cn.dev33.satoken.annotation.SaIgnore; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.hand.amb.service.HFHandService; +import org.nl.modules.logging.annotation.Log; +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/hand") +@Slf4j +public class HFHandController { + private final HFHandService HandService; + + @PostMapping("/area") + @Log("查询区域") + @ApiOperation("查询区域") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity query() { + return new ResponseEntity<>(HandService.queryArea(null), HttpStatus.OK); + } + + @PostMapping("/point") + @Log("查询设备编号及状态") + @ApiOperation("查询设备编号及状态") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + //@RequestBody JSONObject json + public ResponseEntity queryPoint(@RequestBody Map whereJson) { + String region = (String) whereJson.get("region"); + return new ResponseEntity<>(HandService.queryPointByArea(region), HttpStatus.OK); + } + + @PostMapping("/point/storage") + @Log("查询设备扩展属性") + @ApiOperation("查询设备扩展属性") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + //@RequestBody JSONObject json + public ResponseEntity queryDeviceAugmentabilityByCode(@RequestBody Map whereJson) { + return new ResponseEntity<>(HandService.queryDeviceAugmentabilityByCode(whereJson), HttpStatus.OK); + } + + @PostMapping("/task_type") + @Log("查询任务类型") + @ApiOperation("查询任务类型") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + //@RequestBody JSONObject json + public ResponseEntity queryTaskType() { + return new ResponseEntity<>(HandService.queryTaskType(), HttpStatus.OK); + } + + @PostMapping("/tasks") + @Log("查询任务") + @ApiOperation("查询任务") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity queryTask(@RequestBody Map whereJson) { + + return new ResponseEntity<>(HandService.queryTask(whereJson), HttpStatus.OK); + } + + @PostMapping("/insts") + @Log("查询指令") + @ApiOperation("查询指令") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity queryInst(@RequestBody Map whereJson) { + + return new ResponseEntity<>(HandService.queryInst(whereJson), HttpStatus.OK); + } + + @PostMapping("/routeplan_type") + @Log("查询路由类型") + @ApiOperation("查询路由类型") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity queryRouteplanType() { + return new ResponseEntity<>(HandService.queryRouteplanType(), HttpStatus.OK); + } + + @PostMapping("/task") + @Log("创建任务") + @ApiOperation("创建任务") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity createTask(@RequestBody Map whereJson) { + return new ResponseEntity<>(HandService.createTask(whereJson), HttpStatus.OK); + } + + @PostMapping("/inst") + @Log("指令操作") + @ApiOperation("指令操作") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity Instoperation(@RequestBody Map whereJson) { + return new ResponseEntity<>(HandService.Instoperation(whereJson), HttpStatus.OK); + } + + @PostMapping("/taskoperation") + @Log("任务操作") + @ApiOperation("任务操作") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity Taskoperation(@RequestBody Map whereJson) throws Exception { + return new ResponseEntity<>(HandService.Taskoperation(whereJson), HttpStatus.OK); + } + + @PostMapping("/deviceStatus") + @Log("修改设备状态") + @ApiOperation("修改设备状态") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity updateDeviceStatus(@RequestBody Map whereJson) { + + return new ResponseEntity<>(HandService.updateDeviceStatus(whereJson), HttpStatus.OK); + } + + @PostMapping("/handlogin") + @Log("手持登陆验证") + @ApiOperation("手持登陆验证") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity handlogin(@RequestBody Map whereJson) { + + return new ResponseEntity<>(HandService.handleLogin(whereJson), HttpStatus.OK); + } + + @PostMapping("/matrial") + @Log("查询物料信息") + @ApiOperation("查询物料信息") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity queryMaterial() { + return new ResponseEntity<>(HandService.queryMaterial(), HttpStatus.OK); + } + + @PostMapping("/task2") + @Log("创建任务") + @ApiOperation("创建任务") + @SaIgnore + //@PreAuthorize("@el.check('sect:list')") + public ResponseEntity createTask2(@RequestBody Map whereJson) { + return new ResponseEntity<>(HandService.createTask2(whereJson), HttpStatus.OK); + } + +} diff --git a/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/HFHandService.java b/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/HFHandService.java new file mode 100644 index 0000000..b9f60d4 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/HFHandService.java @@ -0,0 +1,115 @@ + +package org.nl.hand.amb.service; + + +import java.util.Map; + +/** + * @author qxuan + * @description 服务接口 + * @date 2021-07-21 + **/ +public interface HFHandService { + + /** + * 查询区域 + * + * @param whereJson 条件 + * @return Map + */ + Map queryArea(Map whereJson); + + /** + * 查询设备编号及状态 + * + * @return Map + */ + Map queryPointByArea(String dict_id); + + /** + * 查询设备扩展性 + * + * @param deviceCode + * @return + */ + Map queryDeviceAugmentabilityByCode(Map deviceCode); + + /** + * 查询任务状态 + * + * @return + */ + Map queryTaskType(); + + /** + * 查询路由类型 + * + * @return + */ + Map queryRouteplanType(); + + /** + * 查询指令 + * + * @param jsonObject 条件 + * @return Map + */ + Map queryInst(Map jsonObject); + + /** + * 创建任务 + * + * @param jsonObject 条件 + * @return Map + */ + Map createTask(Map jsonObject); + + /** + * 查询任务 + * + * @param jsonObject 条件 + * @return Map + */ + Map queryTask(Map jsonObject); + + /** + * 修改设备状态 + * + * @param jsonObject 条件 + * @return Map + */ + Map updateDeviceStatus(Map jsonObject); + + /** + * 手持登陆 + * + * @param jsonObject 条件 + * @return Map + */ + Map handleLogin(Map jsonObject); + + /** + * 指令操作 + * + * @param jsonObject 条件 + * @return Map + */ + Map Instoperation(Map jsonObject); + + /** + * 任务操作 + * + * @param jsonObject 条件 + * @return Map + */ + Map Taskoperation(Map jsonObject) throws Exception; + + /** + * 查询物料 + * + * @return Map + */ + Map queryMaterial(); + + Map createTask2(Map whereJson); +} diff --git a/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/dto/HandDto.java b/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/dto/HandDto.java new file mode 100644 index 0000000..c940b50 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/dto/HandDto.java @@ -0,0 +1,80 @@ +package org.nl.hand.amb.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author qxuan + * @description / + * @date 2021-07-21 + **/ +@Data +public class HandDto 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/nladmin-system/src/main/java/org/nl/hand/amb/service/impl/HFHandServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/impl/HFHandServiceImpl.java new file mode 100644 index 0000000..1bec9a4 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/hand/amb/service/impl/HFHandServiceImpl.java @@ -0,0 +1,764 @@ + +package org.nl.hand.amb.service.impl; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +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.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.server.XianGongAgvService; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device.service.dto.DeviceDto; +import org.nl.acs.device.service.impl.DeviceServiceImpl; +import org.nl.acs.device_driver.basedriver.standard_inspect_site.StandardInspectSiteDeviceDriver; +import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.instruction.service.dto.Instruction; +import org.nl.acs.instruction.service.dto.InstructionDto; +import org.nl.acs.instruction.service.impl.InstructionServiceImpl; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.opc.DeviceAppServiceImpl; +import org.nl.acs.route.service.RouteLineService; +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.hand.amb.service.HFHandService; +import org.nl.modules.common.config.RsaProperties; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.RsaUtils; +import org.nl.modules.system.service.UserService; +import org.nl.modules.system.service.dto.UserDto; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +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 HFHandServiceImpl implements HFHandService { + private final UserService userService; + private final DeviceService deviceService; + private final DeviceAppService deviceAppService; + InstructionService instructionService = null; + + + @Override + public Map queryArea(Map whereJson) { + JSONObject jo = new JSONObject(); + JSONArray resultJSONArray = WQL.getWO("QJN_QUERY001").addParam("flag", "1").process().getResultJSONArray(0); + jo.put("code", "1"); + jo.put("desc", "查询成功"); + jo.put("result", resultJSONArray); + return jo; + } + + @Override + public Map queryPointByArea(String dict_id) { + JSONArray resultArr = new JSONArray(); + JSONObject resultJson = new JSONObject(); + JSONObject jo = new JSONObject(); + + if (StrUtil.isEmpty(dict_id)) { + throw new BadRequestException("区域id不能为空!"); + } + String value = ""; + String move = ""; + String status = ""; + String input_material = "0"; + String allow_update = ""; + String material = ""; + String batch = ""; + + //再字典中查询出value + //JSONObject valuejo = WQLObject.getWQLObject("sys_dict_detail").query("detail_id='" + dict_id + "'").uniqueResult(0); + JSONObject valuejo = WQL.getWO("QJN_QUERY001").addParam("flag", "3").addParam("detail_id", dict_id).process().uniqueResult(0); + if (!ObjectUtil.isEmpty(valuejo)) { + value = valuejo.getString("value"); + } + //根据value值去查所有的设备 + JSONArray acs_deviceja = WQLObject.getWQLObject("ACS_DEVICE").query("region='" + value + "' and device_type='conveyor' and is_config='true' ", "seq_num,device_name").getResultJSONArray(0); + for (int i = 0; i < acs_deviceja.size(); i++) { + JSONObject devicejo = acs_deviceja.getJSONObject(i); + String device_code = devicejo.getString("device_code"); + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + Device device = appService.findDeviceByCode(device_code); + //无光电普通站点 + StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver; + //检测站点 + StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver; + + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (StrUtil.equals(device.getIslock(), "true")) { + status = "3"; + move = "有任务"; + } else { + if (standardOrdinarySiteDeviceDriver.getHasGoods() == 0) { + status = "0"; + move = "无货"; + } else if (standardOrdinarySiteDeviceDriver.getHasGoods() == 1) { + status = "1"; + move = "有托盘"; + } else if (standardOrdinarySiteDeviceDriver.getHasGoods() == 2) { + status = "2"; + move = "有托盘有货"; + } + } + + material = device.getMaterial_type(); + //material = standardOrdinarySiteDeviceDriver.getMaterial(); + if (StrUtil.isNullOrUndefined(material)) { + material = ""; + } + batch = device.getBatch(); + //batch = standardOrdinarySiteDeviceDriver.getBatch(); + if (StrUtil.isNullOrUndefined(batch)) { + batch = ""; + } + String input_materialflag = (String) device.getExtraValue().get("input_material"); + if (!StrUtil.isEmpty(input_materialflag) && input_materialflag.equals("false")) { + input_material = "0"; + } + if (!StrUtil.isEmpty(input_materialflag) && input_materialflag.equals("true")) { + input_material = "1"; + } + jo.put("material_type", material); + jo.put("batch", batch); + jo.put("islock", device.getIslock()); + jo.put("status_name", move); + jo.put("status", status); + jo.put("device_id", devicejo.getString("device_id")); + jo.put("device_code", devicejo.getString("device_code")); + jo.put("device_name", devicejo.getString("device_name")); + jo.put("allow_update", "1"); + jo.put("input_material", input_material); + // 特殊驱动 + } + //检测站点 + else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + + if (StrUtil.equals(device.getIslock(), "true")) { + status = "3"; + move = "有任务"; + } else { + if (standardInspectSiteDeviceDriver.getHasGoods() == 0) { + status = "0"; + move = "无货"; + } else if (standardInspectSiteDeviceDriver.getHasGoods() == 1) { + status = "1"; + move = "有托盘"; + } else if (standardInspectSiteDeviceDriver.getHasGoods() == 2) { + status = "2"; + move = "有托盘有货"; + } + } + jo.put("material_type", standardInspectSiteDeviceDriver.getMaterial()); + jo.put("status_name", move); + jo.put("status", status); + jo.put("device_id", devicejo.getString("device_id")); + jo.put("device_code", devicejo.getString("device_code")); + jo.put("device_name", devicejo.getString("device_name")); + jo.put("allow_update", "1"); + jo.put("batch", standardInspectSiteDeviceDriver.getBatch()); + jo.put("input_material", input_material); + + } + resultArr.add(jo); + } + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + resultJson.put("result", resultArr); + return resultJson; + } + + @Override + public Map queryDeviceAugmentabilityByCode(Map whereMap) { + String deviceCode = whereMap.get("device_code").toString(); + JSONObject resultJson = new JSONObject(); + JSONObject jo = new JSONObject(); + JSONObject acs_device = WQLObject.getWQLObject("ACS_DEVICE").query("device_code = '" + deviceCode + "'").pageResult(); + JSONObject acsDevice = (JSONObject) acs_device.getJSONArray("content").get(0); + //判断设备类型是不是storage + if (!"storage".equals(acsDevice.getString("device_type"))) { + resultJson.put("code", "0"); + resultJson.put("desc", "该设备不是货架"); + resultJson.put("result", ""); + return resultJson; + } + JSONObject jsonObject = deviceService.queryStorageExtra(deviceCode); + jo.put("device_id", acsDevice.getString("device_id")); + jo.put("device_code", deviceCode); + jo.put("device_name", acsDevice.getString("device_name")); + jo.put("device_type", acsDevice.getString("device_type")); + jo.put("maxY", jsonObject.getString("maxY")); + jo.put("minY", jsonObject.getString("minY")); + jo.put("maxZ", jsonObject.getString("maxZ")); + jo.put("minZ", jsonObject.getString("minZ")); + + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + resultJson.put("result", jo); + return resultJson; + } + + @Override + public Map queryRouteplanType() { + JSONObject resultJson = new JSONObject(); + JSONObject jo = WQLObject.getWQLObject("acs_route_plan").query().pageResult(); + JSONArray arr = new JSONArray(); + JSONArray content = jo.getJSONArray("content"); + for (int i = 0; i < content.size(); i++) { + JSONObject jsonObject = (JSONObject) content.get(i); + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.put("value", jsonObject.getString("plan_code")); + jsonObject1.put("label", jsonObject.getString("plan_name")); + arr.add(jsonObject1); + } + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + resultJson.put("result", arr); + return resultJson; + } + + @Override + public Map queryTaskType() { + JSONObject resultJson = new JSONObject(); + JSONObject jo = WQLObject.getWQLObject("sys_dict_detail").query("name = 'task_type'").pageResult(); + JSONArray arr = new JSONArray(); + JSONArray content = jo.getJSONArray("content"); + for (int i = 0; i < content.size(); i++) { + JSONObject jsonObject = (JSONObject) content.get(i); + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.put("value", jsonObject.getString("value")); + jsonObject1.put("label", jsonObject.getString("label")); + arr.add(jsonObject1); + } + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + resultJson.put("result", arr); + return resultJson; + } + + @Override + public Map queryInst(Map jsonObject) { + //查询位完成的指令 + JSONObject resultJson = new JSONObject(); + HashMap map = new HashMap<>(); + + String key = jsonObject.get("keyword"); + String start_point = jsonObject.get("start_devicecode"); + String next_point = jsonObject.get("next_devicecode"); + map.put("flag", "4"); + if (StrUtil.isNotEmpty(key)) { + map.put("key", "%" + key + "%"); + } + if (StrUtil.isNotEmpty(start_point)) { + map.put("start_point", "%" + start_point + "%"); + } + if (StrUtil.isNotEmpty(next_point)) { + map.put("next_point", "%" + next_point + "%"); + } + JSONArray resultArr = WQL.getWO("QJN_QUERY001").addParamMap(map).addParamMap((HashMap) jsonObject).process().getResultJSONArray(0); + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + resultJson.put("result", resultArr); + return resultJson; + } + + @Override + public Map createTask(Map jsonObject) { + String start_devicecode = jsonObject.get("start_devicecode"); + String next_devicecode = jsonObject.get("next_devicecode"); + String material_type = jsonObject.get("material_type"); + String task_type = jsonObject.get("task_type"); + String priority = jsonObject.get("priority"); + String carrier = jsonObject.get("carrier"); + + JSONObject resultJson = new JSONObject(); + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + Device startDevice = appService.findDeviceByCode(start_devicecode); + Device nextDevice = appService.findDeviceByCode(next_devicecode); + + if (StrUtil.isEmpty(start_devicecode)) { + resultJson.put("code", "0"); + resultJson.put("desc", "起点不能为空"); + resultJson.put("result", ""); + return resultJson; + } + if (StrUtil.isEmpty(next_devicecode)) { + resultJson.put("code", "0"); + resultJson.put("desc", "终点不能为空"); + resultJson.put("result", ""); + return resultJson; + } +// if (ObjectUtil.isNotEmpty(taskService.findByStartCode(start_devicecode)) || +// ObjectUtil.isNotEmpty(taskService.findByStartCode(next_devicecode))) { +// resultJson.put("code", "2"); +// resultJson.put("desc", "已存在该起点或终点的任务!"); +// resultJson.put("result", ""); +// return resultJson; +// } + //判断起点有货,终点为空 + if (ObjectUtil.isEmpty(startDevice.getMaterial_type()) || Integer.parseInt(startDevice.getMaterial_type()) == 0) { + resultJson.put("code", "0"); + resultJson.put("desc", "起点必须有货"); + resultJson.put("result", ""); + return resultJson; + } + if (!ObjectUtil.isEmpty(nextDevice.getMaterial_type()) && !StrUtil.equals(nextDevice.getMaterial_type(), "0")) { + resultJson.put("code", "0"); + resultJson.put("desc", "终点必须为空"); + resultJson.put("result", ""); + return resultJson; + } + if (Boolean.parseBoolean(startDevice.getIslock()) || Boolean.parseBoolean(nextDevice.getIslock())) { + resultJson.put("code", "0"); + resultJson.put("desc", "起点或终点设备已被锁定"); + resultJson.put("result", ""); + return resultJson; + } + if (StrUtil.isEmpty(priority)) { + priority = "1"; + } + + if (start_devicecode.equals(next_devicecode)) { + resultJson.put("code", "0"); + resultJson.put("desc", "起点和终点不能是同一设备【" + next_devicecode + "】"); + resultJson.put("result", ""); + return resultJson; + } + + TaskService taskService = SpringContextHolder.getBean(TaskServiceImpl.class); + TaskDto dto = new TaskDto(); + dto.setIs_active("1"); + dto.setIs_delete("0"); + dto.setMaterial(material_type); + dto.setStart_point_code(start_devicecode); + dto.setNext_point_code(next_devicecode); + dto.setMaterial(material_type); + dto.setTask_type(task_type); + dto.setPriority(priority); + dto.setVehicle_code(carrier); + try { + taskService.create(dto); + startDevice.setIslock("true"); + nextDevice.setIslock("true"); + } catch (Exception e) { + resultJson.put("code", "2"); + resultJson.put("desc", e.getMessage()); + resultJson.put("result", ""); + return resultJson; + } + + resultJson.put("code", "1"); + resultJson.put("desc", "生成成功!"); + resultJson.put("result", ""); + 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"); + if (StrUtil.isNotEmpty(key)) { + map.put("key", "%" + key + "%"); + } + if (StrUtil.isNotEmpty(start_point)) { + map.put("start_point", "%" + start_point + "%"); + } + if (StrUtil.isNotEmpty(next_point)) { + map.put("next_point", "%" + next_point + "%"); + } + //查询有任务 但是没有指令的任务 + JSONArray result = WQL.getWO("QJN_QUERY001").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 updateDeviceStatus(Map jsonObject) { + //修改任务的状态 + String device_code = jsonObject.get("device_code"); + String type = jsonObject.get("type"); + String status = jsonObject.get("status"); + String material_type = jsonObject.get("material_type"); + String batch = jsonObject.get("batch"); + JSONObject resultJson = new JSONObject(); + DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class); + + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + Device device = appService.findDeviceByCode(device_code); + //无光电普通站点 + StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver; + + DeviceDto dto = deviceService.findByCode(device_code); + + if (Boolean.parseBoolean(device.getIslock())) { + resultJson.put("code", "0"); + resultJson.put("desc", "已有任务无法绑定!"); + resultJson.put("result", new JSONObject()); + return resultJson; + } + //修改 + if (type.equals("1")) { + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + + if (StrUtil.equals("0", material_type)) { + status = "0"; + } + if (StrUtil.equals("1", material_type)) { + status = "1"; + } + if ("2,3,4,5".contains(material_type)) { + status = "2"; + } + standardOrdinarySiteDeviceDriver.setHasGoods(Integer.parseInt(status)); + device.setHas_goods(Integer.parseInt(status)); + JSONObject jo = new JSONObject(); + jo.put("device_code", device_code); + jo.put("hasGoodStatus", status); + jo.put("batch", batch); + jo.put("material_type", material_type); + deviceService.changeDeviceStatus(jo); + if (!StrUtil.isEmpty(material_type)) { + standardOrdinarySiteDeviceDriver.setMaterial(material_type); + } + if (!StrUtil.isEmpty(batch)) { + standardOrdinarySiteDeviceDriver.setBatch(batch); + } + } + } + //清空 + if (type.equals("2")) { + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + standardOrdinarySiteDeviceDriver.setHasGoods(0); + device.setHas_goods(0); + JSONObject jo = new JSONObject(); + jo.put("device_code", device_code); + jo.put("hasGoodStatus", "0"); + jo.put("batch", ""); + jo.put("material_type", ""); + deviceService.changeDeviceStatus(jo); + standardOrdinarySiteDeviceDriver.setMaterial(""); + standardOrdinarySiteDeviceDriver.setBatch(""); + } + } + resultJson.put("code", "1"); + resultJson.put("desc", "更新成功"); + resultJson.put("result", new JSONObject()); + + return resultJson; + } + + @SneakyThrows + @Override + public Map handleLogin(Map jsonObject) { + JSONObject resultJson = new JSONObject(); + String user = jsonObject.get("user"); + String password = jsonObject.get("password"); + if (StrUtil.isEmpty("user")) { + resultJson.put("code", "1"); + resultJson.put("desc", "用户不能为空"); + return resultJson; + } + if (StrUtil.isEmpty("password")) { + resultJson.put("code", "1"); + resultJson.put("desc", "密码不能为空!"); + return resultJson; + } + boolean is_match = false; + Long account_id = 0L; + try { + String pwd = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, password); + UserDto userDto = userService.findByName(user); + account_id = userDto.getId(); + //is_match = passwordEncoder.matches(pwd, userDto.getPassword()); + + } catch (Exception e) { + e.printStackTrace(); + } + + if (is_match) { + resultJson.put("code", "1"); + resultJson.put("desc", "登陆成功"); + } else { + resultJson.put("code", "2"); + resultJson.put("desc", "登陆失败!"); + } + JSONObject jo = new JSONObject(); + jo.put("user_name", user); + jo.put("account_id", account_id); + resultJson.put("result", jo); + 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) { + jo.put("code", "2"); + jo.put("desc", "未找到该指令!"); + jo.put("result", ""); + return jo; + } + if (StrUtil.equals(instwo.getString("instruction_status"), "2") || + StrUtil.equals(instwo.getString("instruction_status"), "3")) { + jo.put("code", "2"); + jo.put("desc", "指令已完成或已取消,无法操作"); + jo.put("result", ""); + return jo; + } + String task_id = instwo.getString("task_id"); + Instruction instdto = (Instruction) instwo.toJavaObject(Instruction.class); + XianGongAgvService agvService = SpringContextHolder.getBean(XianGongAgvService.class); + InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); + + /* 1 指令撤销 + 2 重新下发 + 3 强制完成*/ + if (type.equals("1")) { + //调用agv删除任务的接口 + + try { + //agvService.deleteAgvInst(instwo.getString("instruction_code")); + instructionService.cancel(inst_uuid); + agvService.deleteXZAgvInst(instdto.getInstruction_code()); + + } catch (Exception e) { + jo.put("code", "2"); + jo.put("desc", "下发agv失败"); + jo.put("result", ""); + return jo; + } + } + if (type.equals("2")) { + try { + agvService.sendOrderSequencesToXZ(instdto); + } catch (Exception e) { + jo.put("code", "2"); + jo.put("desc", "下发agv失败"); + 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) throws Exception { + 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); + String task_code = taskjo.getString("task_code"); + String start_point_code = taskjo.getString("start_point_code"); + String next_point_code = taskjo.getString("next_point_code"); + String task_id = taskjo.getString("task_id"); + + if (StrUtil.isEmpty(task_uuid)) { + throw new BadRequestException("id不能为空!"); + } + if (StrUtil.isEmpty(type)) { + throw new BadRequestException("操作类型不能为空!"); + } + if (StrUtil.equals(taskjo.getString("task_status"), "2") || + StrUtil.equals(taskjo.getString("task_status"), "3")) { + jo.put("code", "2"); + jo.put("desc", "任务已完成或已取消,无法操作"); + jo.put("result", ""); + return jo; + } + //重新生成 + 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("material")); + 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"); + instdto.setIs_delete("0"); + InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); + WQLObject instwo = WQLObject.getWQLObject("acs_instruction"); + JSONObject instcheckjson = instwo.query(" instruction_status <2 and next_point_code= '" + next_point_code + "'" + " and start_point_code = '" + start_point_code + "'" + " and task_id = '" + task_id + "'").uniqueResult(0); + if (instcheckjson != null) { + jo.put("code", "2"); + jo.put("desc", "操作失败"); + jo.put("result", task_code + ":该任务已存在待完成指令!"); + return jo; + } + try { + instructionService.create(instdto); + } 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 = taskjo.toJavaObject(TaskDto.class); + InstructionService instructionservice = SpringContextHolder.getBean(InstructionServiceImpl.class); + InstructionDto instdto = instructionservice.findByTaskid(acsTask.getTask_id(), "instruction_status <2 "); + if (instdto != null) { + jo.put("code", "0"); + jo.put("desc", "有指令未完成!"); + jo.put("result", new JSONObject()); + return jo; + } + taskService.finish(acsTask.getTask_id()); + Device startDevice = deviceAppService.findDeviceByCode(acsTask.getStart_device_code()); + Device nextDevice = deviceAppService.findDeviceByCode(acsTask.getNext_device_code()); + startDevice.setIslock("false"); + nextDevice.setIslock("false"); + } + + + jo.put("code", "1"); + jo.put("desc", "操作成功"); + jo.put("result", new JSONObject()); + return jo; + } + + @Override + public Map queryMaterial() { + JSONArray resultArr = WQL.getWO("QJN_QUERY001").addParam("flag", "5").process().getResultJSONArray(0); + JSONObject jo = new JSONObject(); + jo.put("code", "1"); + jo.put("desc", "查询成功"); + jo.put("result", resultArr); + return jo; + } + + @Override + public Map createTask2(Map whereJson) { + String type = whereJson.get("type"); + String material_type = whereJson.get("material_type"); + String batch = whereJson.get("batch"); + String start_device_code = whereJson.get("start_devicecode"); + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + Device startdevice = appService.findDeviceByCode(start_device_code); + if (Boolean.parseBoolean(startdevice.getIslock())) { + JSONObject jo = new JSONObject(); + jo.put("code", "0"); + jo.put("desc", "起点设备已被锁定"); + return jo; + } + if (StrUtil.isEmpty(type)) { + throw new BadRequestException("操作类型不能为空!"); + } + if (StrUtil.isEmpty(start_device_code)) { + throw new BadRequestException("起点不能为空!"); + } + String plan_code = ""; + if (StrUtil.equals(type, "1")) { + plan_code = "normal"; + } else if (StrUtil.equals(type, "2")) { + plan_code = "one"; + } + RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); + String plan_uuid = WQLObject.getWQLObject("acs_route_plan").query("plan_code= '" + plan_code + "'").uniqueResult(0).getString("plan_uuid"); + + JSONArray ja = routelineserver.queryNextLine(start_device_code, plan_uuid); + if (ObjectUtil.isEmpty(ja)) { + JSONObject jo = new JSONObject(); + jo.put("code", "0"); + jo.put("desc", "未找到对应路由"); + return jo; + } + JSONObject form = new JSONObject(); + form.put("type", type); + form.put("material_type", material_type); + form.put("batch", batch); + form.put("start_device_code", start_device_code); + + deviceService.autoCreateTask(form); + JSONObject jo = new JSONObject(); + jo.put("code", "1"); + jo.put("desc", "创建成功"); + +// try{ +// Thread.sleep(1000); +// +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } + + return jo; + } + + +} diff --git a/acs/nladmin-system/src/main/java/org/nl/hand/amb/wql/QJN_QUERY001.wql b/acs/nladmin-system/src/main/java/org/nl/hand/amb/wql/QJN_QUERY001.wql new file mode 100644 index 0000000..2f2e235 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/hand/amb/wql/QJN_QUERY001.wql @@ -0,0 +1,205 @@ +[交易说明] + 交易名: 手持接口查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.key TYPEAS s_string + 输入.keyword TYPEAS s_string + 输入.start_point TYPEAS s_string + 输入.next_point TYPEAS s_string + 输入.detail_id 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, + task.material AS material_type, + sys2.label AS material_type_name, + task.task_status AS task_status, + sys.label AS task_status_name, + task.vehicle_code AS carrier, + task.create_time, + task.priority + FROM + acs_task task + INNER JOIN + sys_dict_detail AS sys ON sys.VALUE = task.task_status + AND + sys.NAME = 'task_status' + LEFT JOIN + sys_dict_detail AS 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 + ENDOPTION + OPTION 输入.start_point <> "" + task.start_point_code like 输入.start_point + ENDOPTION + OPTION 输入.next_point <> "" + task.next_point_code like 输入.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.label AS inst_status_name, + inst.execute_message AS inst_step, + inst.vehicle_code AS carrier, + inst.carno, + inst.priority, + inst.send_status, + inst.create_time, + inst.material AS material_type, + dtl2.label AS material_type_name, + dtl3.label AS send_status_name + FROM + acs_instruction inst + LEFT JOIN sys_dict_detail AS dtl ON dtl.VALUE = inst.instruction_status + AND dtl.NAME = 'inst_status' + LEFT JOIN sys_dict_detail dtl2 ON dtl2.VALUE = inst.material + AND dtl2.NAME = 'material_type' + LEFT JOIN sys_dict_detail dtl3 ON dtl3.VALUE = inst.send_status + AND dtl3.NAME = 'send_status' + WHERE + inst.is_delete = '0' + AND inst.instruction_status < '2' + OPTION 输入.key <> "" + inst.instruction_code like 输入.key + ENDOPTION + OPTION 输入.start_point <> "" + inst.start_point_code like 输入.start_point + ENDOPTION + OPTION 输入.next_point <> "" + inst.next_point_code like 输入.next_point + 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' + order by + dict_sort + ENDSELECT + ENDQUERY + ENDIF diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java b/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java index be68a17..760924e 100644 --- a/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java +++ b/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java @@ -115,6 +115,7 @@ public class AutoCreateInst { instdto.setInstruction_status("0"); instdto.setExecute_device_code(start_point_code); instdto.setVehicle_type(vehicleType); + instdto.setIs_delete("0"); try { instructionService.create(instdto); } catch (Exception e) { diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/security/satoken/TokenKeyExpirationListener.java b/acs/nladmin-system/src/main/java/org/nl/modules/security/satoken/TokenKeyExpirationListener.java deleted file mode 100644 index 7737724..0000000 --- a/acs/nladmin-system/src/main/java/org/nl/modules/security/satoken/TokenKeyExpirationListener.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.nl.modules.security.satoken; - - -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.mnt.websocket.MsgType; -import org.nl.modules.mnt.websocket.SocketMsg; -import org.nl.modules.mnt.websocket.WebSocketServer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.connection.Message; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; -import org.springframework.data.redis.listener.RedisMessageListenerContainer; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; - -/** - * @author: lyd - * @description: - * @Date: 2022/10/8 - */ -@Slf4j -@Component -public class TokenKeyExpirationListener extends KeyExpirationEventMessageListener { - @Autowired - private StringRedisTemplate redisTemplate; - - public TokenKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { - super(listenerContainer); - } - - @Override - public void onMessage(Message message, byte[] pattern) { - // 监听过期的key - String expireKey = new String(message.getBody(), StandardCharsets.UTF_8); - //获取key原本的value 获取不到 是null - String expireKeyValue = redisTemplate.opsForValue().get("my-satoken"); - //我是根据tokenvalues作为主键ID的 - String[] split = expireKey.split(":"); - String s = split[split.length - 1]; - try { - WebSocketServer.sendInfo(new SocketMsg("token会话过期!", MsgType.INFO), "exp-token"); - } catch (IOException e) { - log.error(e.getMessage(), e); - } - log.info("expireKey---"+expireKey); - log.info("expireKeyValue---"+expireKeyValue); - } - -} diff --git a/acs/nladmin-system/src/main/resources/config/application-prod.yml b/acs/nladmin-system/src/main/resources/config/application-prod.yml index 3dc4585..8b85a81 100644 --- a/acs/nladmin-system/src/main/resources/config/application-prod.yml +++ b/acs/nladmin-system/src/main/resources/config/application-prod.yml @@ -6,11 +6,9 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:ndxy3_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:ndxy3_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:nmd_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:P@ssw0rd} - # password: ${DB_PWD:Root.123456} + password: ${DB_PWD:123456} # 初始连接数 initial-size: 5 # 最小连接数 @@ -54,7 +52,7 @@ spring: multi-statement-allow: true redis: #数据库索引 - database: ${REDIS_DB:15} + database: ${REDIS_DB:0} host: ${REDIS_HOST:127.0.0.1} port: ${REDIS_PORT:6379} password: ${REDIS_PWD:} diff --git a/acs/nladmin-system/src/main/resources/logback-spring.xml b/acs/nladmin-system/src/main/resources/logback-spring.xml index b18890b..dd0b565 100644 --- a/acs/nladmin-system/src/main/resources/logback-spring.xml +++ b/acs/nladmin-system/src/main/resources/logback-spring.xml @@ -12,7 +12,7 @@ https://juejin.cn/post/6844903775631572999 nlAdmin + value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/> diff --git a/acs/nladmin-ui/src/settings.js b/acs/nladmin-ui/src/settings.js index 1d46e5e..91fbaf4 100644 --- a/acs/nladmin-ui/src/settings.js +++ b/acs/nladmin-ui/src/settings.js @@ -40,7 +40,7 @@ module.exports = { /** * @description token key */ - TokenKey: 'EL-ADMIN-TOEKN', + TokenKey: 'NL-ACS-TOEKN', /** * @description 请求超时时间,毫秒(默认2分钟) */ diff --git a/lms/nladmin-system/doc/sch2.xls b/lms/nladmin-system/doc/sch2.xls deleted file mode 100644 index 4085eed..0000000 Binary files a/lms/nladmin-system/doc/sch2.xls and /dev/null differ diff --git a/lms/nladmin-system/doc/永裕家居LMS系统.postman_collection.json b/lms/nladmin-system/doc/永裕家居LMS系统.postman_collection.json deleted file mode 100644 index 0c91cb5..0000000 --- a/lms/nladmin-system/doc/永裕家居LMS系统.postman_collection.json +++ /dev/null @@ -1,489 +0,0 @@ -{ - "info": { - "_postman_id": "584232a7-9ae4-4ca2-b4e5-d9e66870957e", - "name": "永裕家居LMS系统", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" - }, - "item": [ - { - "name": "示例", - "description": "", - "item": [ - { - "name": "LMS登录", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "56672d9d-9bac-4f23-b77e-809647ef5df4", - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "id": "48d9e766-7014-4243-80de-81d63be07da5", - "type": "text/javascript", - "exec": [ - "//postman使用:https://blog.csdn.net/wangyiyan315/article/details/122441791", - "", - "var JsonData = JSON.parse(responseBody); //定义一个变量,并且将请求返回的内容赋给该变量", - "pm.globals.set(\"lms_token\", JsonData.token.slice(7)); //7代表去掉token前面的Bearer加空格", - "" - ] - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\n\t\n\t\"username\":\"admin\",\n\t\"password\":\"uefvHbyUCADkudW1MV+/yw9XBWR2Z+KDyq+dqQ+ozr1loClUgqm4XQPsUl87IsXetYBWRDLo7HC++20VHlW80g==\"\n}" - }, - "url": { - "raw": "{{lms_url}}/mobile/auth/login", - "host": [ - "{{lms_url}}" - ], - "path": [ - "mobile", - "auth", - "login" - ] - }, - "description": "LMS登录并设置返回的token" - }, - "response": [] - }, - { - "name": "系统参数分页查询-示例", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "GET", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "/api/param" - }, - "url": { - "raw": "{{lms_url}}/api/param?sort=id,desc&size=10&page=0", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param" - ], - "query": [ - { - "key": "sort", - "value": "id,desc" - }, - { - "key": "size", - "value": "10" - }, - { - "key": "page", - "value": "0" - }, - { - "key": null, - "value": null - }, - { - "key": null, - "value": null - } - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - }, - { - "name": "根据编码获取值-示例", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "IS_CONNECT_ACS" - }, - "url": { - "raw": "{{lms_url}}/api/param/getValueByCode", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param", - "getValueByCode" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - }, - { - "name": "删除参数-示例", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "DELETE", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "[\"0c1d96d335cd4dd6aa0a4bee4b1c45fe\"]" - }, - "url": { - "raw": "{{lms_url}}/api/param", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - }, - { - "name": "新增参数-示例", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\"code\":\"test22\",\"is_active\":\"1\",\"remark\":\"test11\",\"name\":\"test11\",\"value\":\"test11\"}" - }, - "url": { - "raw": "{{lms_url}}/api/param", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - }, - { - "name": "修改参数-示例", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\"code\":\"test22\",\"is_active\":\"8\",\"create_time\":\"2022-10-14 13:33:52\",\"remark\":\"888\",\"update_time\":\"2022-10-14 13:33:52\",\"update_optname\":\"管理员\",\"create_id\":1,\"name\":\"888\",\"id\":\"3f1901b5814d40908bad602854b22aa6\",\"value\":\"8888\",\"update_optid\":1,\"create_name\":\"管理员\"}" - }, - "url": { - "raw": "{{lms_url}}/api/param", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - } - ] - }, - { - "name": "ACS请求LMS", - "description": "", - "item": [ - { - "name": "共挤线申请空盘", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\"type\":\"1\",\"point_code\":\"GJX01_K\",\"vehicle_code\":\"001\",\"qty\":\"100\",\"vehicle_type\":\"01\",\"vehicle_num\":\"1\"}" - }, - "url": { - "raw": "{{lms_url}}/api/wms/task/apply", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "wms", - "task", - "apply" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - }, - { - "name": "油漆线空盘入库", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\"code\":\"test22\",\"is_active\":\"1\",\"remark\":\"test11\",\"name\":\"test11\",\"value\":\"test11\"}" - }, - "url": { - "raw": "{{lms_url}}/api/param", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - } - ] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "32f60779-6a66-4d77-80e3-1bc0040e7650", - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "id": "fb339152-4984-49bb-8955-3e24baac67ae", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "variable": [ - { - "id": "9b318f5e-373b-4f36-93a5-d131f4f76446", - "key": "lms_url", - "value": "http://localhost:8010", - "type": "string", - "description": "" - }, - { - "id": "5557e8ff-f6ac-45b0-a950-4a8c139d1ae0", - "key": "acs_url", - "value": "http://localhost:8010", - "type": "string", - "description": "" - } - ] -} \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/security/satoken/TokenKeyExpirationListener.java b/lms/nladmin-system/src/main/java/org/nl/modules/security/satoken/TokenKeyExpirationListener.java deleted file mode 100644 index 7c256bd..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/modules/security/satoken/TokenKeyExpirationListener.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.nl.modules.security.satoken; - - -import cn.hutool.core.util.ObjectUtil; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.common.utils.SecurityUtils; -import org.nl.modules.mnt.websocket.MsgType; -import org.nl.modules.mnt.websocket.SocketMsg; -import org.nl.modules.mnt.websocket.WebSocketServer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.connection.Message; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; -import org.springframework.data.redis.listener.RedisMessageListenerContainer; -import org.springframework.stereotype.Component; - -import java.io.IOException; - -/** - * @author: lyd - * @description: redis过期key监听器 - * @Date: 2022/10/8 - */ -@Slf4j -@Component -public class TokenKeyExpirationListener extends KeyExpirationEventMessageListener { - @Autowired - private StringRedisTemplate redisTemplate; - - public TokenKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { - super(listenerContainer); - } - - @Override - public void onMessage(Message message, byte[] pattern) { - String expireKeyValue = redisTemplate.opsForValue().get("my-satoken"); - try { - if (ObjectUtil.isEmpty(expireKeyValue)) - WebSocketServer.sendInfo(new SocketMsg("token会话过期!", MsgType.INFO), "exp-token"); - } catch (IOException e) { - log.error(e.getMessage(), e); - } - } - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java index 33ab220..d3ef598 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java @@ -135,6 +135,14 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); + JSONObject existMaterial = WQLObject + .getWQLObject("md_me_materialbase") + .query("material_code = '" + dto.getMaterial_code() + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(existMaterial)) { + throw new BadRequestException("该物料号已存在"); + } + dto.setMaterial_id(IdUtil.getSnowflake(1L, 1L).nextId()); dto.setIs_used("1"); dto.setCreate_id(currentUserId); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleServiceImpl.java index 776e0af..68103fe 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleServiceImpl.java @@ -123,8 +123,8 @@ public class VehicleServiceImpl implements VehicleService { throw new BadRequestException("载具号" + vehicleCode + "存在组盘信息"); } JSONObject point = new JSONObject(); - point.put("vehicle_code", null); - pointTable.update(point, "vehicle_code = " + vehicleCode); + point.put("vehicle_code", ""); + pointTable.update(point, "vehicle_code = '" + vehicleCode + "'"); vehicleTable.delete("vehicle_id = " + vehicleId); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index 0fe289f..a4b7807 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -3,6 +3,7 @@ package org.nl.wms.ext.acs.rest; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -32,6 +33,7 @@ public class AcsToWmsController { @PostMapping("/status") @Log("ACS给WMS反馈任务状态") @ApiOperation("ACS给WMS反馈任务状态") + @SaIgnore public ResponseEntity receiveTaskStatusAcs(@RequestBody String string) { return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK); } @@ -39,6 +41,7 @@ public class AcsToWmsController { @PostMapping("/orderFinish") @Log("ACS给WMS下发工单完成状态") @ApiOperation("ACS给WMS下发工单完成状态") + @SaIgnore public ResponseEntity orderFinish(@RequestBody String string) { return new ResponseEntity<>(acsToWmsService.orderFinish(string), HttpStatus.OK); } @@ -46,7 +49,8 @@ public class AcsToWmsController { @PostMapping("/apply") @Log("申请任务") @ApiOperation("申请任务") - @SaCheckPermission("menu:list") +// @SaCheckPermission("menu:list") + @SaIgnore public ResponseEntity apply(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(acsToWmsService.apply(whereJson), HttpStatus.OK); } @@ -54,7 +58,8 @@ public class AcsToWmsController { @PostMapping("/againApply") @Log("二次申请任务") @ApiOperation("二次申请任务") - @SaCheckPermission("menu:list") +// @SaCheckPermission("menu:list") + @SaIgnore public ResponseEntity againApply(@RequestBody String task_id) { return new ResponseEntity<>(acsToWmsService.againApply(task_id), HttpStatus.OK); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/md/pb/VehicleStatus.java b/lms/nladmin-system/src/main/java/org/nl/wms/md/pb/VehicleStatus.java new file mode 100644 index 0000000..ea50d14 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/md/pb/VehicleStatus.java @@ -0,0 +1,20 @@ +package org.nl.wms.md.pb; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 张江玮 + * @date 2022/11/04 20:12 + */ +@AllArgsConstructor +@Getter +public enum VehicleStatus { + + EMPTY("1", "空载具"), + HAS_MATERIAL("2", "有物料"); + + private final String code; + + private final String name; +} 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..25b2d11 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java @@ -0,0 +1,123 @@ +package org.nl.wms.pda.rest; + +import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSON; +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.service.PdaService; +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 张江玮 + * @date 2022/11/04 18:16 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "手持接口") +@RequestMapping("/api/pda") +@Slf4j +public class PdaController { + + private final PdaService pdaService; + + @PostMapping("/region") + @Log("查询所有区域") + @ApiOperation("查询所有区域") + public ResponseEntity region() { + return new ResponseEntity<>(pdaService.region(), HttpStatus.OK); + } + + @PostMapping("/point") + @Log("根据区域查询点位") + @ApiOperation("根据区域查询点位") + public ResponseEntity point(@RequestBody JSONObject param) { + return new ResponseEntity<>(pdaService.point(param.getString("region_id")), HttpStatus.OK); + } + + @PostMapping("/vmByPoint") + @Log("查询点位上的载具及组盘信息") + @ApiOperation("查询点位上的载具及组盘信息") + public ResponseEntity vmByPoint(@RequestBody JSONObject param) { + return new ResponseEntity<>(pdaService.vmByPoint(param.getString("point_id")), HttpStatus.OK); + } + + @PostMapping("/bindPoint") + @Log("点位载具绑定") + @ApiOperation("点位载具绑定") + public ResponseEntity bindPoint(@RequestBody JSONObject param) { + pdaService.bindPoint(param.getString("point_id"), param.getString("vehicle_code")); + + return this.success(); + } + + @PostMapping("/vm") + @Log("组盘") + @ApiOperation("组盘") + public ResponseEntity vm(@RequestBody Map param) { + pdaService.vm(MapUtil.getStr(param, "vehicle_code"), JSON.parseArray(JSON.toJSONString(param.get("material")))); + + return this.success(); + } + + @PostMapping("/vmByvehicle") + @Log("查询载具及组盘信息") + @ApiOperation("查询载具及组盘信息") + public ResponseEntity vmByVehicle(@RequestBody JSONObject param) { + return new ResponseEntity<>(pdaService.vmByVehicle(param.getString("vehicle_code")), HttpStatus.OK); + } + + @PostMapping("/outbound") + @Log("确认出库") + @ApiOperation("确认出库") + public ResponseEntity outbound(@RequestBody JSONObject param) { + pdaService.outbound(param.getString("vehicle_code"), param.getJSONArray("vm")); + + return this.success(); + } + + @PostMapping("/queryMaterial") + @Log("查询物料") + @ApiOperation("查询物料") + public ResponseEntity queryMaterial() { + return new ResponseEntity<>(pdaService.queryMaterial(), HttpStatus.OK); + } + + @PostMapping("/queryInventory") + @Log("查询可出库信息") + @ApiOperation("查询可出库信息") + public ResponseEntity queryInventory(@RequestBody JSONObject param) { + return new ResponseEntity<>(pdaService.queryInventory(param.getString("material_code"), param.getString("vehicle_code")), HttpStatus.OK); + } + + @PostMapping("/task") + @Log("任务生成") + @ApiOperation("任务生成") + public ResponseEntity task(@RequestBody JSONObject param) { + pdaService.task( + param.getString("type"), + param.getString("point_id"), + param.getString("start_point_id"), + param.getString("next_point_id") + ); + + return this.success(); + } + + private ResponseEntity success() { + JSONObject result = new JSONObject(); + result.put("message", "操作成功"); + return new ResponseEntity<>(result, HttpStatus.OK); + } +} 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..ec68cd4 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java @@ -0,0 +1,31 @@ +package org.nl.wms.pda.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * @author 张江玮 + * @date 2022/11/04 18:25 + */ +public interface PdaService { + + JSONArray region(); + + JSONArray point(String regionId); + + JSONObject vmByPoint(String pointId); + + void bindPoint(String pointId, String vehicleCode); + + void vm(String vehicleCode, JSONArray materials); + + JSONArray vmByVehicle(String vehicleCode); + + void outbound(String vehicleCode, JSONArray materials); + + JSONArray queryMaterial(); + + JSONArray queryInventory(String materialCode, String vehicleCode); + + void task(String type, String pointId, String startPointId, String nextPointId); +} 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..1a3fa98 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java @@ -0,0 +1,417 @@ +package org.nl.wms.pda.service.impl; + +import cn.hutool.core.util.IdUtil; +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.md.pb.VehicleStatus; +import org.nl.wms.pda.service.PdaService; +import org.nl.wms.sch.base.point.LockType; +import org.nl.wms.sch.base.point.PointStatus; +import org.nl.wms.sch.base.point.PointType; +import org.nl.wms.sch.base.region.RegionEnum; +import org.nl.wms.sch.task.*; +import org.nl.wms.util.CommonUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author 张江玮 + * @date 2022/11/04 18:25 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class PdaServiceImpl implements PdaService { + + private final CallEmptyVehicleTask callEmptyVehicleTask; + + private final SendFullVehicleTask sendFullVehicleTask; + + private final CallMaterialTask callMaterialTask; + + private final SendResiduesMaterialTask sendResiduesMaterialTask; + + private final SendEmptyVehicleTask sendEmptyVehicleTask; + + @Override + public JSONArray region() { + return WQL.getWO("PDA").addParam("flag", "1").process().getResultJSONArray(0); + } + + @Override + public JSONArray point(String regionId) { + JSONArray points = WQL + .getWO("PDA") + .addParam("flag", "2") + .addParam("region_id", regionId) + .process() + .getResultJSONArray(0); + for (int i = 0; i < points.size(); i++) { + JSONObject point = points.getJSONObject(i); + if (StrUtil.equals(point.getString("lock_type"), LockType.TASK_LOCKED.getCode())) { + point.put("status", "2"); + } + } + + return points; + } + + @Override + public JSONObject vmByPoint(String pointId) { + JSONObject result = new JSONObject(); + + JSONObject point = WQLObject + .getWQLObject("sch_base_point") + .query("point_id = " + pointId) + .uniqueResult(0); + + if (StrUtil.equals(point.getString("point_status"), PointStatus.HAS_VEHICLE.getCode())) { + String vehicleCode = point.getString("vehicle_code"); + result.put("vehicle_code", vehicleCode); + + JSONArray detail = WQL + .getWO("PDA") + .addParam("flag", "3") + .addParam("vehicle_code", vehicleCode) + .process() + .getResultJSONArray(0); + result.put("detail", detail); + } else { + result.put("vehicle_code", ""); + result.put("detail", new JSONArray()); + } + + return result; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void bindPoint(String pointId, String vehicleCode) { + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject point = pointTable + .query("point_id = '" + pointId + "'") + .uniqueResult(0); + if (StrUtil.equals(point.getString("lock_type"), LockType.TASK_LOCKED.getCode())) { + throw new BadRequestException("该点位存在任务"); + } + + WQLObject ivtTable = WQLObject.getWQLObject("st_ivt_structivt"); + if (StrUtil.isNotEmpty(vehicleCode)) { + JSONObject vehicle = WQLObject.getWQLObject("md_pb_vehicle").query("vehicle_code = '" + vehicleCode + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(vehicle)) { + throw new BadRequestException("该载具号不存在"); + } + + JSONObject existPoint = pointTable.query("vehicle_code = '" + vehicleCode + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(existPoint) && !StrUtil.equals(pointId, existPoint.getString("point_id"))) { + throw new BadRequestException("该载具号存放于" + existPoint.getString("point_name")); + } + + if (StrUtil.equals(vehicle.getString("vehicle_status"), VehicleStatus.HAS_MATERIAL.getCode()) + && StrUtil.equals(point.getString("point_type"), PointType.STORAGE_LOCATION.getCode())) { + JSONObject vm = WQLObject + .getWQLObject("st_ivt_vehicle_material") + .query("vehicle_id = '" + vehicle.getString("vehicle_id") + "'", "create_time ASC") + .uniqueResult(0); + + JSONObject ivt = new JSONObject(); + ivt.put("stockrecord_id", IdUtil.getSnowflake(1L, 1L).nextId()); + ivt.put("point_id", pointId); + ivt.put("instorage_time", vm.getString("create_time")); + + ivtTable.insert(ivt); + } + + point.put("point_status", PointStatus.HAS_VEHICLE.getCode()); + point.put("vehicle_code", vehicleCode); + } else { + ivtTable.delete("point_id = " + pointId); + + point.put("point_status", PointStatus.EMPTY.getCode()); + point.put("vehicle_code", ""); + } + + + CommonUtils.addUpdateColum(point); + pointTable.update(point); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void vm(String vehicleCode, JSONArray materials) { + WQLObject vehicleTable = WQLObject.getWQLObject("md_pb_vehicle"); + JSONObject vehicle = vehicleTable.query("vehicle_code = '" + vehicleCode + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(vehicle)) { + throw new BadRequestException("该载具号不存在"); + } + String vehicleId = vehicle.getString("vehicle_id"); + + WQLObject vmTable = WQLObject.getWQLObject("st_ivt_vehicle_material"); + vmTable.delete("vehicle_id = " + vehicleId); + + if (ObjectUtil.isNotEmpty(materials)) { + WQLObject materialTable = WQLObject.getWQLObject("md_me_materialbase"); + for (Object o : materials) { + String code = ((JSONObject) o).getString("code"); + Double qty = ((JSONObject) o).getDouble("qty"); + + String materialCode = code.substring(0, 8); + String materialBatch = code.substring(8, 18); + + JSONObject material = materialTable + .query("material_code = '" + materialCode + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(material)) { + throw new BadRequestException("条码为" + code + "的物料信息不存在"); + } + + JSONObject vm = new JSONObject(); + vm.put("vm_id", IdUtil.getSnowflake(1L, 1L).nextId()); + vm.put("vehicle_id", vehicleId); + vm.put("material_id", material.getString("material_id")); + vm.put("material_qty", qty); + vm.put("material_batch", materialBatch); + CommonUtils.addCreateColum(vm); + vmTable.insert(vm); + } + + vehicle.put("vehicle_status", VehicleStatus.HAS_MATERIAL.getCode()); + } else { + vehicle.put("vehicle_status", VehicleStatus.EMPTY.getCode()); + } + + CommonUtils.addUpdateColum(vehicle); + vehicleTable.update(vehicle); + } + + @Override + public JSONArray vmByVehicle(String vehicleCode) { + return WQL + .getWO("PDA") + .addParam("flag", "3") + .addParam("vehicle_code", vehicleCode) + .process() + .getResultJSONArray(0); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void outbound(String vehicleCode, JSONArray materials) { + WQLObject vehicleTable = WQLObject.getWQLObject("md_pb_vehicle"); + JSONObject vehicle = vehicleTable.query("vehicle_code = '" + vehicleCode + "'").uniqueResult(0); + String vehicleId = vehicle.getString("vehicle_id"); + + WQLObject vmTable = WQLObject.getWQLObject("st_ivt_vehicle_material"); + JSONObject oldVm = vmTable.query("vehicle_id = '" + vehicleId + "'", "create_time ASC").uniqueResult(0); + vmTable.delete("vehicle_id = " + vehicleId); + WQLObject materialTable = WQLObject.getWQLObject("md_me_materialbase"); + + if (ObjectUtil.isNotEmpty(materials)) { + for (int i = 0; i < materials.size(); i++) { + JSONObject material = materials.getJSONObject(i); + String materialCode = material.getString("material_code"); + String materialQty = material.getString("material_qty"); + String materialBatch = material.getString("batch"); + + String materialId = materialTable + .query("material_code = '" + materialCode + "'") + .uniqueResult(0) + .getString("material_id"); + + JSONObject vm = new JSONObject(); + vm.put("vm_id", IdUtil.getSnowflake(1L, 1L).nextId()); + vm.put("vehicle_id", vehicleId); + vm.put("material_id", materialId); + vm.put("material_qty", materialQty); + vm.put("material_batch", materialBatch); + CommonUtils.addCreateColum(vm); + vm.put("create_time", oldVm.getString("create_time")); + vmTable.insert(vm); + } + + vehicle.put("vehicle_status", VehicleStatus.HAS_MATERIAL.getCode()); + } else { + vehicle.put("vehicle_status", VehicleStatus.EMPTY.getCode()); + } + + CommonUtils.addUpdateColum(vehicle); + vehicleTable.update(vehicle); + } + + @Override + public JSONArray queryMaterial() { + return WQL.getWO("PDA").addParam("flag", "4").process().getResultJSONArray(0); + } + + @Override + public JSONArray queryInventory(String materialCode, String vehicleCode) { + if (StrUtil.isNotEmpty(materialCode)) { + JSONObject material = WQLObject + .getWQLObject("md_me_materialbase") + .query("material_code = '" + materialCode + "'") + .uniqueResult(0); + + if (ObjectUtil.isEmpty(material)) { + throw new BadRequestException("该物料号不存在"); + } + } + + + if (StrUtil.isNotEmpty(vehicleCode)) { + JSONObject vehicle = WQLObject + .getWQLObject("md_pb_vehicle") + .query("vehicle_code = '" + vehicleCode + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(vehicle)) { + throw new BadRequestException("该载具号不存在"); + } + if (StrUtil.equals(vehicle.getString("vehicle_status"), VehicleStatus.EMPTY.getCode())) { + throw new BadRequestException("该载具为空载具"); + } + + JSONObject point = WQLObject + .getWQLObject("sch_base_point") + .query("vehicle_code = '" + vehicleCode + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("该载具不存在于点位上"); + } + if (!StrUtil.equals(point.getString("region_code"), RegionEnum.ZC.getCode())) { + throw new BadRequestException("该载具不在暂存区"); + } + if (StrUtil.equals(point.getString("is_used"), "0")) { + throw new BadRequestException("该载具所在点位已被禁用"); + } + } + + JSONArray result = WQL + .getWO("PDA") + .addParam("flag", "5") + .addParam("material_code", materialCode) + .addParam("vehicle_code", vehicleCode) + .process() + .getResultJSONArray(0); + if (ObjectUtil.isEmpty(result)) { + throw new BadRequestException("未找到符合条件的暂存区点位"); + } + + return result; + } + + @Override + public void task(String type, String pointId, String startPointId, String nextPointId) { + switch (type) { + case "1": + JSONObject point = WQLObject.getWQLObject("sch_base_point") + .query("point_id = '" + pointId + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("该点位不存在"); + } + if (StrUtil.equals(point.getString("lock_type"), LockType.TASK_LOCKED.getCode())) { + throw new BadRequestException("该点位存在任务"); + } + if (StrUtil.equals(point.getString("point_status"), PointStatus.HAS_VEHICLE.getCode())) { + throw new BadRequestException("该点位上有载具"); + } + if (!StrUtil.equals(point.getString("region_id"), RegionEnum.JL.getId())) { + throw new BadRequestException("只有接料区可以呼叫空载具"); + } + + JSONObject param = new JSONObject(); + param.put("point_id", pointId); + callEmptyVehicleTask.createTask(param); + break; + case "2": + point = WQLObject.getWQLObject("sch_base_point") + .query("point_id = '" + pointId + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("该点位不存在"); + } + if (StrUtil.equals(point.getString("lock_type"), LockType.TASK_LOCKED.getCode())) { + throw new BadRequestException("该点位存在任务"); + } + if (StrUtil.equals(point.getString("point_status"), PointStatus.EMPTY.getCode())) { + throw new BadRequestException("该点位为空位"); + } + String regionId = point.getString("region_id"); + if (StrUtil.equals(regionId, RegionEnum.ZC.getId()) + || (StrUtil.equals(regionId, RegionEnum.JJ.getId()) + && !point.getString("point_code").startsWith("JJR"))) { + throw new BadRequestException("只有交接区的入库位和接料区才能发起入库任务"); + } + + JSONObject vehicle = WQLObject + .getWQLObject("md_pb_vehicle") + .query("vehicle_code = '" + point.getString("vehicle_code") + "'") + .uniqueResult(0); + param = new JSONObject(); + param.put("point_id", pointId); + if (StrUtil.equals(vehicle.getString("vehicle_status"), VehicleStatus.EMPTY.getCode())) { + sendEmptyVehicleTask.createTask(param); + } + if (StrUtil.equals(vehicle.getString("vehicle_status"), VehicleStatus.HAS_MATERIAL.getCode())) { + if (StrUtil.equals(regionId, RegionEnum.JL.getId())) { + sendFullVehicleTask.createTask(param); + } + if (StrUtil.equals(regionId, RegionEnum.JJ.getId())) { + sendResiduesMaterialTask.createTask(param); + } + } + break; + case "3": + JSONObject startPoint = WQLObject + .getWQLObject("sch_base_point") + .query("point_id = '" + startPointId + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(startPoint)) { + throw new BadRequestException("起点不存在"); + } + if (StrUtil.equals(startPoint.getString("lock_type"), LockType.TASK_LOCKED.getCode())) { + throw new BadRequestException("起点存在任务"); + } + if (StrUtil.equals(startPoint.getString("point_status"), PointStatus.EMPTY.getCode())) { + throw new BadRequestException("起点为空位"); + } + + JSONObject startVehicle = WQLObject + .getWQLObject("md_pb_vehicle") + .query("vehicle_code = '" + startPoint.getString("vehicle_code") + "'") + .uniqueResult(0); + if (StrUtil.equals(startVehicle.getString("vehicle_status"), VehicleStatus.EMPTY.getCode())) { + throw new BadRequestException("起点上的载具为空载具"); + } + + JSONObject nextPoint = WQLObject + .getWQLObject("sch_base_point") + .query("point_id = " + nextPointId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(nextPoint)) { + throw new BadRequestException("终点不存在"); + } + if (StrUtil.equals(nextPoint.getString("lock_type"), LockType.TASK_LOCKED.getCode())) { + throw new BadRequestException("终点存在任务"); + } + if (StrUtil.equals(nextPoint.getString("point_status"), PointStatus.HAS_VEHICLE.getCode())) { + throw new BadRequestException("终点有载具"); + } + if (!StrUtil.equals(nextPoint.getString("region_id"), RegionEnum.JJ.getId()) + || !nextPoint.getString("point_code").startsWith("JJC")) { + throw new BadRequestException("只有终点为交接区的出库位才能生成出库任务"); + } + + param = new JSONObject(); + param.put("start_point_id", startPointId); + param.put("next_point_id", nextPointId); + callMaterialTask.createTask(param); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA.wql new file mode 100644 index 0000000..f74fe17 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA.wql @@ -0,0 +1,129 @@ +[交易说明] + 交易名: 任务分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.region_id TYPEAS s_string + 输入.vehicle_code TYPEAS s_string + 输入.material_code TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + region_id, + region_name + FROM + sch_base_region + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point_id, + point_name, + point_status AS `status`, + lock_type + FROM + sch_base_point + WHERE + region_id = 输入.region_id + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + material.material_code, + material.material_name, + vm.vm_id, + vm.material_qty, + vm.material_batch AS batch + FROM + st_ivt_vehicle_material vm + LEFT JOIN md_pb_vehicle vehicle ON vm.vehicle_id = vehicle.vehicle_id + LEFT JOIN md_me_materialbase material ON vm.material_id = material.material_id + WHERE + vehicle.vehicle_code = 输入.vehicle_code + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + material_code, + material_name + FROM + md_me_materialbase + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + point.point_id, + point.point_name, + point.vehicle_code, + material.material_code, + material.material_name, + vm.material_batch, + SUM( vm.material_qty ) AS material_qty + FROM + sch_base_point point + LEFT JOIN md_pb_vehicle vehicle ON point.vehicle_code = vehicle.vehicle_code + LEFT JOIN st_ivt_vehicle_material vm ON vehicle.vehicle_id = vm.vehicle_id + LEFT JOIN md_me_materialbase material ON vm.material_id = material.material_id + WHERE + point.point_status = '1' + AND point.is_used = '1' + AND point.lock_type = '1' + AND point.region_id = 1585921595338264576 + AND vehicle.vehicle_status = '2' + OPTION 输入.material_code <> "" + material.material_code = 输入.material_code + ENDOPTION + OPTION 输入.vehicle_code <> "" + vehicle.vehicle_code = 输入.vehicle_code + ENDOPTION + GROUP BY + point.point_id + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtils.java index 85a4c26..339b8c9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtils.java @@ -19,8 +19,8 @@ public class AcsUtils { String isConnect = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("is_connect_acs").getValue(); JSONObject result = new JSONObject(); if (StrUtil.equals("0", isConnect)) { - result.put("status", HttpStatus.OK.value()); - result.put("message", "下发成功,但未连接ACS!"); + result.put("status", HttpStatus.NOT_FOUND.value()); + result.put("message", "未连接ACS!"); result.put("data", new JSONObject()); return result; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/base/point/PointStatus.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/base/point/PointStatus.java index dff3089..c140764 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/base/point/PointStatus.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/base/point/PointStatus.java @@ -11,8 +11,8 @@ import lombok.Getter; @Getter public enum PointStatus { - EMPTY("1", "空位"), - HAS_VEHICLE("2", "有载具"); + EMPTY("0", "空位"), + HAS_VEHICLE("1", "有载具"); private final String code; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/base/point/PointType.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/base/point/PointType.java new file mode 100644 index 0000000..80dc496 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/base/point/PointType.java @@ -0,0 +1,20 @@ +package org.nl.wms.sch.base.point; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 张江玮 + * @date 2022/11/07 8:49 + */ +@AllArgsConstructor +@Getter +public enum PointType { + + POINT("1", "点位"), + STORAGE_LOCATION("2", "库位"); + + private final String code; + + private final String name; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java index a0bfd2d..c2ffa3b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -1,10 +1,15 @@ package org.nl.wms.sch.manage; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.sch.AcsUtils; +import org.nl.wms.sch.task.TaskStatus; import org.nl.wms.sch.task.dto.AcsTaskDTO; import java.util.List; @@ -107,15 +112,60 @@ public abstract class AbstractAcsTask { /** * */ - public JSONObject immediateNotifyAcs() { - List taskList = this.schedule(); - if (ObjectUtil.isNotEmpty(taskList)) { + public JSONObject immediateNotifyAcs(String taskId) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = taskTable + .query("task_id = " + taskId) + .getResultJSONArray(0); - JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList)); - return AcsUtils.notifyAcs("api/wms/task", arr); + if (ObjectUtil.isNotEmpty(tasks)) { + String taskStatus = ((JSONObject) tasks.get(0)).getString("task_status"); + if (!StrUtil.equals(taskStatus, TaskStatus.START_AND_END.getCode())) { + throw new BadRequestException("只能下发已确认起点和终点的任务"); + } + + JSONObject result = AcsUtils.notifyAcs("api/wms/task", tasks); + + String status = result.getString("status"); + String message = result.getString("message"); + //发送失败的任务JSON集合:task_id,message + JSONArray errArr = result.getJSONArray("errArr"); + + //任务下发以后,更新任务状态 + //成功 + if ("200".equals(status)) { + tasks.forEach(item -> { + JSONObject taskObj = new JSONObject(); + taskObj.put("task_id", ((JSONObject) item).getString("task_id")); + taskObj.put("task_status", TaskStatusEnum.ISSUE.getCode()); + taskObj.put("remark", "下发成功"); + taskObj.put("update_time", DateUtil.now()); + taskTable.update(taskObj); + }); + } else {//下发失败 + tasks.forEach(item -> { + JSONObject taskObj = new JSONObject(); + taskObj.put("task_id", ((JSONObject) item).getString("task_id")); +// taskObj.put("task_status", TaskStatusEnum.ISSUE.getCode()); + taskObj.put("remark", "下发失败:" + message); + taskObj.put("update_time", DateUtil.now()); + taskTable.update(taskObj); + }); + } + //处理下发错误的任务 + if (ObjectUtil.isNotEmpty(errArr)) { + //处理下发失败的任务 + for (int i = 0; i < errArr.size(); i++) { + JSONObject taskObj = errArr.getJSONObject(i); + taskObj.put("remark", "下发失败:"+taskObj.getString("message")); + taskObj.put("update_time", DateUtil.now()); + taskTable.update(taskObj); + } + } + + return result; } return null; - } /** diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreateTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreateTask.java index a057372..44be68c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreateTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreateTask.java @@ -31,7 +31,7 @@ public class AutoCreateTask { @SneakyThrows public void run() { if (ObjectUtil.isNull(subTypes) || subTypes.isEmpty()) { - Reflections reflections = new Reflections("org.nl.wms.sch.tasks"); + Reflections reflections = new Reflections("org.nl.wms.sch.task"); subTypes = reflections.getSubTypesOf(AbstractAcsTask.class); } if (ObjectUtil.isNull(taskTab)) taskTab = WQLObject.getWQLObject("sch_base_task"); @@ -97,7 +97,7 @@ public class AutoCreateTask { taskList.forEach(item -> { JSONObject taskObj = new JSONObject(); taskObj.put("task_id", item.getTask_id()); - taskObj.put("task_status", TaskStatusEnum.ISSUE.getCode()); +// taskObj.put("task_status", TaskStatusEnum.ISSUE.getCode()); taskObj.put("remark", "下发失败:" + message); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/CallEmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/CallEmptyVehicleTask.java index b35c271..c44d1eb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/CallEmptyVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/CallEmptyVehicleTask.java @@ -2,9 +2,9 @@ package org.nl.wms.sch.task; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; @@ -12,6 +12,7 @@ import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.sch.base.point.LockType; +import org.nl.wms.sch.base.point.PointStatus; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.task.dto.AcsTaskDTO; import org.nl.wms.sch.task.util.TaskUtils; @@ -19,7 +20,6 @@ import org.nl.wms.util.CommonUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; import java.util.List; /** @@ -29,7 +29,7 @@ import java.util.List; * @date 2022/11/01 10:12 */ @Service -@NoArgsConstructor +@RequiredArgsConstructor @Slf4j public class CallEmptyVehicleTask extends AbstractAcsTask { @@ -42,32 +42,7 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { */ @Override public List addTask() { - JSONArray tasks = WQLObject - .getWQLObject("sch_base_task") - .query("task_status = " + TaskStatus.START_AND_END.getCode() + " AND handle_class = " + THIS_CLASS_NAME) - .getResultJSONArray(0); - - ArrayList acsTasks = new ArrayList<>(); - for (Object o : tasks) { - JSONObject task = (JSONObject) o; - - AcsTaskDTO acsTask = AcsTaskDTO - .builder() - .task_id(task.getString("task_id")) - .task_code(task.getString("task_code")) - .task_type(task.getString("acs_task_type")) - .start_device_code(task.getString("point_code1")) - .next_device_code(task.getString("point_code2")) - .vehicle_code(task.getString("vehicle_code")) - .vehicle_type(task.getString("vehicle_type")) - .priority(task.getString("priority")) - .remark(task.getString("remark")) - .build(); - - acsTasks.add(acsTask); - } - - return acsTasks; + return TaskUtils.addTask(THIS_CLASS_NAME); } /** @@ -76,9 +51,31 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { * @param taskJSON 代表一条任务对象 * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 */ + @Transactional(rollbackFor = Exception.class) @Override public void updateTaskStatus(JSONObject taskJSON, String status) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + String taskCode = taskJSON.getString("task_code"); + JSONObject task = taskTable + .query("task_code = '" + taskCode + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务号为" + taskCode + "的任务"); + } + if (StrUtil.equals(status, "0")) { + this.cancel(task.getString("task_id")); + } + + if (StrUtil.equals(status, TaskStatus.EXECUTING.getCode())) { + task.put("task", TaskStatus.EXECUTING.getCode()); + CommonUtils.addAdminUpdateColum(task); + taskTable.update(task); + } + + if (StrUtil.equals(status, TaskStatus.FINISHED.getCode())) { + this.finishTask(task, TaskFinishedType.AUTO); + } } /** @@ -110,7 +107,7 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { CommonUtils.addCommonColum(task); WQLObject.getWQLObject("sch_base_task").insert(task); - point.put("lock_type", "2"); + point.put("lock_type", LockType.TASK_LOCKED.getCode()); CommonUtils.addUpdateColum(point); pointTable.update(point); @@ -125,7 +122,15 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { @Transactional(rollbackFor = Exception.class) @Override public void forceFinish(String taskId) { + JSONObject task = WQLObject + .getWQLObject("sch_base_task") + .query("task_id = " + taskId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(task, TaskFinishedType.MANUAL); } /** @@ -133,9 +138,42 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { * * @param taskId 任务标识 */ + @Transactional(rollbackFor = Exception.class) @Override public void cancel(String taskId) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + JSONObject task = taskTable + .query("task_id = " + taskId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("该任务不存在"); + } + if (StrUtil.equals(task.getString("task_status"), TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("已完成的任务不能取消"); + } + taskTable.delete(task); + + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + String startPointCode = task.getString("point_code1"); + if (StrUtil.isNotEmpty(startPointCode)) { + JSONObject startPoint = pointTable + .query("point_code = '" + startPointCode + "'") + .uniqueResult(0); + startPoint.put("lock_type", LockType.UNLOCKED.getCode()); + CommonUtils.addAdminUpdateColum(startPoint); + pointTable.update(startPoint); + } + + String nextPointCode = task.getString("point_code2"); + if (StrUtil.isNotEmpty(nextPointCode)) { + JSONObject nextPoint = pointTable + .query("point_code = '" + nextPointCode + "'") + .uniqueResult(0); + nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); + CommonUtils.addAdminUpdateColum(nextPoint); + pointTable.update(nextPoint); + } } /** @@ -146,7 +184,7 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { public void findStartPoint() { WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); JSONArray tasks = taskTable - .query("task_status = " + TaskStatus.SURE_END.getCode() + " AND handle_class = " + THIS_CLASS_NAME) + .query("task_status = " + TaskStatus.SURE_END.getCode() + " AND handle_class = '" + THIS_CLASS_NAME + "'") .getResultJSONArray(0); for (Object o : tasks) { @@ -161,13 +199,51 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { task.put("task_status", TaskStatus.START_AND_END.getCode()); task.put("point_code1", point.getString("point_code")); task.put("vehicle_code", point.getString("vehicle_code")); - CommonUtils.addUpdateColum(task); + CommonUtils.addAdminUpdateColum(task); taskTable.update(task); JSONObject lockPoint = new JSONObject(); lockPoint.put("lock_type", LockType.TASK_LOCKED.getCode()); + CommonUtils.addAdminUpdateColum(lockPoint); WQLObject.getWQLObject("sch_base_point").update(lockPoint, "point_id = " + point.getString("point_id")); } } } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, TaskFinishedType taskFinishedType) { + String taskStatus = task.getString("task_status"); + if (StrUtil.equals(taskStatus, TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成"); + } + if (!StrUtil.equals(taskStatus, TaskStatus.START_AND_END.getCode()) + && taskFinishedType.equals(TaskFinishedType.MANUAL)) { + throw new BadRequestException("只有已确认起点和终点的任务可以手动完成"); + } + + task.put("finished_type", taskFinishedType.getCode()); + task.put("task_status", TaskStatus.FINISHED.getCode()); + CommonUtils.addAdminUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject startPoint = pointTable + .query("point_code = '" + task.getString("point_code1") + "'") + .uniqueResult(0); + JSONObject nextPoint = pointTable + .query("point_code = '" + task.getString("point_code2") + "'") + .uniqueResult(0); + + nextPoint.put("point_status", PointStatus.HAS_VEHICLE.getCode()); + nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); + nextPoint.put("vehicle_code", startPoint.getString("vehicle_code")); + CommonUtils.addAdminUpdateColum(nextPoint); + pointTable.update(nextPoint); + + startPoint.put("point_status", PointStatus.EMPTY.getCode()); + startPoint.put("lock_type", LockType.UNLOCKED.getCode()); + startPoint.put("vehicle_code", ""); + CommonUtils.addAdminUpdateColum(startPoint); + pointTable.update(startPoint); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/CallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/CallMaterialTask.java new file mode 100644 index 0000000..557bfc1 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/CallMaterialTask.java @@ -0,0 +1,235 @@ +package org.nl.wms.sch.task; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.base.point.LockType; +import org.nl.wms.sch.base.point.PointStatus; +import org.nl.wms.sch.base.point.PointType; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.task.dto.AcsTaskDTO; +import org.nl.wms.sch.task.util.TaskUtils; +import org.nl.wms.util.CommonUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 纽迪希亚3呼叫原料出库任务 + * + * @author 张江玮 + * @date 2022/11/07 20:03 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class CallMaterialTask extends AbstractAcsTask { + + private static final String THIS_CLASS_NAME = CallMaterialTask.class.getName(); + + /** + * 添加任务进行下发 + * + * @return + */ + @Override + public List addTask() { + return TaskUtils.addTask(THIS_CLASS_NAME); + } + + /** + * @param taskJSON 代表一条任务对象 + * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 + * @return + * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 + * @author ldjun + * @created 2019年4月17日 下午8:51:50 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTaskStatus(JSONObject taskJSON, String status) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + String taskCode = taskJSON.getString("task_code"); + JSONObject task = taskTable + .query("task_code = '" + taskCode + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务号为" + taskCode + "的任务"); + } + + if (StrUtil.equals(status, "0")) { + this.cancel(task.getString("task_id")); + } + + if (StrUtil.equals(status, TaskStatus.EXECUTING.getCode())) { + task.put("task", TaskStatus.EXECUTING.getCode()); + CommonUtils.addAdminUpdateColum(task); + taskTable.update(task); + } + + if (StrUtil.equals(status, TaskStatus.FINISHED.getCode())) { + this.finishTask(task, TaskFinishedType.AUTO); + } + } + + /** + * @param param 创建任务需要的参数 + * @return 返回任务标识 + */ + @Override + public String createTask(JSONObject param) { + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject nextPoint = pointTable + .query("point_id = " + param.getString("next_point_id")) + .uniqueResult(0); + if (ObjectUtil.isEmpty(nextPoint)) { + throw new BadRequestException("终点不存在"); + } + + JSONObject startPoint = pointTable + .query("point_id = " + param.getString("start_point_id")) + .uniqueResult(0); + if (ObjectUtil.isEmpty(startPoint)) { + throw new BadRequestException("指定的料车点位不存在"); + } + + JSONObject task = new JSONObject(); + String taskId = IdUtil.getSnowflake(1L, 1L).nextIdStr(); + task.put("task_id", taskId); + task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + task.put("task_type", TaskType.CALL_MATERIAL.getCode()); + task.put("task_status", TaskStatus.START_AND_END.getCode()); + task.put("point_code1", startPoint.getString("point_code")); + task.put("point_code2", nextPoint.getString("point_code")); + task.put("vehicle_code", startPoint.getString("vehicle_code")); + task.put("handle_class", THIS_CLASS_NAME); + task.put("create_mode", CreateMode.SCCJ.getCode()); + CommonUtils.addCommonColum(task); + WQLObject.getWQLObject("sch_base_task").insert(task); + + startPoint.put("lock_type", LockType.TASK_LOCKED.getCode()); + CommonUtils.addUpdateColum(startPoint); + pointTable.update(startPoint); + + nextPoint.put("lock_type", LockType.TASK_LOCKED.getCode()); + CommonUtils.addUpdateColum(nextPoint); + pointTable.update(nextPoint); + + return taskId; + } + + /** + * @param taskId 任务标识 + * @return + * @discription 强制结束完成任务 + * @author ldjun + * @created 2020年6月19日 上午10:34:58 + */ + @Override + public void forceFinish(String taskId) { + JSONObject task = WQLObject + .getWQLObject("sch_base_task") + .query("task_id = " + taskId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("该任务不存在"); + } + + this.finishTask(task, TaskFinishedType.MANUAL); + } + + /** + * 取消任务,货物搬回原点 + * + * @param taskId + */ + @Override + public void cancel(String taskId) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + JSONObject task = taskTable + .query("task_id = " + taskId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("该任务不存在"); + } + if (StrUtil.equals(task.getString("task_status"), TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("已完成的任务不能取消"); + } + + taskTable.delete(task); + + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + String startPointCode = task.getString("point_code1"); + if (StrUtil.isNotEmpty(startPointCode)) { + JSONObject startPoint = pointTable + .query("point_code = '" + startPointCode + "'") + .uniqueResult(0); + startPoint.put("lock_type", LockType.UNLOCKED.getCode()); + CommonUtils.addAdminUpdateColum(startPoint); + pointTable.update(startPoint); + } + + String nextPointCode = task.getString("point_code2"); + if (StrUtil.isNotEmpty(nextPointCode)) { + JSONObject nextPoint = pointTable + .query("point_code = '" + nextPointCode + "'") + .uniqueResult(0); + nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); + CommonUtils.addAdminUpdateColum(nextPoint); + pointTable.update(nextPoint); + } + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, TaskFinishedType taskFinishedType) { + String taskStatus = task.getString("task_status"); + if (StrUtil.equals(taskStatus, TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成"); + } + if (!StrUtil.equals(taskStatus, TaskStatus.START_AND_END.getCode()) + && taskFinishedType.equals(TaskFinishedType.MANUAL)) { + throw new BadRequestException("只有已确认起点和终点的任务可以手动完成"); + } + + task.put("finished_type", taskFinishedType.getCode()); + task.put("task_status", TaskStatus.FINISHED.getCode()); + CommonUtils.addAdminUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject startPoint = pointTable + .query("point_code = '" + task.getString("point_code1") + "'") + .uniqueResult(0); + JSONObject nextPoint = pointTable + .query("point_code = '" + task.getString("point_code2") + "'") + .uniqueResult(0); + + if (StrUtil.equals(startPoint.getString("point_type"), PointType.STORAGE_LOCATION.getCode())) { + JSONObject vehicle = WQLObject + .getWQLObject("md_pb_vehicle") + .query("vehicle_code = '" + startPoint.getString("vehicle_code") + "'") + .uniqueResult(0); + + WQLObject.getWQLObject("st_ivt_structivt").delete("point_id = " + startPoint.getString("point_id")); + } + + nextPoint.put("point_status", PointStatus.HAS_VEHICLE.getCode()); + nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); + nextPoint.put("vehicle_code", startPoint.getString("vehicle_code")); + CommonUtils.addAdminUpdateColum(nextPoint); + pointTable.update(nextPoint); + + startPoint.put("point_status", PointStatus.EMPTY.getCode()); + startPoint.put("lock_type", LockType.UNLOCKED.getCode()); + startPoint.put("vehicle_code", ""); + CommonUtils.addAdminUpdateColum(startPoint); + pointTable.update(startPoint); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/SendEmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/SendEmptyVehicleTask.java new file mode 100644 index 0000000..f5e721b --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/SendEmptyVehicleTask.java @@ -0,0 +1,253 @@ +package org.nl.wms.sch.task; + +import cn.hutool.core.util.IdUtil; +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.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.base.point.LockType; +import org.nl.wms.sch.base.point.PointStatus; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.task.dto.AcsTaskDTO; +import org.nl.wms.sch.task.util.TaskUtils; +import org.nl.wms.util.CommonUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 纽迪希亚3呼叫空车入库 + * + * @author 张江玮 + * @date 2022/11/07 20:14 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class SendEmptyVehicleTask extends AbstractAcsTask { + + private static final String THIS_CLASS_NAME = SendEmptyVehicleTask.class.getName(); + + /** + * 添加任务进行下发 + * + * @return 所有这个类处理的已确认起点和终点任务 + */ + @Override + public List addTask() { + return TaskUtils.addTask(THIS_CLASS_NAME); + } + + /** + * @param taskJSON 代表一条任务对象 + * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 + * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 + * @author ldjun + * @created 2019年4月17日 下午8:51:50 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTaskStatus(JSONObject taskJSON, String status) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + String taskCode = taskJSON.getString("task_code"); + JSONObject task = taskTable + .query("task_code = '" + taskCode + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务号为" + taskCode + "的任务"); + } + + if (StrUtil.equals(status, "0")) { + this.cancel(task.getString("task_id")); + } + + if (StrUtil.equals(status, TaskStatus.EXECUTING.getCode())) { + task.put("task", TaskStatus.EXECUTING.getCode()); + CommonUtils.addAdminUpdateColum(task); + taskTable.update(task); + } + + if (StrUtil.equals(status, TaskStatus.FINISHED.getCode())) { + this.finishTask(task, TaskFinishedType.AUTO); + } + } + + /** + * @param param 创建任务需要的参数 + * + * @return 返回任务标识 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public String createTask(JSONObject param) { + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject point = pointTable + .query("point_id = " + param.getString("point_id")) + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("点位不存在"); + } + + JSONObject task = new JSONObject(); + String taskId = IdUtil.getSnowflake(1L, 1L).nextIdStr(); + task.put("task_id", taskId); + task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + task.put("task_type", TaskType.SEND_EMPTY_VEHICLE.getCode()); + task.put("task_status", TaskStatus.SURE_START.getCode()); + task.put("point_code1", point.getString("point_code")); + task.put("vehicle_code", point.getString("vehicle_code")); + task.put("handle_class", THIS_CLASS_NAME); + task.put("create_mode", CreateMode.SCCJ.getCode()); + CommonUtils.addCommonColum(task); + WQLObject.getWQLObject("sch_base_task").insert(task); + + point.put("lock_type", LockType.TASK_LOCKED.getCode()); + CommonUtils.addUpdateColum(point); + pointTable.update(point); + + return taskId; + } + + /** + * @param taskId 任务标识 + * @discription 强制结束完成任务 + * @author ldjun + * @created 2020年6月19日 上午10:34:58 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void forceFinish(String taskId) { + JSONObject task = WQLObject + .getWQLObject("sch_base_task") + .query("task_id = " + taskId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("该任务不存在"); + } + + this.finishTask(task, TaskFinishedType.MANUAL); + } + + /** + * 取消任务,货物搬回原点 + * + * @param taskId 任务标识 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void cancel(String taskId) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + JSONObject task = taskTable + .query("task_id = " + taskId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("该任务不存在"); + } + if (StrUtil.equals(task.getString("task_status"), TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("已完成的任务不能取消"); + } + + taskTable.delete(task); + + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + String startPointCode = task.getString("point_code1"); + if (StrUtil.isNotEmpty(startPointCode)) { + JSONObject startPoint = pointTable + .query("point_code = '" + startPointCode + "'") + .uniqueResult(0); + startPoint.put("lock_type", LockType.UNLOCKED.getCode()); + CommonUtils.addAdminUpdateColum(startPoint); + pointTable.update(startPoint); + } + + String nextPointCode = task.getString("point_code2"); + if (StrUtil.isNotEmpty(nextPointCode)) { + JSONObject nextPoint = pointTable + .query("point_code = '" + nextPointCode + "'") + .uniqueResult(0); + nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); + CommonUtils.addAdminUpdateColum(nextPoint); + pointTable.update(nextPoint); + } + } + + /** + * @return + * @discription 确定下一点位 + * @author ldjun + * @created 2020年6月12日 下午6:01:06 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void findNextPoint() { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = taskTable + .query("task_status = " + TaskStatus.SURE_START.getCode() + " AND handle_class = '" + THIS_CLASS_NAME + "'") + .getResultJSONArray(0); + + for (Object o : tasks) { + JSONObject point = WQL.getWO("TASK") + .addParam("flag", "2") + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + JSONObject task = (JSONObject) o; + + task.put("task_status", TaskStatus.START_AND_END.getCode()); + task.put("point_code2", point.getString("point_code")); + CommonUtils.addAdminUpdateColum(task); + taskTable.update(task); + + JSONObject lockPoint = new JSONObject(); + lockPoint.put("lock_type", LockType.TASK_LOCKED.getCode()); + CommonUtils.addAdminUpdateColum(lockPoint); + WQLObject.getWQLObject("sch_base_point").update(lockPoint, "point_id = " + point.getString("point_id")); + } + } + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, TaskFinishedType taskFinishedType) { + String taskStatus = task.getString("task_status"); + if (StrUtil.equals(taskStatus, TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成"); + } + if (!StrUtil.equals(taskStatus, TaskStatus.START_AND_END.getCode()) + && taskFinishedType.equals(TaskFinishedType.MANUAL)) { + throw new BadRequestException("只有已确认起点和终点的任务可以手动完成"); + } + + task.put("finished_type", taskFinishedType.getCode()); + task.put("task_status", TaskStatus.FINISHED.getCode()); + CommonUtils.addAdminUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject startPoint = pointTable + .query("point_code = '" + task.getString("point_code1") + "'") + .uniqueResult(0); + JSONObject nextPoint = pointTable + .query("point_code = '" + task.getString("point_code2") + "'") + .uniqueResult(0); + + nextPoint.put("point_status", PointStatus.HAS_VEHICLE.getCode()); + nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); + nextPoint.put("vehicle_code", startPoint.getString("vehicle_code")); + CommonUtils.addAdminUpdateColum(nextPoint); + pointTable.update(nextPoint); + + startPoint.put("point_status", PointStatus.EMPTY.getCode()); + startPoint.put("lock_type", LockType.UNLOCKED.getCode()); + startPoint.put("vehicle_code", ""); + CommonUtils.addAdminUpdateColum(startPoint); + pointTable.update(startPoint); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/SendFullVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/SendFullVehicleTask.java new file mode 100644 index 0000000..506e783 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/SendFullVehicleTask.java @@ -0,0 +1,274 @@ +package org.nl.wms.sch.task; + +import cn.hutool.core.util.IdUtil; +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.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.base.point.LockType; +import org.nl.wms.sch.base.point.PointStatus; +import org.nl.wms.sch.base.point.PointType; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.task.dto.AcsTaskDTO; +import org.nl.wms.sch.task.util.TaskUtils; +import org.nl.wms.util.CommonUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 纽迪希亚3送满料车任务 + * + * @author 张江玮 + * @date 2022/11/07 8:59 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class SendFullVehicleTask extends AbstractAcsTask { + + private static final String THIS_CLASS_NAME = SendFullVehicleTask.class.getName(); + + /** + * 添加任务进行下发 + * + * @return 所有这个类处理的已确认起点和终点任务 + */ + @Override + public List addTask() { + return TaskUtils.addTask(THIS_CLASS_NAME); + } + + /** + * @param taskJSON 代表一条任务对象 + * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 + * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 + * @author ldjun + * @created 2019年4月17日 下午8:51:50 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTaskStatus(JSONObject taskJSON, String status) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + String taskCode = taskJSON.getString("task_code"); + JSONObject task = taskTable + .query("task_code = '" + taskCode + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务号为" + taskCode + "的任务"); + } + + if (StrUtil.equals(status, "0")) { + this.cancel(task.getString("task_id")); + } + + if (StrUtil.equals(status, TaskStatus.EXECUTING.getCode())) { + task.put("task", TaskStatus.EXECUTING.getCode()); + CommonUtils.addAdminUpdateColum(task); + taskTable.update(task); + } + + if (StrUtil.equals(status, TaskStatus.FINISHED.getCode())) { + this.finishTask(task, TaskFinishedType.AUTO); + } + } + + /** + * @param param 创建任务需要的参数 + * + * @return 返回任务标识 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public String createTask(JSONObject param) { + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject point = pointTable + .query("point_id = " + param.getString("point_id")) + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("点位不存在"); + } + + JSONObject task = new JSONObject(); + String taskId = IdUtil.getSnowflake(1L, 1L).nextIdStr(); + task.put("task_id", taskId); + task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + task.put("task_type", TaskType.SEND_FULL_VEHICLE.getCode()); + task.put("task_status", TaskStatus.SURE_START.getCode()); + task.put("point_code1", point.getString("point_code")); + task.put("vehicle_code", point.getString("vehicle_code")); + task.put("handle_class", THIS_CLASS_NAME); + task.put("create_mode", CreateMode.SCCJ.getCode()); + CommonUtils.addCommonColum(task); + WQLObject.getWQLObject("sch_base_task").insert(task); + + point.put("lock_type", LockType.TASK_LOCKED.getCode()); + CommonUtils.addUpdateColum(point); + pointTable.update(point); + + return taskId; + } + + /** + * @param taskId 任务标识 + * @discription 强制结束完成任务 + * @author ldjun + * @created 2020年6月19日 上午10:34:58 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void forceFinish(String taskId) { + JSONObject task = WQLObject + .getWQLObject("sch_base_task") + .query("task_id = " + taskId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("该任务不存在"); + } + + this.finishTask(task, TaskFinishedType.MANUAL); + } + + /** + * 取消任务,货物搬回原点 + * + * @param taskId 任务标识 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void cancel(String taskId) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + JSONObject task = taskTable + .query("task_id = " + taskId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("该任务不存在"); + } + if (StrUtil.equals(task.getString("task_status"), TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("已完成的任务不能取消"); + } + + taskTable.delete(task); + + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + String startPointCode = task.getString("point_code1"); + if (StrUtil.isNotEmpty(startPointCode)) { + JSONObject startPoint = pointTable + .query("point_code = '" + startPointCode + "'") + .uniqueResult(0); + startPoint.put("lock_type", LockType.UNLOCKED.getCode()); + CommonUtils.addAdminUpdateColum(startPoint); + pointTable.update(startPoint); + } + + String nextPointCode = task.getString("point_code2"); + if (StrUtil.isNotEmpty(nextPointCode)) { + JSONObject nextPoint = pointTable + .query("point_code = '" + nextPointCode + "'") + .uniqueResult(0); + nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); + CommonUtils.addAdminUpdateColum(nextPoint); + pointTable.update(nextPoint); + } + } + + /** + * @return + * @discription 确定下一点位 + * @author ldjun + * @created 2020年6月12日 下午6:01:06 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void findNextPoint() { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = taskTable + .query("task_status = " + TaskStatus.SURE_START.getCode() + " AND handle_class = '" + THIS_CLASS_NAME + "'") + .getResultJSONArray(0); + + for (Object o : tasks) { + JSONObject point = WQL.getWO("TASK") + .addParam("flag", "2") + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + JSONObject task = (JSONObject) o; + + task.put("task_status", TaskStatus.START_AND_END.getCode()); + task.put("point_code2", point.getString("point_code")); + CommonUtils.addAdminUpdateColum(task); + taskTable.update(task); + + JSONObject lockPoint = new JSONObject(); + lockPoint.put("lock_type", LockType.TASK_LOCKED.getCode()); + CommonUtils.addAdminUpdateColum(lockPoint); + WQLObject.getWQLObject("sch_base_point").update(lockPoint, "point_id = " + point.getString("point_id")); + } + } + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, TaskFinishedType taskFinishedType) { + String taskStatus = task.getString("task_status"); + if (StrUtil.equals(taskStatus, TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成"); + } + if (!StrUtil.equals(taskStatus, TaskStatus.START_AND_END.getCode()) + && taskFinishedType.equals(TaskFinishedType.MANUAL)) { + throw new BadRequestException("只有已确认起点和终点的任务可以手动完成"); + } + + task.put("finished_type", taskFinishedType.getCode()); + task.put("task_status", TaskStatus.FINISHED.getCode()); + CommonUtils.addAdminUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject startPoint = pointTable + .query("point_code = '" + task.getString("point_code1") + "'") + .uniqueResult(0); + JSONObject nextPoint = pointTable + .query("point_code = '" + task.getString("point_code2") + "'") + .uniqueResult(0); + + + if (StrUtil.equals(nextPoint.getString("point_type"), PointType.STORAGE_LOCATION.getCode())) { + JSONObject vehicle = WQLObject + .getWQLObject("md_pb_vehicle") + .query("vehicle_code = '" + startPoint.getString("vehicle_code") + "'") + .uniqueResult(0); + + JSONObject vm = WQLObject + .getWQLObject("st_ivt_vehicle_material") + .query("vehicle_id = " + vehicle.getString("vehicle_id"), "create_time ASC") + .uniqueResult(0); + + JSONObject ivt = new JSONObject(); + ivt.put("stockrecord_id", IdUtil.getSnowflake(1L, 1L).nextId()); + ivt.put("point_id", nextPoint.getString("point_id")); + ivt.put("instorage_time", vm.getString("create_time")); + + WQLObject.getWQLObject("st_ivt_structivt").insert(ivt); + } + + nextPoint.put("point_status", PointStatus.HAS_VEHICLE.getCode()); + nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); + nextPoint.put("vehicle_code", startPoint.getString("vehicle_code")); + CommonUtils.addAdminUpdateColum(nextPoint); + pointTable.update(nextPoint); + + startPoint.put("point_status", PointStatus.EMPTY.getCode()); + startPoint.put("lock_type", LockType.UNLOCKED.getCode()); + startPoint.put("vehicle_code", ""); + CommonUtils.addAdminUpdateColum(startPoint); + pointTable.update(startPoint); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/SendResiduesMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/SendResiduesMaterialTask.java new file mode 100644 index 0000000..a91f585 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/SendResiduesMaterialTask.java @@ -0,0 +1,274 @@ +package org.nl.wms.sch.task; + +import cn.hutool.core.util.IdUtil; +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.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.base.point.LockType; +import org.nl.wms.sch.base.point.PointStatus; +import org.nl.wms.sch.base.point.PointType; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.task.dto.AcsTaskDTO; +import org.nl.wms.sch.task.util.TaskUtils; +import org.nl.wms.util.CommonUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 纽迪西亚3呼叫余料入库任务 + * + * @author 张江玮 + * @date 2022/11/07 20:19 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class SendResiduesMaterialTask extends AbstractAcsTask { + + private static final String THIS_CLASS_NAME = SendResiduesMaterialTask.class.getName(); + + /** + * 添加任务进行下发 + * + * @return 所有这个类处理的已确认起点和终点任务 + */ + @Override + public List addTask() { + return TaskUtils.addTask(THIS_CLASS_NAME); + } + + /** + * @param taskJSON 代表一条任务对象 + * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 + * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 + * @author ldjun + * @created 2019年4月17日 下午8:51:50 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTaskStatus(JSONObject taskJSON, String status) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + String taskCode = taskJSON.getString("task_code"); + JSONObject task = taskTable + .query("task_code = '" + taskCode + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务号为" + taskCode + "的任务"); + } + + if (StrUtil.equals(status, "0")) { + this.cancel(task.getString("task_id")); + } + + if (StrUtil.equals(status, TaskStatus.EXECUTING.getCode())) { + task.put("task", TaskStatus.EXECUTING.getCode()); + CommonUtils.addAdminUpdateColum(task); + taskTable.update(task); + } + + if (StrUtil.equals(status, TaskStatus.FINISHED.getCode())) { + this.finishTask(task, TaskFinishedType.AUTO); + } + } + + /** + * @param param 创建任务需要的参数 + * + * @return 返回任务标识 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public String createTask(JSONObject param) { + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject point = pointTable + .query("point_id = " + param.getString("point_id")) + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("点位不存在"); + } + + JSONObject task = new JSONObject(); + String taskId = IdUtil.getSnowflake(1L, 1L).nextIdStr(); + task.put("task_id", taskId); + task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + task.put("task_type", TaskType.SEND_RESIDUES_MATERIAL.getCode()); + task.put("task_status", TaskStatus.SURE_START.getCode()); + task.put("point_code1", point.getString("point_code")); + task.put("vehicle_code", point.getString("vehicle_code")); + task.put("handle_class", THIS_CLASS_NAME); + task.put("create_mode", CreateMode.SCCJ.getCode()); + CommonUtils.addCommonColum(task); + WQLObject.getWQLObject("sch_base_task").insert(task); + + point.put("lock_type", LockType.TASK_LOCKED.getCode()); + CommonUtils.addUpdateColum(point); + pointTable.update(point); + + return taskId; + } + + /** + * @param taskId 任务标识 + * @discription 强制结束完成任务 + * @author ldjun + * @created 2020年6月19日 上午10:34:58 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void forceFinish(String taskId) { + JSONObject task = WQLObject + .getWQLObject("sch_base_task") + .query("task_id = " + taskId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("该任务不存在"); + } + + this.finishTask(task, TaskFinishedType.MANUAL); + } + + /** + * 取消任务,货物搬回原点 + * + * @param taskId 任务标识 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void cancel(String taskId) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + JSONObject task = taskTable + .query("task_id = " + taskId) + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("该任务不存在"); + } + if (StrUtil.equals(task.getString("task_status"), TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("已完成的任务不能取消"); + } + + taskTable.delete(task); + + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + String startPointCode = task.getString("point_code1"); + if (StrUtil.isNotEmpty(startPointCode)) { + JSONObject startPoint = pointTable + .query("point_code = '" + startPointCode + "'") + .uniqueResult(0); + startPoint.put("lock_type", LockType.UNLOCKED.getCode()); + CommonUtils.addAdminUpdateColum(startPoint); + pointTable.update(startPoint); + } + + String nextPointCode = task.getString("point_code2"); + if (StrUtil.isNotEmpty(nextPointCode)) { + JSONObject nextPoint = pointTable + .query("point_code = '" + nextPointCode + "'") + .uniqueResult(0); + nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); + CommonUtils.addAdminUpdateColum(nextPoint); + pointTable.update(nextPoint); + } + } + + /** + * @return + * @discription 确定下一点位 + * @author ldjun + * @created 2020年6月12日 下午6:01:06 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void findNextPoint() { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = taskTable + .query("task_status = " + TaskStatus.SURE_START.getCode() + " AND handle_class = '" + THIS_CLASS_NAME + "'") + .getResultJSONArray(0); + + for (Object o : tasks) { + JSONObject point = WQL.getWO("TASK") + .addParam("flag", "2") + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + JSONObject task = (JSONObject) o; + + task.put("task_status", TaskStatus.START_AND_END.getCode()); + task.put("point_code2", point.getString("point_code")); + CommonUtils.addAdminUpdateColum(task); + taskTable.update(task); + + JSONObject lockPoint = new JSONObject(); + lockPoint.put("lock_type", LockType.TASK_LOCKED.getCode()); + CommonUtils.addAdminUpdateColum(lockPoint); + WQLObject.getWQLObject("sch_base_point").update(lockPoint, "point_id = " + point.getString("point_id")); + } + } + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, TaskFinishedType taskFinishedType) { + String taskStatus = task.getString("task_status"); + if (StrUtil.equals(taskStatus, TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成"); + } + if (!StrUtil.equals(taskStatus, TaskStatus.START_AND_END.getCode()) + && taskFinishedType.equals(TaskFinishedType.MANUAL)) { + throw new BadRequestException("只有已确认起点和终点的任务可以手动完成"); + } + + task.put("finished_type", taskFinishedType.getCode()); + task.put("task_status", TaskStatus.FINISHED.getCode()); + CommonUtils.addAdminUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject startPoint = pointTable + .query("point_code = '" + task.getString("point_code1") + "'") + .uniqueResult(0); + JSONObject nextPoint = pointTable + .query("point_code = '" + task.getString("point_code2") + "'") + .uniqueResult(0); + + + if (StrUtil.equals(nextPoint.getString("point_type"), PointType.STORAGE_LOCATION.getCode())) { + JSONObject vehicle = WQLObject + .getWQLObject("md_pb_vehicle") + .query("vehicle_code = '" + startPoint.getString("vehicle_code") + "'") + .uniqueResult(0); + + JSONObject vm = WQLObject + .getWQLObject("st_ivt_vehicle_material") + .query("vehicle_id = " + vehicle.getString("vehicle_id"), "create_time ASC") + .uniqueResult(0); + + JSONObject ivt = new JSONObject(); + ivt.put("stockrecord_id", IdUtil.getSnowflake(1L, 1L).nextId()); + ivt.put("point_id", nextPoint.getString("point_id")); + ivt.put("instorage_time", vm.getString("create_time")); + + WQLObject.getWQLObject("st_ivt_structivt").insert(ivt); + } + + nextPoint.put("point_status", PointStatus.HAS_VEHICLE.getCode()); + nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); + nextPoint.put("vehicle_code", startPoint.getString("vehicle_code")); + CommonUtils.addAdminUpdateColum(nextPoint); + pointTable.update(nextPoint); + + startPoint.put("point_status", PointStatus.EMPTY.getCode()); + startPoint.put("lock_type", LockType.UNLOCKED.getCode()); + startPoint.put("vehicle_code", ""); + CommonUtils.addAdminUpdateColum(startPoint); + pointTable.update(startPoint); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java index 18ffd7f..0bdcdc3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java @@ -1,14 +1,19 @@ package org.nl.wms.sch.task.util; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.sch.base.point.LockType; import org.nl.wms.sch.base.point.PointStatus; import org.nl.wms.sch.task.TaskFinishedType; import org.nl.wms.sch.task.TaskStatus; +import org.nl.wms.sch.task.dto.AcsTaskDTO; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; + /** * 纽迪希亚3任务工具类 * @@ -18,33 +23,33 @@ import org.springframework.transaction.annotation.Transactional; @Component public class TaskUtils { - @Transactional(rollbackFor = Exception.class) - public void finished(String taskId, TaskFinishedType taskFinishedType) { - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - JSONObject task = taskTable - .query("task_id = " + taskId) - .uniqueResult(0); - WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); - JSONObject startPoint = pointTable - .query("task_code = " + task.getString("point_code1")) - .uniqueResult(0); - JSONObject nextPoint = pointTable - .query("task_code = " + task.getString("point_code2")) - .uniqueResult(0); + public static List addTask(String handleClassName) { + JSONArray tasks = WQLObject + .getWQLObject("sch_base_task") + .query("task_status = " + TaskStatus.START_AND_END.getCode() + " AND handle_class = '" + handleClassName + "'") + .getResultJSONArray(0); - task.put("finished_type", taskFinishedType.getCode()); - task.put("task_status", TaskStatus.FINISHED.getCode()); - taskTable.update(task); + ArrayList acsTasks = new ArrayList<>(); + for (Object o : tasks) { + JSONObject task = (JSONObject) o; - nextPoint.put("point_status", PointStatus.HAS_VEHICLE.getCode()); - nextPoint.put("lock_type", LockType.UNLOCKED.getCode()); - nextPoint.put("vehicle_code", startPoint.getString("vehicle_code")); - pointTable.update(nextPoint); + AcsTaskDTO acsTask = AcsTaskDTO + .builder() + .task_id(task.getString("task_id")) + .task_code(task.getString("task_code")) + .task_type(task.getString("acs_task_type")) + .start_device_code(task.getString("point_code1")) + .next_device_code(task.getString("point_code2")) + .vehicle_code(task.getString("vehicle_code")) + .vehicle_type(task.getString("vehicle_type")) + .priority(task.getString("priority")) + .remark(task.getString("remark")) + .build(); - startPoint.put("point_status", PointStatus.EMPTY.getCode()); - startPoint.put("lock_type", LockType.UNLOCKED.getCode()); - startPoint.put("vehicle_code", ""); - pointTable.update(startPoint); + acsTasks.add(acsTask); + } + + return acsTasks; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/wql/TASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/wql/TASK.wql index c8c818a..89abc04 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/wql/TASK.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/wql/TASK.wql @@ -48,11 +48,27 @@ LEFT JOIN md_pb_vehicle vehicle ON point.vehicle_code = vehicle.vehicle_code WHERE point.is_used = '1' - AND point.is_delete = '0' AND point.lock_type = '1' AND point.region_id = 1585921595338264576 - AND point.point_status = '2' + AND point.point_status = '1' AND vehicle.vehicle_status = '1' ENDSELECT ENDQUERY - ENDIF \ No newline at end of file + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point_id, + point_code + FROM + sch_base_point + WHERE + is_used = '1' + AND lock_type = '1' + AND region_id = 1585921595338264576 + AND point_status = '0' + ENDSELECT + ENDQUERY + ENDIF + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql index 729b8ca..f4b82d0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql @@ -51,8 +51,8 @@ PAGEQUERY SELECT task.*, - md.class_name task_type_name, - dict.label task_status_name + md.class_name AS task_type_name, + dict.label AS task_status_name FROM sch_base_task task LEFT JOIN md_pb_classstandard md ON task.task_type = md.class_code @@ -72,7 +72,7 @@ task.create_time <= 输入.end_time ENDOPTION OPTION 输入.unFinish <> "" - task.task_status <> '07' + task.task_status <> '7' ENDOPTION OPTION 输入.task_status <> "" find_in_set( task.task_status, 输入.task_status) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls deleted file mode 100644 index 6efd924..0000000 Binary files a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls and /dev/null differ diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/structivt/wql/ST_IVT_STRUCTIVT.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/structivt/wql/ST_IVT_STRUCTIVT.wql index 8b6eace..9cde1f1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/structivt/wql/ST_IVT_STRUCTIVT.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/structivt/wql/ST_IVT_STRUCTIVT.wql @@ -77,7 +77,7 @@ ivt.instorage_time <= 输入.end_time ENDOPTION GROUP BY - ivt.stockrecord_id + ivt.stockrecord_id ENDSELECT ENDPAGEQUERY ENDIF \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/rest/VMController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/rest/VMController.java index 1fa5d8b..a41353f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/rest/VMController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/rest/VMController.java @@ -41,4 +41,12 @@ public class VMController { public ResponseEntity queryDetail(@RequestBody JSONObject param) { return new ResponseEntity<>(vmService.queryDetail(param), HttpStatus.OK); } + + @DeleteMapping + @Log("删除组盘信息") + @ApiOperation("删除组盘信息") + public ResponseEntity delete(@RequestBody Long[] ids) { + vmService.delete(ids); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/service/VMService.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/service/VMService.java index f46e42c..8b031a5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/service/VMService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/service/VMService.java @@ -16,7 +16,7 @@ public interface VMService { * 查询组盘信息 * * @param param String search 载具编码 - * @param page 分页 + * @param page 分页 * @return 组盘信息 */ JSONObject query(Map param, Pageable page); @@ -28,4 +28,11 @@ public interface VMService { * @return 所有组盘信息 */ JSONArray queryDetail(JSONObject param); + + /** + * 删除组盘 + * + * @param ids 载具id数组 + */ + void delete(Long[] ids); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/service/impl/VMServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/service/impl/VMServiceImpl.java index 41db170..9dfadd8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/service/impl/VMServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/service/impl/VMServiceImpl.java @@ -5,7 +5,9 @@ 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.modules.wql.util.WqlUtil; +import org.nl.wms.md.pb.VehicleStatus; import org.nl.wms.st.vm.service.VMService; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -49,4 +51,20 @@ public class VMServiceImpl implements VMService { param.put("flag", "2"); return WQL.getWO("ST_IVT_VEHICLE_MATERIAL").addParamMap(param).process().getResultJSONArray(0); } + + /** + * 删除组盘 + * + * @param ids 载具id数组 + */ + @Override + public void delete(Long[] ids) { + for (Long id : ids) { + WQLObject.getWQLObject("st_ivt_vehicle_material").delete("vehicle_id = " + id); + + JSONObject vehicleUpdate = new JSONObject(); + vehicleUpdate.put("vehicle_status", VehicleStatus.EMPTY.getCode()); + WQLObject.getWQLObject("md_pb_vehicle").update(vehicleUpdate, "vehicle_id = " + id); + } + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/wql/ST_IVT_VEHICLE_MATERIAL.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/wql/ST_IVT_VEHICLE_MATERIAL.wql index 3796f96..0dee97d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/wql/ST_IVT_VEHICLE_MATERIAL.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/vm/wql/ST_IVT_VEHICLE_MATERIAL.wql @@ -42,22 +42,23 @@ IF 输入.flag = "1" PAGEQUERY SELECT - vm.vm_id, vehicle.vehicle_id, + vm.vm_id, vehicle.vehicle_code, SUM( vm.material_qty ) AS qty, vm.create_name, vm.create_time FROM - st_ivt_vehicle_material vm - LEFT JOIN md_pb_vehicle vehicle ON vm.vehicle_id = vehicle.vehicle_id + md_pb_vehicle vehicle + LEFT JOIN st_ivt_vehicle_material vm ON vehicle.vehicle_id = vm.vehicle_id WHERE - 1 = 1 + vehicle.vehicle_status = '2' + AND vm.vm_id IS NOT NULL OPTION 输入.vehicle_code <> "" vehicle.vehicle_code LIKE CONCAT( '%', 输入.vehicle_code, '%' ) ENDOPTION GROUP BY - vm.vehicle_id + vehicle.vehicle_id ENDSELECT ENDPAGEQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/util/CommonUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/util/CommonUtils.java index 6d522e5..180a72b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/util/CommonUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/util/CommonUtils.java @@ -6,6 +6,7 @@ import org.nl.modules.common.utils.SecurityUtils; /** * 公共工具类 + * * @author 张江玮 * @date 2022/11/03 8:45 */ @@ -42,4 +43,15 @@ public class CommonUtils { row.put("update_optname", SecurityUtils.getCurrentNickName()); row.put("update_time", DateUtil.now()); } + + /** + * 系统循环更新,无当前用户,使用管理员 + * + * @param row 需要添加的行 + */ + public static void addAdminUpdateColum(JSONObject row) { + row.put("update_optid", "1"); + row.put("update_optname", "管理员"); + row.put("update_time", DateUtil.now()); + } } 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 2d5f1ff..e9cc296 100644 Binary files a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls and b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls differ diff --git a/lms/nladmin-system/src/main/resources/config/application-dev.yml b/lms/nladmin-system/src/main/resources/config/application-dev.yml index d3cd31b..30662ae 100644 --- a/lms/nladmin-system/src/main/resources/config/application-dev.yml +++ b/lms/nladmin-system/src/main/resources/config/application-dev.yml @@ -7,10 +7,10 @@ spring: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy # url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:yongyu_lms2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:yongyu_lms2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:ndxy3_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:P@ssw0rd} - # password: ${DB_PWD:12356} +# password: ${DB_PWD:P@ssw0rd} + password: ${DB_PWD:zjw123} # 初始连接数 initial-size: 5 # 最小连接数 diff --git a/lms/nladmin-system/src/main/resources/config/application-prod.yml b/lms/nladmin-system/src/main/resources/config/application-prod.yml index ecf4775..39cc5e9 100644 --- a/lms/nladmin-system/src/main/resources/config/application-prod.yml +++ b/lms/nladmin-system/src/main/resources/config/application-prod.yml @@ -1,14 +1,14 @@ server: - port: 8010 + port: 8011 #配置数据源 spring: datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:10.16.1.25}:${DB_PORT:3306}/${DB_NAME:whxr_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:nmd_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:whxr_root} + password: ${DB_PWD:123456} # 初始连接数 initial-size: 5 # 最小连接数 @@ -54,7 +54,7 @@ spring: redis: #数据库索引 database: ${REDIS_DB:15} - host: ${REDIS_HOST:10.16.1.25} + host: ${REDIS_HOST:127.0.0.1} port: ${REDIS_PORT:6379} password: ${REDIS_PWD:} #连接超时时间 @@ -137,3 +137,28 @@ logging: file: path: /app/jar/logs config: classpath:logback-spring.xml + +# Sa-Token配置 +sa-token: + # token 名称 (同时也是cookie名称) + token-name: Authorization + # token 有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: random-128 + # 是否输出操作日志 + is-log: false + jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq + # token 前缀 + token-prefix: Bearer + +loki: + url: http://localhost:3100/loki/api/v1 + systemName: lms + diff --git a/lms/nladmin-system/src/main/resources/logback-spring.xml b/lms/nladmin-system/src/main/resources/logback-spring.xml index dbc1ded..0cf7efe 100644 --- a/lms/nladmin-system/src/main/resources/logback-spring.xml +++ b/lms/nladmin-system/src/main/resources/logback-spring.xml @@ -12,7 +12,7 @@ https://juejin.cn/post/6844903775631572999 nlAdmin + value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %cyan(%msg%n)"/> diff --git a/lms/nladmin-ui/src/settings.js b/lms/nladmin-ui/src/settings.js index 1d46e5e..860639a 100644 --- a/lms/nladmin-ui/src/settings.js +++ b/lms/nladmin-ui/src/settings.js @@ -40,7 +40,7 @@ module.exports = { /** * @description token key */ - TokenKey: 'EL-ADMIN-TOEKN', + TokenKey: 'NL-LMS-TOEKN', /** * @description 请求超时时间,毫秒(默认2分钟) */ diff --git a/lms/nladmin-ui/src/views/wms/sch/point/index.vue b/lms/nladmin-ui/src/views/wms/sch/point/index.vue index e47dfee..5a7e276 100644 --- a/lms/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/point/index.vue @@ -195,7 +195,7 @@ - + diff --git a/lms/nladmin-ui/src/views/wms/sch/task/index.vue b/lms/nladmin-ui/src/views/wms/sch/task/index.vue index b0ebe74..1fd5c4c 100644 --- a/lms/nladmin-ui/src/views/wms/sch/task/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/task/index.vue @@ -79,7 +79,7 @@ /> - + + + + + + - + @@ -116,14 +136,14 @@ - + - + @@ -205,7 +225,7 @@ import crudClassstandard from '@/api/wms/basedata/classstandard' export default { name: 'Task', - dicts: ['acs_task_type', 'vehicle_type'], + dicts: ['acs_task_type', 'vehicle_type', 'task_status'], components: { pagination, crudOperation, rrOperation, Treeselect, udOperation }, @@ -218,7 +238,7 @@ export default { sort: 'task_id,desc', crudMethod: { ...crudTask }, query: { - task_code: '', vehicle_code: '', start_point_code: '', next_point_code: '', task_type: '', finished_type: '', task_status: '' + task_code: '', vehicle_code: '', start_point_code: '', next_point_code: '', task_type: '', finished_type: '', task_status: '-1' }, optShow: { add: false, @@ -254,7 +274,7 @@ export default { crudTask.getFinishType().then(data => { this.finishTypeList = data }) - this.crud.query.task_status = ['-1'] + // this.crud.query.task_status = ['-1'] this.crud.toQuery() }, methods: { diff --git a/lms/nladmin-ui/src/views/wms/st/vm/index.vue b/lms/nladmin-ui/src/views/wms/st/vm/index.vue index 4c2644a..b3e31ac 100644 --- a/lms/nladmin-ui/src/views/wms/st/vm/index.vue +++ b/lms/nladmin-ui/src/views/wms/st/vm/index.vue @@ -129,7 +129,7 @@ export default { title: '组盘', optShow: { reset: true, del: true }, url: 'api/vm', - idField: 'vm_id', + idField: 'vehicle_id', sort: 'vm_id,desc', crudMethod: { ...crudVM } }) diff --git a/lms/nladmin-ui/src/views/wms/st/ysa/index.vue b/lms/nladmin-ui/src/views/wms/st/ysa/index.vue index d2760ab..3f1815d 100644 --- a/lms/nladmin-ui/src/views/wms/st/ysa/index.vue +++ b/lms/nladmin-ui/src/views/wms/st/ysa/index.vue @@ -7,10 +7,10 @@ - + - + diff --git a/lms/nladmin-ui/src/views/wms/st/ysa/inventory.vue b/lms/nladmin-ui/src/views/wms/st/ysa/inventory.vue index 6e6fc2e..ea8f483 100644 --- a/lms/nladmin-ui/src/views/wms/st/ysa/inventory.vue +++ b/lms/nladmin-ui/src/views/wms/st/ysa/inventory.vue @@ -391,7 +391,7 @@ export default { } }, created() { - this.getPointStatusList('1557539288307077120') + // this.getPointStatusList('1557539288307077120') }, methods: { // 钩子:在获取表格数据之前执行,false 则代表不获取数据