skyouc
7 天以前 e046dba174365eb8934ee1e4206f09821145e876
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.mysql.cj.util.StringUtils;
import com.zy.asrs.wms.asrs.entity.param.StockOutParam;
import com.zy.asrs.framework.exception.CoolException;
@@ -532,6 +533,12 @@
        return mergePreviewDtos;
    }
    /**
     * 波次出库预览
     *
     * @param param
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public List<MergePreviewResultDto> orderOutMergeLocPreview(List<MergePreviewDto> param) {
        if (param == null) {
@@ -567,7 +574,7 @@
            //查询平库中符合条件的库存
            List<LocDetl> locs = locDetlService.queryFlatStock(pars.getMatnr(), pars.getBatch(), pars.getFieldParams());
            if (!locs.isEmpty()) {
                double anfme = pars.getAnfme() - pars.getWorkQty();
                Double anfme = pars.getAnfme() - pars.getWorkQty();
                for (LocDetl detl : locs) {
                    Loc loc = locService.getById(detl.getLocId());
                    if (loc == null) {
@@ -582,7 +589,7 @@
                    locDto.setLocNo(detl.getLocNo());
                    locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id);
                    locDto.setLocDetlId(detl.getId());
                    locDto.setAnfme(detl.getAnfme());
                    locDto.setAnfme(detl.getAnfme() - detl.getWorkQty());
                    locDto.setWorkQty(detl.getWorkQty());
                    locDtos.add(locDto);
                    //库位实际可用数量
@@ -591,8 +598,8 @@
                        continue;
                    }
                    //波次数量减去库位可用数量后,盈余数量
                    anfme = anfme - surplusQty;
                    if (anfme > 0) {
                    anfme = Math.round((anfme - surplusQty) * 10000) / 10000.0;
                    if (anfme.compareTo(0.0) > 0) {
                        //当前可使用数量
                        resultDto.setFetchQty(surplusQty);
                        //余下需求数量
@@ -1021,9 +1028,10 @@
     * 根据不同库位类型生成出库拣货单或CTU任务档
     *
     * @param dto
     * @param wave
     * @param
     */
    private void outStockByArea(OrderOutMergeParamDto dto, Wave wave) {
    @Transactional(rollbackFor = Exception.class)
    public void outStockByArea(OrderOutMergeParamDto dto, Wave wave) {
        List<OrderOutMergeParam> params = dto.getList();
        if (params.isEmpty()) {
            throw new CoolException("参数不能为空");
@@ -1103,6 +1111,11 @@
                throw new CoolException("保存工作档失败");
            }
            wave.setSite(operationPort.getFlag());
            if (!waveService.updateById(wave)) {
                throw new CoolException("波次站口状态更新失败!!");
            }
            for (OrderOutMergeDto merge : list) {
                LocDetl locDetl = locDetlService.getById(merge.getLocDetlId());
                if (locDetl == null) {
@@ -1137,9 +1150,12 @@
                }
                String matUniqueKey = Utils.getMatUniqueKey(taskDetl.getMatnr(), taskDetl.getBatch(), taskDetl.getUniqueField());
                WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, wave.getId()));
                logger.error("Matnr------>{}", taskDetl.getMatnr());
                WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>()
                        .eq(WaveDetl::getStockIndex, matUniqueKey)
                        .eq(WaveDetl::getWaveId, wave.getId()));
                if (waveDetl == null) {
                    throw new CoolException("波次数据不存在");
                    throw new CoolException("waveId:" + wave.getId() + "物料:" + taskDetl.getMatnr() + "波次数据不存在");
                }
                waveDetl.setWorkQty(waveDetl.getWorkQty() + taskDetl.getAnfme());
                waveDetl.setUpdateTime(new Date());
@@ -1153,28 +1169,31 @@
                throw new CoolException("当前波次订单不存在!!");
            }
            List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>()
                    .eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).eq(CacheSite::getChannel, task.getTargetSite()));
            if (cacheSites.isEmpty()) {
                throw new CoolException("缓存站空间不足,请稍后再试");
            }
