自动化立体仓库 - WMS系统
zhou zhou
2025-12-30 3964d6d567fb00cedded7b8a05ad095e0db22042
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -2,10 +2,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SnowflakeIdWorker;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
@@ -29,6 +26,7 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -98,6 +96,9 @@
    @Autowired
    private OrderDetlPakoutService orderDetlPakoutService;
    @Autowired
    private InventoryReserveService inventoryReserveService;
    @Override
    @Transactional
@@ -189,6 +190,32 @@
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                List<InventoryReserve> inventoryReserves = inventoryReserveService.selectList(new EntityWrapper<InventoryReserve>()
                        .eq("matnr", paramLocDetl.getMatnr())
                        .eq("batch", paramLocDetl.getBatch())
                        .eq(!Cools.isEmpty(paramLocDetl.getBrand()), "brand", paramLocDetl.getBrand())
                        .eq(!Cools.isEmpty(paramLocDetl.getStandby1()), "standby1", paramLocDetl.getStandby1())
                        .eq(!Cools.isEmpty(paramLocDetl.getStandby2()), "standby2", paramLocDetl.getStandby2())
                        .eq(!Cools.isEmpty(paramLocDetl.getStandby3()), "standby3", paramLocDetl.getStandby3())
                        .eq(!Cools.isEmpty(paramLocDetl.getBoxType1()), "box_type1", paramLocDetl.getBoxType1())
                        .eq(!Cools.isEmpty(paramLocDetl.getBoxType2()), "box_type2", paramLocDetl.getBoxType2())
                        .eq(!Cools.isEmpty(paramLocDetl.getBoxType3()), "box_type3", paramLocDetl.getBoxType3())
                );
                List<LocDetl> locDetls = locDetlService.queryStockAll(null, null, paramLocDetl.getMatnr(), paramLocDetl.getBatch(),
                        paramLocDetl.getBrand(), paramLocDetl.getStandby1(), paramLocDetl.getStandby2(), paramLocDetl.getStandby3(), paramLocDetl.getBoxType1(), paramLocDetl.getBoxType2(), paramLocDetl.getBoxType3());
                if (!Cools.isEmpty(inventoryReserves)) {
                    BigDecimal inventoryReserveQuantity = inventoryReserves.stream().map(InventoryReserve::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
                    BigDecimal locDetlQuantity = locDetls.stream().map(LocDetl::getAnfme).map(BigDecimal::valueOf).reduce(BigDecimal.ZERO, BigDecimal::add);
                    if (locDetlQuantity.subtract(new BigDecimal(paramLocDetl.getCount().toString())).compareTo(inventoryReserveQuantity) < 0) {
                        throw new CoolException("库存预留数量大于库存数量");
                    }
                }
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch(), paramLocDetl.getBrand()
                        , paramLocDetl.getStandby1(), paramLocDetl.getStandby2(), paramLocDetl.getStandby3(), paramLocDetl.getBoxType1(), paramLocDetl.getBoxType2(), paramLocDetl.getBoxType3());
                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
@@ -490,17 +517,17 @@
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
//        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
//        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
        StartupDto dto = commonService.getLocNo(10, devpNo, findLocNoAttributeVo, locTypeDto);
        StartupDto dto = commonService.getLocNoBySdyhfz(devpNo,10);
        int workNo = dto.getWorkNo();
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(1L); // 工作状态:生成入库ID
        wrkMast.setWrkSts(2L); // 工作状态:生成入库ID
        wrkMast.setIoType(10); // 入出库状态:10.空板入库
        wrkMast.setIoPri(10D); // 优先级:10
        wrkMast.setCrnNo(dto.getCrnNo());
@@ -1067,7 +1094,7 @@
    @Transactional
    public void cancelWrkMast(String workNo, Long userId) {
        Date now = new Date();
        WrkMast wrkMast = wrkMastService.selectById(workNo);
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo));
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException(workNo + "工作档不存在");
        }
@@ -1218,7 +1245,7 @@
    @Override
    @Transactional
    public void pickWrkMast(String workNo, Long userId) {
        WrkMast wrkMast = wrkMastService.selectById(workNo);
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo));
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException(workNo + "工作档不存在");
        }