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); // 添加电子标签任务
}