王佳豪
2021-05-15 0ee00b5d3cbd625fc9d0e92f88bb327aac6c86e9
1.立库任务单入库支持批量组托的功能
7个文件已修改
198 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | 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/param/CombParam.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pda/combPro.html 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -52,6 +52,16 @@
        return R.ok();
    }
    /**
     * 组托-批量
     */
    @RequestMapping("/comb/auth/batch")
    @ManagerAuth(memo = "组托-批量")
    public R combBatch(@RequestBody CombParam combParam){
        mobileService.combBatch(combParam, getUserId());
        return R.ok();
    }
    /**
     * 组托
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -99,7 +99,7 @@
    @ApiModelProperty(value= "库位号")
    @TableField("loc_no")
    private Date locNo;
    private String locNo;
    @ApiModelProperty(value= "状态")
    private String status;
src/main/java/com/zy/asrs/entity/WaitPakinLog.java
@@ -91,7 +91,7 @@
    @ApiModelProperty(value= "库位号")
    @TableField("loc_no")
    private Date locNo;
    private String locNo;
    @ApiModelProperty(value= "状态")
    private String status;
src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -47,6 +47,12 @@
        // 物料数量
        private Double count;
        // 通知单号
        private String supplier;
        // 生产单号
        private String mnemonic;
        public String getMatNo() {
            return matNo;
        }
@@ -63,6 +69,21 @@
            this.count = count;
        }
        public String getSupplier() {
            return supplier;
        }
        public void setSupplier(String supplier) {
            this.supplier = supplier;
        }
        public String getMnemonic() {
            return mnemonic;
        }
        public void setMnemonic(String mnemonic) {
            this.mnemonic = mnemonic;
        }
    }
    public String getBarcode() {
src/main/java/com/zy/asrs/service/MobileService.java
@@ -10,4 +10,9 @@
     */
    void comb(CombParam param, Long userId);
    /**
     * 组托-批量
     * @param param
     */
    void combBatch(CombParam param, Long userId);
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -95,7 +95,7 @@
            // 关联通知单组托
            for (CombParam.CombMat combMat : param.getCombMats()) {
                WaitPakin one = waitPakinService.selectOne(new EntityWrapper<WaitPakin>()
                        .eq("supplier", param.getBillNo())
                        .eq("supplier", combMat.getSupplier())
                        .eq("matnr", combMat.getMatNo())
                        .isNull("zpallet"));
                if (one == null) {
@@ -115,24 +115,25 @@
                waitPakin.setAppeTime(new Date());
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(new Date());
                waitPakin.setSupplier(combMat.getSupplier());
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存数据失败");
                }
                // 减少通知单上该物料组托数量
                if (waitPakin.getAnfme() >= one.getAnfme()) {
                    waitPakinService.delete(new EntityWrapper<WaitPakin>()
                            .eq("supplier", param.getBillNo())
                            .eq("supplier", combMat.getSupplier())
                            .eq("matnr", combMat.getMatNo())
                            .eq("mnemonic", param.getMnemonic())
                            .isNull("zpallet"));
                } else {
                    Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>();
                    if ("".equals(param.getMnemonic())) {
                        wrapper.eq("supplier", param.getBillNo())
                        wrapper.eq("supplier", combMat.getSupplier())
                                .eq("matnr", combMat.getMatNo())
                                .isNull("zpallet");
                    } else {
                        wrapper.eq("supplier", param.getBillNo())
                        wrapper.eq("supplier", combMat.getSupplier())
                                .eq("matnr", combMat.getMatNo())
                                .eq("mnemonic", param.getMnemonic())
                                .isNull("zpallet");
@@ -153,4 +154,79 @@
    }
    @Override
    @Transactional
    public void combBatch(CombParam param, Long userId) {
        if (Cools.isEmpty(param.getBarcode())) {
            throw new CoolException(BaseRes.PARAM);
        }
        if (Cools.isEmpty(param.getCombMats()) && Cools.isEmpty(param.getProductCode())) {
            throw new CoolException(BaseRes.PARAM);
        }
        int count = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
                eq("zpallet", param.getBarcode()).eq("io_status", "N"));
        if (count > 0) {
            throw new CoolException("条码数据已存在");
        }
        // 关联通知单组托
        for (CombParam.CombMat combMat : param.getCombMats()) {
            WaitPakin one = waitPakinService.selectOne(new EntityWrapper<WaitPakin>()
                    .eq("supplier", combMat.getSupplier())
                    .eq("matnr", combMat.getMatNo())
                    .isNull("zpallet"));
            if (one == null) {
                throw new CoolException("通知单不存在" + combMat.getMatNo() + "数据!");
            }
            if (combMat.getCount() > one.getAnfme()) {
                throw new CoolException(combMat.getMatNo() + "物料数量不足!");
            }
            MatCode matCode = matCodeService.selectById(combMat.getMatNo());
            if (Cools.isEmpty(matCode)) {
                throw new CoolException("物料数据错误");
            }
            WaitPakin waitPakin = one.clone();
            waitPakin.setZpallet(param.getBarcode());   // 托盘码
            waitPakin.setAnfme(combMat.getCount());  // 数量
            waitPakin.setAppeUser(userId);
            waitPakin.setAppeTime(new Date());
            waitPakin.setModiUser(userId);
            waitPakin.setModiTime(new Date());
            waitPakin.setSupplier(combMat.getSupplier());
            if (!waitPakinService.insert(waitPakin)) {
                throw new CoolException("保存数据失败");
            }
            // 减少通知单上该物料组托数量
            if (waitPakin.getAnfme() >= one.getAnfme()) {
                waitPakinService.delete(new EntityWrapper<WaitPakin>()
                        .eq("supplier", combMat.getSupplier())
                        .eq("matnr", combMat.getMatNo())
                        .eq("mnemonic", combMat.getMnemonic())
                        .isNull("zpallet"));
            } else {
                Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>();
                if ("".equals(param.getMnemonic())) {
                    wrapper.eq("supplier", combMat.getSupplier())
                            .eq("matnr", combMat.getMatNo())
                            .isNull("zpallet");
                } else {
                    wrapper.eq("supplier", combMat.getSupplier())
                            .eq("matnr", combMat.getMatNo())
                            .eq("mnemonic", combMat.getMnemonic())
                            .isNull("zpallet");
                }
                WaitPakin pakin = new WaitPakin();
                pakin.setAnfme(one.getAnfme() - waitPakin.getAnfme());
                pakin.setSupplier(combMat.getSupplier());
                pakin.setMatnr(combMat.getMatNo());
                pakin.setMnemonic(combMat.getMnemonic());
                if (!waitPakinService.update(pakin, wrapper)) {
                    throw new CoolException("更新数据失败");
                }
            }
        }
    }
}
src/main/webapp/views/pda/combPro.html
@@ -166,6 +166,8 @@
    }
    var tableIns;
    var countLayer;
    var matData = [];
    var sourceData = [];
    layui.use(['table', 'laydate', 'form'], function () {
        var table = layui.table;
        var $ = layui.jquery;
@@ -179,8 +181,8 @@
            limit: 500,
            cellMinWidth: 50,
            cols: [[
                {field: 'matNo', align: 'center', title: '物料编码',event: 'modify',},
                {field: 'mnemonic', align: 'center', title: '生产单号',event: 'modify',},
                {field: 'matNo', align: 'center', title: '物料编码', event: 'modify',},
                {field: 'mnemonic', align: 'center', title: '生产单号', event: 'modify',},
                {
                    align: 'center',
                    field: 'count',
@@ -189,7 +191,7 @@
                    style: 'cursor: pointer;color: blue',
                    width: 50
                },
                {field: 'matName', align: 'center', title: '物料名称',event: 'modify',}
                {field: 'matName', align: 'center', title: '物料名称', event: 'modify',}
            ]],
            done: function (res, curr, count) {
            }
@@ -228,7 +230,7 @@
    }
    // 添加表格数据
    var matData = [];
    //    var matData = [];
    function addTableData(data) {
        for (var i = 0; i < data.length; i++) {
@@ -241,6 +243,12 @@
            }
            if (toPush) {
                matData.push(data[i]);
                sourceData.push({
                    matNo: data[i].matNo,
                    count: data[i].count,
                    supplier: data[i].supplier,
                    mnemonic: data[i].mnemonic,
                });
            }
        }
        tableIns.reload({data: matData});
@@ -263,7 +271,7 @@
            return;
        }
        // 赋值前清空表格
        matData = [];
