自动化立体仓库 - WMS系统
#
lsh
3 天以前 eb894e3c1dde980cb6cbaf559782bedb801db2ca
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -1,24 +1,28 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.annotations.AppAuth;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.MobileAdjustResult;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.common.model.WrkDto;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.List;
/**
 * 移动端接口控制器
@@ -37,6 +41,8 @@
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private WrkMastService wrkMastService;
@@ -46,33 +52,411 @@
    private BasDevpService basDevpService;
    @Autowired
    private PackService packService;
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private WrkDetlLogService wrkDetlLogService;
    @Autowired
    private RgvOneSignService rgvOneSignService;
    @Autowired
    private OrderGiftService orderGiftService;
    @Autowired
    private OrderDetlGiftService orderDetlGiftService;
    // 商品上架
    @RequestMapping("/mat/onSale/auth")
    @ManagerAuth
    public R matOnSale(@RequestBody CombParam combParam){
        mobileService.onSale(combParam);
        return R.ok("上架成功");
    }
    // 商品下架
    @RequestMapping("/mat/offSale/auth")
    //@ManagerAuth
    public R matOffSale(@RequestBody OffSaleParam offSaleParam){
        mobileService.offSale(offSaleParam);
        return R.ok("下架成功");
    }
    @RequestMapping("/search/sign/auth/v2")
    @ManagerAuth(memo = "拆叠盘模式切换")
    public R orderSearchByBarcodeV2(@RequestParam boolean sign){
        RgvOneSign rgvOneSign = rgvOneSignService.selectOne(new EntityWrapper<RgvOneSign>().eq("rgv_one_type","oneSign"));
        if (sign){
            rgvOneSign.setRgvOneSign(1-rgvOneSign.getRgvOneSign());
            rgvOneSignService.updateById(rgvOneSign);
        }
        return R.ok(rgvOneSign.getRgvOneSign());
    }
    // 组托 ----------------------------------------------------------------------------------------------------
    /**
     * 根据单号检索单据数据
     * http://localhost:8081/jkwms/mobile/order/serach/orderNo/auth?orderNo=123123
     * http://localhost:8081/jtwms/mobile/order/serach/orderNo/auth?orderNo=123123
     */
