自动化立体仓库 - WMS系统
1.完善找库位
2.新增erp订单删除后,wms订单跟着删除功能
3.新增订单完成后,上报erp,erp报错后显现在出货单中
4.新增一键查询到异常完成订单
5.对销售单据和其他单据进行区分出库
6.对中间表订单状态进行完善
7.新增锁单功能
8.新增任务查询维护加上订单号
2个文件已添加
65个文件已修改
1462 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LocDetlController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MatController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderController.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderDetl1Controller.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderDetlController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/WorkController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocDetl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/OrderDetl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakin.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderDetl1Mapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderDetl1Service.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderDetlService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/Order1ServiceImpl.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderDetl1ServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoAssignAGVTasks.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/DetlDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdInstockSource.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdInstockSourceMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdOutstockSourceMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/task/OrderScheduler.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/task/handler/OrderHandler.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/LocDetlMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/OrderDetl1Mapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/OrderDetlMapper.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdInstockSourceMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdOutstockSourceMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locDetl/locDetl.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locMast/locMast.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/out.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderDetl/orderDetl1.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderTablenotxs.js 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderTablexs.js 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/wrkMast/wrkMast.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/wrkMastLog/wrkMastLog.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locDetl/locDetl.html 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/out.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/outAll.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/outLocDetlQuery.html 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/outLocDetlQuery1.html 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakStore/locDetlCheckQuery.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/report/locDetl.html 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/report/locDetl_detail.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/report/viewWorkIn.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/report/viewWorkOut.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/waitPakin/waitPakin.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/waitPakinLog/waitPakinLog.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/wrkDetl/wrkDetl.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/wrkDetlLog/wrkDetlLog.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/wrkMast/wrkMast.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/wrkMastLog/wrkMastLog.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -83,6 +83,9 @@
                param.remove("modi_time");
            }
        }
        if(!Cools.isEmpty(param.get("select"))){
            param.put("brand", param.get("select"));
        }
        return R.ok(locDetlService.getStockOut(toPage(curr, limit, param, LocDetl.class)));
    }
@@ -158,12 +161,12 @@
        return R.ok();
    }
    @RequestMapping(value = "/locDetl/updateBatch/auth")
    @ManagerAuth(memo = "合同号(批号)修改")
    @ManagerAuth(memo = "批号(批号)修改")
    public R updateBatch(LocDetl locDetl){
        if (Cools.isEmpty(locDetl) || null==locDetl.getMatnr()){
            return R.error("参数异常");
        }else if (locDetl.getBatch().equals(locDetl.getSku())){
            return R.error("前后合同号一致,无需修改!!!");
            return R.error("前后批号一致,无需修改!!!");
        }
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
        if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("F")){
@@ -183,12 +186,12 @@
                locDetlEnd = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                        .eq("loc_no",locDetl.getLocNo()).eq("matnr",locDetl.getMatnr()).eq("batch",locDetl.getSku()));
            }
            AdjDetl adjDetlSource = new AdjDetl(locDetl.getLocNo(),locDetl.getMatnr(),locDetl.getBatch(),null,locDetlSource.getAnfme(),null,null,locDetlSource.getAnfme()-locDetl.getAnfme(),null,"修改合同号:"+locDetl.getBatch()+"→"+locDetl.getSku(),getUserId(),new Date(),getUserId(),new Date());
            AdjDetl adjDetlSource = new AdjDetl(locDetl.getLocNo(),locDetl.getMatnr(),locDetl.getBatch(),null,locDetlSource.getAnfme(),null,null,locDetlSource.getAnfme()-locDetl.getAnfme(),null,"修改批号:"+locDetl.getBatch()+"→"+locDetl.getSku(),getUserId(),new Date(),getUserId(),new Date());
            AdjDetl adjDetlEnd=null;
            if (Cools.isEmpty(locDetlEnd)){
                adjDetlEnd = new AdjDetl(locDetl.getLocNo(),locDetl.getMatnr(),locDetl.getSku(),null,0.0,null,null,locDetl.getAnfme(),null,"修改合同号:"+locDetl.getBatch()+"→"+locDetl.getSku(),getUserId(),new Date(),getUserId(),new Date());
                adjDetlEnd = new AdjDetl(locDetl.getLocNo(),locDetl.getMatnr(),locDetl.getSku(),null,0.0,null,null,locDetl.getAnfme(),null,"修改批号:"+locDetl.getBatch()+"→"+locDetl.getSku(),getUserId(),new Date(),getUserId(),new Date());
            }else {
                adjDetlEnd = new AdjDetl(locDetl.getLocNo(),locDetl.getMatnr(),locDetl.getSku(),null,locDetlEnd.getAnfme(),null,null,locDetlEnd.getAnfme()+locDetl.getAnfme(),null,"修改合同号:"+locDetl.getBatch()+"→"+locDetl.getSku(),getUserId(),new Date(),getUserId(),new Date());
                adjDetlEnd = new AdjDetl(locDetl.getLocNo(),locDetl.getMatnr(),locDetl.getSku(),null,locDetlEnd.getAnfme(),null,null,locDetlEnd.getAnfme()+locDetl.getAnfme(),null,"修改批号:"+locDetl.getBatch()+"→"+locDetl.getSku(),getUserId(),new Date(),getUserId(),new Date());
            }
            if (locDetlSource.getAnfme()-locDetl.getAnfme()==0){
                if (Cools.isEmpty(locDetlEnd)){
@@ -227,7 +230,7 @@
        }catch (Exception e){
            return R.error("异常!!!请规范操作!!!");
        }
        return new R(201,"合同号修改成功,请刷新页面!!!");
        return new R(201,"批号修改成功,请刷新页面!!!");
    }
    @RequestMapping(value = "/locDetl/delete/auth")
src/main/java/com/zy/asrs/controller/MatController.java
@@ -241,6 +241,8 @@
        OrderDetl orderDetl = new OrderDetl();
        orderDetl.sync(mat);
        orderDetl.setAnfme(0.0D);
        orderDetl.setQty(0.0D);
        orderDetl.setWorkQty(0.0D);
        return R.ok().add(orderDetl);
    }
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -120,14 +120,19 @@
        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);
        List<OrderDetl> orderDetls1= new ArrayList<>();
        for (OrderDetl orderDetl : orderDetls) {
            if(orderDetl.getAnfme()-orderDetl.getWorkQty()>0){
                orderDetls1.add(orderDetl);
            }
        }
        return R.ok().add(orderDetls1);
    }
    @RequestMapping("/comb/auth")
@@ -468,31 +473,11 @@
        }
        //空托盘缓冲区 小:E8  大:E9
        String rStaNo = "E8";
        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "autoE").eq("status", "1"));
            String type = "ZONE"; //区域
            if (barcode.substring(0, 1).equals("9")) {
                rStaNo = "E9";
            }
            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "autoE").eq("status", "1"));
            if (config != null) {
                type = "STACK"; //巷道
                if (Cools.isEmpty(config.getValue())) {
                    rStaNo = rStaNo + "01";
                    config.setValue("2");
                } else if (config.getValue().equals("1")) {
                    rStaNo = rStaNo + "01";
                    config.setValue("2");
                } else if (config.getValue().equals("2")) {
                    rStaNo = rStaNo + "02";
                    config.setValue("3");
                } else if (config.getValue().equals("3")) {
                    rStaNo = rStaNo + "03";
                    config.setValue("1");
                }
                configService.updateById(config);
            } else {
                config = configService.selectOne(new EntityWrapper<Config>().eq("code", "autoE").eq("status", "1"));
            }else {
                if (config != null) {
                    type = "STACK"; //巷道
                    if (Cools.isEmpty(config.getValue())) {
@@ -962,7 +947,7 @@
        if (wrkMast == null) {
            r = FillEmptyPalletsStack(sourceStaNo, staNo);
        } else {
            if (wrkMast.getWrkSts() > 30) {
            if (wrkMast.getWrkSts() > 30&& 34< wrkMast.getWrkSts()) {
                return R.error("该托盘="+wrkMast.getBarcode()+",没有下架,请下架后再回库!!!");
            }
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("sta_no", wrkMast.getStaNo()).in("io_type", 101, 103, 105, 107).lt("wrk_sts", 33));
@@ -1019,7 +1004,7 @@
        }
        mat.setAnfme(barcode1.getQty());
        mat.setBc(barcode);
        mat.setBatch(barcode1.getBatchno());
        mat.setBatch(barcode);
        matService.updateById(mat);
        return R.ok(mat);
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -79,7 +79,7 @@
            //拣料回库,agv搬运货物到输送线入库口--》修改inv_wh状态等待输送线入库--》wcs下发入库指令
            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                    .in("wrk_sts", 16L)//16.下架完成等待回库
                    .in("wrk_sts", 34L)//34.下架完成等待回库
                    .eq("inv_wh","0")
                    .eq("pdc_type", robotTaskMessage.getRobotTaskCode()));//AGV出库搬运任务号
            if(!Cools.isEmpty(wrkMast)){
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -90,6 +90,62 @@
        }
        return R.ok().add(orders);
    }
    @RequestMapping(value = "/order/nav/list/auth/xs")
    @ManagerAuth
    public R navListxs(@RequestParam(required = false) String orderNo){
        EntityWrapper<Order> wrapper = new EntityWrapper<>();
        if (!Cools.isEmpty(orderNo)) {
            wrapper.like("order_no", orderNo);
        }
        wrapper.le("settle", 2).eq("status", 1);
        wrapper.orderBy("create_time", false);
        wrapper.eq("doc_type", 81);
        List<Order> orders = orderService.selectList(wrapper);
        // 保留出库单
        if (!Cools.isEmpty(orders)) {
            Iterator<Order> iterator = orders.iterator();
            while (iterator.hasNext()) {
                Order order = iterator.next();
                if (order.getDocType() != null) {
                    DocType docType = docTypeService.selectById(order.getDocType());
                    if (docType != null) {
                        if (docType.getPakout() == 0) {
                            iterator.remove();
                        }
                    }
                }
            }
        }
        return R.ok().add(orders);
    }
    @RequestMapping(value = "/order/nav/list/auth/notxs")
    @ManagerAuth
    public R navListnotxs(@RequestParam(required = false) String orderNo){
        EntityWrapper<Order> wrapper = new EntityWrapper<>();
        if (!Cools.isEmpty(orderNo)) {
            wrapper.like("order_no", orderNo);
        }
        wrapper.le("settle", 2).eq("status", 1);
        wrapper.orderBy("create_time", false);
        List<Order> orders = orderService.selectList(wrapper);
        // 保留出库单
        if (!Cools.isEmpty(orders)) {
            Iterator<Order> iterator = orders.iterator();
            while (iterator.hasNext()) {
                Order order = iterator.next();
                if (order.getDocType() != null) {
                    DocType docType = docTypeService.selectById(order.getDocType());
                    if (docType != null) {
                        if (docType.getPakout() == 0 || order.getDocType() == 81) {
                            iterator.remove();
                        }
                    }
                }
            }
        }
        return R.ok().add(orders);
    }
    @RequestMapping(value = "/order/head/page/auth")
    @ManagerAuth
@@ -105,6 +161,9 @@
            wrapper.orderBy("settle").orderBy("create_time", false);
        }
        wrapper.eq("status", 1);
        if(param.get("doc_type") != null){
            wrapper.eq("doc_type", param.get("doc_type"));
        }
        return R.ok(orderService.selectPage(new Page<>(curr, limit), wrapper));
    }
