自动化立体仓库 - WMS系统
18516761980
2022-06-21 873f0e8c1bad2dc77affd40d381919ac26317d39
Merge branch 'master' of https://gitee.com/luxiaotao1123/zy-asrs into hylyasrs

# Conflicts:
# src/main/java/com/zy/asrs/controller/MatCodeController.java
# src/main/java/com/zy/asrs/utils/VersionUtils.java
# src/main/java/com/zy/common/utils/excel/matcode/MatCodeExcel.java
# src/main/java/com/zy/common/utils/excel/matcode/MatCodeExcelListener.java
# src/main/resources/application.yml
31个文件已修改
1个文件已删除
2011 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OrderController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/WaitPakinController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/AdjDetl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocDetl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/OrderDetl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/Pack.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ViewStayTimeBean.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ViewWorkInBean.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakin.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakinLog.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkDetl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkDetlLog.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderDetlService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/UpdateThread.cs 1732 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderDetlMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/adjDetl/adjDetl.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/out.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderDetl/orderDetl.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pack/pack.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pakStore/pakStore.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pakStore/stockAdjust.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/order.html 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/out.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/orderDetl/orderDetl.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pack/pack.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -7,13 +7,9 @@
import com.core.annotations.ManagerAuth;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OrderDomainParam;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.service.*;
import com.zy.common.model.DetlDto;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +29,10 @@
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private WaitPakinService waitPakinService;
    @RequestMapping(value = "/order/nav/list/auth")
    @ManagerAuth
@@ -90,7 +90,12 @@
    @Transactional
    public R formAdd(@RequestBody OrderDomainParam param){
        if(Cools.isEmpty(param.getOrderNo())){
            param.setOrderNo("HAND" + snowflakeIdWorker.nextId());
            String prefix = "";
            DocType docType = docTypeService.selectById(param.getDocType());
            if(!Cools.isEmpty(docType)){
                prefix = docType.getPakin() == 1 ? "RK" : "CK";
            }
            param.setOrderNo(prefix + snowflakeIdWorker.nextId());
        }
        Order order = orderService.selectByNo(param.getOrderNo());
        if (order != null) {
@@ -217,10 +222,6 @@
    }
    // ------------------------------------------------------------------------------------------------
    @RequestMapping(value = "/order/{id}/auth")
@@ -262,6 +263,16 @@
        if (Cools.isEmpty(order) || null == order.getId()){
            return R.error();
        }
        //订单完结前,判断是否存在作业中数据,存在则不能完结
        if(order.getSettle() == 4){
            int wrkCount = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("order_no",order.getOrderNo()));
            int pakinCount = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("order_no",order.getOrderNo()));
            if (wrkCount > 0 || pakinCount > 0) {
                throw new CoolException("存在作业中数据,不能完结。请检查入库通知档和工作档");
            }
        }
        order.setUpdateBy(getUserId());
        order.setUpdateTime(new Date());
        if (!orderService.updateById(order)) {
src/main/java/com/zy/asrs/controller/WaitPakinController.java
@@ -11,9 +11,14 @@
import com.core.common.DateUtils;
import com.core.common.R;
import com.zy.asrs.entity.WaitPakin;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.WaitPakinService;
import com.zy.asrs.service.WrkMastService;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
@@ -26,6 +31,10 @@
    @Autowired
    private WaitPakinService waitPakinService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private WrkMastService wrkMastService;
    @RequestMapping(value = "/waitPakin/{id}/auth")
    @ManagerAuth
@@ -82,13 +91,24 @@
    @RequestMapping(value = "/waitPakin/delete/auth")
    @ManagerAuth
    @Transactional
    public R delete(@RequestParam String param){
        List<WaitPakin> list = JSONArray.parseArray(param, WaitPakin.class);
        if (Cools.isEmpty(list)){
            return R.error();
            return R.error("数据为空");
        }
        for (WaitPakin entity : list){
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("barcode", entity.getZpallet()));
            if(!Cools.isEmpty(wrkMasts) || wrkMasts.size() > 0){
                return R.error("条码已生成入库工作档,禁止删除");
            }
            waitPakinService.delete(new EntityWrapper<>(entity));
            //订单关联,修改订单作业数量
            if (!Cools.isEmpty(entity.getOrderNo())) {
                if (!orderDetlService.decrease(entity.getOrderNo(), entity.getMatnr(), entity.getBatch(), entity.getAnfme())) {
                    return R.error("订单数据回滚失败");
                }
            }
        }
        return R.ok();
    }
