#
mrzhssss
2022-04-26 d17c089f1d7ff3be848b05161917346e7f664a1d
src/main/java/zy/cloud/wms/manager/controller/OrderController.java
@@ -18,14 +18,11 @@
import zy.cloud.wms.common.utils.BarcodeUtils;
import zy.cloud.wms.common.utils.QrCode;
import zy.cloud.wms.common.web.BaseController;
import zy.cloud.wms.manager.entity.Order;
import zy.cloud.wms.manager.entity.OrderDetl;
import zy.cloud.wms.manager.entity.Wave;
import zy.cloud.wms.manager.entity.WaveDetl;
import zy.cloud.wms.manager.service.OrderDetlService;
import zy.cloud.wms.manager.service.OrderService;
import zy.cloud.wms.manager.service.WaveDetlService;
import zy.cloud.wms.manager.service.WaveService;
import zy.cloud.wms.manager.entity.*;
import zy.cloud.wms.manager.entity.dto.OrderDetlDTO;
import zy.cloud.wms.manager.entity.param.StockOutParam;
import zy.cloud.wms.manager.service.*;
import zy.cloud.wms.manager.utils.AddZero;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
@@ -45,6 +42,13 @@
    private WaveService waveService;
    @Autowired
    private WaveDetlService waveDetlService;
    @Autowired
    private PickoutService pickoutService;
    @Autowired
    private PickoutDetlService pickoutDetlService;
    @Autowired
    private LocDetlService locDetlService;
    @RequestMapping(value = "/order/{id}/auth")
    @ManagerAuth
