From 5141db31136f892687d3727a8a1873e2226fc5d9 Mon Sep 17 00:00:00 2001 From: tuqiang <437016993@qq.com> Date: Tue, 19 Aug 2025 13:11:48 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E6=96=B0=E5=A2=9E=E6=89=8B?= =?UTF-8?q?=E6=8C=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/common/base/TableDataInfo.java | 21 +- .../java/org/nl/common/utils/RsaUtils.java | 2 + .../MobileAuthorizationController.java | 50 +- ...deRuleDetailMapper.xml => NETXLMapper.xml} | 0 .../{SysDictMapper.xml => NETXLMapper.xml} | 0 .../dao/mapper/MdMeMaterialbaseMapper.java | 5 + .../dao/mapper/MdMeMaterialbaseMapper.xml | 3 + .../material/service/dto/MaterialQuery.java | 5 + .../acs/service/impl/AcsToWmsServiceImpl.java | 2 +- .../task/controller/PdaTaskController.java | 135 ++++++ .../wms/pda/task/service/PdaTaskService.java | 51 ++ .../wms/pda/task/service/dao/dto/MoveDto.java | 22 + .../task/service/dao/mapper/PdaMapper.java | 9 + .../task/service/dao/vo/PdaResponseVo.java | 18 + .../task/service/impl/PdaTaskServiceImpl.java | 434 ++++++++++++++++++ .../java/org/nl/wms/pda/util/PdaResponse.java | 52 +++ .../controller/SchBasePointController.java | 2 +- .../point/service/ISchBasePointService.java | 2 + .../sch/point/service/dao/SchBasePoint.java | 5 + .../dao/mapper/SchBasePointMapper.java | 5 + .../service/dao/mapper/SchBasePointMapper.xml | 77 +++- .../point/service/dto/SchBasePointDto.java | 12 +- .../service/impl/SchBasePointServiceImpl.java | 46 +- .../controller/SchBaseRegionController.java | 2 +- .../wms/sch/task/service/dao/SchBaseTask.java | 7 +- .../impl/SchBaseTaskconfigServiceImpl.java | 22 + .../nl/wms/sch/task_manage/AbstractTask.java | 29 +- .../task_manage/enums/TaskDirectionEnum.java | 25 +- .../org/nl/wms/sch/tasks/PdaPointTask.java | 203 ++++++++ .../org/nl/wms/sch/tasks/netsl/NETSLTask.java | 207 +++++++++ .../sch/tasks/netsl/mapper/NETSLMapper.java | 11 + .../sch/tasks/netsl/mapper/NETSLMapper.xml | 24 + .../org/nl/wms/sch/tasks/netxl/NETXLTask.java | 200 ++++++++ .../sch/tasks/netxl/mapper/NETXLMapper.java | 9 + .../sch/tasks/netxl/mapper/NETXLMapper.xml | 20 + .../org/nl/wms/sch/tasks/thsl/THSLTask.java | 233 ++++++++++ .../wms/sch/tasks/thsl/mapper/THSLMapper.java | 10 + .../wms/sch/tasks/thsl/mapper/THSLMapper.xml | 24 + .../org/nl/wms/sch/tasks/thxl/THXLTask.java | 199 ++++++++ .../main/java/org/nl/wms/util/TaskUtils.java | 18 +- nladmin-ui/src/views/system/dept/index.vue | 2 +- .../user/dialog/relevanceUserDialog.vue | 2 +- nladmin-ui/src/views/wms/sch/point/index.vue | 122 ++--- 43 files changed, 2148 insertions(+), 179 deletions(-) rename nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/dao/mapper/{SysCodeRuleDetailMapper.xml => NETXLMapper.xml} (100%) rename nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/dao/mapper/{SysDictMapper.xml => NETXLMapper.xml} (100%) create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/controller/PdaTaskController.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/PdaTaskService.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/dto/MoveDto.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/mapper/PdaMapper.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/vo/PdaResponseVo.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/impl/PdaTaskServiceImpl.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/util/PdaResponse.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/PdaPointTask.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/NETSLTask.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/mapper/NETSLMapper.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/mapper/NETSLMapper.xml create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/NETXLTask.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/mapper/NETXLMapper.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/mapper/NETXLMapper.xml create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/THSLTask.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/mapper/THSLMapper.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/mapper/THSLMapper.xml create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thxl/THXLTask.java diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/TableDataInfo.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/TableDataInfo.java index a05a05a..28674de 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/TableDataInfo.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/TableDataInfo.java @@ -32,13 +32,18 @@ public class TableDataInfo implements Serializable { /** * 消息状态码 */ - private int code; + private String code; /** * 消息内容 */ private String msg; + /** + * 反馈数据 + */ + private Object data; + /** * 分页 * @@ -52,7 +57,7 @@ public class TableDataInfo implements Serializable { public static TableDataInfo build(IPage page) { TableDataInfo rspData = new TableDataInfo<>(); - rspData.setCode(HttpStatus.HTTP_OK); + rspData.setCode(String.valueOf(HttpStatus.HTTP_OK)); rspData.setMsg("查询成功"); rspData.setContent(page.getRecords()); rspData.setTotalElements(page.getTotal()); @@ -61,7 +66,7 @@ public class TableDataInfo implements Serializable { public static TableDataInfo build(List list) { TableDataInfo rspData = new TableDataInfo<>(); - rspData.setCode(HttpStatus.HTTP_OK); + rspData.setCode(String.valueOf(HttpStatus.HTTP_OK)); rspData.setMsg("查询成功"); rspData.setContent(list); rspData.setTotalElements(list.size()); @@ -70,9 +75,17 @@ public class TableDataInfo implements Serializable { public static TableDataInfo build() { TableDataInfo rspData = new TableDataInfo<>(); - rspData.setCode(HttpStatus.HTTP_OK); + rspData.setCode(String.valueOf(HttpStatus.HTTP_OK)); rspData.setMsg("查询成功"); return rspData; } + public static TableDataInfo buildJson(Object result) { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(String.valueOf(HttpStatus.HTTP_OK)); + rspData.setData(result); + rspData.setMsg("操作成功"); + return rspData; + } + } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/RsaUtils.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/RsaUtils.java index 96a88f8..dfd4d29 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/RsaUtils.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/RsaUtils.java @@ -18,6 +18,8 @@ public class RsaUtils { private static final String SRC = "123456"; + public static final String KEY = "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A=="; + public static void main(String[] args) throws Exception { System.out.println("\n"); RsaKeyPair keyPair = generateKeyPair(); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java index 76229d7..924dca2 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java @@ -10,7 +10,9 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.RsaUtils; import org.nl.common.utils.dto.CurrentUser; @@ -52,52 +54,32 @@ public class MobileAuthorizationController { @PostMapping(value = "/login") @SaIgnore - public ResponseEntity login(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception { - String salt = "salt"; - // 密码解密 - 前端的加密规则: encrypt(根据实际更改) - String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword()); - // 校验数据库 - // 根据用户名查询,在比对密码 - // 拿到多个已经抛出异常 - SysUser userInfo = userService.getOne(new LambdaQueryWrapper() - .eq(SysUser::getUsername, authUser.getUsername())); - if (ObjectUtil.isEmpty(userInfo) || !userInfo.getPassword().equals(SaSecureUtil.md5BySalt(password, salt))) { - throw new BadRequestException(LangProcess.msg("login_pwd")); + public ResponseEntity login(@RequestBody Map whereJson) throws Exception { + SysUser userInfo = userService.getOne(new QueryWrapper().eq("username", whereJson.get("username"))); + if (userInfo == null || !userInfo.getPassword().equals(SaSecureUtil.md5BySalt(RsaUtils.decryptByPrivateKey(RsaUtils.KEY, whereJson.get("password")), "salt"))) { // 这里需要密码加密 + throw new BadRequestException("账号或密码错误"); } - // 获取权限列表 - 登录查找权限 - List permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo)); - if (!userInfo.getIs_used()) { - throw new BadRequestException(LangProcess.msg("login_account")); + throw new BadRequestException("账号未激活"); } - + List permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo)); // 登录输入,登出删除 CurrentUser user = new CurrentUser(); user.setId(userInfo.getUser_id()); user.setUsername(userInfo.getUsername()); - user.setPresonName(userInfo.getPerson_name()); + user.setPresonName((userInfo.getPerson_name())); user.setUser(userInfo); user.setPermissions(permissionList); - // SaLoginModel 配置登录相关参数 - /* - * PE: 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型 - * loginInfo: Token挂载的扩展参数 (此方法只有在集成jwt插件时才会生效) - */ StpUtil.login(userInfo.getUser_id(), new SaLoginModel() - .setDevice("PE") - .setExtra("loginInfo", user) + .setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型 + .setExtra("loginInfo", JSONObject.toJSONString(user)) // Token挂载的扩展参数 (此方法只有在集成jwt插件时才会生效) ); - - // 返回 token 与 用户信息 - JSONObject jsonObject = new JSONObject(); - jsonObject.put("user", userInfo); - JSONObject authInfo = new JSONObject(2) {{ - put("token", "Bearer " + StpUtil.getTokenValue()); - put("user", jsonObject); - }}; - - return ResponseEntity.ok(authInfo); + JSONObject result = new JSONObject(); + result.put("token", StpUtil.getTokenValue()); + result.put("roles", permissionList); + result.put("user", user); + return new ResponseEntity<>(TableDataInfo.buildJson(result), HttpStatus.OK); } @PostMapping(value = "/authority") diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/dao/mapper/NETXLMapper.xml similarity index 100% rename from nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.xml rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/dao/mapper/NETXLMapper.xml diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/dao/mapper/SysDictMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/dao/mapper/NETXLMapper.xml similarity index 100% rename from nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/dao/mapper/SysDictMapper.xml rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/dao/mapper/NETXLMapper.xml diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dao/mapper/MdMeMaterialbaseMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dao/mapper/MdMeMaterialbaseMapper.java index 8682d1c..98fb339 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dao/mapper/MdMeMaterialbaseMapper.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dao/mapper/MdMeMaterialbaseMapper.java @@ -1,8 +1,12 @@ package org.nl.wms.basedata.material.service.dao.mapper; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.nl.wms.basedata.material.service.dao.MdMeMaterialbase; +import java.util.List; + /** *

* 物料基本信息表 Mapper 接口 @@ -13,4 +17,5 @@ import org.nl.wms.basedata.material.service.dao.MdMeMaterialbase; */ public interface MdMeMaterialbaseMapper extends BaseMapper { + List queryMaterials(@Param("param") JSONObject whereJson); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dao/mapper/MdMeMaterialbaseMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dao/mapper/MdMeMaterialbaseMapper.xml index 75c3ecb..a56f16b 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dao/mapper/MdMeMaterialbaseMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dao/mapper/MdMeMaterialbaseMapper.xml @@ -2,4 +2,7 @@ + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dto/MaterialQuery.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dto/MaterialQuery.java index 757c4a3..d1fd4fc 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dto/MaterialQuery.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata/material/service/dto/MaterialQuery.java @@ -18,6 +18,11 @@ public class MaterialQuery extends BaseQuery { * 物料编码名称 */ private String search; + + /** + * 物料编码名称 + */ + private String blurry; /** * 物料类型 */ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 4e9ec71..231add1 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -146,7 +146,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { AbstractTask abstractTask = taskFactory.getTask(processingClass); // 更新任务 try { - abstractTask.updateTaskStatus(taskInfo, status); + abstractTask.updateTaskStatus(taskInfo.getString("task_code"), status); } catch (Exception e) { log.error("任务状态更新失败: {}", message); return BaseResponse.responseError(requestNo, "任务:[" + taskInfo.getString("task_code") + "]状态更新失败," + message); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/controller/PdaTaskController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/controller/PdaTaskController.java new file mode 100644 index 0000000..cc81e60 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/controller/PdaTaskController.java @@ -0,0 +1,135 @@ +package org.nl.wms.pda.task.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.pda.task.service.PdaTaskService; +import org.nl.wms.pda.task.service.dao.vo.PdaResponseVo; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/hand") +@Slf4j +@SaIgnore +public class PdaTaskController { + private final PdaTaskService pdaTaskService; + + @PostMapping("/getRegionByPoint") + @Log("根据点位获取区域") + public ResponseEntity getRegionByPoint(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.getRegionByPoint(whereJson), HttpStatus.OK); + } + + @PostMapping("/getPointnByRegion") + @Log("根据区域获取点位") + public ResponseEntity getPointnByRegion(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.getPointnByRegion(whereJson), HttpStatus.OK); + } + + @PostMapping("/selectMaterials") + @Log("查询物料信息") + public ResponseEntity selectMaterials(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.selectMaterials(whereJson), HttpStatus.OK); + } + + @PostMapping("/getRegions") + @Log("获取所有区域") + public ResponseEntity getRegions() { + return new ResponseEntity<>(pdaTaskService.getRegions(), HttpStatus.OK); + } + + @PostMapping("/getPointInfo") + @Log("获取点位信息") + public ResponseEntity getPointInfo(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.getPointInfo(whereJson), HttpStatus.OK); + } + + @PostMapping("/getMaterialInfoByPoint") + @Log("根据点位获取物料信息") + public ResponseEntity getMaterialInfoByPoint(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.getMaterialInfoByPoint(whereJson), HttpStatus.OK); + } + + + @PostMapping("/loading") + @Log("产线上料") + public ResponseEntity loading(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.loading(whereJson), HttpStatus.OK); + } + + @PostMapping("/blanking") + @Log("产线下料") + public ResponseEntity blanking(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.blanking(whereJson), HttpStatus.OK); + } + + @PostMapping("/materialBinding") + @Log("人工放货-物料绑定") + public ResponseEntity materialBinding(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.materialBinding(whereJson), HttpStatus.OK); + } + + @PostMapping("/vehicleBinding") + @Log("人工放货-空载具绑定") + public ResponseEntity vehicleBinding(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.vehicleBinding(whereJson), HttpStatus.OK); + } + + @PostMapping("/comfirmGetting") + @Log("确认取货") + public ResponseEntity comfirmGetting(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.comfirmGetting(whereJson), HttpStatus.OK); + } + + @PostMapping("/lock") + @Log("锁定") + public ResponseEntity lock(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.lock(whereJson), HttpStatus.OK); + } + + @PostMapping("/unlock") + @Log("解锁") + public ResponseEntity unlock(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.unlock(whereJson), HttpStatus.OK); + } + + + @PostMapping("/sendPointTask") + @Log("下发定点任务") + public ResponseEntity sendPointTask(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.sendPointTask(whereJson), HttpStatus.OK); + } + + + @PostMapping("/queryTask") + @Log("查询未完成的任务") + @SaIgnore + public ResponseEntity queryTask(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.queryTask(whereJson), HttpStatus.OK); + } + + @PostMapping("/againTask") + @Log("重新下发") + @SaIgnore + public ResponseEntity againTask(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.againTask(whereJson), HttpStatus.OK); + } + + @PostMapping("/forceConfirm") + @Log("强制确认") + @SaIgnore + public ResponseEntity forceConfirm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaTaskService.forceConfirm(whereJson), HttpStatus.OK); + } + + + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/PdaTaskService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/PdaTaskService.java new file mode 100644 index 0000000..f0c90f1 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/PdaTaskService.java @@ -0,0 +1,51 @@ +package org.nl.wms.pda.task.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.common.base.TableDataInfo; +import org.nl.wms.basedata.material.service.dao.MdMeMaterialbase; +import org.nl.wms.pda.task.service.dao.dto.MoveDto; +import org.nl.wms.pda.task.service.dao.vo.PdaResponseVo; +import org.nl.wms.sch.region.service.dao.SchBaseRegion; + +import java.util.List; + +public interface PdaTaskService { + /** + * 产线叫料 + * @param whereJson + * @return + */ + PdaResponseVo loading(JSONObject whereJson); + + JSONObject getRegionByPoint(JSONObject whereJson); + + PdaResponseVo blanking(JSONObject whereJson); + + JSONObject getRegions(); + + JSONObject getPointnByRegion(JSONObject whereJson); + + JSONObject selectMaterials(JSONObject whereJson); + + JSONObject getMaterialInfoByPoint(JSONObject whereJson); + + PdaResponseVo forceConfirm(JSONObject whereJson); + + PdaResponseVo againTask(JSONObject whereJson); + + JSONObject queryTask(JSONObject whereJson); + + PdaResponseVo sendPointTask(JSONObject whereJson); + + PdaResponseVo unlock(JSONObject whereJson); + + PdaResponseVo lock(JSONObject whereJson); + + PdaResponseVo comfirmGetting(JSONObject whereJson); + + JSONObject vehicleBinding(JSONObject whereJson); + + JSONObject materialBinding(JSONObject whereJson); + + List getPointInfo(JSONObject whereJson); +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/dto/MoveDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/dto/MoveDto.java new file mode 100644 index 0000000..bd45b46 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/dto/MoveDto.java @@ -0,0 +1,22 @@ +package org.nl.wms.pda.task.service.dao.dto; + +import lombok.Data; + +@Data +public class MoveDto { + + private String point_code; + /** + * 点位 + */ + private String region; + /** + * 区域 + */ + private String material_code; + + /** + * 托盘数 + */ + private String num; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/mapper/PdaMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/mapper/PdaMapper.java new file mode 100644 index 0000000..29a162f --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/mapper/PdaMapper.java @@ -0,0 +1,9 @@ +package org.nl.wms.pda.task.service.dao.mapper; + +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +import java.util.List; + +public interface PdaMapper { + List getPointsByRegion(String region); +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/vo/PdaResponseVo.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/vo/PdaResponseVo.java new file mode 100644 index 0000000..e04fef3 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/dao/vo/PdaResponseVo.java @@ -0,0 +1,18 @@ +package org.nl.wms.pda.task.service.dao.vo; + +import lombok.Data; + +@Data +public class PdaResponseVo { + + /** + * 先提供一个message + */ + private String message; + + public static PdaResponseVo pdaResultOk(String message) { + PdaResponseVo vo = new PdaResponseVo(); + vo.setMessage(message); + return vo; + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/impl/PdaTaskServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/impl/PdaTaskServiceImpl.java new file mode 100644 index 0000000..ecb67f4 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/task/service/impl/PdaTaskServiceImpl.java @@ -0,0 +1,434 @@ +package org.nl.wms.pda.task.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 cn.hutool.http.HttpStatus; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.basedata.material.service.IMdMeMaterialbaseService; +import org.nl.wms.basedata.material.service.dao.MdMeMaterialbase; +import org.nl.wms.basedata.material.service.dao.mapper.MdMeMaterialbaseMapper; +import org.nl.wms.basedata.material.service.dto.MaterialQuery; +import org.nl.wms.pda.task.service.PdaTaskService; +import org.nl.wms.pda.task.service.dao.dto.MoveDto; +import org.nl.wms.pda.task.service.dao.mapper.PdaMapper; +import org.nl.wms.pda.task.service.dao.vo.PdaResponseVo; +import org.nl.wms.pda.util.PdaResponse; +import org.nl.wms.sch.group.service.dao.GroupPlate; +import org.nl.wms.sch.group.service.dao.mapper.MdPbGroupplateMapper; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper; +import org.nl.wms.sch.region.service.dao.SchBaseRegion; +import org.nl.wms.sch.region.service.dao.mapper.SchBaseRegionMapper; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.tasks.PdaPointTask; +import org.nl.wms.sch.tasks.netsl.NETSLTask; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +@Slf4j +public class PdaTaskServiceImpl implements PdaTaskService { + + @Autowired + private SchBasePointMapper pointMapper; + @Autowired + private PdaMapper pdaMapper; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private SchBaseRegionMapper regionMapper; + @Autowired + private MdMeMaterialbaseMapper mdMeMaterialbaseMapper; + @Autowired + private PdaPointTask pdaPointTask; + @Autowired + private MdPbGroupplateMapper groupplateMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public PdaResponseVo loading(JSONObject whereJson) { + String point_code = whereJson.getString("point_code"); + String region_code = whereJson.getString("region_code"); + String material_code = whereJson.getString("material_code"); + String num = whereJson.getString("num"); + if (ObjectUtil.isEmpty(region_code)) { + throw new BadRequestException("区域不能为空"); + } + if (ObjectUtil.isEmpty(material_code)) { + throw new BadRequestException("物料编码不能为空"); + } + if (ObjectUtil.isEmpty(num)) { + throw new BadRequestException("托盘数不能为空"); + } + int num1 = Integer.parseInt(num); + if ("N1".equals(region_code) || "N3".equals(region_code)) { + if (num1 > 2) { + throw new BadRequestException("N1、N3区域托盘数不能大于2"); + } + //找终点 查询该区域所有空闲点位 + List points = pointMapper.selectListByRegion(region_code); + if (points.size() == 0) { + throw new BadRequestException(region_code + "区域无空闲点位"); + } + //根据托盘数 + for (int i = 0; i < num1; i++) { + SchBasePoint point = points.get(i); + JSONObject param = new JSONObject(); + param.put("device_code", point.getPoint_code()); + param.put("material_code", material_code); + param.put("requestNo", IdUtil.simpleUUID()); + param.put("material_code", material_code); + param.put("config_code", "NETSLTask"); + param.put("vehicle_qty", "1"); + param.put("user_id", "1"); + taskService.apply(param); + } + } else if ("L1".equals(region_code) || "L2".equals(region_code)) { + SchBasePoint schBasePoint = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code)); + for (int i = 0; i < num1; i++) { + //确定终点 + SchBasePoint point = checkNextPoint(schBasePoint, region_code); + JSONObject param = new JSONObject(); + param.put("device_code", point.getPoint_code()); + param.put("requestNo", IdUtil.simpleUUID()); + param.put("material_code", material_code); + param.put("config_code", "THSLTask"); + param.put("vehicle_qty", "1"); + param.put("user_id", "1"); + taskService.apply(param); + } + } else { + throw new BadRequestException("当前区域" + region_code + "错误!"); + } + return PdaResponseVo.pdaResultOk("任务创建成功"); + } + + private SchBasePoint checkNextPoint(SchBasePoint schBasePoint, String region_code) { + //如果是MB物料的上料点 需要下发二次分配点位 + if ("MB".equals(schBasePoint.getPoint_code())) { + if ("L1".equals(region_code)) { + return getWaitPoint(region_code); + } else { + return getWaitPoint(region_code); + } + } else { + //查找该区域空闲的点位 + List list = pointMapper.selectList(new LambdaQueryWrapper().eq(SchBasePoint::getRegion_code, region_code) + .eq(SchBasePoint::getPoint_type, "1") + .eq(SchBasePoint::getIs_used, "1") + .eq(SchBasePoint::getLock_type, "0") + .isNull(SchBasePoint::getIng_task_code) + .orderByAsc(SchBasePoint::getIn_order_seq)); + if (list.size() == 0) { + throw new BadRequestException(region_code + "区域无空闲点位"); + } + return list.get(0); + } + } + + private SchBasePoint getWaitPoint(String region_code) { + //查找该区域空闲的等待点 + SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getRegion_code, region_code) + .eq(SchBasePoint::getPoint_status, "0") + .eq(SchBasePoint::getIs_used, "1") + .eq(SchBasePoint::getLock_type, "0") + .eq(SchBasePoint::getPoint_type, "4") + .isNull(SchBasePoint::getIng_task_code)); + if (ObjectUtil.isEmpty(point)) { + if ("L1".equals(region_code)) { + throw new BadRequestException("L1区域无空闲的等待点位"); + } else { + throw new BadRequestException("L2区域无空闲的等待点位"); + } + } + return point; + } + + @Override + public JSONObject getRegionByPoint(JSONObject whereJson) { + String point_code = whereJson.getString("point_code"); + if (ObjectUtil.isEmpty(point_code)) { + throw new BadRequestException("点位不能为空"); + } + SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code)); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("点位" + point_code + "不存在!"); + } + String region_code = point.getRegion_code(); + String region_name = point.getRegion_name(); + JSONObject jo = new JSONObject(); + jo.put("region_code", region_code); + jo.put("region_name", region_name); + return jo; + } + + @Override + public PdaResponseVo blanking(JSONObject whereJson) { + String point_code = whereJson.getString("point_code"); + String region_code = whereJson.getString("region_code"); + JSONArray data = whereJson.getJSONArray("data"); + if (ObjectUtil.isEmpty(point_code)) { + throw new BadRequestException("点位不能为空"); + } + if (ObjectUtil.isEmpty(region_code)) { + throw new BadRequestException("区域不能为空"); + } + if (ObjectUtil.isEmpty(data)) { + throw new BadRequestException("物料信息不能为空"); + } + SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code)); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("点位" + point_code + "不存在!"); + } + JSONObject jo = data.getJSONObject(0); + String material_name = jo.getString("material_name"); + MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper().eq(MdMeMaterialbase::getMaterial_name, material_name)); + if (mdMeMaterialbase == null) { + throw new BadRequestException("当前物料不存在【"+material_name+"】"); + } + String vehicleCode = "TP" + TaskUtils.getDateTime("yyMMddHHmmss") + CodeUtil.getNewCode("VEHICLE_CODE"); + JSONObject param = new JSONObject(); + param.put("device_code", point.getPoint_code()); + param.put("material_code", mdMeMaterialbase.getMaterial_code()); + param.put("requestNo", IdUtil.simpleUUID()); + if ("N1".equals(point.getRegion_code())||"N2".equals(point.getRegion_code())) { + param.put("config_code", "NETXLTask"); + } else if ("L1".equals(point.getRegion_code())||"L2".equals(point.getRegion_code())){ + param.put("config_code", "THXLTask"); + } + param.put("vehicle_code", vehicleCode); + param.put("vehicle_qty", "1"); + param.put("user_id", "1"); + taskService.apply(param); + //维护物料信息 + packageData(data,point_code); + return PdaResponseVo.pdaResultOk("任务创建成功"); + } + + private void packageData(JSONArray data,String point_code) { + JSONObject jo = data.getJSONObject(0); + String material_name = jo.getString("material_name"); + MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper().eq(MdMeMaterialbase::getMaterial_name, material_name)); + if (mdMeMaterialbase == null) { + throw new BadRequestException("当前物料不存在【"+material_name+"】"); + } + String pscn = jo.getString("pscn"); + String measure_unit_id = jo.getString("measure_unit_id"); + List list = new ArrayList<>(); + for (int i = 0; i < data.size(); i++) { + JSONObject jsonObject = data.getJSONObject(i); + String container_code = jsonObject.getString("container_code"); + list.add(container_code); + } + String ext_code = String.join(",", list); + String vehicleCode = "TP" + TaskUtils.getDateTime("yyMMddHHmmss") + CodeUtil.getNewCode("VEHICLE_CODE"); + + GroupPlate.GroupPlateBuilder groupPlateBuilder = GroupPlate.builder() + .group_id(org.nl.common.utils.IdUtil.getStringId()) + .material_code(mdMeMaterialbase.getMaterial_code()) + .pcsn(pscn) + .measure_unit_id(measure_unit_id) + .storagevehicle_code(vehicleCode) + .ext_code(ext_code) + .create_id(SecurityUtils.getCurrentUserId()) + .create_name(SecurityUtils.getCurrentNickName()) + .create_time(DateUtil.now()); + groupplateMapper.insert(groupPlateBuilder.build()); + SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code)); + point.setStoragevehicle_code(vehicleCode); + point.setMaterial_code(mdMeMaterialbase.getMaterial_code()); + point.setPoint_status("2"); + pointMapper.updateById(point); + } + + @Override + public JSONObject getRegions() { + List list = regionMapper.selectList(new LambdaQueryWrapper()); + List ja = new ArrayList<>(); + list.forEach(region -> { + JSONObject jo = new JSONObject(); + jo.put("region_code", region.getRegion_code()); + jo.put("region_name", region.getRegion_name()); + ja.add(jo); + }); + JSONObject ret = new JSONObject(); + if (ObjectUtil.isNotEmpty(list)) { + ret.put("code", String.valueOf(HttpStatus.HTTP_OK)); + ret.put("message", "查询成功"); + ret.put("data", ja); + return ret; + } + return ret; + } + + @Override + public JSONObject getPointnByRegion(JSONObject whereJson) { + return null; + } + +// @Override +// public TableDataInfo selectMaterials(JSONObject whereJson) { +// PageQuery pageQuery = new PageQuery(); +// pageQuery.setPage(whereJson.getInteger("page") - 1); +// pageQuery.setSize(whereJson.getInteger("size")); +// MaterialQuery materialQuery = new MaterialQuery(); +// if (StringUtils.isNotBlank(whereJson.getString("blurry"))) { +// materialQuery.setSearch(whereJson.getString("blurry").trim().toUpperCase()); +// } +// Page mapPage = iMdMeMaterialbaseService.pageMaps(pageQuery.build(), materialQuery.build()); +// return PdaResponse.build(mapPage); +// } + + @Override + public JSONObject selectMaterials(JSONObject whereJson) { + List list = mdMeMaterialbaseMapper.selectList( + new LambdaQueryWrapper().eq(ObjectUtil.isNotEmpty(whereJson.getString("blurry")), MdMeMaterialbase::getMaterial_id, whereJson.getString("blurry")) + .or() + .eq(ObjectUtil.isNotEmpty(whereJson.getString("blurry")), MdMeMaterialbase::getMaterial_code, whereJson.getString("blurry")) + ); + JSONObject ret = new JSONObject(); + if (ObjectUtil.isNotEmpty(list)) { + ret.put("code", String.valueOf(HttpStatus.HTTP_OK)); + ret.put("message", "查询成功"); + ret.put("data", list); + return ret; + } + return ret; + } + + @Override + public JSONObject getMaterialInfoByPoint(JSONObject whereJson) { + return null; + } + + @Override + public PdaResponseVo forceConfirm(JSONObject whereJson) { + return null; + } + + @Override + public PdaResponseVo againTask(JSONObject whereJson) { + return null; + } + + @Override + public JSONObject queryTask(JSONObject whereJson) { + return null; + } + + @Override + public PdaResponseVo sendPointTask(JSONObject whereJson) { + // 校验数据 + checkPoint(whereJson); + // 创建任务 + JSONObject task = new JSONObject(); + task.put("config_code", "PointTask"); + task.put("point_code1", whereJson.getString("start_point_code")); + task.put("point_code2", whereJson.getString("end_point_code")); + task.put("Priority", "1"); + pdaPointTask.apply(task); + return PdaResponseVo.pdaResultOk("下发成功!"); + } + + @Override + public PdaResponseVo unlock(JSONObject whereJson) { + + return null; + } + + @Override + public PdaResponseVo lock(JSONObject whereJson) { + return null; + } + + @Override + public PdaResponseVo comfirmGetting(JSONObject whereJson) { + String point_code = whereJson.getString("point_code"); + + return PdaResponseVo.pdaResultOk("取货完成"); + } + + @Override + public JSONObject vehicleBinding(JSONObject whereJson) { + String point_code = whereJson.getString("point_code"); + SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, point_code)); + point.setPoint_status("1"); + pointMapper.updateById(point); + JSONObject ret = new JSONObject(); + ret.put("status", String.valueOf(HttpStatus.HTTP_OK)); + ret.put("message","托盘绑定成功"); + return ret; + } + + + @Override + public JSONObject materialBinding(JSONObject whereJson) { + String point_code = whereJson.getString("point_code"); + JSONArray data = whereJson.getJSONArray("data"); + if (ObjectUtil.isEmpty(point_code)){ + throw new BadRequestException("点位不能为空"); + } + if (ObjectUtil.isEmpty(data)){ + throw new BadRequestException("物料数据不能为空"); + } + packageData(data,point_code); + JSONObject ret = new JSONObject(); + ret.put("status", String.valueOf(HttpStatus.HTTP_OK)); + ret.put("message","物料绑定成功"); + return ret; + } + + @Override + public List getPointInfo(JSONObject whereJson) { + List list = pointMapper.queryPointInfo(whereJson); + return list; + } + + /** + * 校验起点终点载具 + * @param whereJson { + * start_point_code:起点点位 + * end_point_code:终点点位 + * storagevehicle_code:终点点位 + * } + */ + private void checkPoint(JSONObject whereJson) { + String start_point_code = whereJson.getString("start_point_code"); + String end_point_code = whereJson.getString("end_point_code"); + // 校验起点 + SchBasePoint pointStartDao = pointMapper.selectOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, start_point_code)); + pointStartDao.setPoint_status("2"); + pointMapper.updateById(pointStartDao); + + // 校验终点 + SchBasePoint pointNextDao = pointMapper.selectOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, end_point_code)); + pointNextDao.setPoint_status("1"); + pointMapper.updateById(pointStartDao); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/util/PdaResponse.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/util/PdaResponse.java new file mode 100644 index 0000000..eb8e3ad --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/util/PdaResponse.java @@ -0,0 +1,52 @@ +package org.nl.wms.pda.util; + +import cn.hutool.http.HttpStatus; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.Builder; +import lombok.Data; +import org.nl.common.base.TableDataInfo; + +@Data +@Builder +public class PdaResponse { + /** + * 信息 + */ + private String message; + + /** + * 返回数据 + */ + private T data; + + /** + * 不带数据反馈 + * @return ErpResponse + */ + public static PdaResponse requestOk() { + return PdaResponse.builder() + .message("操作成功!") + .build(); + } + + /** + * 带数据反馈 + * @return ErpResponse + */ + public static PdaResponse requestParamOk(T data) { + return PdaResponse.builder() + .message("操作成功!") + .data(data) + .build(); + } + + + public static TableDataInfo build(IPage page) { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(String.valueOf(HttpStatus.HTTP_OK)); + rspData.setMsg("查询成功"); + rspData.setContent(page.getRecords()); + rspData.setTotalElements(page.getTotal()); + return rspData; + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/controller/SchBasePointController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/controller/SchBasePointController.java index ebcb0ce..b05a39b 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/controller/SchBasePointController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/controller/SchBasePointController.java @@ -47,7 +47,7 @@ public class SchBasePointController { @Log("修改点位管理") public ResponseEntity update(@Validated @RequestBody SchBasePoint entity){ schBasePointService.update(entity); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return new ResponseEntity<>(HttpStatus.OK); } @Log("删除点位管理") diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java index 80390cd..a1082c7 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java @@ -77,4 +77,6 @@ public interface ISchBasePointService extends IService { * 区域点位库存查看 * */ TableDataInfo queryStruct(RegionStructQuery query, PageQuery pageQuery); + + SchBasePoint findByCode(String point_code); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java index b5a7831..f938eb4 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java @@ -120,6 +120,8 @@ public class SchBasePoint implements Serializable { private String update_id; + private String material_code; + private String update_name; @@ -128,6 +130,8 @@ public class SchBasePoint implements Serializable { private String source_id; /** 位置 */ private String point_location; + /** 锁定类型 */ + private String lock_type; @TableField(exist = false) @@ -145,6 +149,7 @@ public class SchBasePoint implements Serializable { @TableField(exist = false) private String group_id; + @TableField(exist = false) private String device_code; } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java index cd900c2..276281a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.point.service.dao.mapper; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; @@ -34,4 +35,8 @@ public interface SchBasePointMapper extends BaseMapper { IPage selectPageLeftJoin(IPage pages, SchBasePointQuery whereJson); List queryStruct(@Param("query") RegionStructQuery query); + + List selectListByRegion(String region); + + List queryPointInfo(@Param("param") JSONObject whereJson); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml index b06abb5..6f3dbdd 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml @@ -15,49 +15,40 @@ + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dto/SchBasePointDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dto/SchBasePointDto.java index a17f670..a1da467 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dto/SchBasePointDto.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dto/SchBasePointDto.java @@ -42,7 +42,7 @@ public class SchBasePointDto implements Serializable { private String vehicle_type; /** 载具编码 */ - private String vehicle_code; + private String storagevehicle_code; /** 载具数量 */ private Integer vehicle_qty; @@ -112,4 +112,14 @@ public class SchBasePointDto implements Serializable { /** 修改时间 */ private String update_time; + + private String material_code; + + private String source_id; + /** 位置 */ + private String point_location; + /** 锁定类型 */ + private String lock_type; + + private String pcsn; } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java index 4d7ea51..df38151 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java @@ -57,26 +57,26 @@ public class SchBasePointServiceImpl extends ServiceImpl pages = new Page<>(page.getPage() + 1, page.getSize()); pages = pointMapper.selectPageLeftJoin(pages, whereJson); // 可以存放的载具类型 - pages.getRecords().forEach(point -> { - if (ObjectUtil.isNotEmpty(point.getCan_vehicle_type())) { - point.setCan_vehicle_types(Arrays.asList(point.getCan_vehicle_type().split(","))); - } - String pointStatus = point.getPoint_status(); // 点位状态 - String pointType = point.getPoint_type(); // 点位类型 - SchBaseRegion regionObj = regionMapper.selectById(point.getRegion_code()); - if (ObjectUtil.isNotEmpty(regionObj)) { - if (ObjectUtil.isNotEmpty(pointStatus) && ObjectUtil.isNotEmpty(regionObj.getPoint_status_explain())) { - // 设置 - point.setPoint_status_name(PointUtils.getStatusOrTypeName( - regionObj.getPoint_status_explain(), pointStatus)); - } - if (ObjectUtil.isNotEmpty(pointType) && ObjectUtil.isNotEmpty(regionObj.getPoint_type_explain())) { - // 设置 - point.setPoint_type_name(PointUtils.getStatusOrTypeName( - regionObj.getPoint_type_explain(), pointType)); - } - } - }); +// pages.getRecords().forEach(point -> { +// if (ObjectUtil.isNotEmpty(point.getCan_vehicle_type())) { +// point.setCan_vehicle_types(Arrays.asList(point.getCan_vehicle_type().split(","))); +// } +// String pointStatus = point.getPoint_status(); // 点位状态 +// String pointType = point.getPoint_type(); // 点位类型 +// SchBaseRegion regionObj = regionMapper.selectById(point.getRegion_code()); +// if (ObjectUtil.isNotEmpty(regionObj)) { +// if (ObjectUtil.isNotEmpty(pointStatus) && ObjectUtil.isNotEmpty(regionObj.getPoint_status_explain())) { +// // 设置 +// point.setPoint_status_name(PointUtils.getStatusOrTypeName( +// regionObj.getPoint_status_explain(), pointStatus)); +// } +// if (ObjectUtil.isNotEmpty(pointType) && ObjectUtil.isNotEmpty(regionObj.getPoint_type_explain())) { +// // 设置 +// point.setPoint_type_name(PointUtils.getStatusOrTypeName( +// regionObj.getPoint_type_explain(), pointType)); +// } +// } +// }); return pages; } @@ -198,4 +198,10 @@ public class SchBasePointServiceImpl extends ServiceImpl().eq(SchBasePoint::getPoint_code, point_code)); + return point; + } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/controller/SchBaseRegionController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/controller/SchBaseRegionController.java index 6723121..c5452d6 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/controller/SchBaseRegionController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/controller/SchBaseRegionController.java @@ -48,7 +48,7 @@ public class SchBaseRegionController { public ResponseEntity update(@Validated @RequestBody SchBaseRegion entity){ regionService.update(entity); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return new ResponseEntity<>(HttpStatus.OK); } @Log("删除区域管理") diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java index 22cb98d..df277ef 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java @@ -29,9 +29,6 @@ public class SchBaseTask implements Serializable { /** 任务编码 */ private String task_code; - /** 任务类型 */ - private String task_type; - /** 任务状态 */ private String task_status; @@ -96,7 +93,11 @@ public class SchBaseTask implements Serializable { /** 更新时间 */ private String update_time; + @TableField(exist = false) + private String task_type; + /** 配置表 -> 优先级 (默认会将配置表设置进来,如果需要自行更改则可在业务中设置) */ + @TableField(exist = false) private String priority; /** 配置表 -> acs任务类型 */ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java index 45d831a..5df5f1d 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java @@ -57,6 +57,17 @@ public class SchBaseTaskconfigServiceImpl extends ServiceImpl() .eq(SchBaseTaskconfig::getConfig_code, configCode)); - Assert.notNull(taskConfig, LangProcess.msg("common_configTip", configCode)); +// Assert.notNull(taskConfig, LangProcess.msg("common_configTip", configCode)); // 最大任务数 Integer tcmn = taskConfig.getTask_create_max_num(); // 获取执行中的任务(由配置文件设置,一般是最大值) - List unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig( - taskConfig.getConfig_code(), taskConfig.getTask_direction()); - Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, LangProcess.msg("common_maxTaskTip", applyPointCode)); +// List unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig( +// taskConfig.getConfig_code(), taskConfig.getTask_direction()); +// Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, LangProcess.msg("common_maxTaskTip", applyPointCode)); // 校验同个点位,同种任务是否多次请求创建任务(固定只能1个任务) List applyPointTask = taskService.findUnFinishTasksByTaskConfig( taskConfig.getConfig_code(), applyPointCode, taskConfig.getTask_direction()); - if (applyPointTask.size() == 1) { + if (applyPointTask.size() == 1 && "1".equals(isFlag)) { throw new BadRequestException(LangProcess.msg("common_taskCreatedTip", applyPointCode)); } String vehicleType = param.getString("vehicle_type"); - String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code")); + String vehicleCode = param.getString("vehicle_code"); AbstractTask bean = SpringContextHolder.getBean(this.getClass()); // 2、创建申请任务 @@ -296,10 +298,11 @@ AbstractTask { task.setConfig_code(configCode); task.setVehicle_code(vehicleCode); task.setVehicle_type(vehicleType); + task.setMaterial_code(material_code); task.setTask_status(TaskStatus.APPLY.getCode()); // 将所有参数存到表中,后续需要可以提取 TaskUtils.setCreateByAcsOrPda(task, param); - + setTaskPoint(taskConfig, task, param.getString("device_code")); // 3、判断是否直接找点下发 // 立即创建吧组盘放到具体位置,免得重复创建 if (taskConfig.getIs_immediate_create()) { @@ -307,7 +310,7 @@ AbstractTask { } else { // 不需要立即创建 // 设置组盘 - 需要的话由子类自行实现 - task.setGroup_id(bean.setGroupPlate(param)); + task.setGroup_data(bean.setGroupPlate(param)); // 创建一条单点任务。 taskService.save(task); bean.create(); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/TaskDirectionEnum.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/TaskDirectionEnum.java index 19a6e3e..8ac6994 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/TaskDirectionEnum.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/TaskDirectionEnum.java @@ -15,33 +15,24 @@ import java.util.List; * @Date: 2023/5/25 */ @Getter +@AllArgsConstructor public enum TaskDirectionEnum { /** - * 送货 + * 送货 1 //起点确认 */ - SEND, + SEND("1", "送货"), /** - * 取货 + * 取货 2 //终点确认 */ - CALL, + CALL("1", "取货"), /** - * 移货 + * 移货 3 */ - MOVE; + MOVE("1", "移货"); private String value; private String label; - static { - SysDictServiceImpl bean = SpringContextHolder.getBean(SysDictServiceImpl.class); - List taskDirection = bean.list(new LambdaQueryWrapper() - .eq(Dict::getCode, "task_direction") - .orderByAsc(Dict::getDict_sort)); - TaskDirectionEnum[] values = TaskDirectionEnum.values(); - for (int i = 0; i < values.length; i++) { - values[i].value = taskDirection.get(i).getValue(); - values[i].label = taskDirection.get(i).getLabel(); - } - } + } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/PdaPointTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/PdaPointTask.java new file mode 100644 index 0000000..621bdc7 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/PdaPointTask.java @@ -0,0 +1,203 @@ +package org.nl.wms.sch.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Component(value = "PdaPointTask") +@TaskType("PdaPointTask") +public class PdaPointTask extends AbstractTask { + private static final String TASK_CONFIG_CODE = "NETXLTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper NETXLMapper; + + @Override + public void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找终点 + SchBasePoint point = findStartPoint(startRegionStr); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getPoint_code1(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + taskService.updateById(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找起点 + SchBasePoint point = findStartPoint(startRegionStr); + if (ObjectUtil.isEmpty(point)) { + // 消息通知 + noticeService.createNotice("货架暂无托盘!", TASK_CONFIG_CODE + task.getPoint_code2(), + NoticeTypeEnum.WARN.getCode()); + throw new BadRequestException("货架暂无托盘!"); + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.save(task); + // 点位更新 + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + + private SchBasePoint findStartPoint(List startRegionStr) { + // 钢托盘缓存区域的空盘是1 状态不同 + List points = NETXLMapper.findPointForNETXL(startRegionStr); + return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; + } + + @Override + public void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1()); + SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2()); + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + PointUtils.clearPoint(startPointObj); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); +// endPointObj.setVehicle_type(GeneralDefinition.STEEL_TRAY); +// endPointObj.setVehicle_qty(taskObj.getVehicle_qty()); + endPointObj.setUpdate_time(DateUtil.now()); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); +// taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1()); + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); +// taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/NETSLTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/NETSLTask.java new file mode 100644 index 0000000..2982962 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/NETSLTask.java @@ -0,0 +1,207 @@ +package org.nl.wms.sch.tasks.netsl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dto.SchBasePointDto; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.tasks.netsl.mapper.NETSLMapper; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; +// NET加工区上料任务 +@Component(value = "NETSLTask") +@TaskType("NETSLTask") +public class NETSLTask extends AbstractTask { + + private static final String TASK_CONFIG_CODE = "NETSLTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private NETSLMapper netslMapper; + + @Override + public void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找终点 + SchBasePoint point = findStartPoint(startRegionStr,task.getMaterial_code()); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getPoint_code1(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setVehicle_code(point.getStoragevehicle_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + taskService.updateById(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找起点 + SchBasePoint point = findStartPoint(startRegionStr,task.getMaterial_code()); + if (ObjectUtil.isEmpty(point)) { + // 消息通知 + noticeService.createNotice("找不到可用的MB制布区点位!", TASK_CONFIG_CODE + task.getPoint_code2(), + NoticeTypeEnum.WARN.getCode()); + throw new BadRequestException("找不到可用的MB制布区点位!"); + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setVehicle_code(point.getStoragevehicle_code()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.save(task); + // 点位更新 + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + + private SchBasePoint findStartPoint(List startRegionStr,String material_code) { + // 查询该物料所存放的位置 + List points = netslMapper.findPointForNETSL(startRegionStr, material_code); + //找到最小PCSN的点位 + SchBasePointDto schBasePointDto = points.stream() + .min(Comparator.comparing(SchBasePointDto::getPcsn)).orElse( null); + return ObjectUtil.isNotEmpty(schBasePointDto) ? Convert.convert(SchBasePoint.class, schBasePointDto) : null; + } + + @Override + public void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1()); + SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2()); + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + PointUtils.clearPoint(startPointObj); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + endPointObj.setStoragevehicle_code(taskObj.getVehicle_code()); +// endPointObj.setVehicle_qty(taskObj.getVehicle_qty()); + endPointObj.setUpdate_time(DateUtil.now()); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); +// taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1()); + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); +// taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/mapper/NETSLMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/mapper/NETSLMapper.java new file mode 100644 index 0000000..63ac338 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/mapper/NETSLMapper.java @@ -0,0 +1,11 @@ +package org.nl.wms.sch.tasks.netsl.mapper; + +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dto.SchBasePointDto; + +import java.util.List; + +public interface NETSLMapper { + + List findPointForNETSL(List startRegionStr, String material_code); +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/mapper/NETSLMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/mapper/NETSLMapper.xml new file mode 100644 index 0000000..d24ee8e --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netsl/mapper/NETSLMapper.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/NETXLTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/NETXLTask.java new file mode 100644 index 0000000..373bb9d --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/NETXLTask.java @@ -0,0 +1,200 @@ +package org.nl.wms.sch.tasks.netxl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +//// NET加工区下料任务 +@Component(value = "NETXLTask") +@TaskType("NETXLTask") +public class NETXLTask extends AbstractTask { + + private static final String TASK_CONFIG_CODE = "NETXLTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private NETXLMapper NETXLMapper; + + @Override + public void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找终点 + SchBasePoint point = findStartPoint(startRegionStr); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getPoint_code1(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + taskService.updateById(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找起点 + SchBasePoint point = findStartPoint(startRegionStr); + if (ObjectUtil.isEmpty(point)) { + // 消息通知 + noticeService.createNotice("货架暂无托盘!", TASK_CONFIG_CODE + task.getPoint_code2(), + NoticeTypeEnum.WARN.getCode()); + throw new BadRequestException("货架暂无托盘!"); + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.save(task); + // 点位更新 + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + + private SchBasePoint findStartPoint(List startRegionStr) { + // 钢托盘缓存区域的空盘是1 状态不同 + List points = NETXLMapper.findPointForNETXL(startRegionStr); + return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; + } + + @Override + public void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1()); + SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2()); + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + PointUtils.clearPoint(startPointObj); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); +// endPointObj.setVehicle_type(GeneralDefinition.STEEL_TRAY); +// endPointObj.setVehicle_qty(taskObj.getVehicle_qty()); + endPointObj.setUpdate_time(DateUtil.now()); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); +// taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1()); + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); +// taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/mapper/NETXLMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/mapper/NETXLMapper.java new file mode 100644 index 0000000..6810941 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/mapper/NETXLMapper.java @@ -0,0 +1,9 @@ +package org.nl.wms.sch.tasks.netxl.mapper; + +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +import java.util.List; + +public interface NETXLMapper { + List findPointForNETXL(List startRegionStr); +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/mapper/NETXLMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/mapper/NETXLMapper.xml new file mode 100644 index 0000000..f8d7609 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/netxl/mapper/NETXLMapper.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/THSLTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/THSLTask.java new file mode 100644 index 0000000..b2b62b7 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/THSLTask.java @@ -0,0 +1,233 @@ +package org.nl.wms.sch.tasks.thsl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper; +import org.nl.wms.sch.point.service.dto.SchBasePointDto; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper; +import org.nl.wms.sch.tasks.thsl.mapper.THSLMapper; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import oshi.driver.mac.net.NetStat; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +//// 贴合区上料任务 +@Component(value = "THSLTask") +@TaskType("THSLTask") +public class THSLTask extends AbstractTask { + private static final String TASK_CONFIG_CODE = "THSLTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private THSLMapper thslMapper; + + @Override + public void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找起点 + SchBasePoint point = findStartPoint(startRegionStr, task.getMaterial_code()); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getPoint_code2(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终起点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setVehicle_code(point.getStoragevehicle_code()); + task.setRemark(""); + taskService.updateById(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找起点 + SchBasePoint point = findStartPoint(startRegionStr, task.getMaterial_code()); + if (ObjectUtil.isEmpty(point)) { + // 消息通知 + noticeService.createNotice("货架暂无托盘!", TASK_CONFIG_CODE + task.getPoint_code2(), + NoticeTypeEnum.WARN.getCode()); + throw new BadRequestException("货架暂无托盘!"); + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setVehicle_code(point.getStoragevehicle_code()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.save(task); + // 点位更新 + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + + private SchBasePoint findStartPoint(List startRegionStr, String material_code) { + + // 钢托盘缓存区域的空盘是1 状态不同 + List points = thslMapper.findPointForTHSL(startRegionStr, material_code); + //找到最小PCSN的点位 + SchBasePointDto schBasePointDto = points.stream() + .min(Comparator.comparing(SchBasePointDto::getPcsn)).orElse(null); + if (schBasePointDto == null) { + throw new BadRequestException("未找到物料编码为【" + material_code + "】所需点位!"); + } + String region_code = schBasePointDto.getRegion_code(); + String point_code = schBasePointDto.getPoint_code(); + if ("E2".equals(region_code)) { + return getWaitPoint(point_code); + } else if ("H1".equals(schBasePointDto.getRegion_code())) { + return getWaitPoint(point_code); + } else if ("H2".equals(schBasePointDto.getRegion_code())) { + return getWaitPoint(point_code); + }else { + return ObjectUtil.isNotEmpty(schBasePointDto) ? Convert.convert(SchBasePoint.class, schBasePointDto) : null; + } + } + + private SchBasePoint getWaitPoint(String point_code) { + //查找该区域空闲的等待点 + SchBasePoint point = pointService.findByCode(point_code.substring(0, point_code.length() - 2) + "00"); + if (ObjectUtil.isEmpty(point)){ + throw new BadRequestException("未找到点位编码为【" + point_code + "】所需的等待点位!"); + } + return point; + } + + @Override + public void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1()); + SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2()); + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + PointUtils.clearPoint(startPointObj); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); +// endPointObj.setVehicle_type(GeneralDefinition.STEEL_TRAY); +// endPointObj.setVehicle_qty(taskObj.getVehicle_qty()); + endPointObj.setUpdate_time(DateUtil.now()); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); +// taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1()); + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); +// taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/mapper/THSLMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/mapper/THSLMapper.java new file mode 100644 index 0000000..6bd0098 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/mapper/THSLMapper.java @@ -0,0 +1,10 @@ +package org.nl.wms.sch.tasks.thsl.mapper; + +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dto.SchBasePointDto; + +import java.util.List; + +public interface THSLMapper { + List findPointForTHSL(List startRegionStr, String material_code); +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/mapper/THSLMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/mapper/THSLMapper.xml new file mode 100644 index 0000000..9ba5046 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thsl/mapper/THSLMapper.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thxl/THXLTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thxl/THXLTask.java new file mode 100644 index 0000000..ddc34a4 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/tasks/thxl/THXLTask.java @@ -0,0 +1,199 @@ +package org.nl.wms.sch.tasks.thxl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +//// 贴合区下料任务 +@Component(value = "THXLTask") +@TaskType("THXLTask") +public class THXLTask extends AbstractTask { + private static final String TASK_CONFIG_CODE = "THXLTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private NETXLMapper NETXLMapper; + + @Override + public void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找终点 + SchBasePoint point = findStartPoint(startRegionStr); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getPoint_code1(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + taskService.updateById(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找起点 + SchBasePoint point = findStartPoint(startRegionStr); + if (ObjectUtil.isEmpty(point)) { + // 消息通知 + noticeService.createNotice("货架暂无托盘!", TASK_CONFIG_CODE + task.getPoint_code2(), + NoticeTypeEnum.WARN.getCode()); + throw new BadRequestException("货架暂无托盘!"); + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.save(task); + // 点位更新 + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + + private SchBasePoint findStartPoint(List startRegionStr) { + // 钢托盘缓存区域的空盘是1 状态不同 + List points = NETXLMapper.findPointForNETXL(startRegionStr); + return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; + } + + @Override + public void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1()); + SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2()); + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + PointUtils.clearPoint(startPointObj); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); +// endPointObj.setVehicle_type(GeneralDefinition.STEEL_TRAY); +// endPointObj.setVehicle_qty(taskObj.getVehicle_qty()); + endPointObj.setUpdate_time(DateUtil.now()); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); +// taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1()); + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); +// taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java index 0d7da64..ce6e9c2 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java @@ -13,6 +13,8 @@ import org.nl.wms.sch.task_manage.GeneralDefinition; import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.List; /** @@ -70,6 +72,20 @@ public class TaskUtils { taskObj.setUpdate_time(DateUtil.now()); } + /** + * 获取指定格式的日期时间 + * @param format 格式 + * @return 字符串 + */ + public static String getDateTime(String format) { + // 获取当前日期和时间 + LocalDateTime now = LocalDateTime.now(); + // 定义日期时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); + // 格式化日期时间 + return now.format(formatter); + } + public static void setUpdateAuto(SchBaseTask taskObj) { String currentUserId = ObjectUtil.isNotEmpty(SecurityUtils.getCurrentUserId()) @@ -164,7 +180,7 @@ public class TaskUtils { if (ObjectUtil.isEmpty(acsVehicleCode) || acsVehicleCode.equals(GeneralDefinition.NO)) { return null; } - return String.format("%04d", Integer.parseInt(acsVehicleCode)); + return String.format("%04d", Integer.parseInt(acsVehicleCode.trim())); } /** diff --git a/nladmin-ui/src/views/system/dept/index.vue b/nladmin-ui/src/views/system/dept/index.vue index 0e0cfd7..bfb3003 100644 --- a/nladmin-ui/src/views/system/dept/index.vue +++ b/nladmin-ui/src/views/system/dept/index.vue @@ -287,7 +287,7 @@ export default { // 改变状态 changeEnabled(data, val) { const satus = this.enabledTypeOptions.find(item => { - return item.key == data.is_used + return item.key === data.is_used }) this.$confirm(i18n.t('Dept.msg.tip3', { display_name: satus.display_name, name: data.name }), i18n.t('common.Tips'), { confirmButtonText: i18n.t('common.Confirm'), diff --git a/nladmin-ui/src/views/system/user/dialog/relevanceUserDialog.vue b/nladmin-ui/src/views/system/user/dialog/relevanceUserDialog.vue index ee63329..50d2677 100644 --- a/nladmin-ui/src/views/system/user/dialog/relevanceUserDialog.vue +++ b/nladmin-ui/src/views/system/user/dialog/relevanceUserDialog.vue @@ -121,7 +121,7 @@ export default { console.log(this.crud.data) for (var k = 0; k < this.users.length; k++) { for (var i = 0; i < this.crud.data.length; i++) { - if (this.crud.data[i].user_id == this.users[k]) { + if (this.crud.data[i].user_id === this.users[k]) { this.$refs.table.toggleRowSelection(this.crud.data[i], true) break } diff --git a/nladmin-ui/src/views/wms/sch/point/index.vue b/nladmin-ui/src/views/wms/sch/point/index.vue index d6f32d1..94a7846 100644 --- a/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/nladmin-ui/src/views/wms/sch/point/index.vue @@ -10,21 +10,21 @@ label-width="90px" label-suffix=":" > - - - - - + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + - + - - + + - + - + - - + + @@ -290,7 +290,7 @@ {{ dict.label.vehicle_type[scope.row.vehicle_type] }} - +