src/main/java/com/zy/asrs/entity/AdjDetl.java
@@ -44,9 +44,9 @@
    private String matnr;
    /**
     * 序列码
     * 批号
     */
    @ApiModelProperty(value= "序列码")
    @ApiModelProperty(value= "批号")
    private String batch;
    /**
src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -43,8 +43,8 @@
    @ExcelProperty("商品名称")
    private String maktx;
    @ApiModelProperty(value= "序列码")
    @ExcelProperty("序列码")
    @ApiModelProperty(value= "批号")
    @ExcelProperty("批号")
    private String batch;
    @ApiModelProperty(value= "单据编号")
src/main/java/com/zy/asrs/entity/OrderDetl.java
@@ -84,9 +84,9 @@
    private String maktx;
    /**
     * 序列码
     * 批号
     */
    @ApiModelProperty(value= "序列码")
    @ApiModelProperty(value= "批号")
    private String batch;
    /**
src/main/java/com/zy/asrs/entity/Pack.java
@@ -49,9 +49,9 @@
    private String matnr;
    /**
     * 序列码
     * 批号
     */
    @ApiModelProperty(value= "序列码")
    @ApiModelProperty(value= "批号")
    private String batch;
    /**
src/main/java/com/zy/asrs/entity/ViewStayTimeBean.java
@@ -44,7 +44,7 @@
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    @ApiModelProperty(value= "序列码")
    @ApiModelProperty(value= "批号")
    private String batch;
    @ApiModelProperty(value= "单据编号")
src/main/java/com/zy/asrs/entity/ViewWorkInBean.java
@@ -55,7 +55,7 @@
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    @ApiModelProperty(value= "序列码")
    @ApiModelProperty(value= "批号")
    private String batch;
    @ApiModelProperty(value= "单据编号")
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -33,7 +33,7 @@
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    @ApiModelProperty(value= "序列码")
    @ApiModelProperty(value= "批号")
    private String batch;
    @ApiModelProperty(value= "单据编号")
src/main/java/com/zy/asrs/entity/WaitPakinLog.java
@@ -32,7 +32,7 @@
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    @ApiModelProperty(value= "序列码")
    @ApiModelProperty(value= "批号")
    private String batch;
    @ApiModelProperty(value= "单据编号")
src/main/java/com/zy/asrs/entity/WrkDetl.java
@@ -59,9 +59,9 @@
    private String maktx;
    /**
     * 序列码
     * 批号
     */
    @ApiModelProperty(value= "序列码")
    @ApiModelProperty(value= "批号")
    private String batch;
    /**
src/main/java/com/zy/asrs/entity/WrkDetlLog.java
@@ -58,9 +58,9 @@
    private String maktx;
    /**
     * 序列码
     * 批号
     */
    @ApiModelProperty(value= "序列码")
    @ApiModelProperty(value= "批号")
    private String batch;
    /**
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -31,5 +31,7 @@
    int addToLogTable(OrderDetl orderDetl);
    int increaseWorkQty(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("qty")Double workQty);
    int increaseQtyByOrderNo(@Param("orderNo")String orderNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("qty")Double qty);
    int increaseWorkQty(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("workQty")Double workQty);
}
src/main/java/com/zy/asrs/service/OrderDetlService.java
@@ -26,6 +26,8 @@
    boolean addToLogTable(OrderDetl orderDetl);
    boolean increaseQtyByOrderNo(String orderNo, String matnr, String batch, Double qty);
    /**
     * 入出库任务生成时,更新单据表中作业数量
     * @param orderId
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -199,7 +199,7 @@
                        // todo 盘点记录、保存调整记录
                        // 修改明细
                        if (!wrkDetlService.updateAnfme(wrkDetl1.getAnfme(), wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch())) {
                            throw new CoolException(wrkMast.getWrkNo() + "盘点任务," + wrkDetl.getMatnr() + "商品," + wrkDetl.getBatch() + "序列码修改数量失败");
                            throw new CoolException(wrkMast.getWrkNo() + "盘点任务," + wrkDetl.getMatnr() + "商品," + wrkDetl.getBatch() + "批号修改数量失败");
                        }
                    }
                    iterator.remove();
@@ -212,7 +212,7 @@
        for (WrkDetl wrkDetl : wrkDetls) {
            // todo 盘点记录、保存调整记录
            if (!wrkDetlService.updateAnfme(-1.0D, wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch())) {
                throw new CoolException("删除" + wrkMast.getWrkNo() + "盘点任务," + wrkDetl.getMatnr() + "商品," + wrkDetl.getBatch() + "序列码任务明细失败");
                throw new CoolException("删除" + wrkMast.getWrkNo() + "盘点任务," + wrkDetl.getMatnr() + "商品," + wrkDetl.getBatch() + "批号任务明细失败");
            }
        }
@@ -229,7 +229,7 @@
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(userId);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("添加" + wrkMast.getWrkNo() + "盘点任务," + wrkDetl.getMatnr() + "商品," + wrkDetl.getBatch() + "序列码任务明细失败");
                throw new CoolException("添加" + wrkMast.getWrkNo() + "盘点任务," + wrkDetl.getMatnr() + "商品," + wrkDetl.getBatch() + "批号任务明细失败");
            }
        }
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java
@@ -73,6 +73,11 @@
        return this.baseMapper.addToLogTable(orderDetl) > 0;
    }
    @Override
    public boolean increaseQtyByOrderNo(String orderNo, String matnr, String batch, Double qty) {
        return this.baseMapper.increaseQtyByOrderNo(orderNo, matnr, batch, qty) > 0;
    }
    /**
     * 入出库任务生成时,更新单据表中作业数量
     * @param orderId
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -75,6 +75,8 @@
    private RowLastnoService rowLastnoService;
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private WaitPakinService waitPakinService;
    @Override
    @Transactional
@@ -631,7 +633,7 @@
                        // todo 盘点记录
                        // 修改库存
                        if (!locDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
                            throw new CoolException(locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "序列码修改数量失败");
                            throw new CoolException(locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "批号修改数量失败");
                        }
                        // 保存调整记录
                        AdjDetl adjDetl = new AdjDetl();
@@ -656,7 +658,7 @@
        for (LocDetl locDetl : locDetls) {
            // todo 盘点记录
            if (!locDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
                throw new CoolException("删除" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "序列码库存明细失败");
                throw new CoolException("删除" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "批号库存明细失败");
            }
            // 保存调整记录
            AdjDetl adjDetl = new AdjDetl();
@@ -686,7 +688,7 @@
            locDetl.setAppeUser(userId);
            locDetl.setAppeTime(now);
            if (!locDetlService.insert(locDetl)) {
                throw new CoolException("添加" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "序列码库存明细失败");
                throw new CoolException("添加" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "批号库存明细失败");
            }
            // 保存调整记录
            AdjDetl adjDetl = new AdjDetl();
@@ -772,17 +774,28 @@
        } else {
            throw new CoolException("当前工作状态无法取消");
        }
        // 订单关联
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        for (WrkDetl wrkDetl : wrkDetls) {
            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
                    throw new CoolException("订单数据回滚失败");
                }
                // 生成新的出库作业
//                        stockOutRe(wrkMast, wrkDetls);
        //取消入库工作档时,查询组托表,如果有将状态改为待处理
        if(wrkMast.getIoType() == 1) {
            WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
            if (!Cools.isEmpty(waitPakin)) {
                waitPakin.setIoStatus("N");
                waitPakinService.update(waitPakin, new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
            }
        }
//        // 订单关联
//        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
//        for (WrkDetl wrkDetl : wrkDetls) {
//            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
//                if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
//                    throw new CoolException("订单数据回滚失败");
//                }
//                // 生成新的出库作业
////                        stockOutRe(wrkMast, wrkDetls);
//            }
//        }
        // 取消操作人员记录
        wrkMast.setManuType("手动取消");
        wrkMast.setModiUser(userId);
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -2,10 +2,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
@@ -36,6 +33,8 @@
    private LocDetlService locDetlService;
    @Autowired
    private WaitPakinService waitPakinService;
    @Autowired
    private OrderDetlService orderDetlService;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
@@ -105,21 +104,16 @@
                            }
                        }
                        // 更新入库通知档 ioStatus ===>> Y
                        // 更新订单完成数量
                        OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                        try {
//                            Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
//                                    .eq("zpallet", wrkDetl.getZpallet())
//                                    .eq("matnr", wrkDetl.getMatnr())
//                                    .eq("anfme", wrkDetl.getAnfme());
//                            if (Cools.isEmpty(wrkDetl.getBatch())) {
//                                wrapper.eq("batch", wrkDetl.getBatch());
//                            } else {
//                                wrapper.isNull("batch").or().eq("batch", "");
//                            }
//                            WaitPakin setParam = new WaitPakin();
//                            setParam.setIoStatus("Y");
//                            setParam.setModiTime(now);
//                            waitPakinService.update(setParam, wrapper);
                            if(!Cools.isEmpty(orderDetl)){
                                if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        wrkDetl.getBatch(),wrkDetl.getAnfme())){
                                    exceptionHandle("全板入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                }
                            }
                        } catch (Exception ignore){}
                    }
@@ -149,6 +143,19 @@
                                exceptionHandle("拣料入库 ===>> 修改库存明细数量失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            }
                        }
                        // 更新订单完成数量
                        OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                        try {
                            if(!Cools.isEmpty(orderDetl)){
                                if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        wrkDetl.getBatch(),wrkDetl.getAnfme())){
                                    exceptionHandle("拣料入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                }
                            }
                        } catch (Exception ignore){}
                    }
                    // 修改库位状态 Q ====>> F
                    if (locMast.getLocSts().equals("Q")) {
@@ -289,7 +296,17 @@
                        exceptionHandle("全板出库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo());
                    }
                    for (WrkDetl wrkDetl : wrkDetls101) {
                        // todo:luxiaotao 3)修改出库通知档 status ==> Y
                        // 更新订单完成数量
                        OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                        try {
                            if(!Cools.isEmpty(orderDetl)){
                                if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        wrkDetl.getBatch(),wrkDetl.getAnfme())){
                                    exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                }
                            }
                        } catch (Exception ignore){}
                    }
                    // 删除工作档源库位的库存明细
                    if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) {
src/main/resources/UpdateThread.cs
File was deleted
src/main/resources/mapper/OrderDetlMapper.xml
@@ -143,7 +143,7 @@
    <update id="decrease">
        update man_order_detl
        set qty = qty - #{qty}
        set work_qty = work_qty - #{qty}
        where 1=1
        and order_no = #{orderNo}
        and matnr = #{matnr}
@@ -168,6 +168,22 @@
        INSERT INTO man_order_detl_log SELECT * FROM man_order_detl WHERE id = #{id}
    </insert>
    <update id="increaseQtyByOrderNo">
        update man_order_detl
        set qty = qty + #{qty}
        where 1=1
        and order_no = #{orderNo}
        and matnr = #{matnr}
        <choose>
            <when test="batch != null and batch != ''">
                and batch = #{batch}
            </when>
            <otherwise>
                and (batch IS NULL OR batch = '')
            </otherwise>
        </choose>
    </update>
    <update id="increaseWorkQty">
        update man_order_detl
        set work_qty = work_qty + #{workQty}
src/main/webapp/static/js/adjDetl/adjDetl.js
@@ -23,7 +23,7 @@
//             {field: 'adjId', align: 'center',title: '序号'}
            {field: 'locNo', align: 'center',title: '库位号'}
            ,{field: 'matnr', align: 'center',title: '商品编号'}
            ,{field: 'batch', align: 'center',title: '序列码'}
            ,{field: 'batch', align: 'center',title: '批号'}
            // ,{field: 'oriCtns', align: 'center',title: '原箱数'}
            ,{field: 'oriQty', align: 'center',title: '原数量'}
            // ,{field: 'oriWt', align: 'center',title: '原重量'}
src/main/webapp/static/js/common.js
@@ -225,7 +225,7 @@
    {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: '批号', sort:true}
    ,{field: 'anfme', align: 'center',title: '数量'}
    ,{field: 'zpallet', align: 'center',title: '托盘条码'}
src/main/webapp/static/js/order/order.js
@@ -92,7 +92,7 @@
        } else if (layEvent === 'del') {
            doDel(data.id);
        } else if (layEvent === 'complete') {
            doModify(data.id, 4);
            doModify(data.id, data.orderNo, 4);
        } else if (layEvent === 'look') {
            var $a = $(obj.tr).find('a[lay-event="look"]');
            var offset = $a.offset();
@@ -121,7 +121,7 @@
                            {type: 'numbers'},
                            {field: 'matnr', title: '商品编码', width: 160},
                            {field: 'maktx', title: '商品名称', width: 160},
                            {field: 'batch', title: '序列码'},
                            {field: 'batch', title: '批号'},
                            {field: 'anfme', title: '数量'},
                            {field: 'workQty', title: '作业数量'},
                            {field: 'qty', title: '完成数量', style: 'font-weight: bold'},
@@ -188,6 +188,10 @@
                            layer.msg('明细修改数量不合法', {icon: 2});
                            return false;
                        }
                        if (nList[xi].anfme < nList[xi].workQty){
                            layer.msg('数量不能小于已作业数量', {icon: 2});
                            return false;
                        }
                    }
                    layer.load(2);
                    $.ajax({
@@ -229,10 +233,10 @@
                        {type: 'numbers', title: '#'},
                        {field: 'matnr', title: '商品编码', width: 160},
                        {field: 'maktx', title: '商品名称', width: 200},
                        {field: 'batch', title: '序列码', edit: true},
                        {field: 'batch', title: '批号', edit: true},
                        {field: 'specs', title: '规格'},
                        {field: 'anfme', title: '数量(修改)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
                        // {field: 'inQty', title: '已入库量',  minWidth: 100, width: 100},
                        {field: 'workQty', title: '作业数量',  minWidth: 100, width: 100},
                        // {field: 'unit', title: '单位', width: 80},
                        {field: 'memo', title: '备注' , edit: true},
                        {align: 'center', title: '操作', toolbar: '#formSSXMTableBar', minWidth: 80, width: 80, fixed: 'right'}
@@ -268,6 +272,10 @@
                    if (layEvent === 'edit') {
                        showEditModel2(data);
                    } else if (layEvent === 'del') {
                        if(data.workQty > 0){
                            layer.msg("已存在作业数量,不能删除", {icon: 2});
                            return;
                        }
                        layer.confirm('确定要删除吗?', {
                            shade: .1,
                            skin: 'layui-layer-admin'
@@ -295,6 +303,14 @@
                        } else {
                            if (vle <= 0) {
                                layer.msg("数量必须大于零", {icon: 2});
                                // data[obj.field] = 0;
                                // insTbSSXM.reload({data: xxDataList});
                                return false;
                            }
                            if(obj.value < data.workQty){
                                layer.msg("输入数量不能小于作业中数量", {icon: 2});
                                // data[obj.field] = 0;
                                // insTbSSXM.reload({data: xxDataList});
                                return false;
                            }
                        }
@@ -419,7 +435,7 @@
    }
    // 修改订单状态
    function doModify(orderId, settle) {
    function doModify(orderId, orderNo, settle) {
        layer.confirm('确定要手动完结吗?', {
            shade: .1,
            skin: 'layui-layer-admin'
@@ -433,6 +449,7 @@
                headers: {'token': localStorage.getItem('token')},
                data: {
                    id: orderId,
                    orderNo: orderNo,
                    settle: settle
                },
                method: 'POST',
src/main/webapp/static/js/order/out.js
@@ -32,7 +32,7 @@
            ,{field: 'orderNo', align: 'center',title: '单据编号', templet: '#orderNoTpl', width: 160}
            ,{field: 'matnr', align: 'center',title: '商品编码', width: 160}
            ,{field: 'maktx', align: 'center',title: '商品名称', width: 200}
            ,{field: 'batch', align: 'center',title: '序列码'}
            ,{field: 'batch', align: 'center',title: '批号'}
            ,{field: 'specs', align: 'center',title: '规格'}
            // ,{field: 'anfme', align: 'center',title: '数量'}
            // ,{field: 'qty', align: 'center',title: '作业数量', style: 'font-weight: bold'}
@@ -154,7 +154,7 @@
                                    // {type: 'checkbox', merge: ['orderNo']},
                                    {field: 'orderNo', title: '单据编号', merge: true, align: 'center'},
                                    {field: 'title', title: '商品', merge: true, align: 'center', width: 350},
                                    {field: 'batch', title: '序列码', align: 'center'},
                                    {field: 'batch', title: '批号', align: 'center'},
                                    {field: 'anfme', title: '数量', align: 'center', width: 90, style: 'font-weight: bold'},
                                    {field: 'locNo', title: '货位', align: 'center', width: 100, templet: '#locNoTpl'},
                                    {field: 'staNos', align: 'center', title: '出库站', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
src/main/webapp/static/js/orderDetl/orderDetl.js
@@ -30,7 +30,7 @@
            ,{field: 'name', align: 'center',title: '名称'}
            ,{field: 'specs', align: 'center',title: '规格'}
            ,{field: 'model', align: 'center',title: '型号'}
            ,{field: 'batch', align: 'center',title: '序列码'}
            ,{field: 'batch', align: 'center',title: '批号'}
            ,{field: 'unit', align: 'center',title: '单位'}
            ,{field: 'barcode', align: 'center',title: '商品条码'}
            ,{field: 'supplier', align: 'center',title: '供应商'}
src/main/webapp/static/js/pack/pack.js
@@ -25,7 +25,7 @@
            // ,{field: 'id', align: 'center',title: 'ID'}
            ,{field: 'barcode',title: '条码'}
            ,{field: 'matnr', align: 'center',title: '商品编号', minWidth: 250, width: 250}
            ,{field: 'batch', align: 'center',title: '序列码', hide: true}
            ,{field: 'batch', align: 'center',title: '批号', hide: true}
            ,{field: 'settle$', align: 'center',title: '状态', templet: '#settleTpl',  minWidth: 160, width: 160}
            // ,{field: 'status$', align: 'center',title: '状态'}
            // ,{field: 'createTime$', align: 'center',title: '添加时间'}
src/main/webapp/static/js/pakStore/pakStore.js
@@ -4,7 +4,7 @@
function getCol() {
    var cols = [
        {fixed: 'left', field: 'anfme', title: '数量(必填)', align: 'center', edit:'text', width: 120,  style:'color: blue;font-weight: bold'},
        {field: 'batch', title: '序列码(选填)', align: 'center', edit:'text', width: 200,  style:'color: block;font-weight: bold'}
        {field: 'batch', title: '批号(选填)', align: 'center', edit:'text', width: 200,  style:'color: block;font-weight: bold'}
    ];
    cols.push.apply(cols, matCols);
    cols.push({fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width: 80})
src/main/webapp/static/js/pakStore/stockAdjust.js
@@ -7,7 +7,7 @@
    var cols = [
        {fixed: 'left', field: 'count', title: '实际数量', align: 'center', edit:'text', width: 120,  style:'color: blue;font-weight: bold'}
        ,{field: 'anfme', align: 'center',title: '数量'}
        ,{field: 'batch', align: 'center',title: '序列码(编辑)', edit: true, style: 'font-weight:bold'}
        ,{field: 'batch', align: 'center',title: '批号(编辑)', edit: true, style: 'font-weight:bold'}
    ];
    arrRemove(detlCols, "field", "anfme");
    arrRemove(detlCols, "field", "batch");
src/main/webapp/views/order/order.html
@@ -86,13 +86,13 @@
</div>
<!-- 表格操作列 -->
<script type="text/html" id="operate">
    {{# if (d.settle == 1 || d.settle == 2) { }}
    {{# if (d.settle == 0 || d.settle == 1) { }}
        <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a>
        {{# if (d.settle == 2) { }}
            <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">完结</a>
        {{# } }}
        <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">删除</a>
    {{# } }}
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">删除</a>
    {{# if (d.settle == 2) { }}
    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">完结</a>
    {{# } }}
</script>
<!-- 表格操作列 -->
<script type="text/html" id="tbLook">
src/main/webapp/views/order/out.html
@@ -107,9 +107,9 @@
                                </div>
                            </div>
                            <div class="layui-inline">
                                <label class="layui-form-label">序列码:</label>
                                <label class="layui-form-label">批号:</label>
                                <div class="layui-input-inline">
                                    <input name="batch" class="layui-input" placeholder="序列码"/>
                                    <input name="batch" class="layui-input" placeholder="批号"/>
                                </div>
                            </div>
<!--                            <div class="layui-inline">-->
src/main/webapp/views/orderDetl/orderDetl.html
@@ -112,9 +112,9 @@
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">序列码: </label>
                    <label class="layui-form-label">批号: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="batch" placeholder="请输入序列码">
                        <input class="layui-input" name="batch" placeholder="请输入批号">
                    </div>
                </div>
                <div class="layui-form-item">
src/main/webapp/views/pack/pack.html
@@ -103,9 +103,9 @@
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">序列码: </label>
                    <label class="layui-form-label">批号: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="batch" placeholder="请输入序列码">
                        <input class="layui-input" name="batch" placeholder="请输入批号">
                    </div>
                </div>
                <div class="layui-form-item">