自动化立体仓库 - WMS系统
#
zjj
2024-10-18 77140b11f195496f102b27190286a380c29e4dc9
#
15个文件已修改
230 ■■■■ 已修改文件
license.lic 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkMastScheduler.java 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/LocTypeDto.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/license.lic 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/mat/mat.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locMast/locMast.html 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/mat/mat.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
license.lic
Binary files differ
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -133,6 +133,7 @@
     * 添加入库单
     */
    @PostMapping("/order/pakin/default/v1")
    @AppAuth(memo = "入库单据下发")
    public synchronized R pakinOrderCreate(@RequestHeader(required = false) String appkey,
                                           @RequestBody OpenOrderPakinParam param,
                                           HttpServletRequest request) {
@@ -218,7 +219,7 @@
    }
        private void auth(String appkey, Object obj, HttpServletRequest request) {
            log.info("{}接口被访问;appkey:{};请求数据:{}", "open/sensorType/list/auth/v1", appkey, JSON.toJSONString(obj));
            log.info("{}接口被访问;appkey:{};请求数据:{}", request.getRequestURI(), appkey, JSON.toJSONString(obj));
            request.setAttribute("cache", obj);
            if (!auth) {
                return;
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -152,10 +152,17 @@
            }
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
            for (CombParam.CombMat elem : param.getCombMats()) {
//            param.getCombMats().forEach(elem -> {
                // 订单明细数量校验
                OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch());
                if (Cools.isEmpty(orderDetl)) {
                    throw new CoolException("该单据中未找到对应物料明细");
                }
                if (elem.getAnfme() > orderDetl.getEnableQty()) {
                    throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
                }
@@ -172,7 +179,8 @@
                } else {
                    detlDtos.add(detlDto);
                }
            });
//            });
            }
            for (DetlDto detlDto : detlDtos) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -558,8 +558,8 @@
    public List<LocDetlByTimeDTO> selectTimeLocDetl(TimeSelectParam param) {
        ArrayList<LocDetlByTimeDTO> locDetlByTimeDTOS = new ArrayList<>();
        EntityWrapper<LocDetl> locDetlEntityWrapper = new EntityWrapper<>();
        locDetlEntityWrapper.ge("create_time",param.getStartTime());
        locDetlEntityWrapper.le("create_time",param.getEndTime());
        locDetlEntityWrapper.ge("appe_time",param.getStartTime());
        locDetlEntityWrapper.le("appe_time",param.getEndTime());
        List<LocDetl> locDetls = locDetlService.selectList(locDetlEntityWrapper);
        if (!Cools.isEmpty(locDetls)) {
            for (LocDetl locDetl : locDetls) {
src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -62,51 +62,51 @@
        }
    }
    @Scheduled(cron = "0/3 * * * * ? ") //入库任务下发
    private void ShuttleInTaskSend(){
        List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                .in("io_type", 101,110,103,104,107)
                .eq("wrk_sts", 105).eq("crn_no",7));
        if (!Cools.isEmpty(wrkMasts1)){
            return;
        }
        List<WrkMast> wrkMasts = wrkMastService.selectToShuttleTask();
        if (wrkMasts.isEmpty()) {
            return;
        }
        try {
            for (WrkMast wrkMast : wrkMasts) {
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getLocNo()));
                if (locMast == null) {
                    throw new CoolException("下发四向车wcs任务失败");
                }
                String loc = (locMast.getRow1()-16)+"-"+locMast.getBay1()+"-"+locMast.getLev1();
                ShuttleTask param = new ShuttleTask();
                param.setTaskNo(wrkMast.getWrkNo().toString());
                param.setDestLoc(loc);
                param.setOriginSite("31002");
                param.setBarcode(wrkMast.getBarcode());
                param.setPriority("11");
                String response = new HttpHandler.Builder()
                        .setUri(shuttleWcsUrl)
                        .setPath("/openapi/createInTask")
                        .setJson(JSON.toJSONString(param))
                        .build()
                        .doPost();
                JSONObject jsonObject = JSON.parseObject(response);
                Integer code = jsonObject.getInteger("code");
                if (code.equals(200)) {
                    wrkMast.setWrkSts(105L);
                    if (!wrkMastService.updateById(wrkMast)) {
                        log.error("工作档[workNo={}]标记待处理失败", wrkMast.getWrkNo());
                    }
                }
            }
        }catch (Exception e){
            throw new CoolException("下发四向车wcs任务失败");
        }
    }