src/main/java/com/zy/asrs/controller/OrderDetl1Controller.java
@@ -42,7 +42,7 @@
        EntityWrapper<OrderDetl1> wrapper = new EntityWrapper<>();
        if(!Cools.isEmpty(param.get("abnormal"))&&param.get("abnormal").equals("1")){
            wrapper.addFilter("anfme < qty");
            wrapper.isNotNull("memo");
        }else{
            param.remove("abnormal");
            excludeTrash(param);
src/main/java/com/zy/asrs/controller/OrderDetlController.java
@@ -65,6 +65,24 @@
        return R.ok(orderDetlService.getPakoutPage(toPage(curr, limit, param, OrderDetl.class)));
    }
    //只有销售单
    @RequestMapping(value = "/orderDetl/pakout/list/auth/xs")
    @ManagerAuth
    public R pakoutListxs(@RequestParam(defaultValue = "1")Integer curr,
                        @RequestParam(defaultValue = "10")Integer limit,
                        @RequestParam Map<String, Object> param){
        return R.ok(orderDetlService.getPakoutPagexs(toPage(curr, limit, param, OrderDetl.class)));
    }
    //没有销售单
    @RequestMapping(value = "/orderDetl/pakout/list/auth/notxs")
    @ManagerAuth
    public R pakoutListnotxs(@RequestParam(defaultValue = "1")Integer curr,
                        @RequestParam(defaultValue = "10")Integer limit,
                        @RequestParam Map<String, Object> param){
        return R.ok(orderDetlService.getPakoutPagenotxs(toPage(curr, limit, param, OrderDetl.class)));
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
src/main/java/com/zy/asrs/controller/OutController.java
@@ -5,15 +5,14 @@
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OutlocDetlParam;
import com.zy.asrs.service.*;
import com.zy.common.model.LocDto;
import com.zy.common.model.TaskDto;
import com.zy.common.web.BaseController;
import com.zy.third.entity.ExdOutstockSource;
import com.zy.third.service.ExdOutstockSourceService;
import lombok.Synchronized;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -45,6 +44,10 @@
    private WorkService workService;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private ExdOutstockSourceService  exdOutstockSourceService;
    @PostMapping("/out/pakout/orderDetlIds/auth")
@@ -135,37 +138,25 @@
        for (TaskDto taskDto : taskDtos) {
            workService.stockOut(null, taskDto, getUser(), taskDto.getStaNo());
        }
        return R.ok();
    }
    @PostMapping("/out/pakout2/preview/auth")
    @ManagerAuth
    public R pakoutPreview2(@RequestBody List<Long> ids) {
        if (Cools.isEmpty(ids)) {
            return R.parse(BaseRes.PARAM);
        //对出库订单流水号进行更新
        Order order = orderService.selectByNo(locDtos.get(0).getOrderNo());
        if(order.getDocType()==81){
            order.setAccountDay(Cools.isEmpty(order.getAccountDay()) ? 1 : order.getAccountDay()+1);
            order.setUpdateTime(new Date());
            orderService.updateById(order);
        }
        List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids);
        List<LocDto> locDtos = new ArrayList<>();
        Set<String> exist = new HashSet<>();
        for (OrderDetl orderDetl : orderDetls) {
            List<LocDetl> locDetls = locDetlService.queryStockAll(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
            for (LocDetl locDetl : locDetls) {
                LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), locDetl.getAnfme());
                List<String> staNos = new ArrayList<>();
                staNos.add("C1");
                staNos.add("C2");
                staNos.add("C3");
                locDto.setStaNos(staNos);
                locDtos.add(locDto);
                exist.add(locDetl.getLocNo());
        //对出库单进行锁定
        List<ExdOutstockSource> fBillNo = exdOutstockSourceService.selectList(new EntityWrapper<ExdOutstockSource>().eq("FBillNo", order.getOrderNo()));
        if(fBillNo != null){
            for(ExdOutstockSource exdOutstockSource : fBillNo){
                exdOutstockSource.setStatus(10);
                exdOutstockSourceService.updateById(exdOutstockSource);
            }
            orderDetl.setUpdateBy(getUserId());
        }
        return R.ok().add(locDtos);
        return R.ok();
    }
    @Synchronized
@@ -220,8 +211,45 @@
            orderService.updateById(order);
        }
        //对出库单进行锁定
        List<ExdOutstockSource> fBillNo = exdOutstockSourceService.selectList(new EntityWrapper<ExdOutstockSource>().eq("FBillNo", order.getOrderNo()));
        if(fBillNo != null){
            for(ExdOutstockSource exdOutstockSource : fBillNo){
                exdOutstockSource.setStatus(10);
                exdOutstockSourceService.updateById(exdOutstockSource);
            }
        }
        return R.ok();
    }
    @PostMapping("/out/pakout2/preview/auth")
    @ManagerAuth
    public R pakoutPreview2(@RequestBody List<Long> ids) {
        if (Cools.isEmpty(ids)) {
            return R.parse(BaseRes.PARAM);
        }
        List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids);
        List<LocDto> locDtos = new ArrayList<>();
        Set<String> exist = new HashSet<>();
        for (OrderDetl orderDetl : orderDetls) {
            List<LocDetl> locDetls = locDetlService.queryStockAll(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
            for (LocDetl locDetl : locDetls) {
                LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), locDetl.getAnfme());
                List<String> staNos = new ArrayList<>();
                staNos.add("C1");
                staNos.add("C2");
                staNos.add("C3");
                locDto.setStaNos(staNos);
                locDtos.add(locDto);
                exist.add(locDetl.getLocNo());
            }
            orderDetl.setUpdateBy(getUserId());
        }
        return R.ok().add(locDtos);
    }
    @PostMapping("/out/pakout/preview/auth1")
@@ -253,7 +281,7 @@
                issued = issued - locDetl.getAnfme();
        }
        if (issued > 0) {
            LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
            LocDto locDto = new LocDto("库存不足", orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
            locDto.setLack(Boolean.TRUE);
            locDtos.add(locDto);
        }
src/main/java/com/zy/asrs/controller/WorkController.java
@@ -149,11 +149,11 @@
        return R.ok("任务号:" + startupDto.getWorkNo() + ";目标库位:" + startupDto.getLocNo());
    }
    @RequestMapping("/deal/preHave/start")
    @ManagerAuth(memo = "先入品处理")
    public R dealPreHave(@RequestParam Integer wrkNo) {
        String locNo = workService.dealPreHaveStart(wrkNo, getUserId());
        return R.ok("任务重新入库,目标库位:" + locNo);
    }
//    @RequestMapping("/deal/preHave/start")
//    @ManagerAuth(memo = "先入品处理")
//    public R dealPreHave(@RequestParam Integer wrkNo) {
//        String locNo = workService.dealPreHaveStart(wrkNo, getUserId());
//        return R.ok("任务重新入库,目标库位:" + locNo);
//    }
}
src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -61,7 +61,7 @@
    @ApiModelProperty(value= "颜色")
    private String color;
    @ApiModelProperty(value= "品牌")
    @ApiModelProperty(value= "仓库")
    private String brand;
    @ApiModelProperty(value= "单位")
@@ -248,6 +248,14 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
    }
    public String getBrand$(){
        if (Cools.isEmpty(this.brand)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
    }
    public void sync(Object source) {
        Synchro.Copy(source, this);
    }
src/main/java/com/zy/asrs/entity/OrderDetl.java
@@ -166,9 +166,9 @@
    private String manuDate;
    /**
     * 品项数
     * 仓库
     */
    @ApiModelProperty(value= "品项数")
    @ApiModelProperty(value= "仓库")
    @TableField("item_num")
    private String itemNum;
@@ -367,6 +367,9 @@
    public String getDanger$(){
        DocTypeService service = SpringUtils.getBean(DocTypeService.class);
        OrderService orderServicer=SpringUtils.getBean(OrderService.class);
        if(Cools.isEmpty(this.orderNo)){
            return null;
        }
        Order order = orderServicer.selectByNo(this.orderNo);
        DocType docType = service.selectById(order.getDocType());
        if (!Cools.isEmpty(docType)){
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -70,6 +70,12 @@
    @ApiModelProperty(value= "目标站")
    private String sku;
    /**
     * 生产入库对一坨物料进行绑定。唯一值
     */
    @ApiModelProperty(value= "生产入库对一坨物料进行绑定。唯一值")
    private String origin;
    @ApiModelProperty(value= "发给AGV的任务号")
@@ -106,9 +112,6 @@
    @ApiModelProperty(value= "条码")
    private String barcode;
    @ApiModelProperty(value= "产地")
    private String origin;
    @ApiModelProperty(value= "厂家")
    private String manu;
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -129,6 +129,10 @@
    @TableField("loc_sts")
    private String locSts;
    @ApiModelProperty(value= "订单号")
    @TableField("pause_mk")
    private String pauseMk;
    /**
     * 拣料
     */
@@ -260,9 +264,7 @@
    @TableField("appe_time")
    private Date appeTime;
    @ApiModelProperty(value= "")
    @TableField("pause_mk")
    private String pauseMk;
    @ApiModelProperty(value= "")
    @TableField("error_time")
src/main/java/com/zy/asrs/mapper/OrderDetl1Mapper.java
@@ -37,7 +37,7 @@
    int increaseWorkQty(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("workQty")Double workQty);
    int increaseWorkQty2(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("workQty")Double workQty, @Param("color")String color);
    int increaseWorkQty2(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("workQty")Double workQty, @Param("color")Long color);
    int increaseWorkQtytest(@Param("orderNo")String orderNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("anfme")Double anfme);
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -22,6 +22,10 @@
    List<OrderDetl> getPakoutPage(Map<String, Object> map);
    List<OrderDetl> getPakoutPagexs(Map<String, Object> map);
    List<OrderDetl> getPakoutPagenotxs(Map<String, Object> map);
    Integer getPakoutPageCount(Map<String, Object> map);
    int increase(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("qty")Double qty);
@@ -37,7 +41,7 @@
    int increaseWorkQty(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("workQty")Double workQty);
    int increaseWorkQty2(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("workQty")Double workQty, @Param("color")String color);
    int increaseWorkQty2(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("workQty")Double workQty, @Param("color")Long color);
    int increaseWorkQtytest(@Param("orderNo")String orderNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("anfme")Double anfme);
src/main/java/com/zy/asrs/service/OrderDetl1Service.java
@@ -40,7 +40,7 @@
    boolean increaseWorkQty(Long orderId, String matnr, String batch, Double workQty);
    boolean increaseWorkQty2(Long orderId, String matnr, String batch, Double workQty, String color);
    boolean increaseWorkQty2(Long orderId, String matnr, String batch, Double workQty, Long color);
    boolean increaseWorkQtytest(String orderNo, String matnr, String batch, Double anfme);
src/main/java/com/zy/asrs/service/OrderDetlService.java
@@ -12,6 +12,10 @@
    Page<OrderDetl> getPakoutPage(Page<OrderDetl> page);
    Page<OrderDetl> getPakoutPagexs(Page<OrderDetl> page);
    Page<OrderDetl> getPakoutPagenotxs(Page<OrderDetl> page);
    OrderDetl selectItem(Long orderId, String matnr, String batch);
    OrderDetl selectItem(String orderNo, String matnr, String batch);
@@ -39,7 +43,7 @@
    boolean increaseWorkQty(Long orderId, String matnr, String batch, Double workQty);
    boolean increaseWorkQty2(Long orderId, String matnr, String batch, Double workQty, String color);
    boolean increaseWorkQty2(Long orderId, String matnr, String batch, Double workQty, Long color);
    boolean increaseWorkQtytest(String orderNo, String matnr, String batch, Double anfme);
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -40,7 +40,7 @@
        if (locMast == null) {
            return false;
        }
        return this.baseMapper.selectEmptyLocCount(locMast.getLocType1(), locMast.getCrnNo()) > 5;
        return this.baseMapper.selectEmptyLocCount(locMast.getLocType1(), locMast.getCrnNo()) > 3;
    }
    @Override
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -23,6 +23,15 @@
import com.zy.common.model.MesCombParam;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.third.entity.ExdInstockSource;
import com.zy.third.entity.ExdStock;
import com.zy.third.entity.ExdvYanbu;
import com.zy.third.mapper.ExdMaterialMapper;
import com.zy.third.mapper.ExdStockMapper;
import com.zy.third.service.ExdInstockSourceService;
import com.zy.third.service.ExdMaterialService;
import com.zy.third.service.ExdStockService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -46,6 +55,8 @@
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private OrderDetl1Service orderDetl1Service;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
@@ -76,6 +87,14 @@
    private ManLocDetlService manLocDetlService;
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private ExdMaterialMapper exdMaterialMapper;
    @Autowired
    private ExdStockMapper exdStockMapper;
    @Autowired
    private ExdStockService exdStockService;
    @Autowired
    private ExdInstockSourceService  exdInstockSourceService;
    @Override
@@ -111,8 +130,9 @@
        //进行批号筛选,批号只能唯一
        Set<String> batchs = new HashSet<>();
        List<String> strings = new ArrayList<>();
        long time = new Date().getTime();
        //生产入库对一坨物料进行绑定。唯一值
        String fbillno = param.getBarcode()+"--"+time;
        for (CombParam.CombMat mat : param.getCombMats()) {
            if (Cools.isEmpty(mat.getBatch())) {
                continue;
@@ -177,7 +197,15 @@
                waitPakin.setModiUser(userId);
                waitPakin.setColor(userId+"");
                waitPakin.setModiTime(now);
                waitPakin.setBrand(param.getCk());//仓库
                //生产入库对一坨物料进行绑定。唯一值
                waitPakin.setOrigin(fbillno);
                ExdvYanbu barcode1 = exdMaterialMapper.getBacode(detlDto.getBc());
                String pid="03.98";
                if(!Cools.isEmpty(barcode1)&&!Cools.isEmpty(barcode1.getProdinkind())){
                    pid=barcode1.getProdinkind();
                }
                ExdStock id = exdStockService.selectOne(new EntityWrapper<ExdStock>().eq("Fnumber", pid));
                waitPakin.setBrand(id.getFname());//仓库
                waitPakin.setInspect(param.isType() ? 1 : 0);
                if (i == 1) {
//                0:不需要补空托盘
@@ -193,7 +221,7 @@
                     * 3:AGV任务完成
                     * 4:给输送线下发入库指令
                     */
                    waitPakin.setBeBatch(param.getBeBatch());
                    waitPakin.setBeBatch(Cools.isEmpty(param.getRsta())?0:1);
                    waitPakin.setSuppCode(param.getBarcode());
                }
                i++;
@@ -217,7 +245,11 @@
                    throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
                }
                // 修改订单作业数量
                if (!orderDetlService.increaseWorkQty2(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme(), fxId)) {
                if (!orderDetlService.increaseWorkQty2(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme(), userId)) {
                    throw new CoolException("修改单据作业数量失败");
                }
                // 修改子单订单作业数量
                if (!orderDetl1Service.increaseWorkQty2(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme(), userId)) {
                    throw new CoolException("修改单据作业数量失败");
                }
@@ -248,7 +280,11 @@
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setColor(userId+"");
                waitPakin.setBrand(param.getCk());//仓库
                OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>()
                        .eq("matnr", detlDto.getMatnr()).eq("order_no", order.getOrderNo())
                        .eq("batch", detlDto.getBatch()));
                waitPakin.setBrand(orderDetl.getBrand());//仓库
                waitPakin.setInspect(param.isType() ? 1 : 0);
                if (i == 1) {
//                0:不需要补空托盘
@@ -273,6 +309,13 @@
                }
            }
            orderService.updateSettle(order.getId(), 2L, userId);
            List<ExdInstockSource> fBillNo = exdInstockSourceService.selectList(new EntityWrapper<ExdInstockSource>().eq("FBillNo", order.getOrderNo()));
            if(fBillNo != null){
                for(ExdInstockSource exdInstockSource : fBillNo){
                    exdInstockSource.setStatus(10);
                    exdInstockSourceService.updateById(exdInstockSource);
                }
            }
        }
    }
