From 8359572be2164aec32219fafd5e72f4035067dff Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期二, 01 八月 2023 08:52:26 +0800
Subject: [PATCH] agv 订单出库功能
---
src/main/java/com/zy/asrs/service/AgvLocDetlService.java | 5
src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java | 62 +++++
src/main/java/com/zy/asrs/service/LocDetlService.java | 3
src/main/java/com/zy/asrs/entity/LocDetl.java | 4
src/main/webapp/static/js/order/out.js | 36 ++
src/main/webapp/views/mat/mat.html | 47 ++++
src/main/java/com/zy/common/model/TaskDto.java | 8
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java | 216 +++++++++++++++++--
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java | 43 +++
src/main/java/com/zy/common/model/LocDto.java | 11 +
src/main/java/com/zy/asrs/controller/OutController.java | 216 +++++++++++++++++++
src/main/java/com/zy/asrs/service/AgvWorkService.java | 9
12 files changed, 616 insertions(+), 44 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 528b9e3..79c18af 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -3,9 +3,9 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
-import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
+import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.common.model.LocDto;
@@ -17,7 +17,9 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
import java.util.stream.Collectors;
/**
@@ -43,6 +45,15 @@
private BasDevpService basDevpService;
@Autowired
private MatService matService;
+ @Autowired
+ private AgvLocMastService agvLocMastService;
+ @Autowired
+ private AgvBasDevpService agvBasDevpService;
+ @Autowired
+ private AgvWorkService agvWorkService;
+
+ @Autowired
+ private AgvLocDetlService agvLocDetlService;
@PostMapping("/out/pakout/orderDetlIds/auth")
@ManagerAuth
@@ -51,9 +62,34 @@
return R.ok().add(orderDetlService.selectByOrderId(orderId).stream().map(OrderDetl::getId).distinct().collect(Collectors.toList()));
}
+ //鍑哄簱
@PostMapping("/out/pakout/preview/auth")
@ManagerAuth
public R pakoutPreview(@RequestBody List<Long> ids) {
+
+ List<OrderDetl> orderDetlList = orderDetlService.selectBatchIds(ids);
+ //杩斿洖缁欏墠绔殑搴撲綅浠ュ強绔欑偣淇℃伅
+ List<LocDto> locDtoList = new ArrayList<>();
+
+ for (OrderDetl orderDetl : orderDetlList) {
+ double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
+ if (issued <= 0.0D) { continue; }
+
+ //鍏堟壘AGV鐨勫簱瀛橈紝濡傛灉杩斿洖鐨刬ssued澶т簬0锛屽垯鍘诲洓椤瑰簱鎵�
+ issued = agvLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued);
+
+ //浠庡洓椤瑰簱鐨勫簱瀛橀噷闈㈡壘锛�
+ issued = locDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued);
+
+ if (issued > 0) {
+ LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
+ locDto.setLack(Boolean.TRUE);
+ locDtoList.add(locDto);
+ }
+ }
+ return R.ok().add(locDtoList);
+
+ /*
if (Cools.isEmpty(ids)) {
return R.parse(BaseRes.PARAM);
}
@@ -90,13 +126,54 @@
locDtos.add(locDto);
}
}
- return R.ok().add(locDtos);
+ return R.ok().add(locDtos); */
}
@PostMapping("/out/pakout/auth")
@ManagerAuth(memo = "璁㈠崟鍑哄簱")
@Transactional
public synchronized R pakout(@RequestBody List<LocDto> locDtos) throws InterruptedException {
+
+ //鍒ゆ柇鏄惁鍙互鐢熸垚鍑哄簱宸ヤ綔妗�
+ boolean lack = true;
+ for (LocDto locDto : locDtos) {
+ //濡傛灉AGV鍑哄簱绔欎负绌� 鍜� 鍥涢」搴撳嚭搴撶珯涓虹┖ 骞朵笖 鏈夊簱瀛樼殑鎯呭喌涓� 鍒欒繑鍥�
+ if (Cools.isEmpty(locDto.getStaNo()) && Cools.isEmpty(locDto.getAgvStaNo()) &&!locDto.isLack()) {
+ return R.error(locDto.getLocNo()+"搴撲綅璇烽�夋嫨鍑哄簱绔�");
+ }
+ }
+ //濡傛灉鎵�鏈夊簱閮芥病鏈夊簱瀛橈紝鍒欒繑鍥�
+ for (LocDto locDto : locDtos) {
+ if (!locDto.isLack()) {
+ lack = false;
+ break;
+ }
+ }
+ if (lack) {
+ return R.error("搴撳瓨涓嶈冻");
+ }
+ Thread.sleep(500L);
+
+ // 璁㈠崟棰勬牎楠� ===>> 1.璁㈠崟鐘舵�侊紱 2.璁㈠崟甯﹀嚭鏁伴噺
+ List<OrderDto> orderDtos = orderPreVerification(locDtos);
+
+ List<TaskDto> taskDtos = new ArrayList<>();
+ List<TaskDto> agvTaskDtos = new ArrayList<>();
+ generateTaskDto(locDtos,taskDtos,agvTaskDtos);
+
+ //鐢熸垚AGV鍑哄簱浠诲姟
+ agvWorkService.stockOutWrkMast(agvTaskDtos, getUserId());
+
+ // 鐢熸垚鍑哄簱浠诲姟
+ List<String> excludeLocNos = taskDtos.stream().map(TaskDto::getLocNo).distinct().collect(Collectors.toList());
+ for (TaskDto taskDto : taskDtos) {
+ BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
+ workService.stockOut(staNo, taskDto, getUserId());
+ locMastService.breakUp(taskDto.getLocNo(), excludeLocNos);
+ }
+ return R.ok();
+
+ /*
if (Cools.isEmpty(locDtos)) {
return R.parse(BaseRes.PARAM);
}
@@ -184,7 +261,7 @@
workService.stockOut(staNo, taskDto, getUserId());
locMastService.breakUp(taskDto.getLocNo(), excludeLocNos);
}
- return R.ok();
+ return R.ok();*/
}
@@ -200,6 +277,31 @@
@PostMapping("/out/pakout/preview/merge/auth")
@ManagerAuth
public R pakoutPreviewMerge(@RequestBody List<OrderMergeVo> list) {
+
+ //杩斿洖缁欏墠绔殑搴撲綅浠ュ強绔欑偣淇℃伅
+ List<LocDto> locDtoList = new ArrayList<>();
+
+ for (OrderMergeVo vo : list) {
+ double issued = Optional.of(vo.getAnfme()).orElse(0.0D);
+ if (issued <= 0.0D) {
+ continue;
+ }
+ //鍏堟壘AGV鐨勫簱瀛橈紝濡傛灉杩斿洖鐨刬ssued澶т簬0锛屽垯鍘诲洓椤瑰簱鎵�
+ issued = agvLocDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),null,locDtoList,issued);
+ //浠庡洓椤瑰簱鐨勫簱瀛橀噷闈㈡壘锛�
+ issued = locDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),null,locDtoList,issued);
+
+ if (issued > 0) {
+ LocDto locDto = new LocDto(null, vo.getMatnr(), vo.getMaktx(), vo.getBatch(), null, issued);
+ locDto.setLack(Boolean.TRUE);
+ locDtoList.add(locDto);
+ }
+
+ }
+
+ return R.ok().add(locDtoList);
+
+ /*
if (Cools.isEmpty(list)) {
return R.parse(BaseRes.PARAM);
}
@@ -236,7 +338,111 @@
assert mat != null;
locDto.setSpecs(mat.getSpecs());
}
- return R.ok().add(locDtos);
+ return R.ok().add(locDtos);*/
}
+
+ /*
+ 鐢熸垚鍑哄簱浠诲姟dto
+ */
+ private void generateTaskDto(List<LocDto> locDtos, List<TaskDto> taskDtos, List<TaskDto> agvTaskDtos){
+ // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
+ for (LocDto locDto : locDtos) {
+ if (locDto.isLack()) { continue; }
+ //AGV搴�
+ if(!Cools.isEmpty(locDto.getAgvStaNos())){
+ generateTaskDtoForAgv(locDto,agvTaskDtos);
+
+ //鍥涢」搴�
+ }else{
+ generateTaskDtoForBase(locDto,taskDtos);
+ }
+
+ }
+ }
+
+ /*
+ 鐢熸垚AGV鐨勪换鍔to
+ */
+ private void generateTaskDtoForAgv(LocDto locDto, List<TaskDto> agvTaskDtos){
+ // 闃叉鍓嶇椤甸潰鎻愬彇搴撲綅淇℃伅鍚庯紝鍦ㄥ叾浠栧湴鏂瑰璇ュ簱浣嶇敓鎴愪簡鍑哄簱浠诲姟(搴撲綅鐘舵�侀潪F鐘舵��)
+ AgvLocMast agvLocMast = agvLocMastService.selectById(locDto.getLocNo());
+ if(!Cools.isEmpty(agvLocMast) && !agvLocMast.getLocSts().equals("F")){
+ throw new CoolException("搴撲綅鍙烽潪鍦ㄥ簱鐘舵�侊紝璇烽噸鏂伴�夋嫨鍑哄簱搴撲綅===>>" + locDto.getLocNo());
+ }
+ AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>()
+ .eq("station_code", locDto.getAgvStaNo())
+ .eq("loc_sts", "O"));
+ if(Cools.isEmpty(agvBasDevp)){
+ //TODO 鍋囧鍑哄簱绔欑偣涓嶈冻锛岃褰曟湭鍑哄簱鐨勫簱浣嶏紱
+ return;
+ }
+ TaskDto taskDto = new TaskDto(locDto.getLocNo(), agvBasDevp.getDevNo(), locDto);
+ //TODO 鏆備笉鑰冭檻搴撲綅娣疯浇鐘舵�侊紙鍚庣画鐪嬫儏鍐垫槸鍚﹂渶瑕佸垽鏂級
+ agvTaskDtos.add(taskDto);
+
+ }
+
+ /*
+ 鐢熸垚鍥涢」搴撶殑浠诲姟dto
+ */
+ private void generateTaskDtoForBase(LocDto locDto, List<TaskDto> taskDtos){
+ // 闃叉鍓嶇椤甸潰鎻愬彇搴撲綅淇℃伅鍚庯紝鍦ㄥ叾浠栧湴鏂瑰璇ュ簱浣嶇敓鎴愪簡鍑哄簱浠诲姟(搴撲綅鐘舵�侀潪F鐘舵��)
+ LocMast locMast = locMastService.selectById(locDto.getLocNo());
+ if(!Cools.isEmpty(locMast) && !locMast.getLocSts().equals("F")){
+ throw new CoolException("搴撲綅鍙烽潪鍦ㄥ簱鐘舵�侊紝璇烽噸鏂伴�夋嫨鍑哄簱搴撲綅===>>" + locDto.getLocNo());
+ }
+
+ TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
+ //濡傛灉搴撲綅瀛樺湪娣疯浇
+ if (TaskDto.has(taskDtos, taskDto)) {
+ TaskDto dto = TaskDto.find(taskDtos, taskDto);
+ assert dto != null;
+ dto.getLocDtos().addAll(taskDto.getLocDtos());
+ } else {
+ taskDtos.add(taskDto);
+ }
+ }
+
+ /*
+ 璁㈠崟棰勬牎楠� ===>> 1.璁㈠崟鐘舵�侊紱 2.璁㈠崟甯﹀嚭鏁伴噺
+ */
+ private List<OrderDto> orderPreVerification(List<LocDto> locDtos){
+ List<OrderDto> orderDtos = new ArrayList<>();
+ for (LocDto locDto : locDtos) {
+ if (!isJSON(locDto.getOrderNo())) {
+ //if (!Cools.isEmpty(locDto.getOrderNo())) {
+ if (Cools.isEmpty(locDto.getOrderNo())) { continue; }
+ OrderDto orderDto = new OrderDto(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getAnfme());
+ if (OrderDto.has(orderDtos, orderDto)) {
+ OrderDto dto = OrderDto.find(orderDtos, orderDto);
+ assert dto != null;
+ dto.setAnfme(dto.getAnfme() + orderDto.getAnfme());
+ } else {
+ orderDtos.add(orderDto);
+ }
+ } else {
+ // 璁㈠崟鍚堝苟鍑哄簱
+ List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
+ for (OrderDto one : orderDtoList) {
+ OrderDto orderDto = new OrderDto(one.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), one.getAnfme());
+ if (OrderDto.has(orderDtos, orderDto)) {
+ OrderDto dto = OrderDto.find(orderDtos, orderDto);
+ assert dto != null;
+ dto.setAnfme(dto.getAnfme() + orderDto.getAnfme());
+ } else {
+ orderDtos.add(orderDto);
+ }
+ }
+ }
+ }
+ for (OrderDto orderDto : orderDtos) {
+ Order order = orderService.selectByNo(orderDto.getOrderNo());
+ if (order.getSettle() > 2) {
+ throw new CoolException(orderDto.getOrderNo() + "璁㈠崟宸插け鏁堬紝璇峰強鏃跺埛鏂伴〉闈�");
+ //return R.error(orderDto.getOrderNo() + "璁㈠崟宸插け鏁堬紝璇峰強鏃跺埛鏂伴〉闈�");
+ }
+ }
+ return orderDtos;
+ }
}
diff --git a/src/main/java/com/zy/asrs/entity/LocDetl.java b/src/main/java/com/zy/asrs/entity/LocDetl.java
index 789ca66..ccb2015 100644
--- a/src/main/java/com/zy/asrs/entity/LocDetl.java
+++ b/src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -39,8 +39,8 @@
@ExcelProperty("鐗╂枡鍙�")
private String matnr;
- @ApiModelProperty(value= "鐗╂枡鍙�")
- @ExcelProperty("鐗╂枡鍙�")
+ @ApiModelProperty(value= "鐗╂枡鍚嶇О")
+ @ExcelProperty("鐗╂枡鍚嶇О")
private String maktx;
@ApiModelProperty(value= "搴忓垪鐮�")
diff --git a/src/main/java/com/zy/asrs/service/AgvLocDetlService.java b/src/main/java/com/zy/asrs/service/AgvLocDetlService.java
index 55a8220..8cfd7f0 100644
--- a/src/main/java/com/zy/asrs/service/AgvLocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/AgvLocDetlService.java
@@ -2,9 +2,14 @@
import com.baomidou.mybatisplus.service.IService;
import com.zy.asrs.entity.AgvLocDetl;
+import com.zy.common.model.LocDto;
+
+import java.util.List;
public interface AgvLocDetlService extends IService<AgvLocDetl> {
public void addLocDetlInfo(String locNo, int taskCode);
+ public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued);
+
}
diff --git a/src/main/java/com/zy/asrs/service/AgvWorkService.java b/src/main/java/com/zy/asrs/service/AgvWorkService.java
index d8b1ccf..a8f884a 100644
--- a/src/main/java/com/zy/asrs/service/AgvWorkService.java
+++ b/src/main/java/com/zy/asrs/service/AgvWorkService.java
@@ -2,16 +2,21 @@
import com.zy.asrs.entity.AgvBasDevp;
import com.zy.common.model.StartupDto;
+import com.zy.common.model.TaskDto;
import java.util.List;
public interface AgvWorkService {
- /**
- * 閫氱煡妗f墜鍔ㄧ敓鎴愪换鍔�
+ /*
+ 閫氱煡妗f墜鍔ㄧ敓鎴愪换鍔�
*/
StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId);
+ /*
+ 鐢熸垚鍑哄簱浠诲姟
+ */
+ void stockOutWrkMast(List<TaskDto> agvTaskDtos, Long userId);
}
diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java
index 2a0111c..62d7438 100644
--- a/src/main/java/com/zy/asrs/service/LocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.service.IService;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.result.StockVo;
+import com.zy.common.model.LocDto;
import java.util.List;
import java.util.Set;
@@ -51,6 +52,8 @@
List<LocDetl> queryStock(String matnr, String batch, String orderNo, Set<String> locNos);
+ double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued);
+
Double queryStockAnfme(String matnr, String batch);
List<StockVo> queryStockTotal();
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java
index 61b924b..736601e 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java
@@ -1,16 +1,23 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.Cools;
import com.zy.asrs.entity.AgvLocDetl;
+import com.zy.asrs.entity.AgvLocMast;
import com.zy.asrs.entity.AgvWrkDetl;
import com.zy.asrs.mapper.AgvLocDetlMapper;
+import com.zy.asrs.service.AgvBasDevpService;
import com.zy.asrs.service.AgvLocDetlService;
+import com.zy.asrs.service.AgvLocMastService;
import com.zy.asrs.service.AgvWrkDetlService;
+import com.zy.common.model.LocDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -19,6 +26,10 @@
@Autowired
AgvWrkDetlService agvWrkDetlService;
+ @Autowired
+ AgvBasDevpService agvBasDevpService;
+ @Autowired
+ AgvLocMastService agvLocMastService;
public void addLocDetlInfo(String locNo, int taskCode) {
List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", taskCode));
@@ -31,4 +42,55 @@
}).collect(Collectors.toList());
}
+
+ public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued) {
+ //鏍规嵁鐗╂枡鍙峰拰鎵规鎵惧埌瀵瑰簲鐨勫簱瀛橈紝骞朵笖鎸夌収淇敼鏃堕棿鎺掑簭
+ Wrapper<AgvLocDetl> wrapper = new EntityWrapper<AgvLocDetl>().eq("matnr", matnr).orderBy("modi_time");
+ if(Cools.isEmpty(batch)){
+ wrapper.isNull("batch");
+ }else {
+ wrapper.eq("batch",batch);
+ }
+ List<AgvLocDetl> agvLocDetls = this.selectList(wrapper);
+
+ for (AgvLocDetl agvLocDetl: agvLocDetls) {
+ //鍒ゆ柇褰撳墠搴撲綅璐х墿鏄惁F鍦ㄥ簱
+ AgvLocMast agvLocMast = agvLocMastService.selectById(agvLocDetl.getLocNo());
+ if(!"F".equals(agvLocMast.getLocSts())){
+ continue;
+ }
+ //濡傛灉璁㈠崟鍓╀綑鍑哄簱閲忓ぇ浜�0
+ if(issued > 0) {
+ //褰撳墠搴撲綅鐨勫簱瀛橀噺
+ double anfme = agvLocDetl.getAnfme();
+ //int ioType = anfme > issued ? 101 : 103;
+ anfme = anfme > issued ? issued : anfme;
+ LocDto locDto = new LocDto(agvLocDetl.getLocNo(), agvLocDetl.getMatnr(), agvLocDetl.getMaktx(), agvLocDetl.getBatch(), orderNo, anfme);
+
+ //褰撳墠搴撲綅鎵�澶勬ゼ灞�
+ int floor = Integer.parseInt(agvLocDetl.getLocNo().split("@")[1]);
+ locDto.setAgvStaNos(queryAgvStaNosByFloor(floor));
+ locDtoList.add(locDto);
+
+ issued -= anfme;
+ }
+ }
+
+ return issued;
+
+ }
+
+ private List<String> queryAgvStaNosByFloor(int floor){
+ List<String> agvStaNos = new ArrayList<>();
+ if(floor == 1){
+ agvStaNos.add("CS-101");
+ agvStaNos.add("CS-102");
+ }else if(floor ==3){
+ agvStaNos.add("CS-305");
+ agvStaNos.add("CS-306");
+ agvStaNos.add("CS-307");
+ }
+
+ return agvStaNos;
+ }
}
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
index 9079d7c..8560782 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -1,12 +1,18 @@
package com.zy.asrs.service.impl;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
+import com.zy.common.model.LocDto;
+import com.zy.common.model.OrderDto;
import com.zy.common.model.StartupDto;
+import com.zy.common.model.TaskDto;
+import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.AgvCommonService;
+import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -34,6 +40,8 @@
@Autowired
private AgvLocMastService agvLockMastService;
@Autowired
+ private AgvLocDetlService agvLocDetlService;
+ @Autowired
private AgvCommonService agvCommonService;
@Autowired
private AgvWrkMastService agvWrkMastService;
@@ -41,8 +49,16 @@
private AgvWrkDetlService agvWrkDetlService;
@Autowired
private MatService matService;
+ @Autowired
+ private OrderService orderService;
+ @Autowired
+ private OrderDetlService orderDetlService;
- @Override
+
+ /*
+ 鍏ュ簱
+ */
+ @Transactional
public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId) {
Date now = new Date();
@@ -61,55 +77,107 @@
//妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅
AgvLocMast agvLocMast = agvCommonService.getLocNo(agvWaitPakinList, agvBasDevp.getFloor());
//鐢熸垚宸ヤ綔妗�
- AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId);
+ //AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId);
+ AgvWrkMast wrkMast = createWrkMast(1,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),agvBasDevp.getBarcode(),now,userId);
//鐢熸垚宸ヤ綔妗f槑缁�
- createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId);
+ //createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId);
+ agvWaitPakinList.forEach(wp -> {
+ createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getZpallet(),now,userId);
+ });
//鏇存柊婧愮珯鐐逛俊鎭�
- updateAgvBasDevp(agvBasDevp);
+ updateAgvBasDevp(agvBasDevp,"R");
//鏇存柊鐩爣搴撲綅鐘舵��
- updateAgvLocMast(agvLocMast);
+ updateAgvLocMast(agvLocMast,"S");
});
+ //TODO
return null;
+ }
+
+ /*
+ 璁㈠崟鍑哄簱
+ */
+ @Transactional
+ public void stockOutWrkMast(List<TaskDto> agvTaskDtos, Long userId) {
+ Date now = new Date();
+
+ agvTaskDtos.forEach(taskDto -> {
+
+ AgvLocMast agvLocMast = agvLockMastService.selectById(taskDto.getLocNo());
+
+ //宸ヤ綔妗f墍闇�鍙傛暟
+ double anfme = taskDto.getLocDtos().get(0).getAnfme();
+ long wrkSts = 21L;
+ String sourceLocNo = taskDto.getLocNo();
+ String targetLocNo = taskDto.getAgvStaNo();
+ String barcode = agvLocMast.getBarcode();
+ //鏄庣粏妗f墍闇�鍙傛暟
+ String mantr = taskDto.getLocDtos().get(0).getMatnr();
+ String orderNo = taskDto.getLocDtos().get(0).getOrderNo();
+ String batch = taskDto.getLocDtos().get(0).getBatch();
+
+ //鍒ゆ柇鏄惁鍏ㄦ澘鍑哄簱
+ int ioType = isPakOut(sourceLocNo,anfme) ? 101 : 103;
+ //鐢熸垚宸ヤ綔妗�
+ AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,barcode,now,userId);
+ //鐢熸垚宸ヤ綔妗f槑缁�
+ createWrkDetlReWrite(mantr,wrkMast.getWrkNo(),orderNo,batch,anfme,barcode,now,userId);
+ //淇敼璁㈠崟淇℃伅
+ modifyOrderDetl(taskDto.getLocDtos().get(0), userId);
+ //鏇存柊婧愮珯鐐逛俊鎭�
+ updateAgvLocMast(agvLockMastService.selectById(sourceLocNo),"R");
+ //鏇存柊鐩爣绔欑偣鐘舵��
+ updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo),"S");
+
+ });
}
/*
鏇存柊鐩爣搴撲綅淇℃伅
*/
- private void updateAgvLocMast(AgvLocMast locMast){
- locMast.setLocSts("S");
+ private void updateAgvLocMast(AgvLocMast locMast, String locSts){
+ locMast.setLocSts(locSts);
agvLockMastService.updateById(locMast);
}
/*
鏇存柊婧愮珯鐐逛俊鎭�
*/
- private void updateAgvBasDevp(AgvBasDevp agvBasDevp){
- agvBasDevp.setLocSts("R");
+ private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts){
+ agvBasDevp.setLocSts(locSts);
agvBasDevpService.updateById(agvBasDevp);
}
/*
鐢熸垚宸ヤ綔妗f槑缁�
*/
- /* private void createWrkDetl(List<AgvWaitPakin> agvWaitPakinList, AgvWrkMast wrkMast, Long userId){
- List<DetlDto> detlDtos = new ArrayList<>();
- agvWaitPakinList.forEach(agvWaitPakin -> {
- DetlDto detlDto = new DetlDto(agvWaitPakin.getMatnr(), agvWaitPakin.getBatch(), agvWaitPakin.getAnfme());
- if (DetlDto.has(detlDtos, detlDto)) {
- DetlDto detlDto1 = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
- assert detlDto1 != null;
- detlDto1.setAnfme(detlDto1.getAnfme() + detlDto.getAnfme());
- } else {
- detlDtos.add(detlDto);
- }
- });
- agvWrkDetlService.createWorkDetail(wrkMast.getWrkNo(), detlDtos, wrkMast.getBarcode(), userId);
- }*/
+ private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo,String batch, double anfme, String zpallet, Date now, Long userId){
+ Mat mat = matService.selectByMatnr(matnr);
+ if (Cools.isEmpty(mat)) {
+ throw new CoolException(matnr + "鍟嗗搧缁存姢澶辫触");
+ }
+ AgvWrkDetl wrkDetl = new AgvWrkDetl();
+ wrkDetl.sync(mat);
+ wrkDetl.setWrkNo(wrkNo);
+ wrkDetl.setOrderNo(orderNo);
+ wrkDetl.setIoTime(now);
+ wrkDetl.setBatch(batch);
+ wrkDetl.setAnfme(anfme); // 鏁伴噺
+ wrkDetl.setZpallet(zpallet); // 鎵樼洏鏉$爜
+ wrkDetl.setAppeUser(userId);
+ wrkDetl.setAppeTime(now);
+ wrkDetl.setModiUser(userId);
+ wrkDetl.setModiTime(now);
+ if (!agvWrkDetlService.insert(wrkDetl)) {
+ throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+ }
+ }
+
/*
鐢熸垚宸ヤ綔妗f槑缁�
*/
+ @Deprecated
private void createWrkDetlReWrite(List<AgvWaitPakin> agvWaitPakinList, AgvWrkMast wrkMast, Long userId){
Date now = new Date();
agvWaitPakinList.stream().forEach(agvWaitPakin -> {
@@ -138,23 +206,71 @@
/*
鐢熸垚宸ヤ綔妗�
*/
+ private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId){
+ AgvWrkMast wrkMast = new AgvWrkMast();
+ //鐢熸垚宸ヤ綔鍙�
+ int workNo = agvCommonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+ wrkMast.setWrkNo(workNo);
+ //宸ヤ綔鐘舵��
+ wrkMast.setWrkSts(wrkSts);
+ //鍏ュ嚭搴撶被鍨�
+ wrkMast.setIoType(ioType);
+ wrkMast.setIoTime(now);
+ //浼樺厛绾�
+ wrkMast.setIoPri(300.0);
+ //婧愮珯鐐�
+ wrkMast.setSourceLocNo(sourceLocNo);
+ //鐩爣绔欑偣
+ wrkMast.setLocNo(locNo);
+ //瀹瑰櫒缂栫爜
+ wrkMast.setBarcode(barcode);
+ // 婊℃澘锛歒
+ //wrkMast.setFullPlt("Y");
+ // 鎷f枡
+ //wrkMast.setPicking("N");
+ // 閫�鍑�
+ //wrkMast.setExitMk("N");
+ // 绌烘澘
+ //wrkMast.setEmptyMk("N");
+ //wrkMast.setLinkMis("N");
+ wrkMast.setAppeUser(userId);
+ wrkMast.setAppeTime(now);
+ wrkMast.setModiUser(userId);
+ wrkMast.setModiTime(now);
+ if (!agvWrkMastService.insert(wrkMast)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+ }
+
+ return wrkMast;
+ }
+
+ /*
+ 鐢熸垚宸ヤ綔妗�
+ */
+ @Deprecated
private AgvWrkMast createWrkMast(AgvBasDevp agvBasDevp,AgvLocMast agvLocMast, Date now, Long userId){
AgvWrkMast wrkMast = new AgvWrkMast();
//鐢熸垚宸ヤ綔鍙�
int workNo = agvCommonService.getWorkNo(0);
wrkMast.setWrkNo(workNo);
wrkMast.setIoTime(new Date());
- wrkMast.setWrkSts(201L); // 宸ヤ綔鐘舵�侊細201.鐢熸垚鍏ュ簱浠诲姟ID
- wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+ // 宸ヤ綔鐘舵�侊細201.鐢熸垚鍏ュ簱浠诲姟ID
+ wrkMast.setWrkSts(201L);
+ // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+ wrkMast.setIoType(1);
//鐢熸垚浼樺厛绾�
wrkMast.setIoPri(300.0);
wrkMast.setSourceLocNo(agvBasDevp.getDevNo());
wrkMast.setLocNo(agvLocMast.getLocNo());
wrkMast.setBarcode(agvBasDevp.getBarcode());
- wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
- wrkMast.setPicking("N"); // 鎷f枡
- wrkMast.setExitMk("N"); // 閫�鍑�
- wrkMast.setEmptyMk("N"); // 绌烘澘
+ // 婊℃澘锛歒
+ wrkMast.setFullPlt("Y");
+ // 鎷f枡
+ wrkMast.setPicking("N");
+ // 閫�鍑�
+ wrkMast.setExitMk("N");
+ // 绌烘澘
+ wrkMast.setEmptyMk("N");
wrkMast.setLinkMis("N");
wrkMast.setAppeUser(userId);
wrkMast.setAppeTime(now);
@@ -164,6 +280,48 @@
throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
}
return wrkMast;
+ }
+
+ private boolean isPakOut(String locNo, double anfme){
+ AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo));
+ if(agvLocDetl.getAnfme() > anfme){
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ AGV鐢熸垚鍑哄簱宸ヤ綔妗e悗淇敼璁㈠崟淇℃伅
+ TODO 涓庡洓椤瑰簱鐢熸垚鍑哄簱宸ヤ綔妗e悗淇敼璁㈠崟淇℃伅鏁村悎鍒颁竴璧�
+ */
+ private void modifyOrderDetl(LocDto locDto, Long userId){
+
+ if (!BaseController.isJSON(locDto.getOrderNo())) {
+ //闈炲悎骞跺嚭搴�
+ OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
+ if (orderDetl == null) {
+ orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
+ }
+ if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
+ throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
+ }
+ orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
+ }else {
+ //鍚堝苟鍑哄簱
+ List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
+ for (OrderDto orderDto : orderDtoList) {
+ OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
+ if (orderDetl == null) {
+ orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null);
+ }
+ if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDto.getAnfme())) {
+ throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
+ }
+ orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
+ }
+ }
+
}
+
}
diff --git a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
index fdfcb31..3ab967b 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -1,13 +1,20 @@
package com.zy.asrs.service.impl;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.common.Cools;
import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.result.StockVo;
import com.zy.asrs.mapper.LocDetlMapper;
import com.zy.asrs.service.LocDetlService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.StaDescService;
+import com.zy.common.model.LocDto;
import com.zy.common.model.QueryStockPreDo;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@@ -16,6 +23,11 @@
@Service("locDetlService")
public class LocDetlServiceImpl extends ServiceImpl<LocDetlMapper, LocDetl> implements LocDetlService {
+
+ @Autowired
+ private StaDescService staDescService;
+ @Autowired
+ private LocMastService locMastService;
@Override
public Page<LocDetl> getStockOut(Page<LocDetl> page) {
@@ -87,6 +99,37 @@
return result;
}
+ //鍑哄簱
+ public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued) {
+ Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>().eq("matnr", matnr).orderBy("modi_time");
+ if(Cools.isEmpty(batch)){
+ wrapper.isNull("batch");
+ }else {
+ wrapper.eq("batch",batch);
+ }
+
+ List<LocDetl> locDetlList = this.selectList(wrapper);
+ for (LocDetl locDetl : locDetlList) {
+ //鍒ゆ柇褰撳墠搴撲綅璐х墿鏄惁F鍦ㄥ簱
+ LocMast locMast = locMastService.selectById(locDetl.getLocNo());
+ if(!"F".equals(locMast.getLocSts())){
+ continue;
+ }
+ if (issued > 0) {
+ double anfme = locDetl.getAnfme();
+ int ioType = anfme > issued ? 103 : 101;
+ anfme = anfme > issued ? issued : anfme;
+ LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderNo, anfme);
+ List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), ioType);
+ locDto.setStaNos(staNos);
+ locDtoList.add(locDto);
+ // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+ issued = issued - locDetl.getAnfme();
+ }
+ }
+ return issued;
+ }
+
@Override
public Double queryStockAnfme(String matnr, String batch) {
return this.baseMapper.queryStockAnfme(matnr, batch);
diff --git a/src/main/java/com/zy/common/model/LocDto.java b/src/main/java/com/zy/common/model/LocDto.java
index 59dcf61..cc84b06 100644
--- a/src/main/java/com/zy/common/model/LocDto.java
+++ b/src/main/java/com/zy/common/model/LocDto.java
@@ -27,7 +27,11 @@
private List<Integer> staNos;
+ private List<String> agvStaNos;
+
private Integer staNo;
+
+ private String agvStaNo;
private String specs;
@@ -69,4 +73,11 @@
}
}
+ public void setAgvStaNos(List<String> agvStaNos){
+ this.agvStaNos = agvStaNos;
+ if(!Cools.isEmpty(agvStaNos)){
+ this.agvStaNo = agvStaNos.get(0);
+ }
+ }
+
}
diff --git a/src/main/java/com/zy/common/model/TaskDto.java b/src/main/java/com/zy/common/model/TaskDto.java
index 4ba8064..723d633 100644
--- a/src/main/java/com/zy/common/model/TaskDto.java
+++ b/src/main/java/com/zy/common/model/TaskDto.java
@@ -20,6 +20,8 @@
private Integer staNo;
+ private String agvStaNo;
+
private List<LocDto> locDtos;
{
@@ -37,6 +39,12 @@
this.locDtos.add(locDto);
}
+ public TaskDto(String locNo, String agvStaNo, LocDto locDto) {
+ this.locNo = locNo;
+ this.agvStaNo = agvStaNo;
+ this.locDtos.add(locDto);
+ }
+
public TaskDto(String locNo, Integer staNo, List<LocDto> locDtos) {
this.locNo = locNo;
this.staNo = staNo;
diff --git a/src/main/webapp/static/js/order/out.js b/src/main/webapp/static/js/order/out.js
index b68649a..bfe89c1 100644
--- a/src/main/webapp/static/js/order/out.js
+++ b/src/main/webapp/static/js/order/out.js
@@ -143,6 +143,12 @@
}
function pakoutPreviewDialog(data) {
+ for(var i=0; i<data.length; i++){
+ if(!data[i].staNos){
+ data[i].staNos = data[i].agvStaNos;
+ data[i].staNo = data[i].agvStaNo;
+ }
+ }
var tableCache;
layer.open({
type: 1
@@ -170,10 +176,11 @@
{field: 'title', title: '鍟嗗搧', merge: true, align: 'center', width: 350},
{field: 'batch', title: '搴忓垪鐮�', align: 'center'},
{field: 'anfme', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
- {field: 'locNo', title: '璐т綅', align: 'center', width: 100, templet: '#locNoTpl'},
+ {field: 'locNo', title: '璐т綅', align: 'center', templet: '#locNoTpl'},
{field: 'staNos', align: 'center', title: '鍑哄簱绔�', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
// {type: 'checkbox', merge: ['locNo']},
]],
+ //cols: getCol(data),
done: function (res) {
tableMerge.render(this);
$('.layui-table-body.layui-table-main').css("overflow", "auto");
@@ -186,7 +193,8 @@
let data = tableCache[index];
for (let i = 0; i<tableCache.length; i++) {
if (tableCache[i].locNo === data.locNo) {
- tableCache[i]['staNo'] = Number(obj.elem.value);
+ //tableCache[i]['staNo'] = Number(obj.elem.value);
+ tableCache[i]['staNo'] = obj.elem.value;
}
}
obj.othis.children().find("input").css("color", "blue");
@@ -231,7 +239,8 @@
// 纭
form.on('submit(staBatchSelectConfirm)', function (obj) {
let loadIdx = layer.load(2);
- let batchSta = Number(obj.field.batchSta);
+ //let batchSta = Number(obj.field.batchSta);
+ let batchSta = obj.field.batchSta;
let arr = [];
for (let i = 0; i<tableCache.length; i++) {
tableCache[i]['staNo'] = batchSta;
@@ -270,6 +279,13 @@
function pakout(tableCache, layerIndex) {
// let loadIndex = layer.load(2);
+ for(var i=0; i<tableCache.length; i++){
+ if(tableCache[i].agvStaNos){
+ tableCache[i].agvStaNo = tableCache[i].staNo;
+ tableCache[i].staNos = null;
+ tableCache[i].staNo = null;
+ }
+ }
notice.msg('姝e湪鐢熸垚鍑哄簱浠诲姟......', {icon: 4});
$.ajax({
url: baseUrl + "/out/pakout/auth",
@@ -439,6 +455,12 @@
}
function pakoutPreviewMergeDialog(data) {
+ for(var i=0; i<data.length; i++){
+ if(!data[i].staNos){
+ data[i].staNos = data[i].agvStaNos;
+ data[i].staNo = data[i].agvStaNo;
+ }
+ }
var mergeTabCache;
layer.open({
type: 1
@@ -466,7 +488,7 @@
{field: 'specs', title: '瑙勬牸', align: 'center'},
{field: 'batch', title: '搴忓垪鐮�', align: 'center'},
{field: 'anfme', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
- {field: 'locNo', title: '璐т綅', align: 'center', width: 100, templet: '#locNoTpl'},
+ {field: 'locNo', title: '璐т綅', align: 'center', templet: '#locNoTpl'},
{field: 'staNos', align: 'center', title: '鍑哄簱绔�', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
// {type: 'checkbox', merge: ['locNo']},
]],
@@ -482,7 +504,8 @@
let data = mergeTabCache[index];
for (let i = 0; i<mergeTabCache.length; i++) {
if (mergeTabCache[i].locNo === data.locNo) {
- mergeTabCache[i]['staNo'] = Number(obj.elem.value);
+ //mergeTabCache[i]['staNo'] = Number(obj.elem.value);
+ mergeTabCache[i]['staNo'] = obj.elem.value;
}
}
obj.othis.children().find("input").css("color", "blue");
@@ -527,7 +550,8 @@
// 纭
form.on('submit(staBatchSelectConfirm)', function (obj) {
let loadIdx = layer.load(2);
- let batchSta = Number(obj.field.batchSta);
+ //let batchSta = Number(obj.field.batchSta);
+ let batchSta = obj.field.batchSta;
let arr = [];
for (let i = 0; i<mergeTabCache.length; i++) {
mergeTabCache[i]['staNo'] = batchSta;
diff --git a/src/main/webapp/views/mat/mat.html b/src/main/webapp/views/mat/mat.html
index 4b9a401..4f734c4 100644
--- a/src/main/webapp/views/mat/mat.html
+++ b/src/main/webapp/views/mat/mat.html
@@ -270,6 +270,7 @@
<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">
+ <input type="radio" name="selectTemplate" value="4" title="妯℃澘鍥�" lay-filter="selectTemplateRadio">
</div>
<fieldset class="layui-elem-field site-demo-button" style="margin-top: 30px;text-align: left;">
<legend>鎵撳嵃棰勮</legend>
@@ -334,6 +335,24 @@
<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>
+
+ <!-- 棰勮鍥� 4 -->
+ <div id="template-preview-4" 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" >鍟嗗搧</td>
+ <td align="center" scope="col" style="">xxxxxx-xx/xx</td>
+ <td align="center" scope="col" colspan="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" >瑙勬牸</td>
+ <td align="center" colspan="3" >xxxxxxx</td>
</tr>
</table>
</div>
@@ -426,6 +445,34 @@
{{/each}}
</script>
+<!-- 妯℃澘4 -->
+<script type="text/template" id="templatePreview4" class="template-qrcode">
+ {{#each data}}
+ <table class="contain" width="400px" style="overflow: hidden;font-size: xx-small;table-layout: fixed; color:#000;">
+ <tr style="height: 74px;font-size: 18px; font-weight: 400" >
+ <td width="50px" align="center" scope="col" colspan="1">鍟嗗搧</td>
+ <td width="170px" align="center" scope="col" colspan="1">{{this.maktx}}</td>
+ <td align="center" scope="col" colspan="2" >
+ <img class="template-code template-qrcode" src="{{this.barcodeUrl}}" width="80%">
+ <div style="letter-spacing: 1px;margin-top: 1px; text-align: center; font-weight: 400">
+ <span>{{this.matnr}}</span>
+ </div>
+ </td>
+ </tr>
+ <tr style="height: 74px; font-size: 18px;font-weight: 400">
+ <td width="50px" align="center" colspan="1">瑙勬牸</td>
+ <td align="center" colspan="3" style="
+ overflow:hidden;
+ text-overflow:ellipsis;
+ -webkit-line-clamp: 3;
+ -webkit-box-orient: vertical;
+ word-break: break-all;
+ ">{{this.specs}}</td>
+ </tr>
+ </table>
+ {{/each}}
+</script>
+
</body>
</html>
--
Gitblit v1.9.1