增加出库模块 出库单、出库明细管理
parent
728129555c
commit
7692f42934
|
|
@ -66,7 +66,7 @@ public class AdminCacheConst extends CacheKeyConst {
|
|||
public static final String CUSTOMER_ENTITY = "customer_cache";
|
||||
}
|
||||
|
||||
public static class itemKey {
|
||||
public static class ItemKey {
|
||||
public static final String ITEM_KEY_ENTITY = "item_key_cache";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,96 +1,20 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.inventory.inventory.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import jakarta.annotation.Resource;
|
||||
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.location.service.LocationQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.stock.domain.entity.StockEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.stock.service.StockQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.dao.InventoryDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.entity.InventoryEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.form.InventoryQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.vo.InventoryVO;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.ItemKeyQueryService;
|
||||
import net.lab1024.sa.base.common.domain.PageResult;
|
||||
import net.lab1024.sa.base.common.util.SmartPageUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class InventoryQueryService {
|
||||
|
||||
@Resource
|
||||
private InventoryDao inventoryDao;
|
||||
|
||||
@Resource
|
||||
private ItemQueryService itemQueryService;
|
||||
|
||||
@Resource
|
||||
private StockQueryService stockQueryService;
|
||||
|
||||
@Resource
|
||||
private LocationQueryService locationQueryService;
|
||||
|
||||
@Resource
|
||||
private ItemKeyQueryService itemKeyQueryService;
|
||||
|
||||
public interface InventoryQueryService {
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
public PageResult<InventoryVO> queryPage(InventoryQueryForm queryForm) {
|
||||
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
|
||||
List<InventoryVO> list = inventoryDao.queryPage(page, queryForm);
|
||||
// 查询物料属性
|
||||
List<Long> itemKeyIds = list.stream().map(InventoryVO::getItemKeyId).toList();
|
||||
Map<Long, ItemKeyEntity> itemKeyMap = itemKeyQueryService.queryByItemKeyIds(itemKeyIds);
|
||||
|
||||
//查询物料
|
||||
List<Long> itemIds = itemKeyMap.values().stream().map(ItemKeyEntity::getItemId).toList();
|
||||
Map<Long, ItemEntity> itemMap = itemQueryService.queryByItemIdsToMap(itemIds);
|
||||
|
||||
//查询容器
|
||||
List<Long> stockIds = list.stream().map(InventoryVO::getStockId).toList();
|
||||
Map<Long, StockEntity> stockMap = stockQueryService.queryByStockIdsToMap(stockIds);
|
||||
|
||||
//查询库位
|
||||
List<Long> locationIds = list.stream().map(InventoryVO::getLocationId).toList();
|
||||
Map<Long, LocationEntity> locationMap = locationQueryService.queryByLocationIdsToMap(locationIds);
|
||||
|
||||
list.forEach(InventoryVO -> {
|
||||
ItemKeyEntity itemKey = itemKeyMap.get(InventoryVO.getItemKeyId());
|
||||
if (itemKey != null) {
|
||||
ItemEntity item = itemMap.get(itemKey.getItemId());
|
||||
if (item != null) {
|
||||
InventoryVO.setItemCode(item.getItemCode());
|
||||
InventoryVO.setItemName(item.getItemName());
|
||||
}
|
||||
}
|
||||
StockEntity stock = stockMap.get(InventoryVO.getStockId());
|
||||
if (stock != null) {
|
||||
InventoryVO.setStockCode(stock.getStockCode());
|
||||
}
|
||||
LocationEntity location = locationMap.get(InventoryVO.getLocationId());
|
||||
if (location != null) {
|
||||
InventoryVO.setLocationCode(location.getLocationCode());
|
||||
}
|
||||
});
|
||||
return SmartPageUtil.convert2PageResult(page, list);
|
||||
}
|
||||
PageResult<InventoryVO> queryPage(InventoryQueryForm queryForm);
|
||||
|
||||
/**
|
||||
* @param ItemKeyId 物料
|
||||
* @return InventoryEntity
|
||||
*/
|
||||
public InventoryEntity queryInventoryByItemKeyId(Long ItemKeyId) {
|
||||
LambdaQueryWrapper<InventoryEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(InventoryEntity::getItemKeyId, ItemKeyId);
|
||||
return inventoryDao.selectOne(queryWrapper);
|
||||
}
|
||||
InventoryEntity queryInventoryByItemKeyId(Long ItemKeyId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,20 +2,11 @@ package net.lab1024.sa.admin.module.business.wms.inventory.inventory.service;
|
|||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.dao.InventoryDao;
|
||||
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.entity.InventoryEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.form.InventoryAddForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.form.InventoryUpdateForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.manager.InventoryManager;
|
||||
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.SmartRequestUtil;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* 库存信息 Service
|
||||
|
|
@ -24,72 +15,29 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
* @Date 2024-12-06 17:24:53
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Service
|
||||
public class InventoryService {
|
||||
|
||||
@Resource
|
||||
private InventoryDao inventoryDao;
|
||||
|
||||
@Resource
|
||||
private InventoryManager inventoryManager;
|
||||
public interface InventoryService {
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> add(InventoryAddForm addForm) {
|
||||
InventoryEntity inventoryEntity = SmartBeanUtil.copy(addForm, InventoryEntity.class);
|
||||
inventoryDao.insert(inventoryEntity);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
ResponseDTO<String> add(InventoryAddForm addForm);
|
||||
|
||||
/**
|
||||
* 更新
|
||||
*
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> update(InventoryUpdateForm updateForm) {
|
||||
InventoryEntity inventoryEntity = SmartBeanUtil.copy(updateForm, InventoryEntity.class);
|
||||
inventoryDao.updateById(inventoryEntity);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
ResponseDTO<String> update(InventoryUpdateForm updateForm);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> batchDelete(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)){
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
|
||||
inventoryManager.removeBatchByIds(idList);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
ResponseDTO<String> batchDelete(List<Long> idList);
|
||||
|
||||
/**
|
||||
* 单个删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> delete(Long inventoryId) {
|
||||
if (null == inventoryId){
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
ResponseDTO<String> delete(Long inventoryId);
|
||||
|
||||
inventoryDao.deleteById(inventoryId);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
public InventoryEntity createInventory(Long itemKeyId, Long locationId, Long stockId, BigDecimal quantity) {
|
||||
return InventoryEntity.builder()
|
||||
.itemKeyId(itemKeyId)
|
||||
.locationId(locationId)
|
||||
.stockId(stockId)
|
||||
.quantity(quantity)
|
||||
.queuedQuantity(BigDecimal.ZERO)
|
||||
.createUserId(SmartRequestUtil.getRequestUser().getUserId())
|
||||
.createUserName(SmartRequestUtil.getRequestUser().getUserName())
|
||||
.build();
|
||||
}
|
||||
InventoryEntity createInventory(Long itemKeyId, Long locationId, Long stockId, BigDecimal quantity);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,101 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.inventory.inventory.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import jakarta.annotation.Resource;
|
||||
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.location.service.LocationQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.stock.domain.entity.StockEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.stock.service.StockQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.dao.InventoryDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.entity.InventoryEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.form.InventoryQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.vo.InventoryVO;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.manager.InventoryManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.service.InventoryQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.ItemKeyQueryService;
|
||||
import net.lab1024.sa.base.common.domain.PageResult;
|
||||
import net.lab1024.sa.base.common.util.SmartPageUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class InventoryQueryServiceImpl implements InventoryQueryService {
|
||||
|
||||
@Resource
|
||||
private InventoryDao inventoryDao;
|
||||
|
||||
@Resource
|
||||
private InventoryManager inventoryManager;
|
||||
|
||||
@Resource
|
||||
private ItemQueryService itemQueryService;
|
||||
|
||||
@Resource
|
||||
private StockQueryService stockQueryService;
|
||||
|
||||
@Resource
|
||||
private LocationQueryService locationQueryService;
|
||||
|
||||
@Resource
|
||||
private ItemKeyQueryService itemKeyQueryService;
|
||||
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
public PageResult<InventoryVO> queryPage(InventoryQueryForm queryForm) {
|
||||
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
|
||||
List<InventoryVO> list = inventoryDao.queryPage(page, queryForm);
|
||||
// 查询物料属性
|
||||
List<Long> itemKeyIds = list.stream().map(InventoryVO::getItemKeyId).toList();
|
||||
Map<Long, ItemKeyEntity> itemKeyMap = itemKeyQueryService.queryByItemKeyIds(itemKeyIds);
|
||||
|
||||
//查询物料
|
||||
List<Long> itemIds = itemKeyMap.values().stream().map(ItemKeyEntity::getItemId).toList();
|
||||
Map<Long, ItemEntity> itemMap = itemQueryService.queryByItemIdsToMap(itemIds);
|
||||
|
||||
//查询容器
|
||||
List<Long> stockIds = list.stream().map(InventoryVO::getStockId).toList();
|
||||
Map<Long, StockEntity> stockMap = stockQueryService.queryByStockIdsToMap(stockIds);
|
||||
|
||||
//查询库位
|
||||
List<Long> locationIds = list.stream().map(InventoryVO::getLocationId).toList();
|
||||
Map<Long, LocationEntity> locationMap = locationQueryService.queryByLocationIdsToMap(locationIds);
|
||||
|
||||
list.forEach(InventoryVO -> {
|
||||
ItemKeyEntity itemKey = itemKeyMap.get(InventoryVO.getItemKeyId());
|
||||
if (itemKey != null) {
|
||||
ItemEntity item = itemMap.get(itemKey.getItemId());
|
||||
if (item != null) {
|
||||
InventoryVO.setItemCode(item.getItemCode());
|
||||
InventoryVO.setItemName(item.getItemName());
|
||||
}
|
||||
}
|
||||
StockEntity stock = stockMap.get(InventoryVO.getStockId());
|
||||
if (stock != null) {
|
||||
InventoryVO.setStockCode(stock.getStockCode());
|
||||
}
|
||||
LocationEntity location = locationMap.get(InventoryVO.getLocationId());
|
||||
if (location != null) {
|
||||
InventoryVO.setLocationCode(location.getLocationCode());
|
||||
}
|
||||
});
|
||||
return SmartPageUtil.convert2PageResult(page, list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ItemKeyId 物料
|
||||
* @return InventoryEntity
|
||||
*/
|
||||
public InventoryEntity queryInventoryByItemKeyId(Long ItemKeyId) {
|
||||
LambdaQueryWrapper<InventoryEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(InventoryEntity::getItemKeyId, ItemKeyId);
|
||||
return inventoryManager.getOne(queryWrapper);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.inventory.inventory.service.impl;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.dao.InventoryDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.entity.InventoryEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.form.InventoryAddForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.form.InventoryUpdateForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.manager.InventoryManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.service.InventoryService;
|
||||
import net.lab1024.sa.base.common.code.UserErrorCode;
|
||||
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||
import net.lab1024.sa.base.common.util.SmartBeanUtil;
|
||||
import net.lab1024.sa.base.common.util.SmartRequestUtil;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class InventoryServiceImpl implements InventoryService {
|
||||
|
||||
@Resource
|
||||
private InventoryManager inventoryManager;
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> add(InventoryAddForm addForm) {
|
||||
InventoryEntity inventoryEntity = SmartBeanUtil.copy(addForm, InventoryEntity.class);
|
||||
inventoryManager.save(inventoryEntity);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> update(InventoryUpdateForm updateForm) {
|
||||
InventoryEntity inventoryEntity = SmartBeanUtil.copy(updateForm, InventoryEntity.class);
|
||||
inventoryManager.updateById(inventoryEntity);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> batchDelete(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
|
||||
inventoryManager.removeBatchByIds(idList);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 单个删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> delete(Long inventoryId) {
|
||||
if (null == inventoryId) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
|
||||
inventoryManager.removeById(inventoryId);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
public InventoryEntity createInventory(Long itemKeyId, Long locationId, Long stockId, BigDecimal quantity) {
|
||||
return InventoryEntity.builder()
|
||||
.itemKeyId(itemKeyId)
|
||||
.locationId(locationId)
|
||||
.stockId(stockId)
|
||||
.quantity(quantity)
|
||||
.queuedQuantity(BigDecimal.ZERO)
|
||||
.createUserId(SmartRequestUtil.getRequestUser().getUserId())
|
||||
.createUserName(SmartRequestUtil.getRequestUser().getUserName())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
|
@ -3,13 +3,21 @@ package net.lab1024.sa.admin.module.business.wms.inventory.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.item.domain.entity.ItemEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.dao.ItemKeyDao;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.cache.Cache;
|
||||
import org.springframework.cache.CacheManager;
|
||||
import org.springframework.cache.annotation.CacheConfig;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 物料属性 Manager
|
||||
|
|
@ -20,21 +28,68 @@ import org.springframework.stereotype.Service;
|
|||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
@CacheConfig(cacheNames = AdminCacheConst.ItemKey.ITEM_KEY_ENTITY)
|
||||
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");
|
||||
}
|
||||
@Resource
|
||||
private CacheManager cacheManager;
|
||||
|
||||
@Cacheable(AdminCacheConst.itemKey.ITEM_KEY_ENTITY)
|
||||
@Cacheable(key = "#itemKeyId", unless = "#result == null")
|
||||
public ItemKeyEntity queryItemKey(Long itemKeyId) {
|
||||
return itemKeyDao.selectById(itemKeyId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新物料(清除缓存)
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@CacheEvict(key = "#entity.itemKeyId")
|
||||
public void update(ItemKeyEntity entity) {
|
||||
super.updateById(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除物料(清理缓存)
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@CacheEvict(key = "#itemKeyId")
|
||||
public void deleteById(Long itemKeyId) {
|
||||
super.removeById(itemKeyId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量更新物料(清理相关缓存)
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void batchUpdate(List<ItemKeyEntity> entities) {
|
||||
super.updateBatchById(entities);
|
||||
List<Long> itemKeyIds = entities.stream().map(ItemKeyEntity::getItemKeyId).filter(Objects::nonNull).distinct().toList();
|
||||
itemKeyIds.forEach(this::clearCache);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除物料(清理相关缓存)
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void batchDelete(List<Long> itemKeyIds) {
|
||||
super.removeByIds(itemKeyIds);
|
||||
itemKeyIds.forEach(this::clearCache);
|
||||
}
|
||||
|
||||
/**
|
||||
* 手工清理缓存
|
||||
*/
|
||||
public void clearCache(Long itemId) {
|
||||
if (itemId != null) {
|
||||
Cache cache = cacheManager.getCache(AdminCacheConst.ItemKey.ITEM_KEY_ENTITY);
|
||||
if (cache != null) {
|
||||
cache.evict(itemId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,41 +1,20 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.inventory.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.inventory.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.vo.ItemKeyVO;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.manager.ItemKeyManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.dao.ItemKeyDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.form.ItemKeyQueryForm;
|
||||
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.Objects;
|
||||
|
||||
@Service
|
||||
public class ItemKeyQueryService {
|
||||
|
||||
@Resource
|
||||
private ItemKeyDao itemKeyDao;
|
||||
|
||||
@Resource
|
||||
private ItemKeyManager itemKeyManager;
|
||||
public interface ItemKeyQueryService {
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
public PageResult<ItemKeyVO> queryPage(ItemKeyQueryForm queryForm) {
|
||||
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
|
||||
List<ItemKeyVO> list = itemKeyDao.queryPage(page, queryForm);
|
||||
return SmartPageUtil.convert2PageResult(page, list);
|
||||
}
|
||||
PageResult<ItemKeyVO> queryPage(ItemKeyQueryForm queryForm);
|
||||
|
||||
/**
|
||||
* 根据物料属性ID集合查询物料属性信息
|
||||
|
|
@ -43,30 +22,15 @@ public class ItemKeyQueryService {
|
|||
* @param itemKeyIdList 物料属性ID集合
|
||||
* @return Map<Long, ItemKeyEntity>
|
||||
*/
|
||||
public Map<Long, ItemKeyEntity> queryByItemKeyIds(List<Long> itemKeyIdList) {
|
||||
if (CollectionUtils.isEmpty(itemKeyIdList)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
itemKeyIdList = itemKeyIdList.stream().filter(Objects::nonNull).distinct().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;
|
||||
}
|
||||
Map<Long, ItemKeyEntity> queryByItemKeyIds(List<Long> itemKeyIdList);
|
||||
|
||||
public ItemKeyEntity queryItemKey(String orderNumber, Long itemId, String propC1) {
|
||||
LambdaQueryWrapper<ItemKeyEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ItemKeyEntity::getOrderNumber, orderNumber);
|
||||
queryWrapper.eq(ItemKeyEntity::getItemId, itemId);
|
||||
queryWrapper.eq(ItemKeyEntity::getPropC1, propC1);
|
||||
List<ItemKeyEntity> itemKeys = itemKeyManager.list(queryWrapper);
|
||||
if (CollectionUtils.isEmpty(itemKeys)) {
|
||||
return null;
|
||||
}
|
||||
return itemKeys.get(0);
|
||||
}
|
||||
/**
|
||||
* 根据订单号、物料ID、属性C1查询物料属性信息
|
||||
*
|
||||
* @param orderNumber 订单号
|
||||
* @param itemId 物料
|
||||
* @param propC1 批次
|
||||
* @return ItemKeyEntity
|
||||
*/
|
||||
ItemKeyEntity queryItemKey(String orderNumber, Long itemId, String propC1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,60 +24,27 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Service
|
||||
public class ItemKeyService {
|
||||
|
||||
@Resource
|
||||
private ItemKeyManager itemKeyManager;
|
||||
|
||||
@Resource
|
||||
private ItemKeyQueryService itemKeyQueryService;
|
||||
public interface ItemKeyService {
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> add(ItemKeyAddForm addForm) {
|
||||
ItemKeyEntity itemKeyEntity = SmartBeanUtil.copy(addForm, ItemKeyEntity.class);
|
||||
itemKeyManager.save(itemKeyEntity);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
ResponseDTO<String> add(ItemKeyAddForm addForm);
|
||||
|
||||
/**
|
||||
* 更新
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> update(ItemKeyUpdateForm updateForm) {
|
||||
ItemKeyEntity itemKeyEntity = SmartBeanUtil.copy(updateForm, ItemKeyEntity.class);
|
||||
itemKeyManager.updateById(itemKeyEntity);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
ResponseDTO<String> update(ItemKeyUpdateForm updateForm);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> batchDelete(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
|
||||
itemKeyManager.removeBatchByIds(idList);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
ResponseDTO<String> batchDelete(List<Long> idList);
|
||||
|
||||
/**
|
||||
* 单个删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> delete(Long itemKeyId) {
|
||||
if (null == itemKeyId) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
|
||||
itemKeyManager.removeById(itemKeyId);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
ResponseDTO<String> delete(Long itemKeyId);
|
||||
|
||||
/**
|
||||
* 单一创建itemKey
|
||||
|
|
@ -87,20 +54,5 @@ public class ItemKeyService {
|
|||
* @param propC1 批次
|
||||
* @return ItemKeyEntity
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ItemKeyEntity createItemKey(String orderNumber, Long itemId, String propC1) {
|
||||
ItemKeyEntity itemKey = itemKeyQueryService.queryItemKey(orderNumber, itemId, propC1);
|
||||
if (itemKey != null) {
|
||||
return itemKey;
|
||||
}
|
||||
itemKey = ItemKeyEntity.builder()
|
||||
.orderNumber(orderNumber)
|
||||
.itemId(itemId)
|
||||
.propC1(propC1)
|
||||
.createUserId(SmartRequestUtil.getRequestUser().getUserId())
|
||||
.createUserName(SmartRequestUtil.getRequestUser().getUserName())
|
||||
.build();
|
||||
itemKeyManager.save(itemKey);
|
||||
return itemKey;
|
||||
}
|
||||
ItemKeyEntity createItemKey(String orderNumber, Long itemId, String propC1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,73 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.impl;
|
||||
|
||||
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.inventory.itemKey.dao.ItemKeyDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.form.ItemKeyQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.vo.ItemKeyVO;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.manager.ItemKeyManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.ItemKeyQueryService;
|
||||
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.Objects;
|
||||
|
||||
@Service
|
||||
public class ItemKeyQueryServiceImpl implements ItemKeyQueryService {
|
||||
|
||||
@Resource
|
||||
private ItemKeyDao itemKeyDao;
|
||||
|
||||
@Resource
|
||||
private ItemKeyManager itemKeyManager;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
public PageResult<ItemKeyVO> queryPage(ItemKeyQueryForm queryForm) {
|
||||
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
|
||||
List<ItemKeyVO> list = itemKeyDao.queryPage(page, queryForm);
|
||||
return SmartPageUtil.convert2PageResult(page, list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据物料属性ID集合查询物料属性信息
|
||||
*
|
||||
* @param itemKeyIdList 物料属性ID集合
|
||||
* @return Map<Long, ItemKeyEntity>
|
||||
*/
|
||||
public Map<Long, ItemKeyEntity> queryByItemKeyIds(List<Long> itemKeyIdList) {
|
||||
if (CollectionUtils.isEmpty(itemKeyIdList)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
itemKeyIdList = itemKeyIdList.stream().filter(Objects::nonNull).distinct().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);
|
||||
queryWrapper.eq(ItemKeyEntity::getItemId, itemId);
|
||||
queryWrapper.eq(ItemKeyEntity::getPropC1, propC1);
|
||||
List<ItemKeyEntity> itemKeys = itemKeyManager.list(queryWrapper);
|
||||
if (CollectionUtils.isEmpty(itemKeys)) {
|
||||
return null;
|
||||
}
|
||||
return itemKeys.get(0);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.impl;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.entity.ItemKeyEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.form.ItemKeyAddForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.form.ItemKeyUpdateForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.manager.ItemKeyManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.ItemKeyQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.ItemKeyService;
|
||||
import net.lab1024.sa.base.common.code.UserErrorCode;
|
||||
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||
import net.lab1024.sa.base.common.util.SmartBeanUtil;
|
||||
import net.lab1024.sa.base.common.util.SmartRequestUtil;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class ItemKeyServiceImpl implements ItemKeyService {
|
||||
|
||||
@Resource
|
||||
private ItemKeyManager itemKeyManager;
|
||||
|
||||
@Resource
|
||||
private ItemKeyQueryService itemKeyQueryService;
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> add(ItemKeyAddForm addForm) {
|
||||
ItemKeyEntity itemKeyEntity = SmartBeanUtil.copy(addForm, ItemKeyEntity.class);
|
||||
itemKeyManager.save(itemKeyEntity);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> update(ItemKeyUpdateForm updateForm) {
|
||||
ItemKeyEntity itemKeyEntity = SmartBeanUtil.copy(updateForm, ItemKeyEntity.class);
|
||||
itemKeyManager.update(itemKeyEntity);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> batchDelete(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
|
||||
itemKeyManager.batchDelete(idList);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 单个删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> delete(Long itemKeyId) {
|
||||
if (null == itemKeyId) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
|
||||
itemKeyManager.deleteById(itemKeyId);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 单一创建itemKey
|
||||
*
|
||||
* @param orderNumber 工单号
|
||||
* @param itemId 物料
|
||||
* @param propC1 批次
|
||||
* @return ItemKeyEntity
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ItemKeyEntity createItemKey(String orderNumber, Long itemId, String propC1) {
|
||||
ItemKeyEntity itemKey = itemKeyQueryService.queryItemKey(orderNumber, itemId, propC1);
|
||||
if (itemKey != null) {
|
||||
return itemKey;
|
||||
}
|
||||
itemKey = ItemKeyEntity.builder()
|
||||
.orderNumber(orderNumber)
|
||||
.itemId(itemId)
|
||||
.propC1(propC1)
|
||||
.createUserId(SmartRequestUtil.getRequestUser().getUserId())
|
||||
.createUserName(SmartRequestUtil.getRequestUser().getUserName())
|
||||
.build();
|
||||
itemKeyManager.save(itemKey);
|
||||
return itemKey;
|
||||
}
|
||||
}
|
||||
|
|
@ -7,37 +7,19 @@ import net.lab1024.sa.base.common.enumeration.BaseEnum;
|
|||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum AsnOrderStatusEnum implements BaseEnum {
|
||||
/**
|
||||
* 1 已创建
|
||||
*/
|
||||
|
||||
CREATED("CREATED", "已创建"),
|
||||
|
||||
/**
|
||||
* 2 已提交
|
||||
*/
|
||||
APPROVING("APPROVING", "已提交"),
|
||||
|
||||
/**
|
||||
* 3 已审核
|
||||
*/
|
||||
APPROVED("APPROVED", "已审核"),
|
||||
|
||||
/**
|
||||
* 4 入库中
|
||||
*/
|
||||
IN_PROGRESS("IN_PROGRESS", "入库中"),
|
||||
|
||||
/**
|
||||
* 5 已完成
|
||||
*/
|
||||
COMPLETED("COMPLETED", "已完成"),
|
||||
|
||||
/**
|
||||
* 6 已取消
|
||||
*/
|
||||
CANCELLED("CANCELLED", "已取消"),
|
||||
|
||||
|
||||
;
|
||||
|
||||
private final String value;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import lombok.Getter;
|
|||
import net.lab1024.sa.base.common.enumeration.BaseEnum;
|
||||
|
||||
/**
|
||||
* 商品状态
|
||||
* 入库单类型
|
||||
*
|
||||
* @Author 1024创新实验室: 胡克
|
||||
* @Date 2021-10-25 20:26:54
|
||||
|
|
@ -18,22 +18,12 @@ import net.lab1024.sa.base.common.enumeration.BaseEnum;
|
|||
@Getter
|
||||
public enum AsnOrderTypeEnum implements BaseEnum {
|
||||
|
||||
/**
|
||||
* 1 采购入库
|
||||
*/
|
||||
PURCHASE("PURCHASE", "采购入库"),
|
||||
|
||||
/**
|
||||
* 2 退货入库
|
||||
*/
|
||||
RETURN("RETURN", "退货入库"),
|
||||
|
||||
/**
|
||||
* 3 其他入库
|
||||
*/
|
||||
OTHER("OTHER", "其他入库"),
|
||||
|
||||
|
||||
;
|
||||
|
||||
private final String value;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,46 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.constant;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import net.lab1024.sa.base.common.enumeration.BaseEnum;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum PickOrderStatusEnum implements BaseEnum {
|
||||
|
||||
CREATED("CREATED", "已创建"),
|
||||
|
||||
APPROVING("APPROVING", "已提交"),
|
||||
|
||||
APPROVED("APPROVED", "已审核"),
|
||||
|
||||
PARTIALLY_ALLOCATED("PARTIALLY_ALLOCATED", "部分分配"),
|
||||
|
||||
ALLOCATED("ALLOCATED", "已分配"),
|
||||
|
||||
PARTIALLY_PICKED("PARTIALLY_PICKED", "部分拣货"),
|
||||
|
||||
COMPLETED("COMPLETED", "已完成"),
|
||||
|
||||
CANCELLED("CANCELLED", "已取消"),
|
||||
|
||||
;
|
||||
|
||||
private final String value;
|
||||
|
||||
private final String desc;
|
||||
|
||||
/**
|
||||
* 根据 value 获取对应的 desc
|
||||
* @param value 枚举值
|
||||
* @return 对应的描述,如果未找到则返回 null
|
||||
*/
|
||||
public static String getDescByValue(String value) {
|
||||
for (PickOrderStatusEnum status : PickOrderStatusEnum.values()) {
|
||||
if (status.getValue().equals(value)) {
|
||||
return status.getDesc();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.constant;
|
||||
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import net.lab1024.sa.base.common.enumeration.BaseEnum;
|
||||
|
||||
/**
|
||||
* 出库单单据类型
|
||||
*
|
||||
* @Author 1024创新实验室: 胡克
|
||||
* @Date 2021-10-25 20:26:54
|
||||
* @Wechat zhuoda1024
|
||||
* @Email lab1024@163.com
|
||||
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum PickOrderTypeEnum implements BaseEnum {
|
||||
|
||||
SALES("SALES", "销售出库"),
|
||||
|
||||
TRANSFER("TRANSFER", "调拨出库"),
|
||||
|
||||
RETURN_OUT("RETURN_OUT", "退货出库"),
|
||||
|
||||
OTHER("OTHER", "其他出库"),
|
||||
|
||||
|
||||
;
|
||||
|
||||
private final String value;
|
||||
|
||||
private final String desc;
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.controller;
|
||||
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity.PickEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form.PickAddForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form.PickQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form.PickUpdateForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.vo.PickVO;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.service.PickQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.service.PickService;
|
||||
import net.lab1024.sa.base.common.domain.ValidateList;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||
import net.lab1024.sa.base.common.domain.PageResult;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
/**
|
||||
* 出库单 Controller
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2024-12-26 15:42:11
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@RestController
|
||||
@Tag(name = "出库单")
|
||||
public class PickController {
|
||||
|
||||
@Resource
|
||||
private PickService pickService;
|
||||
|
||||
@Resource
|
||||
private PickQueryService pickQueryService;
|
||||
|
||||
@Operation(summary = "分页查询 @author 霍锦")
|
||||
@PostMapping("/pick/queryPage")
|
||||
@SaCheckPermission("pick:query")
|
||||
public ResponseDTO<PageResult<PickVO>> queryPage(@RequestBody @Valid PickQueryForm queryForm) {
|
||||
return ResponseDTO.ok(pickQueryService.queryPage(queryForm));
|
||||
}
|
||||
|
||||
@Operation(summary = "添加 @author 霍锦")
|
||||
@PostMapping("/pick/add")
|
||||
@SaCheckPermission("pick:add")
|
||||
public ResponseDTO<PickEntity> add(@RequestBody @Valid PickAddForm addForm) {
|
||||
return pickService.add(addForm);
|
||||
}
|
||||
|
||||
@Operation(summary = "更新 @author 霍锦")
|
||||
@PostMapping("/pick/update")
|
||||
@SaCheckPermission("pick:update")
|
||||
public ResponseDTO<PickEntity> update(@RequestBody @Valid PickUpdateForm updateForm) {
|
||||
return pickService.update(updateForm);
|
||||
}
|
||||
|
||||
@Operation(summary = "批量删除 @author 霍锦")
|
||||
@PostMapping("/pick/batchDelete")
|
||||
@SaCheckPermission("pick:delete")
|
||||
public ResponseDTO<String> batchDelete(@RequestBody ValidateList<Long> idList) {
|
||||
return pickService.batchDelete(idList);
|
||||
}
|
||||
|
||||
@Operation(summary = "单个删除 @author 霍锦")
|
||||
@GetMapping("/pick/delete/{pickId}")
|
||||
@SaCheckPermission("pick:delete")
|
||||
public ResponseDTO<String> batchDelete(@PathVariable Long pickId) {
|
||||
return pickService.delete(pickId);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.dao;
|
||||
|
||||
import java.util.List;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity.PickEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form.PickQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.vo.PickVO;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 出库单 Dao
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2024-12-26 15:42:11
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Mapper
|
||||
public interface PickDao extends BaseMapper<PickEntity> {
|
||||
|
||||
/**
|
||||
* 分页 查询
|
||||
*
|
||||
* @param page
|
||||
* @param queryForm
|
||||
* @return
|
||||
*/
|
||||
List<PickVO> queryPage(Page page, @Param("queryForm") PickQueryForm queryForm);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.Data;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.constant.AsnOrderStatusEnum;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.constant.AsnOrderTypeEnum;
|
||||
import net.lab1024.sa.base.module.support.datatracer.annoation.DataTracerFieldEnum;
|
||||
import net.lab1024.sa.base.module.support.datatracer.annoation.DataTracerFieldLabel;
|
||||
|
||||
/**
|
||||
* 出库单 实体类
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2024-12-26 15:42:11
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Data
|
||||
@TableName("t_pick")
|
||||
public class PickEntity {
|
||||
|
||||
/**
|
||||
* 出库单id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long pickId;
|
||||
|
||||
/**
|
||||
* 出库单号
|
||||
*/
|
||||
@DataTracerFieldLabel("入库单号")
|
||||
private String pickNumber;
|
||||
|
||||
/**
|
||||
* 客户订单号
|
||||
*/
|
||||
@DataTracerFieldLabel("客户订单号")
|
||||
private String customerNumber;
|
||||
|
||||
/**
|
||||
* 单据类型
|
||||
*/
|
||||
@DataTracerFieldLabel("单据类型")
|
||||
@DataTracerFieldEnum(enumClass = AsnOrderTypeEnum.class)
|
||||
private String orderType;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
*
|
||||
*/
|
||||
@DataTracerFieldLabel("状态")
|
||||
@DataTracerFieldEnum(enumClass = AsnOrderStatusEnum.class)
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 收货单位
|
||||
*/
|
||||
@DataTracerFieldLabel("收货单位")
|
||||
private Long addressId;
|
||||
|
||||
/**
|
||||
* 联系人
|
||||
*/
|
||||
@DataTracerFieldLabel("联系人")
|
||||
private String person;
|
||||
|
||||
/**
|
||||
* 电话
|
||||
*/
|
||||
@DataTracerFieldLabel("电话")
|
||||
private String telephone;
|
||||
|
||||
/**
|
||||
* 地址
|
||||
*/
|
||||
@DataTracerFieldLabel("地址")
|
||||
private String address;
|
||||
|
||||
|
||||
/**
|
||||
* 订单数量
|
||||
*/
|
||||
private BigDecimal orderQuantity;
|
||||
|
||||
/**
|
||||
* 分配数量
|
||||
*/
|
||||
private BigDecimal allocatedQuantity;
|
||||
|
||||
/**
|
||||
* 拣货数量
|
||||
*/
|
||||
private BigDecimal pickedQuantity;
|
||||
|
||||
/**
|
||||
* 发运数量
|
||||
*/
|
||||
private BigDecimal shippedQuantity;
|
||||
|
||||
/**
|
||||
* 订单日期
|
||||
*/
|
||||
private LocalDateTime orderDate;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 创建人ID
|
||||
*/
|
||||
private Long createUserId;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private String createUserName;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import lombok.Data;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.constant.AsnOrderStatusEnum;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.constant.AsnOrderTypeEnum;
|
||||
import net.lab1024.sa.base.common.swagger.SchemaEnum;
|
||||
import net.lab1024.sa.base.common.validator.enumeration.CheckEnum;
|
||||
|
||||
/**
|
||||
* 出库单 新建表单
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2024-12-26 15:42:11
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class PickAddForm {
|
||||
@Schema(description = "出库单号")
|
||||
private String pickNumber;
|
||||
|
||||
@SchemaEnum(AsnOrderStatusEnum.class)
|
||||
@CheckEnum(message = "状态", value = AsnOrderStatusEnum.class)
|
||||
private String status;
|
||||
|
||||
@Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "客户 不能为空")
|
||||
private Long customerId;
|
||||
|
||||
@Schema(description = "客户订单号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotBlank(message = "客户订单号 不能为空")
|
||||
private String customerNumber;
|
||||
|
||||
@SchemaEnum(AsnOrderTypeEnum.class)
|
||||
@CheckEnum(message = "单据类型", value = AsnOrderTypeEnum.class, required = true)
|
||||
private String orderType;
|
||||
|
||||
@Schema(description = "收货单位", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "收货单位 不能为空")
|
||||
private Long addressId;
|
||||
|
||||
@Schema(description = "联系人")
|
||||
private String person;
|
||||
|
||||
@Schema(description = "电话")
|
||||
private String telephone;
|
||||
|
||||
@Schema(description = "地址")
|
||||
private String address;
|
||||
|
||||
@Schema(description = "订单日期", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "订单日期 不能为空")
|
||||
private LocalDate orderDate;
|
||||
|
||||
@Schema(hidden = true)
|
||||
private Long createUserId;
|
||||
|
||||
@Schema(hidden = true)
|
||||
private String createUserName;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form;
|
||||
|
||||
import net.lab1024.sa.base.common.domain.PageParam;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 出库单 分页查询表单
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2024-12-26 15:42:11
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class PickQueryForm extends PageParam {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.AsnAddForm;
|
||||
|
||||
/**
|
||||
* 出库单 更新表单
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2024-12-26 15:42:11
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class PickUpdateForm extends PickAddForm {
|
||||
|
||||
@Schema(description = "出库单id", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "出库单id 不能为空")
|
||||
private Long pickId;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 出库单 列表VO
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2024-12-26 15:42:11
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class PickVO {
|
||||
|
||||
|
||||
@Schema(description = "出库单id")
|
||||
private Long pickId;
|
||||
|
||||
@Schema(description = "出库单号")
|
||||
private String pickNumber;
|
||||
|
||||
@Schema(description = "客户订单号")
|
||||
private String customerNumber;
|
||||
|
||||
@Schema(description = "单据类型")
|
||||
private String orderType;
|
||||
|
||||
@Schema(description = "状态")
|
||||
private String status;
|
||||
|
||||
@Schema(description = "收货地址")
|
||||
private Long addressId;
|
||||
|
||||
@Schema(description = "订单数量")
|
||||
private BigDecimal orderQuantity;
|
||||
|
||||
@Schema(description = "分配数量")
|
||||
private BigDecimal allocatedQuantity;
|
||||
|
||||
@Schema(description = "拣货数量")
|
||||
private BigDecimal pickedQuantity;
|
||||
|
||||
@Schema(description = "发运数量")
|
||||
private BigDecimal shippedQuantity;
|
||||
|
||||
@Schema(description = "订单日期")
|
||||
private LocalDateTime orderDate;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.manager;
|
||||
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.dao.PickDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity.PickEntity;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 出库单 Manager
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2024-12-26 15:42:11
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
@Service
|
||||
public class PickManager extends ServiceImpl<PickDao, PickEntity> {
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.service;
|
||||
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.entity.AsnEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity.PickEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form.PickQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.vo.PickVO;
|
||||
import net.lab1024.sa.base.common.domain.PageResult;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface PickQueryService {
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
PageResult<PickVO> queryPage(PickQueryForm queryForm);
|
||||
|
||||
/**
|
||||
* 根据客户订单号查询入库单
|
||||
*
|
||||
* @param customerNumber 客户订单号
|
||||
* @return AsnEntity
|
||||
*/
|
||||
PickEntity queryByCustomerNumber(String customerNumber);
|
||||
|
||||
/**
|
||||
* 根据ids查询出库
|
||||
*
|
||||
* @param idList 出库集合
|
||||
* @return List<PickEntity>
|
||||
*/
|
||||
List<PickEntity> queryByPickIds(List<Long> idList);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity.PickEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form.PickAddForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form.PickUpdateForm;
|
||||
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||
|
||||
/**
|
||||
* 出库单 Service
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2024-12-26 15:42:11
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
public interface PickService {
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
ResponseDTO<PickEntity> add(PickAddForm addForm);
|
||||
|
||||
/**
|
||||
* 更新
|
||||
*/
|
||||
ResponseDTO<PickEntity> update(PickUpdateForm updateForm);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
ResponseDTO<String> batchDelete(List<Long> idList);
|
||||
|
||||
/**
|
||||
* 单个删除
|
||||
*/
|
||||
ResponseDTO<String> delete(Long pickId);
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import jakarta.annotation.Resource;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.entity.AsnEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.dao.PickDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity.PickEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form.PickQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.vo.PickVO;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.manager.PickManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.service.PickQueryService;
|
||||
import net.lab1024.sa.base.common.domain.PageResult;
|
||||
import net.lab1024.sa.base.common.util.SmartPageUtil;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Service
|
||||
public class PickQueryServiceImpl implements PickQueryService {
|
||||
|
||||
@Resource
|
||||
private PickDao pickDao;
|
||||
|
||||
@Resource
|
||||
private PickManager pickManager;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
public PageResult<PickVO> queryPage(PickQueryForm queryForm) {
|
||||
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
|
||||
List<PickVO> list = pickDao.queryPage(page, queryForm);
|
||||
return SmartPageUtil.convert2PageResult(page, list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据客户订单号查询出库单
|
||||
*
|
||||
* @param customerNumber 客户订单号
|
||||
* @return PickEntity
|
||||
*/
|
||||
@Override
|
||||
public PickEntity queryByCustomerNumber(String customerNumber) {
|
||||
if (StringUtils.isBlank(customerNumber)) {
|
||||
return null;
|
||||
}
|
||||
LambdaQueryWrapper<PickEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(PickEntity::getCustomerNumber, customerNumber);
|
||||
return pickManager.getOne(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ids查询出库
|
||||
*
|
||||
* @param idList 出库集合
|
||||
* @return List<PickEntity>
|
||||
*/
|
||||
public List<PickEntity> queryByPickIds(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
//去重
|
||||
idList = idList.stream().filter(Objects::nonNull).distinct().toList();
|
||||
return pickManager.listByIds(idList);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pick.service.impl;
|
||||
|
||||
import com.amazonaws.partitions.PartitionRegionImpl;
|
||||
import jakarta.annotation.Resource;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.constant.AsnOrderStatusEnum;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.entity.AsnEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.domain.entity.AsnDetailEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.constant.PickOrderStatusEnum;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity.PickEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form.PickAddForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form.PickUpdateForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.manager.PickManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.service.PickQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.service.PickService;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.entity.PickDetailEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.manager.PickDetailManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service.PickDetailQueryService;
|
||||
import net.lab1024.sa.admin.util.JoinerResult;
|
||||
import net.lab1024.sa.admin.util.ResponseDTOUtil;
|
||||
import net.lab1024.sa.base.common.code.UserErrorCode;
|
||||
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||
import net.lab1024.sa.base.common.exception.BusinessException;
|
||||
import net.lab1024.sa.base.common.util.SmartBeanUtil;
|
||||
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;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class PickServiceImpl implements PickService {
|
||||
|
||||
@Resource
|
||||
private PickManager pickManager;
|
||||
|
||||
@Resource
|
||||
private PickDetailManager pickDetailManager;
|
||||
|
||||
@Resource
|
||||
private PickQueryService pickQueryService;
|
||||
|
||||
@Resource
|
||||
private PickDetailQueryService pickDetailQueryService;
|
||||
|
||||
@Resource
|
||||
private SerialNumberService serialNumberService;
|
||||
|
||||
@Resource
|
||||
private DataTracerService dataTracerService;
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<PickEntity> add(PickAddForm addForm) {
|
||||
PickEntity exitPick = pickQueryService.queryByCustomerNumber(addForm.getCustomerNumber());
|
||||
if (exitPick != null) {
|
||||
throw new BusinessException(addForm.getCustomerNumber() + "客户订单号已存在");
|
||||
}
|
||||
//自动生成出库编号
|
||||
addForm.setPickNumber(serialNumberService.generate(SerialNumberIdEnum.PICK));
|
||||
//默认已创建
|
||||
addForm.setStatus(PickOrderStatusEnum.CREATED.getValue());
|
||||
PickEntity pickEntity = SmartBeanUtil.copy(addForm, PickEntity.class);
|
||||
pickManager.save(pickEntity);
|
||||
|
||||
//操作记录
|
||||
dataTracerService.addTrace(pickEntity.getPickId(), DataTracerTypeEnum.PICK, "新建出库单:" + pickEntity.getPickNumber(), null, pickEntity);
|
||||
|
||||
return ResponseDTO.ok(pickEntity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<PickEntity> update(PickUpdateForm updateForm) {
|
||||
PickEntity exitPick = pickQueryService.queryByCustomerNumber(updateForm.getCustomerNumber());
|
||||
if (exitPick != null && !exitPick.getPickId().equals(updateForm.getPickId())) {
|
||||
throw new BusinessException(updateForm.getCustomerNumber() + "客户订单号已存在");
|
||||
}
|
||||
PickEntity pickEntity = SmartBeanUtil.copy(updateForm, PickEntity.class);
|
||||
pickManager.updateById(pickEntity);
|
||||
|
||||
//业务操作记录
|
||||
dataTracerService.addTrace(updateForm.getPickId(), DataTracerTypeEnum.PICK, "编辑出库单:" + pickEntity.getPickNumber(), exitPick, pickEntity);
|
||||
|
||||
return ResponseDTO.ok(pickEntity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> batchDelete(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
JoinerResult resultMsg = JoinerResult.createJoiner();
|
||||
|
||||
//查询批量订单
|
||||
List<PickEntity> pickList = pickQueryService.queryByPickIds(idList);
|
||||
|
||||
//将订单按状态分组;已创建的一组;非已创建的一组。
|
||||
Map<Boolean, List<PickEntity>> partitionedAsnList = pickList.stream()
|
||||
.collect(Collectors.partitioningBy(pick -> PickOrderStatusEnum.CREATED.getValue().equals(pick.getStatus())));
|
||||
//已创建的订单允许删除
|
||||
List<PickEntity> createAsnList = partitionedAsnList.get(true);
|
||||
//出库单集合
|
||||
List<Long> pickIds = createAsnList.stream().map(PickEntity::getPickId).toList();
|
||||
//根据出库单ID集合查询出库明细
|
||||
List<PickDetailEntity> details = pickDetailQueryService.queryPickDetailByPickIds(pickIds);
|
||||
if (CollectionUtils.isNotEmpty(details)) {
|
||||
pickDetailManager.removeBatchByIds(details);
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(createAsnList)) {
|
||||
Set<String> pickCodes = createAsnList.stream().map(PickEntity::getPickNumber).collect(Collectors.toSet());
|
||||
pickManager.removeBatchByIds(createAsnList);
|
||||
resultMsg.getSussMsg().add(pickCodes + "订单删除成功");
|
||||
}
|
||||
|
||||
//非已创建的订单不允许删除
|
||||
List<PickEntity> noCreateAsnList = partitionedAsnList.get(false);
|
||||
if (CollectionUtils.isNotEmpty(noCreateAsnList)) {
|
||||
Set<String> pickCodes = noCreateAsnList.stream().map(PickEntity::getPickNumber).collect(Collectors.toSet());
|
||||
resultMsg.getErrorMsg().add(pickCodes + "订单不允许删除");
|
||||
}
|
||||
|
||||
return ResponseDTOUtil.buildResponseDTO(resultMsg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单个删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> delete(Long pickId) {
|
||||
if (pickId == null) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
PickEntity asn = pickManager.getById(pickId);
|
||||
String status = asn.getStatus();
|
||||
// 只有已创建的订单才允许删除
|
||||
if (!PickOrderStatusEnum.CREATED.getValue().equals(status)) {
|
||||
return ResponseDTO.userErrorParam(AsnOrderStatusEnum.getDescByValue(status) + "的订单不允许删除");
|
||||
}
|
||||
List<PickDetailEntity> details = pickDetailQueryService.queryPickDetailByPickId(pickId);
|
||||
if (CollectionUtils.isNotEmpty(details)) {
|
||||
pickDetailManager.removeBatchByIds(details);
|
||||
}
|
||||
pickManager.removeById(pickId);
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# 默认是按前端工程文件的 /views/business 文件夹的路径作为前端组件路径,如果你没把生成的 .vue 前端代码放在 /views/business 下,
|
||||
# 那就根据自己实际情况修改下面 SQL 的 path,component 字段值,避免执行 SQL 后菜单无法访问。
|
||||
# 如果你一切都是按照默认,那么下面的 SQL 基本不用改
|
||||
|
||||
INSERT INTO t_menu ( menu_name, menu_type, parent_id, path, component, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, create_user_id )
|
||||
VALUES ( '出库单', 2, 0, '/pick/list', '/business/pick/pick-list.vue', false, false, true, false, 1, 1 );
|
||||
|
||||
# 按菜单名称查询该菜单的 menu_id 作为按钮权限的 父菜单ID 与 功能点关联菜单ID
|
||||
SET @parent_id = NULL;
|
||||
SELECT t_menu.menu_id INTO @parent_id FROM t_menu WHERE t_menu.menu_name = '出库单';
|
||||
|
||||
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, create_user_id )
|
||||
VALUES ( '查询', 3, @parent_id, false, false, true, false, 1, 'pick:query', 'pick:query', @parent_id, 1 );
|
||||
|
||||
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, create_user_id )
|
||||
VALUES ( '添加', 3, @parent_id, false, false, true, false, 1, 'pick:add', 'pick:add', @parent_id, 1 );
|
||||
|
||||
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, create_user_id )
|
||||
VALUES ( '更新', 3, @parent_id, false, false, true, false, 1, 'pick:update', 'pick:update', @parent_id, 1 );
|
||||
|
||||
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, create_user_id )
|
||||
VALUES ( '删除', 3, @parent_id, false, false, true, false, 1, 'pick:delete', 'pick:delete', @parent_id, 1 );
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.controller;
|
||||
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form.PickDetailAddForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form.PickDetailQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form.PickDetailUpdateForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.vo.PickDetailVO;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service.PickDetailQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service.PickDetailService;
|
||||
import net.lab1024.sa.base.common.domain.ValidateList;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||
import net.lab1024.sa.base.common.domain.PageResult;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
/**
|
||||
* 出库明细 Controller
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2025-01-06 11:04:32
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@RestController
|
||||
@Tag(name = "出库明细")
|
||||
public class PickDetailController {
|
||||
|
||||
@Resource
|
||||
private PickDetailService pickDetailService;
|
||||
|
||||
@Resource
|
||||
private PickDetailQueryService pickDetailQueryService;
|
||||
|
||||
@Operation(summary = "分页查询 @author 霍锦")
|
||||
@PostMapping("/pickDetail/queryPage")
|
||||
@SaCheckPermission("pickDetail:query")
|
||||
public ResponseDTO<PageResult<PickDetailVO>> queryPage(@RequestBody @Valid PickDetailQueryForm queryForm) {
|
||||
return ResponseDTO.ok(pickDetailQueryService.queryPage(queryForm));
|
||||
}
|
||||
|
||||
@Operation(summary = "添加 @author 霍锦")
|
||||
@PostMapping("/pickDetail/add")
|
||||
@SaCheckPermission("pickDetail:add")
|
||||
public ResponseDTO<String> add(@RequestBody @Valid PickDetailAddForm addForm) {
|
||||
return pickDetailService.add(addForm);
|
||||
}
|
||||
|
||||
@Operation(summary = "更新 @author 霍锦")
|
||||
@PostMapping("/pickDetail/update")
|
||||
@SaCheckPermission("pickDetail:update")
|
||||
public ResponseDTO<String> update(@RequestBody @Valid PickDetailUpdateForm updateForm) {
|
||||
return pickDetailService.update(updateForm);
|
||||
}
|
||||
|
||||
@Operation(summary = "批量删除 @author 霍锦")
|
||||
@PostMapping("/pickDetail/batchDelete")
|
||||
@SaCheckPermission("pickDetail:delete")
|
||||
public ResponseDTO<String> batchDelete(@RequestBody ValidateList<Long> idList) {
|
||||
return pickDetailService.batchDelete(idList);
|
||||
}
|
||||
|
||||
@Operation(summary = "单个删除 @author 霍锦")
|
||||
@GetMapping("/pickDetail/delete/{pickDetailId}")
|
||||
@SaCheckPermission("pickDetail:delete")
|
||||
public ResponseDTO<String> batchDelete(@PathVariable Long pickDetailId) {
|
||||
return pickDetailService.delete(pickDetailId);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.dao;
|
||||
|
||||
import java.util.List;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.entity.PickDetailEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form.PickDetailQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.vo.PickDetailVO;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 出库明细 Dao
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2025-01-06 11:04:32
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Mapper
|
||||
public interface PickDetailDao extends BaseMapper<PickDetailEntity> {
|
||||
|
||||
/**
|
||||
* 分页 查询
|
||||
*
|
||||
* @param page
|
||||
* @param queryForm
|
||||
* @return
|
||||
*/
|
||||
List<PickDetailVO> queryPage(Page page, @Param("queryForm") PickDetailQueryForm queryForm);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 出库明细 实体类
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2025-01-06 11:04:32
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Data
|
||||
@TableName("t_pick_detail")
|
||||
public class PickDetailEntity {
|
||||
|
||||
/**
|
||||
* 出库明细id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long pickDetailId;
|
||||
|
||||
/**
|
||||
* 出库单id
|
||||
*/
|
||||
private Long pickId;
|
||||
|
||||
/**
|
||||
* 物料id
|
||||
*/
|
||||
private Long itemId;
|
||||
|
||||
/**
|
||||
* 批次号
|
||||
*/
|
||||
private String propC1;
|
||||
|
||||
/**
|
||||
* 生产日期
|
||||
*/
|
||||
private LocalDate propD1;
|
||||
|
||||
/**
|
||||
* 订单数量
|
||||
*/
|
||||
private BigDecimal orderQuantity;
|
||||
|
||||
/**
|
||||
* 分配数量
|
||||
*/
|
||||
private BigDecimal allocatedQuantity;
|
||||
|
||||
/**
|
||||
* 拣货数量
|
||||
*/
|
||||
private BigDecimal pickedQuantity;
|
||||
|
||||
/**
|
||||
* 发运数量
|
||||
*/
|
||||
private BigDecimal shippedQuantity;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 创建人ID
|
||||
*/
|
||||
private Long createUserId;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private String createUserName;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 出库明细 新建表单
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2025-01-06 11:04:32
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class PickDetailAddForm {
|
||||
|
||||
@Schema(description = "出库单", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "出库单 不能为空")
|
||||
private Long pickId;
|
||||
|
||||
@Schema(description = "物料", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "物料 不能为空")
|
||||
private Long itemId;
|
||||
|
||||
@Schema(description = "订单数量")
|
||||
@NotNull(message = "订单数量不能为空")
|
||||
@DecimalMin(value = "1", message = "订单数量最低1")
|
||||
private BigDecimal orderQuantity;
|
||||
|
||||
@Schema(hidden = true)
|
||||
private Long createUserId;
|
||||
|
||||
@Schema(hidden = true)
|
||||
private String createUserName;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form;
|
||||
|
||||
import net.lab1024.sa.base.common.domain.PageParam;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 出库明细 分页查询表单
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2025-01-06 11:04:32
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class PickDetailQueryForm extends PageParam {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 出库明细 更新表单
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2025-01-06 11:04:32
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class PickDetailUpdateForm extends PickDetailAddForm{
|
||||
|
||||
@Schema(description = "出库明细id", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "出库明细id 不能为空")
|
||||
private Long pickDetailId;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 出库明细 列表VO
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2025-01-06 11:04:32
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class PickDetailVO {
|
||||
|
||||
|
||||
@Schema(description = "出库明细id")
|
||||
private Long pickDetailId;
|
||||
|
||||
@Schema(description = "出库单id")
|
||||
private Long pickId;
|
||||
|
||||
@Schema(description = "物料id")
|
||||
private Long itemId;
|
||||
|
||||
@Schema(description = "批次号")
|
||||
private String propC1;
|
||||
|
||||
@Schema(description = "生产日期")
|
||||
private LocalDate propD1;
|
||||
|
||||
@Schema(description = "订单数量")
|
||||
private BigDecimal orderQuantity;
|
||||
|
||||
@Schema(description = "分配数量")
|
||||
private BigDecimal allocatedQuantity;
|
||||
|
||||
@Schema(description = "拣货数量")
|
||||
private BigDecimal pickedQuantity;
|
||||
|
||||
@Schema(description = "发运数量")
|
||||
private BigDecimal shippedQuantity;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.manager;
|
||||
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.dao.PickDetailDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.entity.PickDetailEntity;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 出库明细 Manager
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2025-01-06 11:04:32
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
@Service
|
||||
public class PickDetailManager extends ServiceImpl<PickDetailDao, PickDetailEntity> {
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service;
|
||||
|
||||
import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.domain.entity.AsnDetailEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.entity.PickDetailEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form.PickDetailQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.vo.PickDetailVO;
|
||||
import net.lab1024.sa.base.common.domain.PageResult;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface PickDetailQueryService {
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
PageResult<PickDetailVO> queryPage(PickDetailQueryForm queryForm);
|
||||
|
||||
/**
|
||||
* 根据入库单id查询入库单详情
|
||||
*
|
||||
* @param pickId 出库单id
|
||||
* @return List<PickDetailEntity>
|
||||
*/
|
||||
List<PickDetailEntity> queryPickDetailByPickId(Long pickId);
|
||||
|
||||
/**
|
||||
* 根据出库单ids查询出库单详情
|
||||
*
|
||||
* @param pickIds 出库单ids
|
||||
* @return List<PickDetailEntity>
|
||||
*/
|
||||
List<PickDetailEntity> queryPickDetailByPickIds(List<Long> pickIds);
|
||||
|
||||
/**
|
||||
* 根据ids查询入库明细
|
||||
*
|
||||
* @param idList 入库明细集合
|
||||
* @return List<PickDetailEntity>
|
||||
*/
|
||||
List<PickDetailEntity> queryByPickDetailIds(List<Long> idList);
|
||||
|
||||
/**
|
||||
* 根据明细集合查询明细信息
|
||||
*
|
||||
* @param idList 明细集合
|
||||
* @return Map<String, PickDetailEntity>
|
||||
*/
|
||||
Map<Long, PickDetailEntity> queryByPickDetailIdsToMap(List<Long> idList);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form.PickDetailAddForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form.PickDetailUpdateForm;
|
||||
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||
|
||||
/**
|
||||
* 出库明细 Service
|
||||
*
|
||||
* @Author 霍锦
|
||||
* @Date 2025-01-06 11:04:32
|
||||
* @Copyright 友仓
|
||||
*/
|
||||
|
||||
public interface PickDetailService {
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
ResponseDTO<String> add(PickDetailAddForm addForm);
|
||||
|
||||
/**
|
||||
* 更新
|
||||
*/
|
||||
ResponseDTO<String> update(PickDetailUpdateForm updateForm);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
ResponseDTO<String> batchDelete(List<Long> idList);
|
||||
|
||||
/**
|
||||
* 单个删除
|
||||
*/
|
||||
ResponseDTO<String> delete(Long pickDetailId);
|
||||
}
|
||||
|
|
@ -0,0 +1,109 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service.impl;
|
||||
|
||||
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.shipping.pickDetail.dao.PickDetailDao;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.entity.PickDetailEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form.PickDetailQueryForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.vo.PickDetailVO;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.manager.PickDetailManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service.PickDetailQueryService;
|
||||
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.Objects;
|
||||
|
||||
@Service
|
||||
public class PickDetailQueryServiceImpl implements PickDetailQueryService {
|
||||
|
||||
@Resource
|
||||
private PickDetailDao pickDetailDao;
|
||||
|
||||
@Resource
|
||||
private PickDetailManager pickDetailManager;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
public PageResult<PickDetailVO> queryPage(PickDetailQueryForm queryForm) {
|
||||
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
|
||||
List<PickDetailVO> list = pickDetailDao.queryPage(page, queryForm);
|
||||
return SmartPageUtil.convert2PageResult(page, list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据入库单id查询出库单详情
|
||||
*
|
||||
* @param pickId 出库单id
|
||||
* @return List<PickDetailEntity>
|
||||
*/
|
||||
public List<PickDetailEntity> queryPickDetailByPickId(Long pickId) {
|
||||
if (pickId == null) {
|
||||
return null;
|
||||
}
|
||||
LambdaQueryWrapper<PickDetailEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(PickDetailEntity::getPickId, pickId);
|
||||
return pickDetailManager.list(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据入库单ids查询出库单详情
|
||||
*
|
||||
* @param pickIds 出库单id
|
||||
* @return List<PickDetailEntity>
|
||||
*/
|
||||
public List<PickDetailEntity> queryPickDetailByPickIds(List<Long> pickIds) {
|
||||
if (CollectionUtils.isEmpty(pickIds)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
//去重
|
||||
pickIds = pickIds.stream().filter(Objects::nonNull).distinct().toList();
|
||||
LambdaQueryWrapper<PickDetailEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.in(PickDetailEntity::getPickId, pickIds);
|
||||
return pickDetailManager.list(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ids查询出库明细
|
||||
*
|
||||
* @param idList 出库明细集合
|
||||
* @return List<PickDetailEntity>
|
||||
*/
|
||||
public List<PickDetailEntity> queryByPickDetailIds(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
//去重
|
||||
idList = idList.stream().filter(Objects::nonNull).distinct().toList();
|
||||
return pickDetailManager.listByIds(idList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据明细集合查询明细信息
|
||||
*
|
||||
* @param idList 明细集合
|
||||
* @return Map<String, AsnDetailEntity>
|
||||
*/
|
||||
public Map<Long, PickDetailEntity> queryByPickDetailIdsToMap(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
//查询明细
|
||||
List<PickDetailEntity> pickDetails = queryByPickDetailIds(idList);
|
||||
//封装map
|
||||
Map<Long, PickDetailEntity> pickDetailMap = Maps.newHashMap();
|
||||
for (PickDetailEntity pickDetail : pickDetails) {
|
||||
pickDetailMap.put(pickDetail.getPickDetailId(), pickDetail);
|
||||
}
|
||||
return pickDetailMap;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,211 @@
|
|||
package net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service.impl;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.item.domain.entity.ItemEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.item.manager.ItemManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.base.item.service.ItemQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.constant.PickOrderStatusEnum;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity.PickEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pick.manager.PickManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.entity.PickDetailEntity;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form.PickDetailAddForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.form.PickDetailUpdateForm;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.manager.PickDetailManager;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service.PickDetailQueryService;
|
||||
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service.PickDetailService;
|
||||
import net.lab1024.sa.admin.util.JoinerResult;
|
||||
import net.lab1024.sa.admin.util.ResponseDTOUtil;
|
||||
import net.lab1024.sa.base.common.code.UserErrorCode;
|
||||
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||
import net.lab1024.sa.base.common.util.SmartBeanUtil;
|
||||
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;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@Service
|
||||
public class PickDetailServiceImpl implements PickDetailService {
|
||||
|
||||
@Resource
|
||||
private ItemManager itemManager;
|
||||
|
||||
@Resource
|
||||
private PickManager pickManager;
|
||||
|
||||
@Resource
|
||||
private PickDetailManager pickDetailManager;
|
||||
|
||||
@Resource
|
||||
private ItemQueryService itemQueryService;
|
||||
|
||||
@Resource
|
||||
private PickDetailQueryService pickDetailQueryService;
|
||||
|
||||
@Resource
|
||||
private DataTracerService dataTracerService;
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> add(PickDetailAddForm addForm) {
|
||||
PickDetailEntity pickDetailEntity = SmartBeanUtil.copy(addForm, PickDetailEntity.class);
|
||||
pickDetailManager.save(pickDetailEntity);
|
||||
|
||||
//刷新出库单
|
||||
refreshPick(addForm.getPickId());
|
||||
|
||||
//业务操作记录
|
||||
ItemEntity item = itemManager.queryItem(addForm.getItemId());
|
||||
dataTracerService.addTrace(pickDetailEntity.getPickId(), DataTracerTypeEnum.PICK, "添加:" + item.getItemCode() + "物料明细", null, pickDetailEntity);
|
||||
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新
|
||||
*/
|
||||
public ResponseDTO<String> update(PickDetailUpdateForm updateForm) {
|
||||
PickDetailEntity originEntity = pickDetailManager.getById(updateForm.getPickDetailId());
|
||||
PickDetailEntity pickDetailEntity = SmartBeanUtil.copy(updateForm, PickDetailEntity.class);
|
||||
pickDetailManager.updateById(pickDetailEntity);
|
||||
|
||||
//刷新出库单
|
||||
refreshPick(updateForm.getPickId());
|
||||
|
||||
ItemEntity item = itemManager.queryItem(updateForm.getItemId());
|
||||
dataTracerService.addTrace(pickDetailEntity.getPickId(), DataTracerTypeEnum.PICK, "编辑:" + item.getItemCode() + "物料明细", originEntity, pickDetailEntity);
|
||||
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseDTO<String> batchDelete(List<Long> idList) {
|
||||
if (CollectionUtils.isEmpty(idList)) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
//消息提示
|
||||
JoinerResult resultMsg = JoinerResult.createJoiner();
|
||||
|
||||
//查询出库明细
|
||||
List<PickDetailEntity> pickDetails = pickDetailQueryService.queryByPickDetailIds(idList);
|
||||
|
||||
//获取出库明细去重后的入库单ID集合
|
||||
List<Long> pickIds = pickDetails.stream().filter(Objects::nonNull).map(PickDetailEntity::getPickId).distinct().toList();
|
||||
|
||||
//获取物料id集合
|
||||
List<Long> itemIds = pickDetails.stream().map(PickDetailEntity::getItemId).toList();
|
||||
|
||||
//查询物料
|
||||
Map<Long, ItemEntity> mapItem = itemQueryService.queryByItemIdsToMap(itemIds);
|
||||
|
||||
List<Long> toDeleteList = new ArrayList<>();
|
||||
for (PickDetailEntity pickDetail : pickDetails) {
|
||||
ItemEntity item = mapItem.get(pickDetail.getItemId());
|
||||
|
||||
if (pickDetail.getAllocatedQuantity().compareTo(BigDecimal.ZERO) > 0) {
|
||||
resultMsg.getErrorMsg().add(item.getItemCode() + "明细已分配");
|
||||
continue;
|
||||
}
|
||||
toDeleteList.add(pickDetail.getPickDetailId());
|
||||
resultMsg.getSussMsg().add(item.getItemCode() + "明细删除成功");
|
||||
}
|
||||
|
||||
if (CollectionUtils.isNotEmpty(toDeleteList)) {
|
||||
//批量删除
|
||||
pickDetailManager.removeBatchByIds(toDeleteList);
|
||||
//操作记录
|
||||
dataTracerService.addTrace(pickIds.get(0), DataTracerTypeEnum.PICK, "批量删除:" + resultMsg.getSussMsg().toString() + resultMsg.getErrorMsg().toString());
|
||||
}
|
||||
|
||||
//刷新出库单
|
||||
pickIds.forEach(this::refreshPick);
|
||||
|
||||
return ResponseDTOUtil.buildResponseDTO(resultMsg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单个删除
|
||||
*/
|
||||
public ResponseDTO<String> delete(Long pickDetailId) {
|
||||
if (null == pickDetailId) {
|
||||
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||
}
|
||||
//消息提示
|
||||
JoinerResult resultMsg = JoinerResult.createJoiner();
|
||||
|
||||
//出库明细
|
||||
PickDetailEntity pickDetail = pickDetailManager.getById(pickDetailId);
|
||||
|
||||
//物料
|
||||
ItemEntity item = itemManager.queryItem(pickDetail.getItemId());
|
||||
|
||||
if (pickDetail.getAllocatedQuantity().compareTo(BigDecimal.ZERO) > 0) {
|
||||
resultMsg.getErrorMsg().add(item.getItemCode() + "明细已分配");
|
||||
return ResponseDTOUtil.buildResponseDTO(resultMsg);
|
||||
}
|
||||
|
||||
Long pickId = pickDetail.getPickId();
|
||||
pickDetailManager.removeById(pickDetailId);
|
||||
resultMsg.getSussMsg().add(item.getItemCode() + "删除成功");
|
||||
|
||||
//刷新出库单
|
||||
refreshPick(pickId);
|
||||
|
||||
//操作记录
|
||||
dataTracerService.addTrace(pickId, DataTracerTypeEnum.PICK, "删除:" + resultMsg.getSussMsg().toString() + resultMsg.getErrorMsg().toString());
|
||||
|
||||
|
||||
return ResponseDTOUtil.buildResponseDTO(resultMsg);
|
||||
}
|
||||
|
||||
public void refreshPick(Long pickId) {
|
||||
//出库单
|
||||
PickEntity pick = pickManager.getById(pickId);
|
||||
|
||||
//获取订单明细
|
||||
List<PickDetailEntity> pickDetails = pickDetailQueryService.queryPickDetailByPickId(pickId);
|
||||
|
||||
//订单数量
|
||||
BigDecimal orderQuantity = pickDetails.stream().map(PickDetailEntity::getOrderQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
//分配数量
|
||||
BigDecimal allocatedQuantity = pickDetails.stream().map(PickDetailEntity::getAllocatedQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
//拣货数量
|
||||
BigDecimal pickedQuantity = pickDetails.stream().map(PickDetailEntity::getPickedQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
|
||||
//当前状态
|
||||
String status = pick.getStatus();
|
||||
if (orderQuantity.compareTo(BigDecimal.ZERO) >= 0 && allocatedQuantity.compareTo(BigDecimal.ZERO) == 0 && pickedQuantity.compareTo(BigDecimal.ZERO) == 0) {
|
||||
status = PickOrderStatusEnum.CREATED.getValue();
|
||||
} else if (SmartBigDecimalUtil.subtract(orderQuantity, allocatedQuantity, 2).compareTo(BigDecimal.ZERO) > 0 && allocatedQuantity.compareTo(BigDecimal.ZERO) > 0 && pickedQuantity.compareTo(BigDecimal.ZERO) == 0) {
|
||||
status = PickOrderStatusEnum.PARTIALLY_ALLOCATED.getValue();
|
||||
} else if (SmartBigDecimalUtil.subtract(orderQuantity, allocatedQuantity, 2).compareTo(BigDecimal.ZERO) == 0 && allocatedQuantity.compareTo(BigDecimal.ZERO) > 0 && pickedQuantity.compareTo(BigDecimal.ZERO) == 0) {
|
||||
status = PickOrderStatusEnum.ALLOCATED.getValue();
|
||||
}else if(SmartBigDecimalUtil.subtract(orderQuantity, pickedQuantity, 2).compareTo(BigDecimal.ZERO) > 0 && allocatedQuantity.compareTo(BigDecimal.ZERO) > 0 && pickedQuantity.compareTo(BigDecimal.ZERO) > 0){
|
||||
status = PickOrderStatusEnum.PARTIALLY_PICKED.getValue();
|
||||
}else if(SmartBigDecimalUtil.subtract(orderQuantity, pickedQuantity, 2).compareTo(BigDecimal.ZERO) == 0 && allocatedQuantity.compareTo(BigDecimal.ZERO) > 0 && pickedQuantity.compareTo(BigDecimal.ZERO) > 0){
|
||||
status = PickOrderStatusEnum.COMPLETED.getValue();
|
||||
}
|
||||
|
||||
pick.setOrderQuantity(orderQuantity);
|
||||
pick.setAllocatedQuantity(allocatedQuantity);
|
||||
pick.setPickedQuantity(pickedQuantity);
|
||||
pick.setStatus(status);
|
||||
pickManager.updateById(pick);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# 默认是按前端工程文件的 /views/business 文件夹的路径作为前端组件路径,如果你没把生成的 .vue 前端代码放在 /views/business 下,
|
||||
# 那就根据自己实际情况修改下面 SQL 的 path,component 字段值,避免执行 SQL 后菜单无法访问。
|
||||
# 如果你一切都是按照默认,那么下面的 SQL 基本不用改
|
||||
|
||||
INSERT INTO t_menu ( menu_name, menu_type, parent_id, path, component, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, create_user_id )
|
||||
VALUES ( '出库明细', 2, 0, '/pick-detail/list', '/business/pick-detail/pick-detail-list.vue', false, false, true, false, 1, 1 );
|
||||
|
||||
# 按菜单名称查询该菜单的 menu_id 作为按钮权限的 父菜单ID 与 功能点关联菜单ID
|
||||
SET @parent_id = NULL;
|
||||
SELECT t_menu.menu_id INTO @parent_id FROM t_menu WHERE t_menu.menu_name = '出库明细';
|
||||
|
||||
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, create_user_id )
|
||||
VALUES ( '查询', 3, @parent_id, false, false, true, false, 1, 'pickDetail:query', 'pickDetail:query', @parent_id, 1 );
|
||||
|
||||
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, create_user_id )
|
||||
VALUES ( '添加', 3, @parent_id, false, false, true, false, 1, 'pickDetail:add', 'pickDetail:add', @parent_id, 1 );
|
||||
|
||||
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, create_user_id )
|
||||
VALUES ( '更新', 3, @parent_id, false, false, true, false, 1, 'pickDetail:update', 'pickDetail:update', @parent_id, 1 );
|
||||
|
||||
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, create_user_id )
|
||||
VALUES ( '删除', 3, @parent_id, false, false, true, false, 1, 'pickDetail:delete', 'pickDetail:delete', @parent_id, 1 );
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="net.lab1024.sa.admin.module.business.wms.shipping.pick.dao.PickDao">
|
||||
|
||||
<!-- 查询结果列 -->
|
||||
<sql id="base_columns">
|
||||
t_pick.pick_id,
|
||||
t_pick.pick_number,
|
||||
t_pick.customer_number,
|
||||
t_pick.order_type,
|
||||
t_pick.status,
|
||||
t_pick.address_id,
|
||||
t_pick.order_quantity,
|
||||
t_pick.allocated_quantity,
|
||||
t_pick.picked_quantity,
|
||||
t_pick.shipped_quantity,
|
||||
t_pick.order_date,
|
||||
t_pick.create_time,
|
||||
t_pick.create_user_id,
|
||||
t_pick.create_user_name,
|
||||
t_pick.update_time
|
||||
</sql>
|
||||
|
||||
<!-- 分页查询 -->
|
||||
<select id="queryPage" resultType="net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.vo.PickVO">
|
||||
SELECT
|
||||
<include refid="base_columns"/>
|
||||
FROM t_pick
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.dao.PickDetailDao">
|
||||
|
||||
<!-- 查询结果列 -->
|
||||
<sql id="base_columns">
|
||||
t_pick_detail.pick_detail_id,
|
||||
t_pick_detail.pick_id,
|
||||
t_pick_detail.item_id,
|
||||
t_pick_detail.prop_C1,
|
||||
t_pick_detail.prop_D1,
|
||||
t_pick_detail.order_quantity,
|
||||
t_pick_detail.allocated_quantity,
|
||||
t_pick_detail.picked_quantity,
|
||||
t_pick_detail.shipped_quantity,
|
||||
t_pick_detail.create_time,
|
||||
t_pick_detail.create_user_id,
|
||||
t_pick_detail.create_user_name,
|
||||
t_pick_detail.update_time
|
||||
</sql>
|
||||
|
||||
<!-- 分页查询 -->
|
||||
<select id="queryPage" resultType="net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.vo.PickDetailVO">
|
||||
SELECT
|
||||
<include refid="base_columns"/>
|
||||
FROM t_pick_detail
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
|
@ -89,6 +89,7 @@ public class RedisConfig {
|
|||
|
||||
// 1. 高频查询且更新不频繁的数据
|
||||
configMap.put("item_cache", defaultConfig.entryTtl(Duration.ofHours(12)));
|
||||
configMap.put("item_key_cache", defaultConfig.entryTtl(Duration.ofHours(12)));
|
||||
configMap.put("customer_cache", defaultConfig.entryTtl(Duration.ofHours(8)));
|
||||
configMap.put("address_cache", defaultConfig.entryTtl(Duration.ofHours(24)));
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,11 @@ public enum DataTracerTypeEnum implements BaseEnum {
|
|||
*/
|
||||
ASN(4, "入库"),
|
||||
|
||||
/**
|
||||
* 入库
|
||||
*/
|
||||
PICK(5, "出库"),
|
||||
|
||||
;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@ public enum SerialNumberIdEnum implements BaseEnum {
|
|||
|
||||
ASN(4, "入库单编号"),
|
||||
|
||||
TASK(5, "任务编号"),
|
||||
PICK(5, "出库单编号"),
|
||||
|
||||
TASK(6, "任务编号"),
|
||||
|
||||
;
|
||||
|
||||
|
|
|
|||
|
|
@ -10,10 +10,5 @@
|
|||
热爱代码 热爱生活 !
|
||||
永远年轻 永远前行 !
|
||||
|
||||
SmartAdmin v3.X ,作者:1024创新实验室 @copyright:【 1024lab 】
|
||||
|
||||
SmartAdmin 文档地址:https://smartadmin.vip
|
||||
|
||||
1024创新实验室:https://www.1024lab.net
|
||||
|
||||
${AnsiColor.DEFAULT}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
spring:
|
||||
# 数据库连接信息
|
||||
datasource:
|
||||
url: jdbc:p6spy:mysql://123.60.65.29:3306/nc_wms?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai
|
||||
url: jdbc:p6spy:mysql://localhost:3306/nc_wms?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai
|
||||
username: root
|
||||
password: root
|
||||
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
|
||||
|
|
@ -24,7 +24,7 @@ spring:
|
|||
data:
|
||||
redis:
|
||||
database: 1
|
||||
host: 123.60.65.29
|
||||
host: 127.0.0.1
|
||||
port: 6379
|
||||
password: 123456
|
||||
timeout: 10000ms
|
||||
|
|
|
|||
Loading…
Reference in New Issue