//        matData = [];
        tableIns.reload({data: matData});
        $.ajax({
@@ -277,6 +285,10 @@
                if (res.code === 200) {
                    if (res.data != null) {
                        addTableData(res.data);
                        // 延迟1秒后清空通知单号
                        setTimeout(function () {
                            $('#billNo').val("");
                        }, 500);
                    }
                } else if (res.code === 403) {
                    top.location.href = baseUrl + "/pda";
@@ -345,6 +357,7 @@
        $('#code').val("");
        $('#billNo').val("");
        matData = [];
        sourceData = [];
        tableIns.reload({data: matData});
    }
@@ -364,31 +377,36 @@
            tips("请提取物料", true);
            return;
        }
        var billNo = $('#billNo').val();
        var mnemonic = $('#mnemonic').val();
        $.ajax({
            url: baseUrl + "/mobile/comb/auth",
            headers: {'token': localStorage.getItem('token')},
            data: JSON.stringify({
                barcode: barcode,
                combMats: matData,
                billNo: billNo,
                mnemonic: mnemonic,
            }),
            contentType: 'application/json;charset=UTF-8',
            method: 'POST',
            async: false,
            success: function (res) {
                if (res.code === 200) {
                    reset();
                    tips("组托成功")
                } else if (res.code === 403) {
                    top.location.href = baseUrl + "/pda";
                } else {
                    tips(res.msg, true)
        for (var i = 0; i < matData.length; i++) {
            for (var j = 0; j < sourceData.length ; j++) {
                if (matData[i].matNo == sourceData[j].matNo && matData[i].mnemonic == sourceData[j].mnemonic && matData[i].count == sourceData[j].count) {
                    // 数量提醒
                    layer.confirm('数量和剩余数量一致,确定继续组托吗?', function(){
                        $.ajax({
                            url: baseUrl + "/mobile/comb/auth/batch",
                            headers: {'token': localStorage.getItem('token')},
                            data: JSON.stringify({
                                barcode: barcode,
                                combMats: matData,
                            }),
                            contentType: 'application/json;charset=UTF-8',
                            method: 'POST',
                            async: false,
                            success: function (res) {
                                if (res.code === 200) {
                                    reset();
                                    tips("组托成功")
                                } else if (res.code === 403) {
                                    top.location.href = baseUrl + "/pda";
                                } else {
                                    tips(res.msg, true)
                                }
                            }
                        })
                    });
                }
            }
        })
        }
    }
    /**