pjb
2025-03-08 83b51a5a0774ea8ecb9a06304af3b956a21307c8
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.*;
@@ -60,6 +61,12 @@
    @Autowired
    private WaveService waveService;
    @Autowired
    private WaveLogService waveLogService;
    @Autowired
    private CacheSiteService cacheSiteService;
    @Autowired
    WaveDetlLogService waveDetlLogService;
    @Autowired
    private WaveDetlService waveDetlService;
    @Autowired
    private CacheSiteMapper cacheSiteMapper;
@@ -74,6 +81,12 @@
    private WaveSeedLogService waveSeedLogService;
    @Autowired
    private OrderDetlLogService orderDetlLogService;
    @Autowired
    private PlatformDetlService platformDetlService;
    @Autowired
    private PlatformDetlLogService platformDetlLogService;
    @Override
@@ -207,7 +220,6 @@
            }
            //修改订单状态为已完成
            order.setOrderSettle(OrderSettleType.COMPLETE.val());
            OrderLog orderLog = new OrderLog();
            BeanUtils.copyProperties(order, orderLog);
            if (!orderLogService.save(orderLog)) {
@@ -225,6 +237,8 @@
        detls.forEach(delt ->{
            OrderDetlLog detlLog = new OrderDetlLog();
            BeanUtils.copyProperties(delt, detlLog);
            detlLog.setQty(delt.getWorkQty());
            detlLog.setWorkQty(0.0);
            detlLogs.add(detlLog);
        });
@@ -249,10 +263,11 @@
                .eq(PickSheet::getDeleted, 0)
                .eq(PickSheet::getStatus, 1)
        );
        BeanUtils.copyProperties(pickSheet, pickDetlDto);
        if (Objects.isNull(pickDetlDto)) {
            throw new CoolException("对象复制失败!!");
        if (Objects.isNull(pickSheet)) {
            throw new CoolException("拣货单不存在!!");
        }
        BeanUtils.copyProperties(pickSheet, pickDetlDto);
        List<PickSheetDetl> sheetDetls = pickSheetDetlService.list(new LambdaQueryWrapper<PickSheetDetl>()
                .eq(PickSheetDetl::getPickId, pickSheet.getId())
                .eq(PickSheetDetl::getStatus, 1)
@@ -292,8 +307,8 @@
                    throw new CoolException("数据错误!!");
                }
                //更新锁定库存
                BigDecimal workQty = BigDecimal.valueOf(detl.getAnfme()).subtract(pickDetl.getAnfme());
                detl.setWorkQty(workQty.doubleValue());
//                BigDecimal workQty = BigDecimal.valueOf(detl.getAnfme()).subtract(pickDetl.getAnfme());
                detl.setWorkQty(0.0);
                //计算结果小于等于零,移出库存明细
                BigDecimal qty = BigDecimal.valueOf(detl.getAnfme()).subtract(pickDetl.getAnfme());
                detl.setAnfme(qty.doubleValue());
@@ -316,7 +331,7 @@
                        .set(Loc::getBarcode, null)
                        .set(Loc::getUpdateTime, new Date())
                        .set(Loc::getLocStsId, LocStsType.O.val()));
                if (update) {
                if (!update) {
                    throw new CoolException("库存更新失败!! ");
                }
            }
