mrzhssss
2022-03-21 9c199e1f139b2e6eca02addd1eb6d55d11b41475
修复bug
12个文件已修改
740 ■■■■ 已修改文件
src/main/java/zy/cloud/wms/common/service/MainService.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/controller/OrderController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/controller/PickoutController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/controller/WorkController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/entity/Pickout.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/entity/PickoutDetl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/service/WorkService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java 168 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/ioWorks/matQuery.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pickout/pickout.js 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pickout/pickout.html 146 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/common/service/MainService.java
@@ -37,6 +37,10 @@
    private ReceiveService receiveService;
    @Autowired
    private ReceiveDetlService receiveDetlService;
    @Autowired
    private PickoutService pickoutService;
    @Autowired
    private PickoutDetlService pickoutDetlService;
    @Transactional
    public List<StoPreTab> stockOutPreview(OrderStoDto orderStoDto, Long hostId) {
@@ -186,7 +190,79 @@
        });
        return res;
    }
    public List<StoPreTab> orderOutPreview(OrderStoDto orderStoDto, Long hostId){
        if (Cools.isEmpty(orderStoDto) || Cools.isEmpty(orderStoDto.getDtos())) {
            throw new CoolException("数据异常,请联系管理员");
        }
        List<StoPreTab> res = new ArrayList<>();
        // 检查库存是否足够
//        locDetlService.checkLocDetlCount(orderStoDto.getDtos());
        for (MatnrDto matnrDto : orderStoDto.getDtos()) {
            // 判断物料是否存在
            Mat mat = matService.selectByMatnr(hostId, matnrDto.getMatnr());
            if (null == mat) {
                throw new CoolException(matnrDto.getMatnr() + "物料尚未更新。" + orderStoDto.getOrderNo() +"单据因此中断!");
            }
            Double sumAnfme = Optional.ofNullable(locDetlService.selectCountByMatnr(mat.getMatnr(), hostId)).orElse(0.0D);
            double lack = 0.0D;
            // 缺货
            if (sumAnfme < matnrDto.getCount()) {
                lack = matnrDto.getCount() - sumAnfme;
                // 视图对象
                StoPreTab tab = new StoPreTab();
                tab.setTitle(mat.getMaktx() + "(" + mat.getMatnr() + ")");
                tab.setMatnr(mat.getMatnr());
                tab.setMaktx(mat.getMaktx());
                tab.setAnfme(matnrDto.getCount());
                tab.setLocNo("缺货");
                tab.setTotal(lack);
                tab.setReduce(lack);
                tab.setRemQty(0.0D);
                tab.setPrior(false);
                tab.setPrior$("×");
                tab.setType(0);
                res.add(tab);
            }
            // 查询存有当前物料的货位
            List<LocDetl> locDetls = locDetlService.findOfSort(hostId, mat.getMatnr());
            double issued = Optional.of(matnrDto.getCount() - lack).orElse(0.0D) ;
            double anfme = issued;
            for (LocDetl locDetl : locDetls) {
                if (issued > 0) {
                    // 视图对象
                    StoPreTab tab = new StoPreTab();
                    tab.setTitle(mat.getMaktx() + "(" + mat.getMatnr() + ")");
                    tab.setMatnr(mat.getMatnr());
                    tab.setMaktx(mat.getMaktx());
                    tab.setAnfme(matnrDto.getCount());
                    tab.setLocNo(locDetl.getLocNo());
                    tab.setNodeId(locDetl.getNodeId());
                    tab.setTotal(locDetl.getAnfme());
                    tab.setReduce(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
                    tab.setRemQty(tab.getTotal() - tab.getReduce());
                    tab.setPrior(locDetlService.isPrior(locDetl.getNodeId(), mat.getMatnr()));
                    tab.setPrior$(tab.getPrior()?"✔":"×");
                    tab.setType(1);
                    res.add(tab);
                    // 剩余待出数量递减
                    issued = issued - locDetl.getAnfme();
                }
            }
        }
        res.sort(new Comparator<StoPreTab>() {
            @Override
            public int compare(StoPreTab o1, StoPreTab o2) {
//                return o1.getMatnr().length() - o2.getMatnr().length();
                return (int) (o1.getAnfme() - o2.getAnfme());
            }
        });
        return res;
    }
    @Transactional
    public void stockOutProcess(OrderStoDto orderStoDto, Long hostId) {
        if (Cools.isEmpty(orderStoDto) || Cools.isEmpty(orderStoDto.getDtos())) {
@@ -316,6 +392,8 @@
        }
    }
    public static void main(String[] args) {
        for (int i = 2; i < 51; i++) {
@@ -329,4 +407,98 @@
                    "GO");
        }
    }
    public void orderStockOutProcess(OrderStoDto orderStoDto, Long hostId, Long userId) {
        if (Cools.isEmpty(orderStoDto) || Cools.isEmpty(orderStoDto.getDtos())) {
            return;
        }
//        Receive receive = receiveService.selectByOrderNo(receiveStoDto.getOrderNo(), hostId);
        Order order = orderService.selectByOrderNo(orderStoDto.getOrderNo(), hostId);
        if (order == null) {
            throw new CoolException(orderStoDto.getOrderNo() + "单据不存在");
        }
        Date now = new Date();
        // 检查库存是否足够
        locDetlService.checkLocDetlCount(orderStoDto.getDtos(), hostId);
        for (MatnrDto matnrDto : orderStoDto.getDtos()) {
            // 判断物料是否存在
            Mat mat = matService.selectByMatnr(hostId, matnrDto.getMatnr());
            if (null == mat) {
                throw new CoolException(matnrDto.getMatnr() + "物料尚未更新。" + matnrDto.getCount() +"单据因此中断!");
            }
            // 查询存有当前物料的货位
            List<LocDetl> locDetls = locDetlService.findOfSort(hostId, mat.getMatnr());
            double issued = Optional.ofNullable(matnrDto.getCount()).orElse(0.0D);
            Pickout pickout = new Pickout();
            pickout.setHostId(hostId);
            pickout.setUserId(userId);
            pickout.setWrkNo(String.valueOf(snowflakeIdWorker.nextId()));
            pickout.setWrkSts(1L);
            pickout.setCreateBy(userId.intValue());
            pickout.setUpdateBy(userId.intValue());
            pickoutService.insert(pickout);
            for (LocDetl locDetl : locDetls) {
                if (issued > 0) {
                    PickoutDetl pickoutDetl = new PickoutDetl();
                    pickoutDetl.setHeadId(pickout.getId());
                    pickoutDetl.setNodeId(locDetl.getNodeId());
                    pickoutDetl.setNodeName(locDetl.getLocNo());
                    pickoutDetl.setAnfme(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
                    pickoutDetl.setMatnr(locDetl.getMatnr());
                    pickoutDetl.setMaktx(locDetl.getMaktx());
                    pickoutDetl.setName(locDetl.getName());
                    pickoutDetl.setSpecs(locDetl.getSpecs());
                    pickoutDetl.setModel(locDetl.getModel());
                    pickoutDetl.setBatch(locDetl.getBatch());
                    pickoutDetl.setUnit(locDetl.getUnit());
                    pickoutDetl.setBarcode(locDetl.getBarcode());
                    pickoutDetl.setPrice(locDetl.getPrice());
                    pickoutDetl.setWeight(locDetl.getWeight());
                    pickoutDetl.setStatus(1);
                    pickoutDetl.setCreateBy(userId.intValue());
                    pickoutDetl.setUpdateBy(userId.intValue());
//                    // 保存出库通知单
//                    Pakout pakout = new Pakout();
//                    pakout.setHostId(hostId);
//                    pakout.setWrkSts(1L);
//                    pakout.setAnfme(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
//                    pakout.setZpallet(locDetl.getZpallet());
//                    pakout.setLocNo(locDetl.getLocNo());
//                    pakout.setNodeId(locDetl.getNodeId());
//                    pakout.setWrkNo(String.valueOf(snowflakeIdWorker.nextId()));
//                    VersionUtils.setPakout(pakout, mat);
//                    pakout.setDocId(receive.getDocType()); // 单据类型
//                    pakout.setDocNum(receive.getOrderNo());    // 单据编号
//                    pakout.setCreateTime(now);
//                    pakout.setUpdateTime(now);
//                    pakout.setStatus(1);
                    if (!pickoutDetlService.insert(pickoutDetl)) {
                        throw new CoolException("保存出库通知单失败");
                    }
                    if (issued>=locDetl.getAnfme()) {
//                        // 删除库存明细
//                        if (!locDetlService.removeStock(locDetl.getNodeId(), mat.getMatnr())) {
//                            throw new CoolException("删除库存明细失败");
//                        }
                    } else {
//                        // 修改库存明细数量
//                        if (!locDetlService.reduceStock(locDetl.getNodeId(), mat.getMatnr(), issued)) {
//                            throw new CoolException("修改库存明细数量失败");
//                        }
                    }
                    // 剩余待出数量递减
                    issued = issued - locDetl.getAnfme();
                }
            }
            // 修改单据状态
            if (!orderService.updateSettle(orderStoDto.getOrderNo(), 2L, hostId)) {
                throw new CoolException("修改单据状态失败");
            }
        }
    }
}
src/main/java/zy/cloud/wms/manager/controller/OrderController.java
@@ -123,18 +123,14 @@
        for (Long id : ids) {
            Order target = orderService.selectOne(new EntityWrapper<Order>()
                    .eq("id", id));
            if (target.getSettle() != 0 || target.getSettle() != 1) {
            if (target.getSettle() == 0 || target.getSettle() == 1) {
                orderService.deleteById(id);
                orderDetlService.delete(new EntityWrapper<OrderDetl>()
                        .eq("order_id",id));
            }else {
                throw new CoolException("仅允许删除'初始化','待处理'状态的订单");
            }
        }
        if (Cools.isEmpty((Object) ids)){
            return R.error();
        }
        for (Long id : ids){
            if (!orderService.deleteById(id)) {
                throw new CoolException("服务器错误,请联系管理员");
            }
        }
        return R.ok();
    }
