自动化立体仓库 - WMS系统
*
L
17 小时以前 d7586e563701a4cb65065be3c4c3e4e66220222d
*
19个文件已修改
258 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MatController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasArmMast.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasArmMastLog.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/Mat.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/MatPrint.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/ArmPrecomputeParam.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CombParam.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OrderArmEndParam.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OrderToLine.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/TaskArmCycleResultParam.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderToSortLineScheduler.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/ArmRulesHandler.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderToLineHandler.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasArmRulesMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/MatMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/mat/mat.js 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/mat/mat.html 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MatController.java
@@ -276,6 +276,8 @@
            print.setBarcode(mat.getBarcode());
            print.setMaktx(mat.getMaktx());
            print.setSpecs(mat.getSpecs());
            print.setSupp(mat.getSupp());
            print.setSku(mat.getSku());
            print.setUnit(mat.getUnit());
            print.setMemo(mat.getMemo());
            res.add(print);
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -223,6 +223,7 @@
     * 分拣线上报接收
     */
    @PostMapping("/arm/task/v1")
    @AppAuth(memo = "分拣线上报接收")
    public synchronized R TaskArmReport(@RequestHeader(required = false) String appkey,
                                           @RequestBody TaskArmReportParam param,
                                           HttpServletRequest request) {
@@ -257,6 +258,7 @@
     * 单码完成
     */
    @PostMapping("/arm/task/cycle_result")
    @AppAuth(memo = "单码完成")
    public synchronized R TaskArmCycleResult(@RequestHeader(required = false) String appkey,
                                        @RequestBody TaskArmCycleResultParam param,
                                        HttpServletRequest request) {
@@ -288,6 +290,7 @@
     * 托盘完成
     */
    @PostMapping("/arm/task/workspace_status")
    @AppAuth(memo = "托盘完成")
    public synchronized R TaskArmWorkspaceStatus(@RequestHeader(required = false) String appkey,
                                             @RequestBody TaskArmWorkspaceStatusParam param,
                                             HttpServletRequest request) {
@@ -317,6 +320,7 @@
     * 异常上报
     */
    @PostMapping("/armAbnormalOperation")
    @AppAuth(memo = "异常上报")
    public synchronized R ArmAbnormalOperation(@RequestHeader(required = false) String appkey,
                                                 @RequestBody TaskArmErrorParam param,
                                                 HttpServletRequest request) {
@@ -336,6 +340,7 @@
     * 订单完成上报
     */
    @PostMapping("/arm/task/order_result")
    @AppAuth(memo = "订单完成上报")
    public synchronized R TaskArmWorkOrderStatus(@RequestHeader(required = false) String appkey,
                                                 @RequestBody OrderArmEndParam param,
                                                 HttpServletRequest request) {
src/main/java/com/zy/asrs/entity/BasArmMast.java
@@ -20,13 +20,13 @@
     * ID
     */
    @ApiModelProperty(value= "ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 机械臂编号
     */
    @ApiModelProperty(value= "机械臂编号")
    @TableId(value = "arm_no", type = IdType.INPUT)
    @TableField("arm_no")
    private Integer armNo;
@@ -48,7 +48,6 @@
     * 起点
     */
    @ApiModelProperty(value= "起点")
    @TableId(value = "sorting_line", type = IdType.INPUT)
    @TableField("sorting_line")
    private Integer sortingLine;
src/main/java/com/zy/asrs/entity/BasArmMastLog.java
@@ -1,5 +1,7 @@
package com.zy.asrs.entity;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableField;
import io.swagger.annotations.ApiModelProperty;
@@ -17,6 +19,7 @@
     * ID
     */
    @ApiModelProperty(value= "ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
src/main/java/com/zy/asrs/entity/Mat.java
@@ -190,10 +190,25 @@
     * 长度
     */
    @ApiModelProperty(value= "长度")
    @ExcelProperty(value = "长度")
    @TableField("man_length")
    private Double manLength;
    /**
     * 重量
     */
    @ApiModelProperty(value= "宽度")
    @ExcelProperty(value = "宽度")
    private Double width;
    /**
     * 重量
     */
    @ApiModelProperty(value= "高度")
    @ExcelProperty(value = "高度")
    private Double height;
    /**
     * 体积
     */
    @ApiModelProperty(value= "体积")
src/main/java/com/zy/asrs/entity/MatPrint.java
@@ -11,7 +11,7 @@
    /**
     * 物料编码
     */
    private String matnr;
    private String matnr;// matnr -> sku
    /**
     * SKC
@@ -27,6 +27,9 @@
     * 物料单位
     */
    private String unit;
    private String supp; //  supp -> po
    private String sku;//barcode(sku) -> upc
    private String supplier="默认";
    /**
     * 物料规格
src/main/java/com/zy/asrs/entity/param/ArmPrecomputeParam.java
@@ -36,15 +36,25 @@
        public CombMat() {}
        public CombMat(BasArmRules basArmRules) {
            this.material_height = basArmRules.getMaterialHeight();
            this.material_length = basArmRules.getMaterialLength();
            this.material_width = basArmRules.getMaterialWidth();
            this.material_height = basArmRules.getMaterialHeight();
            this.material_weight = basArmRules.getMaterialWeight();
        }
        public CombMat(Double material_length, Double material_width, Double material_height, Double material_weight, Double material_number) {
            this.material_length = material_length;
            this.material_width = material_width;
            this.material_height = material_height;
            this.material_weight = material_weight;
            this.material_number = material_number;
        }
    }
    public ArmPrecomputeParam() {}
    public ArmPrecomputeParam(Double material_length, Double material_width, Double material_height, Double material_weight, Double material_number) {
        this.matList.add( new CombMat(material_length,  material_width,  material_height,  material_weight,  material_number));
    }
    public ArmPrecomputeParam(BasArmRules basArmRules) {
        this.matList.add(new CombMat(basArmRules));
src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -48,6 +48,7 @@
        // 规格
        private String specs = "";
        private String supp = "";//supp -> po
        // sku
        private String sku = "";
src/main/java/com/zy/asrs/entity/param/OrderArmEndParam.java
@@ -2,6 +2,8 @@
import lombok.Data;
import java.util.regex.Pattern;
/*
 *  Created by Monkey D. Luffy on 2025.09.09
 * */
@@ -17,9 +19,9 @@
    private String sku;
    public void OrderIdTwo(String sign_order,String sign_sku){
        String[] split = order_id.split(sign_order);
        String[] split = order_id.split(Pattern.quote(sign_order));
        staNo = split[1];
        String[] split1 = split[0].split(sign_sku);
        String[] split1 = split[0].split(Pattern.quote(sign_sku));
        orderNo = split1[1];
        sku = split1[0];
    }
src/main/java/com/zy/asrs/entity/param/OrderToLine.java
@@ -11,7 +11,7 @@
    /**
     * 单据编号
     */
    private String OrderNo;
    private String orderNo;
    /**
     * 时间戳
@@ -47,7 +47,7 @@
        private String supplier;
        //绑定标记(标识相同必须去同一个分拣口)
        private Long binding_tags;
        private Long bindingTags;
        public MatList() {
        }
@@ -55,14 +55,14 @@
            this.sku = sku;
            this.po = po;
        }
        public MatList(String sku, String po, Double ctns, String upc, Integer sign, String supplier, Long binding_tags) {
        public MatList(String sku, String po, Double ctns, String upc, Integer sign, String supplier, Long bindingTags) {
            this.sku = sku;
            this.po = po;
            this.ctns = ctns;
            this.upc = upc;
            this.sign = sign;
            this.supplier = supplier;
            this.binding_tags = binding_tags;
            this.bindingTags = bindingTags;
        }
    }
}
src/main/java/com/zy/asrs/entity/param/TaskArmCycleResultParam.java
@@ -2,6 +2,8 @@
import lombok.Data;
import java.util.regex.Pattern;
/*
 *  Created by Monkey D. Luffy on 2025.09.09
 * */
@@ -17,9 +19,9 @@
    private String sku;
    public void OrderIdTwo(String sign_order,String sign_sku){
        String[] split = order_id.split(sign_order);
        String[] split = order_id.split(Pattern.quote(sign_order));
        staNo = split[1];
        String[] split1 = split[0].split(sign_sku);
        String[] split1 = split[0].split(Pattern.quote(sign_sku));
        orderNo = split1[1];
        sku = split1[0];
    }
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -609,7 +609,17 @@
            basArmMast.setStaNo(basArm.getStaNoSou());
            break;
        }
        BasArmMast basArmMastOld = basArmMastService.selectOne(
                new EntityWrapper<BasArmMast>()
                        .eq("sorting_line", basArmMast.getSortingLine())
                        .eq("arm_no", basArmMast.getArmNo())
                        .eq("status", 0)
        );
        if (Cools.isEmpty(basArmMastOld)){
        basArmMastService.insert(basArmMast);
        } else {
            throw new CoolException("未查询到相关机械臂拆码垛任务!!!"+ JSON.toJSONString(param));
        }
    }
    @Override
@@ -634,7 +644,7 @@
    public void taskArmWorkspaceStatus(TaskArmWorkspaceStatusParam param) {
        BasArmMast basArmMast = basArmMastService.selectOne(
                new EntityWrapper<BasArmMast>()
                        .eq("sorting_line", Utils.armStaNo(param.getArm_no(),Integer.parseInt(param.getId())))
                        .eq("sta_no", Utils.armStaNo(param.getArm_no(),Integer.parseInt(param.getId())))
                        .eq("arm_no", param.getArm_no())
                        .eq("status", 2)
        );
@@ -653,10 +663,9 @@
                        .eq("arm_no", param.getArm_no())
                        .eq("status", 5)
        );
        if (Cools.isEmpty(basArmMast)){
            throw new CoolException("未查询到相关机械臂拆码垛任务!!!"+ JSON.toJSONString(param));
        }
        if (!Cools.isEmpty(basArmMast)){
        basArmMastService.updateArmMastStatus(param.getArm_no(),basArmMast.getSortingLine(), 5,6);
    }
    }
}
src/main/java/com/zy/asrs/task/OrderToSortLineScheduler.java
@@ -40,6 +40,7 @@
//            log.info("未有新订单");
            return;
        }
        //遍历单据
        for (String orderNo : orderNos) {
            List<OrderDetl> orderDetls = orderDetlService.selectByOrderNo(orderNo);
@@ -50,8 +51,22 @@
            Long bindingTag = System.currentTimeMillis();//混搭标记
            List<OrderToLine.MatList> matLists = new ArrayList<>();
            List<OrderToLine.MatList> matListsRemainder = new ArrayList<>();
            List<OrderDetl> orderDetlsRemainder = new ArrayList<>();
            for (OrderDetl orderDetl : orderDetls) {
                Integer number =  basArmRulesService.getNumber(orderDetl.getWeight(),orderDetl.getVolume(),orderDetl.getManLength(),orderDetl.getWidth(),orderDetl.getHeight());
                if (number == null) {
                    BasArmRules basArmRules = new BasArmRules();
                    basArmRules.setMaterialHeight(orderDetl.getHeight());
                    basArmRules.setMaterialWeight(orderDetl.getWeight());
                    basArmRules.setMaterialLength(orderDetl.getManLength());
                    basArmRules.setMaterialWidth(orderDetl.getWidth());
                    basArmRulesService.insert(basArmRules);
                    return;
                } else if (number == 0){
                    return;
                }
                Double anfme = orderDetl.getAnfme();
                Double remainder = anfme % number;  //取余   余数混搭
                if(remainder != 0){
@@ -59,27 +74,34 @@
                    OrderToLine.MatList matMix = new OrderToLine.MatList(
                            orderDetl.getMatnr(),  // matnr -> sku
                            orderDetl.getSupp(),  //  supp -> po
                            remainder,          //    余料 -> 剩余余料统一时间戳标记
                            orderDetl.getBarcode(),   //barcode -> upc 条码
                            orderDetl.getAnfme(),          //    余料 -> 剩余余料统一时间戳标记
                            orderDetl.getSku(),   //barcode -> upc 条码
                            1,
                            orderDetl.getOrigin(),   //origin -> supplier 货源
                            null,   //origin -> supplier 货源
                            bindingTag        //余料标记相同
                    );
//                    matListsRemainder.add(matMix);
//                    orderDetlsRemainder.add(orderDetl);
                    matLists.add(matMix);
                }
                } else {
                Double ctns = anfme - remainder;
                // 组装物料信息
                OrderToLine.MatList mat = new OrderToLine.MatList(
                        orderDetl.getMatnr(),  // matnr -> sku
                        orderDetl.getSupp(),  //  supp -> po
                        ctns,          //整料
                        orderDetl.getBarcode(),   //barcode -> upc
                            orderDetl.getAnfme(),   //整料
                            orderDetl.getSku(),   //barcode -> upc
                        1,
                        orderDetl.getOrigin(),   //origin -> supplier 货源
                            null,   //origin -> supplier 货源
                        System.currentTimeMillis()
                );
                matLists.add(mat);
            }
            }
//            // 智能分组余料
//            if (matListsRemainder.size() > 0) {
//                groupRemainders(orderDetlsRemainder, orderDetlsRemainder.size(), orderDetls.size(), matLists);
//            }
            orderToLine.setMatList(matLists);
            try{
                ReturnT<String> returnT = orderToLineHandler.start(orderToLine);
@@ -94,4 +116,51 @@
    }
    private void groupRemainders(List<OrderDetl> sameMaterialList, double totalRemainder,
                                 int number, List<OrderToLine.MatList> matLists) {
        // 策略1: 如果余料总量较大,尝试分成多个合理大小的组
        if (totalRemainder > number * 0.6) {
            // 可以分成2组或更多组
            int suggestedGroups = (int) Math.ceil(totalRemainder / (number * 0.8));
            distributeRemainders(sameMaterialList, totalRemainder, suggestedGroups, matLists);
        } else {
            // 小余料单组处理
            Long bindingTag = System.currentTimeMillis();
            matLists.add(createMatListItem(sameMaterialList.get(0), totalRemainder, bindingTag, true));
        }
    }
    private void distributeRemainders(List<OrderDetl> sameMaterialList, double totalRemainder,
                                      int groupCount, List<OrderToLine.MatList> matLists) {
        double average = totalRemainder / groupCount;
        for (int i = 0; i < groupCount; i++) {
            double groupQuantity;
            if (i == groupCount - 1) {
                // 最后一组取剩余所有
                groupQuantity = totalRemainder - (average * (groupCount - 1));
            } else {
                groupQuantity = average;
            }
            // 为每组生成唯一标记
            Long groupTag = System.currentTimeMillis() + i;
            matLists.add(createMatListItem(sameMaterialList.get(0), groupQuantity, groupTag, true));
        }
    }
    private OrderToLine.MatList createMatListItem(OrderDetl orderDetl, Double quantity, Long bindingTag, boolean isRemainder) {
        return new OrderToLine.MatList(
                orderDetl.getMatnr(),
                orderDetl.getSupp(),
                quantity,
                orderDetl.getBarcode(),
                1,
                isRemainder ? null : orderDetl.getOrigin(),
                isRemainder ? bindingTag : System.currentTimeMillis()
        );
    }
}
src/main/java/com/zy/asrs/task/handler/ArmRulesHandler.java
@@ -56,13 +56,21 @@
                response = new HttpHandler.Builder()
                        .setUri(URL)
                        .setPath(QuantityOfPalletizing)
                        .setJson(JSON.toJSONString(armPrecomputeParam))
                        .setJson(JSON.toJSONString(armPrecomputeParam.getMatList().get(0)))
                        .build()
                        .doPost();
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.getInteger("code").equals(200)) {
                    JSONObject data = JSON.parseObject(jsonObject.getString("data"));
                    success = true;
                    ArmPrecomputeParam jsonObjectObject = jsonObject.getObject("data", ArmPrecomputeParam.class);
                    ArmPrecomputeParam jsonObjectObject = new ArmPrecomputeParam(
                            data.getDouble("material_length"),
                            data.getDouble("material_width"),
                            data.getDouble("material_height"),
                            data.getDouble("material_weight"),
                            data.getDouble("material_number")
                    );
                    for (ArmPrecomputeParam.CombMat combMat : jsonObjectObject.getMatList()){
                        basArmRulesService.updateStatus(combMat);
                    }
src/main/java/com/zy/asrs/task/handler/OrderToLineHandler.java
@@ -17,6 +17,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Service
@Transactional
@@ -39,7 +42,10 @@
            String response = "";
            boolean success = false;
            try {
                Map<String, Object> map = new HashMap<>();
                map.put("appkey","ea1f0459efc02a79f046f982767939ae");
                response = new HttpHandler.Builder()
                        .setHeaders(map)
                        .setUri(URL)
                        .setPath(Path)
                        .setJson(JSON.toJSONString(orderToline))
src/main/resources/mapper/BasArmRulesMapper.xml
@@ -35,7 +35,6 @@
        select material_number
        from asr_bas_arm_rules
        where 1=1
        and material_volume = #{volume}
        and material_length = #{length}
        and material_width = #{width}
        and material_height = #{height}
src/main/resources/mapper/MatMapper.xml
@@ -27,6 +27,8 @@
        <result column="weight" property="weight" />
        <result column="man_length" property="manLength" />
        <result column="volume" property="volume" />
        <result column="width" property="width" />
        <result column="height" property="height" />
        <result column="three_code" property="threeCode" />
        <result column="supp" property="supp" />
        <result column="supp_code" property="suppCode" />
src/main/webapp/static/js/mat/mat.js
@@ -334,9 +334,19 @@
                        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]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=1&param="
                                +"orderNo;cs2025092313;"
                                +"sku;" +res.data[i].matnr+";"
                                +"po;" +res.data[i].supp+";"
                                +"upc;" +res.data[i].sku+";"
                                +"supplier;" +res.data[i].supplier;
                        } else {
                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2&param="+res.data[i].matnr;
                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2&param="
                                +"orderNo;cs2025092313;"
                                +"sku;" +res.data[i].matnr+";"
                                +"po;" +res.data[i].supp+";"
                                +"upc;" +res.data[i].sku+";"
                                +"supplier;" +res.data[i].supplier;
                        }
                    }
                    var tpl = templateDom.html();
