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