src/main/java/com/zy/asrs/service/impl/Order1ServiceImpl.java
@@ -6,12 +6,12 @@
import com.core.common.DateUtils;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.controller.BasCrnStatusController;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.entity.param.OpenOrderPakoutParam;
import com.zy.asrs.mapper.Order1Mapper;
import com.zy.asrs.mapper.OrderDetl1Mapper;
import com.zy.asrs.mapper.OrderDetlMapper;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.service.*;
import com.zy.common.model.DetlDto;
@@ -27,13 +27,13 @@
public class Order1ServiceImpl extends ServiceImpl<Order1Mapper, Order1> implements Order1Service {
    @Autowired
    private OrderDetl1Mapper orderDetlMapper;
    private OrderDetl1Mapper orderDetl1Mapper;
    @Autowired
    private OpenService openService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private OrderDetl1Service orderDetlService;
    private OrderDetl1Service orderDetl1Service;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
@@ -50,7 +50,7 @@
    @Override
    public List<OrderDetl1> selectWorkingDetls(Long orderId) {
        return orderDetlMapper.selectWorkingDetls(orderId);
        return orderDetl1Mapper.selectWorkingDetls(orderId);
    }
    @Override
@@ -64,7 +64,7 @@
        if (Cools.isEmpty(order) || order.getSettle() >= 4L) {
            return;
        }
        List<OrderDetl1> orderDetls = orderDetlMapper.selectList(new EntityWrapper<OrderDetl1>().eq("order_id", order.getId()));
        List<OrderDetl1> orderDetls = orderDetl1Mapper.selectList(new EntityWrapper<OrderDetl1>().eq("order_id", order.getId()));
        boolean complete = true;
        for (OrderDetl1 orderDetl : orderDetls) {
            if (orderDetl.getAnfme() > orderDetl.getQty()) {
@@ -76,7 +76,7 @@
            // 出库订单重新整理明细
            DocType docType = docTypeService.selectById(order.getDocType());
            if (null != docType && docType.getPakout() == 1) {
                if (!orderDetlService.delete(new EntityWrapper<OrderDetl1>().eq("order_id", order.getId()))) {
                if (!orderDetl1Service.delete(new EntityWrapper<OrderDetl1>().eq("order_id", order.getId()))) {
                    throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败");
                }
                List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo);
@@ -91,7 +91,7 @@
                    orderDetl.setCreateBy(order.getCreateBy());
                    orderDetl.setUpdateTime(order.getUpdateTime());
                    orderDetl.setUpdateBy(order.getUpdateBy());
                    if (!orderDetlService.insert(orderDetl)) {
                    if (!orderDetl1Service.insert(orderDetl)) {
                        throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败");
                    }
                }
@@ -139,11 +139,11 @@
            }
            for (DetlDto detlDto : detlDtos) {
                // 修改订单明细数量
                if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                if (!orderDetl1Service.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                    throw new CoolException("修改单据明细数量失败");
                }
                // 修改订单作业数量
                if (!orderDetlService.increaseWorkQty(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                if (!orderDetl1Service.increaseWorkQty(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                    throw new CoolException("修改单据作业数量失败");
                }
            }
@@ -159,7 +159,8 @@
        if (!this.deleteById(orderId)) {
            throw new CoolException("删除单据失败");
        }
        orderDetlService.delete(new EntityWrapper<OrderDetl1>().eq("order_id", orderId));
        orderDetl1Service.delete(new EntityWrapper<OrderDetl1>().eq("order_id", orderId));
    }
    @Override
src/main/java/com/zy/asrs/service/impl/OrderDetl1ServiceImpl.java
@@ -106,7 +106,7 @@
     * @return
     */
    @Override
    public boolean increaseWorkQty2(Long orderId, String matnr, String batch, Double workQty, String color) {
    public boolean increaseWorkQty2(Long orderId, String matnr, String batch, Double workQty, Long color) {
        return this.baseMapper.increaseWorkQty2(orderId, matnr, batch, workQty, color) > 0;
    }
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java
@@ -28,6 +28,20 @@
    }
    @Override
    public Page<OrderDetl> getPakoutPagexs(Page<OrderDetl> page) {
        page.setRecords(baseMapper.getPakoutPagexs(page.getCondition()));
        page.setTotal(baseMapper.getPakoutPageCount(page.getCondition()));
        return page;
    }
    @Override
    public Page<OrderDetl> getPakoutPagenotxs(Page<OrderDetl> page) {
        page.setRecords(baseMapper.getPakoutPagenotxs(page.getCondition()));
        page.setTotal(baseMapper.getPakoutPageCount(page.getCondition()));
        return page;
    }
    @Override
    public OrderDetl selectItem(Long orderId, String matnr, String batch) {
        return this.baseMapper.selectItem(orderId, matnr, batch);
    }
@@ -103,7 +117,7 @@
     * @return
     */
    @Override
    public boolean increaseWorkQty2(Long orderId, String matnr, String batch, Double workQty, String color) {
    public boolean increaseWorkQty2(Long orderId, String matnr, String batch, Double workQty, Long color) {
        return this.baseMapper.increaseWorkQty2(orderId, matnr, batch, workQty, color) > 0;
    }
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -8,6 +8,7 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.entity.param.OpenOrderPakoutParam;
import com.zy.asrs.mapper.OrderDetl1Mapper;
import com.zy.asrs.mapper.OrderDetlMapper;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.service.*;
@@ -38,6 +39,8 @@
    private WrkDetlService wrkDetlService;
    @Autowired
    private Order1ServiceImpl order1Service;
    @Autowired
    private OrderDetl1Mapper orderDetl1Mapper;
    @Override
    public Order selectByNo(String orderNo) {
@@ -60,33 +63,31 @@
    @Override
    public void checkComplete(String orderNo) {
        String orderNo1= orderNo.split("-")[0];
        String orderNo1 = orderNo.split("-")[0];
        //主表
        Order order1 = this.selectByNo(orderNo1);
        //子表更新状态
        DocType docType = docTypeService.selectById(order1.getDocType());
        if (!Cools.isEmpty(docType)&&docType.getPakout()==1) {
            Order1 order11 = order1Service.selectByNo(orderNo);
            if (Cools.isEmpty(order11)||order11.getSettle()>4) {
                return;
            }
        Order1 order11 = order1Service.selectByNo(orderNo);
        if (Cools.isEmpty(order11) || order11.getSettle() > 4) {
            return;
        }
            List<OrderDetl> orderDetls1 = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().eq("order_id", order1.getId()));
            boolean complete1 = true;
            for (OrderDetl orderDetl : orderDetls1) {
                if (orderDetl.getAnfme() > orderDetl.getQty()) {
                    complete1 = false;
                    break;
                }
            }
            if (complete1) {
                if (!order1Service.updateSettle(order11.getId(), 4L, null)) {
                    throw new CoolException("修改订单【orderNo = " + order1.getOrderNo() + "】状态为已完成失败");
                }
        List<OrderDetl1> orderDetls1 = orderDetl1Mapper.selectList(new EntityWrapper<OrderDetl1>().eq("order_id", order1.getId()));
        boolean complete1 = true;
        for (OrderDetl1 orderDetl : orderDetls1) {
            if (orderDetl.getAnfme() > orderDetl.getQty()) {
                complete1 = false;
                break;
            }
        }
        if (complete1) {
            if (!order1Service.updateSettle(order11.getId(), 4L, null)) {
                throw new CoolException("修改订单【orderNo = " + order1.getOrderNo() + "】状态为已完成失败");
            }
        }
        //主表更新状态
        if (Cools.isEmpty(order1) || order1.getSettle() >= 4L) {
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -330,7 +330,7 @@
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(ioType); // 入出库状态
        wrkMast.setIoPri(13D); // 优先级:13
        wrkMast.setIoPri(ioType==101?20D:13D); // 优先级:13
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
@@ -346,9 +346,34 @@
        wrkMast.setModiUser(user.getId());
        wrkMast.setModiTime(now);
        wrkMast.setMemo(Cools.isEmpty(agvStaNo) ? "" : agvStaNo);
        if(!Cools.isEmpty(taskDto.getLocDtos().get(0).getOrderNo())){
            wrkMast.setPacked(taskDto.getLocDtos().get(0).getOrderNo());
        }
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败,出库库位号:" + taskDto.getLocNo());
        }
        String orderNo = taskDto.getLocDtos().get(0).getOrderNo();
        Order order = orderService.selectByNo(orderNo);
        if (Cools.isEmpty(order.getAccountDay())) {
            order.setAccountDay(1);
        } else {
            order.setAccountDay(order.getAccountDay() + 1);
        }
        orderNo = order.getOrderNo() + "-" + order.getAccountDay();
        Order1 order2 = order1Service.selectByNo(orderNo);
        if (Cools.isEmpty(order2)) {
            //创建子表表头
            Order1 order1 = new Order1();
            order1.sync(order);
            order1.setOrderNo(orderNo);
            order1.setCreateBy(user.getId());
            order1.setCreateTime(now);
            order1.setUpdateTime(new Date());
            order1.setSettle(2L);
            order1Service.insert(order1);
            order2=order1;
        }
        // 生成工作档明细
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
@@ -365,7 +390,7 @@
            wrkDetl.setIoTime(now);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setBatch(locDto.getBatch());
            wrkDetl.setOrderNo(locDto.getOrderNo());
            wrkDetl.setOrderNo(orderNo);
            wrkDetl.setModel(mat.getModel());
            wrkDetl.setAnfme(locDto.getAnfme()); // 数量
            wrkDetl.setAppeTime(now);
@@ -376,9 +401,22 @@
                throw new CoolException("保存工作档明细失败");
            }
            // 修改订单明细
            if (!orderDetlService.increaseWorkQty2(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme(), user.getEmail())) {
            if (!orderDetlService.increaseWorkQty2(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme(), user.getId())) {
                throw new CoolException("修改订单明细数量失败");
            }
            //生成出货单
            OrderDetl1 orderDetl1 = new OrderDetl1();
            orderDetl1.sync(wrkDetl);
            orderDetl1.setOrderId(order2.getId());
            orderDetl1.setWorkQty(wrkDetl.getAnfme());
            orderDetl1.setStatus(1);
            orderDetl1.setCreateBy(user.getId());
            orderDetl1.setUpdateBy(user.getId());
            orderDetl1.setCreateTime(new Date());
            orderDetl1.setUpdateTime(new Date());
            orderDetl1Service.insert(orderDetl1);
            orderService.updateSettle(orderDetl.getOrderId(), 2L, user.getId());
        }
        // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
@@ -450,7 +488,7 @@
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(ioType); // 入出库状态
        wrkMast.setIoPri(13D); // 优先级:13
        wrkMast.setIoPri(ioType==101?20D:13D); // 优先级:13
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
@@ -466,9 +504,13 @@
        wrkMast.setModiUser(user.getId());
        wrkMast.setModiTime(now);
        wrkMast.setMemo(Cools.isEmpty(agvStaNo) ? "" : agvStaNo);
        if(!Cools.isEmpty(taskDto.getLocDtos().get(0).getOrderNo())){
            wrkMast.setPacked(taskDto.getLocDtos().get(0).getOrderNo());
        }
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败,出库库位号:" + taskDto.getLocNo());
        }
        //新增子单
        Order order = orderService.selectByNo(orderNo);
        if (Cools.isEmpty(order.getAccountDay())) {
            order.setAccountDay(1);
@@ -517,7 +559,7 @@
                throw new CoolException("保存工作档明细失败");
            }
            // 修改订单明细
            if (!orderDetlService.increaseWorkQty2(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), wrkDetl.getAnfme(), user.getEmail())) {
            if (!orderDetlService.increaseWorkQty2(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), wrkDetl.getAnfme(), user.getId())) {
                throw new CoolException("修改订单明细数量失败");
            }
src/main/java/com/zy/asrs/task/AutoAssignAGVTasks.java
@@ -5,11 +5,9 @@
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.controller.MobileController;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.RowLastno;
import com.zy.asrs.entity.WaitPakin;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.LocMastServiceImpl;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.service.CommonService;
import org.slf4j.Logger;
@@ -46,6 +44,8 @@
    private WrkMastService wrkMastService;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private LocMastServiceImpl locMastService;
    /**
     * 自动派发入库任务给AGV
@@ -148,6 +148,18 @@
            if (!Cools.isEmpty(waitPakin1)) {
                continue;
            }
            //查看该巷道库位空库位数量>3
            Integer crnNo=1;
            if(staNo.equals("103")){
                crnNo=2;
            }else if(staNo.equals("101")){
                crnNo=3;
            }
            int i1 = locMastService.selectCount(new EntityWrapper<LocMast>().eq("crn_no", crnNo).eq("loc_sts", "O"));
            if(i1<=3){
                log.info("巷道={},空库位数量小于3,跳过agv入库搬运",crnNo);
                continue;
            }
            R bind = mobileController.siteBindAndUnbind(waitPakin.getMemo(),waitPakin.getZpallet(), "BIND");
//            if (bind.get("code").equals(200)) {
//            }else {
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -73,6 +73,7 @@
        if (orderDetls.isEmpty()) {
            return SUCCESS;
        }
        boolean boo=false;
        // 入库完成上报
        if (docType.getPakin() == 1) {
            ExdInstockTarget exdInstockTarge = null;
@@ -80,17 +81,34 @@
                exdInstockTarge = new ExdInstockTarget();
                exdInstockTarge.setFinterid(orderDetl.getDeadWarn());
                exdInstockTarge.setFbillno(orderDetl.getOrderNo());
                exdInstockTarge.setFtrantype(order.getDocType().intValue());
                Integer decType = order.getDocType().intValue();
                if(order.getDocType().intValue()==42){
                    decType = 41;
                }else if(order.getDocType().intValue()==25){
                    decType = 24;
                }else if(order.getDocType().intValue()==3){
                    decType = 1;
                }
                exdInstockTarge.setFtrantype(decType);
                exdInstockTarge.setFdate(DateUtils.convert(order.getOrderTime()));
                exdInstockTarge.setFrob(orderDetl.getInspect());
                exdInstockTarge.setFuserid(Integer.getInteger(orderDetl.getColor()));
                Integer frob = 1;
                if(order.getDocType().intValue()==21||order.getDocType().intValue()==24||order.getDocType().intValue()==2||order.getDocType().intValue()==3){
                    frob = -1;
                }
                exdInstockTarge.setFrob(frob);
                //操作用户
                User id = userService.selectOne(new EntityWrapper<User>().eq("id", orderDetl.getUpdateBy()));
                exdInstockTarge.setFuserid(Integer.valueOf(id.getEmail()));
                exdInstockTarge.setWritetime(new Date());
                exdInstockTarge.setWritor("WMS");
                exdInstockTarge.setStatus(0);
                exdInstockTarge.setProdinkind(orderDetl.getItemNum());
                exdInstockTargetService.insert(exdInstockTarge);
            }
            if (!orderService.updateSettle(order.getId(), 6L, null)) {
                throw new CoolException("服务器内部错误,请联系管理员");
            }else {
//                boo = true;
            }
        } else if (docType.getPakout() == 1) {
            // 出库完成上报
@@ -105,17 +123,28 @@
                    exdOutstockTarget.setFtrantype(order.getDocType().intValue());
                }
                exdOutstockTarget.setFdate(DateUtils.convert(order.getOrderTime()));
                exdOutstockTarget.setFrob(orderDetl.getInspect());
                exdOutstockTarget.setFuserid(Integer.getInteger(orderDetl.getColor()));
                exdOutstockTarget.setFrob(order.getDocType().intValue()==2? -1:1);
                //操作用户
                User id = userService.selectOne(new EntityWrapper<User>().eq("id", orderDetl.getUpdateBy()));
                exdOutstockTarget.setFuserid(Integer.valueOf(id.getEmail()));
                exdOutstockTarget.setWritetime(new Date());
                exdOutstockTarget.setWritor("WMS");
                exdOutstockTarget.setStatus(0);
                exdOutstockTarget.setProdinkind(orderDetl.getItemNum());
                exdOutstockTargetService.insert(exdOutstockTarget);
            }
            if (!orderService.updateSettle(order.getId(), 6L, null)) {
                throw new CoolException("服务器内部错误,请联系管理员");
            }else {
                boo = true;
            }
        }
        //普通入出订单子单完成
        if (boo){
            Order1 orderNo = order1Service.selectOne(new EntityWrapper<Order1>().like("order_no", order.getOrderNo()));
            orderNo.setSettle(6L);
            order1Service.update(orderNo,new  EntityWrapper<Order1>().eq("order_no",order.getOrderNo()));
        }
        return SUCCESS;
    }
@@ -131,7 +160,7 @@
            return FAIL;
        }
        int i = 1;
        for (OrderDetl1 orderDetl : orderDetls) {
            ExdvYanbu bacode = exdMaterialMapper.getBacode(orderDetl.getBatch());
@@ -175,14 +204,14 @@
            exdOutstockTarget.setFbillerid(Integer.valueOf(id.getEmail()));
            //细表ID
            Integer c = Integer.valueOf(order.getOrderNo().split("-")[1]);
            exdOutstockTarget.setFentryid(c);
            exdOutstockTarget.setFentryid(i++);
            //物料ID
            Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
            exdOutstockTarget.setFitemid(Integer.valueOf(mat.getUuid()));
            //源单数量
            exdOutstockTarget.setFqtymust(count);
            //出库数量
            exdOutstockTarget.setFqty(orderDetl.getQty());
            exdOutstockTarget.setFqty(bacode.getQty());
            //单价
            exdOutstockTarget.setFprice(0.0);
            //批号 暂定
@@ -205,7 +234,7 @@
            //仓库ID
            Integer Fdcstockid = 19382;
            if(!Cools.isEmpty(bacode.getProdinkind())){
                ExdStock fname = exdStockService.selectOne(new EntityWrapper<ExdStock>().eq("Fname", bacode.getProdinkind()));
                ExdStock fname = exdStockService.selectOne(new EntityWrapper<ExdStock>().eq("Fname", orderDetl.getBrand()));
                Fdcstockid = Integer.valueOf(fname.getId());
            }
            exdOutstockTarget.setFdcstockid(Fdcstockid);
src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
@@ -71,28 +71,30 @@
                        }
                    }
                    // 手动入库生成单据 【 上报三方平台 】
                    if (!Cools.isEmpty(wrkDetls)) {
                        if (!orderService.saveHandlerOrder(Boolean.TRUE, wrkMast, wrkDetls)) {
                            exceptionHandle("生成手动入库单据[workNo={0}]失败", wrkMast.getWrkNo());
                        }
                    }
//                    if (!Cools.isEmpty(wrkDetls)) {
//                        if (!orderService.saveHandlerOrder(Boolean.TRUE, wrkMast, wrkDetls)) {
//                            exceptionHandle("生成手动入库单据[workNo={0}]失败", wrkMast.getWrkNo());
//                        }
//                    }
                // 拣料再入库
                } else if (wrkMast.getIoType() == 53) {
                    if (!Cools.isEmpty(wrkDetls)) {
                        if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) {
                            exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo());
                        }
                    }
                }
//                else if (wrkMast.getIoType() == 53) {
//                    if (!Cools.isEmpty(wrkDetls)) {
//                        if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) {
//                            exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo());
//                        }
//                    }
//                }
            // 出库 --------------------------------------------------------------------------------
            } else if (wrkMast.getWrkSts() == 15) {
                if (!Cools.isEmpty(wrkDetls)) {
                    if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) {
                        exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo());
                    }
                }
            }
//            else if (wrkMast.getWrkSts() == 15) {
//                if (!Cools.isEmpty(wrkDetls)) {
//                    if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) {
//                        exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo());
//                    }
//                }
//            }
            // 保存工作主档历史档
            if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -158,6 +158,24 @@
                        } catch (Exception ignore) {
                        }
                        // 更新子订单完成数量
                        OrderDetl1 orderDetl1 = orderDetl1Service.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                        if (orderDetl1 == null) {
                            orderDetl1 = orderDetl1Service.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), null);
                        }
                        try {
                            if (!Cools.isEmpty(orderDetl)) {
                                if (!orderDetl1Service.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        orderDetl.getBatch(), wrkDetl.getAnfme())) {
//                                    exceptionHandle("全板入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("全板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                                }
                            }
                        } catch (Exception ignore) {
                        }
                    }
                    // 写入中间表数据
                    write(wrkMast, wrkDetls);
@@ -223,7 +241,7 @@
                            try {
                                if (!Cools.isEmpty(orderDetl1)) {
                                    if (!orderDetl1Service.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                            orderDetl.getBatch(), wrkDetl.getAnfme())) {
                                            batch, wrkDetl.getAnfme())) {
//                                    exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -554,15 +572,15 @@
                //源单号
                exdInstockTarge.setFsourcebillno(bacode.getIcmono());
                //源单细表ID
                exdInstockTarge.setFsourceentryid(i);
                exdInstockTarge.setFsourceentryid(1);
                //源单单据类型
                exdInstockTarge.setFsourcetrantype(85);
                //库位ID
                exdInstockTarge.setFdcspid(0);
                //仓库ID
                Integer Fdcstockid = 19382;
                if(!Cools.isEmpty(bacode.getProdinkind())){
                    ExdStock fname = exdStockService.selectOne(new EntityWrapper<ExdStock>().eq("Fname", bacode.getProdinkind()));
                if(!Cools.isEmpty(wrkDetl.getBrand())){
                    ExdStock fname = exdStockService.selectOne(new EntityWrapper<ExdStock>().eq("Fname", wrkDetl.getBrand()));
                    Fdcstockid = Integer.valueOf(fname.getId());
                }
@@ -581,6 +599,8 @@
                exdInstockTarge.setStatus(0);
                //仓库
                exdInstockTarge.setProdinkind(bacode.getProdinkind());
                //生产入库对一坨物料进行绑定。唯一值
                exdInstockTarge.setFbillno(wrkDetl.getOrigin());
                //exdInstockTarge.setProdInKind("特采库");
                if(!exdInstockTargetService.insert(exdInstockTarge)){
                    throw new CoolException("验布入库完成插入入库表失败");
src/main/java/com/zy/asrs/utils/Utils.java
@@ -110,6 +110,7 @@
        int row = getRow(shallowLoc);
        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
        int targetRow;
        remainder = remainder + 2;
        if (remainder == 2) {
            targetRow = row - 1;
        } else if (remainder == 3) {
src/main/java/com/zy/common/model/DetlDto.java
@@ -28,6 +28,8 @@
    private String bc;
    private String ProdInKind;
    public DetlDto() {
    }
src/main/java/com/zy/common/service/CommonService.java
@@ -241,6 +241,14 @@
            curRow=10;
        }else if(curRow==10){
            curRow=7;
        }else if(curRow==4){
            curRow=5;
        }else if(curRow==5){
            curRow=4;
        }else if(curRow==8){
            curRow=9;
        }else if(curRow==9){
            curRow=8;
        }
        // 更新库位排号
        rowLastno.setCurrentRow(curRow);
src/main/java/com/zy/common/web/WcsController.java
@@ -127,6 +127,9 @@
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("Y");
        if(!Cools.isEmpty(waitPakins.get(0).getOrderNo())){
            wrkMast.setPacked(waitPakins.get(0).getOrderNo());
        }
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(now);
src/main/java/com/zy/third/entity/ExdInstockSource.java
@@ -178,6 +178,8 @@
     */
    private String readormsg;
    private String ProdInKind;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/mapper/ExdInstockSourceMapper.java
@@ -17,5 +17,7 @@
    List<String> listOrderNo();
    List<String> deletelistOrderNo();
    List<ExdInstockSource> listAll(@Param("orderNo") String orderNo);
}
src/main/java/com/zy/third/mapper/ExdOutstockSourceMapper.java
@@ -17,5 +17,7 @@
    List<String> listOrderNo();
    List<String> deletelistOrderNo();
    List<ExdOutstockSource> listAll(@Param("orderNo") String orderNo);
}
src/main/java/com/zy/third/task/OrderScheduler.java
@@ -1,9 +1,17 @@
package com.zy.third.task;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.OrderDetl1;
import com.zy.asrs.service.impl.OrderDetl1ServiceImpl;
import com.zy.third.entity.ExdInstockSource;
import com.zy.third.entity.ExdInstockTarget;
import com.zy.third.entity.ExdOutstockSource;
import com.zy.third.entity.ExdOutstockTarget;
import com.zy.third.mapper.ExdInstockSourceMapper;
import com.zy.third.mapper.ExdOutstockSourceMapper;
import com.zy.third.service.ExdInstockTargetService;
import com.zy.third.service.ExdOutstockTargetService;
import com.zy.third.task.handler.OrderHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,6 +35,16 @@
    @Autowired
    private ExdOutstockSourceMapper exdOutstockSourceMapper;
    @Autowired
    private ExdInstockTargetService exdInstockTargetService;
    @Autowired
    private ExdOutstockTargetService exdOutstockTargetService;
    @Autowired
    private OrderDetl1ServiceImpl orderDetl1ServiceImpl;
    @Autowired
    private OrderDetl1ServiceImpl orderDetl1Service;
    /**
@@ -57,6 +75,42 @@
                for (ExdInstockSource exdInstockSource : exdInstockSources) {
                    exdInstockSource.setReadormsg(e.getMessage());
                    exdInstockSource.setStatus(2);
                    exdInstockSourceMapper.updateById(exdInstockSource);
                }
            }
        }
    }
    /**
     * 读取入库单据,对erp标记为删除的订单进行删除
     * status 5  --》 8 删除成功
     * status 5  --》 7 删除失败
     */
    @Scheduled(cron = "0/10 * * * * ? ")
    public void deleteInOrder() {
        //log.info("读取入库单据");
        List<String> orderNos = exdInstockSourceMapper.deletelistOrderNo();
        for (String orderNo : orderNos) {
            List<ExdInstockSource> exdInstockSources = exdInstockSourceMapper.listAll(orderNo);
            try {
                boolean success = orderHandler.deletereadInOrder(exdInstockSources).isSuccess();
                for (ExdInstockSource exdInstockSource : exdInstockSources) {
                    if (success) {
                        exdInstockSource.setReadtime(new Date());
                        exdInstockSource.setStatus(8);
                        exdInstockSourceMapper.updateById(exdInstockSource);
                    } else {
                        exdInstockSource.setReadtime(new Date());
                        exdInstockSource.setStatus(7);
                        exdInstockSourceMapper.updateById(exdInstockSource);
                    }
                }
            } catch (Exception e) {
//                log.error("读取入库单据信息失败:{},{}", exdInstockSources, e.getMessage());
                e.printStackTrace();
                for (ExdInstockSource exdInstockSource : exdInstockSources) {
                    exdInstockSource.setReadormsg(e.getMessage());
                    exdInstockSource.setStatus(7);
                    exdInstockSourceMapper.updateById(exdInstockSource);
                }
            }
@@ -97,4 +151,87 @@
        }
    }
    /**
     * 读取删除出库单据
     */
    @Scheduled(cron = "0/10 * * * * ? ")
    public void deletereadOutOrder() {
        //log.info("读取出库单据");
        List<String> orderNos = exdOutstockSourceMapper.deletelistOrderNo();
        for (String orderNo : orderNos) {
            List<ExdOutstockSource> exdOutstockSources = exdOutstockSourceMapper.listAll(orderNo);
            try {
                boolean success = orderHandler.deletereadOutOrder(exdOutstockSources).isSuccess();
                for (ExdOutstockSource exdOutstockSource : exdOutstockSources) {
                    if (success) {
                        exdOutstockSource.setReadtime(new Date());
                        exdOutstockSource.setStatus(8);
                        exdOutstockSourceMapper.updateById(exdOutstockSource);
                    } else {
                        exdOutstockSource.setReadtime(new Date());
                        exdOutstockSource.setStatus(7);
                        exdOutstockSourceMapper.updateById(exdOutstockSource);
                    }
                }
            } catch (Exception e) {
//                log.error("读取出库单据信息失败:{},{}", exdOutstockSources, e.getMessage());
                e.printStackTrace();
                for (ExdOutstockSource exdOutstockSource : exdOutstockSources) {
                    exdOutstockSource.setStatus(7);
                    exdOutstockSource.setReadormsg(e.getMessage());
                    exdOutstockSourceMapper.updateById(exdOutstockSource);
                }
            }
        }
    }
    /**
     * 读取错误出库完成单据
     */
//    @Scheduled(cron = "* 0/10 * * * ? ")
    @Scheduled(cron = "0/10 * * * * ? ")
    public void readOutOrdererror() {
        List<ExdOutstockTarget> status = exdOutstockTargetService.selectList(new EntityWrapper<ExdOutstockTarget>().isNotNull("ReadorMsg"));
        if (status.size() > 0) {
            for (ExdOutstockTarget exdOutstockTarget : status) {
                List<OrderDetl1> orderNo = orderDetl1Service.selectList(new EntityWrapper<OrderDetl1>().eq("order_no", exdOutstockTarget.getFbillno()));
                if (!Cools.isEmpty(orderNo)) {
                    for (OrderDetl1 orderDetl1 : orderNo) {
                        if (!Cools.isEmpty(orderDetl1.getMemo())&&orderDetl1.getMemo().equals(exdOutstockTarget.getReadormsg())) {
                            break;
                        }
                        orderDetl1.setMemo(exdOutstockTarget.getReadormsg());
                        orderDetl1Service.updateById(orderDetl1);
                    }
                }
            }
        }
    }
    /**
     * 读取错误入库完成单据
     */
    @Scheduled(cron = "* 0/10 * * * ? ")
//    @Scheduled(cron = "0/10 * * * * ? ")
    public void readInOrdererror() {
        List<ExdInstockTarget> status = exdInstockTargetService.selectList(new EntityWrapper<ExdInstockTarget>().isNotNull("ReadorMsg"));
        if (status.size() > 0) {
            for (ExdInstockTarget exdInstockTarget : status) {
                List<OrderDetl1> orderNo = orderDetl1Service.selectList(new EntityWrapper<OrderDetl1>().eq("order_no", exdInstockTarget.getFbillno()));
                if (!Cools.isEmpty(orderNo)) {
                    for (OrderDetl1 orderDetl1 : orderNo) {
                        if (orderDetl1.getMemo().equals(exdInstockTarget.getReadormsg())) {
                            break;
                        }
                        orderDetl1.setMemo(exdInstockTarget.getReadormsg());
                        orderDetl1Service.updateById(orderDetl1);
                    }
                }
            }
        }
    }
}
src/main/java/com/zy/third/task/handler/OrderHandler.java
@@ -1,22 +1,19 @@
package com.zy.third.task.handler;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.MatService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.model.DetlDto;
import com.zy.third.entity.ExdInstockSource;
import com.zy.third.entity.ExdOutstockSource;
import com.zy.third.entity.ExdStock;
import com.zy.third.service.ExdStockService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -47,6 +44,13 @@
    @Autowired
    private MatService matService;
    @Autowired
    private ExdStockService exdStockService;
    @Autowired
    private Order1Service order1Service;
    @Autowired
    private OrderDetl1Service orderDetl1Service;
    @Transactional
    public ReturnT<String> readInOrder(List<ExdInstockSource> exdInstockSource) {
@@ -54,7 +58,15 @@
        Integer ftrantype = exdInstockSource.get(0).getFtrantype();
        Order order = orderService.selectByNo(fbillno);
        if (!Cools.isEmpty(order)) {
            throw new CoolException(fbillno + "单据已存在,请勿重复提交");
            if (order.getSettle() > 1L) {
                throw new CoolException(fbillno + "单据作业中,请勿重复提交");
            }
            orderService.remove(order.getId());
            //删除入库子单
            Order1 order1 = order1Service.selectByNo(fbillno);
            if (!Cools.isEmpty(order1)) {
                order1Service.remove(order1.getId());
            }
        }
        DocType docType = docTypeService.selectById(ftrantype);
        if (docType == null) {
@@ -102,12 +114,55 @@
        if (!orderService.insert(order)) {
            throw new CoolException("生成单据主档失败,请联系管理员");
        }
        //生成子单主表
        Order1 order1 = new Order1(
                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                fbillno,    // 订单编号
                DateUtils.convert(exdInstockSource.get(0).getFdate()),    // 单据日期
                docType.getDocId(),    // 单据类型
                null,    // 项目编号
                null,    //
                null,    // 调拨项目编号
                null,    // 初始票据号
                null,    // 票据号
                null,    // 客户编号
                null,    // 客户
                null,    // 联系方式
                null,    // 操作人员
                null,    // 合计金额
                null,    // 优惠率
                null,    // 优惠金额
                null,    // 销售或采购费用合计
                null,    // 实付金额
                null,    // 付款类型
                null,    // 业务员
                null,    // 结算天数
                null,    // 邮费支付类型
                null,    // 邮费
                null,    // 付款时间
                null,    // 发货时间
                null,    // 物流名称
                null,    // 物流单号
                1L,    // 订单状态
                1,    // 状态
                9527L,    // 添加人员
                now,    // 添加时间
                9527L,    // 修改人员
                now,    // 修改时间
                null    // 备注
        );
        if (!order1Service.insert(order1)) {
            throw new CoolException("生成子单据主档失败,请联系管理员");
        }
        // 单据明细档
        List<DetlDto> list = new ArrayList<>();
        for (ExdInstockSource detail : exdInstockSource) {
            DetlDto dto = new DetlDto(detail.getFitemid() + "", detail.getFbatchno(), detail.getFqty());
            dto.setFrob(detail.getFrob());
            dto.setFInterID(detail.getFinterid());
            dto.setProdInKind(detail.getFdcstockid()+"");
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
@@ -124,6 +179,9 @@
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.sync(mat);
            orderDetl.setBatch(detlDto.getBatch());
            if(detlDto.getAnfme() <0) {
                detlDto.setAnfme(-detlDto.getAnfme());
            }
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
@@ -135,9 +193,32 @@
            orderDetl.setQty(0.0D);
            orderDetl.setDeadWarn(detlDto.getFInterID());
            orderDetl.setBeBatch(detlDto.getFrob());
            ExdStock id = exdStockService.selectOne(new EntityWrapper<ExdStock>().eq("ID", detlDto.getProdInKind()));
            orderDetl.setBrand(id.getFname());//仓库
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
            //生成子单明细
            OrderDetl1 orderDetl1 = new OrderDetl1();
            orderDetl1.sync(orderDetl);
            orderDetl1.setOrderId(order1.getId());
            if (!orderDetl1Service.insert(orderDetl1)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
        return SUCCESS;
    }
    @Transactional
    public ReturnT<String> deletereadInOrder(List<ExdInstockSource> exdInstockSource) {
        String fbillno = exdInstockSource.get(0).getFbillno();
        Order order = orderService.selectByNo(fbillno);
        if (!Cools.isEmpty(order)&&order.getStatus()>1) {
            if (order.getSettle() > 1L) {
                throw new CoolException(fbillno + "单据正在作业中,无法删除");
            }
            orderService.remove(order.getId());
        }
        return SUCCESS;
    }
@@ -151,9 +232,16 @@
        // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据
        if (!Cools.isEmpty(order)) {
            if (order.getSettle() > 1L) {
                throw new CoolException(fbillno + "正在出库,无法修改单据");
                throw new CoolException(fbillno + "单据正在作业中,请勿重复提交");
            }
            orderService.remove(order.getId());
        }
        if(ftrantype == 41){
            ftrantype = 42;
        }else if(ftrantype == 24){
            ftrantype = 25;
        }else if(ftrantype == 1){
            ftrantype = 3;
        }
        DocType docType = docTypeService.selectById(ftrantype);
        Date now = new Date();
@@ -201,10 +289,12 @@
        List<DetlDto> list = new ArrayList<>();
        for (ExdOutstockSource detail : exdOutstockSource) {
            DetlDto dto = new DetlDto(detail.getFitemid()+"", detail.getFbatchno(), detail.getFqty());
            dto.setFInterID(detail.getFinterid());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getFqty());
            } else {
                list.add(dto);
            }
@@ -217,6 +307,9 @@
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.sync(mat);
            orderDetl.setBatch(detlDto.getBatch());
            if(detlDto.getAnfme() <0) {
                detlDto.setAnfme(-detlDto.getAnfme());
            }
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
@@ -224,6 +317,7 @@
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
            orderDetl.setUpdateTime(now);
            orderDetl.setDeadWarn(detlDto.getFInterID());//订单内码
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            if (!orderDetlService.insert(orderDetl)) {
@@ -233,4 +327,17 @@
        return SUCCESS;
    }
    @Transactional
    public ReturnT<String> deletereadOutOrder(List<ExdOutstockSource> exdInstockSource) {
        String fbillno = exdInstockSource.get(0).getFbillno();
        Order order = orderService.selectByNo(fbillno);
        if (!Cools.isEmpty(order)&&order.getStatus()>1) {
            if (order.getSettle() > 1L) {
                throw new CoolException(fbillno + "单据正在作业中,无法删除");
            }
            orderService.remove(order.getId());
        }
        return SUCCESS;
    }
}
src/main/resources/mapper/asrs/LocDetlMapper.xml
@@ -103,6 +103,12 @@
        <if test="batch!=null and batch!='' ">
            and a.batch like  '%' + #{batch} + '%'
        </if>
        <if test="brand!=null and brand!=''">
            and a.brand in
            <foreach collection="brand.split(',')" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="startTime!=null and endTime!=null">
            and a.modi_time between #{startTime} and #{endTime}
        </if>
src/main/resources/mapper/asrs/OrderDetl1Mapper.xml
@@ -214,7 +214,7 @@
        update man_order_detl1
        set work_qty = work_qty + #{workQty}
        <if test="color!=null and color!='' ">
            , color = #{color}
            , update_by = #{color}
        </if>
        where 1=1
        and order_id = #{orderId}
src/main/resources/mapper/asrs/OrderDetlMapper.xml
@@ -112,6 +112,40 @@
        ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})
    </select>
    <select id="getPakoutPagexs" resultMap="BaseResultMap">
        select * from
        (
        select
        ROW_NUMBER() over (order by mo.create_time desc) as row,
        mod.*
        from man_order_detl mod
        inner join man_order mo on mod.order_id = mo.id
        inner join man_doc_type mdt on mo.doc_type = mdt.doc_id
        where 1=1
        and mo.settle &lt;= 2
        and mo.status = 1
        and mdt.pakout = 1
        <include refid="pakOutPageCondition"></include>
        ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})
    </select>
    <select id="getPakoutPagenotxs" resultMap="BaseResultMap">
        select * from
        (
        select
        ROW_NUMBER() over (order by mo.create_time desc) as row,
        mod.*
        from man_order_detl mod
        inner join man_order mo on mod.order_id = mo.id
        inner join man_doc_type mdt on mo.doc_type = mdt.doc_id
        where 1=1
        and mo.settle &lt;= 2
        and mo.status = 1
        and mdt.pakout = 1
        <include refid="pakOutPageCondition"></include>
        ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})
    </select>
    <select id="reportERPOrderDetl" resultMap="BaseResultMap">
        select d.* from man_order_detl d
        LEFT JOIN man_order o on o.order_no = d.order_no