@@ -376,9 +391,17 @@
            if (Objects.isNull(order)) {
                throw new CoolException("绑定订单不存在!!");
            }
            siteNo.setOrderNo(order.getOrderNo()).setOrderId(order.getId()).setSiteStatus(CacheSiteStatusType.R.id);
            siteNo.setOrderNo(order.getOrderNo()).setOrderId(order.getId()).setSiteStatus(CacheSiteStatusType.R.id).setBarcode(param.get("barcode").toString());
            if (cacheSiteMapper.updateById(siteNo) < 1) {
                throw new CoolException("订单播种位绑定失败!!" );
            }
            int update = waveSeedMapper.update(new LambdaUpdateWrapper<WaveSeed>()
                    .eq(WaveSeed::getOrderNo, order.getOrderNo())
                    .set(WaveSeed::getSiteId, siteNo.getId())
                    .set(WaveSeed::getSiteNo, siteNo.getSiteNo()));
            if (update < 1) {
                throw new CoolException("播种站点更新失败!!");
            }
        } else {
            if (StringUtil.isNullOrEmpty(siteNo.getOrderNo())) {
@@ -398,8 +421,16 @@
        if (StringUtil.isNullOrEmpty((String) params.get("orderNo"))) {
            throw new CoolException("订单编码号不能为空!!");
        }
        String orderId = params.get("orderNo").toString();
        List<ShippingOrderDetlDto> waveSeeds = waveSeedMapper.selectShippingOrderDtel(orderId);
        String orderNo = params.get("orderNo").toString();
        Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo));
        if (Objects.isNull(order)) {
            throw new CoolException("订单不存在!!");
        }
        if (!order.getOrderType().equals(OrderType.UTC_OUT_ORDER.id)) {
            throw new CoolException("订单为入库单据,不能发货!!");
        }
        List<ShippingOrderDetlDto> waveSeeds = waveSeedMapper.selectShippingOrderDtel(orderNo);
        return R.ok(waveSeeds);
    }
