From c2478aba3b4db1f7c97ddd40eb636eed42368f28 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 25 八月 2025 16:39:50 +0800
Subject: [PATCH] 库存调整单功能优化修改
---
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java | 261 ++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 241 insertions(+), 20 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
index cc26147..23c1c0a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -3,25 +3,24 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.controller.erp.params.*;
+import com.vincent.rsf.server.api.controller.erp.params.dto.CheckDiffDto;
+import com.vincent.rsf.server.api.controller.erp.params.dto.TransferInfoDto;
+import com.vincent.rsf.server.api.controller.erp.params.dto.WkOrderDto;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.manager.controller.dto.LocStockDto;
import com.vincent.rsf.server.manager.entity.*;
-import com.vincent.rsf.server.manager.enums.CompanysType;
-import com.vincent.rsf.server.manager.enums.OrderSourceType;
-import com.vincent.rsf.server.manager.enums.OrderType;
-import com.vincent.rsf.server.manager.enums.OrderWorkType;
+import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.service.impl.MatnrServiceImpl;
-import com.vincent.rsf.server.manager.service.impl.TransferItemServiceImpl;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.entity.Fields;
-import com.vincent.rsf.server.system.service.FieldsItemService;
import com.vincent.rsf.server.system.service.FieldsService;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import com.vincent.rsf.server.api.service.ReceiveMsgService;
@@ -52,8 +51,6 @@
@Autowired
private FieldsService fieldsService;
@Autowired
- private FieldsItemService fieldsItemService;
- @Autowired
private MatnrGroupService matnrGroupService;
@Autowired
private MatnrServiceImpl matnrService;
@@ -68,8 +65,6 @@
@Autowired
private LocService locService;
@Autowired
- private LocItemService locItemService;
- @Autowired
private WarehouseAreasService warehouseAreasService;
@Autowired
private WarehouseService warehouseService;
@@ -79,6 +74,16 @@
private TransferService transferService;
@Autowired
private TransferItemService transferItemService;
+ @Autowired
+ private LocReviseService locReviseService;
+ @Autowired
+ private ReviseLogService reviseLogService;
+ @Autowired
+ private ReviseLogItemService reviseLogItemService;
+ @Autowired
+ private CheckDiffService checkDiffService;
+ @Autowired
+ private CheckDiffItemService checkDiffItemService;
/**
@@ -88,7 +93,7 @@
* @version 1.0
*/
@Override
- @Transactional(rollbackFor = Exception.class)
+ @Transactional(timeout = 60, rollbackFor = Exception.class)
public boolean syncPurchasee(List<OrderParams> orders) {
if (orders.isEmpty()) {
throw new CoolException("鍗曟嵁鍐呭涓嶈兘涓虹┖锛侊紒");
@@ -170,6 +175,7 @@
* @param matnrs
*/
@Override
+ @Transactional(timeout = 60, rollbackFor = Exception.class)
public void syncMatnrs(List<BaseMatParms> matnrs) {
List<Matnr> syncMatnrs = new ArrayList<>();
if (!matnrs.isEmpty()) {
@@ -204,7 +210,7 @@
@Override
public R queryOrderStatus(QueryOrderParam queryParams) {
WkOrder wkOrders = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
- .eq(WkOrder::getCode, queryParams.getOrderNo())
+ .in(WkOrder::getCode, queryParams.getOrderNo())
.eq(WkOrder::getType, queryParams.getType()));
if (Objects.isNull(wkOrders)) {
throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
@@ -227,7 +233,7 @@
public R syncLocsDetl(PageParam<Loc, BaseParam> pageParam, QueryWrapper<Loc> wrapper) {
Page<Object> page = new Page<>();
page.setCurrent(pageParam.getCurrent()).setSize(pageParam.getSize());
- IPage<LocStockDto> locStocks = locService.getLocDetls(page);
+ IPage<LocStockDto> locStocks = locService.getLocDetls(page);
return R.ok().add(locStocks);
}
@@ -297,7 +303,7 @@
BeanUtils.copyProperties(param, locArea);
WarehouseAreas warehouseAreas = warehouseAreasService
.getOne(new LambdaQueryWrapper<WarehouseAreas>()
- .eq(WarehouseAreas::getName, param.getName()));
+ .eq(WarehouseAreas::getName, param.getName()));
if (!Objects.isNull(warehouseAreas)) {
locArea.setWarehouseId(warehouseAreas.getId());
}
@@ -351,7 +357,7 @@
String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_COMPANYS_CODE, null);
companys.setCode(ruleCode);
} else {
- throw new CoolException(one.getName() + "锛屼紒涓氬悕閲嶅锛侊紒");
+ throw new CoolException(one.getName() + "锛屼紒涓氬悕閲嶅锛侊紒");
}
companys.setType(CompanysType.getCustomVal(param.getType()))
.setId(null);
@@ -372,12 +378,12 @@
WkOrder wkOrder = new WkOrder();
String ruleCode = null;
if (syncOrders.getType().equals(OrderType.ORDER_CHECK.type)) {
- ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_CHECK_RULE_CODE, null);
+ ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_CHECK_RULE_CODE, null);
} else if (syncOrders.getType().equals(OrderType.ORDER_IN.type)) {
ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, null);
} else if (syncOrders.getType().equals(OrderType.ORDER_OUT.type)) {
ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, null);
- } else if (syncOrders.getType().equals(OrderType.ORDER_REVISE.type)) {
+ } else if (syncOrders.getType().equals(OrderType.ORDER_REVISE.type)) {
ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LOC_REVISE_CODE, null);
} else if (syncOrders.getType().equals(OrderType.ORDER_TRANSFER.type)) {
ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TRANSFER_ORDER_CODE, null);
@@ -425,17 +431,17 @@
*/
@Override
@Transactional(timeout = 60, rollbackFor = Exception.class)
- public R syncTransfer(SyncTransferParams transferParams) {
+ public R syncTransfer(SyncTransferParams transferParams, Long loginUserId) {
Transfer transfer = new Transfer();
WarehouseAreas warehouseAreas = warehouseAreasService
.getOne(new LambdaQueryWrapper<WarehouseAreas>()
- .eq(WarehouseAreas::getName, transfer.getOrgAreaName()));
+ .eq(WarehouseAreas::getName, transferParams.getOrgAreaName()));
if (Objects.isNull(warehouseAreas)) {
throw new CoolException("鍘熷簱鍖轰笉瀛樺湪锛侊紒");
}
WarehouseAreas warehouseAreas1 = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>()
- .eq(WarehouseAreas::getName, transfer.getTarAreaName()));
+ .eq(WarehouseAreas::getName, transferParams.getTarAreaName()));
if (Objects.isNull(warehouseAreas1)) {
throw new CoolException("鐩爣搴撳尯涓嶅瓨鍦紒锛�");
}
@@ -449,6 +455,11 @@
.setTarAreaId(warehouseAreas1.getId())
.setTarWareName(warehouseAreas1.getWarehouseId$())
.setTarWareId(warehouseAreas1.getWarehouseId())
+ .setCreateBy(loginUserId)
+ .setCreateTime(new Date())
+ .setUpdateTime(new Date())
+ .setUpdateBy(loginUserId)
+ .setCode(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TRANSFER_ORDER_CODE, null))
.setSource(OrderSourceType.ORDER_SOURCE_TYPE_ERP.val);
if (!transferService.save(transfer)) {
@@ -464,6 +475,10 @@
}
transferItem.setMatnrId(matnr.getId())
.setTransferId(transfer.getId())
+ .setCreateBy(loginUserId)
+ .setUpdateBy(loginUserId)
+ .setCreateTime(new Date())
+ .setUpdateTime(new Date())
.setTransferCode(transfer.getCode());
if (!transferItemService.save(transferItem)) {
@@ -474,4 +489,210 @@
return R.ok();
}
+ /**
+ * @author Ryan
+ * @date 2025/8/20
+ * @description: 搴撳瓨璋冩暣鍗曞悓姝�
+ * @version 1.0
+ */
+ @Override
+ @Transactional(timeout = 60, rollbackFor = Exception.class)
+ public R syncLocRevise(SyncLocReviseParams reviseParams, Long loginUserId) {
+ LocRevise locRevise = new LocRevise();
+ if (Objects.isNull(reviseParams.getAreaName())) {
+ throw new CoolException("搴撳尯涓嶈兘涓虹┖锛侊紒");
+ }
+ WarehouseAreas warehouseAreas = warehouseAreasService
+ .getOne(new LambdaQueryWrapper<WarehouseAreas>()
+ .eq(WarehouseAreas::getName, reviseParams.getAreaName()));
+ if (Objects.isNull(warehouseAreas)) {
+ throw new CoolException("搴撳尯涓嶅瓨鍦紒锛�");
+ }
+
+ locRevise.setAreaName(warehouseAreas.getName())
+ .setType(LocReviseType.getLocRevise(reviseParams.getType()))
+ .setCreateBy(loginUserId)
+ .setUpdateBy(loginUserId)
+ .setCreateTime(new Date())
+ .setUpdateTime(new Date())
+ .setAreaId(warehouseAreas.getId());
+ locRevise.setCode(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LOC_REVISE_CODE, null));
+
+ if (!locReviseService.save(locRevise)) {
+ throw new CoolException("搴撳瓨璋冩暣鍗曚繚瀛樺け璐ワ紒锛�");
+ }
+
+ reviseParams.getReviseItems().forEach(revise -> {
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, revise.getLocCode()));
+ ReviseLog reviseLog = new ReviseLog();
+ BeanUtils.copyProperties(loc, reviseLog);
+ reviseLog.setReviseId(locRevise.getId())
+ .setLocCode(loc.getCode())
+ .setType(Integer.parseInt(loc.getType()))
+ .setCreateBy(loginUserId)
+ .setUpdateBy(loginUserId)
+ .setCreateTime(new Date())
+ .setUpdateTime(new Date())
+ .setReviseCode(locRevise.getCode());
+ if (!reviseLogService.save(reviseLog)) {
+ throw new CoolException("搴撳瓨璋冩暣鍗曚笉鑳戒负绌猴紒锛�");
+ }
+ revise.getItems().forEach(reviseItem -> {
+ ReviseLogItem logItem = new ReviseLogItem();
+ BeanUtils.copyProperties(reviseItem, logItem);
+ Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, reviseItem.getMatnrCode()));
+ if (Objects.isNull(matnr)) {
+ throw new CoolException("鐗╂枡涓嶅瓨鍦紒锛�");
+ }
+ logItem.setLocId(loc.getId())
+ .setLocCode(loc.getCode())
+ .setId(null)
+ .setMaktx(matnr.getName())
+ .setMatnrCode(matnr.getCode())
+ .setMatnrId(matnr.getId())
+ .setReviseLogId(reviseLog.getId())
+ .setCreateBy(loginUserId)
+ .setUpdateBy(loginUserId)
+ .setCreateTime(new Date())
+ .setUpdateTime(new Date())
+ .setReviseQty(reviseItem.getAnfme());
+ if (!reviseLogItemService.save(logItem)) {
+ throw new CoolException("璋冩暣搴撳瓨鏄庣粏淇濆瓨澶辫触锛侊紒");
+ }
+ });
+ });
+
+ return R.ok();
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/8/20
+ * @description: 鍗曟嵁淇敼--鏀惰揣閫氱煡鍗�/鍑哄簱鍗�/鐩樼偣鍗�
+ * @version 1.0
+ */
+ @Override
+ @Transactional(timeout = 60, rollbackFor = Exception.class)
+ public R syncOrderUpdate(SyncOrderParams orders) {
+ //鍏ュ簱鍗曚慨鏀�
+ if (orders.getType().equals(OrderType.ORDER_IN.type)) {
+ orders.getItems().forEach(orderItem -> {
+ WkOrder order = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
+ .eq(WkOrder::getType, OrderType.ORDER_IN.type)
+ .eq(WkOrder::getCode, orderItem.getOrderCode()));
+ if (Objects.isNull(order)) {
+ throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+ }
+
+ if (!asnOrderItemService.update(new LambdaUpdateWrapper<WkOrderItem>()
+ .eq(WkOrderItem::getOrderCode, orderItem.getOrderCode())
+ .eq(WkOrderItem::getMatnrCode, orderItem.getMatnrCode())
+ .eq(WkOrderItem::getSplrBatch, orderItem.getBatch())
+ .set(WkOrderItem::getAnfme, orderItem.getAnfme()))) {
+ throw new CoolException("鍗曟嵁淇敼澶辫触锛侊紒");
+ }
+
+ List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
+ .eq(WkOrderItem::getOrderId, order.getId()));
+ if (orderItems.isEmpty()) {
+ throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+
+ Double summed = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum();
+ order.setAnfme(summed);
+
+ if (!asnOrderService.updateById(order)) {
+ throw new CoolException("鍗曟嵁淇敼澶辫触锛侊紒");
+ }
+ });
+ } else {
+
+ }
+ return null;
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/8/21
+ * @description: 鍒犻櫎鍗曟嵁
+ * @version 1.0
+ */
+ @Override
+ @Transactional(timeout = 60, rollbackFor = Exception.class)
+ public R syncOrderDelete(List<SyncOrderParams> orders) {
+ orders.forEach(order -> {
+ order.getItems().forEach(orderItem -> {
+ WkOrder wkOrder = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
+ .eq(WkOrder::getType, order.getType())
+ .in(WkOrder::getExceStatus, Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val))
+ .eq(WkOrder::getId, orderItem.getOrderId()));
+ if (Objects.isNull(wkOrder)) {
+ throw new CoolException("璁㈠崟锛�" + orderItem.getOrderCode() + "锛屽綋鍓嶇姸鎬侊紝涓嶅彲鎵ц鍒犻櫎鎿嶄綔锛侊紒");
+ }
+ if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>()
+ .eq(WkOrderItem::getMatnrId, orderItem.getMatnrId())
+ .eq(WkOrderItem::getSplrBatch, orderItem.getBatch())
+ .eq(WkOrderItem::getOrderCode, orderItem.getOrderCode()))) {
+ throw new CoolException("鍗曟嵁鏄庣粏鍒犻櫎澶辫触锛侊紒");
+ }
+ List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, orderItem.getOrderId()));
+ if (orderItems.isEmpty()) {
+ if (!asnOrderService.removeById(orderItem.getOrderId())) {
+ throw new CoolException("鍗曟嵁鍒犻櫎澶辫触锛侊紒");
+ }
+ }
+ });
+ });
+ return R.ok();
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/8/21
+ * @description: 璋冩嫈鍗曟槑缁嗘煡璇�
+ * @version 1.0
+ */
+ @Override
+ public R queryTransfer(QueryOrderParam queryParams) {
+ Transfer transfer = transferService.getOne(new LambdaQueryWrapper<Transfer>()
+ .in(Transfer::getCode, queryParams.getOrderNo()));
+ if (Objects.isNull(transfer)) {
+ throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+ }
+ List<TransferItem> orderItems = transferItemService.list(new LambdaQueryWrapper<TransferItem>()
+ .eq(TransferItem::getTransferId, transfer.getId()));
+ TransferInfoDto wkorderDto = new TransferInfoDto();
+ wkorderDto.setTransfer(transfer).setItems(orderItems);
+ return R.ok().add(wkorderDto);
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/8/22
+ * @description: 鐩樼偣宸紓鍗曞悓姝�
+ * @version 1.0
+ */
+ @Override
+ @Transactional(timeout = 60, rollbackFor = Exception.class)
+ public R syncCheckDiffs(SyncCheckDiffParams syncParams) {
+ List<CheckDiff> diffs = checkDiffService.list(new LambdaQueryWrapper<CheckDiff>()
+ .eq(CheckDiff::getExceStatus, CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val)
+ .in(CheckDiff::getOrderCode, syncParams.getDiffCode()));
+ if (diffs.isEmpty()) {
+ return R.ok();
+ }
+ List<CheckDiffDto> dtos = new ArrayList<>();
+ diffs.forEach(check -> {
+ CheckDiffDto checkDto = new CheckDiffDto();
+ CheckDiff checkDiff = new CheckDiff();
+ BeanUtils.copyProperties(check, checkDiff);
+ List<CheckDiffItem> items = checkDiffItemService.list(new LambdaQueryWrapper<CheckDiffItem>()
+ .eq(CheckDiffItem::getCheckId, check.getId()));
+ checkDto.setItems(items)
+ .setCheckDiff(checkDiff);
+ dtos.add(checkDto);
+ });
+
+ return R.ok().add(dtos);
+ }
}
--
Gitblit v1.9.1