#
luxiaotao1123
2021-03-10 1c6659a0f946b15bea84bccb206fe11111ac211e
#
11个文件已修改
316 ■■■■ 已修改文件
src/main/java/zy/cloud/wms/common/utils/VersionUtils.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/controller/PakoutController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/controller/WorkController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/service/LocDetlService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/service/WorkService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pakout/pakout.js 192 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakout/pakout.html 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/zy/cloud/wms/common/utils/VersionUtils.java
@@ -82,4 +82,26 @@
        pakout.setDocNum(locDetl.getDocNum());
    }
    public static void setLocDetl(LocDetl locDetl, Pakout pakout) {
        locDetl.setNodeId(pakout.getNodeId());
        locDetl.setLocNo(pakout.getLocNo());
        locDetl.setZpallet(pakout.getZpallet());
        locDetl.setAnfme(pakout.getAnfme());
        locDetl.setMatnr(pakout.getMatnr());
        locDetl.setMaktx(pakout.getMaktx());
        locDetl.setName(pakout.getName());
        locDetl.setSpecs(pakout.getSpecs());
        locDetl.setModel(pakout.getModel());
        locDetl.setBatch(pakout.getBatch());
        locDetl.setUnit(pakout.getUnit());
        locDetl.setBarcode(pakout.getBarcode());
        locDetl.setCustName(pakout.getCustName());
        locDetl.setItemNum(pakout.getItemNum());
        locDetl.setCount(pakout.getCount());
        locDetl.setWeight(pakout.getWeight());
        locDetl.setStatus(1);
        locDetl.setDocId(pakout.getDocId());
        locDetl.setDocNum(pakout.getDocNum());
    }
}
src/main/java/zy/cloud/wms/manager/controller/PakoutController.java
@@ -43,7 +43,11 @@
        EntityWrapper<Pakout> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        if (!Cools.isEmpty(orderByField)){
            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
        } else {
            wrapper.orderBy("update_time", false);
        }
        return R.ok(pakoutService.selectPage(new Page<>(curr, limit), wrapper));
    }
src/main/java/zy/cloud/wms/manager/controller/WorkController.java
@@ -95,9 +95,21 @@
    }
    @RequestMapping("/pakout/init")
    @ManagerAuth(memo = "生成出库单")
    @ManagerAuth(memo = "生成拣货单")
    public R initPakout(@RequestBody List<InitPakoutParam> params) {
        return workService.initPakout(params, getUserId());
    }
    @RequestMapping("/hand/control/pakout")
    @ManagerAuth(memo = "手动处理拣货单")
    public R handControlWrkMast(@RequestParam String wrkNo, @RequestParam Integer type){
        if (type == 1) {
            return workService.completePakout(wrkNo, getUserId());
        } else if (type == 2) {
            return workService.cancelPakout(wrkNo, getUserId());
        }
        return R.ok();
    }
}
src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java
@@ -23,6 +23,8 @@
    Integer reduceStock(@Param("nodeId") Long nodeId, @Param("matnr") String matnr, @Param("anfme") Double anfme);
    Integer incrementStock(@Param("nodeId") Long nodeId, @Param("matnr") String matnr, @Param("anfme") Double anfme);
    Integer removeStock(@Param("nodeId") Long nodeId, @Param("matnr") String matnr);
    List<LocDetl> selectByPrior(@Param("matnr") String matnr, @Param("nodeId") Long nodeId);
