批量退货
parent
914d45a479
commit
104d17606a
|
|
@ -66,4 +66,8 @@ public class AdminCacheConst extends CacheKeyConst {
|
|||
public static final String CUSTOMER_ENTITY = "customer_cache";
|
||||
}
|
||||
|
||||
public static class itemKey {
|
||||
public static final String ITEM_KEY_ENTITY = "item_key_cache";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,18 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.itemKey.manager;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.lab1024.sa.admin.constant.AdminCacheConst;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.location.dao.LocationDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.location.domain.entity.LocationEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.dao.ItemKeyDao;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.dao.ItemKeyDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
|
|
@ -16,7 +23,22 @@ import org.springframework.stereotype.Service;
|
|||
* @Copyright 友仓
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ItemKeyManager extends ServiceImpl<ItemKeyDao, ItemKeyEntity> {
|
||||
|
||||
@Resource
|
||||
private ItemKeyDao itemKeyDao;
|
||||
|
||||
/**
|
||||
* 根据类目id 移除缓存
|
||||
*/
|
||||
@CacheEvict(value = {AdminCacheConst.itemKey.ITEM_KEY_ENTITY}, allEntries = true)
|
||||
public void removeCache() {
|
||||
log.info("clear ITEM_KEY_ENTITY");
|
||||
}
|
||||
|
||||
@Cacheable(AdminCacheConst.itemKey.ITEM_KEY_ENTITY)
|
||||
public ItemKeyEntity queryItemKey(Long itemKeyId) {
|
||||
return itemKeyDao.selectById(itemKeyId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@ package net.lab1024.sa.admin.module.business.wms.itemKey.service;
|
|||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.google.common.collect.Maps;
|
||||
import jakarta.annotation.Resource;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.location.domain.entity.LocationEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.dao.ItemKeyDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.domain.form.ItemKeyQueryForm;
|
||||
|
|
@ -11,12 +13,16 @@ import net.lab1024.sa.admin.module.business.wms.itemKey.dao.ItemKeyDao;
|
|||
import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.domain.form.ItemKeyQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.domain.vo.ItemKeyVO;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.manager.ItemKeyManager;
|
||||
import net.lab1024.sa.base.common.domain.PageResult;
|
||||
import net.lab1024.sa.base.common.util.SmartPageUtil;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class ItemKeyQueryService {
|
||||
|
|
@ -24,6 +30,9 @@ public class ItemKeyQueryService {
|
|||
@Resource
|
||||
private ItemKeyDao itemKeyDao;
|
||||
|
||||
@Resource
|
||||
private ItemKeyManager itemKeyManager;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
|
|
@ -33,6 +42,27 @@ public class ItemKeyQueryService {
|
|||
return SmartPageUtil.convert2PageResult(page, list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据物料属性ID集合查询物料属性信息
|
||||
*
|
||||
* @param itemKeyIdList 物料属性ID集合
|
||||
* @return Map<Long, ItemKeyEntity>
|
||||
*/
|
||||
public Map<Long, ItemKeyEntity> queryItemKeyList(List<Long> itemKeyIdList) {
|
||||
if (CollectionUtils.isEmpty(itemKeyIdList)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
itemKeyIdList = itemKeyIdList.stream().distinct().collect(Collectors.toList());
|
||||
Map<Long, ItemKeyEntity> itemKeyMap = Maps.newHashMap();
|
||||
for (Long itemKeyId : itemKeyIdList) {
|
||||
ItemKeyEntity itemKey = itemKeyManager.queryItemKey(itemKeyId);
|
||||
if (itemKey != null) {
|
||||
itemKeyMap.put(itemKeyId, itemKey);
|
||||
}
|
||||
}
|
||||
return itemKeyMap;
|
||||
}
|
||||
|
||||
public ItemKeyEntity queryItemKey(String orderNumber, Long itemId, String propC1) {
|
||||
LambdaQueryWrapper<ItemKeyEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ItemKeyEntity::getOrderNumber, orderNumber);
|
||||
|
|
|
|||
|
|
@ -4,14 +4,18 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
|
|||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReceiveForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReturnForm;
|
||||
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||
import net.lab1024.sa.base.common.domain.ValidateList;
|
||||
import net.lab1024.sa.base.module.support.operatelog.annotation.OperateLog;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@Tag(name = "收货")
|
||||
@OperateLog
|
||||
public class ReceiveController {
|
||||
|
||||
@Resource
|
||||
|
|
@ -20,7 +24,14 @@ public class ReceiveController {
|
|||
@Operation(summary = "批量收货 @author 霍锦")
|
||||
@PostMapping("/receive/batchReceive")
|
||||
@SaCheckPermission("receive:batchReceive")
|
||||
public ResponseDTO<String> batchReceive(@RequestBody ValidateList<Long> idList) {
|
||||
return receiveService.batchReceive(idList);
|
||||
public ResponseDTO<String> batchReceive(@RequestBody BatchReceiveForm batchReceiveForm) {
|
||||
return receiveService.batchReceive(batchReceiveForm);
|
||||
}
|
||||
|
||||
@Operation(summary = "批量退货 @author 霍锦")
|
||||
@PostMapping("/receive/batchReturn")
|
||||
@SaCheckPermission("receive:batchReturn")
|
||||
public ResponseDTO<String> batchReturn(@RequestBody BatchReturnForm batchReturnForm) {
|
||||
return receiveService.batchReturn(batchReturnForm);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,10 @@ import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEnt
|
|||
import net.lab1024.sa.admin.module.business.wms.itemKey.manager.ItemKeyManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.service.ItemKeyQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.service.ItemKeyService;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.dao.AsnDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.entity.AsnEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReceiveForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReturnForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.service.AsnQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.domain.entity.AsnDetailEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.domain.vo.AsnDetailVO;
|
||||
|
|
@ -29,6 +32,7 @@ import net.lab1024.sa.admin.module.business.wms.task.constant.TaskStatusEnum;
|
|||
import net.lab1024.sa.admin.module.business.wms.task.constant.TaskTypeEnum;
|
||||
import net.lab1024.sa.admin.module.business.wms.task.domain.entity.TaskEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.task.manager.TaskManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.task.service.TaskQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.task.service.TaskService;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.service.AsnQueryService;
|
||||
|
|
@ -46,9 +50,12 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class ReceiveService {
|
||||
@Resource
|
||||
private AsnDao asnDao;
|
||||
|
||||
@Resource
|
||||
private AsnDetailManager asnDetailManager;
|
||||
|
|
@ -69,10 +76,10 @@ public class ReceiveService {
|
|||
private ItemQueryService itemQueryService;
|
||||
|
||||
@Resource
|
||||
private AsnQueryService asnQueryService;
|
||||
private AsnDetailQueryService asnDetailQueryService;
|
||||
|
||||
@Resource
|
||||
private AsnDetailQueryService asnDetailQueryService;
|
||||
private TaskQueryService taskQueryService;
|
||||
|
||||
@Resource
|
||||
private InventoryQueryService inventoryQueryService;
|
||||
|
|
@ -96,25 +103,15 @@ public class ReceiveService {
|
|||
/**
|
||||
* 批量收货
|
||||
*
|
||||
* @param idList 入库明细id集合
|
||||
* @param batchReceiveForm 批量收货参数
|
||||
* @return ResponseDTO<String>
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> batchReceive(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
List<AsnDetailEntity> asnDetails = asnDetailQueryService.queryAsnDetailList(idList);
|
||||
public ResponseDTO<String> batchReceive(BatchReceiveForm batchReceiveForm) {
|
||||
List<AsnDetailEntity> asnDetails = asnDetailQueryService.queryAsnDetailList(batchReceiveForm.getAsnDetailIds());
|
||||
if (CollectionUtils.isEmpty(asnDetails)) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
|
||||
return batchReceive(asnDetails, null, null);
|
||||
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public synchronized ResponseDTO<String> batchReceive(List<AsnDetailEntity> asnDetails, String stockCode, String locationCode) {
|
||||
//消息提示
|
||||
JoinerResult joiner = JoinerResult.createJoiner();
|
||||
|
||||
|
|
@ -122,28 +119,24 @@ public class ReceiveService {
|
|||
List<Long> itemIds = asnDetails.stream().map(AsnDetailEntity::getItemId).distinct().toList();
|
||||
Map<Long, ItemEntity> itemMap = itemQueryService.queryItemList(itemIds);
|
||||
|
||||
//查询入库单
|
||||
List<Long> asnIds = asnDetails.stream().map(AsnDetailEntity::getAsnId).distinct().toList();
|
||||
Map<Long, AsnEntity> asnMap = asnQueryService.queryAsnListToMap(asnIds);
|
||||
|
||||
List<AsnDetailEntity> updateToAsnDetail = new ArrayList<>();
|
||||
List<TaskEntity> insertToTask = new ArrayList<>();
|
||||
List<InventoryEntity> insertToInventory = new ArrayList<>();
|
||||
List<InventoryEntity> updateToInventory = new ArrayList<>();
|
||||
|
||||
//库位
|
||||
LocationEntity dstLocation = locationQueryService.queryByLocationCode(locationCode);
|
||||
LocationEntity dstLocation = locationQueryService.queryByLocationCode(batchReceiveForm.getLocationCode());
|
||||
|
||||
//容器
|
||||
StockEntity dstStock = stockQueryService.queryByStockCode(stockCode);
|
||||
StockEntity dstStock = stockQueryService.queryByStockCode(batchReceiveForm.getStockCode());
|
||||
|
||||
//入库单
|
||||
AsnEntity asn = asnDao.selectById(batchReceiveForm.getAsnId());
|
||||
|
||||
for (AsnDetailEntity asnDetail : asnDetails) {
|
||||
//物料
|
||||
ItemEntity item = itemMap.get(asnDetail.getItemId());
|
||||
|
||||
//入库单
|
||||
AsnEntity asn = asnMap.get(asnDetail.getAsnId());
|
||||
|
||||
if (SmartBigDecimalUtil.subtract(asnDetail.getOrderQuantity(), asnDetail.getReceivedQuantity(), 2).compareTo(BigDecimal.ZERO) == 0) {
|
||||
joiner.getErrorMsg().add(item.getItemCode() + "明细已收货");
|
||||
continue;
|
||||
|
|
@ -163,9 +156,15 @@ public class ReceiveService {
|
|||
|
||||
//生成入库记录
|
||||
TaskEntity task = taskService.createTask(serialNumberService.generate(SerialNumberIdEnum.TASK), TaskStatusEnum.CREATED.getValue(), TaskTypeEnum.ASN.getValue(), asnDetail.getOrderQuantity(), itemKey.getItemKeyId(), asnDetail.getAsnDetailId(), null, null, dstStock, null, dstLocation, null, null);
|
||||
task.setMoveQty(task.getPlanQty());
|
||||
if (SmartBigDecimalUtil.subtract(task.getPlanQty(), task.getMoveQty(), 2).compareTo(BigDecimal.ZERO) == 0) {
|
||||
task.setStatus(TaskStatusEnum.COMPLETED.getValue());
|
||||
} else {
|
||||
task.setStatus(TaskStatusEnum.IN_PROGRESS.getValue());
|
||||
}
|
||||
insertToTask.add(task);
|
||||
|
||||
//生成库存
|
||||
//生成库存记录
|
||||
InventoryEntity inventory = inventoryQueryService.queryInventory(itemKey.getItemKeyId());
|
||||
if (inventory == null) {
|
||||
inventory = inventoryService.createInventory(itemKey.getItemKeyId(), dstLocation == null ? null : dstLocation.getLocationId(), dstStock == null ? null : dstStock.getStockId(), asnDetail.getOrderQuantity());
|
||||
|
|
@ -176,6 +175,8 @@ public class ReceiveService {
|
|||
updateToInventory.add(inventory);
|
||||
}
|
||||
|
||||
//生成库存日志
|
||||
|
||||
joiner.getSussMsg().add(item.getItemCode() + "收货成功");
|
||||
}
|
||||
|
||||
|
|
@ -183,7 +184,7 @@ public class ReceiveService {
|
|||
batchUpdateOrInsert(updateToAsnDetail, insertToTask, insertToInventory, updateToInventory);
|
||||
|
||||
//刷新入库单
|
||||
asnIds.forEach(asnDetailService::refreshAsn);
|
||||
asnDetailService.refreshAsn(batchReceiveForm.getAsnId());
|
||||
|
||||
return ResponseDTOUtils.buildResponseDTO(joiner);
|
||||
}
|
||||
|
|
@ -219,5 +220,100 @@ public class ReceiveService {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量退货
|
||||
*
|
||||
* @param batchReturnForm 批量退货参数
|
||||
* @return ResponseDTO<String>
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> batchReturn(BatchReturnForm batchReturnForm) {
|
||||
List<TaskEntity> tasks = taskQueryService.queryByTaskIds(batchReturnForm.getTaskIds());
|
||||
if (CollectionUtils.isEmpty(tasks)) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
|
||||
//消息提示
|
||||
JoinerResult joiner = JoinerResult.createJoiner();
|
||||
|
||||
//查询Task任务关联的所以入库明细
|
||||
List<Long> asnDetailIds = tasks.stream().map(TaskEntity::getAsnDetailId).collect(Collectors.toList());
|
||||
Map<Long, AsnDetailEntity> asnDetailMap = asnDetailQueryService.queryAsnDetailListToMap(asnDetailIds);
|
||||
|
||||
//查询物料
|
||||
List<Long> itemIds = asnDetailMap.values().stream().map(AsnDetailEntity::getItemId).distinct().toList();
|
||||
Map<Long, ItemEntity> itemMap = itemQueryService.queryItemList(itemIds);
|
||||
|
||||
List<AsnDetailEntity> updateToAsnDetail = new ArrayList<>();
|
||||
List<TaskEntity> deleteToTask = new ArrayList<>();
|
||||
List<InventoryEntity> updateToInventory = new ArrayList<>();
|
||||
List<InventoryEntity> deleteToInventory = new ArrayList<>();
|
||||
|
||||
for (TaskEntity task : tasks) {
|
||||
//物料
|
||||
ItemEntity item = itemMap.get(asnDetailMap.get(task.getAsnDetailId()).getItemId());
|
||||
|
||||
//入库明细
|
||||
AsnDetailEntity asnDetail = asnDetailMap.get(task.getAsnDetailId());
|
||||
asnDetail.setReceivedQuantity(BigDecimal.ZERO);
|
||||
updateToAsnDetail.add(asnDetail);
|
||||
|
||||
//删除task
|
||||
deleteToTask.add(task);
|
||||
|
||||
//库存数退回
|
||||
InventoryEntity inventory = inventoryQueryService.queryInventory(task.getItemKeyId());
|
||||
if (inventory != null) {
|
||||
inventory.setQuantity(SmartBigDecimalUtil.subtract(inventory.getQuantity(), task.getPlanQty(), 2));
|
||||
if (inventory.getQuantity().compareTo(BigDecimal.ZERO) == 0) {
|
||||
deleteToInventory.add(inventory);
|
||||
} else {
|
||||
updateToInventory.add(inventory);
|
||||
}
|
||||
}
|
||||
//生成库存日志
|
||||
|
||||
joiner.getSussMsg().add(item.getItemCode() + "退货成功");
|
||||
}
|
||||
//批量操作
|
||||
returnUpdateOrInsert(updateToAsnDetail, deleteToTask, updateToInventory, deleteToInventory);
|
||||
|
||||
//刷新入库单
|
||||
asnDetailService.refreshAsn(batchReturnForm.getAsnId());
|
||||
|
||||
return ResponseDTOUtils.buildResponseDTO(joiner);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量更新或新增
|
||||
*
|
||||
* @param updateToAsnDetail 更新入库明细
|
||||
* @param deleteToTask 删除task
|
||||
* @param updateToInventory 更新库存
|
||||
* @param deleteToInventory 删除库存
|
||||
*/
|
||||
private void returnUpdateOrInsert(List<AsnDetailEntity> updateToAsnDetail, List<TaskEntity> deleteToTask, List<InventoryEntity> updateToInventory, List<InventoryEntity> deleteToInventory) {
|
||||
//批量更新入库明细
|
||||
if (CollectionUtils.isNotEmpty(updateToAsnDetail)) {
|
||||
asnDetailManager.updateBatchById(updateToAsnDetail);
|
||||
}
|
||||
|
||||
//批量删除入库记录
|
||||
if (CollectionUtils.isNotEmpty(deleteToTask)) {
|
||||
taskManager.removeBatchByIds(deleteToTask);
|
||||
}
|
||||
|
||||
//批量更新库存
|
||||
if (CollectionUtils.isNotEmpty(updateToInventory)) {
|
||||
inventoryManager.updateBatchById(updateToInventory);
|
||||
}
|
||||
|
||||
//批量删除库存
|
||||
if (CollectionUtils.isNotEmpty(deleteToInventory)) {
|
||||
inventoryManager.removeBatchByIds(deleteToInventory);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import net.lab1024.sa.admin.module.business.wms.receive.asn.service.AsnQueryServ
|
|||
import net.lab1024.sa.base.common.domain.RequestUser;
|
||||
import net.lab1024.sa.base.common.domain.ValidateList;
|
||||
import net.lab1024.sa.base.common.util.SmartRequestUtil;
|
||||
import net.lab1024.sa.base.module.support.operatelog.annotation.OperateLog;
|
||||
import net.lab1024.sa.base.module.support.serialnumber.constant.SerialNumberIdEnum;
|
||||
import net.lab1024.sa.base.module.support.serialnumber.service.SerialNumberService;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
|
@ -33,6 +34,7 @@ import jakarta.validation.Valid;
|
|||
|
||||
@RestController
|
||||
@Tag(name = "入库单")
|
||||
@OperateLog
|
||||
public class AsnController {
|
||||
|
||||
@Resource
|
||||
|
|
@ -41,9 +43,6 @@ public class AsnController {
|
|||
@Resource
|
||||
private AsnQueryService asnQueryService;
|
||||
|
||||
|
||||
|
||||
@Operation(summary = "分页查询 @author 霍锦")
|
||||
@PostMapping("/asn/queryPage")
|
||||
@SaCheckPermission("asn:query")
|
||||
public ResponseDTO<PageResult<AsnVO>> queryPage(@RequestBody @Valid AsnQueryForm queryForm) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class BatchReceiveForm {
|
||||
|
||||
@Schema(description = "入库单", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "入库单 不能为空")
|
||||
private Long asnId;
|
||||
|
||||
@Schema(description = "入库明细", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "入库明细 不能为空")
|
||||
private List<Long> asnDetailIds;
|
||||
|
||||
@Schema(description = "容器", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "容器 不能为空")
|
||||
private String stockCode;
|
||||
|
||||
@Schema(description = "库位", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "库位 不能为空")
|
||||
private String locationCode;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class BatchReturnForm {
|
||||
@Schema(description = "入库单", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "入库单 不能为空")
|
||||
private Long asnId;
|
||||
|
||||
@Schema(description = "收货明细", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "收货明细 不能为空")
|
||||
private List<Long> taskIds;
|
||||
}
|
||||
|
|
@ -30,6 +30,8 @@ import net.lab1024.sa.base.common.util.SmartPageUtil;
|
|||
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.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;
|
||||
|
|
@ -67,6 +69,9 @@ public class AsnService {
|
|||
@Resource
|
||||
private SerialNumberService serialNumberService;
|
||||
|
||||
@Resource
|
||||
private DataTracerService dataTracerService;
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import net.lab1024.sa.base.common.util.SmartPageUtil;
|
|||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
|
@ -101,8 +102,22 @@ public class AsnDetailQueryService {
|
|||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return null;
|
||||
}
|
||||
LambdaQueryWrapper<AsnDetailEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.in(AsnDetailEntity::getAsnDetailId, idList);
|
||||
return asnDetailDao.selectList(queryWrapper);
|
||||
return asnDetailDao.selectBatchIds(idList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据明细集合查询明细信息
|
||||
*
|
||||
* @param idList 明细集合
|
||||
* @return Map<String, AsnDetailEntity>
|
||||
*/
|
||||
public Map<Long, AsnDetailEntity> queryAsnDetailListToMap(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
List<AsnDetailEntity> asnDetails = queryAsnDetailList(idList);
|
||||
return asnDetails.stream()
|
||||
.collect(Collectors.toMap(AsnDetailEntity::getAsnDetailId, asnDetail -> asnDetail, (existing, replacement) -> existing));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,12 @@ public class TaskVO {
|
|||
@Schema(description = "物料序号")
|
||||
private Long itemKeyId;
|
||||
|
||||
@Schema(description = "物料编码")
|
||||
private String itemCode;
|
||||
|
||||
@Schema(description = "物料名称")
|
||||
private String itemName;
|
||||
|
||||
@Schema(description = "收货明细序号")
|
||||
private Long asnDetailId;
|
||||
|
||||
|
|
@ -53,21 +59,21 @@ public class TaskVO {
|
|||
@Schema(description = "目标容器")
|
||||
private Long dstStockId;
|
||||
|
||||
@Schema(description = "目标容器编码")
|
||||
private String dstStockCode;
|
||||
|
||||
@Schema(description = "原点位")
|
||||
private Long srcLocationId;
|
||||
|
||||
@Schema(description = "原库位编码")
|
||||
private String srcLocationCode;
|
||||
|
||||
@Schema(description = "目标点位")
|
||||
private Long dstLocationId;
|
||||
|
||||
@Schema(description = "目标库位编码")
|
||||
private String dstLocationCode;
|
||||
|
||||
@Schema(description = "原库位编码")
|
||||
private String srcLocationCode;
|
||||
|
||||
@Schema(description = "目标容器编码")
|
||||
private String dstStockCode;
|
||||
|
||||
@Schema(description = "库存ID")
|
||||
private Long inventoryId;
|
||||
|
||||
|
|
@ -80,16 +86,4 @@ public class TaskVO {
|
|||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "完成时间")
|
||||
private LocalDateTime endTime;
|
||||
|
||||
@Schema(description = "创建人ID")
|
||||
private Long createUserId;
|
||||
|
||||
@Schema(description = "创建人")
|
||||
private String createUserName;
|
||||
|
||||
@Schema(description = "更新时间")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,16 @@ package net.lab1024.sa.admin.module.business.wms.task.service;
|
|||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import jakarta.annotation.Resource;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.area.domain.entity.AreaEntity;
|
||||
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.domain.entity.LocationEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.stock.domain.vo.StockVO;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.manager.ItemKeyManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.itemKey.service.ItemKeyQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.task.dao.TaskDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.task.domain.entity.TaskEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.task.domain.form.TaskQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.task.domain.vo.TaskVO;
|
||||
import net.lab1024.sa.base.common.domain.PageResult;
|
||||
|
|
@ -10,6 +19,8 @@ import net.lab1024.sa.base.common.util.SmartPageUtil;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class TaskQueryService {
|
||||
|
|
@ -17,14 +28,49 @@ public class TaskQueryService {
|
|||
@Resource
|
||||
private TaskDao taskDao;
|
||||
|
||||
@Resource
|
||||
private ItemQueryService itemQueryService;
|
||||
|
||||
@Resource
|
||||
private ItemKeyQueryService itemKeyQueryService;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
public PageResult<TaskVO> queryPage(TaskQueryForm queryForm) {
|
||||
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
|
||||
List<TaskVO> list = taskDao.queryPage(page, queryForm);
|
||||
|
||||
// 查询物料属性
|
||||
List<Long> itemKeyIds = list.stream().map(TaskVO::getItemKeyId).distinct().collect(Collectors.toList());
|
||||
Map<Long, ItemKeyEntity> itemKeyMap = itemKeyQueryService.queryItemKeyList(itemKeyIds);
|
||||
|
||||
//查询物料
|
||||
List<Long> itemIds = itemKeyMap.values().stream().map(ItemKeyEntity::getItemId).distinct().toList();
|
||||
Map<Long, ItemEntity> itemMap = itemQueryService.queryItemList(itemIds);
|
||||
|
||||
list.forEach(TaskVO -> {
|
||||
ItemKeyEntity itemKey = itemKeyMap.get(TaskVO.getItemKeyId());
|
||||
if (itemKey != null) {
|
||||
ItemEntity item = itemMap.get(itemKey.getItemId());
|
||||
if (item != null) {
|
||||
TaskVO.setItemCode(item.getItemCode());
|
||||
TaskVO.setItemName(item.getItemName());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return SmartPageUtil.convert2PageResult(page, list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据任务ID集合查询
|
||||
* @param taskIds 任务ID集合
|
||||
* @return List<TaskEntity>
|
||||
*/
|
||||
public List<TaskEntity> queryByTaskIds(List<Long> taskIds) {
|
||||
return taskDao.selectBatchIds(taskIds);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,10 @@
|
|||
|
||||
<!-- 查询结果列 -->
|
||||
<sql id="base_columns">
|
||||
t_task.task_id,
|
||||
t_task
|
||||
.
|
||||
task_id
|
||||
,
|
||||
t_task.bill_code,
|
||||
t_task.status,
|
||||
t_task.task_type,
|
||||
|
|
@ -39,7 +42,7 @@
|
|||
<where>
|
||||
<!--入库单-->
|
||||
<if test="queryForm.asnId != null ">
|
||||
AND t_task.asn_detail_id=#{queryForm.asnId}
|
||||
AND t_task.asn_detail_id in (select asn_detail_id from t_asn_detail where asn_id = #{queryForm.asnId})
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ public enum DataTracerTypeEnum implements BaseEnum {
|
|||
|
||||
;
|
||||
|
||||
|
||||
|
||||
private final Integer value;
|
||||
|
||||
private final String desc;
|
||||
|
|
|
|||
Loading…
Reference in New Issue