From 97c50162b3390718c241b506ea8b3b4c66fdca4a Mon Sep 17 00:00:00 2001 From: zhengxuming Date: Wed, 30 Jul 2025 15:00:08 +0800 Subject: [PATCH] =?UTF-8?q?add:MES=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/nladmin-system/nlsso-server/pom.xml | 5 + .../controller/MesToWmsController.java | 42 +++++++ .../dto/mes/MesCallMaterialRequestDto.java | 39 +++++++ .../wms/ext_manage/dto/mes/MesResponse.java | 68 +++++++++++ .../ext_manage/service/MesToWmsService.java | 28 +++++ .../service/impl/MesToWmsServiceImpl.java | 110 ++++++++++++++++++ 6 files changed, 292 insertions(+) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/controller/MesToWmsController.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/dto/mes/MesCallMaterialRequestDto.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/dto/mes/MesResponse.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/MesToWmsService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/MesToWmsServiceImpl.java diff --git a/lms/nladmin-system/nlsso-server/pom.xml b/lms/nladmin-system/nlsso-server/pom.xml index 6006c7b..b1d5f4e 100644 --- a/lms/nladmin-system/nlsso-server/pom.xml +++ b/lms/nladmin-system/nlsso-server/pom.xml @@ -41,6 +41,11 @@ pom + + org.springframework.boot + spring-boot-starter-validation + + com.github.oshi diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/controller/MesToWmsController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/controller/MesToWmsController.java new file mode 100644 index 0000000..614913a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/controller/MesToWmsController.java @@ -0,0 +1,42 @@ +package org.nl.wms.ext_manage.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.ext_manage.dto.mes.MesCallMaterialRequestDto; +import org.nl.wms.ext_manage.service.MesToWmsService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * MES接口controller + * + * @author zhengxuming + * @since 2025年7月28日 + */ +@RestController +@RequestMapping("/api/mes") +@Slf4j +public class MesToWmsController { + + @Resource + private MesToWmsService mesToWmsService; + + @PostMapping("/callMaterial") + @SaIgnore + @Log("MES请求叫料") + public ResponseEntity callMaterial(@RequestBody @Validated MesCallMaterialRequestDto param) { + return new ResponseEntity<>(mesToWmsService.callMaterial(param), HttpStatus.OK); + } + + @PostMapping("/backMaterial") + @SaIgnore + @Log("MES请求退料/空桶") + public ResponseEntity backMaterial(@RequestBody @Validated MesCallMaterialRequestDto param) { + return new ResponseEntity<>(mesToWmsService.backMaterial(param), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/dto/mes/MesCallMaterialRequestDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/dto/mes/MesCallMaterialRequestDto.java new file mode 100644 index 0000000..7fc9d7d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/dto/mes/MesCallMaterialRequestDto.java @@ -0,0 +1,39 @@ +package org.nl.wms.ext_manage.dto.mes; + +import lombok.Data; +import javax.validation.constraints.NotBlank; +@Data +public class MesCallMaterialRequestDto { + @NotBlank(message = "设备号不为空") + private String device_code; + + @NotBlank(message = "货位号不为空") + private String struct_code; + + @NotBlank(message = "物料编码不为空") + private String material_code; + + @NotBlank(message = "料桶号不为空") + private String vehicle_code; + + @NotBlank(message = "组盘标识不为空") + private String storagevehicleext_id; + + @NotBlank(message = "物料编码不为空") + private String pcsn; + + private String qty_unit_name; + + private String qty; + + private String remark; + + @NotBlank(message = "任务号不为空") + private String task_code; + @NotBlank(message = "任务类型不为空") + private String task_type; + + private String supp_code; + + private String supp_name; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/dto/mes/MesResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/dto/mes/MesResponse.java new file mode 100644 index 0000000..26b85af --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/dto/mes/MesResponse.java @@ -0,0 +1,68 @@ +package org.nl.wms.ext_manage.dto.mes; + +import cn.hutool.http.HttpStatus; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.Builder; +import lombok.Data; +import org.nl.common.base.TableDataInfo; + +/** + *

+ * Mes调用WMS 返回结果 + *

+ * + * @author zhengxuming + * @since 2025年7月29日09:22:57 + */ +@Data +@Builder +public class MesResponse { + + + /** + * 信息 + */ + private String message; + + + private Integer status; + + /** + * 返回数据 + */ + private T data; + + /** + * 不带数据反馈 + * @return MesResponse + */ + public static MesResponse requestOk() { + return MesResponse.builder() + .message("操作成功!") + .status(0) + .build(); + } + + /** + * 带数据反馈 + * @return MesResponse + */ + public static MesResponse requestParamOk(T data) { + return MesResponse.builder() + .message("操作成功!") + .data(data) + .status(0) + .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/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/MesToWmsService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/MesToWmsService.java new file mode 100644 index 0000000..efc5276 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/MesToWmsService.java @@ -0,0 +1,28 @@ +package org.nl.wms.ext_manage.service; + +import org.nl.wms.ext_manage.dto.mes.MesCallMaterialRequestDto; +import org.nl.wms.ext_manage.dto.mes.MesResponse; + +/** + *

+ * MES调用WMS 服务类 + *

+ * + * @author zhengxuming + * @since 2025年7月28日 + */ +public interface MesToWmsService { + /** + * MES下发设备叫料任务 + * @param + * @return MesResponse + */ + MesResponse callMaterial(MesCallMaterialRequestDto dto); + + /** + * MES 请求退料/空桶 + * @param + * @return MesResponse + */ + MesResponse backMaterial(MesCallMaterialRequestDto dto); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/MesToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/MesToWmsServiceImpl.java new file mode 100644 index 0000000..3bfcc71 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/MesToWmsServiceImpl.java @@ -0,0 +1,110 @@ +package org.nl.wms.ext_manage.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.ext_manage.dto.mes.MesCallMaterialRequestDto; +import org.nl.wms.ext_manage.dto.mes.MesResponse; +import org.nl.wms.ext_manage.enums.ResultAcsStatus; +import org.nl.wms.ext_manage.service.AcsToWmsService; +import org.nl.wms.ext_manage.service.MesToWmsService; +import org.nl.wms.ext_manage.service.util.AcsResponse; +import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBasePointService; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; +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.AbstractTask; +import org.nl.wms.sch_manage.service.util.TaskFactory; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + *

+ * MES调用WMS 实现类 + *

+ * + * @author zhengxuming + * @since 2025年7月28日16:12:19 + */ +@Slf4j +@Service +public class MesToWmsServiceImpl implements MesToWmsService { + + /* + * redisson连接服务 + */ + @Autowired + private RedissonClient redissonClient; + + /* + * 任务服务 + */ + @Autowired + private ISchBaseTaskService iSchBaseTaskService; + @Autowired + private ISchBasePointService pointService; + + /** + * 任务工厂服务 + */ + @Autowired + private TaskFactory taskFactory; + + @Override + @SneakyThrows + public MesResponse callMaterial(MesCallMaterialRequestDto dto) { + log.info("MES下发设备叫料信息输入参数:-------------------: {}", dto); + RLock lock = redissonClient.getLock(dto.getTask_code()); + boolean tryLock = lock.tryLock(1, TimeUnit.SECONDS); + try { + if (tryLock) { + log.info("MES下发设备叫料信息输入参数:--------------------------------------" + MesResponse.requestOk()); + //1、判断当前节点的左右子节点是否存在执行中的任务,如果有则报错 + // + //2、 + + + return MesResponse.requestOk(); + } else { + throw new BadRequestException("任务标识为:" + dto.getTask_code() + "的任务正在操作中!"); + } + } finally { + if (tryLock) { + lock.unlock(); + } + } + } + + @Override + @SneakyThrows + public MesResponse backMaterial(MesCallMaterialRequestDto dto) { + log.info("MES下发设备叫料信息输入参数:-------------------: {}", dto); + RLock lock = redissonClient.getLock(dto.getTask_code()); + boolean tryLock = lock.tryLock(1, TimeUnit.SECONDS); + try { + if (tryLock) { + log.info("MES下发设备叫料信息输入参数:--------------------------------------" + MesResponse.requestOk()); + return MesResponse.requestOk(); + } else { + throw new BadRequestException("任务标识为:" + dto.getTask_code() + "的任务正在操作中!"); + } + } finally { + if (tryLock) { + lock.unlock(); + } + } + } +}