src/main/java/zy/cloud/wms/manager/service/LocDetlService.java
@@ -26,6 +26,11 @@
    Boolean reduceStock(Long nodeId, String matnr, Double anfme);
    /**
     * 增加库存
     */
    Boolean incrementStock(Long nodeId, String matnr, Double anfme);
    /**
     * 删除库存
     * @param nodeId
     * @param matnr
src/main/java/zy/cloud/wms/manager/service/WorkService.java
@@ -22,4 +22,8 @@
    R initPakout(List<InitPakoutParam> params, Long userId);
    R completePakout(String wrkNo, Long userId);
    R cancelPakout(String wrkNo, Long userId);
}
src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java
@@ -85,6 +85,11 @@
    }
    @Override
    public Boolean incrementStock(Long nodeId, String matnr, Double anfme) {
        return this.baseMapper.incrementStock(nodeId, matnr, anfme)>0;
    }
    @Override
    public Boolean removeStock(Long nodeId, String matnr) {
        return this.baseMapper.removeStock(nodeId, matnr)>0;
    }
src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java
@@ -154,13 +154,63 @@
                if (!pakoutService.insert(pakout)) {
                    throw new CoolException("生成拣货单失败");
                }
                if (param.getCount() > locDetl.getAnfme()) {
                    throw new CoolException("库存不足");
                } else if (param.getCount()<locDetl.getAnfme()) {
                // 修改库存明细数量
                if (!locDetlService.reduceStock(locDetl.getNodeId(), locDetl.getMatnr(), param.getCount())) {
                    if (!locDetlService.reduceStock(locDetl.getNodeId(), param.getMatnr(), param.getCount())) {
                    throw new CoolException("修改库存明细数量失败");
                    }
                } else {
                    // 删除库存明细
                    if (!locDetlService.removeStock(locDetl.getNodeId(), param.getMatnr())) {
                        throw new CoolException("删除库存明细失败");
                    }
                }
            }
        }
        return R.ok();
    }
    @Override
    public R completePakout(String wrkNo, Long userId) {
        Pakout pakout = pakoutService.selectOne(new EntityWrapper<Pakout>().eq("wrk_no", wrkNo));
        if (null != pakout) {
            if (pakoutService.stockOutComplete(wrkNo, null, userId)) {
                return R.ok("拣货单已完成");
            }
        }
        return R.error();
    }
    @Override
    @Transactional
    public R cancelPakout(String wrkNo, Long userId) {
        Pakout pakout = pakoutService.selectOne(new EntityWrapper<Pakout>().eq("wrk_no", wrkNo));
        if (null != pakout) {
            LocDetl locDetl = locDetlService.getLocDetl(pakout.getNodeId(), pakout.getMatnr());
            if (locDetl == null) {
                LocDetl oldLocDetl = new LocDetl();
                VersionUtils.setLocDetl(oldLocDetl, pakout);
                oldLocDetl.setCreateTime(new Date());
                oldLocDetl.setCreateBy(userId);
                oldLocDetl.setUpdateTime(new Date());
                oldLocDetl.setUpdateBy(userId);
                if (!locDetlService.insert(oldLocDetl)) {
                    throw new CoolException("恢复库存明细失败");
                }
            } else {
                if (!locDetlService.incrementStock(locDetl.getNodeId(), locDetl.getMatnr(), pakout.getAnfme())) {
                   throw new CoolException("恢复库存明细失败");
                }
            }
        } else {
            return R.error("拣货单已失效,取消失败!");
        }
        if (!pakoutService.delete(new EntityWrapper<Pakout>().eq("wrk_no", pakout.getWrkNo()))) {
            throw new CoolException("删除拣货单失败");
        }
        return R.ok("拣货单已取消");
    }
}
src/main/resources/mapper/LocDetlMapper.xml
@@ -97,6 +97,15 @@
        and matnr = #{matnr}
    </update>
    <update id="incrementStock">
        update man_loc_detl
        set anfme = anfme + #{anfme}
        , update_time = getdate()
        where 1=1
        and node_id = #{nodeId}
        and matnr = #{matnr}
    </update>
    <update id="removeStock">
        delete from man_loc_detl
        where 1=1
src/main/webapp/static/js/pakout/pakout.js
@@ -42,12 +42,12 @@
            ,{field: 'weight', align: 'center',title: '重量', hide: true}
            ,{field: 'status$', align: 'center',title: '状态', hide: true}
            // ,{field: 'createBy$', align: 'center',title: '添加人员',event: 'createBy', style: 'cursor:pointer'}
            // ,{field: 'createTime$', align: 'center',title: '添加时间'}
            ,{field: 'createTime$', align: 'center',title: '生成时间'}
            // ,{field: 'updateBy$', align: 'center',title: '修改人员',event: 'updateBy', style: 'cursor:pointer'}
            // ,{field: 'updateTime$', align: 'center',title: '修改时间'}
            ,{field: 'memo', align: 'center',title: '备注', hide: true}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:150}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:200}
        ]],
        request: {
            pageName: 'curr',
@@ -108,46 +108,6 @@
    table.on('toolbar(pakout)', function (obj) {
        var checkStatus = table.checkStatus(obj.config.id);
        switch(obj.event) {
            case 'addData':
                layer.open({
                    type: 2,
                    title: '新增',
                    maxmin: true,
                    area: [top.detailWidth, top.detailHeight],
                    content: 'pakout_detail.html',
                    success: function(layero, index){
                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
                        clearFormVal(layer.getChildFrame('#detail', index));
                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                    }
                });
                break;
            case 'deleteData':
                var data = checkStatus.data;
                if (data.length === 0){
                    layer.msg('请选择数据');
                } else {
                    layer.confirm('确定删除'+(data.length===1?'此':data.length)+'条数据吗', function(){
                        $.ajax({
                            url: baseUrl+"/pakout/delete/auth",
                            headers: {'token': localStorage.getItem('token')},
                            data: {param: JSON.stringify(data)},
                            method: 'POST',
                            traditional:true,
                            success: function (res) {
                                if (res.code === 200){
                                    layer.closeAll();
                                    tableReload(false);
                                } else if (res.code === 403){
                                    top.location.href = baseUrl+"/";
                                } else {
                                    layer.msg(res.msg)
                                }
                            }
                        })
                    });
                }
                break;
            case 'exportData':
                layer.confirm('确定导出Excel吗', {shadeClose: true}, function(){
                    var titles=[];
@@ -193,6 +153,27 @@
    table.on('tool(pakout)', function(obj){
        var data = obj.data;
        switch (obj.event) {
            // 完成
            case 'complete':
                layer.confirm('确认完成该笔拣货单?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){
                    http.post(baseUrl+"/work/hand/control/pakout", {wrkNo: data.wrkNo, type:1}, function (res) {
                        $(".layui-laypage-btn")[0].click();
                        layer.msg(data.wrkNo + res.msg);
                    })
                    layer.closeAll();
                });
                break;
            // 取消
            case 'cancel':
                layer.confirm('确认取消该笔拣货单?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){
                    http.post(baseUrl+"/work/hand/control/pakout", {wrkNo: data.wrkNo, type:2}, function (res) {
                        $(".layui-laypage-btn")[0].click();
                        layer.msg(data.wrkNo + res.msg);
                    })
                    layer.closeAll();
                });
                break;
            // 详情
            case 'detail':
                layer.open({
@@ -211,133 +192,6 @@
                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
                    }
                });
                break;
            // 编辑
            case 'edit':
                layer.open({
                    type: 2,
                    title: '修改',
                    maxmin: true,
                    area: [top.detailWidth, top.detailHeight],
                    content: 'pakout_detail.html',
                    success: function(layero, index){
                        layer.getChildFrame('#data-detail-submit-save', index).hide();
                        setFormVal(layer.getChildFrame('#detail', index), data, false);
                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
                        top.convertDisabled(layer.getChildFrame('#wrkNo', index), true);
                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
                    }
                });
                break;
            case 'wrkSts':
                var param = top.reObject(data).wrkSts;
                if (param === undefined) {
                    layer.msg("无数据");
                } else {
                   layer.open({
                       type: 2,
                       title: '工作状态详情',
                       maxmin: true,
                       area: [top.detailWidth, top.detailHeight],
                       shadeClose: true,
                       content: '../wrkSts/wrkSts_detail.html',
                       success: function(layero, index){
                           $.ajax({
                               url: "baseUrl+/wrkSts/"+ param +"/auth",
                               headers: {'token': localStorage.getItem('token')},
                               method: 'GET',
                               success: function (res) {
                                   if (res.code === 200){
                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
                                   } else if (res.code === 403){
                                       top.location.href = baseUrl+"/";
                                   }else {
                                       layer.msg(res.msg)
                                   }
                               }
                           })
                       }
                   });
                }
                break;
            case 'createBy':
                var param = top.reObject(data).createBy;
                if (param === undefined) {
                    layer.msg("无数据");
                } else {
                   layer.open({
                       type: 2,
                       title: '添加人员详情',
                       maxmin: true,
                       area: [top.detailWidth, top.detailHeight],
                       shadeClose: true,
                       content: '../user/user_detail.html',
                       success: function(layero, index){
                           $.ajax({
                               url: "baseUrl+/user/"+ param +"/auth",
                               headers: {'token': localStorage.getItem('token')},
                               method: 'GET',
                               success: function (res) {
                                   if (res.code === 200){
                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
                                   } else if (res.code === 403){
                                       top.location.href = baseUrl+"/";
                                   }else {
                                       layer.msg(res.msg)
                                   }
                               }
                           })
                       }
                   });
                }
                break;
            case 'updateBy':
                var param = top.reObject(data).updateBy;
                if (param === undefined) {
                    layer.msg("无数据");
                } else {
                   layer.open({
                       type: 2,
                       title: '修改人员详情',
                       maxmin: true,
                       area: [top.detailWidth, top.detailHeight],
                       shadeClose: true,
                       content: '../user/user_detail.html',
                       success: function(layero, index){
                           $.ajax({
                               url: "baseUrl+/user/"+ param +"/auth",
                               headers: {'token': localStorage.getItem('token')},
                               method: 'GET',
                               success: function (res) {
                                   if (res.code === 200){
                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
                                   } else if (res.code === 403){
                                       top.location.href = baseUrl+"/";
                                   }else {
                                       layer.msg(res.msg)
                                   }
                               }
                           })
                       }
                   });
                }
                break;
        }
src/main/webapp/views/pakout/pakout.html
@@ -51,8 +51,11 @@
</script>
<script type="text/html" id="operate">
    {{#if (d.wrkSts == 1||d.wrkSts == 2){ }}
        <a class="layui-btn layui-btn-danger layui-btn-xs btn-complete" lay-event="complete">完成</a>
        <a class="layui-btn layui-btn-primary layui-btn-xs btn-cancel" lay-event="cancel">取消</a>
    {{# } }}
    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">详情</a>
    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">编辑</a>
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>