From 11e3c82bf884e8fffea4a7b90406955ce66dfd2b Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Mon, 28 Jul 2025 17:01:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=A3=E5=8C=85=E9=80=80=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/common/utils/SecurityUtils.java | 34 +++--- .../impl/diy/UnpackingRuleHandler.java | 2 + .../controller/PdaJBController.java | 2 +- .../sch_manage/service/PdaJBService.java | 7 ++ .../service/impl/PdaJBServiceImpl.java | 99 +++++++++++++++ .../service/util/tasks/jb/JbBackAgvTask.java | 114 ++++++++++++++++++ .../service/impl/InBillServiceImpl.java | 29 +++++ .../views/wms/pm_manage/workerorder/index.vue | 8 +- .../views/wms/statement/structivt/index.vue | 2 +- 9 files changed, 277 insertions(+), 20 deletions(-) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbBackAgvTask.java diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/SecurityUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/SecurityUtils.java index 457cee9..b19b9a0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/SecurityUtils.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/SecurityUtils.java @@ -1,6 +1,7 @@ package org.nl.common.utils; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; @@ -23,12 +24,12 @@ public class SecurityUtils { * @return 系统用户 */ public static CurrentUser getCurrentUser() { - Object loginInfo = StpUtil.getExtra("loginInfo"); - if (loginInfo==null){ - throw new BadRequestException("用户信息获取失败"); + try { + Object loginInfo = StpUtil.getExtra("loginInfo"); + return JSONObject.parseObject(String.valueOf(loginInfo),CurrentUser.class); + } catch (Exception e) { + return null; } - return JSONObject.parseObject(String.valueOf(loginInfo),CurrentUser.class); - } /** @@ -37,7 +38,11 @@ public class SecurityUtils { * @return 系统用户名称 */ public static String getCurrentUsername() { - return getCurrentUser().getUsername(); + CurrentUser user = getCurrentUser(); + if (user!=null){ + return user.getUsername(); + } + return "系统用户"; } /** @@ -46,13 +51,11 @@ public class SecurityUtils { * @return 系统用户名称 */ public static String getCurrentNickName() { -// CurrentUser user = getCurrentUser(); -// if (user!=null){ -// return user.getPresonName(); -// } -// return null; - //tofix postMan测试,完成后改回 - return "admin"; + CurrentUser user = getCurrentUser(); + if (user!=null){ + return user.getPresonName(); + } + return "default"; } /** @@ -61,8 +64,9 @@ public class SecurityUtils { * @return 系统用户Id */ public static String getCurrentUserId() { - //return getCurrentUser().getId(); - //tofix postMan测试,完成后改回 + if (ObjectUtil.isNotEmpty(getCurrentUser())) { + return getCurrentUser().getId(); + } return "1"; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/UnpackingRuleHandler.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/UnpackingRuleHandler.java index 30edc3a..d96c35f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/UnpackingRuleHandler.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/UnpackingRuleHandler.java @@ -19,6 +19,8 @@ import java.util.List; /** * 解包入库策略 + * 1、正常入库:料桶入到缓存库 + * 2、退料入库(0012):入库到原料库 * @Author: lyd * @Date: 2025/7/23 */ diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java index 18b9e16..6579d56 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java @@ -66,6 +66,6 @@ public class PdaJBController { @Log("解包退料") @SaIgnore public ResponseEntity jbReturnMaterial(@RequestBody JSONObject whereJson) { - return new ResponseEntity<>(null, HttpStatus.OK); + return new ResponseEntity<>(pdaJBService.jbReturnMaterial(whereJson), HttpStatus.OK); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaJBService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaJBService.java index e7b437d..64b3ab4 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaJBService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaJBService.java @@ -29,4 +29,11 @@ public interface PdaJBService { * @return */ PdaResponse confirmSet(JSONObject param); + + /** + * 原料退料 + * @param param + * @return + */ + PdaResponse jbReturnMaterial(JSONObject param); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java index 45b98f0..7983a27 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java @@ -196,7 +196,12 @@ public class PdaJBServiceImpl implements PdaJBService { // 3、工单状态修改,设置实际开始时间 workorder.setWorkorder_status("3"); + workorder.setOperator(SecurityUtils.getCurrentNickName()); + workorder.setReal_weight(workorder.getPlan_weight()); workorder.setRealproducestart_date(DateUtil.now()); + workorder.setUpdate_time(DateUtil.now()); + workorder.setUpdate_id(SecurityUtils.getCurrentUserId()); + workorder.setUpdate_name(SecurityUtils.getCurrentNickName()); workorderService.updateById(workorder); return PdaResponse.requestOk(); } @@ -408,6 +413,100 @@ public class PdaJBServiceImpl implements PdaJBService { return PdaResponse.requestOk(); } + @Override + @Transactional(rollbackFor = Exception.class) + public PdaResponse jbReturnMaterial(JSONObject param) { + // param: area, point_code, workorder_id + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + String area = param.getString("area"); + String tpCode = param.getString("tp_code"); + String pointCode = param.getString("point_code"); + String workorderId = param.getString("workorder_id"); + PdmBdWorkorder workOrder = workorderService.getById(workorderId); + if (ObjectUtil.isEmpty(workOrder)) { + throw new BadRequestException("工单[" + workorderId + "]不存在!"); + } + SchBasePoint device = pointService.getById(pointCode); + if (ObjectUtil.isEmpty(device)) { + throw new BadRequestException("设备:" + pointCode + " 不存在!"); + } + MdPbStoragevehicleinfo vehicleInfo = storagevehicleinfoService.getByCode(tpCode); + MdMeMaterialbase materialbase = materialbaseService.getById(workOrder.getMaterial_id()); + if (ObjectUtil.isEmpty(materialbase)) { + throw new BadRequestException("物料【" + workOrder.getMaterial_id() + "】不存在!"); + } + Structattr structattr = structattrService.findByCode(workOrder.getStruct_code()); + // 0 组盘(涉及什么库区,通过工单对应的仓位的属性。) + GroupPlate groupPlate = new GroupPlate(); + groupPlate.setGroup_id(IdUtil.getStringId()); + groupPlate.setStoragevehicle_code(tpCode); + // 料桶类型根据工单,工单是根据点位 + groupPlate.setStoragevehicle_type(vehicleInfo.getStoragevehicle_type()); + groupPlate.setMaterial_id(workOrder.getMaterial_id()); + groupPlate.setPcsn(DateUtil.format(new Date(), "yyyy-MM-dd")); + groupPlate.setQty(workOrder.getPlan_weight()); + groupPlate.setQty_unit_id("11"); + groupPlate.setQty_unit_name("kg"); + groupPlate.setFrozen_qty(BigDecimal.ZERO); + groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘")); + groupPlate.setCreate_id(currentUserId); + groupPlate.setCreate_name(nickName); + groupPlate.setCreate_time(now); + groupplateService.save(groupPlate); + // 1 创建退料入库单、明细单、分配单 + Map insertInvObj = new HashMap(); + ArrayList tableData = new ArrayList<>(); + HashMap table = new HashMap<>(); + tableData.add(table); + insertInvObj.put("stor_id", structattr.getStor_id()); + insertInvObj.put("bill_status", "10"); + insertInvObj.put("total_qty", workOrder.getPlan_weight()); + insertInvObj.put("detail_count", 1); + insertInvObj.put("bill_type", "0012"); + insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd")); + insertInvObj.put("tableData", tableData); + table.put("group_id", groupPlate.getGroup_id()); + table.put("storagevehicle_code", tpCode); + table.put("storagevehicle_type", vehicleInfo.getStoragevehicle_type()); + table.put("material_id", materialbase.getMaterial_id()); + table.put("pcsn", groupPlate.getPcsn()); + table.put("qty", groupPlate.getQty()); + table.put("qty_unit_id", groupPlate.getQty_unit_id()); + table.put("qty_unit_name", groupPlate.getQty_unit_name()); + table.put("fronzen_qty", groupPlate.getFrozen_qty()); + table.put("status", "01"); + table.put("material_code", materialbase.getMaterial_code()); + table.put("material_name", materialbase.getMaterial_name()); + table.put("material_spec", materialbase.getMaterial_spec()); + String invId = inBillService.insertDtl(insertInvObj); + // 2 分配货位(获取一个空托盘的仓位) + JSONObject divObj = new JSONObject(); + divObj.put("sect_code", structattr.getSect_code()); + divObj.put("stor_code", structattr.getStor_id()); + divObj.put("checked", true); + List ioStorInvDis = ioStorInvDisMapper.selectList(new LambdaQueryWrapper() + .eq(IOStorInvDis::getIostorinv_id, invId)); + if (ioStorInvDis.size() == 0) { + throw new BadRequestException("分配明细不存在!"); + } + // 类型转换 + ArrayList tables = new ArrayList<>(); + ioStorInvDis.forEach(item -> tables.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class))); + divObj.put("tableMater", tables); + inBillService.divStruct(divObj); + // 3 一键设置、创建任务(4点任务,点位是设备对应的上料位01,和上料位02,仓位是分配的货位其中一个) + Map jsonMst = buildTaskData(pointCode, workorderId, invId); + inBillService.divPoint(jsonMst); + // 4 工单结束(方便下一个工单可以继续) + // 工单完成 + workOrder.setWorkorder_status("5"); + workOrder.setRealproduceend_date(DateUtil.now()); + workorderService.updateById(workOrder); + return PdaResponse.requestOk(); + } + private Map buildTaskData(String pointCode, String workorderId, String invId) { Map jsonMst = new HashMap<>(); // ru库点 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbBackAgvTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbBackAgvTask.java new file mode 100644 index 0000000..38e3db7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbBackAgvTask.java @@ -0,0 +1,114 @@ +package org.nl.wms.sch_manage.service.util.tasks.jb; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; +import org.nl.wms.sch_manage.service.util.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 解包退料AGV任务 + * @Author: lyd + * @Date: 2025/7/28 + */ +@Slf4j +@Component("JbBackAgvTask") +public class JbBackAgvTask extends AbstractTask { + @Resource + private ISchBaseTaskService taskService; + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(json.getString("TaskCode")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(json.getString("task_type")); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setPoint_code3(json.getString("point_code3")); + task.setPoint_code4(json.getString("point_code4")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setVehicle_code2(json.getString("vehicle_code2")); + task.setGroup_id(json.getString("group_id")); + task.setRequest_param(json.toString()); + task.setPriority(json.getString("Priority")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + return null; + } + + @Override + protected 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("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + private void finishTask(SchBaseTask taskObj) { + + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) { + throw new BadRequestException("任务状态必须为生成才能取消任务"); + } + this.cancelTask(taskObj); + } + + private void cancelTask(SchBaseTask taskObj) { + + } + + @Override + public void backMes(String task_code) { + + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java index 545cfea..433fe26 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java @@ -33,6 +33,7 @@ import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.util.tasks.StInTask; +import org.nl.wms.sch_manage.service.util.tasks.jb.JbBackAgvTask; import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask; import org.nl.wms.warehouse_manage.enums.IOSConstant; import org.nl.wms.warehouse_manage.enums.IOSEnum; @@ -92,6 +93,8 @@ public class InBillServiceImpl extends ServiceImpl i private ISchBasePointService pointService; @Resource private JbDownAgvTask jbDownAgvTask; + @Resource + private JbBackAgvTask jbBackAgvTask; @Override public IPage pageQuery(Map whereJson, PageQuery page) { @@ -620,6 +623,32 @@ public class InBillServiceImpl extends ServiceImpl i JSONObject requestTaskParam = new JSONObject(); requestTaskParam.put("tasks", jsonObjects); task_id = jbDownAgvTask.create(requestTaskParam); + } else if ("0012".equals(invObj.getBill_type())) { + // 解包退料入库 + String structCode = map.get("struct_code"); + if (ObjectUtil.isEmpty(structCode)) { + throw new BadRequestException("仓位未分配!"); + } + // 获取组盘信息 + GroupPlate groupPlate = mdPbGroupplateService.getOne(new LambdaQueryWrapper() + .eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code()) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))); + // 解包入库 + SchBasePoint rkPoint = pointService.getById(point_code); + // 父点位 + SchBasePoint parentPoint = pointService.getById(rkPoint.getParent_point_code()); + SchBasePoint fullPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "3"); + SchBasePoint emptyPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "4"); + JSONObject task = new JSONObject(); + task.put("task_type", "JbDownAgvTask"); + task.put("group_id", groupPlate.getGroup_id()); + task.put("workorder_id", whereJson.get("workorder_id")); + task.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); + task.put("point_code1", structCode); + task.put("point_code2", emptyPoint.getPoint_code()); + task.put("point_code3", fullPoint.getPoint_code()); + task.put("point_code4", structCode); + jbBackAgvTask.create(task); } else { //创建任务 JSONObject task_form = new JSONObject(); diff --git a/lms/nladmin-ui/src/views/wms/pm_manage/workerorder/index.vue b/lms/nladmin-ui/src/views/wms/pm_manage/workerorder/index.vue index 914e35a..45d1379 100644 --- a/lms/nladmin-ui/src/views/wms/pm_manage/workerorder/index.vue +++ b/lms/nladmin-ui/src/views/wms/pm_manage/workerorder/index.vue @@ -332,8 +332,8 @@ {{ dict.label.pdm_workorder_status[scope.row.workorder_status] }} - - + + - +