@@ -418,44 +449,43 @@
        if (params.isEmpty()) {
            throw new CoolException("发货单据明细为空,不可执行发货操作!!");
        }
        params.forEach(order -> {
            //删除出库订单及明细,加入订单历史档
            if (order.getAnfme() == order.getWorkQty()) { //完全拣货
                OrderDetl byId = orderDetlService.getById(order.getId());
                OrderDetlLog orderDetlLog = new OrderDetlLog();
                BeanUtils.copyProperties(orderDetlLog, byId);
                orderDetlLog.setQty(order.getWorkQty());
                orderDetlLog.setWorkQty(0.0);
                if (!orderDetlLogService.save(orderDetlLog)) {
                    throw new CoolException("订单明细转历史档失败!!");
                }
        //获取当前上传所有订单号
        Set<String> orderNoSet = params.stream().map(ShippingOrderDetlDto::getOrderNo).collect(Collectors.toSet());
        if (orderNoSet.isEmpty()) {
            throw new CoolException("主单信息不存在,请核对出库订单!!");
        }
        List<Order> orderList = orderService.list(new LambdaQueryWrapper<Order>().in(Order::getOrderNo, orderNoSet));
        if (orderList.isEmpty()) {
            throw new CoolException("订单不存在!!");
        }
        params.forEach(order -> {
            OrderDetl byId = orderDetlService.getById(order.getId());
            if (Objects.isNull(byId)) {
                throw new CoolException("订单明细不存在!!");
            }
            OrderDetlLog orderDetlLog = new OrderDetlLog();
            BeanUtils.copyProperties(byId, orderDetlLog);
            orderDetlLog.setQty(order.getWorkQty());
            orderDetlLog.setWorkQty(0.0);
            if (!orderDetlLogService.save(orderDetlLog)) {
                throw new CoolException("订单明细转历史档失败!!");
            }
            //完全拣货,订单完成删除原始订单明细
            //new BigDecimal(order.getAnfme()).compareTo(new BigDecimal(order.getWorkQty())) == 0
            if (new BigDecimal(order.getAnfme()).compareTo(new BigDecimal(order.getWorkQty())) == 0) {
                if (!orderDetlService.removeById(byId)) {
                    throw new CoolException("订单明细不存在!!");
                }
                //查询当前订单下否还有明细存在
                List<OrderDetl> orders = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderNo, order.getOrderNo()));
                if (orders.isEmpty()) {
                    Order one = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, order.getOrderNo()));
                    if (Objects.isNull(one)) {
                        throw new CoolException("订单不存在!!");
                    }
                    OrderLog orderLog = new OrderLog();
                    BeanUtils.copyProperties(one, orderLog);
                    if (!orderLogService.save(orderLog)) {
                        throw new CoolException("原始订单转历史档失败!!");
                    }
                    if (!orderService.remove(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, order.getOrderNo()))) {
                        throw new CoolException("原始订单删除失败!!");
                    }
            } else { //部分拣货
                byId.setQty(order.getWorkQty() + byId.getQty());
                byId.setWorkQty(0.0);
                if (!orderDetlService.updateById(byId)) {
                    throw new CoolException("部分拣料明细更新失败!!");
                }
            } else {
                //todo 删除已完成明细,保留原始主单及未完成明细
            }
            List<WaveSeed> waveSeeds = waveSeedMapper.selectList(new LambdaQueryWrapper<WaveSeed>().eq(WaveSeed::getOrderDetlId, order.getId()));
@@ -464,11 +494,11 @@
                ArrayList<WaveSeedLog> waveSeedLogs = new ArrayList<>();
                waveSeeds.forEach(seed -> {
                   WaveSeedLog waveSeedLog = new WaveSeedLog();
                   BeanUtils.copyProperties(waveSeedLog, seed);
                   BeanUtils.copyProperties(seed, waveSeedLog);
                   waveSeedLog.setId(null);
                    waveSeedLogs.add(waveSeedLog);
               });
                if (waveSeedLogService.saveBatch(waveSeedLogs)) {
                if (!waveSeedLogService.saveBatch(waveSeedLogs)) {
                    throw new CoolException("波明历史档保存失败!!");
                }
            }
@@ -478,8 +508,78 @@
            }
        });
        orderList.forEach(one -> {
            OrderLog orderLog = new OrderLog();
            BeanUtils.copyProperties(one, orderLog);
            orderLog.setOrderSettle(OrderSettleType.COMPLETE.val());
        return null;
            if (!orderLogService.save(orderLog)) {
                throw new CoolException("原始订单转历史档失败!!");
            }
            //查询当前订单下否还有明细存在
            List<OrderDetl> orders = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderNo, one.getOrderNo()));
            //订单明细为空,则删除主单
            if (orders.isEmpty()) {
                if (!orderService.remove(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, one.getOrderNo()))) {
                    throw new CoolException("原始订单删除失败!!");
                }
            } else { //不为空,修改订单状态,可重新组拖
                one.setOrderSettle(OrderSettleType.INIT.val());
                if (orderService.updateById(one));
            }
        });
        Set<Long> waveIds = orderList.stream().map(Order::getWaveId).collect(Collectors.toSet());
        if (waveIds.isEmpty()) {
            throw new CoolException("波次信息为空!!");
        }
        List<Wave> waves = waveService.list(new LambdaQueryWrapper<Wave>().in(Wave::getId, waveIds));
        for (Wave wave : waves) {
            WaveLog waveLog = new WaveLog();
            waveLog.sync(wave);
            waveLog.setId(null);
            if (!waveLogService.save(waveLog)) {
                throw new CoolException("波次转历史失败");
            }
            List<WaveDetl> waveDetls = waveDetlService.list(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, wave.getId()));
            for (WaveDetl waveDetl : waveDetls) {
                WaveDetlLog waveDetlLog = new WaveDetlLog();
                waveDetlLog.sync(waveDetl);
                waveDetlLog.setId(null);
                waveDetlLog.setWaveId(waveLog.getId());
                if (!waveDetlLogService.save(waveDetlLog)) {
                    throw new CoolException("波次明细转历史失败");
                }
                if (!waveDetlService.removeById(waveDetl.getId())) {
                    throw new CoolException("波次明细删除失败");
                }
            }
            if (!waveService.removeById(wave.getId())) {
                throw new CoolException("波次删除失败");
            }
        }
        Set<Long> ordersSet = orderList.stream().map(Order::getId).collect(Collectors.toSet());
        List<PlatformDetl> platDetls = platformDetlService.list(new LambdaQueryWrapper<PlatformDetl>().in(PlatformDetl::getOrderId, ordersSet));
        if (platDetls.isEmpty()) {
            throw new CoolException("订单信息未进集货区!!");
        }
        ArrayList<PlatformDetlLog> platformDetls = new ArrayList<>();
        platDetls.forEach(plat -> {
            PlatformDetlLog detl = new PlatformDetlLog();
            BeanUtils.copyProperties(plat, detl);
            detl.setId(null);
            platformDetls.add(detl);
        });
        //集货区转历史档
        if (!platformDetlLogService.saveBatch(platformDetls)) {
            throw new CoolException("集货区订单转历史档失败!!");
        }
        return R.ok("发货完成!!");
    }
}