//    @RequestMapping("/order/search/orderNo/auth")
//    @ManagerAuth
//    public R orderSearchByBarcode(@RequestParam String orderNo){
//        Order order = orderService.selectByNo(orderNo);
//        if (order == null) {
//            return R.ok();
//        }
//        DocType docType = docTypeService.selectById(order.getDocType());
//        if (docType.getPakin() == null || docType.getPakin() != 1) {
//            return R.ok();
//        }
//        if (order.getSettle() > 2) {
//            return R.ok();
//        }
//        List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
//        if (Cools.isEmpty(orderDetls)) {
//            return R.ok();
//        }
//        return R.ok().add(orderDetls);
//    }
    @RequestMapping("/order/search/orderNo/auth")
    @ManagerAuth
    public R orderSearchByBarcode(@RequestParam String orderNo){
        Order order = orderService.selectByNo(orderNo);
        if (order == null) {
        if (Cools.isEmpty(orderNo)){
            orderNo=null;
        }
        List<Order> orders = orderService.selectorderNoL(orderNo);
        if (Cools.isEmpty(orders)){
            return R.ok();
        }
        DocType docType = docTypeService.selectById(order.getDocType());
        if (docType.getPakin() == null || docType.getPakin() != 1) {
            return R.ok();
        LinkedList<CombParam> combParams = new LinkedList<>();
        if (!Cools.isEmpty(orders)){
            for (Order order:orders){
                CombParam combParam=new CombParam();
                if (order == null) {
                    continue;
                }
                DocType docType = docTypeService.selectById(order.getDocType());
                if (docType.getPakin() == null || docType.getPakin() != 1) {
                    continue;
                }
                if (order.getSettle() > 2) {
                    continue;
                }
                List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
                if (!Cools.isEmpty(orderDetls)) {
                    LinkedList<CombParam.CombMat> combMats = new LinkedList<>();
                    for (OrderDetl orderDetl:orderDetls){
                        CombParam.CombMat combMat = new CombParam.CombMat();
                        combMat.setMatnr(orderDetl.getMatnr());
                        combMat.setBatch(orderDetl.getBatch());
                        combMat.setAnfme(orderDetl.getAnfme()-orderDetl.getWorkQty());
                        combMat.setMaktx(orderDetl.getMaktx());
                        combMat.setSpecs(orderDetl.getSpecs());
                        combMats.add(combMat);
                    }
                    combParam.setCombMats(combMats);
                }
                combParam.setOrderNo(order.getOrderNo());
                combParams.add(combParam);
            }
        }
        if (order.getSettle() > 2) {
            return R.ok();
        }
        List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
        if (Cools.isEmpty(orderDetls)) {
            return R.ok();
        }
        return R.ok().add(orderDetls);
        return R.ok().add(combParams);
    }
    @RequestMapping("/order/search/orderNo/auth/v2")
    @ManagerAuth(memo = "退库单获取")
    public R orderSearchByBarcodeV2(@RequestParam String orderNo){
        if (Cools.isEmpty(orderNo)){
            orderNo=null;
        }
        List<Order> orders = orderService.selectorderNoLT(orderNo);
        if (Cools.isEmpty(orders)){
            return R.ok();
        }
        LinkedList<CombParam> combParams = new LinkedList<>();
        if (!Cools.isEmpty(orders)){
            for (Order order:orders){
                CombParam combParam=new CombParam();
                if (order == null) {
                    continue;
                }
                DocType docType = docTypeService.selectById(order.getDocType());
                if (docType.getPakin() == null || docType.getPakin() != 1 || !docType.getDocName().equals("退货入库单")) {
                    continue;
                }
                if (order.getSettle() > 2) {
                    continue;
                }
                List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
                if (!Cools.isEmpty(orderDetls)) {
                    LinkedList<CombParam.CombMat> combMats = new LinkedList<>();
                    for (OrderDetl orderDetl:orderDetls){
                        if (orderDetl.getWorkQty()!=0){
                            continue;
                        }
                        CombParam.CombMat combMat = new CombParam.CombMat();
                        combMat.setMatnr(orderDetl.getMatnr());
                        combMat.setBatch(orderDetl.getBatch());
                        combMat.setAnfme(orderDetl.getAnfme()-orderDetl.getWorkQty());
                        combMat.setMaktx(orderDetl.getMaktx());
                        combMat.setSpecs(orderDetl.getSpecs());
                        combMat.setWeight(orderDetl.getWeight());
                        combMats.add(combMat);
                    }
                    if (combMats.size()==0){
                        continue;
                    }
                    combParam.setCombMats(combMats);
                }
                combParam.setOrderNo(order.getOrderNo());
                combParams.add(combParam);
            }
        }
        return R.ok().add(combParams);
    }
    @RequestMapping("/wrkDetl/search/batch/auth")
    @ManagerAuth(memo = "出库确认获取信息")
    public R wrkDetlSearchByBatch(@RequestBody OrderGiftParam param){
        try{
            String length = param.getLength();
            String lengthS = length.split(" ")[0];
            Double price = Double.valueOf(lengthS);
            String grossWeight = param.getGrossWeight();
            String grossWeightS = grossWeight.split(" ")[0];
            Double volume = Double.valueOf(grossWeightS);
            String netWeight = param.getNetWeight();
            String netWeightS = netWeight.split(" ")[0];
            Double weight = Double.valueOf(netWeightS);
            String splices = param.getSplices();
            String splicesS = splices.split(" ")[0];
            List<OrderDetlGift> orderDetlGifts = orderDetlGiftService.selectList(new EntityWrapper<OrderDetlGift>()
                    .eq("matnr", param.getSpecs())
                    .eq("batch", param.getBoxNo())
                    .eq("model", param.getRollNo())
                    .eq("price", price)
                    .eq("weight", weight)
                    .eq("volume", volume)
                    .eq("specs", splicesS));
            if (orderDetlGifts.isEmpty()){
                return R.error("查询信息异常,未匹配到明细").add("未匹配到明细");
            }
            if (orderDetlGifts.size()>1){
                return R.error("查询信息异常,存在多条明细").add("存在多条明细");
            }
            OrderDetlGift orderDetlGift = orderDetlGifts.get(0);
//            orderDetlGift.setSource(1);
//            orderDetlGift.setDeadTime(orderDetlGift.getSource$());
//            orderDetlGiftService.updateById(orderDetlGift);
            return R.ok("确认成功").add(orderDetlGift);
        } catch (Exception e){
            return R.error("查询信息异常,未匹配到明细").add("未匹配到明细");
        }
    }
    @RequestMapping("/order/search/batch/auth")
    @ManagerAuth(memo = "出库确认")
    public R orderSearchByBatch(@RequestBody OrderGiftParam param){
        try{
            String length = param.getLength();
            String lengthS = length.split(" ")[0];
            Double price = Double.valueOf(lengthS);
            String grossWeight = param.getGrossWeight();
            String grossWeightS = grossWeight.split(" ")[0];
            Double volume = Double.valueOf(grossWeightS);
            String netWeight = param.getNetWeight();
            String netWeightS = netWeight.split(" ")[0];
            Double weight = Double.valueOf(netWeightS);
            String splices = param.getSplices();
            String splicesS = splices.split(" ")[0];
            List<OrderDetlGift> orderDetlGifts = orderDetlGiftService.selectList(new EntityWrapper<OrderDetlGift>()
                    .eq("matnr", param.getSpecs())
                    .eq("batch", param.getBoxNo())
                    .eq("model", param.getRollNo())
                    .eq("price", price)
                    .eq("weight", weight)
                    .eq("volume", volume)
                    .eq("specs", splicesS));
            if (orderDetlGifts.isEmpty()){
                return R.error("查询信息异常,未匹配到明细").add("未匹配到明细");
            }
            if (orderDetlGifts.size()>1){
                return R.error("查询信息异常,存在多条明细").add("存在多条明细");
            }
            OrderDetlGift orderDetlGift = orderDetlGifts.get(0);
            orderDetlGift.setSource(1);
            orderDetlGiftService.updateById(orderDetlGift);
            orderDetlGift.setDeadTime(orderDetlGift.getSource$());
            return R.ok("确认成功").add(orderDetlGift);
        } catch (Exception e){
            return R.error("查询信息异常,未匹配到明细").add("未匹配到明细");
        }
    }
    @RequestMapping("/order/search/batch/new/auth")
    @ManagerAuth(memo = "出库确认")
    public R orderSearchByBatchNew(@RequestBody OrderGiftParam param){
        try{
//            String length = param.getLength();
//            String lengthS = length.split(" ")[0];
//            Double price = Double.valueOf(lengthS);
//            String grossWeight = param.getGrossWeight();
//            String grossWeightS = grossWeight.split(" ")[0];
//            Double volume = Double.valueOf(grossWeightS);
            String netWeight = param.getNetWeight();
            String netWeightS = netWeight.split(" ")[0];
            Double weight = Double.valueOf(netWeightS);
//            String splices = param.getSplices();
//            String splicesS = splices.split(" ")[0];
            List<OrderDetlGift> orderDetlGifts = orderDetlGiftService.selectList(new EntityWrapper<OrderDetlGift>()
                    .eq("order_no", param.getOrderNo())
//                    .eq("matnr", param.getSpecs())
                    .eq("batch", param.getBoxNo())
//                    .eq("model", param.getRollNo())
//                    .eq("price", price)
                    .eq("weight", weight));
//                    .eq("volume", volume)
//                    .eq("specs", splicesS));
            if (orderDetlGifts.isEmpty()){
                return R.error("查询信息异常,未匹配到明细").add("未匹配到明细");
            }
            if (orderDetlGifts.size()>1){
                return R.error("查询信息异常,存在多条明细").add("存在多条明细");
            }
            OrderDetlGift orderDetlGift = orderDetlGifts.get(0);
            orderDetlGift.setSource(1);
            orderDetlGiftService.updateById(orderDetlGift);
            orderDetlGift.setDeadTime(orderDetlGift.getSource$());
            return R.ok("确认成功").add(orderDetlGift);
        } catch (Exception e){
            return R.error("查询信息异常,未匹配到明细").add("未匹配到明细");
        }
    }
//    @RequestMapping("/wrkDetl/search/batch/auth")
//    @ManagerAuth(memo = "出库确认获取信息")
//    public R wrkDetlSearchByBatch(@RequestBody String batch){
//        if (Cools.isEmpty(batch)){
//            return R.error("参数为空");
//        }
//        String[] batch1 = batch.split("箱号:");
//        String[] batch2 = batch1[1].split("规格:");
//        batch = batch2[0].replaceAll(" ", "");
////        List<Order> orders = orderService.selectorderNoL(batch);
//        WrkDetl wrkDetl = wrkDetlService.selectWrkDetlByOrderNoNotNull(batch);
////        WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("batch", batch).and().ne("order_no","").and().isNotNull("order_no").orderBy("io_time",false));
//        if (Cools.isEmpty(wrkDetl)){
//            WrkDetlLog wrkDetlLog = wrkDetlLogService.selectWrkDetlLogByOrderNoNotNull(batch);
////            WrkDetlLog wrkDetlLog = wrkDetlLogService.selectOne(new EntityWrapper<WrkDetlLog>().eq("batch", batch).and().ne("order_no","").and().isNotNull("order_no").orderBy("io_time",false));
//            if (Cools.isEmpty(wrkDetlLog)){
//                return R.error("未查到数据");
//            }
//            wrkDetl = new WrkDetl();
//            wrkDetl.sync(wrkDetlLog);
//            wrkDetl.setBatch(wrkDetlLog.getBatch());
//            wrkDetl.setBarcode(wrkDetlLog.getBarcode());
//            wrkDetl.setDeadTime(wrkDetlLog.getDeadTime());
//        }
//        if (Cools.isEmpty(wrkDetl)){
//            return R.error("未查到数据");
//        }
//        return R.ok().add(wrkDetl);
//    }
//    @RequestMapping("/order/search/batch/auth")
//    @ManagerAuth(memo = "出库确认")
//    public R orderSearchByBatch(@RequestBody String batch){
//        try{
//            if (Cools.isEmpty(batch)){
//                return R.error("参数为空");
//            }
////            String[] batch1 = batch.split("箱号:");
////            String[] batch2 = batch1[1].split("规格:");
////            batch = batch2[0];
//            String orderNo = "";
////            WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("batch", batch).and().ne("order_no","").and().isNotNull("order_no").orderBy("io_time",false));
//            WrkDetl wrkDetl = wrkDetlService.selectWrkDetlByOrderNoNotNull(batch);
//            if (Cools.isEmpty(wrkDetl)) {
////                WrkDetlLog wrkDetlLog = wrkDetlLogService.selectOne(new EntityWrapper<WrkDetlLog>().eq("batch", batch).and().ne("order_no","").and().isNotNull("order_no").orderBy("io_time",false));
//                WrkDetlLog wrkDetlLog = wrkDetlLogService.selectWrkDetlLogByOrderNoNotNull(batch);
//                if (Cools.isEmpty(wrkDetlLog)) {
//                    return R.error("未查到数据:工作明细为空");
//                }
//                if (wrkDetlLog.getDeadTime().equals("已确认")) {
//                    return R.error("当前任务已确认,请重置!");
//                }
//                wrkDetlLog.setSource(1);
//                wrkDetlLogService.update(wrkDetlLog,new EntityWrapper<WrkDetlLog>().eq("batch",wrkDetlLog.getBatch()).eq("wrk_no",wrkDetlLog.getWrkNo()));
//                orderNo=wrkDetlLog.getOrderNo();
//            }else {
//                if (wrkDetl.getDeadTime().equals("已确认")) {
//                    return R.error("当前任务已确认,请重置!");
//                }
//                wrkDetl.setSource(1);
//                wrkDetlService.update(wrkDetl,new EntityWrapper<WrkDetl>().eq("batch",wrkDetl.getBatch()).eq("wrk_no",wrkDetl.getWrkNo()));
//                orderNo=wrkDetl.getOrderNo();
//            }
////        List<Order> orders = orderService.selectorderNoL(batch);
//            OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("batch", batch).eq("order_no",orderNo));
//            if (Cools.isEmpty(orderDetl)){
//                return R.error("未查到数据:订单明细为空"+orderNo);
//            }
//            if (!orderDetl.getQty$().equals("已完成")){
//                return R.error("任务未完成");
//            }
//            if (!Cools.isEmpty(orderDetl.getSource()) && orderDetl.getSource()==1){
//                return R.error("任务已确认,请勿重复确认!!!");
//            }
//            orderDetl.setSource(1);
//            orderDetlService.updateById(orderDetl);
//            return R.ok();
//        } catch (Exception e){
//            return R.error().add(e.getMessage());
//        }
//    }
//    @RequestMapping("/truss/auth")
//    @ManagerAuth(memo = "退库,1楼桁架退库")
//    public R trussComb(@RequestBody TrussCombParam combParam){
//        mobileService.trussComb(combParam, getUserId());
//        return R.ok("组托成功");
//    }
    @RequestMapping("/truss/order/auth")
    @ManagerAuth(memo = "退库,1楼桁架退库,退库单退库")
    public R trussCombOrder(@RequestBody TrussCombParam combParam){
        mobileService.trussCombOrder(combParam, getUserId());
        return R.ok("组托成功");
    }
    @RequestMapping("/truss/comd/auth")
//    @ManagerAuth(memo = "手动入库,2楼无需桁架手动入库 wms入库")
    public R PalletizingCompleteTwoFloorParam(@RequestBody PalletizingCompleteTwoFloorParam combParam){
        mobileService.PalletizingCompleteTwoFloorParam(combParam);
        return R.ok("组托成功");
    }
    /**
     * 中控:2楼212叫托盘
     */
    @PostMapping("/balcony/complete/car/auth/v1")
//    @AppAuth(memo = "中控:2楼212叫托盘")
    public synchronized R balconyCompleteCar() {
//        mobileService.trussComb2Car(212);
        return R.error("已禁用").add("已禁用");
    }
    /**
     * 中控:获取箱型编号
     */
    @PostMapping("/box/type/complete/auth/v1")
//    @AppAuth(memo = "中控:获取箱型编号")
    public synchronized R boxTypeCompleteCar() {
        List<Map<String, Object>> maps = mobileService.boxTypeComb();
        return R.ok().add(maps);
    }
    @RequestMapping("/comb/auth")
    @ManagerAuth(memo = "组托")
@@ -106,6 +490,7 @@
    @RequestMapping("/pakout/query/auth")
    @ManagerAuth
    @Deprecated
    public R pakoutQuery(@RequestParam(required = false) String barcode,
                         @RequestParam(required = false) Integer staNo,
                         @RequestParam(required = false) String matnr){
@@ -125,29 +510,79 @@
        return R.ok();
    }
    @RequestMapping("/pakout/query/auth/v2")
    /**
     * 出库确认 - 扫托盘码
     * 1.全板 返回 101
     * 2.拣料 返回 103
     */
    @RequestMapping("/pakout/confirm/barcode/auth")
    @ManagerAuth
    public R pakoutQueryV2(@RequestParam(required = false) String barcode,
                           @RequestParam(required = false) Integer staNo,
                           @RequestParam(required = false) String matnr){
        if (Cools.isEmpty(barcode) && Cools.isEmpty(matnr)) {
    public R pakoutQueryByBarcode(@RequestParam(required = false) String barcode){
        if (Cools.isEmpty(barcode)) {
            return R.ok();
        }
        if (!Cools.isEmpty(barcode)) {
            WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
            if (wrkMast != null) {
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
                // 去除已出库确认的明细
                wrkDetls.removeIf(wrkDetl -> wrkDetl.getInspect() == 1);
                return R.ok().add(wrkDetls);
            }
        }
        if (!Cools.isEmpty(matnr)) {
            List<WrkDetl> wrkDetls = wrkDetlService.selectPakoutQuery(staNo, matnr);
            return R.ok().add(wrkDetls);
        WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
        if (wrkMast != null) {
            List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
            // 去除已出库确认的明细
            wrkDetls.removeIf(wrkDetl -> wrkDetl.getInspect() != null && wrkDetl.getInspect() != 0);
            return R.ok().add(Cools.add("wrkNo", wrkMast.getWrkNo()).add("ioType", wrkMast.getIoType()).add("list", wrkDetls));
        }
        return R.ok();
    }
    // 根据库位码和商品码搜索商品
    @RequestMapping("/mat/find/auth")
    public R find(@RequestParam(required = false) String locNo
            , @RequestParam(required = false) String matnr){
        //List<ManLocDetl> manLocDetls = manLocDetlMapper.selectItem0(locNo, matnr);
        ManLocDetl manLocDetl = manLocDetlMapper.selectLocNo0(locNo, matnr);
        return R.ok(manLocDetl);
        //return R.ok(manLocDetlMapper.selectItem0(locNo, matnr));
    }
    /**
     * 出库确认 - 拣料出库 - 选择具体条码商品
     */
    @RequestMapping("/pakout/confirm/pick/auth")
    @ManagerAuth
    public R pakoutQueryByBarcode(@RequestParam(required = false) Integer wrkNo
                                , @RequestParam(required = false) String matnr){
        if (Cools.isEmpty(wrkNo)) {
            return R.ok();
        }
        if (Cools.isEmpty(matnr)) {
            return R.ok();
        }
        WrkMast wrkMast = wrkMastService.selectById(wrkNo);
        if (wrkMast == null) {
            return R.ok();
        }
        String orderNo = null;
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        for (WrkDetl wrkDetl : wrkDetls) {
            if (Cools.isEmpty(orderNo)) {
                orderNo = wrkDetl.getOrderNo();
            }
            if ((wrkDetl.getMatnr() + "-" + wrkDetl.getBatch()).equals(matnr)) {
                return R.ok().add(wrkDetl);
            }
        }
        // 替换 明细
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
        for (LocDetl locDetl : locDetls) {
            if ((locDetl.getMatnr() + "-" + locDetl.getBatch()).equals(matnr)) {
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(locDetl);
                wrkDetl.setOrderNo(orderNo);
                wrkDetl.setIoTime(wrkMast.getIoTime());
                wrkDetl.setWrkNo(wrkNo);
                return R.ok().add(wrkDetl);
            }
        }
        return R.error("系统错误,条码不存在");
    }
    @RequestMapping("/pakout/confirm/auth")
    @ManagerAuth
@@ -156,16 +591,46 @@
        if (Cools.isEmpty(list)) {
            return R.ok();
        }
        // todo:luxiaotao 拣料出库可修改工作档明细
        Set<Integer> wrkNos = new HashSet<>();
        List<WrkDto> dtos = new ArrayList<>();
        for (WrkDetl wrkDetl : list) {
            wrkNos.add(wrkDetl.getWrkNo());
            wrkDetlService.updateInspect(wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
            if (wrkNos.contains(wrkDetl.getWrkNo())) {
                for (WrkDto dto : dtos) {
                    if (dto.getWrkNo().equals(wrkDetl.getWrkNo())) {
                        dto.getWrkDetls().add(wrkDetl);
                        break;
                    }
                }
            } else {
                wrkNos.add(wrkDetl.getWrkNo());
                dtos.add(new WrkDto(wrkDetl.getWrkNo(), wrkDetl));
            }
        }
        for (WrkDto dto : dtos) {
            WrkMast wrkMast = wrkMastService.selectById(dto.getWrkNo());
            if (wrkMast != null) {
                // 101
                if (wrkMast.getIoType() == 101) {
                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
                        wrkDetlService.updateInspect(wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                    }
                }
                // 103
                if (wrkMast.getIoType() == 103) {
                    if (!wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()))) {
                        throw new CoolException("拣料出库确认失败");
                    }
                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
                        wrkDetl.setInspect(1);
                        if (!wrkDetlService.insert(wrkDetl)) {
                            throw new CoolException("拣料出库确认失败");
                        }
                    }
                }
            }
        }
        for (Integer wrkNo : wrkNos) {
            WrkMast wrkMast = wrkMastService.selectById(wrkNo);
            if (wrkMast.getWrkSts() == 14 && (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N"))) {
@@ -222,5 +687,14 @@
        return R.ok("盘点成功");
    }
    @PostMapping("/order/out/pakout/auth")
    @ManagerAuth(memo = "订单出库")
    public synchronized R pakoutByOrder(@RequestBody JSONObject param) {
        if(!param.containsKey("staNo") || !param.containsKey("orderNo")){
            return R.parse(BaseRes.PARAM);
        }
        mobileService.pakoutByOrder(param,getUserId());
        return R.ok("出库成功");
    }
}