| | |
| | | * 添加入库单 |
| | | */ |
| | | @PostMapping("/order/pakin/default/v1") |
| | | @AppAuth(memo = "入库单据下发") |
| | | public synchronized R pakinOrderCreate(@RequestHeader(required = false) String appkey, |
| | | @RequestBody OpenOrderPakinParam param, |
| | | HttpServletRequest request) { |
| | |
| | | } |
| | | |
| | | 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; |
| | |
| | | } |
| | | // 生成入库通知档 |
| | | 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() + "入库数量不合法"); |
| | | } |
| | |
| | | } else { |
| | | detlDtos.add(detlDto); |
| | | } |
| | | }); |
| | | // }); |
| | | } |
| | | for (DetlDto detlDto : detlDtos) { |
| | | Mat mat = matService.selectByMatnr(detlDto.getMatnr()); |
| | | if (Cools.isEmpty(mat)) { |
| | |
| | | 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) { |
| | |
| | | } |
| | | } |
| | | |
| | | @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(){ |
| | |
| | | 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://经典单双伸库位 左单右双(小单大双) |
| | |
| | | } |
| | | |
| | | //经典双伸库位 |
| | | 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; |
| | | } |
| | | |
| | |
| | | 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)); |
| | | } |
| | | |
| | |
| | | |
| | | //此程序用于优化堆垛机异常时的运行时间 |
| | | 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)) { |
| | |
| | | |
| | | //此程序用于优化堆垛机异常时的运行时间 |
| | | 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]; |
| | |
| | | |
| | | 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 { |
| | |
| | | |
| | | 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 { |
| | |
| | | |
| | | // 靠近摆放规则 --- 空托 //互通版 |
| | | 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){ |
| | |
| | | |
| | | 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 { |
| | |
| | | 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; |
| | | } |
| | |
| | | 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; |
| | |
| | | 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)) { |
| | |
| | | } |
| | | |
| | | //此程序用于优化堆垛机异常时的运行时间 |
| | | int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber); |
| | | int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber,whsType); |
| | | curRow = locNecessaryParameters[1]; |
| | | crnNo = locNecessaryParameters[2]; |
| | | rowCount = locNecessaryParameters[0]; |
| | |
| | | |
| | | #License相关配置 |
| | | license: |
| | | subject: gdkyasrs |
| | | subject: jxgtwms |
| | | publicAlias: publicCert |
| | | storePass: public_zhongyang_123456789 |
| | | licensePath: license.lic |
| | |
| | | # 双深 |
| | | doubleDeep: true |
| | | # 双深库位排号 |
| | | doubleLocs: 1,4,5,8,9,12,13,16 |
| | | doubleLocs: 1,4,5,8 |
| | | # 一个堆垛机负责的货架排数 |
| | | groupCount: 4 |
| | | # 左深库位排号 |
| | |
| | | url: "" |
| | | taskCreatePath: "" |
| | | shuttleWcs: |
| | | url: "127.0.0.1:9090/wcs" |
| | | url: "10.200.50.222:9090/wcs" |
| | |
| | | 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) <= getdate() and wrk_no not in (select wrk_no from asr_bas_devp)) |
| | | or (wrk_sts=15 and dateadd(mi,1,crn_end_time) <= 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> |
| | |
| | | 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¶m="+param; |
| | | res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=1¶m="+encodeUrl; |
| | | } else { |
| | | res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2¶m="+param; |
| | | res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2¶m="+encodeUrl; |
| | | } |
| | | } |
| | | var tpl = templateDom.html(); |
| | |
| | | {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} |
| | | ]], |
| | |
| | | <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> |
| | |
| | | <!-- 模板引擎 --> |
| | | <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> |