src/main/java/zy/cloud/wms/manager/controller/PickoutController.java
@@ -7,6 +7,8 @@
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.DateUtils;
import zy.cloud.wms.manager.entity.Pickout;
import zy.cloud.wms.manager.entity.PickoutDetl;
import zy.cloud.wms.manager.service.PickoutDetlService;
import zy.cloud.wms.manager.service.PickoutService;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
@@ -23,6 +25,8 @@
    @Autowired
    private PickoutService pickoutService;
    @Autowired
    private PickoutDetlService pickoutDetlService;
    @RequestMapping(value = "/pickout/{id}/auth")
    @ManagerAuth
@@ -78,6 +82,8 @@
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            pickoutDetlService.delete(new EntityWrapper<PickoutDetl>()
                    .eq("head_id",id));
            pickoutService.deleteById(id);
        }
        return R.ok();
src/main/java/zy/cloud/wms/manager/controller/WorkController.java
@@ -77,9 +77,7 @@
    @RequestMapping("/stock/out/print")
    @ManagerAuth(memo = "拣货单打印")
    public R stockOutPrint(@RequestBody StockOutParam stockOutParam) {
        return workService.stockInPrint(stockOutParam, getUserId(), getHostId());
        return workService.stockOutPrint(stockOutParam, getUserId(), getHostId());
    }
    @RequestMapping("/stock/allot")
