diff --git a/files/WCS开放式接口文档.md b/files/WCS开放式接口文档.md index d7af0ee..a35a394 100644 --- a/files/WCS开放式接口文档.md +++ b/files/WCS开放式接口文档.md @@ -364,6 +364,7 @@ http://{ip}:{port}?taskId={taskId} | ---------- | ------------ | -------- | ---- | -------- | ------------------------------------------------------------ | | taskGroup | 任务组 | string | 64 | N | | | taskType | 任务类型 | int | | Y | 枚举类型:
1 - 捡货
2 - 上架
3 - 盘点
4 - 清点
5 - 其他 | +| vehicleNo | 载具号 | string | 64 | Y | | | lightModel | 点亮类型 | int | | Y | 枚举类型:
1 - 立即点亮
2 - 等待触发
根据流程确定,请与我们交流方案 | | sysName | 上位系统名称 | string | 32 | Y | 固定值,请联系我们获取,否则将无法收到任务回告 | | taskList | 任务数据 | list | | Y | | diff --git a/wcs/src/main/java/org/wcs/constant/enums/database/EtagTaskLightModelEnum.java b/wcs/src/main/java/org/wcs/constant/enums/database/EtagTaskLightModelEnum.java index 64080e1..fe4b0c6 100644 --- a/wcs/src/main/java/org/wcs/constant/enums/database/EtagTaskLightModelEnum.java +++ b/wcs/src/main/java/org/wcs/constant/enums/database/EtagTaskLightModelEnum.java @@ -18,4 +18,18 @@ public enum EtagTaskLightModelEnum { this.code = code; this.message = message; } + + /** + * 校验是否是正确的枚举值 + * @param code 枚举值 + * @return 是否是正确的枚举值 + */ + public static boolean isValid(Integer code) { + for (EtagTaskLightModelEnum value : EtagTaskLightModelEnum.values()) { + if (value.code.equals(code)) { + return true; + } + } + return false; + } } diff --git a/wcs/src/main/java/org/wcs/constant/enums/database/EtagTaskTypeEnum.java b/wcs/src/main/java/org/wcs/constant/enums/database/EtagTaskTypeEnum.java index a466ba7..0e144a3 100644 --- a/wcs/src/main/java/org/wcs/constant/enums/database/EtagTaskTypeEnum.java +++ b/wcs/src/main/java/org/wcs/constant/enums/database/EtagTaskTypeEnum.java @@ -21,4 +21,19 @@ public enum EtagTaskTypeEnum { this.code = code; this.message = message; } + + /** + * 校验是否是正确的枚举值 + * + * @param code code + * @return 是否合法 + */ + public static boolean isValid(Integer code) { + for (EtagTaskTypeEnum value : EtagTaskTypeEnum.values()) { + if (value.code.equals(code)) { + return true; + } + } + return false; + } } diff --git a/wcs/src/main/java/org/wcs/mapper/impl/AppEtagTaskDao.java b/wcs/src/main/java/org/wcs/mapper/impl/AppEtagTaskDao.java index cf66678..69fcb51 100755 --- a/wcs/src/main/java/org/wcs/mapper/impl/AppEtagTaskDao.java +++ b/wcs/src/main/java/org/wcs/mapper/impl/AppEtagTaskDao.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.BatchResult; import org.springframework.stereotype.Service; import org.wcs.mapper.AppEtagTaskMapper; import org.wcs.mapper.intf.AppEtagTaskService; @@ -12,6 +13,7 @@ import org.wcs.model.bo.db.DataBaseActionResult; import org.wcs.model.bo.tuple.Tuple2; import org.wcs.model.dto.serve.etagTask.EtagTaskQueryReq; import org.wcs.model.po.app.AppEtagTask; +import org.wcs.utils.AppStringUtils; import java.time.LocalDateTime; import java.util.List; @@ -75,6 +77,26 @@ public class AppEtagTaskDao extends ServiceImpl } } + /** + * 批量新增电子标签任务 + * @param appEtagTaskList 新增参数 + * @return 响应 + */ + @Override + public DataBaseActionResult insert(List appEtagTaskList) { + if(appEtagTaskList == null || appEtagTaskList.isEmpty()) { + return new DataBaseActionResult<>(0, new Exception("参数错误")); + } + appEtagTaskList.forEach(appEtagTask -> appEtagTask.setCreateTime(LocalDateTime.now())); + try { + boolean saveBatch = super.saveBatch(appEtagTaskList); + return new DataBaseActionResult<>(saveBatch ? appEtagTaskList.size() : 0); + } catch (Exception e) { + log.error("批量新增电子标签任务失败", e); + return new DataBaseActionResult<>(0, e); + } + } + /** * 修改电子标签任务 * @param appEtagTask 修改参数 @@ -113,4 +135,24 @@ public class AppEtagTaskDao extends ServiceImpl return new DataBaseActionResult<>(0, e); } } + + /** + * 根据任务ID查询任务 + * @param taskId 任务ID + * @return 任务列表 + */ + @Override + public List queryByTaskId(String taskId) { + if(AppStringUtils.isEmpty(taskId)) { + return null; + } + try { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AppEtagTask::getTaskId, taskId); + queryWrapper.orderByAsc(AppEtagTask::getCreateTime); + return baseMapper.selectList(queryWrapper); + } catch (Exception e) { + return null; + } + } } diff --git a/wcs/src/main/java/org/wcs/mapper/intf/AppEtagTaskService.java b/wcs/src/main/java/org/wcs/mapper/intf/AppEtagTaskService.java index 65a6072..5460638 100755 --- a/wcs/src/main/java/org/wcs/mapper/intf/AppEtagTaskService.java +++ b/wcs/src/main/java/org/wcs/mapper/intf/AppEtagTaskService.java @@ -14,5 +14,7 @@ public interface AppEtagTaskService extends IService { Tuple2> queryEtagTask(EtagTaskQueryReq request, Integer pageIndex, Integer pageSize); DataBaseActionResult insert(AppEtagTask appEtagTask); // 插入新数据 + DataBaseActionResult insert(List appEtagTaskList); // 插入新数据 DataBaseActionResult updateIgnoreNull(AppEtagTask appEtagTask); // 更新数据,忽略Null值 + List queryByTaskId(String taskId); // 通过任务ID查询 } diff --git a/wcs/src/main/java/org/wcs/model/dto/pub/AddEtagTaskReq.java b/wcs/src/main/java/org/wcs/model/dto/pub/AddEtagTaskReq.java index 4349608..fc00c85 100644 --- a/wcs/src/main/java/org/wcs/model/dto/pub/AddEtagTaskReq.java +++ b/wcs/src/main/java/org/wcs/model/dto/pub/AddEtagTaskReq.java @@ -30,6 +30,13 @@ public class AddEtagTaskReq { @JsonProperty("taskType") private Integer taskType; + /** + * 载具号 + */ + @NotBlank(message = "载具号不能为空") + @JsonProperty("vehicleNo") + private String vehicleNo; + /** * 点亮模式 */ @@ -49,7 +56,8 @@ public class AddEtagTaskReq { */ @Valid @JsonProperty("taskItemList") - @Size.List(@Size(min = 1, message = "任务列表不能为空")) + @Size(min = 1, message = "任务列表不能为空") + @NotNull(message = "任务列表不能为空") private List taskItemList; } diff --git a/wcs/src/main/java/org/wcs/serve/controller/pub/TaskController.java b/wcs/src/main/java/org/wcs/serve/controller/pub/TaskController.java index 172039d..db26848 100644 --- a/wcs/src/main/java/org/wcs/serve/controller/pub/TaskController.java +++ b/wcs/src/main/java/org/wcs/serve/controller/pub/TaskController.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.wcs.model.dto.pub.AddConveyTaskReq; +import org.wcs.model.dto.pub.AddEtagTaskReq; import org.wcs.model.dto.pub.AddStockTaskReq; import org.wcs.model.vo.pub.PubServeDataResponse; import org.wcs.model.vo.pub.PubServeResponse; @@ -62,6 +63,16 @@ public class TaskController { return taskService.addConveyTask(addConveyTaskReq); } + /** + * 添加电子标签任务 + * @param addEtagTaskReq 添加任务数据 + * @return 添加结果 + */ + @PostMapping("addEtagTask") + public PubServeResponse addEtagTask(@RequestBody @Validated AddEtagTaskReq addEtagTaskReq) { + return taskService.addEtagTask(addEtagTaskReq); + } + diff --git a/wcs/src/main/java/org/wcs/serve/service/pub/impl/TaskService.java b/wcs/src/main/java/org/wcs/serve/service/pub/impl/TaskService.java index 6837684..eaa67ea 100644 --- a/wcs/src/main/java/org/wcs/serve/service/pub/impl/TaskService.java +++ b/wcs/src/main/java/org/wcs/serve/service/pub/impl/TaskService.java @@ -1,20 +1,22 @@ package org.wcs.serve.service.pub.impl; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.wcs.constant.enums.common.TrueOrFalseEnum; -import org.wcs.constant.enums.database.ConveyTaskStatusEnum; -import org.wcs.constant.enums.database.ConveyTaskTypeEnum; -import org.wcs.constant.enums.database.StockComposeTaskStatusEnum; -import org.wcs.constant.enums.database.StockComposeTaskTypeEnum; +import org.wcs.constant.enums.database.*; import org.wcs.factory.PubServeResponseFactory; import org.wcs.helper.PlcTaskIdHelper; import org.wcs.mapper.intf.AppConveyTaskService; +import org.wcs.mapper.intf.AppEtagTaskService; import org.wcs.mapper.intf.AppStockComposeTaskBakService; import org.wcs.mapper.intf.AppStockComposeTaskService; import org.wcs.model.dto.pub.AddConveyTaskReq; +import org.wcs.model.dto.pub.AddEtagTaskReq; import org.wcs.model.dto.pub.AddStockTaskReq; +import org.wcs.model.dto.pub.EtagTaskItem; import org.wcs.model.po.app.AppConveyTask; +import org.wcs.model.po.app.AppEtagTask; import org.wcs.model.po.app.AppStockComposeTask; import org.wcs.model.po.app.AppStockComposeTaskBak; import org.wcs.model.vo.pub.PubServeDataResponse; @@ -22,14 +24,15 @@ import org.wcs.model.vo.pub.PubServeResponse; import org.wcs.model.vo.pub.task.StockTaskDetailVo; import org.wcs.serve.service.pub.intf.ITaskService; import org.wcs.utils.AppBeanUtils; -import org.wcs.utils.AppObjectUtils; import org.wcs.utils.AppStringUtils; import org.wcs.utils.AppUUIDUtils; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; +@Slf4j @Service @RequiredArgsConstructor public class TaskService implements ITaskService { @@ -40,6 +43,8 @@ public class TaskService implements ITaskService { private final AppConveyTaskService conveyTaskService; // 箱式线任务服务 + private final AppEtagTaskService etagTaskService; // 电子标签任务服务 + /** * 添加仓库任务 * @param addStockTaskReq 添加仓库任务请求 @@ -199,5 +204,61 @@ public class TaskService implements ITaskService { return insertRows > 0 ? PubServeResponseFactory.success("添加任务成功") : PubServeResponseFactory.fail("数据服务异常,请重试"); } + /** + * 添加电子标签任务 + * @param addEtagTaskReq 添加任务数据 + * @return 添加结果 + */ + @Override + public PubServeResponse addEtagTask(AddEtagTaskReq addEtagTaskReq) { + boolean validTaskTypeResult = EtagTaskTypeEnum.isValid(addEtagTaskReq.getTaskType()); + if(!validTaskTypeResult) { + return PubServeResponseFactory.fail("任务类型不在支持的范围内"); + } + boolean validLightModelResult = EtagTaskLightModelEnum.isValid(addEtagTaskReq.getLightModel()); + if(!validLightModelResult) { + return PubServeResponseFactory.fail("点亮模式不在支持的范围内"); + } + // 定义任务组 + String taskGroup = addEtagTaskReq.getTaskGroup(); + if(AppStringUtils.isEmpty(taskGroup)) { + taskGroup = AppUUIDUtils.getNewUUID(); + } + List newEtagTaskList = new ArrayList<>(); // 新增任务列表 + List taskItemList = addEtagTaskReq.getTaskItemList(); + for (EtagTaskItem etagTaskItem : taskItemList) { + // 检验任务是否存在 + List appEtagTasks = etagTaskService.queryByTaskId(etagTaskItem.getTaskId()); + if(appEtagTasks == null) { + return PubServeResponseFactory.fail("数据服务异常,请重试"); + } + if(!appEtagTasks.isEmpty()) { + log.info("收到一个重复的电子标签任务:{}", AppStringUtils.objectToString(etagTaskItem)); + continue; + } + AppEtagTask appEtagTask = new AppEtagTask(); + appEtagTask.setTaskId(etagTaskItem.getTaskId()); + appEtagTask.setTaskGroup(taskGroup); + appEtagTask.setTaskType(addEtagTaskReq.getTaskType()); + appEtagTask.setVehicleNo(addEtagTaskReq.getVehicleNo()); + appEtagTask.setOrderId(etagTaskItem.getOrderId()); + appEtagTask.setLocation(etagTaskItem.getLocation()); + appEtagTask.setGoodsId(etagTaskItem.getGoodsId()); + appEtagTask.setGoodsName(etagTaskItem.getGoodsName()); + appEtagTask.setLightNum(BigDecimal.valueOf(etagTaskItem.getLightNum())); + appEtagTask.setTaskStatus(EtagTaskStatusEnum.NOT_ACTIVATED.getCode()); + appEtagTask.setLightModel(addEtagTaskReq.getLightModel()); + appEtagTask.setTaskSource(addEtagTaskReq.getSysName()); + appEtagTask.setCreatePerson("?"); + appEtagTask.setCreateTime(LocalDateTime.now()); + newEtagTaskList.add(appEtagTask); + } + if(newEtagTaskList.isEmpty()) { + return PubServeResponseFactory.success("任务已存在,请勿重复发送"); + } + Integer result = etagTaskService.insert(newEtagTaskList).result(); + return result > 0 ? PubServeResponseFactory.success("添加成功") : PubServeResponseFactory.fail("数据服务异常,请重试"); + } + } diff --git a/wcs/src/main/java/org/wcs/serve/service/pub/intf/ITaskService.java b/wcs/src/main/java/org/wcs/serve/service/pub/intf/ITaskService.java index 1366125..c701d53 100644 --- a/wcs/src/main/java/org/wcs/serve/service/pub/intf/ITaskService.java +++ b/wcs/src/main/java/org/wcs/serve/service/pub/intf/ITaskService.java @@ -1,6 +1,7 @@ package org.wcs.serve.service.pub.intf; import org.wcs.model.dto.pub.AddConveyTaskReq; +import org.wcs.model.dto.pub.AddEtagTaskReq; import org.wcs.model.dto.pub.AddStockTaskReq; import org.wcs.model.vo.pub.PubServeDataResponse; import org.wcs.model.vo.pub.PubServeResponse; @@ -13,4 +14,6 @@ public interface ITaskService { PubServeResponse cancelStockTask(String taskId); // 取消仓库任务 PubServeResponse addConveyTask(AddConveyTaskReq addConveyTaskReq); // 添加箱式线任务 + + PubServeResponse addEtagTask(AddEtagTaskReq addEtagTaskReq); // 添加电子标签任务 }