src/main/webapp/views/mat/mat.html
@@ -190,6 +190,12 @@
                        <div id="tagSel" class="ew-xmselect-tree"></div>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">商品sku</label>
                    <div class="layui-input-block">
                        <input id="matnr" name="matnr" placeholder="请输入sku" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">商品名称</label>
@@ -199,61 +205,48 @@
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">配置</label>
                    <label class="layui-form-label">规格</label>
                    <div class="layui-input-block">
                        <input name="specs" placeholder="请输入配置" class="layui-input">
                        <input name="supp" placeholder="请输入客户po" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单箱净重</label>
                    <label class="layui-form-label">条码upc</label>
                    <div class="layui-input-block">
                        <input name="weight" placeholder="请输入单箱净重格" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单箱体积</label>
                    <div class="layui-input-block">
                        <input name="volume" placeholder="请输入单箱体积" class="layui-input">
                        <input name="sku" placeholder="请输入条码upc" class="layui-input">
                    </div>
                </div>
            </div>
            <div class="layui-col-md6">
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">商品编号</label>
                    <label class="layui-form-label">单箱长度</label>
                    <div class="layui-input-block">
                        <input id="matnr" name="matnr" placeholder="请输入商品编号" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
                        <input name="manLength" placeholder="请输入单箱长度mm" class="layui-input">
                    </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 name="specs" placeholder="请输入代码" class="layui-input">
                        <input name="weight" placeholder="请输入箱子重量kg" class="layui-input">
                    </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 name="memo" placeholder="请输入备注" class="layui-input">
                        <input name="width" placeholder="请输入箱子宽度mm" class="layui-input">
                    </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 name="manLength" placeholder="请输入单箱毛重" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单箱体积</label>
                    <div class="layui-input-block">
                        <input name="threeCode" placeholder="请输入箱子尺寸" class="layui-input">
                        <input name="height" placeholder="请输入箱子高度mm" class="layui-input">
                    </div>
                </div>
@@ -364,7 +357,7 @@
    {{#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" colspan="3" scope="col">sku</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">
@@ -409,8 +402,8 @@
    {{#each data}}
    <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="
            <td align="center" scope="col" colspan="1" rowspan="1">商品</td>
            <td align="center" scope="col" colspan="1" rowspan="1" style="
                display: inline-block;
                line-height: 20px;
                vertical-align: middle;
@@ -432,11 +425,11 @@
            </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;">{{this.memo}}</td>
            <td align="center" colspan="1">po</td>
            <td align="center" colspan="1" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.supp}}</td>
        </tr>
    </table>
    {{/each}}
<!--    {{/each}}-->
</script>
</body>