@@ -163,6 +161,7 @@
        return workService.initOrder(param, getUserId(), getHostId());
    }
    @RequestMapping("/stock/transfer")
    @ManagerAuth(memo = "库存调拨")
    public R stockTransfer(@RequestBody AsrsTransferParam number) {
@@ -211,6 +210,13 @@
                eq("host_id", getHostId()).orderBy("create_time", false).eq("doc_class",docClass));
        return R.ok().add(docTypes);
    }
    @RequestMapping("docType/out/get")
    @ManagerAuth
    public R getDocOutTypeData(Integer docClass){
        List<DocType> docTypes = docTypeService.selectList(new EntityWrapper<DocType>().eq("status", 1).
                eq("host_id", getHostId()).orderBy("create_time", false).eq("doc_class",docClass));
        return R.ok().add(docTypes);
    }
    // 获取所有客户
    @RequestMapping("/cstmr/all/get")
src/main/java/zy/cloud/wms/manager/entity/Pickout.java
@@ -108,6 +108,18 @@
//            null    // 
//    );
    public String getWrkSts$(){
        if (this.wrkSts == 1) {
            return "未拣货";
        }
        if (this.wrkSts == 2) {
            return "未打印";
        }
        if (this.wrkSts == 3) {
            return "已完成";
        }
        return "";
    }
    public Long getId() {
        return id;
    }
