skyouc
2025-07-10 7aad95c1e8c51da713e630aa1bed0bbfa1078484
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedServiceImpl.java
@@ -4,34 +4,37 @@
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.apis.wcs.entity.response.SowSeeds;
import com.zy.asrs.wms.apis.wcs.services.WcsApiService;
import com.zy.asrs.wms.asrs.entity.*;
import com.zy.asrs.wms.asrs.entity.dto.ShippingOrderDetlDto;
import com.zy.asrs.wms.asrs.entity.enums.OrderPickStatus;
import com.zy.asrs.wms.asrs.entity.param.WaveSeedReviewParam;
import com.zy.asrs.wms.asrs.mapper.*;
import com.zy.asrs.wms.asrs.service.OrderDetlService;
import com.zy.asrs.wms.asrs.service.WaveSeedService;
import com.zy.asrs.wms.asrs.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@Service("waveSeedService")
public class WaveSeedServiceImpl extends ServiceImpl<WaveSeedMapper, WaveSeed> implements WaveSeedService {
    @Autowired
    private OrderMapper orderMapper;
    private OrderService orderMapper;
    @Autowired
    private OrderDetlMapper orderDetlMapper;
    @Autowired
    private TaskDetlMapper taskDetlMapper;
    private TaskDetlService taskDetlMapper;
    @Autowired
    private TaskService taskService;
    @Autowired
    private CacheSiteMapper cacheSiteMapper;
    @Autowired
    private WcsApiService wcsApiService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -59,7 +62,7 @@
        List<CacheSite> sites = cacheSiteMapper.selectList(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderNo, waveSeed.getOrderNo()));
        if (sites.isEmpty()) {
            throw new CoolException("当前订单未绑定播种库位,请绑定后再操作!!");
            throw new CoolException("当前订单未绑定播种库位,请使用PDA->地标绑定,功能绑定后再操作!!");
        }
        Double stock = Optional.of(waveSeed.getAnfme() - waveSeed.getWorkQty()).orElse(0.0D);
@@ -68,7 +71,7 @@
        }
        waveSeed.setWorkQty(waveSeed.getWorkQty() + param.getReviewNum());
        TaskDetl taskDetl = taskDetlMapper.selectOne(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getId, waveSeed.getTaskDetlId()));
        TaskDetl taskDetl = taskDetlMapper.getOne(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getId, waveSeed.getTaskDetlId()));
        if (Objects.isNull(taskDetl)) {
            throw new CoolException("当前播种任务明细不存在!!");
        }
@@ -80,12 +83,50 @@
        if (Objects.isNull(orderDetl)) {
            throw new CoolException("当前播种订单明细不存在!!");
        }
        orderDetl.setWorkQty(orderDetl.getWorkQty() + param.getReviewNum());
        if (orderDetl.getWorkQty() + orderDetl.getQty() > orderDetl.getAnfme()) {
        if (param.getReviewNum() + orderDetl.getQty() > orderDetl.getAnfme()) {
            throw new CoolException("请核对明细数量后,再进行操作!!");
        }
        //如果拣货数量与订单明细数量相等,表明拣货完成
        if (new BigDecimal(param.getReviewNum() + orderDetl.getQty()).compareTo(new BigDecimal(orderDetl.getAnfme())) == 0) {
            orderDetl.setPickStatus(OrderPickStatus.ORDER_PICK_STATUS_DONE.val);
        } else {
            orderDetl.setPickStatus(OrderPickStatus.ORDER_PICK_STATUS_SECTION.val);
        }
        if (orderDetlMapper.updateById(orderDetl) < 1) {
            throw new CoolException("订单明细数量更新失败");
            throw new CoolException("订单状态更新失败!!");
        }
        List<OrderDetl> detls = orderDetlMapper.selectList(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderNo, orderDetl.getOrderNo()));
        List<OrderDetl> detlList = detls.stream().filter(ord -> {
            return ord.getPickStatus() != OrderPickStatus.ORDER_PICK_STATUS_DONE.val;
        }).collect(Collectors.toList());
        if (detlList.isEmpty()) {
             if (!orderMapper.update(new LambdaUpdateWrapper<Order>()
                     .eq(Order::getOrderNo, orderDetl.getOrderNo())
                     .set(Order::getPickStatus, OrderPickStatus.ORDER_PICK_STATUS_DONE.val))) {
                 throw new CoolException("原始订单主单拣货状态更新失败!!");
             }
            try {
                Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getId, waveSeed.getTaskId()));
                if (Objects.isNull(task)) {
                    throw new CoolException("数据错误: 任务单据不存在!!");
                }
                wcsApiService.containerConveryor(task.getBarcode());
            } catch (Exception e) {
                log.error("执行异常:UNK",  e);
                throw new CoolException(e.getMessage());
            }
        } else {
            if (!orderMapper.update(new LambdaUpdateWrapper<Order>()
                    .eq(Order::getOrderNo, orderDetl.getOrderNo())
                    .set(Order::getPickStatus, OrderPickStatus.ORDER_PICK_STATUS_SECTION.val))) {
                throw new CoolException("原始订单主单拣货状态更新失败");
            }
        }
        waveSeed.setUpdateTime(new Date());
@@ -104,4 +145,9 @@
    public int removeSowById(Long id) {
        return this.baseMapper.update(new LambdaUpdateWrapper<WaveSeed>().eq(WaveSeed::getId, id).set(WaveSeed::getDeleted, 1).set(WaveSeed::getStatus, 0));
    }
    @Override
    public List<ShippingOrderDetlDto> selectShippingOrderDtel(String orderNo) {
        return this.baseMapper.selectShippingOrderDtel(orderNo);
    }
}