@@ -214,7 +248,7 @@
        update man_order_detl
        set work_qty = work_qty + #{workQty}
        <if test="color!=null and color!='' ">
            , color = #{color}
            , update_by = #{color}
        </if>
        where 1=1
        and order_id = #{orderId}
src/main/resources/mapper/third/ExdInstockSourceMapper.xml
@@ -52,7 +52,13 @@
    <select id="listOrderNo" resultType="java.lang.String">
        select distinct fbillno
        from Exd_Instock_Source
        where status = 0
        where status in(0,4)
    </select>
    <select id="deletelistOrderNo" resultType="java.lang.String">
        select distinct fbillno
        from Exd_Instock_Source
        where status = 5
    </select>
src/main/resources/mapper/third/ExdOutstockSourceMapper.xml
@@ -55,7 +55,13 @@
    <select id="listOrderNo" resultType="java.lang.String">
            select distinct fbillno
            from Exd_Outstock_Source
            where status = 0
            where status in (0,4)
    </select>
    <select id="deletelistOrderNo" resultType="java.lang.String">
        select distinct fbillno
        from Exd_Outstock_Source
        where status  = 5
    </select>
src/main/webapp/static/js/common.js
@@ -225,14 +225,14 @@
    {field: 'matnr', align: 'center',title: '商品编号', sort:true}
    ,{field: 'maktx', align: 'center',title: '商品名称', sort:true}
    ,{field: 'orderNo', align: 'center',title: '单据编号', hide: true}
    ,{field: 'batch', align: 'center',title: '合同号', sort:true}
    ,{field: 'batch', align: 'center',title: '批号', sort:true}
    ,{field: 'anfme', align: 'center',title: '数量'}
    ,{field: 'zpallet', align: 'center',title: '托盘条码'}
    ,{field: 'specs', align: 'center',title: '规格'}
    ,{field: 'model', align: 'center',title: '图号', hide: false}
    ,{field: 'model', align: 'center',title: '图号', hide: true}
    ,{field: 'color', align: 'center',title: '颜色', hide: true}
    ,{field: 'brand', align: 'center',title: '品牌', hide: true}
    ,{field: 'brand', align: 'center',title: '仓库', hide: false}
    ,{field: 'unit', align: 'center',title: '单位', hide: true}
    ,{field: 'price', align: 'center',title: '单价', hide: true}
    ,{field: 'sku', align: 'center',title: 'sku', hide: true}
