入库明细 添加操作记录

main
HUOJIN\92525 2025-04-09 11:20:20 +08:00
parent 104d17606a
commit 27fc77b6d1
5 changed files with 78 additions and 4 deletions

View File

@ -2,6 +2,7 @@ package net.lab1024.sa.admin.module.business.wms.receive;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import jakarta.annotation.Resource; 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.domain.entity.ItemEntity;
import net.lab1024.sa.admin.module.business.wms.base.item.service.ItemQueryService; import net.lab1024.sa.admin.module.business.wms.base.item.service.ItemQueryService;
import net.lab1024.sa.admin.module.business.wms.base.location.dao.LocationDao; 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.domain.ResponseDTO;
import net.lab1024.sa.base.common.util.SmartBigDecimalUtil; import net.lab1024.sa.base.common.util.SmartBigDecimalUtil;
import net.lab1024.sa.base.common.util.SmartRequestUtil; 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.constant.SerialNumberIdEnum;
import net.lab1024.sa.base.module.support.serialnumber.service.SerialNumberService; import net.lab1024.sa.base.module.support.serialnumber.service.SerialNumberService;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
@ -53,6 +56,7 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@Slf4j
public class ReceiveService { public class ReceiveService {
@Resource @Resource
private AsnDao asnDao; private AsnDao asnDao;
@ -99,6 +103,9 @@ public class ReceiveService {
@Resource @Resource
private SerialNumberService serialNumberService; private SerialNumberService serialNumberService;
@Resource
private DataTracerService dataTracerService;
/** /**
* *
@ -108,6 +115,7 @@ public class ReceiveService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ResponseDTO<String> batchReceive(BatchReceiveForm batchReceiveForm) { public ResponseDTO<String> batchReceive(BatchReceiveForm batchReceiveForm) {
Long statrTime = System.currentTimeMillis();
List<AsnDetailEntity> asnDetails = asnDetailQueryService.queryAsnDetailList(batchReceiveForm.getAsnDetailIds()); List<AsnDetailEntity> asnDetails = asnDetailQueryService.queryAsnDetailList(batchReceiveForm.getAsnDetailIds());
if (CollectionUtils.isEmpty(asnDetails)) { if (CollectionUtils.isEmpty(asnDetails)) {
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg()); return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
@ -183,9 +191,15 @@ public class ReceiveService {
//批量操作 //批量操作
batchUpdateOrInsert(updateToAsnDetail, insertToTask, insertToInventory, updateToInventory); batchUpdateOrInsert(updateToAsnDetail, insertToTask, insertToInventory, updateToInventory);
//操作日志
dataTracerService.addTrace(asn.getAsnId(), DataTracerTypeEnum.ASN, "批量收货:" + joiner.getSussMsg().toString());
//刷新入库单 //刷新入库单
asnDetailService.refreshAsn(batchReceiveForm.getAsnId()); asnDetailService.refreshAsn(batchReceiveForm.getAsnId());
Long endTime = System.currentTimeMillis();
log.info("批量收货耗时:{}ms", endTime - statrTime);
return ResponseDTOUtils.buildResponseDTO(joiner); return ResponseDTOUtils.buildResponseDTO(joiner);
} }
@ -228,6 +242,7 @@ public class ReceiveService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ResponseDTO<String> batchReturn(BatchReturnForm batchReturnForm) { public ResponseDTO<String> batchReturn(BatchReturnForm batchReturnForm) {
Long statrTime = System.currentTimeMillis();
List<TaskEntity> tasks = taskQueryService.queryByTaskIds(batchReturnForm.getTaskIds()); List<TaskEntity> tasks = taskQueryService.queryByTaskIds(batchReturnForm.getTaskIds());
if (CollectionUtils.isEmpty(tasks)) { if (CollectionUtils.isEmpty(tasks)) {
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg()); return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
@ -278,8 +293,13 @@ public class ReceiveService {
//批量操作 //批量操作
returnUpdateOrInsert(updateToAsnDetail, deleteToTask, updateToInventory, deleteToInventory); returnUpdateOrInsert(updateToAsnDetail, deleteToTask, updateToInventory, deleteToInventory);
//操作日志
dataTracerService.addTrace(batchReturnForm.getAsnId(), DataTracerTypeEnum.ASN, "批量退货:" + joiner.getSussMsg().toString());
//刷新入库单 //刷新入库单
asnDetailService.refreshAsn(batchReturnForm.getAsnId()); asnDetailService.refreshAsn(batchReturnForm.getAsnId());
Long endTime = System.currentTimeMillis();
log.info("批量退货耗时:{}ms", endTime - statrTime);
return ResponseDTOUtils.buildResponseDTO(joiner); return ResponseDTOUtils.buildResponseDTO(joiner);
} }

View File

@ -31,6 +31,7 @@ import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.domain.PageResult; import net.lab1024.sa.base.common.domain.PageResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.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.datatracer.service.DataTracerService;
import net.lab1024.sa.base.module.support.serialnumber.constant.SerialNumberIdEnum; import net.lab1024.sa.base.module.support.serialnumber.constant.SerialNumberIdEnum;
import net.lab1024.sa.base.module.support.serialnumber.service.SerialNumberService; import net.lab1024.sa.base.module.support.serialnumber.service.SerialNumberService;
@ -90,6 +91,9 @@ public class AsnService {
addForm.setStatus(AsnOrderStatusEnum.CREATED.getValue()); addForm.setStatus(AsnOrderStatusEnum.CREATED.getValue());
AsnEntity asnEntity = SmartBeanUtil.copy(addForm, AsnEntity.class); AsnEntity asnEntity = SmartBeanUtil.copy(addForm, AsnEntity.class);
asnDao.insert(asnEntity); asnDao.insert(asnEntity);
//操作记录
dataTracerService.addTrace(asnEntity.getAsnId(), DataTracerTypeEnum.ASN,"新建入库单", null,asnEntity);
return ResponseDTO.ok(asnEntity); return ResponseDTO.ok(asnEntity);
} }
@ -107,6 +111,8 @@ public class AsnService {
} }
AsnEntity asnEntity = SmartBeanUtil.copy(updateForm, AsnEntity.class); AsnEntity asnEntity = SmartBeanUtil.copy(updateForm, AsnEntity.class);
asnDao.updateById(asnEntity); asnDao.updateById(asnEntity);
//业务操作记录
dataTracerService.addTrace(updateForm.getAsnId(), DataTracerTypeEnum.ASN,"编辑入库单", exitAsn,asnEntity);
return ResponseDTO.ok(asnEntity); return ResponseDTO.ok(asnEntity);
} }

View File

@ -2,7 +2,9 @@ package net.lab1024.sa.admin.module.business.wms.receive.asnDetail.service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; 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.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.domain.entity.ItemEntity;
import net.lab1024.sa.admin.module.business.wms.base.item.service.ItemQueryService; 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.util.SmartBeanUtil;
import net.lab1024.sa.base.common.domain.ResponseDTO; import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.util.SmartBigDecimalUtil; 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.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -57,6 +61,9 @@ public class AsnDetailService {
@Resource @Resource
private AsnDetailQueryService asnDetailQueryService; private AsnDetailQueryService asnDetailQueryService;
@Resource
private DataTracerService dataTracerService;
/** /**
* *
@ -68,8 +75,14 @@ public class AsnDetailService {
public ResponseDTO<String> add(AsnDetailAddForm addForm) { public ResponseDTO<String> add(AsnDetailAddForm addForm) {
AsnDetailEntity asnDetailEntity = SmartBeanUtil.copy(addForm, AsnDetailEntity.class); AsnDetailEntity asnDetailEntity = SmartBeanUtil.copy(addForm, AsnDetailEntity.class);
asnDetailDao.insert(asnDetailEntity); asnDetailDao.insert(asnDetailEntity);
//业务操作记录
ItemEntity item = itemDao.selectById(addForm.getItemId());
dataTracerService.addTrace(asnDetailEntity.getAsnId(), DataTracerTypeEnum.ASN, "添加:" + item.getItemCode() + "物料明细", null, asnDetailEntity);
//刷新出库单 //刷新出库单
refreshAsn(addForm.getAsnId()); refreshAsn(addForm.getAsnId());
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
@ -81,8 +94,13 @@ public class AsnDetailService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ResponseDTO<String> update(AsnDetailUpdateForm updateForm) { public ResponseDTO<String> update(AsnDetailUpdateForm updateForm) {
AsnDetailEntity originEntity = asnDetailDao.selectById(updateForm.getAsnDetailId());
AsnDetailEntity asnDetailEntity = SmartBeanUtil.copy(updateForm, AsnDetailEntity.class); AsnDetailEntity asnDetailEntity = SmartBeanUtil.copy(updateForm, AsnDetailEntity.class);
asnDetailDao.updateById(asnDetailEntity); asnDetailDao.updateById(asnDetailEntity);
ItemEntity item = itemDao.selectById(updateForm.getItemId());
dataTracerService.addTrace(asnDetailEntity.getAsnId(), DataTracerTypeEnum.ASN, "编辑:" + item.getItemCode() + "物料明细", originEntity, asnDetailEntity);
//刷新出库单 //刷新出库单
refreshAsn(updateForm.getAsnId()); refreshAsn(updateForm.getAsnId());
return ResponseDTO.ok(); return ResponseDTO.ok();
@ -101,11 +119,12 @@ public class AsnDetailService {
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg()); return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
} }
JoinerResult joiner = JoinerResult.createJoiner(); JoinerResult joiner = JoinerResult.createJoiner();
Set<Long> asnIds = new HashSet<>();
List<Long> toDeleteList = new ArrayList<>();
List<AsnDetailEntity> asnDetails = asnDetailQueryService.queryAsnDetailList(idList); List<AsnDetailEntity> asnDetails = asnDetailQueryService.queryAsnDetailList(idList);
List<Long> asnIds = asnDetails.stream().map(AsnDetailEntity::getAsnId).distinct().collect(Collectors.toList());
List<Long> itemIds = asnDetails.stream().map(AsnDetailEntity::getItemId).toList(); List<Long> itemIds = asnDetails.stream().map(AsnDetailEntity::getItemId).toList();
Map<Long, ItemEntity> mapItem = itemQueryService.queryItemList(itemIds); Map<Long, ItemEntity> mapItem = itemQueryService.queryItemList(itemIds);
List<Long> toDeleteList = new ArrayList<>();
for (AsnDetailEntity asnDetail : asnDetails) { for (AsnDetailEntity asnDetail : asnDetails) {
ItemEntity item = mapItem.get(asnDetail.getItemId()); ItemEntity item = mapItem.get(asnDetail.getItemId());
if (asnDetail.getReceivedQuantity().compareTo(BigDecimal.ZERO) > 0) { if (asnDetail.getReceivedQuantity().compareTo(BigDecimal.ZERO) > 0) {
@ -113,13 +132,14 @@ public class AsnDetailService {
continue; continue;
} }
toDeleteList.add(asnDetail.getAsnDetailId()); toDeleteList.add(asnDetail.getAsnDetailId());
asnIds.add(asnDetail.getAsnId());
joiner.getSussMsg().add(item.getItemCode() + "明细删除成功"); joiner.getSussMsg().add(item.getItemCode() + "明细删除成功");
} }
if (CollectionUtils.isNotEmpty(toDeleteList)) { if (CollectionUtils.isNotEmpty(toDeleteList)) {
//批量删除 //批量删除
asnDetailManager.removeBatchByIds(toDeleteList); asnDetailManager.removeBatchByIds(toDeleteList);
//操作记录
dataTracerService.addTrace(asnIds.get(0), DataTracerTypeEnum.ASN, "批量删除:" + joiner.getSussMsg().toString());
} }
//刷新出库单 //刷新出库单
@ -151,6 +171,9 @@ public class AsnDetailService {
asnDetailDao.deleteById(asnDetailId); asnDetailDao.deleteById(asnDetailId);
joiner.getSussMsg().add(item.getItemCode() + "删除成功"); joiner.getSussMsg().add(item.getItemCode() + "删除成功");
//操作记录
dataTracerService.addTrace(asnId, DataTracerTypeEnum.ASN, "删除:" + joiner.getSussMsg().toString());
//刷新出库单 //刷新出库单
refreshAsn(asnId); refreshAsn(asnId);

View File

@ -33,6 +33,16 @@ public enum DataTracerTypeEnum implements BaseEnum {
*/ */
OA_ENTERPRISE(3, "OA-企业信息"), OA_ENTERPRISE(3, "OA-企业信息"),
/**
*
*/
ASN(4, "入库"),
/**
*
*/
ASN_DETAIL(5, "入库明细"),
; ;

View File

@ -162,6 +162,21 @@ public class DataTracerService {
this.addTrace(tracerForm, requestUser); 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);
}
/** /**
* *