//            List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>()
//                    .eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).eq(CacheSite::getChannel, task.getTargetSite()));
//
//            if (cacheSites.isEmpty()) {
//                throw new CoolException("缓存站空间不足,请稍后再试");
//            }
//
//            if (cacheSites.size() < orders.size()) {
//                throw new CoolException("缓存站空间不足,请稍后再试");
//            }
            if (cacheSites.size() < orders.size()) {
                throw new CoolException("缓存站空间不足,请稍后再试");
            }
            for (int i = 0; i < orders.size(); i++) {
                CacheSite cacheSite = cacheSites.get(i);
                cacheSite.setOrderId(orders.get(i).getId());
                cacheSite.setOrderNo(orders.get(i).getOrderNo());
                cacheSite.setSiteStatus(CacheSiteStatusType.R.id);
                cacheSite.setBarcode(loc.getBarcode());
                cacheSite.setUpdateTime(new Date());
                if (!cacheSiteService.updateById(cacheSite)) {
                    throw new CoolException("缓存站更新失败");
                }
            }
//            for (int i = 0; i < orders.size(); i++) {
//                CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderId, orders.get(i).getId()));
//                if (Objects.isNull(cacheSite)) {
//                    cacheSite.setOrderId(orders.get(i).getId());
//                    cacheSite.setOrderNo(orders.get(i).getOrderNo());
//                    cacheSite.setSiteStatus(CacheSiteStatusType.R.id);
//                    cacheSite.setBarcode(loc.getBarcode());
//                    cacheSite.setUpdateTime(new Date());
//                    if (!cacheSiteService.updateById(cacheSite)) {
//                        throw new CoolException("缓存站更新失败");
//                    }
//                }
//            }
            //库位F => R
            loc.setLocStsId(LocStsType.R.val());
@@ -1226,7 +1245,7 @@
    /**
     * @author Ryan
     * @date 2025/7/4
     * @description: 生面拣货明细
     * @description: 生成拣货明细
     * @version 1.0
     */
    @Transactional(rollbackFor = Exception.class)
@@ -1260,6 +1279,12 @@
                if (!locDetlService.updateById(locDetl)) {
                    throw new CoolException("库存加锁失败!!");
                }
                orderDetlService.update(new LambdaUpdateWrapper<OrderDetl>()
                                .set(OrderDetl::getWareType, 2)
                        .eq(OrderDetl::getMatId, mat.getId())
                        .eq(StringUtils.isNullOrEmpty(outOder.getBatch()), OrderDetl::getBatch, outOder.getBatch())
                        .in(OrderDetl::getOrderId, outOder.getOrderIds()));
            });
            curLoc.setLocStsId(LocStsType.R.val());
@@ -1496,12 +1521,12 @@
                continue;
            }
            OrderOutMergeDto outMergeParam = new OrderOutMergeDto();
            outMergeParam.setAnfme(outLocDetl.getAnfme())
                    .setLocNo(outLocDetl.getLocNo())
                    .setLocDetlId(detl.getId())
                    .setLocId(detl.getLocId())
                    .setMatnr(outLocDetl.getMatnr())
                    .setBatch(detl.getBatch());
            outMergeParam.setAnfme(outLocDetl.getAnfme());
            outMergeParam.setLocNo(outLocDetl.getLocNo());
            outMergeParam.setLocDetlId(detl.getId());
            outMergeParam.setLocId(detl.getLocId());
            outMergeParam.setMatnr(outLocDetl.getMatnr());
            outMergeParam.setBatch(detl.getBatch());
            orders.add(outMergeParam);
            //根据库位ID分组
@@ -1627,7 +1652,10 @@
        for (LocDetl locDetl : param.getLocDetls()) {
            List<OrderOutMergeParam> orders = new ArrayList<>();
            LocDetl detl = locDetlService.getOne(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, locDetl.getLocNo()));
            LocDetl detl = locDetlService.getOne(new LambdaQueryWrapper<LocDetl>()
                    .eq(LocDetl::getMatId, locDetl.getMatId())
                    .eq(LocDetl::getBatch, locDetl.getBatch())
                    .eq(LocDetl::getLocNo, locDetl.getLocNo()));
            if (Objects.isNull(detl)) {
                continue;
            }