src/main/webapp/static/js/locDetl/locDetl.js
@@ -5,13 +5,13 @@
        {field: 'matnr', align: 'center',title: '商品编号', sort:true}
        ,{field: 'maktx', align: 'center',title: '商品名称', sort:true}
        ,{field: 'orderNo', align: 'center',title: '单据编号', hide: false}
        ,{field: 'batch', align: 'center',title: '合同号', width: 300, sort:true}
        ,{field: 'batch', align: 'center',title: '批号', width: 300, sort:true}
        ,{field: 'anfme', align: 'center',title: '数量'}
        ,{field: 'zpallet', align: 'center',title: '托盘条码'}
        ,{field: 'specs', align: 'center',title: '配置'}
        ,{field: 'model', align: 'center',title: '图号', hide: false}
        ,{field: 'specs', align: 'center',title: '配置', hide: true}
        ,{field: 'model', align: 'center',title: '图号', hide: true}
        ,{field: 'color', align: 'center',title: '颜色', hide: true}
        ,{field: 'brand', align: 'center',title: '品牌', hide: true}
        ,{field: 'brand', align: 'center',title: '仓库', hide: false}
        ,{field: 'unit', align: 'center',title: '单位', hide: true}
        ,{field: 'price', align: 'center',title: '单价', hide: true}
        ,{field: 'sku', align: 'center',title: 'sku', hide: true}