src/main/java/zy/cloud/wms/manager/entity/PickoutDetl.java
@@ -69,7 +69,7 @@
     * 库位ID
     */
    @ApiModelProperty(value= "库位ID")
    @TableField("node_id")
    @TableField("nodeId")
    private Long nodeId;
    /**
@@ -217,7 +217,7 @@
    @ApiModelProperty(value= "修改人员ID")
    @TableField("update_by")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateBy;
    private Integer updateBy;
    /**
     * 备注
@@ -471,20 +471,9 @@
        this.updateTime = updateTime;
    }
    public Date getUpdateBy() {
        return updateBy;
    }
    public String getUpdateBy$(){
        if (Cools.isEmpty(this.updateBy)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateBy);
    }
    public void setUpdateBy(Date updateBy) {
        this.updateBy = updateBy;
    }
    public String getMemo() {
        return memo;
src/main/java/zy/cloud/wms/manager/service/WorkService.java
@@ -41,4 +41,5 @@
    R stockCheckAuditing(Long checkId, Long userId, Long hostId);
    R initOutOrder(InitOrderParam param, Long userId, Long hostId);
}
src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java
@@ -295,12 +295,12 @@
    @Override
    public R stockOutPreview(StockOutParam param, Long userId, Long hostId) {
        Wrapper<Receive> wrapper = new EntityWrapper<Receive>()
        Wrapper<Order> wrapper = new EntityWrapper<Order>()
                .eq("order_no", param.getOrderNo());
        if (hostId != null) {
            wrapper.eq("host_id", hostId);
        }
        Receive order_no = receiveService.selectOne(wrapper);
        Order order_no = orderService.selectOne(wrapper);
        if (order_no.getSettle() != 1){
            return R.error("此单据无法生成拣货单");
@@ -309,8 +309,8 @@
//        if (order.getSettle() != 1) {
//            return R.error("此单据无法生成拣货单");
//        }
        List<ReceiveDetl> receiveDetls = receiveDetlService.selectByOrderNo(order_no.getOrderNo(), hostId);
        if (Cools.isEmpty(receiveDetls)) {
        List<OrderDetl> orderDetls = orderDetlService.selectByOrderNo(order_no.getOrderNo(), hostId);
        if (Cools.isEmpty(orderDetls)) {
            return R.error("此单据已失效,请联系管理员");
        }
//        List<OrderDetl> orderDetls = orderDetlService.selectByOrderNo(order.getOrderNo(), hostId);
@@ -318,27 +318,27 @@
//            return R.error("此单据已失效,请联系管理员");
//        }
        ReceiveStoDto receiveStoDto = new ReceiveStoDto().create(order_no.getOrderNo(), receiveDetls);
        OrderStoDto orderStoDto = new OrderStoDto().create(order_no.getOrderNo(), orderDetls);
//        OrderStoDto dto = new OrderStoDto().create(order.getOrderNo(), orderDetls);
        return R.ok().add(mainService.receiveStockOutPreview(receiveStoDto, hostId));
        return R.ok().add(mainService.orderOutPreview(orderStoDto, hostId));
    }
    @Override
    public R stockOutCreate(StockOutParam param, Long userId, Long hostId) {
        Receive receive = receiveService.selectByOrderNo(param.getOrderNo(), hostId);
//        Order order = orderService.selectByOrderNo(param.getOrderNo(), hostId);
        if (receive.getSettle() != 1) {
//        Receive receive = receiveService.selectByOrderNo(param.getOrderNo(), hostId);
        Order order = orderService.selectByOrderNo(param.getOrderNo(), hostId);
        if (order.getSettle() != 1) {
            return R.error("此单据无法生成拣货单");
        }
        List<ReceiveDetl> receiveDetls = receiveDetlService.selectByOrderNo(param.getOrderNo(), hostId);
        List<OrderDetl> orderDetls = orderDetlService.selectByOrderNo(param.getOrderNo(), hostId);
//        List<OrderDetl> orderDetls = orderDetlService.selectByOrderNo(param.getOrderNo(), hostId);
        if (Cools.isEmpty(receiveDetls)) {
        if (Cools.isEmpty(orderDetls)) {
            return R.error("此单据已失效,请联系管理员");
        }
        ReceiveStoDto receiveStoDto = new ReceiveStoDto().create(receive.getOrderNo(), receiveDetls);
        OrderStoDto orderStoDto = new OrderStoDto().create(order.getOrderNo(), orderDetls);
//        OrderStoDto dto = new OrderStoDto().create(receive.getOrderNo(), receiveDetls);
        // 开始整理出库数据
        mainService.receiveStockOutProcess(receiveStoDto,hostId);
        mainService.orderStockOutProcess(orderStoDto,hostId,userId);
        return R.ok("生成拣货单成功");
    }
@@ -690,9 +690,9 @@
        order1.setOrderNo(param.getOrderNo());
        order1.setOrderTime(param.getOrderTime());
        order1.setDocType(param.getDocType());
        order1.setItemId(item.getId());
        order1.setItemId(item == null? null : item.getId());
        order1.setItemName(param.getItem());
        order1.setCstmr(cstmr.getId());
        order1.setCstmr(cstmr == null? null : cstmr.getId());
        order1.setCstmrName(param.getCstmr());
        order1.setSettle(1L);
        order1.setStatus(1);
@@ -772,28 +772,28 @@
                log.error("{}商品不存在。", dto.getMatnr());
                continue;
            }
            ReceiveDetl receiveDetl = new ReceiveDetl();
            receiveDetl.setHostId(hostId);
            receiveDetl.setOrderId(order1.getId());
            receiveDetl.setAnfme(dto.getCount());
            receiveDetl.setCreateTime(now);
            receiveDetl.setCreateBy(userId);
            receiveDetl.setUpdateBy(userId);
            receiveDetl.setUpdateTime(now);
            receiveDetl.setStatus(1);
            receiveDetl.setMatnr(mat.getMatnr());
            receiveDetl.setMaktx(mat.getMaktx());
            receiveDetl.setName(mat.getName());
            receiveDetl.setSpecs(mat.getSpecs());
            receiveDetl.setModel(mat.getModel());
            receiveDetl.setBatch(mat.getBatch());
            receiveDetl.setUnit(mat.getUnit());
            receiveDetl.setBarcode(mat.getBarcode());
            receiveDetl.setItemNum(mat.getItemNum());
            receiveDetl.setCount(Double.valueOf(mat.getCount()));
            receiveDetl.setUnitPrice(mat.getPrice());
            receiveDetl.setWeight(mat.getWeight());
            if (!receiveDetlService.insert(receiveDetl)) {
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.setHostId(hostId);
            orderDetl.setOrderId(order1.getId());
            orderDetl.setAnfme(dto.getCount());
            orderDetl.setCreateTime(now);
            orderDetl.setCreateBy(userId);
            orderDetl.setUpdateBy(userId);
            orderDetl.setUpdateTime(now);
            orderDetl.setStatus(1);
            orderDetl.setMatnr(mat.getMatnr());
            orderDetl.setMaktx(mat.getMaktx());
            orderDetl.setName(mat.getName());
            orderDetl.setSpecs(mat.getSpecs());
            orderDetl.setModel(mat.getModel());
            orderDetl.setBatch(mat.getBatch());
            orderDetl.setUnit(mat.getUnit());
            orderDetl.setBarcode(mat.getBarcode());
            orderDetl.setItemNum(mat.getItemNum());
            orderDetl.setCount(mat.getCount() == null ? 0 : mat.getCount());
            orderDetl.setUnitPrice(mat.getPrice());
            orderDetl.setWeight(mat.getWeight());
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("保存订单明细失败");
            }
        }
@@ -999,4 +999,98 @@
        return R.ok();
    }
    @Override
//    @Transactional
    public R initOutOrder(InitOrderParam param, Long userId, Long hostId) {
        Order order_no = orderService.selectOne(new EntityWrapper<Order>()
                .eq("order_no", param.getOrderNo()));
//        Order order = orderService.selectByOrderNo(param.getOrderNo(), hostId);
        if (order_no != null) {
            return R.error("抱歉单号已存在,请修改单号");
        }
        Date now = new Date();
        Item item = itemService.selectByName(param.getItem());
        Cstmr cstmr = cstmrService.selectByName(param.getCstmr());
        // 新增订单表头
        order_no = new Order();
        order_no.setHostId(hostId);
        order_no.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
        order_no.setOrderNo(param.getOrderNo());
        order_no.setOrderTime(param.getOrderTime());
        order_no.setDocType(param.getDocType());
        order_no.setItemId(item==null?null:item.getId());
        order_no.setItemName(param.getItem());
        order_no.setCstmr(cstmr==null?null:cstmr.getId());
        order_no.setCstmrName(param.getCstmr());
        order_no.setSettle(1L);
        order_no.setStatus(1);
        order_no.setCreateTime(now);
        order_no.setCreateBy(userId);
        order_no.setUpdateTime(now);
        order_no.setUpdateBy(userId);
//        if (!orderService.insert(order)) {
//            throw new CoolException("保存订单表头失败!");
//        }
        if (!orderService.insert(order_no)) {
            throw new CoolException("保存订单表头失败!");
        }
//        // 遍历商品数量并保存
//        for (MatnrDto dto : param.getList()){
//            Mat mat = matService.selectByMatnr(hostId, dto.getMatnr());
//            if (mat == null) {
//                log.error("{}商品不存在。", dto.getMatnr());
//                continue;
//            }
//            OrderDetl orderDetl = new OrderDetl();
//            orderDetl.setHostId(hostId);
//            orderDetl.setOrderId(order.getId());  // 订单内码
//            orderDetl.setAnfme(dto.getCount());         // 数量
//            orderDetl.setCreateBy(userId);
//            orderDetl.setCreateTime(now);
//            orderDetl.setUpdateBy(userId);
//            orderDetl.setUpdateTime(now);
//            orderDetl.setStatus(1);
//            VersionUtils.setOrderDetl(orderDetl, mat);
//            if (!orderDetlService.insert(orderDetl)) {
//                throw new CoolException("保存订单明细失败");
//            }
//        }
        // 遍历商品数量并保存
        for (MatnrDto dto : param.getList()){
            Mat mat = matService.selectByMatnr(hostId, dto.getMatnr());
            if (mat == null) {
                log.error("{}商品不存在。", dto.getMatnr());
                continue;
            }
            OrderDetl orderDtel = new OrderDetl();
            orderDtel.setHostId(hostId);
            orderDtel.setOrderId(order_no.getId());
            orderDtel.setAnfme(dto.getCount());
            orderDtel.setCreateTime(now);
            orderDtel.setCreateBy(userId);
            orderDtel.setUpdateBy(userId);
            orderDtel.setUpdateTime(now);
            orderDtel.setStatus(1);
            orderDtel.setMatnr(mat.getMatnr());
            orderDtel.setMaktx(mat.getMaktx());
            orderDtel.setName(mat.getName());
            orderDtel.setSpecs(mat.getSpecs());
            orderDtel.setModel(mat.getModel());
            orderDtel.setBatch(mat.getBatch());
            orderDtel.setUnit(mat.getUnit());
            orderDtel.setBarcode(mat.getBarcode());
            orderDtel.setItemNum(mat.getItemNum());
            orderDtel.setCount(mat.getCount() == null ? 0 : mat.getCount());
            orderDtel.setUnitPrice(mat.getPrice());
            orderDtel.setWeight(mat.getWeight());
            if (!orderDetlService.insert(orderDtel)) {
                throw new CoolException("保存订单明细失败");
            }
        }
        return R.ok("创建订单成功");
    }
}
src/main/resources/mapper/OrderMapper.xml
@@ -44,7 +44,7 @@
    </resultMap>
    <update id="updateSettle">
        update man_receive set settle = #{settle} where 1=1 and order_no = #{orderNo} and host_id = #{hostId}
        update man_order set settle = #{settle} where 1=1 and order_no = #{orderNo} and host_id = #{hostId}
    </update>
    <update id="updateStatus">
        UPDATE man_order set settle = 2, wave_no = null WHERE order_no = #{orderNo}
src/main/webapp/static/js/ioWorks/matQuery.js
@@ -74,7 +74,7 @@
                    // 单据类型
                    var docTypeData;
                    $.ajax({
                        url: baseUrl+"/work/docType/all/get",
                        url: baseUrl+"/work/docType/out/get",
                        headers: {'token': localStorage.getItem('token')},
                        data:{docClass: 2},
                        method: 'POST',
src/main/webapp/static/js/pickout/pickout.js
@@ -9,6 +9,93 @@
    var form = layui.form;
    var admin = layui.admin;
    /****************************************** 左边表 *************************************************/
    var leftTB = table.render({
        elem: '#leftTable',
        url: baseUrl + '/pickout/list/auth',
        height: 'full-100',
        headers: {token: localStorage.getItem('token')},
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        parseData: function (res){
          return{
              'code': res.code,
              'msg': res.msg,
              'count': res.data.total,
              'data': res.data.records
          }
        },
        response: {
            statusCode: 200
        },
        defaultToolbar: [],
        cols:[[
            // {type: 'checkbox'}
            {field: 'wrkNo', align: 'center',title: '任务号'}
            ,{field: 'id', align: 'center',title: '唯一ID',hide: true}
            ,{field: 'hostId', align: 'center',title: '商户ID', hide: true}
            ,{field: 'userId', align: 'center',title: '用户ID', hide: true}
            ,{field: 'wrkSts$', align: 'center',title: '工作状态' ,templet: '#wrkStsTpl' , width: 100}
            ,{field: 'zpallet', align: 'center',title: '条形码' , hide:true}
            ,{field: 'createTime$', align: 'center',title: '', hide:true}
            ,{field: 'createBy', align: 'center',title: '', hide:true}
            ,{field: 'updateTime$', align: 'center',title: '', hide:true}
            ,{field: 'updateBy', align: 'center',title: '', hide:true}
            ,{field: 'memo', align: 'center',title: '', hide:true}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:180}
        ]],
        done: function (res,curr,count){
            $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
        }
    });
    // 监听行工具事件
    table.on('tool(leftTable)', function(obj){
        var data = obj.data;
        switch (obj.event) {
            case 'complete':
                complete(data);
                break;
            case "del":
                var ids = [data.id];
                del(ids);
                break;
        }
    });
    /* 删除 */
    function del(ids) {
        layer.confirm('确定要删除选中数据吗?', {
            skin: 'layui-layer-admin',
            shade: .1
        }, function (i) {
            layer.close(i);
            var loadIndex = layer.load(2);
            $.ajax({
                url: baseUrl+"/pickout/delete/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {ids: ids},
                method: 'POST',
                success: function (res) {
                    layer.close(loadIndex);
                    if (res.code === 200){
                        layer.msg(res.msg, {icon: 1});
                        tableReload();
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    } else {
                        layer.msg(res.msg, {icon: 2});
                    }
                }
            })
        });
    }
    /****************************************** 右边表 *************************************************/
    // 数据渲染
    tableIns = table.render({
        elem: '#pickout',
@@ -20,20 +107,21 @@
        toolbar: '#toolbar',
        cellMinWidth: 50,
        cols: [[
            {type: 'checkbox'}
            // {type: 'checkbox'}
            {field: 'wrkNo', align: 'center',title: '任务号'}
            ,{field: 'id', align: 'center',title: '唯一ID'}
            ,{field: 'hostId', align: 'center',title: '商户ID'}
            ,{field: 'userId', align: 'center',title: '用户ID'}
            ,{field: 'wrkNo', align: 'center',title: '工作号'}
            ,{field: 'wrkSts', align: 'center',title: '工作状态'}
            ,{field: 'zpallet', align: 'center',title: '条形码'}
            ,{field: 'createTime$', align: 'center',title: ''}
            ,{field: 'createBy', align: 'center',title: ''}
            ,{field: 'updateTime$', align: 'center',title: ''}
            ,{field: 'updateBy', align: 'center',title: ''}
            ,{field: 'memo', align: 'center',title: ''}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:150}
            ,{field: 'wrkSts$', align: 'center',title: '工作状态' ,templet: '#wrkStsTpl' , width: 100}
            ,{field: 'zpallet', align: 'center',title: '条形码' , hide:true}
            ,{field: 'createTime$', align: 'center',title: '', hide:true}
            ,{field: 'createBy', align: 'center',title: '', hide:true}
            ,{field: 'updateTime$', align: 'center',title: '', hide:true}
            ,{field: 'updateBy', align: 'center',title: '', hide:true}
            ,{field: 'memo', align: 'center',title: '', hide:true}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:180}
        ]],
        request: {
            pageName: 'curr',
@@ -130,86 +218,12 @@
                break;
        }
    });
    // 监听行工具事件
    table.on('tool(pickout)', function(obj){
        var data = obj.data;
        switch (obj.event) {
            case 'edit':
                showEditModel(data);
                break;
            case "del":
                var ids = [data.id];
                del(ids);
                break;
        }
    });
    /* 弹窗 - 新增、修改 */
    function showEditModel(mData) {
        admin.open({
            type: 1,
            area: '600px',
            title: (mData ? '修改' : '添加') + '订单状态',
            content: $('#editDialog').html(),
            success: function (layero, dIndex) {
                layDateRender();
                form.val('detail', mData);
                form.on('submit(editSubmit)', function (data) {
                    var loadIndex = layer.load(2);
                    $.ajax({
                        url: baseUrl+"/pickout/"+(mData?'update':'add')+"/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: data.field,
                        method: 'POST',
                        success: function (res) {
                            layer.close(loadIndex);
                            if (res.code === 200){
                                layer.close(dIndex);
                                layer.msg(res.msg, {icon: 1});
                                tableReload();
                            } else if (res.code === 403){
                                top.location.href = baseUrl+"/";
                            }else {
                                layer.msg(res.msg, {icon: 2});
                            }
                        }
                    })
    /* 表格搜索 */
    form.on('submit(leftResearch)', function (data) {
        insTb.reload({where: {doc_name: data.field.docName,doc_class:2}});
                    return false;
                });
                $(layero).children('.layui-layer-content').css('overflow', 'visible');
                layui.form.render('select');
            }
        });
    }
    /* 删除 */
    function del(ids) {
        layer.confirm('确定要删除选中数据吗?', {
            skin: 'layui-layer-admin',
            shade: .1
        }, function (i) {
            layer.close(i);
            var loadIndex = layer.load(2);
            $.ajax({
                url: baseUrl+"/pickout/delete/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {ids: ids},
                method: 'POST',
                success: function (res) {
                    layer.close(loadIndex);
                    if (res.code === 200){
                        layer.msg(res.msg, {icon: 1});
                        tableReload();
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    } else {
                        layer.msg(res.msg, {icon: 2});
                    }
                }
            })
        });
    }
    // 搜索
    form.on('submit(search)', function (data) {
src/main/webapp/views/pickout/pickout.html
@@ -10,38 +10,152 @@
    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <link rel="stylesheet" href="../../static/css/common.css" media="all">
    <style>
        body {
            color: #595959;
            background-color: #f5f7f9;
        }
        /* 左表 */
        #docTypeTable + .layui-table-view .layui-table-tool-temp {
            padding-right: 0;
        }
        #docTypeTable + .layui-table-view .layui-table-body tbody > tr td {
            cursor: pointer;
        }
        #docTypeTable + .layui-table-view .layui-table-body tbody > tr.layui-table-click {
            background-color: #fff3e0;
        }
        #docTypeTable + .layui-table-view .layui-table-body tbody > tr.layui-table-click td:last-child > div:before {
            position: absolute;
            right: 6px;
            content: "\e602";
            font-size: 12px;
            font-style: normal;
            font-family: layui-icon,serif !important;
            -webkit-font-smoothing: antialiased;
            -moz-osx-font-smoothing: grayscale;
        }
        #left-table .layui-table-grid-down {
            display: none;
        }
        .layui-form.layui-border-box.layui-table-view {
            border-width: 1px;
        }
        #left-table .layui-table thead th {
            /* font-weight: bold; */
            text-align: left;
        }
    </style>
