package com.mzl.flower.service.warehouse;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.mzl.flower.config.exception.ValidationException;
|
import com.mzl.flower.config.security.SecurityUtils;
|
import com.mzl.flower.dto.response.payment.OrderDTO;
|
import com.mzl.flower.dto.response.warehouse.WarehouseLocationDTO;
|
import com.mzl.flower.entity.payment.Order;
|
import com.mzl.flower.entity.payment.OrderItem;
|
import com.mzl.flower.entity.warehouse.Warehouse;
|
import com.mzl.flower.entity.warehouse.WarehouseLocation;
|
import com.mzl.flower.mapper.payment.OrderItemMapper;
|
import com.mzl.flower.mapper.payment.OrderMapper;
|
import com.mzl.flower.mapper.warehouse.WarehouseLocationMapper;
|
import com.mzl.flower.mapper.warehouse.WarehouseMapper;
|
import com.mzl.flower.service.payment.OrderService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
import java.util.LinkedList;
|
import java.util.List;
|
import java.util.Queue;
|
|
@Service
|
@Transactional
|
@Slf4j
|
public class WarehouseService {
|
|
private final WarehouseMapper warehouseMapper;
|
|
private final WarehouseLocationMapper warehouseLocationMapper;
|
|
private final OrderMapper orderMapper;
|
|
private final OrderItemMapper orderItemMapper;
|
|
private final OrderService orderService;
|
|
public WarehouseService(WarehouseMapper warehouseMapper,
|
WarehouseLocationMapper warehouseLocationMapper,
|
OrderMapper orderMapper,
|
OrderItemMapper orderItemMapper, OrderService orderService) {
|
this.warehouseMapper = warehouseMapper;
|
this.warehouseLocationMapper = warehouseLocationMapper;
|
this.orderMapper = orderMapper;
|
this.orderItemMapper = orderItemMapper;
|
this.orderService = orderService;
|
}
|
|
public void addWarehouse(Warehouse dto) {
|
dto.create(SecurityUtils.getUserId());
|
warehouseMapper.insert(dto);
|
}
|
|
public void updateWarehouse(Warehouse dto) {
|
Warehouse warehouse = warehouseMapper.selectById(dto.getId());
|
if (warehouse == null) {
|
throw new ValidationException("库位不存在");
|
}
|
warehouse.setName(dto.getName());
|
warehouse.setSeq(dto.getSeq());
|
warehouse.update(SecurityUtils.getUserId());
|
warehouseMapper.updateById(warehouse);
|
}
|
|
public void deleteWarehouse(Long id) {
|
Warehouse warehouse = warehouseMapper.selectById(id);
|
if (warehouse == null) {
|
throw new ValidationException("库位不存在");
|
}
|
warehouseMapper.deleteById(id);
|
}
|
|
public List<Warehouse> queryWarehouse() {
|
LambdaQueryWrapper<Warehouse> lambdaQueryWrapper = new LambdaQueryWrapper();
|
lambdaQueryWrapper.orderByAsc(Warehouse::getSeq);
|
return warehouseMapper.selectList(lambdaQueryWrapper);
|
}
|
|
public void addWarehouseLocation(WarehouseLocation dto) {
|
if(existWarehouseLocation(dto.getCode(),null)){
|
throw new ValidationException("库位名称已存在");
|
}
|
dto.create(SecurityUtils.getUserId());
|
warehouseLocationMapper.insert(dto);
|
}
|
|
private boolean existWarehouseLocation(String code, Long id) {
|
LambdaQueryWrapper<WarehouseLocation> lambdaQueryWrapper = new LambdaQueryWrapper();
|
lambdaQueryWrapper.eq(WarehouseLocation::getCode,code);
|
if(id!=null && id>0){
|
lambdaQueryWrapper.ne(WarehouseLocation::getId,id);
|
}
|
return warehouseLocationMapper.selectCount(lambdaQueryWrapper)>0;
|
}
|
|
public void updateWarehouseLocation(WarehouseLocation dto) {
|
WarehouseLocation location = warehouseLocationMapper.selectById(dto.getId());
|
if(location==null){
|
throw new ValidationException("库位不存在");
|
}
|
if(existWarehouseLocation(dto.getCode(),location.getId())){
|
throw new ValidationException("库位名称已存在");
|
}
|
location.setWarehouseId(dto.getWarehouseId());
|
location.setCode(dto.getCode());
|
location.setSeq(dto.getSeq());
|
location.update(SecurityUtils.getUserId());
|
warehouseLocationMapper.updateById(location);
|
}
|
|
public void deleteWarehouseLocation(Long id) {
|
WarehouseLocation location = warehouseLocationMapper.selectById(id);
|
if(location==null){
|
throw new ValidationException("库位不存在");
|
}
|
warehouseLocationMapper.deleteById(id);
|
}
|
|
public List<WarehouseLocationDTO> queryWarehouseLocation(Long warehouseId, String code) {
|
List<WarehouseLocationDTO> locations = warehouseLocationMapper.findAll(warehouseId, code);
|
for (WarehouseLocationDTO location : locations) {
|
List<OrderDTO> orderDTOs = getOrderByWarehouseLocation(location.getId());
|
if(orderDTOs == null || orderDTOs.size()==0){
|
location.setUsed(false);
|
}else{
|
location.setUsed(true);
|
}
|
location.setOrderDTO(orderDTOs);
|
}
|
return locations;
|
}
|
|
/**
|
* 查询库位订单信息
|
*
|
*/
|
public List<OrderDTO> getOrderByWarehouseLocation(Long warehouseLocationId){
|
LocalDateTime start = LocalDate.now().plusDays(-1).atTime(17, 0, 0);
|
LocalDateTime end = LocalDate.now().atTime(16, 59, 59);
|
List<Order> orders = orderMapper.selectList(new QueryWrapper<Order>().eq("deleted", 0)
|
.eq("warehouse_location_id", warehouseLocationId)
|
.gt("payment_time", start).le("payment_time", end));
|
if(orders!=null && orders.size()>0){
|
List<OrderDTO> dtos = new ArrayList<>();
|
for (Order order : orders) {
|
OrderDTO dto = new OrderDTO();
|
BeanUtils.copyProperties(order, dto);
|
dto.setItems(orderService.getPtCuOrderItems(dto.getId()));
|
dtos.add(dto);
|
}
|
return dtos;
|
}
|
return null;
|
}
|
|
/**
|
* 查询待分配的库位列表
|
* @return
|
*/
|
public Queue<WarehouseLocationDTO> selectAllocatedWarehouseLocation() {
|
List<Warehouse> warehouses = warehouseMapper.selectList(new LambdaQueryWrapper<Warehouse>()
|
.ne(Warehouse::getName, "手动分配区").orderByAsc(Warehouse::getSeq));
|
if(warehouses!=null&&warehouses.size()>0){
|
Queue<WarehouseLocationDTO> warehouseLocations = new LinkedList<>();
|
for (Warehouse warehouse : warehouses) {
|
List<WarehouseLocationDTO> locations = queryWarehouseLocation(warehouse.getId(),null);
|
if(locations!=null&&locations.size()>0){
|
warehouseLocations.addAll(locations);
|
}
|
}
|
return warehouseLocations;
|
}
|
log.error("系统库区查询失败");
|
return null;
|
}
|
}
|