src/main/webapp/static/js/locMast/locMast.js
@@ -424,7 +424,7 @@
    form.on('submit(edit)', function () {
        method("/locMast/update/auth")
    });
    // 修改合同号动作
    // 修改批号动作
    form.on('submit(pakoutPreview)', function () {
        method("/locDetl/updateBatch/auth")
    });
src/main/webapp/static/js/order/out.js
@@ -21,7 +21,7 @@
    insTb2 = table.render({
        elem: '#orderDetlTable',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/orderDetl/pakout/list/auth',
        url: baseUrl+'/orderDetl/pakout/list/auth/notxs',
        page: true,
        limit: 15,
        limits: [15, 30, 50, 100, 200, 500],
src/main/webapp/static/js/orderDetl/orderDetl1.js
@@ -67,10 +67,10 @@
            // ,{field: 'createBy$', align: 'center',title: '添加人员'}
            {field: 'createTime$', align: 'center',title: '添加时间'}
            ,{field: 'inspect', align: 'center',title: '上报次数', width: 100}
            // ,{field: 'inspect', align: 'center',title: '上报次数', width: 100}
            // ,{field: 'updateBy$', align: 'center',title: '修改人员'}
            // ,{field: 'updateTime$', align: 'center',title: '修改时间'}
            // ,{field: 'memo', align: 'center',title: '备注'}
            ,{field: 'memo', align: 'center',title: 'erp上报错误'}
            // ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120}
        ]],
        request: {
src/main/webapp/static/js/orderTablenotxs.js
New file
@@ -0,0 +1,173 @@
var insTb;
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"  // 配置模块所在的目录
}).use(['table','laydate', 'form',  'admin', 'tableX'], function() {
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var admin = layui.admin;
    var tableX = layui.tableX;
    /****************************************** 左边表 *************************************************/
    insTb = table.render({
        elem: '#originTablenotxs',
        url: baseUrl + '/order/nav/list/auth/notxs',
        height: 'full-120',
        headers: {token: localStorage.getItem('token')},
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        page: false,
        parseData: function (res) {
            return {
                'code': res.code,
                'msg': res.msg,
                'data': res.data
            }
        },
        response: {
            statusCode: 200
        },
        // toolbar: ['<p>',
        //     '<button lay-event="add" class="layui-btn layui-btn-sm icon-btn"><i class="layui-icon">&#xe654;</i>添加</button>&nbsp;',
        //     '<button lay-event="edit" class="layui-btn layui-btn-sm layui-btn-warm icon-btn"><i class="layui-icon">&#xe642;</i>修改</button>&nbsp;',
        //     '<button lay-event="del" class="layui-btn layui-btn-sm layui-btn-danger icon-btn"><i class="layui-icon">&#xe640;</i>删除</button>',
        //     '</p>'].join(''),
        defaultToolbar: [],
        cols: [[
            // {type: 'numbers', title: '#'},
            {field: 'orderTime', title: '日期'},
            {field: 'orderNo', title: '单据编号', align: 'center'}
        ]],
        done: function (res, curr, count) {
            $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
            // 绑定鼠标右键
            tableX.bindCtxMenu('originTablenotxs', function (d) {
                return [
                    {
                        icon: 'layui-icon layui-icon-ok',
                        name: '一键出库',
                        click: function (d) {
                            autoOut(d.id);
                        }
                    }
                ]
            })
        }
    });
    /* 表格搜索 */
    form.on('submit(originTableSearch)', function (data) {
        insTb.reload({where: data.field});
        return false;
    });
    /* 表格重置 */
    form.on('submit(originTbReset)', function (data) {
        insTb.reload({where: null});
        insTb2.reload({where: null, page: {curr: 1}});
        return false;
    });
    /* 表格头工具栏点击事件 */
    table.on('toolbar(originTable)', function (obj) {
        if (obj.event === 'add') { // 添加
            showEdit();
        } else if (obj.event === 'edit') { // 修改
            if (selObj == null) {
                return;
            }
            showEdit(selObj.data);
        } else if (obj.event === 'del') { // 删除
            if (selObj == null) {
                return;
            }
            doDel(selObj);
        }
    });
    /* 监听行单击事件 */
    var selObj;
    table.on('row(originTablenotxs)', function (obj) {
        selObj = obj;
        obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
        insTb2.reload({where: {order_id: obj.data.id}, page: {curr: 1}});
    });
    /* 显示表单弹窗 */
    function showEdit(mData) {
        admin.open({
            type: 1,
            title: (mData ? '修改' : '添加') + '项目',
            content: $('#hostEditDialog').html(),
            success: function (layero, dIndex) {
                // 回显表单数据
                form.val('hostEditForm', mData);
                // 表单提交事件
                form.on('submit(hostEditSubmit)', function (data) {
                    var loadIndex = layer.load(2);
                    $.ajax({
                        url: baseUrl+"/host/"+(mData?'update':'add')+"/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: data.field,
                        method: 'POST',
                        success: function (res) {
                            layer.close(loadIndex);
                            selObj = null;
                            if (res.code === 200){
                                layer.close(dIndex);
                                layer.msg(res.msg, {icon: 1});
                                insTb.reload();
                            } else if (res.code === 403){
                                top.location.href = baseUrl+"/";
                            } else {
                                layer.msg(res.msg, {icon: 2});
                            }
                        }
                    })
                    return false;
                });
            }
        });
    }
    /* 删除 */
    function doDel(obj) {
        layer.confirm('确定要删除此单据类型吗?', {
            skin: 'layui-layer-admin',
            shade: .1
        }, function (i) {
            layer.close(i);
            var loadIndex = layer.load(2);
            $.ajax({
                url: baseUrl+"/host/delete/one/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {param: JSON.stringify(obj.data)},
                method: 'POST',
                success: function (res) {
                    selObj = null;
                    layer.close(loadIndex);
                    if (res.code === 200){
                        layer.closeAll();
                        insTb.reload();
                        $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    } else {
                        layer.msg(res.msg, {icon: 2});
                    }
                }
            })
        });
    }
})
src/main/webapp/static/js/orderTablexs.js
New file
@@ -0,0 +1,173 @@
var insTb;
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"  // 配置模块所在的目录
}).use(['table','laydate', 'form',  'admin', 'tableX'], function() {
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var admin = layui.admin;
    var tableX = layui.tableX;
    /****************************************** 左边表 *************************************************/
    insTb = table.render({
        elem: '#originTablexs',
        url: baseUrl + '/order/nav/list/auth/xs',
        height: 'full-120',
        headers: {token: localStorage.getItem('token')},
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        page: false,
        parseData: function (res) {
            return {
                'code': res.code,
                'msg': res.msg,
                'data': res.data
            }
        },
        response: {
            statusCode: 200
        },
        // toolbar: ['<p>',
        //     '<button lay-event="add" class="layui-btn layui-btn-sm icon-btn"><i class="layui-icon">&#xe654;</i>添加</button>&nbsp;',
        //     '<button lay-event="edit" class="layui-btn layui-btn-sm layui-btn-warm icon-btn"><i class="layui-icon">&#xe642;</i>修改</button>&nbsp;',
        //     '<button lay-event="del" class="layui-btn layui-btn-sm layui-btn-danger icon-btn"><i class="layui-icon">&#xe640;</i>删除</button>',
        //     '</p>'].join(''),
        defaultToolbar: [],
        cols: [[
            // {type: 'numbers', title: '#'},
            {field: 'orderTime', title: '日期'},
            {field: 'orderNo', title: '单据编号', align: 'center'}
        ]],
        done: function (res, curr, count) {
            $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
            // 绑定鼠标右键
            tableX.bindCtxMenu('originTablexs', function (d) {
                return [
                    {
                        icon: 'layui-icon layui-icon-ok',
                        name: '一键出库',
                        click: function (d) {
                            autoOut(d.id);
                        }
                    }
                ]
            })
        }
    });
    /* 表格搜索 */
    form.on('submit(originTablexsSearch)', function (data) {
        insTb.reload({where: data.field});
        return false;
    });
    /* 表格重置 */
    form.on('submit(originTbReset)', function (data) {
        insTb.reload({where: null});
        insTb2.reload({where: null, page: {curr: 1}});
        return false;
    });
    /* 表格头工具栏点击事件 */
    table.on('toolbar(originTablexs)', function (obj) {
        if (obj.event === 'add') { // 添加
            showEdit();
        } else if (obj.event === 'edit') { // 修改
            if (selObj == null) {
                return;
            }
            showEdit(selObj.data);
        } else if (obj.event === 'del') { // 删除
            if (selObj == null) {
                return;
            }
            doDel(selObj);
        }
    });
    /* 监听行单击事件 */
    var selObj;
    table.on('row(originTablexs)', function (obj) {
        selObj = obj;
        obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
        insTb2.reload({where: {order_id: obj.data.id}, page: {curr: 1}});
    });
    /* 显示表单弹窗 */
    function showEdit(mData) {
        admin.open({
            type: 1,
            title: (mData ? '修改' : '添加') + '项目',
            content: $('#hostEditDialog').html(),
            success: function (layero, dIndex) {
                // 回显表单数据
                form.val('hostEditForm', mData);
                // 表单提交事件
                form.on('submit(hostEditSubmit)', function (data) {
                    var loadIndex = layer.load(2);
                    $.ajax({
                        url: baseUrl+"/host/"+(mData?'update':'add')+"/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: data.field,
                        method: 'POST',
                        success: function (res) {
                            layer.close(loadIndex);
                            selObj = null;
                            if (res.code === 200){
                                layer.close(dIndex);
                                layer.msg(res.msg, {icon: 1});
                                insTb.reload();
                            } else if (res.code === 403){
                                top.location.href = baseUrl+"/";
                            } else {
                                layer.msg(res.msg, {icon: 2});
                            }
                        }
                    })
                    return false;
                });
            }
        });
    }
    /* 删除 */
    function doDel(obj) {
        layer.confirm('确定要删除此单据类型吗?', {
            skin: 'layui-layer-admin',
            shade: .1
        }, function (i) {
            layer.close(i);
            var loadIndex = layer.load(2);
            $.ajax({
                url: baseUrl+"/host/delete/one/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {param: JSON.stringify(obj.data)},
                method: 'POST',
                success: function (res) {
                    selObj = null;
                    layer.close(loadIndex);
                    if (res.code === 200){
                        layer.closeAll();
                        insTb.reload();
                        $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    } else {
                        layer.msg(res.msg, {icon: 2});
                    }
                }
            })
        });
    }
})
src/main/webapp/static/js/wrkMast/wrkMast.js
@@ -30,6 +30,7 @@
            ,{field: 'staNo$', align: 'center',title: '目标站'}
            ,{field: 'sourceLocNo$', align: 'center',title: '源库位'}
            ,{field: 'locNo$', align: 'center',title: '目标库位'}
            ,{field: 'pauseMk', align: 'center',title: '订单号'}
            ,{field: 'barcode', align: 'center',title: '条码'}
            ,{field: 'preHave', align: 'center',title: '先入品', hide: true}
            ,{field: 'takeNone', align: 'center',title: '空操作', hide: true}