</head>
<body>
<!-- 搜索栏 -->
<div id="search-box" class="layui-form layui-card-header">
<!-- 正文开始 -->
<div class="layui-fluid" style="padding-bottom: 0;">
    <div class="layui-row layui-col-space15">
        <div class="layui-col-md3" id="left-table">
            <div class="layui-card">
                <div class="layui-card-body" style="padding: 10px;">
                    <!-- 表格工具栏1 -->
                    <form class="layui-form toolbar">
                        <div class="layui-form-item">
                            <div class="layui-inline" style="max-width: 140px;">
                                <input name="docName" class="layui-input" placeholder="请输入任务号"/>
                            </div>
    <div class="layui-inline">
                                <button class="layui-btn icon-btn" lay-filter="leftResearch" lay-submit>
                                    <i class="layui-icon">&#xe615;</i>搜索
                                </button>
                            </div>
                        </div>
                    </form>
                    <!-- 数据表格1 -->
                    <table id="leftTable" lay-filter="leftTable"></table>
                </div>
            </div>
        </div>
        <div class="layui-col-md9">
            <div class="layui-card">
                <div class="layui-card-body" style="padding: 10px;">
                    <!-- 表格工具栏2 -->
                    <form class="layui-form toolbar">
                        <div class="layui-form-item">
                            <div class="layui-inline">
                                <label class="layui-form-label">订单编号:</label>
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="id" placeholder="编号" autocomplete="off">
                                    <input name="id" class="layui-input"type="text" name="id" placeholder="编号" autocomplete="off"/>
        </div>
    </div>
    <!-- 待添加 -->
    <div id="data-search-btn" class="layui-btn-container layui-form-item">
        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索</button>
        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置</button>
                            <div class="layui-inline">&emsp;
                                <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
                                    <i class="layui-icon">&#xe615;</i>搜索
                                </button>
                                <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
                                    <i class="layui-icon">&#xe666;</i>重置
                                </button>
                            </div>
                        </div>
                    </form>
                    <!-- 数据表格2 -->
                    <table id="pickout" lay-filter="pickout"></table>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- 表格 -->
