From d2286c31bbc9678b0d45277e8c5d97faf1d239a4 Mon Sep 17 00:00:00 2001
From: Ryan <creaycat@gmail.com>
Date: 星期三, 02 四月 2025 20:13:37 +0800
Subject: [PATCH] #新增 1. 新增任务上架接口 2. 新增获取任务信息接口 2. 新增人工上架接口
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 89 +++++++++-
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskLocAreaDto.java | 25 +++
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java | 61 -------
rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java | 11
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java | 38 ++++
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/PublicToStockParams.java | 22 ++
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskQueueDto.java | 28 +++
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 158 ++++++++++++++++++-
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java | 4
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java | 4
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java | 5
11 files changed, 352 insertions(+), 93 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
index 7729419..13eb3eb 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -2,10 +2,7 @@
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
-import com.vincent.rsf.server.api.controller.params.CheckObjParams;
-import com.vincent.rsf.server.api.controller.params.OpStockParams;
-import com.vincent.rsf.server.api.controller.params.OtherReceiptParams;
-import com.vincent.rsf.server.api.controller.params.ReceiptParams;
+import com.vincent.rsf.server.api.controller.params.*;
import com.vincent.rsf.server.api.service.MobileService;
import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
import com.vincent.rsf.server.manager.entity.QlyIsptItem;
@@ -207,11 +204,42 @@
@ApiOperation("鑾峰彇涓婃灦淇℃伅")
@PreAuthorize("hasAuthority('manager:qlyInspect:list')")
- @PostMapping("/stock/operate")
+ @PostMapping("/stock/operate/list")
public R operateToStock(@RequestBody OpStockParams params) {
if (Objects.isNull(params)) {
return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
}
return mobileService.operateToStock(params);
}
+
+ @ApiOperation("浜哄伐涓婃灦")
+ @PreAuthorize("hasAuthority('manager:qlyInspect:update')")
+ @PostMapping("/stock/operate")
+ public R publicToStock(@RequestBody PublicToStockParams params) {
+ if (Objects.isNull(params)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ return mobileService.publicToStock(params);
+ }
+
+ @ApiOperation("鑾峰彇浠诲姟淇℃伅")
+ @PreAuthorize("hasAuthority('manager:qlyInspect:list')")
+ @PostMapping("/task/stock/{code}")
+ public R taskToStock(@PathVariable String code) {
+ if (Objects.isNull(code)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ return mobileService.taskToStock(code);
+ }
+
+ @ApiOperation("浠诲姟涓婃灦")
+ @PreAuthorize("hasAuthority('manager:qlyInspect:update')")
+ @PostMapping("/task/stock")
+ public R taskToLocs(@PathVariable String code) throws Exception {
+ if (Objects.isNull(code)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ return mobileService.taskGetLocs(code);
+ }
+
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/PublicToStockParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/PublicToStockParams.java
new file mode 100644
index 0000000..fdc7b63
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/PublicToStockParams.java
@@ -0,0 +1,22 @@
+package com.vincent.rsf.server.api.controller.params;
+
+import com.vincent.rsf.server.manager.entity.AsnOrderItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "PublicToStockParams", description = "浜哄伐涓婃灦")
+public class PublicToStockParams implements Serializable {
+
+ @ApiModelProperty("搴撲綅缂栫爜")
+ private String locCode;
+
+ @ApiModelProperty("鍗曟嵁鏄庣粏")
+ private List<AsnOrderItem> itemList;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskLocAreaDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskLocAreaDto.java
new file mode 100644
index 0000000..b85cdc7
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskLocAreaDto.java
@@ -0,0 +1,25 @@
+package com.vincent.rsf.server.api.entity.dto;
+
+import com.vincent.rsf.server.manager.entity.Loc;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "TaskLocAreaDto", description = "搴撲綅淇℃伅")
+public class TaskLocAreaDto implements Serializable {
+
+ @ApiModelProperty("搴撲綅搴撳尯")
+ private String areaCode;
+ @ApiModelProperty("搴撳尯鍚嶇О")
+ private String areaName;
+ @ApiModelProperty("搴撳尯ID")
+ private Long areaId;
+ @ApiModelProperty("搴撲綅淇℃伅")
+ private List<Loc> locs;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskQueueDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskQueueDto.java
new file mode 100644
index 0000000..36c9383
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskQueueDto.java
@@ -0,0 +1,28 @@
+package com.vincent.rsf.server.api.entity.dto;
+
+import com.vincent.rsf.server.manager.entity.Loc;
+import com.vincent.rsf.server.manager.entity.Task;
+import com.vincent.rsf.server.manager.entity.TaskItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "TaskQueueDto", description = "浠诲姟淇℃伅")
+public class TaskQueueDto implements Serializable {
+
+ @ApiModelProperty("浠诲姟涓诲崟")
+ private Task task;
+
+ @ApiModelProperty("浠诲姟鏄庣粏")
+ private List<TaskItem> taskItems;
+
+ @ApiModelProperty("搴撲綅淇℃伅")
+ private TaskLocAreaDto locArea;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
index 76c5b8c..8609f3e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -1,10 +1,7 @@
package com.vincent.rsf.server.api.service;
import com.vincent.rsf.framework.common.R;
-import com.vincent.rsf.server.api.controller.params.CheckObjParams;
-import com.vincent.rsf.server.api.controller.params.OpStockParams;
-import com.vincent.rsf.server.api.controller.params.OtherReceiptParams;
-import com.vincent.rsf.server.api.controller.params.ReceiptParams;
+import com.vincent.rsf.server.api.controller.params.*;
import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
import com.vincent.rsf.server.manager.entity.AsnOrder;
import com.vincent.rsf.server.manager.entity.QlyIsptItem;
@@ -53,4 +50,10 @@
R checkUpdate(QlyIsptItem params);
R operateToStock(OpStockParams params);
+
+ R publicToStock(PublicToStockParams params);
+
+ R taskToStock(String code);
+
+ R taskGetLocs(String code) throws Exception;
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
index bced611..6df867e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -4,14 +4,8 @@
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
-import com.vincent.rsf.server.api.controller.params.CheckObjParams;
-import com.vincent.rsf.server.api.controller.params.OpStockParams;
-import com.vincent.rsf.server.api.controller.params.OtherReceiptParams;
-import com.vincent.rsf.server.api.controller.params.ReceiptParams;
-import com.vincent.rsf.server.api.entity.dto.CheckObjDto;
-import com.vincent.rsf.server.api.entity.dto.InspectDetlDto;
-import com.vincent.rsf.server.api.entity.dto.InspectItemDto;
-import com.vincent.rsf.server.api.entity.dto.ReceiptDetlsDto;
+import com.vincent.rsf.server.api.controller.params.*;
+import com.vincent.rsf.server.api.entity.dto.*;
import com.vincent.rsf.server.api.entity.enums.OrderWorkType;
import com.vincent.rsf.server.api.service.MobileService;
import com.vincent.rsf.server.common.config.ConfigProperties;
@@ -49,6 +43,7 @@
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.stream.Collectors;
/**
* @author Ryan
@@ -101,16 +96,28 @@
@Autowired
private WaitPakinItemService waitPakinItemService;
-
@Autowired
private AsnOrderItemLogService asnOrderItemLogService;
-
@Autowired
private FieldsItemService fieldsItemService;
-
@Autowired
private LocService locService;
-
+ @Autowired
+ private PurchaseService purchaseService;
+ @Autowired
+ private StockService stockService;
+ @Autowired
+ private StockItemService stockItemService;
+ @Autowired
+ private TaskService taskService;
+ @Autowired
+ private TaskItemService taskItemService;
+ @Autowired
+ private LocAreaMatRelaMapper locAreaMatRelaMapper;
+ @Autowired
+ private LocAreaRelaMapper locAreaRelaMapper;
+ @Autowired
+ private LocAreaMapper locAreaMapper;
/**
* @author Ryan
@@ -607,6 +614,133 @@
}
/**
+ * 浜哄伐涓婃灦鍏ュ簱
+ * @param params
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R publicToStock(PublicToStockParams params) {
+ if (Objects.isNull(params.getLocCode()) || StringUtils.isBlank(params.getLocCode())) {
+ throw new CoolException("搴撲綅涓嶈兘涓虹┖锛侊紒");
+ }
+ if (Objects.isNull(params.getItemList()) || params.getItemList().isEmpty()) {
+ throw new CoolException("鍗曟嵁鏄庣粏涓嶈兘涓虹┖锛侊紒");
+ }
+ Long OrderId = params.getItemList().stream().findFirst().get().getAsnId();
+ AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, OrderId));
+ if (Objects.isNull(order)) {
+ throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+ }
+ Stock stock = new Stock();
+ stock.setAsnId(OrderId).setAsnCode(order.getCode());
+ if (!Objects.isNull(order.getPoCode()) && StringUtils.isNotBlank(order.getPoCode())) {
+ Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, order.getPoCode()));
+ stock.setPlatOrderNo(purchase.getPlatCode()).setPlatToken(purchase.getPlatId());
+ }
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null);
+ if (StringUtils.isBlank(ruleCode)) {
+ throw new CoolException("褰撳墠涓氬姟锛�" + SerialRuleCode.SYS_STOCK_CODE + "锛岀紪鐮佽鍒欎笉瀛樺湪锛侊紒");
+ }
+ if (!stockService.save(stock)) {
+ throw new CoolException("搴撳瓨淇濆瓨澶辫触锛侊紒");
+ }
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, params.getLocCode()));
+ if (Objects.isNull(loc)) {
+ throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
+ }
+ List<StockItem> stockItems = new ArrayList<>();
+ params.getItemList().forEach(orderItem -> {
+ StockItem stockItem = new StockItem();
+ BeanUtils.copyProperties(orderItem, stockItem);
+ stockItem.setAsnItemId(orderItem.getId())
+ .setBarcode(orderItem.getBarcode())
+ .setLocId(loc.getId())
+ .setId(null)
+ .setStockId(stock.getId());
+ stockItems.add(stockItem);
+ });
+
+ if (!stockItemService.saveBatch(stockItems)) {
+ throw new CoolException("浠诲姟涓婃灦澶辫触锛侊紒");
+ }
+ return R.ok(stock);
+ }
+
+ /**
+ * 鑾峰彇浠诲姟淇℃伅
+ * @param code
+ * @return
+ */
+ @Override
+ public R taskToStock(String code) {
+ if (StringUtils.isBlank(code)) {
+ throw new CoolException("鎷栫洏鐮佷笉鑳戒负绌猴紒锛�");
+ }
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, code));
+ if (Objects.isNull(task)) {
+ throw new CoolException("鎷栫洏浠诲姟涓嶅瓨鍦紒锛�");
+ }
+ List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+ if (!taskItems.isEmpty()) {
+ throw new CoolException("鎷栫洏浠诲姟鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+ TaskQueueDto queueDto = new TaskQueueDto();
+ queueDto.setTask(task).setTaskItems(taskItems);
+ List<Long> list = taskItems.stream().map(TaskItem::getMatnrId).collect(Collectors.toList());
+ List<LocAreaMatRela> matRelas = locAreaMatRelaMapper.selectList(new LambdaQueryWrapper<LocAreaMatRela>().in(LocAreaMatRela::getMatnrId,
+ list));
+ TaskLocAreaDto locAreaDto = new TaskLocAreaDto();
+ /**鍒ゆ柇鏄惁涓虹┖*/
+ if (matRelas.isEmpty()) {
+ locAreaDto.setLocs(new ArrayList<>());
+ } else {
+ Long ids = matRelas.stream().map(LocAreaMatRela::getLocId).collect(Collectors.toList()).stream().findFirst().get();
+ List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getId, ids));
+ if (locs.isEmpty()) {
+ locAreaDto.setLocs(new ArrayList<>());
+ } else {
+ LocArea locArea = locAreaMapper.selectById(new LambdaQueryWrapper<Loc>().in(Loc::getId, ids));
+ if (!Objects.isNull(locArea)) {
+ locAreaDto.setAreaName(locArea.getName()).setAreaCode(locArea.getCode()).setAreaId(locArea.getId());
+ }
+ locAreaDto.setLocs(locs);
+ }
+ }
+ queueDto.setLocArea(locAreaDto);
+
+ return R.ok(queueDto);
+ }
+
+ /**
+ * @Author Ryan
+ * @param code
+ * @desc 浠诲姟涓婃灦
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R taskGetLocs(String code) throws Exception {
+ if (StringUtils.isBlank(code)) {
+ throw new CoolException("鎷栫洏鐮佷笉鑳戒负绌猴紒锛�");
+ }
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, code));
+ if (Objects.isNull(task)) {
+ throw new CoolException("鎷栫洏浠诲姟涓嶅瓨鍦紒锛�");
+ }
+ List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+ if (!taskItems.isEmpty()) {
+ throw new CoolException("鎷栫洏浠诲姟鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+ List<Task> tasks = new ArrayList<>();
+ tasks.add(task);
+
+ taskService.completeTask(tasks);
+
+ return R.ok();
+ }
+
+ /**
* 鑾峰彇ReceiptDetlsDtos
*/
private R getAsnOrderItem(List<AsnOrderItem> items) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
index ced3cec..af1b7ed 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
@@ -131,7 +131,9 @@
if (Objects.isNull(id)) {
throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
}
- return taskService.completeTask(id);
+// return taskService.completeTask(id);
+ return null;
}
+
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
index 5e36040..9658a4e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
@@ -67,6 +67,11 @@
@ApiModelProperty("鍗曟嵁鏄庣粏ID")
private Long orderItemId;
/**
+ * 鐗╂枡璺熻釜鐮�
+ */
+ @ApiModelProperty("鐗╂枡璺熻釜鐮�")
+ private String trackCode;
+ /**
* 鐗╂枡缂栫爜
*/
@ApiModelProperty(value= "鐗╂枡缂栫爜")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index 3156c74..7d72b1c 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -56,68 +56,11 @@
@Scheduled(cron = "0 0/05 * * * ? ")
// @Scheduled(cron = "0/5 * * * * ?")
@Transactional(rollbackFor = Exception.class)
- public void completeInStock() {
+ public void completeInStock() throws Exception {
List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id));
if (tasks.isEmpty()) {
return;
}
- List<Long> list = tasks.stream().map(Task::getId).collect(Collectors.toList());
- List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, list));
- if (taskItems.isEmpty()) {
- throw new CoolException("浠诲姟鏄庣粏涓虹┖锛侊紒");
- }
- /**瀵逛换鍔℃槑缁嗘寜璁㈠崟杩涜鍒嗙粍*/
- Map<Long, List<TaskItem>> orderMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getOrderId));
- List<StockItem> stockItems = new ArrayList<>();
- orderMap.keySet().forEach(key -> {
- AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>()
- .eq(AsnOrder::getId, key)
- .select(AsnOrder::getId, AsnOrder::getPoCode, AsnOrder::getCode));
- Stock stock = new Stock();
- if (!Objects.isNull(order.getPoCode()) && StringUtils.isNotBlank(order.getPoCode())) {
- Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, order.getPoCode()));
- stock.setPlatOrderNo(purchase.getPlatCode()).setPlatToken(purchase.getPlatId());
- }
- String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null);
- if (StringUtils.isBlank(ruleCode)) {
- throw new CoolException("褰撳墠涓氬姟锛�" + SerialRuleCode.SYS_STOCK_CODE + "锛岀紪鐮佽鍒欎笉瀛樺湪锛侊紒");
- }
- stock.setAsnId(order.getId()).setAsnCode(order.getCode());
- if (!stockService.save(stock)) {
- throw new CoolException("搴撳瓨淇濆瓨澶辫触锛侊紒");
- }
- List<TaskItem> items = orderMap.get(key);
- for (TaskItem item : items) {
- /**閫氳繃浠诲姟鏄庣粏涓殑taskId鏌ヨ,鑾峰彇TASK鐨勭洰鏍囧簱浣嶄俊鎭�*/
- Task taskServiceOne = taskService.getOne(new LambdaQueryWrapper<Task>()
- .select(Task::getId, Task::getTargLoc, Task::getOrgLoc, Task::getBarcode)
- .eq(Task::getId, item.getTaskId()));
- Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, taskServiceOne.getTargLoc()));
- if (Objects.isNull(loc)) {
- throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
- }
- AsnOrderItem orderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getId, item.getOrderItemId()));
- if (Objects.isNull(orderItem)) {
- throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
- }
- StockItem stockItem = new StockItem();
- BeanUtils.copyProperties(orderItem, stockItem);
- stockItem.setAsnItemId(item.getOrderItemId())
- .setBarcode(taskServiceOne.getBarcode())
- .setLocId(loc.getId())
- .setId(null)
- .setStockId(stock.getId());
- stockItems.add(stockItem);
- }
- if (!stockItemService.saveBatch(stockItems)) {
- throw new CoolException("搴撳瓨淇敼鏋跺け璐ワ紒锛�");
- }
- });
- /**淇敼搴撲綅鐘舵�佷负F.鍦ㄥ簱*/
- List<String> locCodes = tasks.stream().map(Task::getTargLoc).collect(Collectors.toList());
- if (!locService.update(new LambdaUpdateWrapper<Loc>().set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type).in(Loc::getCode, locCodes))) {
- throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
+ taskService.completeTask(tasks);
}
-
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
index b2ee0b1..1b77afd 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
@@ -11,5 +11,7 @@
R generateTasks(List<WaitPakin> waitPakin, Long loginUserId);
- R completeTask(String id);
+// R completeTask(String id);
+
+ void completeTask(List<Task> task) throws Exception;
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index 69a060d..b3335ec 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -23,6 +23,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -37,7 +38,16 @@
private WaitPakinItemService waitPakinItemService;
@Autowired
private LocService locService;
-
+ @Autowired
+ private PurchaseService purchaseService;
+ @Autowired
+ private AsnOrderService asnOrderService;
+ @Autowired
+ private AsnOrderItemService asnOrderItemService;
+ @Autowired
+ private StockService stockService;
+ @Autowired
+ private StockItemService stockItemService;
@@ -96,6 +106,7 @@
taskItem.setTaskId(task.getId())
.setOrderType(OrderType.ORDER_RECEIPT.type)
.setSource(item.getId())
+ .setTrackCode(item.getTrackCode())
.setCreateBy(loginUserId)
.setUpdateBy(loginUserId)
.setOrderId(item.getAsnId())
@@ -110,18 +121,74 @@
return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�");
}
+
/**
- * @author Ryan
- * @description 瀹屾垚浠诲姟
- * @param
- * @return
- * @time 2025/4/2 11:15
- */
+ * 瀹屾垚浠诲姟
+ * @param tasks
+ * @throws Exception
+ */
@Override
@Transactional(rollbackFor = Exception.class)
- public R completeTask(String id) {
- return null;
+ public void completeTask(List<Task> tasks) throws Exception {
+ if (tasks.isEmpty()) {
+ return;
+ }
+ List<Long> list = tasks.stream().map(Task::getId).collect(Collectors.toList());
+ List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, list));
+ if (taskItems.isEmpty()) {
+ throw new CoolException("浠诲姟鏄庣粏涓嶈兘涓虹┖锛侊紒");
+ }
+ /**瀵逛换鍔℃槑缁嗘寜璁㈠崟杩涜鍒嗙粍*/
+ Map<Long, List<TaskItem>> orderMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getOrderId));
+ List<StockItem> stockItems = new ArrayList<>();
+ orderMap.keySet().forEach(key -> {
+ AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>()
+ .eq(AsnOrder::getId, key)
+ .select(AsnOrder::getId, AsnOrder::getPoCode, AsnOrder::getCode));
+ Stock stock = new Stock();
+ if (!Objects.isNull(order.getPoCode()) && StringUtils.isNotBlank(order.getPoCode())) {
+ Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, order.getPoCode()));
+ stock.setPlatOrderNo(purchase.getPlatCode()).setPlatToken(purchase.getPlatId());
+ }
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null);
+ if (StringUtils.isBlank(ruleCode)) {
+ throw new CoolException("褰撳墠涓氬姟锛�" + SerialRuleCode.SYS_STOCK_CODE + "锛岀紪鐮佽鍒欎笉瀛樺湪锛侊紒");
+ }
+ stock.setAsnId(order.getId()).setAsnCode(order.getCode());
+ if (!stockService.save(stock)) {
+ throw new CoolException("搴撳瓨淇濆瓨澶辫触锛侊紒");
+ }
+ List<TaskItem> items = orderMap.get(key);
+ for (TaskItem item : items) {
+ /**閫氳繃浠诲姟鏄庣粏涓殑taskId鏌ヨ,鑾峰彇TASK鐨勭洰鏍囧簱浣嶄俊鎭�*/
+ Task taskServiceOne = this.getOne(new LambdaQueryWrapper<Task>()
+ .select(Task::getId, Task::getTargLoc, Task::getOrgLoc, Task::getBarcode)
+ .eq(Task::getId, item.getTaskId()));
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, taskServiceOne.getTargLoc()));
+ if (Objects.isNull(loc)) {
+ throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
+ }
+ AsnOrderItem orderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getId, item.getOrderItemId()));
+ if (Objects.isNull(orderItem)) {
+ throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+ StockItem stockItem = new StockItem();
+ BeanUtils.copyProperties(orderItem, stockItem);
+ stockItem.setAsnItemId(item.getOrderItemId())
+ .setBarcode(taskServiceOne.getBarcode())
+ .setLocId(loc.getId())
+ .setId(null)
+ .setStockId(stock.getId());
+ stockItems.add(stockItem);
+ }
+ if (!stockItemService.saveBatch(stockItems)) {
+ throw new CoolException("搴撳瓨淇敼鏋跺け璐ワ紒锛�");
+ }
+ });
+ /**淇敼搴撲綅鐘舵�佷负F.鍦ㄥ簱*/
+ List<String> locCodes = tasks.stream().map(Task::getTargLoc).collect(Collectors.toList());
+ if (!locService.update(new LambdaUpdateWrapper<Loc>().set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type).in(Loc::getCode, locCodes))) {
+ throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
}
-
-
}
--
Gitblit v1.9.1