src/main/webapp/static/js/wrkMastLog/wrkMastLog.js
@@ -60,6 +60,7 @@
            // ,{field: 'appeUser$', align: 'center',title: '创建者',event: 'appeUser', style: 'cursor:pointer'}
            // ,{field: 'appeTime$', align: 'center',title: '添加时间'}
            ,{field: 'barcode', align: 'center',title: '条码'}
            ,{field: 'pauseMk', align: 'center',title: '订单号'}
            // ,{field: 'fullPlt', align: 'center',title: '满板', templet:function(row){
            //         var html = "<input value='fullPlt' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
            //         if(row.fullPlt === 'Y'){html += " checked ";}
src/main/webapp/views/locDetl/locDetl.html
@@ -31,7 +31,7 @@
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="合同号" autocomplete="off">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
    </div>
<!--    <div class="layui-inline">-->
@@ -41,16 +41,16 @@
<!--    </div>-->
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="condition" placeholder="商品名称" autocomplete="off">
            <input class="layui-input" type="text" name="brand" placeholder="仓库" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
<!--    <div class="layui-inline">-->
<!--        <div class="layui-input-inline">-->
<!--            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">-->
<!--        </div>-->
    </div>
<!--    </div>-->
    <!-- 待添加 -->
    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
src/main/webapp/views/order/out.html
@@ -75,7 +75,7 @@
                                <input name="orderNo" class="layui-input" placeholder="输入单据编号" autocomplete="off"/>
                            </div>
                            <div class="layui-inline">
                                <button class="layui-btn icon-btn" lay-filter="originTableSearch" lay-submit>
                                <button class="layui-btn icon-btn" lay-filter="originTablenotxsSearch" lay-submit>
                                    <i class="layui-icon">&#xe615;</i>搜索
                                </button>
                                <button class="layui-btn icon-btn" lay-filter="originTbReset" lay-submit>
