From 481819975d08f3455fb148410e272f560dd7adb2 Mon Sep 17 00:00:00 2001 From: verou <857149855@qq.com> Date: 星期四, 03 四月 2025 09:14:47 +0800 Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop --- 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 | 32 ++- rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java | 12 rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java | 5 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java | 49 ++++ rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 205 +++++++++++++++++++- rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Stock.java | 33 +- rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java | 1 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java | 8 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/TaskStsType.java | 5 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java | 5 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/OperateStockDto.java | 8 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/manager/entity/StockItem.java | 11 rsf-server/src/main/resources/application.yml | 2 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OpStockParams.java | 19 + 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 | 15 + rsf-server/src/main/resources/application-dev.yml | 3 21 files changed, 495 insertions(+), 86 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 5d55a19..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 @@ -1,14 +1,10 @@ package com.vincent.rsf.server.api.controller; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.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.AsnOrderItem; import com.vincent.rsf.server.manager.entity.QlyIsptItem; import com.vincent.rsf.server.system.controller.BaseController; import com.vincent.rsf.server.system.controller.param.LoginParam; @@ -201,8 +197,49 @@ @PostMapping("/inspect/check/update") public R checkUpdate(@RequestBody QlyIsptItem params) { if (Objects.isNull(params)) { - throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } return mobileService.checkUpdate(params); } + + @ApiOperation("鑾峰彇涓婃灦淇℃伅") + @PreAuthorize("hasAuthority('manager:qlyInspect:list')") + @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/OpStockParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OpStockParams.java new file mode 100644 index 0000000..a0f2e0a --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OpStockParams.java @@ -0,0 +1,19 @@ +package com.vincent.rsf.server.api.controller.params; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +@ApiModel(value = "OpStockParams", description = "浜哄伐涓婃灦鍙傛暟") +public class OpStockParams { + + @ApiModelProperty("鎷栫洏鐮�") + private String barcode; + @ApiModelProperty("鍗曞彿") + private String asnCode; + @ApiModelProperty("鐗╂枡缂栫爜") + private String matnrCode; +} 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/OperateStockDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/OperateStockDto.java new file mode 100644 index 0000000..861b04d --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/OperateStockDto.java @@ -0,0 +1,8 @@ +package com.vincent.rsf.server.api.entity.dto; + +import com.vincent.rsf.server.manager.entity.AsnOrderItem; + +public class OperateStockDto extends AsnOrderItem { + + +} 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/entity/enums/TaskStsType.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/TaskStsType.java index 53568c0..5fc1dfc 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/TaskStsType.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/TaskStsType.java @@ -2,16 +2,13 @@ public enum TaskStsType { + //浠诲姟鐘舵�� GENERATE_IN(1L, "鍒涘缓鍏ュ簱浠诲姟"), WCS_EXECUTE_IN(2L, "RCS浠诲姟宸蹭笅鍙�"), WCS_CONTAINER_RECEIVE(3L, "RCS瀹瑰櫒鍒拌揪"), - WCS_CONVEYOR_START(4L, "RCS瀹瑰櫒娴佸姩浠诲姟宸蹭笅鍙�"), - WCS_TOTE_LOAD(5L, "RCS鍙栫瀹屾垚"), - WCS_TOTE_UNLOAD(6L, "RCS鏀剧瀹屾垚"), - WCS_PUTAWAY_SUCESS(7L, "RCS浠诲姟瀹屾垚"), // WCS_PUTAWAY_FAILED(11L, "浠诲姟澶辫触"), 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 173025d..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,9 +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.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; @@ -50,4 +48,12 @@ R checkObjs(CheckObjParams params); 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 90a66e0..8edde8a 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,13 +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.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; @@ -35,7 +30,7 @@ import com.vincent.rsf.server.system.service.FieldsService; import com.vincent.rsf.server.system.service.UserLoginService; import com.vincent.rsf.server.system.utils.SerialRuleUtils; -import org.apache.tika.utils.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -48,6 +43,7 @@ import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; /** * @author Ryan @@ -100,13 +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 @@ -152,7 +163,7 @@ */ @Override public R getOrderByCode(String barcode) { - if (StringUtils.isEmpty(barcode)) { + if (StringUtils.isBlank(barcode)) { return R.error("鏍囩鐮佷笉鑳戒负绌猴紒锛�"); } List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, barcode)); @@ -544,7 +555,7 @@ */ @Override public R checkUpdate(QlyIsptItem params) { - if (Objects.isNull(params.getId()) || Objects.isNull(params.getIspectId())) { + if (Objects.isNull(params.getId())) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } IsptItemsParams itemsParams = new IsptItemsParams(); @@ -559,6 +570,174 @@ } /** + * @author Ryan + * @description 浜哄伐涓婃灦 + * @param + * @return + * @time 2025/4/2 16:33 + */ + @Override + public R operateToStock(OpStockParams params) { + if (org.apache.commons.lang3.StringUtils.isBlank(params.getBarcode())) { + throw new CoolException("鎷栫洏鐮佷笉鑳戒负绌猴紒锛�"); + } + if (StringUtils.isBlank(params.getAsnCode())) { + throw new CoolException("鍗曟嵁涓嶈兘涓虹┖锛侊紒"); + } + if (StringUtils.isBlank(params.getMatnrCode())) { + throw new CoolException("鐗╂枡缂栫爜涓嶈兘涓虹┖锛侊紒"); + } + AsnOrder asnOrders = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, params.getAsnCode())); + if (Objects.isNull(asnOrders)) { + throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); + } + List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, params.getBarcode())); + if (!locs.isEmpty()) { + throw new CoolException("鎷栫洏宸蹭娇鐢�"); + } + List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode())); + if (!waitPakins.isEmpty()) { + throw new CoolException("鎷栫洏宸蹭娇鐢�!!"); + } + AsnOrderItem orderItems = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() + .eq(AsnOrderItem::getAsnId, asnOrders.getId()) + .eq(AsnOrderItem::getMatnrCode, params.getMatnrCode())); + if (Objects.isNull(orderItems)) { + return R.ok(null); + } + orderItems.setBarcode(params.getBarcode()); + + return R.ok(orderItems); + } + + /** + * 浜哄伐涓婃灦鍏ュ簱 + * @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..b3710c4 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 @@ -5,6 +5,7 @@ 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.entity.enums.TaskStsType; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.common.annotation.OperationLog; import com.vincent.rsf.server.common.domain.BaseParam; @@ -93,12 +94,16 @@ if (Objects.isNull(ids) || ids.length < 1) { return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } - List<TaskItem> list = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getTaskId, ids)); - if (!list.isEmpty()) { - return R.error("鏈夋槑缁嗗垪琛ㄥ瓨鍦� 锛侊紒"); + List<Long> longs = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id); + List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().in(Task::getId, ids).in(Task::getTaskStatus, longs)); + if (tasks.isEmpty()) { + throw new CoolException("浠诲姟宸插鎵ц鐘舵�佷笉鍙彇娑堬紒锛�"); } if (!taskService.removeByIds(Arrays.asList(ids))) { return R.error("Delete Fail"); + } + if (!taskItemService.remove(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getTaskId, ids))) { + return R.error("Details delete Failed"); } return R.ok("Delete Success").add(ids); } @@ -131,7 +136,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/AsnOrderItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java index b9a8b68..b2f899c 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java @@ -23,7 +23,6 @@ public class AsnOrderItem implements Serializable { private static final long serialVersionUID = 1L; - /** * ID */ diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java index a80dafc..f2104be 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java @@ -36,49 +36,41 @@ @ApiModelProperty(value= "ID") @TableId(value = "id", type = IdType.AUTO) private Long id; - /** * 涓诲崟ID */ @ApiModelProperty(value= "涓诲崟ID") private Long ispectId; - @ApiModelProperty("璐ㄦ鍗曠姸鎬�") private String isptStatus; @ApiModelProperty("鍗曟嵁鏄庣粏ID") private Long asnItemId; - /** * 缂栧彿 */ @ApiModelProperty(value= "缂栧彿") private String matnrCode; - /** * 鐗╂枡鍚嶇О */ @ApiModelProperty(value= "鐗╂枡鍚嶇О") private String maktx; - /** * 鏍囩 */ @ApiModelProperty(value= "鏍囩") private String label; - /**鈭� * 渚涘簲鍟嗗悕绉� */ @ApiModelProperty(value= "渚涘簲鍟嗗悕绉�") private String splrName; - /** * 渚涘簲鍟嗘壒娆� */ @ApiModelProperty(value= "渚涘簲鍟嗘壒娆�") private String splrBatch; - /** * 搴撳瓨鎵规 */ diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Stock.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Stock.java index 670c7d5..4c92d50 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Stock.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Stock.java @@ -2,6 +2,8 @@ import java.text.SimpleDateFormat; import java.util.Date; + +import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import com.baomidou.mybatisplus.annotation.TableLogic; import java.text.SimpleDateFormat; @@ -24,6 +26,7 @@ import java.util.Date; @Data +@Accessors(chain = true) @TableName("man_stock") public class Stock implements Serializable { @@ -40,25 +43,27 @@ * ASN鍗曟嵁锛� 甯﹀嚭PO鍗� */ @ApiModelProperty(value= "ASN鍗曟嵁锛� 甯﹀嚭PO鍗�") - private String asnOrder; + private Long asnId; + @ApiModelProperty("璁㈠崟缂栫爜") + private String asnCode; /** * ERP鍑瘉 */ - @ApiModelProperty(value= "ERP鍑瘉") - private String erpToken; + @ApiModelProperty(value= "plat鍑瘉") + private String platToken; /** - * ERP鍗曞彿 + * plat鍗曞彿 */ - @ApiModelProperty(value= "ERP鍗曞彿") - private String erpOrder; + @ApiModelProperty(value= "plat鍗曞彿") + private String platOrderNo; /** - * ERP搴撳瓨鍦板潃 + * plat搴撳瓨鍦板潃 */ - @ApiModelProperty(value= "ERP搴撳瓨鍦板潃") - private String erpStkAdr; + @ApiModelProperty(value= "plat搴撳瓨鍦板潃") + private String platStkAdr; /** * 鍚堝悓鏍囪瘑 @@ -144,11 +149,11 @@ public Stock() {} - public Stock(String asnOrder,String erpToken,String erpOrder,String erpStkAdr,String contractId,String lockReason,Short lockStatus,String locker,Date lockedTime,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) { - this.asnOrder = asnOrder; - this.erpToken = erpToken; - this.erpOrder = erpOrder; - this.erpStkAdr = erpStkAdr; + public Stock(String asnOrder,String platToken,String platOrder,String platStkAdr,String contractId,String lockReason,Short lockStatus,String locker,Date lockedTime,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) { + this.platOrderNo = asnOrder; + this.platToken = platToken; + this.platOrderNo = platOrder; + this.platStkAdr = platStkAdr; this.contractId = contractId; this.lockReason = lockReason; this.lockStatus = lockStatus; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java index f9860c8..d90bbe0 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.vincent.rsf.server.manager.service.*; +import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; @@ -22,6 +23,7 @@ import java.io.Serializable; @Data +@Accessors(chain = true) @TableName("man_stock_item") public class StockItem implements Serializable { @@ -44,7 +46,7 @@ * 搴撳瓨澶栭敭鏍囪瘑 */ @ApiModelProperty(value= "搴撳瓨澶栭敭鏍囪瘑") - private String stockId; + private Long stockId; /** * 鐗╂枡鏍囪瘑 @@ -190,29 +192,24 @@ * 閿佸畾鍘熷洜 */ @ApiModelProperty(value= "閿佸畾鍘熷洜") - @TableField(exist = false) private String lockReason; /** * 閿佸畾鐘舵�� */ @ApiModelProperty(value= "閿佸畾鐘舵��") - @TableField(exist = false) private Short lockStatus; /** * 閿佸畾浜� */ @ApiModelProperty(value= "閿佸畾浜�") - @TableField(exist = false) private String locker; /** * 閿佸畾鏃堕棿 */ @ApiModelProperty(value= "閿佸畾鏃堕棿") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - @TableField(exist = false) private Date lockedTime; /** @@ -268,7 +265,7 @@ public StockItem() {} - public StockItem(String stockId,Long matnrId,Long asnItemId, String code,String matnrk,Double anfme,Double workQty,Double qty,Double weight,String unit,Long shipperId,String splrId,String brand,String batch,String prodTime,Long inspectId,String splrBtch,String asnOrder,String erpToken,String erpOrder,String erpStkAdr,Long locId,String barcode,Double purPrice,String lockReason,Short lockStatus,String locker,Date lockedTime,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) { + public StockItem(Long stockId,Long matnrId,Long asnItemId, String code,String matnrk,Double anfme,Double workQty,Double qty,Double weight,String unit,Long shipperId,String splrId,String brand,String batch,String prodTime,Long inspectId,String splrBtch,String asnOrder,String erpToken,String erpOrder,String erpStkAdr,Long locId,String barcode,Double purPrice,String lockReason,Short lockStatus,String locker,Date lockedTime,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) { this.stockId = stockId; this.matnrId = matnrId; this.asnItemId = asnItemId; 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 4ce0193..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 @@ -1,17 +1,26 @@ package com.vincent.rsf.server.manager.schedules; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.entity.enums.TaskStsType; -import com.vincent.rsf.server.manager.entity.Task; -import com.vincent.rsf.server.manager.entity.TaskItem; +import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.service.*; +import com.vincent.rsf.server.system.constant.SerialRuleCode; +import com.vincent.rsf.server.system.enums.LocStsType; +import com.vincent.rsf.server.system.utils.SerialRuleUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.sql.Array; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -28,6 +37,12 @@ @Autowired private StockItemService stockItemService; @Autowired + private PurchaseService purchaseService; + @Autowired + private AsnOrderService asnOrderService; + @Autowired + private AsnOrderItemService asnOrderItemService; + @Autowired private StockService stockService; @Autowired private LocService locService; @@ -39,20 +54,13 @@ * @time 2025/4/2 12:37 */ @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("浠诲姟鏄庣粏涓虹┖锛侊紒"); - } - taskItems.forEach(item -> { - - }); + 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("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } } - - } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java index cb7bab2..9c1961c 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java @@ -48,4 +48,9 @@ * 浠诲姟缂栫爜鐢熸垚瑙勫垯 */ public final static String SYS_TASK_CODE = "sys_task_code"; + + /** + * 浠撳簱缂栫爜瑙勫垯 + */ + public final static String SYS_STOCK_CODE = "sys_stock_code"; } diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml index 3f84f94..888318c 100644 --- a/rsf-server/src/main/resources/application-dev.yml +++ b/rsf-server/src/main/resources/application-dev.yml @@ -14,8 +14,9 @@ driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.4.24:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: root -# url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai +# url: jdbc:mysql://localhost:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai # username: rsf + password: 34821015 type: com.alibaba.druid.pool.DruidDataSource druid: diff --git a/rsf-server/src/main/resources/application.yml b/rsf-server/src/main/resources/application.yml index 4a03079..a844729 100644 --- a/rsf-server/src/main/resources/application.yml +++ b/rsf-server/src/main/resources/application.yml @@ -23,7 +23,7 @@ # global-config: # field-strategy: 0 configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: true call-setters-on-nulls: true -- Gitblit v1.9.1