@@ -63,11 +67,15 @@
        excludeTrash(param);
        convert(param, wrapper);
        hostEq(wrapper);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        else {
            wrapper.orderBy("update_time", false);
        if (!Cools.isEmpty(orderByField)){
            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
        }
        return R.ok(orderService.selectPage(new Page<>(curr, limit), wrapper));
        else {
            wrapper.orderBy("create_time",false);
        }
        Page<Order> orderPage = orderService.selectPage(new Page<>(curr, limit), wrapper);
        return R.ok(orderPage);
    }
    private void convert(Map<String, Object> map, EntityWrapper wrapper){
@@ -117,13 +125,20 @@
    @ManagerAuth
    @Transactional
    public R deleteBatch(@RequestParam(value = "ids[]") Long[] ids){
        if (Cools.isEmpty((Object) ids)){
            return R.error();
        }
        for (Long id : ids){
            if (!orderService.deleteById(id)) {
                throw new CoolException("服务器错误,请联系管理员");
        /***
         * 控管
         */
        for (Long id : ids) {
            Order target = orderService.selectOne(new EntityWrapper<Order>()
                    .eq("id", id));
            if (target.getSettle() == 0 || target.getSettle() == 1) {
                orderService.deleteById(id);
                orderDetlService.delete(new EntityWrapper<OrderDetl>()
                        .eq("order_id",id));
            }else {
                throw new CoolException("仅允许删除'初始化','待处理'状态的订单");
            }
        }
        return R.ok();
    }
@@ -195,27 +210,40 @@
     */
    @RequestMapping("/orders/wave/auth")
    @ManagerAuth
    @Transactional
    public R createWave(@RequestBody List<Order> orders){
        /**
         * 控管
         * 控管与初始化
         */
        Integer seqNo = 1;
        for (Order order : orders) {
            if (order.getSettle() != 2L) {
                return R.error("仅支持'未拣货'状态生成波次");
            if (order.getSettle() != 1L) {
                return R.error("仅支持'待处理'状态生成波次");
            }
        }
        /**
         * 生成波次表头
         */
        Wave wave = new Wave();
        wave.setHostId(getHostId());
        String s = UUID.randomUUID().toString().replace("-","");
        wave.setUuid(s);
        String waveNo = "wave-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        wave.setWaveNo(waveNo);
        String waveNo = "WAVE-" + new SimpleDateFormat("yyyyMMdd").format(new Date())+"-";
        String currNum = waveService.getCurrNum(waveNo);
        if (!Cools.isEmpty(currNum)) {
            String[] split = currNum.split("-");
            if (split.length < 3){
                wave.setWaveNo(waveNo + "0001");
            } else {
                Integer newNum = Integer.parseInt(split[2]) + 1;
                String format = AddZero.addZeroForNum(newNum + "", 4);
                wave.setWaveNo(waveNo + format);
            }
        }else {
            wave.setWaveNo(waveNo + "0001");
        }
        wave.setOrdersQty(orders.size());
        wave.setStatus((short) 0);
        wave.setCreateBy(getUserId());
@@ -228,6 +256,7 @@
        List<OrderDetl> allOrderDetls = orderDetlService.selectBatchByOrderNo(orders);
        for (OrderDetl allOrderDetl : allOrderDetls) {
            WaveDetl checkWaveDetl = waveDetlService.selectOne(new EntityWrapper<WaveDetl>()
                    .eq("wave_id",wave.getId())
                    .eq("matnr", allOrderDetl.getMatnr())
                    .eq("batch", allOrderDetl.getBatch()));
            if (Cools.isEmpty(checkWaveDetl)) {
@@ -242,6 +271,9 @@
                waveDetl.setAnfme(allOrderDetl.getAnfme());
                waveDetl.setMatnr(allOrderDetl.getMatnr());
                waveDetl.setMaktx(allOrderDetl.getMaktx());
                waveDetl.setSpecs(allOrderDetl.getSpecs());
                waveDetl.setModel(allOrderDetl.getModel());
                waveDetl.setUnit(allOrderDetl.getUnit());
                waveDetl.setStatus(0);
                waveDetl.setBatch(allOrderDetl.getBatch());
                waveDetl.setCreateBy(getUserId());
@@ -249,14 +281,158 @@
                waveDetlService.insert(waveDetl);
            }else {
                checkWaveDetl.setOrderQty(checkWaveDetl.getOrderQty()+1);
                checkWaveDetl.setOrderNos(checkWaveDetl.getOrderNos() + "-split-" +allOrderDetl.getOrderNo());
                checkWaveDetl.setOrderNos(checkWaveDetl.getOrderNos() + "," +allOrderDetl.getOrderNo());
                checkWaveDetl.setAnfme(checkWaveDetl.getAnfme() + allOrderDetl.getAnfme());
                waveDetlService.update(checkWaveDetl,new EntityWrapper<WaveDetl>()
                        .eq("id",checkWaveDetl.getId()));
            }
        }
        System.out.println("done");
        return null;
        /**
         * 控管,出过BUG,只生成表头,不生成表身
         */
        if (Cools.isEmpty(allOrderDetls)) {
            waveService.delete(new EntityWrapper<Wave>()
                    .eq("id",wave.getId()));
            throw new CoolException("找不到出库单细节,请联系管理员");
        }
        /**
         * 反写出库单表头
         */
        for (Order order : orders) {
            order.setWaveNo(wave.getWaveNo());
            order.setSettle(11L);
            orderService.update(order,new EntityWrapper<Order>()
                    .eq("id",order.getId()));
        }
        return R.ok("已生成波次");
    }
    /**
     * 通过批号订单中包含的出库单
     */
    @RequestMapping("/order/orderByWave/auth")
    @ManagerAuth
    public R getOrderDetailByWave(@RequestParam(defaultValue = "1")Integer curr,
                                  @RequestParam(defaultValue = "10")Integer limit,
                                  @RequestParam(required = false)String orderByField,
                                  @RequestParam(required = false)String orderByType,
                                  @RequestParam Map<String, Object> param,
                                  String research){
        EntityWrapper<Wave> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        hostEq(wrapper);
        wrapper.orderBy("create_time",false);
        List<Wave> waves = waveService.selectList(wrapper);
        if (Cools.isEmpty(waves)) {
            throw new CoolException("找不到该波次");
        }
        HashSet<String> allOrders = new HashSet<>();
        for (Wave wave : waves) {
            List<WaveDetl> waveDetls = waveDetlService.selectList(new EntityWrapper<WaveDetl>()
                    .eq("wave_id", wave.getId()));
            for (WaveDetl waveDetl : waveDetls) {
                String[] split = waveDetl.getOrderNos().split(",");
                for (String s : split) {
                    allOrders.add(s);
                }
            }
        }
        ArrayList<String> allOrdersList = new ArrayList<>(allOrders);
        EntityWrapper<OrderDetl> orderDetailWrapper = new EntityWrapper<>();
        for (int i = 0; i < allOrdersList.size(); i++) {
            String s = allOrdersList.get(i);
            if (i == 0){
                orderDetailWrapper
                        .eq("order_no",s);
            }else {
                orderDetailWrapper
                        .or()
                        .eq("order_no",s);
            }
        }
        if (!Cools.isEmpty(research)) {
            orderDetailWrapper.eq("order_no",research);
        }
        Page<OrderDetl> orderDetlPage = orderDetlService.selectPage(new Page<>(curr, limit),orderDetailWrapper);
        return R.ok(orderDetlPage);
    }
    /**
     * 开始播种,更新订单细节,减少库存量
     * @param orderDetls
     * @return
     */
    @RequestMapping("/order/waveBack")
    public R waveBack(@RequestBody OrderDetlDTO orderDetls){
        /**
         * 控管与初始化
         */
        if (Cools.isEmpty(orderDetls.getOrderDetls())) {
            throw new CoolException("未收到有效播种信息,请联系管理员");
        }
        /**
         * 更新原出库单,根据拣货单来减去库存
         */
        for (OrderDetl newOne : orderDetls.getOrderDetls()) {
            Order order = orderService.selectOne(new EntityWrapper<Order>()
                    .eq("id", newOne.getOrderId()));
            Pickout pickout = pickoutService.selectOne(new EntityWrapper<Pickout>()
                    .eq("wave_no", order.getWaveNo()));
            OrderDetl oldOne = orderDetlService.selectOne(new EntityWrapper<OrderDetl>()
                    .eq("id", newOne.getId()));
            /**
             * 计算出差值,减去库存
             */
            double diffValue = newOne.getOutQty() - oldOne.getOutQty();
            if (diffValue !=0) {
                /**
                 * 获取拣货单分配的库位
                 */
                List<PickoutDetl> pickoutDetls = pickoutDetlService.selectList(new EntityWrapper<PickoutDetl>()
                        .eq("head_id", pickout.getId())
                        .eq("matnr", newOne.getMatnr()));
                /**
                 * 通过拣货单分配的库位,遍历库存,
                 */
                for (PickoutDetl pickoutDetl : pickoutDetls) {
                    if (diffValue == 0) break;
                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                            .eq("node_id", pickoutDetl.getNodeId())
                            .eq("matnr",newOne.getMatnr()));
                    if (Cools.isEmpty(locDetl) || locDetl.getAnfme() == 0) {
                        continue;
                    }
                    if (locDetl.getAnfme() > diffValue){
                        locDetl.setAnfme(locDetl.getAnfme() - diffValue);
                        locDetlService.update(locDetl, new EntityWrapper<LocDetl>()
                                .eq("node_id",locDetl.getNodeId() )
                                .eq("matnr",locDetl.getMatnr()));
                        break;
                    }
                    if (locDetl.getAnfme() < diffValue){
                        locDetl.setAnfme(0.0);
                        diffValue = diffValue - locDetl.getAnfme();
                        locDetlService.update(locDetl, new EntityWrapper<LocDetl>()
                                .eq("node_id",locDetl.getNodeId() )
                                .eq("matnr",locDetl.getMatnr()));
                    }
                }
                orderDetlService.update(newOne, new EntityWrapper<OrderDetl>()
                        .eq("id", newOne.getId() ));
            }
            Boolean result = orderDetlService.checkFinish(order.getId());
            if (result) {
                orderDetlService.finishOrder(order.getId());
            }
        }
        return R.ok("播种成功");
    }
}