<div class="layui-form">
    <table class="layui-hide" id="pickout" lay-filter="pickout"></table>
</div>
<!--&lt;!&ndash; 搜索栏 &ndash;&gt;-->
<!--<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="id" placeholder="编号" autocomplete="off">-->
<!--        </div>-->
<!--    </div>-->
<!--    &lt;!&ndash; 待添加 &ndash;&gt;-->
<!--    <div id="data-search-btn" class="layui-btn-container layui-form-item">-->
<!--        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索</button>-->
<!--        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置</button>-->
<!--    </div>-->
<!--</div>-->
<!--&lt;!&ndash; 表格 &ndash;&gt;-->
<!--<div class="layui-form">-->
<!--    <table class="layui-hide" id="pickout" lay-filter="pickout"></table>-->
<!--</div>-->
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button>
        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">删除</button>
<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button>-->
<!--        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">删除</button>-->
        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">导出</button>
    </div>
</script>
<script type="text/html" id="operate">
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">删除</a>
    {{#if (d.wrkSts == 1||d.wrkSts == 2){ }}
    <a class="layui-btn layui-btn-xs btn-complete" lay-event="complete">完成</a>
    {{# } }}
<!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">详情</a>-->
    {{#if (d.wrkSts == 1||d.wrkSts == 2){ }}
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">撤销</a>
    {{# } }}
<!--    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a>-->
</script>
<script type="text/html" id="wrkStsTpl">
    <span name="wrkSts"
          {{# if( d.wrkSts === 1){ }}
          class="layui-badge layui-badge-blue"
          {{# } else if(d.wrkSts === 2){ }}
          class="layui-badge layui-badge-red"
          {{# } else if(d.wrkSts === 3){ }}
          class="layui-badge layui-badge-green"
          {{# } }}
    >{{d.wrkSts$}}</span>
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>