自动化立体仓库 - WMS系统
#
LSH
2023-12-15 3b8c76dfb994ac970734d1b01d1d0342c859f2d5
#
5个文件已修改
401 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LocInPrintMatController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MatController.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/MatPrint.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locInPrintMat/locInPrintMat.js 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locInPrintMat/locInPrintMat.html 274 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocInPrintMatController.java
@@ -7,11 +7,14 @@
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.DateUtils;
import com.zy.asrs.entity.LocInPrintMat;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.MatPrint;
import com.zy.asrs.service.LocInPrintMatService;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.common.CodeRes;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
src/main/java/com/zy/asrs/controller/MatController.java
@@ -10,11 +10,9 @@
import com.core.annotations.ManagerAuth;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.MatPrint;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.Pakout;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.result.KeyValueVo;
import com.zy.asrs.service.LocInPrintMatService;
import com.zy.asrs.service.MatService;
import com.zy.asrs.service.PakoutService;
import com.zy.asrs.utils.MatExcelListener;
@@ -45,6 +43,8 @@
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private PakoutService pakoutService;
    @Autowired
    private LocInPrintMatService locInPrintMatService;
    @RequestMapping(value = "/mat/auto/matnr/auth")
    public R autoMatnr(){
@@ -272,6 +272,28 @@
        return R.ok().add(res);
    }
    // 打印
    @RequestMapping(value = "/loc/in/mat/print/auth")
    @ManagerAuth(memo = "商品编码打印")
    public R locInMatCodePrint(@RequestParam(value = "param[]") Long[] ids) {
        if(Cools.isEmpty(ids)) {
            return R.parse(CodeRes.EMPTY);
        }
        List<MatPrint> res = new ArrayList<>();
        for (Long id : ids){
            LocInPrintMat locInPrintMat = locInPrintMatService.selectById(id);
            // 打印数据注入
            MatPrint print = new MatPrint();
            print.setMatnr(locInPrintMat.getMatnr());
            print.setMaktx(locInPrintMat.getMaktx());
            print.setBatch(locInPrintMat.getBatch());
            print.setAnfme(locInPrintMat.getAnfme().toString());
            print.setMemo(locInPrintMat.getMemo());
            res.add(print);
        }
        return R.ok().add(res);
    }
    /*************************************** 数据相关 ***********************************************/
src/main/java/com/zy/asrs/entity/MatPrint.java
@@ -34,6 +34,16 @@
    private String specs;
    /**
     * 物料批次
     */
    private String batch;
    /**
     * 数量
     */
    private String anfme;
    /**
     * 备注
     */
    private String memo;
src/main/webapp/static/js/locInPrintMat/locInPrintMat.js
@@ -24,15 +24,15 @@
            {type: 'checkbox'}
            ,{field: 'id', align: 'center',title: 'ID',hide : true}
            ,{field: 'uuid', align: 'center',title: '编号',hide: true}
            ,{field: 'status$', align: 'center',title: '打印情况',hide: false}
            ,{field: 'matnr', align: 'center',title: '物料编码',hide: false}
            ,{field: 'batch', align: 'center',title: '批次',hide: false}
            ,{field: 'anfme', align: 'center',title: '重量(kg)',hide: false}
            ,{field: 'locNo', align: 'center',title: '库位号',hide: false}
            ,{field: 'status$', align: 'center',title: '打印情况', width:100,hide: false}
            ,{field: 'matnr', align: 'center',title: '物料编码', width:180,hide: false}
            ,{field: 'batch', align: 'center',title: '批次', width:100,hide: false}
            ,{field: 'anfme', align: 'center',title: '重量(kg)', width:100,hide: false}
            ,{field: 'locNo', align: 'center',title: '库位号', width:120,hide: false}
            ,{field: 'maktx', align: 'center',title: '商品名称',hide: false}
            ,{field: 'createTime$', align: 'center',title: '添加时间',hide: true}
            ,{field: 'createBy$', align: 'center',title: '添加人员',hide: true}
            ,{field: 'updateTime$', align: 'center',title: '修改时间',hide: false}
            ,{field: 'createBy$', align: 'center',title: '添加人员', width:100,hide: true}
            ,{field: 'updateTime$', align: 'center',title: '修改时间', width:120,hide: false}
            ,{field: 'updateBy$', align: 'center',title: '修改人员',hide: false}
            ,{field: 'memo', align: 'center',title: '备注',hide: false}
