From 27fc77b6d1f1bb2b3ad21f7709e0a6d42bdefcd5 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" Date: Wed, 9 Apr 2025 11:20:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A5=E5=BA=93=E6=98=8E=E7=BB=86=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=93=8D=E4=BD=9C=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/wms/receive/ReceiveService.java | 20 +++++++++++++ .../wms/receive/asn/service/AsnService.java | 6 ++++ .../asnDetail/service/AsnDetailService.java | 29 +++++++++++++++++-- .../constant/DataTracerTypeEnum.java | 10 +++++++ .../datatracer/service/DataTracerService.java | 17 ++++++++++- 5 files changed, 78 insertions(+), 4 deletions(-) diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveService.java index 2a798ab..86af3d2 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveService.java @@ -2,6 +2,7 @@ package net.lab1024.sa.admin.module.business.wms.receive; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import net.lab1024.sa.admin.module.business.wms.base.item.domain.entity.ItemEntity; import net.lab1024.sa.admin.module.business.wms.base.item.service.ItemQueryService; import net.lab1024.sa.admin.module.business.wms.base.location.dao.LocationDao; @@ -42,6 +43,8 @@ import net.lab1024.sa.base.common.code.UserErrorCode; import net.lab1024.sa.base.common.domain.ResponseDTO; import net.lab1024.sa.base.common.util.SmartBigDecimalUtil; import net.lab1024.sa.base.common.util.SmartRequestUtil; +import net.lab1024.sa.base.module.support.datatracer.constant.DataTracerTypeEnum; +import net.lab1024.sa.base.module.support.datatracer.service.DataTracerService; import net.lab1024.sa.base.module.support.serialnumber.constant.SerialNumberIdEnum; import net.lab1024.sa.base.module.support.serialnumber.service.SerialNumberService; import org.apache.commons.collections4.CollectionUtils; @@ -53,6 +56,7 @@ import java.util.*; import java.util.stream.Collectors; @Service +@Slf4j public class ReceiveService { @Resource private AsnDao asnDao; @@ -99,6 +103,9 @@ public class ReceiveService { @Resource private SerialNumberService serialNumberService; + @Resource + private DataTracerService dataTracerService; + /** * 批量收货 @@ -108,6 +115,7 @@ public class ReceiveService { */ @Transactional(rollbackFor = Exception.class) public ResponseDTO batchReceive(BatchReceiveForm batchReceiveForm) { + Long statrTime = System.currentTimeMillis(); List asnDetails = asnDetailQueryService.queryAsnDetailList(batchReceiveForm.getAsnDetailIds()); if (CollectionUtils.isEmpty(asnDetails)) { return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg()); @@ -183,9 +191,15 @@ public class ReceiveService { //批量操作 batchUpdateOrInsert(updateToAsnDetail, insertToTask, insertToInventory, updateToInventory); + //操作日志 + dataTracerService.addTrace(asn.getAsnId(), DataTracerTypeEnum.ASN, "批量收货:" + joiner.getSussMsg().toString()); + //刷新入库单 asnDetailService.refreshAsn(batchReceiveForm.getAsnId()); + Long endTime = System.currentTimeMillis(); + log.info("批量收货耗时:{}ms", endTime - statrTime); + return ResponseDTOUtils.buildResponseDTO(joiner); } @@ -228,6 +242,7 @@ public class ReceiveService { */ @Transactional(rollbackFor = Exception.class) public ResponseDTO batchReturn(BatchReturnForm batchReturnForm) { + Long statrTime = System.currentTimeMillis(); List tasks = taskQueryService.queryByTaskIds(batchReturnForm.getTaskIds()); if (CollectionUtils.isEmpty(tasks)) { return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg()); @@ -278,8 +293,13 @@ public class ReceiveService { //批量操作 returnUpdateOrInsert(updateToAsnDetail, deleteToTask, updateToInventory, deleteToInventory); + //操作日志 + dataTracerService.addTrace(batchReturnForm.getAsnId(), DataTracerTypeEnum.ASN, "批量退货:" + joiner.getSussMsg().toString()); + //刷新入库单 asnDetailService.refreshAsn(batchReturnForm.getAsnId()); + Long endTime = System.currentTimeMillis(); + log.info("批量退货耗时:{}ms", endTime - statrTime); return ResponseDTOUtils.buildResponseDTO(joiner); } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/service/AsnService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/service/AsnService.java index ffd9086..931b05c 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/service/AsnService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/service/AsnService.java @@ -31,6 +31,7 @@ import net.lab1024.sa.base.common.domain.ResponseDTO; import net.lab1024.sa.base.common.domain.PageResult; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import net.lab1024.sa.base.module.support.datatracer.constant.DataTracerTypeEnum; +import net.lab1024.sa.base.module.support.datatracer.domain.form.DataTracerForm; import net.lab1024.sa.base.module.support.datatracer.service.DataTracerService; import net.lab1024.sa.base.module.support.serialnumber.constant.SerialNumberIdEnum; import net.lab1024.sa.base.module.support.serialnumber.service.SerialNumberService; @@ -90,6 +91,9 @@ public class AsnService { addForm.setStatus(AsnOrderStatusEnum.CREATED.getValue()); AsnEntity asnEntity = SmartBeanUtil.copy(addForm, AsnEntity.class); asnDao.insert(asnEntity); + + //操作记录 + dataTracerService.addTrace(asnEntity.getAsnId(), DataTracerTypeEnum.ASN,"新建入库单", null,asnEntity); return ResponseDTO.ok(asnEntity); } @@ -107,6 +111,8 @@ public class AsnService { } AsnEntity asnEntity = SmartBeanUtil.copy(updateForm, AsnEntity.class); asnDao.updateById(asnEntity); + //业务操作记录 + dataTracerService.addTrace(updateForm.getAsnId(), DataTracerTypeEnum.ASN,"编辑入库单", exitAsn,asnEntity); return ResponseDTO.ok(asnEntity); } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asnDetail/service/AsnDetailService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asnDetail/service/AsnDetailService.java index 8e1e3ab..179764c 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asnDetail/service/AsnDetailService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asnDetail/service/AsnDetailService.java @@ -2,7 +2,9 @@ package net.lab1024.sa.admin.module.business.wms.receive.asnDetail.service; import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; +import net.lab1024.sa.admin.module.business.goods.domain.entity.GoodsEntity; import net.lab1024.sa.admin.module.business.wms.base.item.dao.ItemDao; import net.lab1024.sa.admin.module.business.wms.base.item.domain.entity.ItemEntity; import net.lab1024.sa.admin.module.business.wms.base.item.service.ItemQueryService; @@ -22,6 +24,8 @@ import net.lab1024.sa.base.common.code.UserErrorCode; import net.lab1024.sa.base.common.util.SmartBeanUtil; import net.lab1024.sa.base.common.domain.ResponseDTO; import net.lab1024.sa.base.common.util.SmartBigDecimalUtil; +import net.lab1024.sa.base.module.support.datatracer.constant.DataTracerTypeEnum; +import net.lab1024.sa.base.module.support.datatracer.service.DataTracerService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; @@ -57,6 +61,9 @@ public class AsnDetailService { @Resource private AsnDetailQueryService asnDetailQueryService; + @Resource + private DataTracerService dataTracerService; + /** * 添加 @@ -68,8 +75,14 @@ public class AsnDetailService { public ResponseDTO add(AsnDetailAddForm addForm) { AsnDetailEntity asnDetailEntity = SmartBeanUtil.copy(addForm, AsnDetailEntity.class); asnDetailDao.insert(asnDetailEntity); + + //业务操作记录 + ItemEntity item = itemDao.selectById(addForm.getItemId()); + dataTracerService.addTrace(asnDetailEntity.getAsnId(), DataTracerTypeEnum.ASN, "添加:" + item.getItemCode() + "物料明细", null, asnDetailEntity); + //刷新出库单 refreshAsn(addForm.getAsnId()); + return ResponseDTO.ok(); } @@ -81,8 +94,13 @@ public class AsnDetailService { */ @Transactional(rollbackFor = Exception.class) public ResponseDTO update(AsnDetailUpdateForm updateForm) { + AsnDetailEntity originEntity = asnDetailDao.selectById(updateForm.getAsnDetailId()); AsnDetailEntity asnDetailEntity = SmartBeanUtil.copy(updateForm, AsnDetailEntity.class); asnDetailDao.updateById(asnDetailEntity); + + ItemEntity item = itemDao.selectById(updateForm.getItemId()); + dataTracerService.addTrace(asnDetailEntity.getAsnId(), DataTracerTypeEnum.ASN, "编辑:" + item.getItemCode() + "物料明细", originEntity, asnDetailEntity); + //刷新出库单 refreshAsn(updateForm.getAsnId()); return ResponseDTO.ok(); @@ -101,11 +119,12 @@ public class AsnDetailService { return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg()); } JoinerResult joiner = JoinerResult.createJoiner(); - Set asnIds = new HashSet<>(); - List toDeleteList = new ArrayList<>(); List asnDetails = asnDetailQueryService.queryAsnDetailList(idList); + List asnIds = asnDetails.stream().map(AsnDetailEntity::getAsnId).distinct().collect(Collectors.toList()); List itemIds = asnDetails.stream().map(AsnDetailEntity::getItemId).toList(); Map mapItem = itemQueryService.queryItemList(itemIds); + + List toDeleteList = new ArrayList<>(); for (AsnDetailEntity asnDetail : asnDetails) { ItemEntity item = mapItem.get(asnDetail.getItemId()); if (asnDetail.getReceivedQuantity().compareTo(BigDecimal.ZERO) > 0) { @@ -113,13 +132,14 @@ public class AsnDetailService { continue; } toDeleteList.add(asnDetail.getAsnDetailId()); - asnIds.add(asnDetail.getAsnId()); joiner.getSussMsg().add(item.getItemCode() + "明细删除成功"); } if (CollectionUtils.isNotEmpty(toDeleteList)) { //批量删除 asnDetailManager.removeBatchByIds(toDeleteList); + //操作记录 + dataTracerService.addTrace(asnIds.get(0), DataTracerTypeEnum.ASN, "批量删除:" + joiner.getSussMsg().toString()); } //刷新出库单 @@ -151,6 +171,9 @@ public class AsnDetailService { asnDetailDao.deleteById(asnDetailId); joiner.getSussMsg().add(item.getItemCode() + "删除成功"); + //操作记录 + dataTracerService.addTrace(asnId, DataTracerTypeEnum.ASN, "删除:" + joiner.getSussMsg().toString()); + //刷新出库单 refreshAsn(asnId); diff --git a/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/constant/DataTracerTypeEnum.java b/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/constant/DataTracerTypeEnum.java index b1dfee9..d3d08e7 100644 --- a/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/constant/DataTracerTypeEnum.java +++ b/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/constant/DataTracerTypeEnum.java @@ -33,6 +33,16 @@ public enum DataTracerTypeEnum implements BaseEnum { */ OA_ENTERPRISE(3, "OA-企业信息"), + /** + * 入库 + */ + ASN(4, "入库"), + + /** + * 入库明细 + */ + ASN_DETAIL(5, "入库明细"), + ; diff --git a/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/service/DataTracerService.java b/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/service/DataTracerService.java index d023ca0..baf60cc 100644 --- a/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/service/DataTracerService.java +++ b/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/service/DataTracerService.java @@ -32,7 +32,7 @@ import java.util.stream.Collectors; * @Date 2022-07-23 19:38:52 * @Wechat zhuoda1024 * @Email lab1024@163.com - * @Copyright 1024创新实验室 + * @Copyright 1024创新实验室 */ @Slf4j @Service @@ -162,6 +162,21 @@ public class DataTracerService { this.addTrace(tracerForm, requestUser); } + /** + * 保存数据变动记录 + */ + public void addTrace(Long dataId, DataTracerTypeEnum type, String content, Object diffOld, Object diffNew) { + DataTracerForm tracerForm = DataTracerForm.builder() + .dataId(dataId) + .type(type) + .content(content) + .diffOld(diffOld == null ? null : this.getChangeContent(diffOld)) + .diffNew(diffNew == null ? null : this.getChangeContent(diffNew)) + .build(); + RequestUser requestUser = SmartRequestUtil.getRequestUser(); + this.addTrace(tracerForm, requestUser); + } + /** * 保存数据变动记录