//    @Scheduled(cron = "0/3 * * * * ? ") //入库任务下发
//    private void ShuttleInTaskSend(){
//        List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>()
//                .in("io_type", 101,110,103,104,107)
//                .eq("wrk_sts", 105).eq("crn_no",7));
//        if (!Cools.isEmpty(wrkMasts1)){
//            return;
//        }
//        List<WrkMast> wrkMasts = wrkMastService.selectToShuttleTask();
//        if (wrkMasts.isEmpty()) {
//            return;
//        }
//        try {
//            for (WrkMast wrkMast : wrkMasts) {
//                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getLocNo()));
//                if (locMast == null) {
//                    throw new CoolException("下发四向车wcs任务失败");
//                }
//                String loc = (locMast.getRow1()-16)+"-"+locMast.getBay1()+"-"+locMast.getLev1();
//                ShuttleTask param = new ShuttleTask();
//                param.setTaskNo(wrkMast.getWrkNo().toString());
//                param.setDestLoc(loc);
//                param.setOriginSite("31002");
//                param.setBarcode(wrkMast.getBarcode());
//                param.setPriority("11");
//                String response = new HttpHandler.Builder()
//                        .setUri(shuttleWcsUrl)
//                        .setPath("/openapi/createInTask")
//                        .setJson(JSON.toJSONString(param))
//                        .build()
//                        .doPost();
//                JSONObject jsonObject = JSON.parseObject(response);
//                Integer code = jsonObject.getInteger("code");
//                if (code.equals(200)) {
//                    wrkMast.setWrkSts(105L);
//                    if (!wrkMastService.updateById(wrkMast)) {
//                        log.error("工作档[workNo={}]标记待处理失败", wrkMast.getWrkNo());
//                    }
//                }
//            }
//        }catch (Exception e){
//            throw new CoolException("下发四向车wcs任务失败");
//        }
//
//    }
    @Scheduled(cron = "0/3 * * * * ? ") //出库库任务下发
    private void ShuttleOutTaskSend(){
src/main/java/com/zy/asrs/utils/Utils.java
@@ -256,27 +256,34 @@
        return false;
    }
    public static boolean BooleanWhsTypeSta2(Integer whsType) {
        if (whsType == 1 || whsType == 2 || whsType == 5 || whsType==3 || whsType==4 || whsType == 9) {
            return true;
        }
        return false;
    }
    public static int RowCount(RowLastno rowLastno, Integer curRow, Integer crnNumber) {
        return LocNecessaryParameters(rowLastno, curRow, crnNumber)[0];
        return LocNecessaryParameters(rowLastno, curRow, crnNumber,0)[0];
    }
    public static int getCurRow(RowLastno rowLastno, Integer curRow, Integer crnNumber) {
        return LocNecessaryParameters(rowLastno, curRow, crnNumber)[1];
        return LocNecessaryParameters(rowLastno, curRow, crnNumber,0)[1];
    }
    public static int getCrnNo(RowLastno rowLastno, Integer curRow, Integer crnNumber) {
        return LocNecessaryParameters(rowLastno, curRow, crnNumber)[2];
        return LocNecessaryParameters(rowLastno, curRow, crnNumber,0)[2];
    }
    public static int getNearRow(RowLastno rowLastno, Integer curRow, Integer crnNumber) {
        return LocNecessaryParameters(rowLastno, curRow, crnNumber)[3];
        return LocNecessaryParameters(rowLastno, curRow, crnNumber,0)[3];
    }
    //库位排号分配
    public static int[] LocNecessaryParameters(RowLastno rowLastno, Integer curRow, Integer crnNumber) {
    public static int[] LocNecessaryParameters(RowLastno rowLastno, Integer curRow, Integer crnNumber,Integer whsType) {
        switch (rowLastno.getTypeId()) {
            case 1://经典双伸库位
                return LocNecessaryParametersDoubleExtension(rowLastno, curRow, crnNumber); //已完善
                return LocNecessaryParametersDoubleExtension(whsType, curRow, crnNumber); //已完善
            case 2://经典单伸库位(2排货架)
                return LocNecessaryParametersDoubleExtension2(rowLastno, curRow, crnNumber); //已完善
            case 3://经典单双伸库位  左单右双(小单大双)
@@ -295,39 +302,37 @@
    }
    //经典双伸库位
    public static int[] LocNecessaryParametersDoubleExtension(RowLastno rowLastno, Integer curRow, Integer crnNumber) {
    public static int[] LocNecessaryParametersDoubleExtension(Integer whsType, Integer curRow, Integer crnNumber) {
        int[] necessaryParameters = new int[]{0, 0, 0, 0};
        Integer sRow = rowLastno.getsRow();
        Integer sCrnNo = rowLastno.getsCrnNo();
        necessaryParameters[0] = crnNumber; // 轮询次数
        //满板正常入库
        if (curRow.equals(crnNumber * 4 + sRow - 1)) {
            necessaryParameters[1] = sRow;    //curRow   最深库位排
            necessaryParameters[2] = sCrnNo;     //crnNo     堆垛机号
            necessaryParameters[3] = sRow + 1;    //nearRow  最浅库位排
        } else if (curRow.equals((crnNumber - 1) * 4 + sRow)) {
            necessaryParameters[1] = sRow + 3;    //curRow   最深库位排
            necessaryParameters[2] = sCrnNo;     //crnNo     堆垛机号
            necessaryParameters[3] = sRow + 2;    //nearRow  最浅库位排
        } else {
            curRow = curRow + 4;
            if (curRow < sRow || curRow > (crnNumber * 4 + sRow - 1)) {
                throw new CoolException("库位排号异常:排号:" + curRow);
            }
            if ((curRow - sRow) % 4 == 0) {
                necessaryParameters[1] = curRow;    //curRow   最深库位排
                necessaryParameters[2] = (curRow - sRow + 2) / 4 + sCrnNo - 1;     //crnNo     堆垛机号
                necessaryParameters[3] = curRow + 1;    //nearRow  最浅库位排
            } else if ((curRow - sRow + 1) % 4 == 0) {
                necessaryParameters[1] = curRow;    //curRow   最深库位排
                necessaryParameters[2] = (curRow - sRow + 1) / 4 + sCrnNo - 1;     //crnNo     堆垛机号
                necessaryParameters[3] = curRow - 1;    //nearRow  最浅库位排
        if (BooleanWhsTypeSta2(whsType)) {
            necessaryParameters[0] = crnNumber; // 轮询次数
            //满板正常入库
            if (curRow.equals(crnNumber * 4)) {
                necessaryParameters[1] = 1;    //curRow   最深库位排
                necessaryParameters[2] = 1;     //crnNo     堆垛机号
                necessaryParameters[3] = 2;    //nearRow  最浅库位排
            } else if (curRow.equals(crnNumber * 4 - 3)) {
                necessaryParameters[1] = 4;    //curRow   最深库位排
                necessaryParameters[2] = 1;     //crnNo     堆垛机号
                necessaryParameters[3] = 3;    //nearRow  最浅库位排
            } else {
                throw new CoolException("库位排号异常:排号:" + curRow);
                curRow = curRow + 4;
                if (curRow < 1 || curRow > (crnNumber * 4)) {
                    throw new CoolException("库位排号异常:排号:" + curRow);
                }
                if ((curRow - 1) % 4 == 0) {
                    necessaryParameters[1] = curRow;    //curRow   最深库位排
                    necessaryParameters[2] = (curRow + 3) / 4;     //crnNo     堆垛机号
                    necessaryParameters[3] = curRow + 1;    //nearRow  最浅库位排
                } else if (curRow % 4 == 0) {
                    necessaryParameters[1] = curRow;    //curRow   最深库位排
                    necessaryParameters[2] = curRow / 4;     //crnNo     堆垛机号
                    necessaryParameters[3] = curRow - 1;    //nearRow  最浅库位排
                } else {
                    throw new CoolException("库位排号异常:排号:" + curRow);
                }
            }
        }
        return necessaryParameters;
    }
src/main/java/com/zy/common/model/LocTypeDto.java
@@ -29,11 +29,7 @@
        if (basDevp.getLocType1() == null || basDevp.getLocType1() == 0) {
            throw new CoolException("plc高低检测异常");
        }
        if (basDevp.getLocType1() == 1) {
            this.locType1 = 1; // 低库位
        } else {
            this.locType1 = 2; // 高库位
        }
        this.locType1 = basDevp.getLocType1();
        log.info(JSON.toJSONString(this));
    }
src/main/java/com/zy/common/service/CommonService.java
@@ -209,7 +209,7 @@
        //此程序用于优化堆垛机异常时的运行时间
        for (int i = times; i < crnNumber*2; i++) {
            int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
            int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber,whsType);
            curRow = locNecessaryParameters[1];
            crnNo = locNecessaryParameters[2];
            if (basCrnpService.checkSiteError(crnNo, true)) {
@@ -507,7 +507,7 @@
        //此程序用于优化堆垛机异常时的运行时间
        for (int i = times; i < crnNumber*2; i++) {
            int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
            int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber,whsType);
            rowCount =  locNecessaryParameters[0];
            curRow = locNecessaryParameters[1];
            crnNo = locNecessaryParameters[2];
@@ -560,7 +560,7 @@
                for (int i = 0; i < crnNumber*2; i++) {
                    if (!(Utils.getRow(locMastGro.getLocNo())>nearRowW && Utils.getRow(locMastGro.getLocNo())<=curRowW) && !(Utils.getRow(locMastGro.getLocNo())<nearRowW && Utils.getRow(locMastGro.getLocNo())>=curRowW) ){
                        int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRowW, crnNumber);
                        int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRowW, crnNumber,whsType);
                        curRowW = locNecessaryParameters[1];
                        nearRowW = locNecessaryParameters[3];
                    }else {
@@ -626,7 +626,7 @@
                for (int i = 0; i < crnNumber*2; i++) {
                    if (!(Utils.getRow(locMastGro.getLocNo())>nearRowW && Utils.getRow(locMastGro.getLocNo())<=curRowW) && !(Utils.getRow(locMastGro.getLocNo())<nearRowW && Utils.getRow(locMastGro.getLocNo())>=curRowW) ){
                        int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRowW, crnNumber);
                        int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRowW, crnNumber,whsType);
                        curRowW = locNecessaryParameters[1];
                        nearRowW = locNecessaryParameters[3];
                    }else {
@@ -655,7 +655,7 @@
        // 靠近摆放规则 --- 空托 //互通版
        if (staDescId == 10  && Utils.BooleanWhsTypeStaIoType(rowLastno)) {
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow));
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow).eq("crn_no",7));
            int nearbay = 0;
            int nearlev = 0;
            for (LocMast locMastSign:locMasts){
@@ -678,7 +678,7 @@
                for (int i = 0; i < crnNumber*2; i++) {
                    if (!(Utils.getRow(locMastGro.getLocNo())>nearRowW && Utils.getRow(locMastGro.getLocNo())<=curRowW) && !(Utils.getRow(locMastGro.getLocNo())<nearRowW && Utils.getRow(locMastGro.getLocNo())>=curRowW) ){
                        int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRowW, crnNumber);
                        int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRowW, crnNumber,whsType);
                        curRowW = locNecessaryParameters[1];
                        nearRowW = locNecessaryParameters[3];
                    }else {
@@ -696,7 +696,7 @@
                        bay2=Utils.getBay(locMast2.getLocNo())+1;
                    }
                    String targetLocNo = locMast2.getLocNo().substring(0,2)  +zerofill(String.valueOf(bay2), 3) + locMast2.getLocNo().substring(5);
                    locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",targetLocNo).eq("loc_sts","O"));
                    locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",targetLocNo).eq("crn_no",7).eq("loc_sts","O"));
                    if (Cools.isEmpty(locMast)){
                        continue;
                    }
@@ -742,7 +742,9 @@
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("bay1", nearRow)
                    .eq("loc_sts", "O").eq("whs_type",rowLastnoType.getType().longValue())
                    .eq("crn_no",7)
                    .orderBy("lev1",true).orderBy("row1",false));//最浅库位
            for (LocMast locMast1 : locMasts) {
                if (locMast != null){
                    break;
@@ -761,15 +763,18 @@
                    if (curRow < nearRow){
                        locMasts1 = locMastService.selectList(new EntityWrapper<LocMast>()
                                .eq("gro1", locMast1.getGro1())
                                .eq("crn_no",7)
                                .orderBy("bay1",true));
                        if(locMasts1.size() == 3  || (curRow>20 && locMasts1.size() == 2)){
                            locMasts1 = locMastService.selectList(new EntityWrapper<LocMast>()
                                    .eq("gro1", locMast1.getGro1())
                                    .eq("crn_no",7)
                                    .orderBy("bay1",false));
                        }
                    }else {
                        locMasts1 = locMastService.selectList(new EntityWrapper<LocMast>()
                                .eq("gro1", locMast1.getGro1())
                                .eq("crn_no",7)
                                .orderBy("bay1",false));
                    }
                    if (Cools.isEmpty(locMasts1)) {
@@ -879,7 +884,7 @@
        }
        //此程序用于优化堆垛机异常时的运行时间
        int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
        int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber,whsType);
        curRow = locNecessaryParameters[1];
        crnNo = locNecessaryParameters[2];
        rowCount =  locNecessaryParameters[0];
src/main/resources/application.yml
@@ -39,7 +39,7 @@
#License相关配置
license:
  subject: gdkyasrs
  subject: jxgtwms
  publicAlias: publicCert
  storePass: public_zhongyang_123456789
  licensePath: license.lic
@@ -50,7 +50,7 @@
  # 双深
  doubleDeep: true
  # 双深库位排号
  doubleLocs: 1,4,5,8,9,12,13,16
  doubleLocs: 1,4,5,8
  # 一个堆垛机负责的货架排数
  groupCount: 4
  # 左深库位排号
@@ -105,4 +105,4 @@
  url: ""
  taskCreatePath: ""
shuttleWcs:
  url: "127.0.0.1:9090/wcs"
  url: "10.200.50.222:9090/wcs"
src/main/resources/license.lic
Binary files differ
src/main/resources/mapper/WrkMastMapper.xml
@@ -70,7 +70,7 @@
        select * from asr_wrk_mast
        where wrk_sts=5
        or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and dateadd(mi,15,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and dateadd(mi,1,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
        or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp))
        order by io_time,wrk_no asc
    </select>
src/main/webapp/static/js/mat/mat.js
@@ -334,10 +334,11 @@
                        var templateDom = $("#templatePreview"+templateNo);
                        var className = templateDom.attr("class");
                        var param = "编码:"+res.data[i].matnr+";名称:"+res.data[i].maktx+";规格:"+res.data[i].specs;
                        var encodeUrl = encodeURIComponent(param);
                        if (className === 'template-barcode') {
                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=1&param="+param;
                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=1&param="+encodeUrl;
                        } else {
                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2&param="+param;
                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2&param="+encodeUrl;
                        }
                    }
                    var tpl = templateDom.html();
src/main/webapp/static/js/order/order.js
@@ -47,6 +47,7 @@
            {align: 'center', title: '明细', toolbar: '#tbLook', minWidth: 160, width: 160},
            {field: 'createTime$', title: '创建时间', minWidth: 200, width: 200},
            {field: 'settle$', align: 'center', title: '状态', templet: '#settleTpl',  minWidth: 160, width: 160},
            {field: 'shipName', align: 'center',title: '制单人'},
            {field: 'memo', align: 'center',title: '备注', hide: true},
            {align: 'center', title: '操作', toolbar: '#operate', width: 180}
        ]],
src/main/webapp/views/locMast/locMast.html
@@ -217,7 +217,8 @@
                    <option style="display: none"></option>
                    <option value="0">未知</option>
                    <option value="1">低库位</option>
                    <option value="2">高库位</option>
                    <option value="2">中库位</option>
                    <option value="3">高库位</option>
                </select>
            </div>
        </div>
src/main/webapp/views/mat/mat.html
@@ -355,7 +355,7 @@
<!-- 模板引擎 -->
<script type="text/template" id="templatePreview1" class="template-qrcode">
    {{#each data}}
    <div style="width: 150px;height: 300px;">
    <div style="width: 150px;">
        <div>
            <img class="template-qrcode" src="{{this.barcodeUrl}}">
            <div style="text-align: center;">{{this.matnr}}</div>