@@ -130,6 +130,29 @@
                    });
                });
                break;
            // 批量打印
            case "btnPrintBatch":
                printMatCodeNos = [];
                var data = checkStatus;
                if (data.length === 0){
                    layer.msg('请选择打印数据');
                } else {
                    layer.open({
                        type: 1,
                        title: '批量打印 [数量'+ data.length +']',
                        area: ['500px'],
                        shadeClose: true,
                        content: $('#printDataDiv'),
                        success: function(layero, index){
                            for (var i = 0; i<data.length;i++) {
                                printMatCodeNos.push(data[i].id);
                            }
                        },
                        end: function () {
                        }
                    });
                }
                break;
        }
    });
@@ -137,6 +160,10 @@
    table.on('tool(locInPrintMat)', function(obj){
        var data = obj.data;
        switch (obj.event) {
            case 'btnPrint':
                layer.msg("废弃")
                break;
            // btnPrint(data.id, data.orderNo, 4);
            case 'edit':
                showEditModel(data);
                break;
@@ -225,6 +252,49 @@
        tableReload(false);
    });
    // 模板选择
    form.on('radio(selectTemplateRadio)', function (data) {
        $('.template-preview').hide();
        $('#template-preview-'+data.value).show();
    });
    // 开始打印
    form.on('submit(doPrint)', function (data) {
        var templateNo = data.field.selectTemplate;
        $.ajax({
            url: baseUrl+"/loc/in/mat/print/auth",
            headers: {'token': localStorage.getItem('token')},
            data: {param: printMatCodeNos},
            method: 'POST',
            async: false,
            success: function (res) {
                if (res.code === 200){
                    layer.closeAll();
                    for (let i=0;i<res.data.length;i++){
                        var templateDom = $("#templatePreview"+templateNo);
                        var className = templateDom.attr("class");
                        if (className === 'template-barcode') {
                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=1&param="+res.data[i].matnr+";"+res.data[i].batch+";"+res.data[i].anfme+";"+res.data[i].memo+";"+res.data[i].maktx;
                        } else {
                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2&param="+res.data[i].matnr+";"+res.data[i].batch+";"+res.data[i].anfme+";"+res.data[i].memo+";"+res.data[i].maktx;
                        }
                    }
                    var tpl = templateDom.html();
                    var template = Handlebars.compile(tpl);
                    var html = template(res);
                    var box = $("#box");
                    box.html(html);box.show();
                    box.print({mediaPrint:true});
                    box.hide();
                } else if (res.code === 403){
                    top.location.href = baseUrl+"/";
                }else {
                    layer.msg(res.msg)
                }
            }
        })
    });
    // 时间选择器
    function layDateRender(data) {
        setTimeout(function () {
src/main/webapp/views/locInPrintMat/locInPrintMat.html
@@ -9,6 +9,51 @@
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <style>
        /* ------------------------- 打印表格 -----------------------  */
        .contain {
            border-collapse: collapse;
            width: 280px;
            font-size: x-small;
            table-layout: fixed;
            color: black;
        }
        .contain img.template-qrcode {
            width: 80%;
        }
        .contain td, .contain th {
            border: 1px solid black;
            text-align: center;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
            padding: 5px;
        }
        .contain th {
            font-weight: bold;
            color: black;
            background-color: #f2f2f2;
        }
        .contain tr:nth-child(even){background-color: #f9f9f9;}
        .contain strong {
            font-weight: bold;
            line-height: 20px;
            vertical-align: middle;
            display: -webkit-box;
            -webkit-line-clamp: 3;
            -webkit-box-orient: vertical;
        }
        .barcode-section {
            text-align: center;
        }
        .barcode-section span {
            letter-spacing: 1px;
            font-weight: bold;
            color: black;
        }
    </style>
</head>
<body>
@@ -40,8 +85,10 @@
<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-add" lay-event="addData">新增</button>-->
        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">删除</button>
        <button class="layui-btn layui-btn-sm" id="btn-print-batch" lay-event="btnPrintBatch">批量打印</button>
        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">导出</button>
    </div>
</script>
@@ -49,10 +96,14 @@
<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>
<!--    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="btnPrint">打印</a>-->
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/jquery/jQuery.print.js"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/locInPrintMat/locInPrintMat.js" charset="utf-8"></script>
@@ -64,12 +115,6 @@
        <div class="layui-row">
            <div class="layui-col-md12">
                <div class="layui-form-item">
                    <label class="layui-form-label">编号: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="uuid" placeholder="请输入编号">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">打印情况: </label>
                    <div class="layui-input-block">
                        <select name="status">
@@ -77,48 +122,6 @@
                            <option value="1">未打印</option>
                            <option value="2">已打印</option>
                        </select>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">添加时间: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="createTime" id="createTime$" placeholder="请输入添加时间">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">添加人员: </label>
                    <div class="layui-input-block cool-auto-complete">
                        <input class="layui-input" name="createBy" placeholder="请输入添加人员" style="display: none">
                        <input id="createBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入添加人员" onfocus=this.blur()>
                        <div class="cool-auto-complete-window">
                            <input class="cool-auto-complete-window-input" data-key="userQueryBycreateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">
                            <select class="cool-auto-complete-window-select" data-key="userQueryBycreateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                            </select>
                        </div>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">修改时间: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="updateTime" id="updateTime$" placeholder="请输入修改时间">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">修改人员: </label>
                    <div class="layui-input-block cool-auto-complete">
                        <input class="layui-input" name="updateBy" placeholder="请输入修改人员" style="display: none">
                        <input id="updateBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入修改人员" onfocus=this.blur()>
                        <div class="cool-auto-complete-window">
                            <input class="cool-auto-complete-window-input" data-key="userQueryByupdateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">
                            <select class="cool-auto-complete-window-select" data-key="userQueryByupdateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                            </select>
                        </div>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">备注: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="memo" placeholder="请输入备注">
                    </div>
                </div>
                <div class="layui-form-item">
@@ -151,7 +154,12 @@
                        <input class="layui-input" name="maktx" placeholder="请输入商品名称">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">备注: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="memo" placeholder="请输入备注">
                    </div>
                </div>
             </div>
        </div>
        <hr class="layui-bg-gray">
@@ -161,5 +169,171 @@
        </div>
    </form>
</script>
<!-- 打印操作弹窗 -->
<div id="printDataDiv" style="display: none;padding: 20px">
    <div class="layui-form" style="text-align: center">
        <hr>
        <!--单选框-->
        <div class="layui-form-item" style="display: inline-block; margin-bottom: 10px">
<!--            <input type="radio" name="selectTemplate" value="1" title="模板一"  lay-filter="selectTemplateRadio" checked="">-->
<!--            <input type="radio" name="selectTemplate" value="2" title="模板二" lay-filter="selectTemplateRadio">-->
            <input type="radio" name="selectTemplate" value="3" title="模板" lay-filter="selectTemplateRadio">
        </div>
        <fieldset class="layui-elem-field site-demo-button" style="margin-top: 30px;text-align: left;">
            <legend>打印预览</legend>
            <div id="template-container" style="margin: 20px;text-align: center">
                <!-- 预览图 1 -->
                <div id="template-preview-1" class="template-preview" style="display: inline-block">
                    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
                        <tr style="height: 74px">
                            <td colspan="3" align="center" scope="col">商品编码</td>
                            <td class="barcode" colspan="9" align="center" scope="col">
                                <img class="template-code template-barcode" src="" width="90%;">
                                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center;">
                                    <span>xxxxxx</span>
                                </div>
                            </td>
                        </tr>
                        <tr style="height: 74px">
                            <td align="center" colspan="3">商品</td>
                            <td align="center" colspan="5">xxxxxx-xx/xx</td>
                            <td align="center" colspan="2">备注</td>
                            <td align="center" colspan="2">xx</td>
                        </tr>
                    </table>
                </div>
                <!-- 预览图 2 -->
                <div id="template-preview-2" class="template-preview" style="display: none">
                    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
                        <tr style="height: 30px">
                            <td align="center" width="20%">商品</td>
                            <td align="center" width="80%" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">xxxxxxx</td>
                        </tr>
                        <tr style="height: 30px">
                            <td align="center" width="20%">备注</td>
                            <td align="center" width="80%">xxxxxxxx</td>
                        </tr>
                        <tr style="height: 75px;">
                            <td align="center" colspan="2" width="100%" style="border: none">
                                <img class="template-code template-barcode" src="" width="80%">
                                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center">
                                    <span>xxxxxx</span>
                                </div>
                            </td>
                        </tr>
                    </table>
                </div>
                <!-- 预览图 3 -->
                <div id="template-preview-3" class="template-preview" style="display: none">
                    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
                        <tr style="height: 74px">
                            <td align="center" scope="col" colspan="1">商品</td>
                            <td align="center" scope="col" colspan="1" style="">xxxxxx-xx/xx</td>
                            <td align="center" scope="col" colspan="2" rowspan="2">
                                <img class="template-code template-qrcode" src="" width="80%">
                                <div style="letter-spacing: 1px;margin-top: 1px; text-align: center">
                                    <span>xxxxxx</span>
                                </div>
                            </td>
                        </tr>
                        <tr style="height: 74px">
                            <td align="center" colspan="1">备注</td>
                            <td align="center" colspan="1" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">xxxxxxx</td>
                        </tr>
                    </table>
                </div>
            </div>
        </fieldset>
        <button class="layui-btn" id="doPrint" lay-submit lay-filter="doPrint" style="margin-top: 20px">确定</button>
    </div>
</div>
<div id="box" style="display: block"></div>
<!-- 初始化打印模板的条形码 -->
<script type="text/javascript">
    $('.template-barcode').attr("src", baseUrl+"/mac/code/auth?type=1&param=123");
    $('.template-qrcode').attr("src", baseUrl+"/mac/code/auth?type=2&param=123");
</script>
<!-- 模板引擎 -->
<!-- 模板1 -->
<script type="text/template" id="templatePreview1" class="template-barcode">
    {{#each data}}
    <table class="contain" width="280" style="overflow: hidden;font-size: small;table-layout: fixed;">
        <tr style="height: 74px">
            <td align="center" colspan="3" scope="col">商品编码</td>
            <td align="center" class="barcode" colspan="9" scope="col">
                <img class="template-code" src="{{this.barcodeUrl}}" width="90%">
                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center">
                    <span>{{this.matnr}}</span>
                </div>
            </td>
        </tr>
        <tr style="height: 74px">
            <td align="center" colspan="3">商品</td>
            <td align="center" colspan="5" style="overflow: hidden; white-space: nowrap;text-overflow: ellipsis;">{{this.maktx}}</td>
            <td align="center" colspan="2">备注</td>
            <td align="center" colspan="2">{{this.memo}}</td>
        </tr>
    </table>
    {{/each}}
</script>
<!-- 模板2 -->
<script type="text/template" id="templatePreview2" class="template-barcode">
    {{#each data}}
    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
        <tr style="height: 35px">
            <td align="center" width="20%">商品</td>
            <td align="center" width="80%" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.maktx}}</td>
        </tr>
        <tr style="height: 35px">
            <td align="center" width="20%">备注</td>
            <td align="center" width="80%">{{this.memo}}</td>
        </tr>
        <tr style="height: 79px;">
            <td align="center" colspan="2" width="100%" style="border: none">
                <img class="template-code" src="{{this.barcodeUrl}}" width="80%">
                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center">
                    <span>{{this.matnr}}</span>
                </div>
            </td>
        </tr>
    </table>
    {{/each}}
</script>
<!-- 模板3 -->
<script type="text/template" id="templatePreview3" class="template-qrcode">
    {{#each data}}
    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
        <tr>
            <th>商品</th>
            <td colspan="2"><strong>{{this.maktx}}</strong></td>
            <td colspan="3" rowspan="4" class="barcode-section" style="white-space: normal; ">
                <img class="template-code template-qrcode" src="{{this.barcodeUrl}}" alt="Barcode Image">
                <div><span >{{this.matnr}}</span></div>
            </td>
        </tr>
        <tr>
            <th>批次</th>
            <td colspan="2"><strong>{{this.batch}}</strong></td>
        </tr>
        <tr>
            <th>数量</th>
            <td colspan="2"><strong>{{this.anfme}}</strong></td>
        </tr>
        <tr>
            <th>备注</th>
            <td colspan="2"><strong>{{this.memo}}</strong></td>
        </tr>
    </table>
    {{/each}}
</script>
</html>