@@ -84,7 +84,7 @@
                            </div>
                        </div>
                    </form>
                    <table id="originTable" lay-filter="originTable"></table>
                    <table id="originTablenotxs" lay-filter="originTablenotxs"></table>
                </div>
            </div>
        </div>
@@ -266,7 +266,7 @@
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/tools/md5.js"></script>
<script type="text/javascript" src="../../static/js/orderTable.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/orderTablenotxs.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/order/out.js" charset="utf-8"></script>
<!--<script type="text/template" id="takeSiteSelectTemplate">-->
<!--    {{#each data}}-->
src/main/webapp/views/order/outAll.html
@@ -75,7 +75,7 @@
                                <input name="orderNo" class="layui-input" placeholder="输入单据编号" autocomplete="off"/>
                            </div>
                            <div class="layui-inline">
                                <button class="layui-btn icon-btn" lay-filter="originTableSearch" lay-submit>
                                <button class="layui-btn icon-btn" lay-filter="originTablexsSearch" lay-submit>
                                    <i class="layui-icon">&#xe615;</i>搜索
                                </button>
                                <button class="layui-btn icon-btn" lay-filter="originTbReset" lay-submit>
@@ -84,7 +84,7 @@
                            </div>
                        </div>
                    </form>
                    <table id="originTable" lay-filter="originTable"></table>
                    <table id="originTablexs" lay-filter="originTablexs"></table>
                </div>
            </div>
        </div>
@@ -277,7 +277,7 @@
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/tools/md5.js"></script>
<script type="text/javascript" src="../../static/js/orderTable.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/orderTablexs.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/order/outAll.js?v=1" charset="utf-8"></script>
<!--<script type="text/template" id="takeSiteSelectTemplate">-->
<!--    {{#each data}}-->
src/main/webapp/views/order/outLocDetlQuery.html
@@ -126,14 +126,9 @@
                <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="brand" placeholder="生产线" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="sku" placeholder="等级" autocomplete="off">
        <div class="layui-input-inline" style="margin-right: 100px;">
            <div id="condition" name="condition">
            </div>
        </div>
        <!-- 日期范围 -->
@@ -200,9 +195,10 @@
</script>
<script>
    var conditionXmSelect;
    function getCol() {
        var cols = [
            {type: 'checkbox', merge: ['locNo']}
            {type: 'checkbox'}
            , {field: 'locNo', align: 'center', title: '库位号', merge: true, style: 'font-weight: bold'}
            // ,{field: 'locNo$', align: 'center',title: '库位号'}
        ];
@@ -217,7 +213,7 @@
    }).extend({
        notice: 'notice/notice',
    })
        .use(['table', 'notice', 'laydate', 'form', 'admin', 'tableMerge'], function () {
        .use(['table', 'notice', 'laydate', 'form', 'admin', 'tableMerge','xmSelect'], function () {
            var table = layui.table;
            var $ = layui.jquery;
            var layer = layui.layer;
@@ -226,6 +222,7 @@
            var admin = layui.admin;
            var tableMerge = layui.tableMerge;
            var notice = layui.notice;
            var xmSelect = layui.xmSelect;
            $('#matnr').val(parent.matnR);
            $('#anfme').val(parent.anfme);
@@ -359,6 +356,26 @@
                }
            });
            conditionXmSelect = xmSelect.render({
                el: '#condition',
                style: {
                    width: '200px',
                },
                autoRow: true,
                toolbar: {show: true},
                filterable: true,
                data: [
                    {
                        name: '成品智能立库',
                        value: '成品智能立库'
                    },
                    {
                        name: '特采智能立库',
                        value: '特采智能立库'
                    }
                ]
            })
            // 搜索栏搜索事件
            form.on('submit(search)', function (data) {
                tableReload();
src/main/webapp/views/order/outLocDetlQuery1.html
@@ -126,14 +126,9 @@
                <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="brand" placeholder="生产线" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="sku" placeholder="等级" autocomplete="off">
        <div class="layui-input-inline" style="margin-right: 100px;">
            <div id="condition" name="condition">
            </div>
        </div>
        <!-- 日期范围 -->
@@ -200,9 +195,10 @@
</script>
<script>
    var conditionXmSelect;
    function getCol() {
        var cols = [
            {type: 'checkbox', merge: ['locNo']}
            {type: 'checkbox'}
            , {field: 'locNo', align: 'center', title: '库位号', merge: true, style: 'font-weight: bold'}
            // ,{field: 'locNo$', align: 'center',title: '库位号'}
        ];
@@ -217,7 +213,7 @@
    }).extend({
        notice: 'notice/notice',
    })
        .use(['table', 'notice', 'laydate', 'form', 'admin', 'tableMerge'], function () {
        .use(['table', 'notice', 'laydate', 'form', 'admin', 'tableMerge','xmSelect'], function () {
            var table = layui.table;
            var $ = layui.jquery;
            var layer = layui.layer;
@@ -227,6 +223,7 @@
            var tableMerge = layui.tableMerge;
            var notice = layui.notice;
            var dataSource = [];
            var xmSelect = layui.xmSelect;
            $('#matnr').val(parent.matnR);
            $('#anfme').val(parent.anfme);
@@ -297,6 +294,25 @@
                }
            });
            conditionXmSelect = xmSelect.render({
                el: '#condition',
                style: {
                    width: '200px',
                },
                autoRow: true,
                toolbar: {show: true},
                filterable: true,
                data: [
                    {
                        name: '成品智能立库',
                        value: '成品智能立库'
                    },
                    {
                        name: '特采智能立库',
                        value: '特采智能立库'
                    }
                ]
            })
            // 监听复选框选择事件
            table.on('checkbox(stockOut)', function(obj){
                var data = obj.data;
src/main/webapp/views/pakStore/locDetlCheckQuery.html
@@ -89,7 +89,7 @@
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="batch" placeholder="合同号" autocomplete="off">
                <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
            </div>
        </div>
        <!-- 待添加 -->
src/main/webapp/views/report/locDetl.html
@@ -25,8 +25,8 @@
<table class="layui-hide" id="locDetlByMap" lay-filter="locDetlByMap"></table>
</body>
<script type="text/html" id="operateDetl">
<!--    <button id="batch" class="layui-btn layui-btn-primary layui-btn-radius" style="height: auto" lay-submit lay-filter="batch">修改合同号</button>-->
    <a class="layui-btn layui-btn-xs layui-btn-danger btn-pakoutPreview" lay-event="pakoutPreview"><i class="layui-icon layui-icon-prev-circle"></i>修改合同号</a>
<!--    <button id="batch" class="layui-btn layui-btn-primary layui-btn-radius" style="height: auto" lay-submit lay-filter="batch">修改批号</button>-->
    <a class="layui-btn layui-btn-xs layui-btn-danger btn-pakoutPreview" lay-event="pakoutPreview"><i class="layui-icon layui-icon-prev-circle"></i>修改批号</a>
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
@@ -99,11 +99,11 @@
        table.on('tool(locDetlByMap)', function (obj) {
            var data = obj.data;
            switch (obj.event) {
                // 修改合同号(批号)
                // 修改批号(批号)
                case 'pakoutPreview':
                    layer.open({
                        type: 2,
                        title: '修改合同号',
                        title: '修改批号',
                        maxmin: true,
                        area: ['500px', top.detailHeight],
                        shadeClose: false,
src/main/webapp/views/report/locDetl_detail.html
@@ -16,7 +16,7 @@
<div id="data-detail" class="layer_self_wrap">
    <form id="updateBatch" class="layui-form" style="height: 100%">
        <div class="layui-inline"  >
            <label class="layui-form-label"><span class="not-null">*</span>修改合同号:</label>
            <label class="layui-form-label"><span class="not-null">*</span>修改批号:</label>
            <div class="layui-input-inline">
                <input id="sku" class="layui-input" type="text" onkeyup="check(this.id, 'locDetl')">
            </div>
@@ -28,7 +28,7 @@
            </div>
        </div>
        <div class="layui-inline"  >
            <label class="layui-form-label"><span class="not-null"></span>原合同号:</label>
            <label class="layui-form-label"><span class="not-null"></span>原批号:</label>
            <div class="layui-input-inline">
                <input id="batch" class="layui-input" disabled ="disabled" type="text" onkeyup="check(this.id, 'locDetl')">
            </div>
src/main/webapp/views/report/viewWorkIn.html
@@ -21,7 +21,7 @@
<div id="search-box" class="layui-form layui-card-header">
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="合同号" autocomplete="off">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
src/main/webapp/views/report/viewWorkOut.html
@@ -21,7 +21,7 @@
<div id="search-box" class="layui-form layui-card-header">
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="合同号" autocomplete="off">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
src/main/webapp/views/waitPakin/waitPakin.html
@@ -21,7 +21,7 @@
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="合同号" autocomplete="off">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
src/main/webapp/views/waitPakinLog/waitPakinLog.html
@@ -21,7 +21,7 @@
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="合同号" autocomplete="off">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
    </div>
    <!-- 日期范围 -->
src/main/webapp/views/wrkDetl/wrkDetl.html
@@ -26,7 +26,7 @@
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="合同号" autocomplete="off">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
    </div>
    <!-- 日期范围 -->
src/main/webapp/views/wrkDetlLog/wrkDetlLog.html
@@ -26,7 +26,7 @@
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="batch" placeholder="合同号" autocomplete="off">
            <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
        </div>
    </div>
    <!-- 待添加 -->
src/main/webapp/views/wrkMast/wrkMast.html
@@ -73,6 +73,11 @@
            <input class="layui-input" type="text" name="crn_no" placeholder="堆垛机号" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="pause_mk" placeholder="订单号" autocomplete="off">
        </div>
    </div>
    <!-- 日期范围 -->
    <div class="layui-inline" style="width: 300px">
        <div class="layui-input-inline">
src/main/webapp/views/wrkMastLog/wrkMastLog.html
@@ -59,6 +59,11 @@
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="pause_mk" placeholder="订单号" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="condition" placeholder="请输入" autocomplete="off">
        </div>
    </div>