From eed51ce47f20afb0661acc42baa680fcb6351a39 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 26 一月 2026 13:16:14 +0800
Subject: [PATCH] 6.8	查询所有库位状态和物料-二机床信息化数字孪生用

---
 src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java | 1406 ----------------------------------------------------------
 1 files changed, 1 insertions(+), 1,405 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
index 4d03fa8..299f068 100644
--- a/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -1,1405 +1 @@
-package com.zy.asrs.service.impl;
-
-import com.alibaba.excel.util.StringUtils;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.core.common.Cools;
-import com.core.common.SnowflakeIdWorker;
-import com.core.exception.CoolException;
-import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.mes.*;
-import com.zy.asrs.entity.rcs.*;
-import com.zy.asrs.mapper.AgvInfoMapper;
-import com.zy.asrs.mapper.MatItemBarcodeMapper;
-import com.zy.asrs.service.*;
-import com.zy.asrs.utils.OrderInAndOutUtil;
-import com.zy.common.model.LocDetlDto;
-import com.zy.common.model.enums.WorkNoType;
-import com.zy.common.service.CommonService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-import java.text.ParseException;
-import java.util.*;
-import java.util.stream.Collectors;
-
-@Slf4j
-@Service
-public class MesServiceImpl implements MesService {
-
-    @Value("${mes.url}")
-    public String MES_URL;
-    @Value("${wms.currentName}")
-    public String WMS_CURRENT_NAME;
-    @Value("${wms.wmsTransStartStation1}")
-    public String WMS_TRANS_START_STATION_1;
-    @Value("${wms.wmsTransStartStation2}")
-    public String WMS_TRANS_START_STATION_2;
-    @Value("${wms.wmsTransStartStation3}")
-    public String WMS_TRANS_START_STATION_3;
-    @Value("${mes.defaultUserId}")
-    public long defaultUserId;
-    @Value("${wms.zpalletId}")
-    public String WMS_ZPALLET_ID;
-
-    @Resource
-    private RcsService rcsService;
-    @Resource
-    private MatService matService;
-    @Resource
-    private TagService tagService;
-    @Resource
-    private OrderPakinService orderPakinService;
-    @Resource
-    private OrderDetlPakinService orderDetlPakinService;
-    @Resource
-    private OrderPakoutService orderPakoutService;
-    @Resource
-    private OrderDetlPakoutService orderDetlPakoutService;
-    @Resource
-    private WaitPakinService waitPakinService;
-    @Resource
-    private TaskService taskService;
-    @Resource
-    private TaskDetlService taskDetlService;
-    @Resource
-    private SnowflakeIdWorker snowflakeIdWorker;
-    @Resource
-    private CommonService commonService;
-    @Resource
-    private AgvInfoMapper agvInfoMapper;
-    @Resource
-    private WorkService workService;
-    @Resource
-    private MatItemBarcodeMapper matItemBarcodeMapper;
-    @Resource
-    private LocMastService locMastService;
-
-    @Resource
-    private LocDetlService locDetlService;
-
-    @Resource
-    private MobileService mobileService;
-
-    @Resource
-    private WrkMastService wrkMastService;
-
-    @Resource
-    private WrkDetlService wrkDetlService;
-
-
-    // region MES鎺ュ彛
-
-    /**
-     * 鐗╂枡淇℃伅鍚屾锛孧ES->WMS
-     * 鍔熻兘锛氬悓姝ョ墿鏂欎俊鎭�->鐢熸垚鍏ュ簱鍗�
-     * 鍚庣画娴佺▼锛氬叆搴撴椂锛岄渶瑕佸疄鏃惰皟鐢╮ecvFeedback杩斿洖鍏ュ簱鏁伴噺
-     *
-     * @param matRecvForm
-     * @return
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public MesReturn matInfoAndInBound(MesMatRecvForm matRecvForm) throws CoolException {
-
-        MesReturn mesReturn = new MesReturn();
-
-        // 1銆佺墿鏂欎俊鎭悓姝�
-        for (MesMatInfo mesMatInfo : matRecvForm.getItemdata()) {
-            if (synMatInfo(mesMatInfo) == 1) {
-            } else {
-                throw new CoolException("鍚屾鐗╂枡淇℃伅澶辫触");
-            }
-        }
-
-        // 2銆佺敓鎴愬叆搴撳崟
-        if (inBoundOrder_List(matRecvForm) == 1) {
-            mesReturn.setSuccess("1");
-            mesReturn.setMessage("");
-        } else {
-            throw new CoolException("鍚屾鐗╂枡淇℃伅锛岀敓鎴愬叆搴撳崟澶辫触");
-        }
-
-        return mesReturn;
-    }
-
-    /**
-     * 鏂板銆佷慨鏀圭墿鏂欎俊鎭�
-     *
-     * @param mesMatInfo
-     * @return 1 鎴愬姛锛�-1 淇濆瓨鐗╂枡绫诲瀷澶辫触锛�-2 淇濆瓨鐗╂枡澶辫触锛�
-     * @throws ParseException
-     */
-    public int synMatInfo(MesMatInfo mesMatInfo) {
-
-        // 瑙勫垯瀹氫箟锛氶粯璁ょ2灞備负搴撳悕锛堝锛氬姞宸ュ簱锛夛紝绗�3灞備负鍚屾鐨勭墿鏂欑被鍨�
-        long secondPath = 2;
-        String secondParentName = WMS_CURRENT_NAME;
-        Date now = new Date();
-
-        // 鐗╂枡绫诲瀷鏇存柊
-        long tagId = 0;
-        EntityWrapper<Tag> wrapper = new EntityWrapper<>();
-        wrapper.eq("name", mesMatInfo.getItemType());
-        Tag tag = tagService.selectByName(mesMatInfo.getItemType(), 3);
-        if (tag == null || StringUtils.isEmpty(tag.getName())) {
-            Tag newTag = new Tag();
-            newTag.setName(mesMatInfo.getItemType());
-            newTag.setParentId(secondPath);
-            newTag.setParentName(secondParentName);
-            newTag.setPath("2");
-            newTag.setPathName(secondParentName);
-            newTag.setLevel(3);
-            newTag.setStatus(1);
-            newTag.setCreateBy(defaultUserId);
-            newTag.setCreateTime(now);
-            newTag.setUpdateBy(defaultUserId);
-            newTag.setUpdateTime(now);
-
-            if (!tagService.insert(newTag))
-                return -1;
-            tagId = newTag.getId();
-        } else {
-            tagId = tag.getId();
-        }
-
-        // 鐗╂枡鏇存柊
-        if (tagId > 0) {
-            //        tagId = tagService.selectByName(mesMatInfo.getItem_type(), 3).getId();
-            Mat mat = matService.selectByMatnr(mesMatInfo.getItemNo());
-            Mat newMat = new Mat();
-            newMat.setMatnr(mesMatInfo.getItemNo());
-            newMat.setMaktx(mesMatInfo.getDescription());
-            newMat.setTagId(tagId);
-            newMat.setLocType(tagId);   //locType
-            newMat.setSpecs(mesMatInfo.getSpecification());
-            newMat.setUnit(mesMatInfo.getUnitOfMeasure());
-            newMat.setModel(mesMatInfo.getClassificationCode());
-            newMat.setMemo(JSONObject.toJSONString(mesMatInfo));
-            newMat.setCreateBy(defaultUserId);
-            newMat.setCreateTime(now);
-            newMat.setUpdateBy(defaultUserId);
-            newMat.setUpdateTime(now);
-            newMat.setStatus(1);
-            if (mat == null) {
-                if (!matService.insert(newMat))
-                    return -2;
-            } else {
-                JSONObject dbMemo = JSONObject.parseObject(mat.getMemo());
-                dbMemo.remove("OrderNo");
-                dbMemo.remove("qty");
-                dbMemo.remove("ItemBarcode");
-                JSONObject newMemo = JSONObject.parseObject(newMat.getMemo());
-                newMemo.remove("OrderNo");
-                newMemo.remove("qty");
-                dbMemo.remove("ItemBarcode");
-                if (!dbMemo.equals(newMemo)) {
-                    newMat.setId(mat.getId());
-                    if (!matService.updateById(newMat))
-                        return -2;
-                }
-            }
-        } else {
-            return -1;
-        }
-
-        return 1;
-    }
-
-    /**
-     * 鐗╂枡鍚屾鍏ュ簱鍗曪紝鎸塐rderNo鐢熸垚澶氫釜璁㈠崟
-     *
-     *
-     * @param matRecvForm
-     * @return
-     */
-    public int inBoundOrder_List(MesMatRecvForm matRecvForm){
-
-        long docType = 4;   // docType鏍规嵁搴撶被鍨嬬‘瀹�
-        long settle = 1;
-        Date now = new Date();
-
-        // 鎸塐rderNo鍒嗙粍锛岀劧鍚庡啀鐢熸垚鍏ュ簱鍗�
-        List<MesMatInfo> mesInApply = matRecvForm.getItemdata();
-        Map<String, List<MesMatInfo>> map = mesInApply.stream().collect(Collectors.groupingBy(MesMatInfo::getOrderNo));
-        for (Map.Entry<String, List<MesMatInfo>> entry : map.entrySet()) {
-            List<MesMatInfo> list = entry.getValue();
-
-            // 鏍¢獙璁㈠崟鏄惁閲嶅
-            OrderPakin order = orderPakinService.selectByNo(entry.getKey());
-            if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
-                return -1;
-            }
-
-            // 鐢熸垚璁㈠崟
-            JSONObject newMemo = new JSONObject();
-            newMemo.put("sourceNo", matRecvForm.getSourceNo());
-            newMemo.put("sourceName", matRecvForm.getSourceName());
-            newMemo.put("operuser", matRecvForm.getOperuser());
-            newMemo.put("itemdata", list);
-
-            OrderPakin orderPakin = new OrderPakin();
-            orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
-            orderPakin.setOrderNo(entry.getKey());
-            orderPakin.setOrderTime(com.core.common.DateUtils.convert(now));
-            orderPakin.setDocType(docType);
-            orderPakin.setSettle(settle);
-            orderPakin.setStatus(1);
-            orderPakin.setCreateBy(defaultUserId);
-            orderPakin.setCreateTime(now);
-            orderPakin.setUpdateBy(defaultUserId);
-            orderPakin.setUpdateTime(now);
-            orderPakin.setMemo(newMemo.toJSONString());  //涓洪鏂欏叆搴撳畬鎴愬弽棣堜繚瀛�   JSONObject.toJSONString(matRecvForm)
-            orderPakin.setPakinPakoutStatus(1);
-            if (!orderPakinService.insert(orderPakin)) {
-                log.error("MES淇濆瓨鍏ュ簱璁㈠崟涓绘。澶辫触");
-                throw new CoolException("淇濆瓨鍏ュ簱璁㈠崟涓绘。澶辫触");
-            }
-
-            // 鐢熸垚鏄庣粏
-            for (MesMatInfo mesMat : list) {
-                Mat mat = matService.selectByMatnr(mesMat.getItemNo());
-                OrderDetlPakin orderDetlPakin = new OrderDetlPakin();
-                orderDetlPakin.setOrderId(orderPakin.getId());
-                orderDetlPakin.setOrderNo(orderPakin.getOrderNo());
-                orderDetlPakin.setAnfme(Double.valueOf(mesMat.getQty()));
-                orderDetlPakin.setQty(0.0);
-                orderDetlPakin.setMatnr(mat.getMatnr());
-                orderDetlPakin.setMaktx(mat.getMaktx());
-                orderDetlPakin.setSpecs(mat.getSpecs());
-                orderDetlPakin.setModel(mat.getModel());
-                orderDetlPakin.setStandby1(barCodeListToStr(mesMat.getItemBarcode()));   // 闆朵欢浜岀淮鐮�
-                orderDetlPakin.setStandby2("1");  //淇濆瓨榻愬鎬ф鏌ユ爣璇嗭紝1 妫�鏌ワ紱0 涓嶆鏌ワ紱
-                orderDetlPakin.setCreateBy(defaultUserId);
-                orderDetlPakin.setCreateTime(now);
-                orderDetlPakin.setUpdateBy(defaultUserId);
-                orderDetlPakin.setUpdateTime(now);
-                orderDetlPakin.setStatus(1);
-                orderDetlPakin.setPakinPakoutStatus(1);
-                if (!orderDetlPakinService.insert(orderDetlPakin)) {
-                    log.error("MES淇濆瓨鍏ュ簱璁㈠崟鏄庣粏妗eけ璐�1");
-                    throw new CoolException("淇濆瓨鍏ュ簱璁㈠崟鏄庣粏妗eけ璐�1");
-                }
-            }
-        }
-
-        return 1;
-    }
-
-    /**
-     * 棰嗘枡鍏ュ簱鍙嶉
-     * 瑙﹀彂鏉′欢锛氱墿鏂欏悓姝ユ帴鍙e叆搴撳崟锛屽叆搴撳悗
-     * 鎺ㄩ�佹椂鏈猴細褰撹鍗曚腑鏈夌墿鏂欏叆搴撳悗锛堝簲璇ュ湪姣忔墭鍏ュ簱瀹屾垚鍚庯紝鍙互鍦ㄦ洿鏂癘rderDetlPakin涔嬪悗锛夊垯鎺ㄩ�侊紝涓嶇瓑鍏ㄩ儴璁㈠崟瀹屾垚
-     *
-     * @param orderNo
-     * @param zapplet
-     * @return
-     */
-    public int recvFeedback(String orderNo, String zapplet) {
-
-        OrderPakin order = orderPakinService.selectByNo(orderNo);
-        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
-            List<MesRecvFeedback.MesRecvFeedbackItem> list = new ArrayList<>();
-            JSONObject dbMemo = JSONObject.parseObject(order.getMemo());
-
-            // 浠庣粍鎵樹俊鎭腑鏌ヨ鍏ュ簱鐨勪俊鎭�
-            EntityWrapper<WaitPakin> waitPakinEntityWrapper = new EntityWrapper<>();
-            waitPakinEntityWrapper.eq("zpallet", zapplet);
-            List<WaitPakin> zpalletMat = waitPakinService.selectList(waitPakinEntityWrapper);
-
-            EntityWrapper<OrderDetlPakin> wrapper = new EntityWrapper<>();
-            wrapper.eq("order_no", orderNo);
-            List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(wrapper);
-            if (orderDetlPakins != null && !orderDetlPakins.isEmpty()) {
-                for (OrderDetlPakin orderDetl : orderDetlPakins) {
-                    for (WaitPakin zMat : zpalletMat) {
-                        if (orderDetl.getMatnr().equals(zMat.getMatnr())) {
-                            MesRecvFeedback.MesRecvFeedbackItem item = new MesRecvFeedback.MesRecvFeedbackItem();
-                            item.setItemNo(orderDetl.getMatnr());
-                            item.setOrderNo(orderNo);
-                            item.setQty(orderDetl.getAnfme().intValue());
-                            item.setRealQty(zMat.getAnfme().intValue());
-                            // 鍥炰紶鎵樼洏缁戝畾鐨勯浂浠朵簩缁寸爜
-                            EntityWrapper<MatItemBarcode> matItemBarcodeEntityWrapper = new EntityWrapper<>();
-                            matItemBarcodeEntityWrapper.eq("zapplet", zapplet).eq("status", 1);
-                            List<MatItemBarcode> barcodes = matItemBarcodeMapper.selectList(matItemBarcodeEntityWrapper);
-                            if (barcodes != null) {
-                                List<String> itemBarcode = new ArrayList<>();
-                                for (MatItemBarcode barcode : barcodes) {
-                                    itemBarcode.add(barcode.getItemBarcode());
-                                }
-                                item.setItemBarcode(itemBarcode);
-                                list.add(item);
-                            }
-                        }
-                    }
-                }
-            }
-
-            MesRecvFeedback mesRecvFeedback = new MesRecvFeedback();
-            mesRecvFeedback.setSourceNo(dbMemo.getString("sourceNo"));
-            mesRecvFeedback.setOperuser(dbMemo.getString("operuser"));
-            mesRecvFeedback.setItemdata(list);
-
-            String url = MES_URL + "MaterialReceiptAndReturn";
-            String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesRecvFeedback));
-            if (!StringUtils.isEmpty(response) && response.contains("Success")){
-                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
-                if("1".equals(mesReturn.getSuccess())) {
-                    return 1;
-                }
-            }
-        }
-
-        return 0;
-    }
-
-    /**
-     * 鍑哄簱鐢宠锛屽姞宸ュ簱銆佸垁鍏峰簱
-     * 鍑哄簱鍚庨渶瑕佽嚜鍔ㄥ懠鍙獳GV閫佽揣
-     * 鍑哄簱瑙勫垯锛氶渶瑕佹寜闆朵欢浜岀淮鐮侊紙涓�浠朵竴鐮侊級鍑哄簱锛屾暣鎵樺嚭搴擄紝璇ユ墭涓婃湁鍏朵粬鐗╂枡涔熶竴璧峰嚭搴擄紝浠栦滑鍚庢湡浼氬啀鍏ュ簱
-     *
-     * @param mesOutApply
-     * @return 1 鎴愬姛锛�-1 璁㈠崟閲嶅锛�
-     */
-    @Transactional
-    public int outBoundOrder(MesOutApply mesOutApply){
-
-        // 绌烘墭鍑哄簱
-        if (StringUtils.isEmpty(mesOutApply.getOrderNo()) && "01".equals(mesOutApply.getTransType())) {
-            // 鐢熸垚绌烘墭鍑哄簱浠诲姟
-            mobileService.callEmptyBinOutBound(mesOutApply,mesOutApply.getStationId().startsWith("LL") ? WMS_TRANS_START_STATION_3 : WMS_TRANS_START_STATION_1,"1",1,defaultUserId);
-
-//            try {
-//                if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) {
-//                    TransTask transTask = new TransTask();
-//                    transTask.setTaskno(mesOutApply.getTaskno());
-//                    transTask.setTaskname(mesOutApply.getTaskname());
-//                    transTask.setOrderNo(mesOutApply.getOrderNo());
-//                    transTask.setTransType(mesOutApply.getTransType());
-//                    transTask.setCurStationId(WMS_TRANS_START_STATION_1);
-//                    transTask.setNextProcess(mesOutApply.getProductLineId());
-//                    transTask.setNextStationId(mesOutApply.getStationId());
-//                    transTask.setItemno(WMS_ZPALLET_ID);  // 鍥哄畾涓虹┖鎵樼殑缂栫爜
-//                    transTask.setQty(1);    // 绌烘墭鍙嚭1涓�
-//                    transTask.setProductLineId(mesOutApply.getProductLineId());
-//                    transTask.setOperateType(1);
-//                    transTask.setAgvFactory(1);
-//                    JSONObject sendAgvTask = submitTask(transTask);
-//                    if (!"1".equals(sendAgvTask.getString("Success"))) {
-//                        log.error("鍑哄簱涓嬪彂agv杩愯緭浠诲姟澶辫触锛歿}", JSONObject.toJSONString(transTask));
-//                    }
-//                }
-//            } catch (Exception e) {
-//                log.error("涓嬪彂AGV杩愯緭浠诲姟澶辫触", e);
-//            }
-
-            return 1;
-        } else {    // 姣涘澂锛堢墿鏂欙級鍑哄簱
-            // docType鏍规嵁搴撶被鍨嬬‘瀹�
-            long docType = 7;
-            long settle = 2;
-
-            // 鏍¢獙璁㈠崟鏄惁閲嶅
-            OrderPakout order = orderPakoutService.selectByNo(mesOutApply.getOrderNo());
-            if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
-                log.error("鍑哄簱璁㈠崟鍙烽噸澶嶏細{}",mesOutApply.getOrderNo());
-                return -1;
-            }
-            String itemBarcode = barCodeListToStr(mesOutApply.getItemBarcode());
-            // 鑷姩鍑哄簱
-            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("standby1", itemBarcode));
-            if (locDetl == null) {
-                throw new CoolException("闆朵欢浜岀淮鐮佹病鏈夊尮閰嶅埌搴撳瓨锛�" +itemBarcode );
-            }
-            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
-            if (!locMast.getLocSts().equals("F")) {
-                throw new CoolException("搴撲綅鐘舵�佷笉涓篎锛�" +locMast.getLocNo() );
-            }
-
-            // 鐢熸垚璁㈠崟
-            Date now = new Date();
-            OrderPakout orderPakout = new OrderPakout();
-            orderPakout.setUuid( String.valueOf(snowflakeIdWorker.nextId()));
-            orderPakout.setOrderNo(mesOutApply.getOrderNo());
-            orderPakout.setOrderTime(com.core.common.DateUtils.convert(now));
-            orderPakout.setDocType(docType);
-            orderPakout.setSettle(settle);
-            orderPakout.setStatus(1);
-            orderPakout.setCreateBy(defaultUserId);
-            orderPakout.setCreateTime(now);
-            orderPakout.setUpdateBy(defaultUserId);
-            orderPakout.setUpdateTime(now);
-            orderPakout.setMemo(JSONObject.toJSONString(mesOutApply));
-            orderPakout.setPakinPakoutStatus(2);
-            orderPakout.setNumber(locMast.getBarcode()); // 鎵樼洏鏉$爜锛屼笂鎶ユ椂鐢�
-            if (!orderPakoutService.insert(orderPakout)) {
-                log.error("MES淇濆瓨鍑哄簱璁㈠崟涓绘。澶辫触");
-                throw new CoolException("淇濆瓨鍑哄簱璁㈠崟涓绘。澶辫触");
-            }
-
-            // 鐢熸垚鏄庣粏
-            Mat mat = matService.selectByMatnr(mesOutApply.getItemno());
-            OrderDetlPakout orderDetlPakout = new OrderDetlPakout();
-            orderDetlPakout.setOrderId(orderPakout.getId());
-            orderDetlPakout.setOrderNo(orderPakout.getOrderNo());
-            orderDetlPakout.setAnfme(Double.valueOf(mesOutApply.getQty()));
-            orderDetlPakout.setWorkQty(orderDetlPakout.getAnfme());
-            orderDetlPakout.setQty(0.0);
-            orderDetlPakout.setMatnr(mat.getMatnr());
-            orderDetlPakout.setMaktx(mat.getMaktx());
-            orderDetlPakout.setSpecs(mat.getSpecs());
-            orderDetlPakout.setModel(mat.getModel());
-
-            orderDetlPakout.setStandby1(itemBarcode);
-            orderDetlPakout.setCreateBy(defaultUserId);
-            orderDetlPakout.setCreateTime(now);
-            orderDetlPakout.setUpdateBy(defaultUserId);
-            orderDetlPakout.setUpdateTime(now);
-            orderDetlPakout.setStatus(1);
-            orderDetlPakout.setPakinPakoutStatus(2);
-            if (!orderDetlPakoutService.insert(orderDetlPakout)) {
-                log.error("MES淇濆瓨鍑哄簱璁㈠崟鏄庣粏妗eけ璐�");
-                throw new CoolException("淇濆瓨鍑哄簱璁㈠崟鏄庣粏妗eけ璐�");
-            }
-
-            // 鐢熸垚宸ヤ綔鍙�
-            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(101));
-            // 鐢熸垚宸ヤ綔妗�
-            WrkMast wrkMast = new WrkMast();
-            wrkMast.setWrkNo(workNo);
-            wrkMast.setIoTime(now);
-            wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
-            wrkMast.setIoType(101); // 鍏ュ嚭搴撶姸鎬�
-            wrkMast.setIoPri(13D); // 浼樺厛绾э細13
-            wrkMast.setCrnNo(1);
-            if(mesOutApply.getStationId().startsWith("LL")) {
-                wrkMast.setSourceStaNo("203"); // 婧愮珯
-                wrkMast.setStaNo("204"); // 鐩爣绔�
-            } else {
-                wrkMast.setSourceStaNo("205"); // 婧愮珯
-                wrkMast.setStaNo("205"); // 鐩爣绔�
-            }
-            wrkMast.setSourceLocNo(locMast.getLocNo()); // 婧愬簱浣�
-            wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
-            wrkMast.setPicking("N"); // 鎷f枡
-            wrkMast.setExitMk("N"); // 閫�鍑�
-            wrkMast.setEmptyMk("N"); // 绌烘澘
-            wrkMast.setLinkMis("N");
-            wrkMast.setBarcode(locMast.getBarcode());
-            wrkMast.setAppeUser(defaultUserId); // 鎿嶄綔浜哄憳鏁版嵁
-            wrkMast.setAppeTime(now);
-            wrkMast.setModiUser(defaultUserId);
-            wrkMast.setModiTime(now);
-            wrkMast.setMemo(JSONObject.toJSONString(mesOutApply));
-            wrkMast.setTaskNo(mesOutApply.getTaskno());
-            wrkMast.setAgvSta(mesOutApply.getStationId());
-            wrkMastService.insert(wrkMast);
-            // 鐢熸垚宸ヤ綔妗f槑缁�
-                WrkDetl wrkDetl = new WrkDetl();
-                wrkDetl.sync(locDetl);
-                wrkDetl.setOrderNo(orderPakout.getOrderNo()); // 鎵嬪姩鍑哄簱涓嶉渶瑕佸甫鍑哄簱瀛樹腑鐨勫崟鎹紪鍙�
-                wrkDetl.setWrkNo(workNo);
-                wrkDetl.setIoTime(now);
-                wrkDetl.setAnfme(orderDetlPakout.getAnfme()); // 鏁伴噺
-                wrkDetl.setAppeTime(now);
-                wrkDetl.setAppeUser(defaultUserId);
-                wrkDetl.setModiTime(now);
-                wrkDetl.setModiUser(defaultUserId);
-//                wrkDetl.setMatnr(detlDto.getLocDetl().getMatnr());
-//                wrkDetl.setMaktx(detlDto.getLocDetl().getMaktx());
-//                wrkDetl.setUnit(detlDto.getLocDetl().getUnit());
-//                wrkDetl.setSpecs(detlDto.getLocDetl().getSpecs());
-//                wrkDetl.setUnit(detlDto.getLocDetl().getUnit());
-//                wrkDetl.setModel(detlDto.getLocDetl().getModel());
-                wrkDetlService.insert(wrkDetl);
-
-            // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
-            if (locMast.getLocSts().equals("F")) {
-                locMast.setLocSts("R");
-                locMast.setModiUser(defaultUserId);
-                locMast.setModiTime(now);
-                locMastService.updateById(locMast);
-            }
-            log.info("鍑哄簱浠诲姟鐢熸垚鎴愬姛锛屼换鍔″彿锛歿}",workNo);
-            // 绔嬪簱鐢熸垚璁㈠崟鍚庯紝鑷姩璋冨害AGV杩愰�佸埌绔欑偣锛岀洰鍓嶅鎵樼敓鎴愬涓��
-//            try {
-//                if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) {
-//                    // 鎸夐浂浠朵簩缁寸爜鏌ヨ鏈夊嚑涓墭锛屽鎵樼敓鎴愬涓换鍔★紝姣忔墭瀵瑰簲闆朵欢浜岀淮鐮�
-////                    String barCode = barCodeListToStr(mesOutApply.getItemBarcode());
-////                    EntityWrapper<MatItemBarcode> matItemBarcodeEntityWrapper = new EntityWrapper<>();
-////                    matItemBarcodeEntityWrapper.in("item_barcode", barCode);
-////                    List<MatItemBarcode> barcodes = matItemBarcodeMapper.selectList(matItemBarcodeEntityWrapper);
-////                     if (barcodes != null) {
-////                        Map<String, List<MatItemBarcode>> map = barcodes.stream().collect(Collectors.groupingBy(MatItemBarcode::getZapplet));
-////                        for (Map.Entry<String, List<MatItemBarcode>> entry : map.entrySet()) {
-////                            List<MatItemBarcode> list = entry.getValue();
-////                            List<String> codes = new ArrayList<>();
-////                            for (MatItemBarcode zapllet : list) {
-////                                codes.add(zapllet.getItemBarcode());
-////                            }
-//
-//                            TransTask transTask = new TransTask();
-//                            transTask.setTaskno(mesOutApply.getTaskno());
-//                            transTask.setTaskname(mesOutApply.getTaskname());
-//                            transTask.setOrderNo(mesOutApply.getOrderNo());
-//                            transTask.setTransType(mesOutApply.getTransType());
-//                            transTask.setCurStationId(WMS_TRANS_START_STATION_3);
-//                            transTask.setNextProcess(mesOutApply.getProductLineId());
-//                            transTask.setNextStationId(mesOutApply.getStationId());
-//                            transTask.setItemno(mesOutApply.getItemno());
-//                            transTask.setQty(mesOutApply.getQty());
-//                            transTask.setProductLineId(mesOutApply.getProductLineId());
-//                            transTask.setItemBarcode(mesOutApply.getItemBarcode());
-//                            transTask.setTuoPanId(locDetl.getZpallet());
-//                            transTask.setOperateType(1);
-//                            transTask.setAgvFactory(1);
-//                            JSONObject sendAgvTask = submitTask(transTask);
-//                            if (!"1".equals(sendAgvTask.getString("Success"))) {
-//                                log.error("鍑哄簱涓嬪彂agv杩愯緭浠诲姟澶辫触", JSONObject.toJSONString(transTask));
-//                            }
-////                        }
-////                    }
-//                }
-//            } catch (Exception e) {
-//                log.error("涓嬪彂AGV杩愯緭浠诲姟澶辫触", e);
-//            }
-        }
-
-        return 1;
-    }
-
-    /**
-     * 鍏ュ簱鐢宠
-     * 鏀跺埌鍏ュ簱鐢宠鍚庤嚜鍔ㄥ懠鍙獳GV鍙栬揣
-     *
-     * @param mesInApply
-     */
-    @Transactional
-    public int inBoundOrder(MesInApply mesInApply){
-
-        // 绌烘墭鍥炲簱
-        if (StringUtils.isEmpty(mesInApply.getOrderNo()) && StringUtils.isEmpty(mesInApply.getItemno())) {
-                if (!StringUtils.isEmpty(mesInApply.getTaskno()) && !StringUtils.isEmpty(mesInApply.getStationID())) {
-                    TransTask transTask = new TransTask();
-                    transTask.setTaskno(mesInApply.getTaskno());
-                    transTask.setTaskname(mesInApply.getTaskname());
-                    transTask.setOrderNo(mesInApply.getOrderNo());
-                    transTask.setTransType(mesInApply.getTransType());
-                    transTask.setCurProcess(mesInApply.getProductLineId());
-                    transTask.setCurStationId(mesInApply.getStationID());
-                    transTask.setNextStationId(mesInApply.getStationID().startsWith("LL") ? WMS_TRANS_START_STATION_2 : WMS_TRANS_START_STATION_1);
-                    transTask.setItemno(WMS_ZPALLET_ID);  // 鍥哄畾涓虹┖鎵樼殑缂栫爜
-                    transTask.setQty(1);    // 绌烘墭鍙洖1涓�
-                    transTask.setProductLineId(mesInApply.getProductLineId());
-                    transTask.setOperateType(1);
-                    transTask.setAgvFactory(1);
-                    JSONObject sendAgvTask = submitTask(transTask);
-                    if (!"1".equals(sendAgvTask.getString("Success"))) {
-                        log.error("鍏ュ簱涓嬪彂agv杩愯緭浠诲姟澶辫触,{}", JSONObject.toJSONString(transTask));
-                        return 2;
-                    }
-                } else {
-                    log.error("鏃犱换鍔″彿锛歿}锛屾垨鏃犵墿鏂欑紪鐮�:{}",mesInApply.getTaskno(),mesInApply.getItemno() );
-                    return 2;
-                }
-
-            return 1;
-        } else {    // 姣涘澂銆佹垚鍝佸洖搴�
-            // docType鏍规嵁搴撶被鍨嬬‘瀹�
-            long docType = 3;
-            long settle = 1;
-
-            // 鏍¢獙璁㈠崟鏄惁閲嶅
-            OrderPakin order = orderPakinService.selectByNo(mesInApply.getOrderNo());
-            if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
-                log.error("璁㈠崟閲嶅锛歿}", mesInApply.getOrderNo());
-                return 2;
-            }
-
-            // 鐢熸垚璁㈠崟
-            Date now = new Date();
-            OrderPakin orderPakin = new OrderPakin();
-            orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
-            orderPakin.setOrderNo(mesInApply.getOrderNo());
-            orderPakin.setOrderTime(com.core.common.DateUtils.convert(now));
-            orderPakin.setDocType(docType);
-            orderPakin.setSettle(settle);
-            orderPakin.setStatus(1);
-            orderPakin.setCreateBy(defaultUserId);
-            orderPakin.setCreateTime(now);
-            orderPakin.setUpdateBy(defaultUserId);
-            orderPakin.setUpdateTime(now);
-            orderPakin.setMemo(JSONObject.toJSONString(mesInApply));  //涓哄嚭搴撳畬鎴愬弽棣堜繚瀛�
-            orderPakin.setPakinPakoutStatus(1);
-            orderPakinService.insert(orderPakin);
-
-            // 鐢熸垚鏄庣粏
-            Mat mat = matService.selectByMatnr(mesInApply.getItemno());
-            OrderDetlPakin orderDetlPakin = new OrderDetlPakin();
-            orderDetlPakin.setOrderId(orderPakin.getId());
-            orderDetlPakin.setOrderNo(orderPakin.getOrderNo());
-            orderDetlPakin.setAnfme(Double.valueOf(mesInApply.getQty()));
-            orderDetlPakin.setQty(0.0);
-            orderDetlPakin.setMatnr(mat.getMatnr());
-            orderDetlPakin.setMaktx(mat.getMaktx());
-            orderDetlPakin.setSpecs(mat.getSpecs());
-            orderDetlPakin.setModel(mat.getModel());
-            List<String> itemBarcode = mesInApply.getProductInfo().stream().map(MesInApply.ProductInfo::getItemBarcode).collect(Collectors.toList());
-            orderDetlPakin.setStandby1(barCodeListToStr(itemBarcode)); //闆朵欢璇︽儏瀛樺湪1
-
-            orderDetlPakin.setStandby2("0");  //淇濆瓨榻愬鎬ф鏌ユ爣璇嗭紝1 妫�鏌ワ紱0 涓嶆鏌ワ紱
-            orderDetlPakin.setCreateBy(defaultUserId);
-            orderDetlPakin.setCreateTime(now);
-            orderDetlPakin.setUpdateBy(defaultUserId);
-            orderDetlPakin.setUpdateTime(now);
-            orderDetlPakin.setStatus(1);
-            orderDetlPakin.setPakinPakoutStatus(1);
-            orderDetlPakinService.insert(orderDetlPakin);
-
-            // 鐢熸垚鍏ュ簱閫氱煡妗�
-            WaitPakin waitPakin = new WaitPakin();
-            BeanUtils.copyProperties(mat, waitPakin);
-//                waitPakin.sync(mat);
-            waitPakin.setOrderNo(orderPakin.getOrderNo());   // 鍗曟嵁缂栧彿
-            waitPakin.setOrderId(orderPakin.getId());
-            waitPakin.setZpallet(mesInApply.getTuoPanId());   // 鎵樼洏鐮�
-            waitPakin.setIoStatus("N");     // 鍏ュ嚭鐘舵��
-            waitPakin.setAnfme(orderDetlPakin.getAnfme());  // 鏁伴噺
-            waitPakin.setStatus("Y");    // 鐘舵��
-            waitPakin.setAppeUser(defaultUserId);
-            waitPakin.setAppeTime(now);
-            waitPakin.setModiUser(defaultUserId);
-            waitPakin.setModiTime(now);
-            waitPakin.setStandby1(barCodeListToStr(itemBarcode));
-            waitPakinService.insert(waitPakin);
-            OrderInAndOutUtil.increaseWorkQty(Boolean.TRUE, orderPakin.getId(), orderDetlPakin.getMatnr(), orderDetlPakin.getBatch(),
-                    orderDetlPakin.getBrand(), orderDetlPakin.getStandby1(), orderDetlPakin.getStandby2(), orderDetlPakin.getStandby3(),
-                    orderDetlPakin.getBoxType1(), orderDetlPakin.getBoxType2(), orderDetlPakin.getBoxType3(), orderDetlPakin.getAnfme());
-            OrderInAndOutUtil.updateOrder(Boolean.TRUE, orderPakin.getId(), 2L, defaultUserId);
-
-            // 鍛煎彨AGV浠庝骇绾胯繍鍥炵珛搴�
-                if (!StringUtils.isEmpty(mesInApply.getTaskno())) {
-                    TransTask transTask = new TransTask();
-                    transTask.setTaskno(mesInApply.getTaskno());
-                    transTask.setTaskname(mesInApply.getTaskname());
-                    transTask.setOrderNo(mesInApply.getOrderNo());
-                    transTask.setTransType(mesInApply.getTransType());
-                    transTask.setCurProcess(mesInApply.getProductLineId());
-                    transTask.setCurStationId(mesInApply.getStationID());
-                    transTask.setNextStationId(mesInApply.getStationID().startsWith("LL") ? WMS_TRANS_START_STATION_2 : WMS_TRANS_START_STATION_1);
-                    transTask.setItemno(mesInApply.getItemno());
-                    transTask.setQty(mesInApply.getQty());
-                    transTask.setProductLineId(mesInApply.getProductLineId());
-                    transTask.setItemBarcode(itemBarcode);
-                    transTask.setTuoPanId(mesInApply.getTuoPanId());
-                    transTask.setOperateType(1);
-                    transTask.setAgvFactory(1);
-                    JSONObject sendAgvTask = submitTask(transTask);
-                    if (!"1".equals(sendAgvTask.getString("Success"))) {
-                        log.error("鍏ュ簱涓嬪彂agv杩愯緭浠诲姟澶辫触:{}", JSONObject.toJSONString(transTask));
-                        throw new CoolException("鍏ュ簱涓嬪彂agv杩愯緭浠诲姟澶辫触");
-                    }
-                } else {
-                    throw new CoolException("MES鍏ュ簱涓嬪彂agv杩愯緭浠诲姟澶辫触");
-                }
-        }
-
-        return 1;
-    }
-
-    /**
-     * 鍑哄簱瀹屾垚
-     * 鍑哄簱鍚庯紝鎸夋墭鎺ㄩ�侊紝闈炴暣涓鍗�
-     *
-     * @param orderNo
-     * @return
-     */
-    public int outFeedbackByTuo(String orderNo, Task agvTask) {
-
-        int success = 0;
-
-        OrderPakout order = orderPakoutService.selectByNo(orderNo);
-        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
-            JSONObject dbMemo = JSONObject.parseObject(order.getMemo());
-
-            // TODO锛氬嚭搴撳畬鎴愬悗锛岃嫢鏈В缁戞墭鐩樺拰鐗╂枡锛屽垯鎵ц鎵樼洏瑙g粦
-            // TODO锛氬嚭搴撳畬鎴愬悗锛岃嫢鏈竻闄ら浂浠朵簩缁寸爜锛屽垯鎵ц娓呴櫎锛屼篃鍙互鍦ˋGV閫佽揣瀹屾垚鍚庢竻闄�
-//            EntityWrapper<OrderDetlPakout> wrapper = new EntityWrapper<>();
-//            wrapper.eq("order_no", orderNo);
-//            List<OrderDetlPakout> orderDetlPakouts = orderDetlPakoutService.selectList(wrapper);
-//            if (orderDetlPakouts != null && !orderDetlPakouts.isEmpty()) {
-//                for (OrderDetlPakout orderDetl : orderDetlPakouts) {
-//                    StringBuilder palletId = new StringBuilder();
-//                    EntityWrapper<WaitPakin> wrapper2 = new EntityWrapper<>();
-//                    wrapper2.eq("order_no", orderDetl.getOrderNo());
-//                    List<WaitPakin> waitPakins = waitPakinService.selectList(wrapper2);
-//                    if (waitPakins != null && waitPakins.size() > 0) {
-//                        for (WaitPakin waitPakin : waitPakins) {
-//                            palletId.append(waitPakin.getZpallet()).append(",");
-//                        }
-//                    }
-//
-//                    MesOutFeedback mesOutFeedback = new MesOutFeedback();
-//                    mesOutFeedback.setTaskno(dbMemo.getString("taskno"));
-//                    mesOutFeedback.setTaskname(dbMemo.getString("taskname"));
-//                    mesOutFeedback.setProductLineId(dbMemo.getString("ProductLineId"));
-//                    mesOutFeedback.setStationId(dbMemo.getString("StationID"));
-//                    mesOutFeedback.setItemno(orderDetl.getMatnr());
-//                    mesOutFeedback.setTuoPanId(zpalletId);
-//                    mesOutFeedback.setQty(orderDetl.getQty().intValue());
-//                    if (!StringUtils.isEmpty(dbMemo.getString("ItemBarcode"))) {
-//                        mesOutFeedback.setItemBarcode(barCodeStrToList(dbMemo.getString("ItemBarcode")));
-//                    }
-//                    mesOutFeedback.setOrderNo(orderNo);
-//                }
-//            }
-
-            EntityWrapper<TaskDetl> entityWrapper = new EntityWrapper<>();
-            entityWrapper.eq("wrk_no", agvTask.getWrkNo());
-            TaskDetl taskDetl = taskDetlService.selectOne(entityWrapper);
-            String zpalletId = taskDetl.getZpallet();
-            List<String> itemBarCode = new ArrayList<>();
-            JSONArray array = JSONArray.parseArray(taskDetl.getMemo());
-            for (Object one : array) {
-                itemBarCode.add(one.toString());
-                // TODO锛氬叆搴撴椂瀛樺偍闆朵欢鐮�(ItemBarCode锛夛紝骞剁粦瀹氭墭鐩橈紝鍑哄簱鍚庤繖閲岃�冭檻瑙g粦
-            }
-
-            MesOutFeedback mesOutFeedback = new MesOutFeedback();
-            mesOutFeedback.setTaskno(agvTask.getTaskNo());
-            mesOutFeedback.setTaskname(dbMemo.getString("taskname"));
-            mesOutFeedback.setProductLineId(dbMemo.getString("ProductLineId"));
-            mesOutFeedback.setStationId(dbMemo.getString("StationId"));
-            mesOutFeedback.setItemno(dbMemo.getString("Itemno"));
-            mesOutFeedback.setTuoPanId(zpalletId);
-            if (itemBarCode.size() > 0) {
-                mesOutFeedback.setQty(itemBarCode.size());
-                mesOutFeedback.setItemBarcode(itemBarCode);
-            }
-            mesOutFeedback.setOrderNo(orderNo);
-
-            String url = MES_URL + "issueComplete";
-            String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesOutFeedback));
-            if (!StringUtils.isEmpty(response) && response.contains("Success")){
-                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
-                if("1".equals(mesReturn.getSuccess())) {
-                    success = 1;
-                }
-            }
-        }
-
-        return success;
-    }
-
-    /**
-     * 鍏ュ簱瀹屾垚
-     * 鍏ュ簱鍚庯紝鎸夋墭鎺ㄩ�侊紝闈炴暣涓鍗�
-     *
-     * @param orderNo
-     * @param zapplet
-     * @return
-     */
-    public int inFeedbackByTuo(String orderNo, String zapplet) {
-
-        int success = 0;
-
-        OrderPakin order = orderPakinService.selectByNo(orderNo);
-        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
-            List<MesInApply.ProductInfo> list = new ArrayList<>();
-            // 浠庢墭鐩樼粦瀹氱殑闆朵欢浜岀淮鐮佷腑鏌ヨ淇℃伅
-            EntityWrapper<MatItemBarcode> matItemBarcodeEntityWrapper = new EntityWrapper<>();
-            matItemBarcodeEntityWrapper.eq("zapplet", zapplet).eq("status", 1);
-            List<MatItemBarcode> barcodes = matItemBarcodeMapper.selectList(matItemBarcodeEntityWrapper);
-            for (MatItemBarcode barcode : barcodes) {
-                MesInApply.ProductInfo productInfo = new MesInApply.ProductInfo();
-                productInfo.setItemBarcode(barcode.getItemBarcode());
-                productInfo.setQualityStatus(barcode.getQualityStatus());
-                list.add(productInfo);
-            }
-
-            MesInApply result = JSONObject.parseObject(order.getMemo(), MesInApply.class);
-            result.setProductInfo(list);
-            result.setQty(list.size());
-
-            String url = MES_URL + "loadComplete";
-            String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(result));
-            if (!StringUtils.isEmpty(response) && response.contains("Success")){
-                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
-                if("1".equals(mesReturn.getSuccess())) {
-                    success = 1;
-                }
-            }
-        }
-
-        return success;
-    }
-
-    /**
-     * 闆朵欢浜岀淮鐮侊紝鏁扮粍杞瑂tring
-     *
-     * @param list
-     * @return
-     */
-    public static String barCodeListToStr(List<String> list) {
-        if(list.isEmpty()) {
-            return "";
-        }
-        StringBuilder stringBuilder = new StringBuilder();
-        for (String str : list) {
-            stringBuilder.append(str).append(",");
-        }
-        String result = stringBuilder.toString();
-        return result.endsWith(",") ? result.substring(0, result.length() - 1) : result;
-    }
-
-    /**
-     * 闆朵欢浜岀淮鐮侊紝string杞暟缁�
-     *
-     * @param str
-     * @return
-     */
-    public static List<String> barCodeStrToList(String str) {
-        String[] array = str.split(",");
-        return Arrays.asList(array);
-    }
-
-    /**
-     * 鍏ュ簱瀹屾垚
-     * 鍏ュ簱鍗曞畬鎴愬悗锛屾暣鍗曟帹閫�
-     *
-     * @param orderNo
-     * @return
-     */
-    public int inFeedback(String orderNo) {
-
-        int success = 0;
-
-        OrderPakin order = orderPakinService.selectByNo(orderNo);
-        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
-            EntityWrapper<OrderDetlPakin> wrapper = new EntityWrapper<>();
-            wrapper.eq("order_no", orderNo);
-            List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(wrapper);
-            if (orderDetlPakins != null && !orderDetlPakins.isEmpty()) {
-                for (OrderDetlPakin orderDetl : orderDetlPakins) {
-                    MesInApply result = JSONObject.parseObject(order.getMemo(), MesInApply.class);
-                    result.setQty(orderDetl.getQty().intValue());
-
-                    String url = MES_URL + "loadComplete";
-                    String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(result));
-                    if (!StringUtils.isEmpty(response) && response.contains("Success")){
-                        MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
-                        if("1".equals(mesReturn.getSuccess())) {
-                            success++;
-                        }
-                    }
-                }
-
-                if (success == orderDetlPakins.size()) {
-                    success = 1;
-                } else {
-                    success = 0;
-                }
-            }
-        }
-
-        return success;
-    }
-
-    /**
-     * 锛堝浠斤級鍑哄簱璁㈠崟瀹屾垚
-     *
-     * @param orderNo
-     * @return
-     */
-    public int outFeedback(String orderNo) {
-
-        int success = 0;
-
-        OrderPakout order = orderPakoutService.selectByNo(orderNo);
-        if (order != null && order.getSettle() == 4) {   // 鏍¢獙鏄惁瀹屾垚
-            JSONObject dbMemo = JSONObject.parseObject(order.getMemo());
-            EntityWrapper<OrderDetlPakout> wrapper = new EntityWrapper<>();
-            wrapper.eq("order_no", orderNo);
-            List<OrderDetlPakout> orderDetlPakouts = orderDetlPakoutService.selectList(wrapper);
-            if (orderDetlPakouts != null && !orderDetlPakouts.isEmpty()) {
-                for (OrderDetlPakout orderDetl : orderDetlPakouts) {
-                    StringBuilder palletId = new StringBuilder();
-                    EntityWrapper<WaitPakin> wrapper2 = new EntityWrapper<>();
-                    wrapper2.eq("order_no", orderDetl.getOrderNo());
-                    List<WaitPakin> waitPakins = waitPakinService.selectList(wrapper2);
-                    if (waitPakins != null && waitPakins.size() > 0) {
-                        for (WaitPakin waitPakin : waitPakins) {
-                            palletId.append(waitPakin.getZpallet()).append(",");
-                        }
-                    }
-
-                    MesOutFeedback mesOutFeedback = new MesOutFeedback();
-                    mesOutFeedback.setTaskno(dbMemo.getString("taskno"));
-                    mesOutFeedback.setTaskname(dbMemo.getString("taskname"));
-                    mesOutFeedback.setProductLineId(dbMemo.getString("ProductLineId"));
-                    mesOutFeedback.setStationId(dbMemo.getString("StationID"));
-                    mesOutFeedback.setItemno(orderDetl.getMatnr());
-                    if (!StringUtils.isEmpty(palletId.toString())) {
-                        mesOutFeedback.setTuoPanId(palletId.substring(0, palletId.length() - 1));
-                    }
-                    mesOutFeedback.setQty(orderDetl.getQty().intValue());
-                    if (!StringUtils.isEmpty(dbMemo.getString("ItemBarcode"))) {
-                        mesOutFeedback.setItemBarcode(barCodeStrToList(dbMemo.getString("ItemBarcode")));
-                    }
-                    mesOutFeedback.setOrderNo(orderNo);
-
-                    // TODO:澶囨敞锛氬嚭搴撳畬鎴愬悗瑙g粦鎵樼洏鍜岀墿鏂欙紝鑻ュ墠闈㈡湭瑙g粦锛屾澶勯渶瑕佽В缁�
-
-                    String url = MES_URL + "issueComplete";
-                    String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesOutFeedback));
-                    if (!StringUtils.isEmpty(response) && response.contains("Success")){
-                        MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
-                        if("1".equals(mesReturn.getSuccess())) {
-                            success++;
-                        }
-                    }
-                }
-
-                if (success == orderDetlPakouts.size()) {
-                    success = 1;
-
-                    // TODO锛氱珛搴撳嚭搴撳悗鑷姩璋冨害AGV杩愰�佸埌绔欑偣
-                    String taskNo = dbMemo.getString("taskno");
-                    if (!StringUtils.isEmpty(taskNo)) {
-                        TransTask transTask = new TransTask();
-                        transTask.setTaskno(dbMemo.getString("taskno"));
-                        transTask.setTaskname(dbMemo.getString("taskname"));
-                        transTask.setOrderNo(dbMemo.getString("OrderNo"));
-                        transTask.setTransType(dbMemo.getString("TransType"));
-//                    transTask.setCurProcess();
-                        transTask.setCurStationId(WMS_TRANS_START_STATION_3);
-                        transTask.setNextProcess(dbMemo.getString("ProductLineId"));
-                        transTask.setNextStationId(dbMemo.getString("StationId"));
-                        transTask.setItemno(dbMemo.getString("Itemno"));
-                        transTask.setQty(dbMemo.getInteger("Qty"));
-                        transTask.setProductLineId(dbMemo.getString("ProductLineId"));
-                        transTask.setItemBarcode(barCodeStrToList(dbMemo.getString("ItemBarcode")));
-                        transTask.setOperateType(1);
-                        transTask.setAgvFactory(1);
-                        JSONObject sendAgvTask = submitTask(transTask);
-                        if (!"1".equals(sendAgvTask.getString("Success"))) {
-                            log.error("鍑哄簱涓嬪彂agv杩愯緭浠诲姟澶辫触:{}", JSONObject.toJSONString(transTask));
-                        }
-                    }
-                } else {
-                    success = 0;
-                }
-            }
-        }
-
-        return success;
-    }
-
-    /**
-     * 鍑哄簱鐢宠锛堝彨鏂欙級,瑁呴厤搴撱�佹粦鍧楀簱
-     *
-     * @param mesCallOutApply
-     * @return
-     */
-    public int callOutBoundOrder(MesCallOutApply mesCallOutApply){
-
-        // docType鏍规嵁搴撶被鍨嬬‘瀹�
-        long docType = 7;
-        long settle = 1;
-
-        // 鏍¢獙璁㈠崟鏄惁閲嶅
-        OrderPakout order = orderPakoutService.selectByNo(mesCallOutApply.getOrderNo());
-        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
-            return -1;
-        }
-
-        // 鐢熸垚璁㈠崟
-        Date now = new Date();
-        OrderPakout orderPakout = new OrderPakout();
-        orderPakout.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
-        orderPakout.setOrderNo(mesCallOutApply.getOrderNo());
-        orderPakout.setOrderTime(com.core.common.DateUtils.convert(now));
-        orderPakout.setDocType(docType);
-        orderPakout.setSettle(settle);
-        orderPakout.setStatus(1);
-        orderPakout.setCreateBy(defaultUserId);
-        orderPakout.setCreateTime(now);
-        orderPakout.setUpdateBy(defaultUserId);
-        orderPakout.setUpdateTime(now);
-        orderPakout.setMemo(JSONObject.toJSONString(mesCallOutApply));
-        orderPakout.setPakinPakoutStatus(2);
-        if (!orderPakoutService.insert(orderPakout)) {
-            log.error("MES淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級涓绘。澶辫触");
-            throw new CoolException("淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級涓绘。澶辫触");
-        }
-
-        // 鐢熸垚鏄庣粏
-        if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) {
-            for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()) {
-                Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno());
-                OrderDetlPakout orderDetlPakout = new OrderDetlPakout();
-                orderDetlPakout.setOrderId(orderPakout.getId());
-                orderDetlPakout.setOrderNo(orderPakout.getOrderNo());
-                orderDetlPakout.setAnfme(Double.valueOf(mesOutApplyItem.getQty()));
-                orderDetlPakout.setQty(0.0);
-                orderDetlPakout.setMatnr(mat.getMatnr());
-                orderDetlPakout.setMaktx(mat.getMaktx());
-                orderDetlPakout.setSpecs(mat.getSpecs());
-                orderDetlPakout.setModel(mat.getModel());
-                orderDetlPakout.setThreeCode(mesOutApplyItem.getItemBarcode());
-                orderDetlPakout.setStandby1(mesOutApplyItem.getTrayid());   //淇濆瓨閰嶇洏鍙凤紝闈炴墭鐩樺彿
-                orderDetlPakout.setCreateBy(defaultUserId);
-                orderDetlPakout.setCreateTime(now);
-                orderDetlPakout.setUpdateBy(defaultUserId);
-                orderDetlPakout.setUpdateTime(now);
-                orderDetlPakout.setStatus(1);
-                orderDetlPakout.setPakinPakoutStatus(2);
-                if (!orderDetlPakoutService.insert(orderDetlPakout)) {
-                    log.error("MES淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級鏄庣粏妗eけ璐�");
-                    throw new CoolException("淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級鏄庣粏妗eけ璐�");
-                }
-            }
-        }
-
-        return 1;
-    }
-
-    // endregion
-
-
-    // region 鎼繍浠诲姟璋冨害
-
-    // route杞彂3涓猈CS浠诲姟
-
-    /**
-     * 9.1涓嬪彂杩愯緭浠诲姟
-     *
-     * @param transTask
-     * @return
-     */
-    @Transactional
-    public JSONObject submitTask(TransTask transTask) {
-
-        JSONObject result = new JSONObject();
-        result.put("taskno", transTask.getTaskno());
-
-        // 閲嶅鎬ф牎楠�
-        EntityWrapper<Task> wrapper = new EntityWrapper<>();
-        wrapper.eq("task_no", transTask.getTaskno());
-        List<Task> tasks = taskService.selectList(wrapper);
-        if (tasks != null && !tasks.isEmpty()) {
-            log.error("agv浠诲姟鍙烽噸澶�:{}", transTask.getTaskno());
-            result.put("Success", "2");
-            result.put("Message", "agv浠诲姟鍙烽噸澶�:" + transTask.getTaskno());
-            return result;
-        }
-
-        // 涓嬪彂缁橰CS
-        RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
-        // 妯℃澘鍚�
-        if(transTask.getCurStationId().startsWith("LL") || transTask.getCurStationId().startsWith("LG")) { // 璧风偣浜х嚎
-            rcsTaskSubmit.setTaskType("CS2");
-        } else if(transTask.getNextStationId().startsWith("LL") || transTask.getNextStationId().startsWith("LG")) { // 缁堢偣浜х嚎
-            rcsTaskSubmit.setTaskType("CS");
-        } else { // 涓嶆秹鍙婁骇绾�
-            rcsTaskSubmit.setTaskType("CS3");
-        }
-        rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno());
-        rcsTaskSubmit.setInitPriority(10);  //榛樿10
-        List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
-        RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
-        startRoute.setSeq(0);
-        startRoute.setCode(transTask.getCurStationId());
-        startRoute.setOperation("COLLECT");
-        targetRouteList.add(startRoute);
-        RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute();
-        endRoute.setSeq(1);
-        endRoute.setCode(transTask.getNextStationId());
-        endRoute.setOperation("DELIVERY");
-        targetRouteList.add(endRoute);
-        rcsTaskSubmit.setTargetRoute(targetRouteList);
-
-        // 杞彂缁欐捣搴锋垨鍗庢檽RCS
-        RcsReturn rcsReturn = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
-        if (rcsReturn.getCode().equals("SUCCESS")) {
-            int workNo = commonService.getWorkNo(WorkNoType.OTHER.type);
-            Date now = new Date();
-            Task task = new Task();
-            task.setWrkNo(workNo);
-            task.setTaskType("AGV");
-            task.setWrkSts(301L);
-            task.setIoType(3);
-            task.setIoPri(10.00);
-            task.setWrkDate(now);
-            task.setSourceStaNo(transTask.getCurStationId());
-            task.setStaNo(transTask.getNextStationId());
-            task.setBarcode(transTask.getTuoPanId());
-            task.setModiUser(defaultUserId);
-            task.setModiTime(now);
-            task.setAppeUser(defaultUserId);
-            task.setAppeTime(now);
-            task.setTaskNo(transTask.getTaskno());
-            task.setMemo(JSONObject.toJSONString(transTask));
-
-            taskService.insert(task);
-            Mat mat = matService.selectByMatnr(transTask.getItemno());
-            TaskDetl taskDetl = new TaskDetl();
-            taskDetl.setWrkNo(task.getWrkNo());
-            taskDetl.setIoTime(task.getIoTime());
-            taskDetl.setMatnr(transTask.getItemno());
-            taskDetl.setAnfme(0.0);
-//            taskDetl.setStandby1(String.valueOf(transTask.getQty()));
-            taskDetl.setMaktx(mat.getMaktx());
-            taskDetl.setSpecs(mat.getSpecs());
-            taskDetl.setOrderNo(transTask.getOrderNo());
-            taskDetl.setZpallet(transTask.getTuoPanId());
-            taskDetl.setMemo(Cools.isEmpty(transTask.getItemBarcode()) ? "":barCodeListToStr(transTask.getItemBarcode()));
-            taskDetl.setModiUser(defaultUserId);
-            taskDetl.setModiTime(now);
-            taskDetl.setAppeUser(defaultUserId);
-            taskDetl.setAppeTime(now);
-            taskDetlService.insert(taskDetl);
-            result.put("Success", "1");
-            result.put("Message", "浠诲姟鎺ユ敹鎴愬姛");
-        } else {
-            result.put("Success", "2");
-            result.put("Message", "浠诲姟涓嬪彂缁橰CS澶辫触");
-        }
-
-        return result;
-    }
-
-    /**
-     * 9.2杩斿洖浠诲姟鎵ц缁撴灉
-     *
-     * @param rcsReporterTask
-     * @return
-     */
-    public int reporterTask(RcsReporterTask rcsReporterTask) {
-
-        // 缁撴灉姹囨��
-        boolean completed = true;
-        EntityWrapper<Task> wrapper = new EntityWrapper<>();
-        wrapper.eq("task_no", rcsReporterTask.getRobotTaskCode());
-        List<Task> tasks = taskService.selectList(wrapper);
-        if (tasks != null && !tasks.isEmpty()) {
-            for (Task task : tasks) {
-                if (task.getWrkSts() != 304) {   // TODO锛氱‘璁ゅ畬鎴愶紝鍙兘瀛樺湪澶氱洏浠诲姟
-                    completed = false;
-                }
-            }
-        }
-
-        if (completed) {
-            TransTaskFeedback transTaskFeedback = new TransTaskFeedback();
-            transTaskFeedback.setTaskno(rcsReporterTask.getRobotTaskCode());
-//            transTaskFeedback.setTaskname();
-            transTaskFeedback.setResult(1);
-
-            String url = MES_URL + "api/task/reporter";
-            String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(transTaskFeedback));
-            if (!StringUtils.isEmpty(response) && response.contains("Success")){
-                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
-                if("1".equals(mesReturn.getSuccess())) {
-                    return 1;
-                }
-            }
-        }
-
-        return 0;
-    }
-
-    /**
-     * 9.8鐢宠鍗庢檽AGV杩涘叆鐢熶骇绾�
-     *
-     * @param apply
-     * @return
-     */
-    public String applyInLine(TransParent apply) {
-
-        String url = MES_URL + "api/apply/inLine";
-        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
-        if (!StringUtils.isEmpty(response) && response.contains("Success")){
-            JSONObject jsonObject = JSONObject.parseObject(response);
-            if("1".equals(jsonObject.getString("Success"))) {
-                return jsonObject.getJSONObject("Data").getString("status");
-            }
-        }
-
-        return "N";
-    }
-
-    /**
-     * 鍏ョ珯璇锋眰锛氳浆鍙慉GV->鍏ョ珯璇锋眰->缁橫ES
-     *
-     * @param apply
-     * @return
-     */
-    public int applyInStation(TransParent apply) {
-        String path = ("LL").equals(apply.getProductLineId()) ? "AGVTransportPalletNotice" : "Aprs/AGVTransportPalletNotice";
-        String url = MES_URL + path;
-        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
-        if (!StringUtils.isEmpty(response) && response.contains("Success")){
-            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
-            if("1".equals(mesReturn.getSuccess())) {
-                return 1;
-            }
-        }
-
-        return 0;
-    }
-
-    /**
-     * 鍏ョ珯鍏佽锛氳浆鍙慚ES->鍏佽鍏ョ珯->缁橝GV
-     *
-     * @param allow
-     * @return
-     */
-    public MesReturn allowInStation(TransInOutStationAllow allow) {
-
-        MesReturn mesReturn = new MesReturn();
-        mesReturn.setSuccess("1");
-
-        if ("Y".equals(allow.getStatus())) {
-            RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
-            rcsTaskContinue.setRobotTaskCode(allow.getTaskno());
-            rcsTaskContinue.setTriggerType("TASK");
-            rcsTaskContinue.setTriggerCode(allow.getTaskno());
-//            rcsTaskContinue.setTriggerType("ROBOT");
-//            rcsTaskContinue.setTriggerCode(allow.getAgvCode());
-
-            int success = rcsService.continueTask(rcsTaskContinue, 1);
-            mesReturn.setSuccess(success == 1 ? "1" : "2");
-            mesReturn.setMessage(success == 1 ? "" : "杞彂缁橰CS澶辫触");
-        }
-
-        return mesReturn;
-    }
-
-    /**
-     * 鍒扮珯瀹屾垚锛氳浆鍙慉GV->鍒扮珯瀹屾垚->缁橫ES
-     *
-     * @param arrivalStation
-     * @return
-     */
-    public int arriveOnStation(TransArrivalStation arrivalStation) {
-
-        if ("01".equals(arrivalStation.getDaotype())) {
-            arrivalStation.setItemno(null);
-            arrivalStation.setItemBarcode(new ArrayList<>());
-            arrivalStation.setOrderNo(null);
-        }
-
-        String path = ("LL").equals(arrivalStation.getProductLineId()) ? "AGVArrivalCompleted" : "Aprs/AGVArrivalCompleted";
-        String url = MES_URL + path;
-        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(arrivalStation));
-        if (!StringUtils.isEmpty(response) && response.contains("Success")){
-            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
-            if("1".equals(mesReturn.getSuccess())) {
-                return 1;
-            }
-        }
-
-        return 0;
-    }
-
-    /**
-     * 绂荤珯璇锋眰锛氳浆鍙慉GV->绂荤珯璇锋眰->缁橫ES
-     *
-     * @param apply
-     * @return
-     */
-    public int applyOutStation(TransParent apply) {
-
-        String url = MES_URL + "api/apply/outStation";
-        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
-        if (!StringUtils.isEmpty(response) && response.contains("Success")){
-            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
-            if("1".equals(mesReturn.getSuccess())) {
-                return 1;
-            }
-        }
-
-        return 0;
-    }
-
-    /**
-     * 绂荤珯鍏佽锛氳浆鍙慚ES->鍏佽绂荤珯->缁橝GV
-     *
-     * @param allow
-     * @return
-     */
-    public MesReturn allowOutStation(TransInOutStationAllow allow) {
-
-        MesReturn mesReturn = new MesReturn();
-        mesReturn.setSuccess("1");
-
-        if ("Y".equals(allow.getStatus())) {
-            RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
-            rcsTaskContinue.setRobotTaskCode(allow.getTaskno());
-            rcsTaskContinue.setTriggerType("TASK");
-            rcsTaskContinue.setTriggerCode(allow.getTaskno());
-
-            int success = rcsService.continueTask(rcsTaskContinue, checkRcsFactory(allow.getAgvCode()));
-            mesReturn.setSuccess(success == 1 ? "1" : "2");
-            mesReturn.setMessage(success == 1 ? "" : "杞彂缁橰CS澶辫触");
-        }
-
-        return mesReturn;
-    }
-
-    /**
-     * 绂荤珯瀹屾垚锛氳浆鍙慉GV->绂荤珯瀹屾垚->缁橫ES
-     *
-     * @param apply
-     * @return
-     */
-    public int outStation(TransParent apply) {
-
-        String path = ("LL").equals(apply.getProductLineId()) ? "AGVDepartureCompleted" : "Aprs/AGVDepartureCompleted";
-        String url = MES_URL + path;
-        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
-        if (!StringUtils.isEmpty(response) && response.contains("Success")){
-            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
-            if("1".equals(mesReturn.getSuccess())) {
-                return 1;
-            }
-        }
-
-        return 0;
-    }
-
-    @Override
-    public MesReturn queryInventory(String itemno,String orderNo) {
-        MesReturn mesReturn = new MesReturn();
-        mesReturn.setSuccess("1");
-        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", itemno).eq("order_no",orderNo));
-
-        int count = 0;
-        for(LocDetl locDetl:locDetls) {
-            count += locDetl.getAnfme();
-        }
-        mesReturn.setMessage(String.valueOf(count));
-        return mesReturn;
-    }
-
-    // endregion
-
-    /**
-     * 鏌ヨRcs鍦板潃
-     *
-     * @param agvNo
-     * @return 1 娴峰悍锛�2 鍗庢檽
-     */
-    private int checkRcsFactory(String agvNo) {
-
-        AgvInfo agvInfo = agvInfoMapper.selectById(agvNo);
-        return agvInfo.getAgvFactory();
-    }
-
-}
+package com.zy.asrs.service.impl;

import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.mes.*;
import com.zy.asrs.entity.rcs.*;
import com.zy.asrs.mapper.AgvInfoMapper;
import com.zy.asrs.mapper.BasDevpMapper;
import com.zy.asrs.mapper.MatItemBarcodeMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.common.model.LocDetlDto;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;

@Slf4j
@Service
public class MesServiceImpl implements MesService {

    @Value("${mes.url}")
    public String MES_URL;
    @Value("${wms.currentName}")
    public String WMS_CURRENT_NAME;
    @Value("${wms.wmsTransStartStation1}")
    public String WMS_TRANS_START_STATION_1;
    @Value("${wms.wmsTransStartStation2}")
    public String WMS_TRANS_START_STATION_2;
    @Value("${wms.wmsTransStartStation3}")
    public String WMS_TRANS_START_STATION_3;
    @Value("${mes.defaultUserId}")
    public long defaultUserId;
    @Value("${wms.zpalletId}")
    public String WMS_ZPALLET_ID;

    @Resource
    private RcsService rcsService;
    @Resource
    private MatService matService;
    @Resource
    private TagService tagService;
    @Resource
    private OrderPakinService orderPakinService;
    @Resource
    private OrderDetlPakinService orderDetlPakinService;
    @Resource
    private OrderPakoutService orderPakoutService;
    @Resource
    private OrderDetlPakoutService orderDetlPakoutService;
    @Resource
    private WaitPakinService waitPakinService;
    @Resource
    private TaskService taskService;
    @Resource
    private TaskDetlService taskDetlService;
    @Resource
    private SnowflakeIdWorker snowflakeIdWorker;
    @Resource
    private CommonService commonService;
    @Resource
    private AgvInfoMapper agvInfoMapper;
    @Resource
    private WorkService workService;
    @Resource
    private MatItemBarcodeMapper matItemBarcodeMapper;
    @Resource
    private LocMastService locMastService;

    @Resource
    private LocDetlService locDetlService;

    @Resource
    private MobileService mobileService;

    @Resource
    private WrkMastService wrkMastService;

    @Resource
    private WrkDetlService wrkDetlService;


    // region MES鎺ュ彛

    /**
     * 鐗╂枡淇℃伅鍚屾锛孧ES->WMS
     * 鍔熻兘锛氬悓姝ョ墿鏂欎俊鎭�->鐢熸垚鍏ュ簱鍗�
     * 鍚庣画娴佺▼锛氬叆搴撴椂锛岄渶瑕佸疄鏃惰皟鐢╮ecvFeedback杩斿洖鍏ュ簱鏁伴噺
     *
     * @param matRecvForm
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public MesReturn matInfoAndInBound(MesMatRecvForm matRecvForm) throws CoolException {

        MesReturn mesReturn = new MesReturn();

        // 1銆佺墿鏂欎俊鎭悓姝�
        for (MesMatInfo mesMatInfo : matRecvForm.getItemdata()) {
            if (synMatInfo(mesMatInfo) == 1) {
            } else {
                throw new CoolException("鍚屾鐗╂枡淇℃伅澶辫触");
            }
        }

        // 2銆佺敓鎴愬叆搴撳崟
        if (inBoundOrder_List(matRecvForm) == 1) {
            mesReturn.setSuccess("1");
            mesReturn.setMessage("");
        } else {
            throw new CoolException("鍚屾鐗╂枡淇℃伅锛岀敓鎴愬叆搴撳崟澶辫触");
        }

        return mesReturn;
    }

    /**
     * 鏂板銆佷慨鏀圭墿鏂欎俊鎭�
     *
     * @param mesMatInfo
     * @return 1 鎴愬姛锛�-1 淇濆瓨鐗╂枡绫诲瀷澶辫触锛�-2 淇濆瓨鐗╂枡澶辫触锛�
     * @throws ParseException
     */
    public int synMatInfo(MesMatInfo mesMatInfo) {

        // 瑙勫垯瀹氫箟锛氶粯璁ょ2灞備负搴撳悕锛堝锛氬姞宸ュ簱锛夛紝绗�3灞備负鍚屾鐨勭墿鏂欑被鍨�
        long secondPath = 2;
        String secondParentName = WMS_CURRENT_NAME;
        Date now = new Date();

        // 鐗╂枡绫诲瀷鏇存柊
        long tagId = 0;
        EntityWrapper<Tag> wrapper = new EntityWrapper<>();
        wrapper.eq("name", mesMatInfo.getItemType());
        Tag tag = tagService.selectByName(mesMatInfo.getItemType(), 3);
        if (tag == null || StringUtils.isEmpty(tag.getName())) {
            Tag newTag = new Tag();
            newTag.setName(mesMatInfo.getItemType());
            newTag.setParentId(secondPath);
            newTag.setParentName(secondParentName);
            newTag.setPath("2");
            newTag.setPathName(secondParentName);
            newTag.setLevel(3);
            newTag.setStatus(1);
            newTag.setCreateBy(defaultUserId);
            newTag.setCreateTime(now);
            newTag.setUpdateBy(defaultUserId);
            newTag.setUpdateTime(now);

            if (!tagService.insert(newTag))
                return -1;
            tagId = newTag.getId();
        } else {
            tagId = tag.getId();
        }

        // 鐗╂枡鏇存柊
        if (tagId > 0) {
            //        tagId = tagService.selectByName(mesMatInfo.getItem_type(), 3).getId();
            Mat mat = matService.selectByMatnr(mesMatInfo.getItemNo());
            Mat newMat = new Mat();
            newMat.setMatnr(mesMatInfo.getItemNo());
            newMat.setMaktx(mesMatInfo.getDescription());
            newMat.setTagId(tagId);
            newMat.setLocType(tagId);   //locType
            newMat.setSpecs(mesMatInfo.getSpecification());
            newMat.setUnit(mesMatInfo.getUnitOfMeasure());
            newMat.setModel(mesMatInfo.getClassificationCode());
            newMat.setMemo(JSONObject.toJSONString(mesMatInfo));
            newMat.setCreateBy(defaultUserId);
            newMat.setCreateTime(now);
            newMat.setUpdateBy(defaultUserId);
            newMat.setUpdateTime(now);
            newMat.setStatus(1);
            if (mat == null) {
                if (!matService.insert(newMat))
                    return -2;
            } else {
                JSONObject dbMemo = JSONObject.parseObject(mat.getMemo());
                dbMemo.remove("OrderNo");
                dbMemo.remove("qty");
                dbMemo.remove("ItemBarcode");
                JSONObject newMemo = JSONObject.parseObject(newMat.getMemo());
                newMemo.remove("OrderNo");
                newMemo.remove("qty");
                dbMemo.remove("ItemBarcode");
                if (!dbMemo.equals(newMemo)) {
                    newMat.setId(mat.getId());
                    if (!matService.updateById(newMat))
                        return -2;
                }
            }
        } else {
            return -1;
        }

        return 1;
    }

    /**
     * 鐗╂枡鍚屾鍏ュ簱鍗曪紝鎸塐rderNo鐢熸垚澶氫釜璁㈠崟
     *
     *
     * @param matRecvForm
     * @return
     */
    public int inBoundOrder_List(MesMatRecvForm matRecvForm){

        long docType = 4;   // docType鏍规嵁搴撶被鍨嬬‘瀹�
        long settle = 1;
        Date now = new Date();

        // 鎸塐rderNo鍒嗙粍锛岀劧鍚庡啀鐢熸垚鍏ュ簱鍗�
        List<MesMatInfo> mesInApply = matRecvForm.getItemdata();
        Map<String, List<MesMatInfo>> map = mesInApply.stream().collect(Collectors.groupingBy(MesMatInfo::getOrderNo));
        for (Map.Entry<String, List<MesMatInfo>> entry : map.entrySet()) {
            List<MesMatInfo> list = entry.getValue();

            // 鏍¢獙璁㈠崟鏄惁閲嶅
            OrderPakin order = orderPakinService.selectByNo(entry.getKey());
            if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
                return -1;
            }

            // 鐢熸垚璁㈠崟
            JSONObject newMemo = new JSONObject();
            newMemo.put("sourceNo", matRecvForm.getSourceNo());
            newMemo.put("sourceName", matRecvForm.getSourceName());
            newMemo.put("operuser", matRecvForm.getOperuser());
            newMemo.put("itemdata", list);

            OrderPakin orderPakin = new OrderPakin();
            orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
            orderPakin.setOrderNo(entry.getKey());
            orderPakin.setOrderTime(com.core.common.DateUtils.convert(now));
            orderPakin.setDocType(docType);
            orderPakin.setSettle(settle);
            orderPakin.setStatus(1);
            orderPakin.setCreateBy(defaultUserId);
            orderPakin.setCreateTime(now);
            orderPakin.setUpdateBy(defaultUserId);
            orderPakin.setUpdateTime(now);
            orderPakin.setMemo(newMemo.toJSONString());  //涓洪鏂欏叆搴撳畬鎴愬弽棣堜繚瀛�   JSONObject.toJSONString(matRecvForm)
            orderPakin.setPakinPakoutStatus(1);
            if (!orderPakinService.insert(orderPakin)) {
                log.error("MES淇濆瓨鍏ュ簱璁㈠崟涓绘。澶辫触");
                throw new CoolException("淇濆瓨鍏ュ簱璁㈠崟涓绘。澶辫触");
            }

            // 鐢熸垚鏄庣粏
            for (MesMatInfo mesMat : list) {
                Mat mat = matService.selectByMatnr(mesMat.getItemNo());
                OrderDetlPakin orderDetlPakin = new OrderDetlPakin();
                orderDetlPakin.setOrderId(orderPakin.getId());
                orderDetlPakin.setOrderNo(orderPakin.getOrderNo());
                orderDetlPakin.setAnfme(Double.valueOf(mesMat.getQty()));
                orderDetlPakin.setQty(0.0);
                orderDetlPakin.setMatnr(mat.getMatnr());
                orderDetlPakin.setMaktx(mat.getMaktx());
                orderDetlPakin.setSpecs(mat.getSpecs());
                orderDetlPakin.setModel(mat.getModel());
                orderDetlPakin.setStandby1(barCodeListToStr(mesMat.getItemBarcode()));   // 闆朵欢浜岀淮鐮�
                orderDetlPakin.setStandby2("1");  //淇濆瓨榻愬鎬ф鏌ユ爣璇嗭紝1 妫�鏌ワ紱0 涓嶆鏌ワ紱
                orderDetlPakin.setCreateBy(defaultUserId);
                orderDetlPakin.setCreateTime(now);
                orderDetlPakin.setUpdateBy(defaultUserId);
                orderDetlPakin.setUpdateTime(now);
                orderDetlPakin.setStatus(1);
                orderDetlPakin.setPakinPakoutStatus(1);
                if (!orderDetlPakinService.insert(orderDetlPakin)) {
                    log.error("MES淇濆瓨鍏ュ簱璁㈠崟鏄庣粏妗eけ璐�1");
                    throw new CoolException("淇濆瓨鍏ュ簱璁㈠崟鏄庣粏妗eけ璐�1");
                }
            }
        }

        return 1;
    }

    /**
     * 棰嗘枡鍏ュ簱鍙嶉
     * 瑙﹀彂鏉′欢锛氱墿鏂欏悓姝ユ帴鍙e叆搴撳崟锛屽叆搴撳悗
     * 鎺ㄩ�佹椂鏈猴細褰撹鍗曚腑鏈夌墿鏂欏叆搴撳悗锛堝簲璇ュ湪姣忔墭鍏ュ簱瀹屾垚鍚庯紝鍙互鍦ㄦ洿鏂癘rderDetlPakin涔嬪悗锛夊垯鎺ㄩ�侊紝涓嶇瓑鍏ㄩ儴璁㈠崟瀹屾垚
     *
     * @param orderNo
     * @param zapplet
     * @return
     */
    public int recvFeedback(String orderNo, String zapplet) {

        OrderPakin order = orderPakinService.selectByNo(orderNo);
        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
            List<MesRecvFeedback.MesRecvFeedbackItem> list = new ArrayList<>();
            JSONObject dbMemo = JSONObject.parseObject(order.getMemo());

            // 浠庣粍鎵樹俊鎭腑鏌ヨ鍏ュ簱鐨勪俊鎭�
            EntityWrapper<WaitPakin> waitPakinEntityWrapper = new EntityWrapper<>();
            waitPakinEntityWrapper.eq("zpallet", zapplet);
            List<WaitPakin> zpalletMat = waitPakinService.selectList(waitPakinEntityWrapper);

            EntityWrapper<OrderDetlPakin> wrapper = new EntityWrapper<>();
            wrapper.eq("order_no", orderNo);
            List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(wrapper);
            if (orderDetlPakins != null && !orderDetlPakins.isEmpty()) {
                for (OrderDetlPakin orderDetl : orderDetlPakins) {
                    for (WaitPakin zMat : zpalletMat) {
                        if (orderDetl.getMatnr().equals(zMat.getMatnr())) {
                            MesRecvFeedback.MesRecvFeedbackItem item = new MesRecvFeedback.MesRecvFeedbackItem();
                            item.setItemNo(orderDetl.getMatnr());
                            item.setOrderNo(orderNo);
                            item.setQty(orderDetl.getAnfme().intValue());
                            item.setRealQty(zMat.getAnfme().intValue());
                            // 鍥炰紶鎵樼洏缁戝畾鐨勯浂浠朵簩缁寸爜
                            EntityWrapper<MatItemBarcode> matItemBarcodeEntityWrapper = new EntityWrapper<>();
                            matItemBarcodeEntityWrapper.eq("zapplet", zapplet).eq("status", 1);
                            List<MatItemBarcode> barcodes = matItemBarcodeMapper.selectList(matItemBarcodeEntityWrapper);
                            if (barcodes != null) {
                                List<String> itemBarcode = new ArrayList<>();
                                for (MatItemBarcode barcode : barcodes) {
                                    itemBarcode.add(barcode.getItemBarcode());
                                }
                                item.setItemBarcode(itemBarcode);
                                list.add(item);
                            }
                        }
                    }
                }
            }

            MesRecvFeedback mesRecvFeedback = new MesRecvFeedback();
            mesRecvFeedback.setSourceNo(dbMemo.getString("sourceNo"));
            mesRecvFeedback.setOperuser(dbMemo.getString("operuser"));
            mesRecvFeedback.setItemdata(list);

            String url = MES_URL + "MaterialReceiptAndReturn";
            String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesRecvFeedback));
            if (!StringUtils.isEmpty(response) && response.contains("Success")){
                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                if("1".equals(mesReturn.getSuccess())) {
                    return 1;
                }
            }
        }

        return 0;
    }

    /**
     * 鍑哄簱鐢宠锛屽姞宸ュ簱銆佸垁鍏峰簱
     * 鍑哄簱鍚庨渶瑕佽嚜鍔ㄥ懠鍙獳GV閫佽揣
     * 鍑哄簱瑙勫垯锛氶渶瑕佹寜闆朵欢浜岀淮鐮侊紙涓�浠朵竴鐮侊級鍑哄簱锛屾暣鎵樺嚭搴擄紝璇ユ墭涓婃湁鍏朵粬鐗╂枡涔熶竴璧峰嚭搴擄紝浠栦滑鍚庢湡浼氬啀鍏ュ簱
     *
     * @param mesOutApply
     * @return 1 鎴愬姛锛�-1 璁㈠崟閲嶅锛�
     */
    @Transactional
    public int outBoundOrder(MesOutApply mesOutApply){

        // 绌烘墭鍑哄簱
        if (StringUtils.isEmpty(mesOutApply.getOrderNo()) && "01".equals(mesOutApply.getTransType())) {
            // 鐢熸垚绌烘墭鍑哄簱浠诲姟
            mobileService.callEmptyBinOutBound(mesOutApply,mesOutApply.getStationId().startsWith("LJ") ? WMS_TRANS_START_STATION_1 : WMS_TRANS_START_STATION_3,mesOutApply.getPalletType(),1,defaultUserId);

//            try {
//                if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) {
//                    TransTask transTask = new TransTask();
//                    transTask.setTaskno(mesOutApply.getTaskno());
//                    transTask.setTaskname(mesOutApply.getTaskname());
//                    transTask.setOrderNo(mesOutApply.getOrderNo());
//                    transTask.setTransType(mesOutApply.getTransType());
//                    transTask.setCurStationId(WMS_TRANS_START_STATION_1);
//                    transTask.setNextProcess(mesOutApply.getProductLineId());
//                    transTask.setNextStationId(mesOutApply.getStationId());
//                    transTask.setItemno(WMS_ZPALLET_ID);  // 鍥哄畾涓虹┖鎵樼殑缂栫爜
//                    transTask.setQty(1);    // 绌烘墭鍙嚭1涓�
//                    transTask.setProductLineId(mesOutApply.getProductLineId());
//                    transTask.setOperateType(1);
//                    transTask.setAgvFactory(1);
//                    JSONObject sendAgvTask = submitTask(transTask);
//                    if (!"1".equals(sendAgvTask.getString("Success"))) {
//                        log.error("鍑哄簱涓嬪彂agv杩愯緭浠诲姟澶辫触锛歿}", JSONObject.toJSONString(transTask));
//                    }
//                }
//            } catch (Exception e) {
//                log.error("涓嬪彂AGV杩愯緭浠诲姟澶辫触", e);
//            }

            return 1;
        } else {    // 姣涘澂锛堢墿鏂欙級鍑哄簱
            // docType鏍规嵁搴撶被鍨嬬‘瀹�
            long docType = 7;
            long settle = 2;

            // 鏍¢獙璁㈠崟鏄惁閲嶅
            OrderPakout order = orderPakoutService.selectByNo(mesOutApply.getOrderNo());
            if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
                log.error("鍑哄簱璁㈠崟鍙烽噸澶嶏細{}",mesOutApply.getOrderNo());
                return -1;
            }
            if (Cools.isEmpty(mesOutApply.getItemBarcode())) {
                log.error("鍑哄簱闆朵欢浜岀淮鐮佷负绌猴細" +mesOutApply.getItemBarcode());
                return 2;
            }
            String itemBarcode = barCodeListToStr(mesOutApply.getItemBarcode());
            // 鑷姩鍑哄簱
            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("standby1", itemBarcode));
            if (locDetl == null) {
                throw new CoolException("闆朵欢浜岀淮鐮佹病鏈夊尮閰嶅埌搴撳瓨锛�" +itemBarcode );
            }
            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
            if (!locMast.getLocSts().equals("F")) {
                throw new CoolException("搴撲綅鐘舵�佷笉涓篎锛�" +locMast.getLocNo() );
            }

            // 鐢熸垚璁㈠崟
            Date now = new Date();
            OrderPakout orderPakout = new OrderPakout();
            orderPakout.setUuid( String.valueOf(snowflakeIdWorker.nextId()));
            orderPakout.setOrderNo(mesOutApply.getOrderNo());
            orderPakout.setOrderTime(com.core.common.DateUtils.convert(now));
            orderPakout.setDocType(docType);
            orderPakout.setSettle(settle);
            orderPakout.setStatus(1);
            orderPakout.setCreateBy(defaultUserId);
            orderPakout.setCreateTime(now);
            orderPakout.setUpdateBy(defaultUserId);
            orderPakout.setUpdateTime(now);
            orderPakout.setMemo(JSONObject.toJSONString(mesOutApply));
            orderPakout.setPakinPakoutStatus(2);
            orderPakout.setNumber(locMast.getBarcode()); // 鎵樼洏鏉$爜锛屼笂鎶ユ椂鐢�
            if (!orderPakoutService.insert(orderPakout)) {
                log.error("MES淇濆瓨鍑哄簱璁㈠崟涓绘。澶辫触");
                throw new CoolException("淇濆瓨鍑哄簱璁㈠崟涓绘。澶辫触");
            }

            // 鐢熸垚鏄庣粏
            Mat mat = matService.selectByMatnr(mesOutApply.getItemno());
            OrderDetlPakout orderDetlPakout = new OrderDetlPakout();
            orderDetlPakout.setOrderId(orderPakout.getId());
            orderDetlPakout.setOrderNo(orderPakout.getOrderNo());
            orderDetlPakout.setAnfme(Double.valueOf(mesOutApply.getQty()));
            orderDetlPakout.setWorkQty(orderDetlPakout.getAnfme());
            orderDetlPakout.setQty(0.0);
            orderDetlPakout.setMatnr(mat.getMatnr());
            orderDetlPakout.setMaktx(mat.getMaktx());
            orderDetlPakout.setSpecs(mat.getSpecs());
            orderDetlPakout.setModel(mat.getModel());

            orderDetlPakout.setStandby1(itemBarcode);
            orderDetlPakout.setCreateBy(defaultUserId);
            orderDetlPakout.setCreateTime(now);
            orderDetlPakout.setUpdateBy(defaultUserId);
            orderDetlPakout.setUpdateTime(now);
            orderDetlPakout.setStatus(1);
            orderDetlPakout.setPakinPakoutStatus(2);
            if (!orderDetlPakoutService.insert(orderDetlPakout)) {
                log.error("MES淇濆瓨鍑哄簱璁㈠崟鏄庣粏妗eけ璐�");
                throw new CoolException("淇濆瓨鍑哄簱璁㈠崟鏄庣粏妗eけ璐�");
            }

            // 鐢熸垚宸ヤ綔鍙�
            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(101));
            // 鐢熸垚宸ヤ綔妗�
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
            wrkMast.setIoTime(now);
            wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
            wrkMast.setIoType(101); // 鍏ュ嚭搴撶姸鎬�
            wrkMast.setIoPri(13D); // 浼樺厛绾э細13
            wrkMast.setCrnNo(1);
            if(mesOutApply.getStationId().startsWith("LJ")) {
                wrkMast.setSourceStaNo("205"); // 婧愮珯
                wrkMast.setStaNo("205"); // 鐩爣绔�
            } else {
                wrkMast.setSourceStaNo("203"); // 婧愮珯
                wrkMast.setStaNo("204"); // 鐩爣绔�
            }
            wrkMast.setSourceLocNo(locMast.getLocNo()); // 婧愬簱浣�
            wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
            wrkMast.setPicking("N"); // 鎷f枡
            wrkMast.setExitMk("N"); // 閫�鍑�
            wrkMast.setEmptyMk("N"); // 绌烘澘
            wrkMast.setLinkMis("N");
            wrkMast.setBarcode(locMast.getBarcode());
            wrkMast.setAppeUser(defaultUserId); // 鎿嶄綔浜哄憳鏁版嵁
            wrkMast.setAppeTime(now);
            wrkMast.setModiUser(defaultUserId);
            wrkMast.setModiTime(now);
            wrkMast.setMemo(JSONObject.toJSONString(mesOutApply));
            wrkMast.setTaskNo(mesOutApply.getTaskno());
            wrkMast.setAgvSta(mesOutApply.getStationId());
            wrkMastService.insert(wrkMast);
            // 鐢熸垚宸ヤ綔妗f槑缁�
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(locDetl);
                wrkDetl.setOrderNo(orderPakout.getOrderNo()); // 鎵嬪姩鍑哄簱涓嶉渶瑕佸甫鍑哄簱瀛樹腑鐨勫崟鎹紪鍙�
                wrkDetl.setWrkNo(workNo);
                wrkDetl.setIoTime(now);
                wrkDetl.setAnfme(orderDetlPakout.getAnfme()); // 鏁伴噺
                wrkDetl.setAppeTime(now);
                wrkDetl.setAppeUser(defaultUserId);
                wrkDetl.setModiTime(now);
                wrkDetl.setModiUser(defaultUserId);
//                wrkDetl.setMatnr(detlDto.getLocDetl().getMatnr());
//                wrkDetl.setMaktx(detlDto.getLocDetl().getMaktx());
//                wrkDetl.setUnit(detlDto.getLocDetl().getUnit());
//                wrkDetl.setSpecs(detlDto.getLocDetl().getSpecs());
//                wrkDetl.setUnit(detlDto.getLocDetl().getUnit());
//                wrkDetl.setModel(detlDto.getLocDetl().getModel());
                wrkDetlService.insert(wrkDetl);

            // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
            if (locMast.getLocSts().equals("F")) {
                locMast.setLocSts("R");
                locMast.setModiUser(defaultUserId);
                locMast.setModiTime(now);
                locMastService.updateById(locMast);
            }
            log.info("鍑哄簱浠诲姟鐢熸垚鎴愬姛锛屼换鍔″彿锛歿}",workNo);
            // 绔嬪簱鐢熸垚璁㈠崟鍚庯紝鑷姩璋冨害AGV杩愰�佸埌绔欑偣锛岀洰鍓嶅鎵樼敓鎴愬涓��
//            try {
//                if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) {
//                    // 鎸夐浂浠朵簩缁寸爜鏌ヨ鏈夊嚑涓墭锛屽鎵樼敓鎴愬涓换鍔★紝姣忔墭瀵瑰簲闆朵欢浜岀淮鐮�
////                    String barCode = barCodeListToStr(mesOutApply.getItemBarcode());
////                    EntityWrapper<MatItemBarcode> matItemBarcodeEntityWrapper = new EntityWrapper<>();
////                    matItemBarcodeEntityWrapper.in("item_barcode", barCode);
////                    List<MatItemBarcode> barcodes = matItemBarcodeMapper.selectList(matItemBarcodeEntityWrapper);
////                     if (barcodes != null) {
////                        Map<String, List<MatItemBarcode>> map = barcodes.stream().collect(Collectors.groupingBy(MatItemBarcode::getZapplet));
////                        for (Map.Entry<String, List<MatItemBarcode>> entry : map.entrySet()) {
////                            List<MatItemBarcode> list = entry.getValue();
////                            List<String> codes = new ArrayList<>();
////                            for (MatItemBarcode zapllet : list) {
////                                codes.add(zapllet.getItemBarcode());
////                            }
//
//                            TransTask transTask = new TransTask();
//                            transTask.setTaskno(mesOutApply.getTaskno());
//                            transTask.setTaskname(mesOutApply.getTaskname());
//                            transTask.setOrderNo(mesOutApply.getOrderNo());
//                            transTask.setTransType(mesOutApply.getTransType());
//                            transTask.setCurStationId(WMS_TRANS_START_STATION_3);
//                            transTask.setNextProcess(mesOutApply.getProductLineId());
//                            transTask.setNextStationId(mesOutApply.getStationId());
//                            transTask.setItemno(mesOutApply.getItemno());
//                            transTask.setQty(mesOutApply.getQty());
//                            transTask.setProductLineId(mesOutApply.getProductLineId());
//                            transTask.setItemBarcode(mesOutApply.getItemBarcode());
//                            transTask.setTuoPanId(locDetl.getZpallet());
//                            transTask.setOperateType(1);
//                            transTask.setAgvFactory(1);
//                            JSONObject sendAgvTask = submitTask(transTask);
//                            if (!"1".equals(sendAgvTask.getString("Success"))) {
//                                log.error("鍑哄簱涓嬪彂agv杩愯緭浠诲姟澶辫触", JSONObject.toJSONString(transTask));
//                            }
////                        }
////                    }
//                }
//            } catch (Exception e) {
//                log.error("涓嬪彂AGV杩愯緭浠诲姟澶辫触", e);
//            }
        }

        return 1;
    }

    /**
     * 鍏ュ簱鐢宠
     * 鏀跺埌鍏ュ簱鐢宠鍚庤嚜鍔ㄥ懠鍙獳GV鍙栬揣
     *
     * @param mesInApply
     */
    @Transactional
    public int inBoundOrder(MesInApply mesInApply){

        // 鍑哄叆搴撲换鍔℃帶鍒� 鍏ュ簱鍓嶅垽鏂槸鍚︽湁鍑哄簱浠诲姟
        if(mesInApply.getStationID().startsWith("LG") || mesInApply.getStationID().startsWith("LT")) { // 渚ч潰鍙兘铻烘潌绾垮嚭鍏ワ紝205鍙�
            int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().in("io_type", 101, 103, 107, 110).eq("sta_no", 205));
            if(count >0) {
                log.warn("璇ュ叆搴撶珯鐐�:{},瀛樺湪鎵ц鐨勫嚭搴撲换鍔�:{}鏉�", 205, count);
                return 2;
            }
        }

        // 绌烘墭鍥炲簱
        if (StringUtils.isEmpty(mesInApply.getOrderNo()) && StringUtils.isEmpty(mesInApply.getItemno())) {
                if (!StringUtils.isEmpty(mesInApply.getTaskno()) && !StringUtils.isEmpty(mesInApply.getStationID())) {
                    TransTask transTask = new TransTask();
                    transTask.setTaskno(mesInApply.getTaskno());
                    transTask.setTaskname(mesInApply.getTaskname());
                    transTask.setOrderNo(mesInApply.getOrderNo());
                    transTask.setTransType(mesInApply.getTransType());
                    transTask.setCurProcess(mesInApply.getProductLineId());
                    transTask.setCurStationId(mesInApply.getStationID());
                    transTask.setNextStationId(mesInApply.getStationID().startsWith("LJ") ? WMS_TRANS_START_STATION_1 : WMS_TRANS_START_STATION_2);
                    transTask.setItemno(WMS_ZPALLET_ID);  // 鍥哄畾涓虹┖鎵樼殑缂栫爜
                    transTask.setQty(1);    // 绌烘墭鍙洖1涓�
                    transTask.setProductLineId(mesInApply.getProductLineId());
                    transTask.setOperateType(1);
                    transTask.setAgvFactory(1);
                    transTask.setTuoPanId(mesInApply.getTuoPanId());
                    JSONObject sendAgvTask = submitTask(transTask);
                    if (!"1".equals(sendAgvTask.getString("Success"))) {
                        log.error("鍏ュ簱涓嬪彂agv杩愯緭浠诲姟澶辫触,{}", JSONObject.toJSONString(transTask));
                        return 2;
                    }
                } else {
                    log.error("鏃犱换鍔″彿锛歿}锛屾垨鏃犵墿鏂欑紪鐮�:{}",mesInApply.getTaskno(),mesInApply.getItemno() );
                    return 2;
                }

            return 1;
        } else {    // 姣涘澂銆佹垚鍝佸洖搴�
            // docType鏍规嵁搴撶被鍨嬬‘瀹�
            long docType = 3;
            long settle = 1;

            // 鏍¢獙璁㈠崟鏄惁閲嶅
            OrderPakin order = orderPakinService.selectByNo(mesInApply.getOrderNo());
            if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
                log.error("璁㈠崟閲嶅锛歿}", mesInApply.getOrderNo());
                return 2;
            }

            // 鐢熸垚璁㈠崟
            Date now = new Date();
            OrderPakin orderPakin = new OrderPakin();
            orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
            orderPakin.setOrderNo(mesInApply.getOrderNo());
            orderPakin.setOrderTime(com.core.common.DateUtils.convert(now));
            orderPakin.setDocType(docType);
            orderPakin.setSettle(settle);
            orderPakin.setStatus(1);
            orderPakin.setCreateBy(defaultUserId);
            orderPakin.setCreateTime(now);
            orderPakin.setUpdateBy(defaultUserId);
            orderPakin.setUpdateTime(now);
            orderPakin.setMemo(JSONObject.toJSONString(mesInApply));  //涓哄嚭搴撳畬鎴愬弽棣堜繚瀛�
            orderPakin.setPakinPakoutStatus(1);
            orderPakinService.insert(orderPakin);

            // 鐢熸垚鏄庣粏
            Mat mat = matService.selectByMatnr(mesInApply.getItemno());
            OrderDetlPakin orderDetlPakin = new OrderDetlPakin();
            orderDetlPakin.setOrderId(orderPakin.getId());
            orderDetlPakin.setOrderNo(orderPakin.getOrderNo());
            orderDetlPakin.setAnfme(Double.valueOf(mesInApply.getQty()));
            orderDetlPakin.setQty(0.0);
            orderDetlPakin.setMatnr(mat.getMatnr());
            orderDetlPakin.setMaktx(mat.getMaktx());
            orderDetlPakin.setSpecs(mat.getSpecs());
            orderDetlPakin.setModel(mat.getModel());
            List<String> itemBarcode = mesInApply.getProductInfo().stream().map(MesInApply.ProductInfo::getItemBarcode).collect(Collectors.toList());
            orderDetlPakin.setStandby1(barCodeListToStr(itemBarcode)); //闆朵欢璇︽儏瀛樺湪1

            orderDetlPakin.setStandby2("0");  //淇濆瓨榻愬鎬ф鏌ユ爣璇嗭紝1 妫�鏌ワ紱0 涓嶆鏌ワ紱
            orderDetlPakin.setCreateBy(defaultUserId);
            orderDetlPakin.setCreateTime(now);
            orderDetlPakin.setUpdateBy(defaultUserId);
            orderDetlPakin.setUpdateTime(now);
            orderDetlPakin.setStatus(1);
            orderDetlPakin.setPakinPakoutStatus(1);
            orderDetlPakinService.insert(orderDetlPakin);

            // 鐢熸垚鍏ュ簱閫氱煡妗�
            WaitPakin waitPakin = new WaitPakin();
            BeanUtils.copyProperties(mat, waitPakin);
//                waitPakin.sync(mat);
            waitPakin.setOrderNo(orderPakin.getOrderNo());   // 鍗曟嵁缂栧彿
            waitPakin.setOrderId(orderPakin.getId());
            waitPakin.setZpallet(mesInApply.getTuoPanId());   // 鎵樼洏鐮�
            waitPakin.setIoStatus("N");     // 鍏ュ嚭鐘舵��
            waitPakin.setAnfme(orderDetlPakin.getAnfme());  // 鏁伴噺
            waitPakin.setStatus("Y");    // 鐘舵��
            waitPakin.setAppeUser(defaultUserId);
            waitPakin.setAppeTime(now);
            waitPakin.setModiUser(defaultUserId);
            waitPakin.setModiTime(now);
            waitPakin.setStandby1(barCodeListToStr(itemBarcode));
            waitPakinService.insert(waitPakin);
            OrderInAndOutUtil.increaseWorkQty(Boolean.TRUE, orderPakin.getId(), orderDetlPakin.getMatnr(), orderDetlPakin.getBatch(),
                    orderDetlPakin.getBrand(), orderDetlPakin.getStandby1(), orderDetlPakin.getStandby2(), orderDetlPakin.getStandby3(),
                    orderDetlPakin.getBoxType1(), orderDetlPakin.getBoxType2(), orderDetlPakin.getBoxType3(), orderDetlPakin.getAnfme());
            OrderInAndOutUtil.updateOrder(Boolean.TRUE, orderPakin.getId(), 2L, defaultUserId);

            // 鍛煎彨AGV浠庝骇绾胯繍鍥炵珛搴�
                if (!StringUtils.isEmpty(mesInApply.getTaskno())) {
                    TransTask transTask = new TransTask();
                    transTask.setTaskno(mesInApply.getTaskno());
                    transTask.setTaskname(mesInApply.getTaskname());
                    transTask.setOrderNo(mesInApply.getOrderNo());
                    transTask.setTransType(mesInApply.getTransType());
                    transTask.setCurProcess(mesInApply.getProductLineId());
                    transTask.setCurStationId(mesInApply.getStationID());
                    transTask.setNextStationId(mesInApply.getStationID().startsWith("LJ") ? WMS_TRANS_START_STATION_1 : WMS_TRANS_START_STATION_2);
                    transTask.setItemno(mesInApply.getItemno());
                    transTask.setQty(mesInApply.getQty());
                    transTask.setProductLineId(mesInApply.getProductLineId());
                    transTask.setItemBarcode(itemBarcode);
                    transTask.setTuoPanId(mesInApply.getTuoPanId());
                    transTask.setOperateType(1);
                    transTask.setAgvFactory(1);
                    JSONObject sendAgvTask = submitTask(transTask);
                    if (!"1".equals(sendAgvTask.getString("Success"))) {
                        log.error("鍏ュ簱涓嬪彂agv杩愯緭浠诲姟澶辫触:{}", JSONObject.toJSONString(transTask));
                        throw new CoolException("鍏ュ簱涓嬪彂agv杩愯緭浠诲姟澶辫触");
                    }
                } else {
                    throw new CoolException("MES鍏ュ簱涓嬪彂agv杩愯緭浠诲姟澶辫触");
                }
        }

        return 1;
    }

    /**
     * 鍑哄簱瀹屾垚
     * 鍑哄簱鍚庯紝鎸夋墭鎺ㄩ�侊紝闈炴暣涓鍗�
     *
     * @param orderNo
     * @return
     */
    public int outFeedbackByTuo(String orderNo, Task agvTask) {

        int success = 0;

        OrderPakout order = orderPakoutService.selectByNo(orderNo);
        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
            JSONObject dbMemo = JSONObject.parseObject(order.getMemo());

            // TODO锛氬嚭搴撳畬鎴愬悗锛岃嫢鏈В缁戞墭鐩樺拰鐗╂枡锛屽垯鎵ц鎵樼洏瑙g粦
            // TODO锛氬嚭搴撳畬鎴愬悗锛岃嫢鏈竻闄ら浂浠朵簩缁寸爜锛屽垯鎵ц娓呴櫎锛屼篃鍙互鍦ˋGV閫佽揣瀹屾垚鍚庢竻闄�
//            EntityWrapper<OrderDetlPakout> wrapper = new EntityWrapper<>();
//            wrapper.eq("order_no", orderNo);
//            List<OrderDetlPakout> orderDetlPakouts = orderDetlPakoutService.selectList(wrapper);
//            if (orderDetlPakouts != null && !orderDetlPakouts.isEmpty()) {
//                for (OrderDetlPakout orderDetl : orderDetlPakouts) {
//                    StringBuilder palletId = new StringBuilder();
//                    EntityWrapper<WaitPakin> wrapper2 = new EntityWrapper<>();
//                    wrapper2.eq("order_no", orderDetl.getOrderNo());
//                    List<WaitPakin> waitPakins = waitPakinService.selectList(wrapper2);
//                    if (waitPakins != null && waitPakins.size() > 0) {
//                        for (WaitPakin waitPakin : waitPakins) {
//                            palletId.append(waitPakin.getZpallet()).append(",");
//                        }
//                    }
//
//                    MesOutFeedback mesOutFeedback = new MesOutFeedback();
//                    mesOutFeedback.setTaskno(dbMemo.getString("taskno"));
//                    mesOutFeedback.setTaskname(dbMemo.getString("taskname"));
//                    mesOutFeedback.setProductLineId(dbMemo.getString("ProductLineId"));
//                    mesOutFeedback.setStationId(dbMemo.getString("StationID"));
//                    mesOutFeedback.setItemno(orderDetl.getMatnr());
//                    mesOutFeedback.setTuoPanId(zpalletId);
//                    mesOutFeedback.setQty(orderDetl.getQty().intValue());
//                    if (!StringUtils.isEmpty(dbMemo.getString("ItemBarcode"))) {
//                        mesOutFeedback.setItemBarcode(barCodeStrToList(dbMemo.getString("ItemBarcode")));
//                    }
//                    mesOutFeedback.setOrderNo(orderNo);
//                }
//            }

            EntityWrapper<TaskDetl> entityWrapper = new EntityWrapper<>();
            entityWrapper.eq("wrk_no", agvTask.getWrkNo());
            TaskDetl taskDetl = taskDetlService.selectOne(entityWrapper);
            String zpalletId = taskDetl.getZpallet();
            List<String> itemBarCode = new ArrayList<>();
            JSONArray array = JSONArray.parseArray(taskDetl.getMemo());
            for (Object one : array) {
                itemBarCode.add(one.toString());
                // TODO锛氬叆搴撴椂瀛樺偍闆朵欢鐮�(ItemBarCode锛夛紝骞剁粦瀹氭墭鐩橈紝鍑哄簱鍚庤繖閲岃�冭檻瑙g粦
            }

            MesOutFeedback mesOutFeedback = new MesOutFeedback();
            mesOutFeedback.setTaskno(agvTask.getTaskNo());
            mesOutFeedback.setTaskname(dbMemo.getString("taskname"));
            mesOutFeedback.setProductLineId(dbMemo.getString("ProductLineId"));
            mesOutFeedback.setStationId(dbMemo.getString("StationId"));
            mesOutFeedback.setItemno(dbMemo.getString("Itemno"));
            mesOutFeedback.setTuoPanId(zpalletId);
            if (itemBarCode.size() > 0) {
                mesOutFeedback.setQty(itemBarCode.size());
                mesOutFeedback.setItemBarcode(itemBarCode);
            }
            mesOutFeedback.setOrderNo(orderNo);

            String url = MES_URL + "issueComplete";
            String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesOutFeedback));
            if (!StringUtils.isEmpty(response) && response.contains("Success")){
                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                if("1".equals(mesReturn.getSuccess())) {
                    success = 1;
                }
            }
        }

        return success;
    }

    /**
     * 鍏ュ簱瀹屾垚
     * 鍏ュ簱鍚庯紝鎸夋墭鎺ㄩ�侊紝闈炴暣涓鍗�
     *
     * @param orderNo
     * @param zapplet
     * @return
     */
    public int inFeedbackByTuo(String orderNo, String zapplet) {

        int success = 0;

        OrderPakin order = orderPakinService.selectByNo(orderNo);
        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
            List<MesInApply.ProductInfo> list = new ArrayList<>();
            // 浠庢墭鐩樼粦瀹氱殑闆朵欢浜岀淮鐮佷腑鏌ヨ淇℃伅
            EntityWrapper<MatItemBarcode> matItemBarcodeEntityWrapper = new EntityWrapper<>();
            matItemBarcodeEntityWrapper.eq("zapplet", zapplet).eq("status", 1);
            List<MatItemBarcode> barcodes = matItemBarcodeMapper.selectList(matItemBarcodeEntityWrapper);
            for (MatItemBarcode barcode : barcodes) {
                MesInApply.ProductInfo productInfo = new MesInApply.ProductInfo();
                productInfo.setItemBarcode(barcode.getItemBarcode());
                productInfo.setQualityStatus(barcode.getQualityStatus());
                list.add(productInfo);
            }

            MesInApply result = JSONObject.parseObject(order.getMemo(), MesInApply.class);
            result.setProductInfo(list);
            result.setQty(list.size());

            String url = MES_URL + "loadComplete";
            String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(result));
            if (!StringUtils.isEmpty(response) && response.contains("Success")){
                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                if("1".equals(mesReturn.getSuccess())) {
                    success = 1;
                }
            }
        }

        return success;
    }

    /**
     * 闆朵欢浜岀淮鐮侊紝鏁扮粍杞瑂tring
     *
     * @param list
     * @return
     */
    public static String barCodeListToStr(List<String> list) {
        if(list.isEmpty()) {
            return "";
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (String str : list) {
            stringBuilder.append(str).append(",");
        }
        String result = stringBuilder.toString();
        return result.endsWith(",") ? result.substring(0, result.length() - 1) : result;
    }

    /**
     * 闆朵欢浜岀淮鐮侊紝string杞暟缁�
     *
     * @param str
     * @return
     */
    public static List<String> barCodeStrToList(String str) {
        String[] array = str.split(",");
        return Arrays.asList(array);
    }

    /**
     * 鍏ュ簱瀹屾垚
     * 鍏ュ簱鍗曞畬鎴愬悗锛屾暣鍗曟帹閫�
     *
     * @param orderNo
     * @return
     */
    public int inFeedback(String orderNo) {

        int success = 0;

        OrderPakin order = orderPakinService.selectByNo(orderNo);
        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
            EntityWrapper<OrderDetlPakin> wrapper = new EntityWrapper<>();
            wrapper.eq("order_no", orderNo);
            List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(wrapper);
            if (orderDetlPakins != null && !orderDetlPakins.isEmpty()) {
                for (OrderDetlPakin orderDetl : orderDetlPakins) {
                    MesInApply result = JSONObject.parseObject(order.getMemo(), MesInApply.class);
                    result.setQty(orderDetl.getQty().intValue());

                    String url = MES_URL + "loadComplete";
                    String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(result));
                    if (!StringUtils.isEmpty(response) && response.contains("Success")){
                        MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                        if("1".equals(mesReturn.getSuccess())) {
                            success++;
                        }
                    }
                }

                if (success == orderDetlPakins.size()) {
                    success = 1;
                } else {
                    success = 0;
                }
            }
        }

        return success;
    }

    /**
     * 锛堝浠斤級鍑哄簱璁㈠崟瀹屾垚
     *
     * @param orderNo
     * @return
     */
    public int outFeedback(String orderNo) {

        int success = 0;

        OrderPakout order = orderPakoutService.selectByNo(orderNo);
        if (order != null && order.getSettle() == 4) {   // 鏍¢獙鏄惁瀹屾垚
            JSONObject dbMemo = JSONObject.parseObject(order.getMemo());
            EntityWrapper<OrderDetlPakout> wrapper = new EntityWrapper<>();
            wrapper.eq("order_no", orderNo);
            List<OrderDetlPakout> orderDetlPakouts = orderDetlPakoutService.selectList(wrapper);
            if (orderDetlPakouts != null && !orderDetlPakouts.isEmpty()) {
                for (OrderDetlPakout orderDetl : orderDetlPakouts) {
                    StringBuilder palletId = new StringBuilder();
                    EntityWrapper<WaitPakin> wrapper2 = new EntityWrapper<>();
                    wrapper2.eq("order_no", orderDetl.getOrderNo());
                    List<WaitPakin> waitPakins = waitPakinService.selectList(wrapper2);
                    if (waitPakins != null && waitPakins.size() > 0) {
                        for (WaitPakin waitPakin : waitPakins) {
                            palletId.append(waitPakin.getZpallet()).append(",");
                        }
                    }

                    MesOutFeedback mesOutFeedback = new MesOutFeedback();
                    mesOutFeedback.setTaskno(dbMemo.getString("taskno"));
                    mesOutFeedback.setTaskname(dbMemo.getString("taskname"));
                    mesOutFeedback.setProductLineId(dbMemo.getString("ProductLineId"));
                    mesOutFeedback.setStationId(dbMemo.getString("StationID"));
                    mesOutFeedback.setItemno(orderDetl.getMatnr());
                    if (!StringUtils.isEmpty(palletId.toString())) {
                        mesOutFeedback.setTuoPanId(palletId.substring(0, palletId.length() - 1));
                    }
                    mesOutFeedback.setQty(orderDetl.getQty().intValue());
                    if (!StringUtils.isEmpty(dbMemo.getString("ItemBarcode"))) {
                        mesOutFeedback.setItemBarcode(barCodeStrToList(dbMemo.getString("ItemBarcode")));
                    }
                    mesOutFeedback.setOrderNo(orderNo);

                    // TODO:澶囨敞锛氬嚭搴撳畬鎴愬悗瑙g粦鎵樼洏鍜岀墿鏂欙紝鑻ュ墠闈㈡湭瑙g粦锛屾澶勯渶瑕佽В缁�

                    String url = MES_URL + "issueComplete";
                    String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesOutFeedback));
                    if (!StringUtils.isEmpty(response) && response.contains("Success")){
                        MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                        if("1".equals(mesReturn.getSuccess())) {
                            success++;
                        }
                    }
                }

                if (success == orderDetlPakouts.size()) {
                    success = 1;

                    // TODO锛氱珛搴撳嚭搴撳悗鑷姩璋冨害AGV杩愰�佸埌绔欑偣
                    String taskNo = dbMemo.getString("taskno");
                    if (!StringUtils.isEmpty(taskNo)) {
                        TransTask transTask = new TransTask();
                        transTask.setTaskno(dbMemo.getString("taskno"));
                        transTask.setTaskname(dbMemo.getString("taskname"));
                        transTask.setOrderNo(dbMemo.getString("OrderNo"));
                        transTask.setTransType(dbMemo.getString("TransType"));
//                    transTask.setCurProcess();
                        transTask.setCurStationId(WMS_TRANS_START_STATION_3);
                        transTask.setNextProcess(dbMemo.getString("ProductLineId"));
                        transTask.setNextStationId(dbMemo.getString("StationId"));
                        transTask.setItemno(dbMemo.getString("Itemno"));
                        transTask.setQty(dbMemo.getInteger("Qty"));
                        transTask.setProductLineId(dbMemo.getString("ProductLineId"));
                        transTask.setItemBarcode(barCodeStrToList(dbMemo.getString("ItemBarcode")));
                        transTask.setOperateType(1);
                        transTask.setAgvFactory(1);
                        JSONObject sendAgvTask = submitTask(transTask);
                        if (!"1".equals(sendAgvTask.getString("Success"))) {
                            log.error("鍑哄簱涓嬪彂agv杩愯緭浠诲姟澶辫触:{}", JSONObject.toJSONString(transTask));
                        }
                    }
                } else {
                    success = 0;
                }
            }
        }

        return success;
    }

    /**
     * 鍑哄簱鐢宠锛堝彨鏂欙級,瑁呴厤搴撱�佹粦鍧楀簱
     *
     * @param mesCallOutApply
     * @return
     */
    public int callOutBoundOrder(MesCallOutApply mesCallOutApply){

        // docType鏍规嵁搴撶被鍨嬬‘瀹�
        long docType = 7;
        long settle = 1;

        // 鏍¢獙璁㈠崟鏄惁閲嶅
        OrderPakout order = orderPakoutService.selectByNo(mesCallOutApply.getOrderNo());
        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
            return -1;
        }

        // 鐢熸垚璁㈠崟
        Date now = new Date();
        OrderPakout orderPakout = new OrderPakout();
        orderPakout.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
        orderPakout.setOrderNo(mesCallOutApply.getOrderNo());
        orderPakout.setOrderTime(com.core.common.DateUtils.convert(now));
        orderPakout.setDocType(docType);
        orderPakout.setSettle(settle);
        orderPakout.setStatus(1);
        orderPakout.setCreateBy(defaultUserId);
        orderPakout.setCreateTime(now);
        orderPakout.setUpdateBy(defaultUserId);
        orderPakout.setUpdateTime(now);
        orderPakout.setMemo(JSONObject.toJSONString(mesCallOutApply));
        orderPakout.setPakinPakoutStatus(2);
        if (!orderPakoutService.insert(orderPakout)) {
            log.error("MES淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級涓绘。澶辫触");
            throw new CoolException("淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級涓绘。澶辫触");
        }

        // 鐢熸垚鏄庣粏
        if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) {
            for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()) {
                Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno());
                OrderDetlPakout orderDetlPakout = new OrderDetlPakout();
                orderDetlPakout.setOrderId(orderPakout.getId());
                orderDetlPakout.setOrderNo(orderPakout.getOrderNo());
                orderDetlPakout.setAnfme(Double.valueOf(mesOutApplyItem.getQty()));
                orderDetlPakout.setQty(0.0);
                orderDetlPakout.setMatnr(mat.getMatnr());
                orderDetlPakout.setMaktx(mat.getMaktx());
                orderDetlPakout.setSpecs(mat.getSpecs());
                orderDetlPakout.setModel(mat.getModel());
                orderDetlPakout.setThreeCode(mesOutApplyItem.getItemBarcode());
                orderDetlPakout.setStandby1(mesOutApplyItem.getTrayid());   //淇濆瓨閰嶇洏鍙凤紝闈炴墭鐩樺彿
                orderDetlPakout.setCreateBy(defaultUserId);
                orderDetlPakout.setCreateTime(now);
                orderDetlPakout.setUpdateBy(defaultUserId);
                orderDetlPakout.setUpdateTime(now);
                orderDetlPakout.setStatus(1);
                orderDetlPakout.setPakinPakoutStatus(2);
                if (!orderDetlPakoutService.insert(orderDetlPakout)) {
                    log.error("MES淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級鏄庣粏妗eけ璐�");
                    throw new CoolException("淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級鏄庣粏妗eけ璐�");
                }
            }
        }

        return 1;
    }

    // endregion


    // region 鎼繍浠诲姟璋冨害

    // route杞彂3涓猈CS浠诲姟

    @Resource
    private BasDevpMapper basDevpMapper;

    /**
     * 9.1涓嬪彂杩愯緭浠诲姟
     *
     * @param transTask
     * @return
     */
    @Transactional
    public JSONObject submitTask(TransTask transTask) {

        JSONObject result = new JSONObject();
        result.put("taskno", transTask.getTaskno());

        // 閲嶅鎬ф牎楠�
        EntityWrapper<Task> wrapper = new EntityWrapper<>();
        wrapper.eq("task_no", transTask.getTaskno());
        List<Task> tasks = taskService.selectList(wrapper);
        if (tasks != null && !tasks.isEmpty()) {
            log.error("agv浠诲姟鍙烽噸澶�:{}", transTask.getTaskno());
            result.put("Success", "2");
            result.put("Message", "agv浠诲姟鍙烽噸澶�:" + transTask.getTaskno());
            return result;
        }

        // 涓嬪彂缁橰CS
        RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
        // 妯℃澘鍚�
        if(transTask.getCurStationId().startsWith("LL") || transTask.getCurStationId().startsWith("LJ")
                || transTask.getCurStationId().startsWith("LG") || transTask.getCurStationId().startsWith("LT")) { // 璧风偣浜х嚎
            rcsTaskSubmit.setTaskType("JJIN");
        } else if(transTask.getNextStationId().startsWith("LL") || transTask.getNextStationId().startsWith("LJ")
                || transTask.getNextStationId().startsWith("LG") || transTask.getNextStationId().startsWith("LT")) { // 缁堢偣浜х嚎
            rcsTaskSubmit.setTaskType("JJOUT");
        } else if(transTask.getCurStationId().startsWith("B")) { // 涓嶆秹鍙婁骇绾�,璧风偣鎺ラ┏浣嶏紝鍏ュ簱
            rcsTaskSubmit.setTaskType("CS4");
        } else if(transTask.getNextStationId().startsWith("B")){  // 涓嶆秹鍙婁骇绾�,缁堢偣鎺ラ┏浣嶏紝鍑哄簱
            rcsTaskSubmit.setTaskType("CS3");
        } else {
            log.error("鏍规嵁璧风偣锛歿}锛岀粓鐐癸細{}锛屾棤娉曞尮閰嶆ā鏉�", transTask.getCurStationId(),transTask.getNextStationId());
            result.put("Success", "2");
            result.put("Message", "鏍规嵁璧风偣锛�"+transTask.getCurStationId()+"锛岀粓鐐癸細"+transTask.getNextStationId()+"锛屾棤娉曞尮閰嶆ā鏉�");
            return result;
        }
        rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno());
        rcsTaskSubmit.setInitPriority(10);  //榛樿10
        List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
        RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
        RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute();
        startRoute.setSeq(0);
        startRoute.setOperation("COLLECT");
        endRoute.setSeq(1);
        endRoute.setOperation("DELIVERY");

        String curStationId = transTask.getCurStationId(); // 璧风偣
        String nextStationId = transTask.getNextStationId(); // 缁堢偣
        // 璧风偣鍜岀粓鐐规槸杈撻�佺嚎鏃� 鏍规嵁鎵樼洏鐮佺粰AGV涓嶅悓鐨勭珯鐐�
        startRoute.setCode(transTask.getCurStationId());
        if (curStationId.equals("202") || curStationId.equals("204") || curStationId.equals("205")) {
            if(curStationId.equals("202") || curStationId.equals("204")) {
                startRoute.setCode(transTask.getCurStationId() + (transTask.getTuoPanId().startsWith("11") ? "-2" : "-1"));
            }
            // 鍑哄簱鍏堢粦瀹氳浇鍏�
            SiteBind siteBind = new SiteBind("SITE", startRoute.getCode(), "POD", transTask.getTuoPanId(), "BIND");
            RcsReturn carrierBindReturn = rcsService.siteBind(siteBind);
            if (!carrierBindReturn.getCode().equals("SUCCESS")) {
                log.error("鍑哄簱缁戝畾杞藉叿澶辫触锛歿}", JSONObject.toJSONString(carrierBindReturn));
                result.put("Success", "2");
                result.put("Message", "鍑哄簱缁戝畾杞藉叿澶辫触锛�" + JSONObject.toJSONString(carrierBindReturn));
                return result;
            }
        }
        endRoute.setCode(transTask.getNextStationId());
        if(nextStationId.equals("202") || nextStationId.equals("204")) {
            endRoute.setCode(transTask.getNextStationId() + (transTask.getTuoPanId().startsWith("11") ? "-2" : "-1"));
        }

        targetRouteList.add(startRoute);
        targetRouteList.add(endRoute);
        rcsTaskSubmit.setTargetRoute(targetRouteList);

        // 杞彂缁欐捣搴锋垨鍗庢檽RCS
        RcsReturn rcsReturn = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
        if (rcsReturn.getCode().equals("SUCCESS")) {
            int workNo = commonService.getWorkNo(WorkNoType.OTHER.type);
            Date now = new Date();
            Task task = new Task();
            task.setWrkNo(workNo);
            task.setTaskType("AGV");
            task.setWrkSts(301L);
            task.setIoType(3);
            task.setIoPri(10.00);
            task.setWrkDate(now);
            task.setSourceStaNo(transTask.getCurStationId());
            task.setStaNo(transTask.getNextStationId());
            task.setBarcode(transTask.getTuoPanId());
            task.setModiUser(defaultUserId);
            task.setModiTime(now);
            task.setAppeUser(defaultUserId);
            task.setAppeTime(now);
            task.setTaskNo(transTask.getTaskno());
            task.setMemo(JSONObject.toJSONString(transTask));

            taskService.insert(task);
            Mat mat = matService.selectByMatnr(transTask.getItemno());
            TaskDetl taskDetl = new TaskDetl();
            taskDetl.setWrkNo(task.getWrkNo());
            taskDetl.setIoTime(task.getIoTime());
            taskDetl.setMatnr(transTask.getItemno());
            taskDetl.setAnfme(0.0);
//            taskDetl.setStandby1(String.valueOf(transTask.getQty()));
            taskDetl.setMaktx(mat.getMaktx());
            taskDetl.setSpecs(mat.getSpecs());
            taskDetl.setOrderNo(transTask.getOrderNo());
            taskDetl.setZpallet(transTask.getTuoPanId());
            taskDetl.setMemo(Cools.isEmpty(transTask.getItemBarcode()) ? "":barCodeListToStr(transTask.getItemBarcode()));
            taskDetl.setModiUser(defaultUserId);
            taskDetl.setModiTime(now);
            taskDetl.setAppeUser(defaultUserId);
            taskDetl.setAppeTime(now);
            taskDetlService.insert(taskDetl);
            result.put("Success", "1");
            result.put("Message", "浠诲姟鎺ユ敹鎴愬姛");

            // 鍑哄叆搴撲换鍔℃帶鍒� 鍏ュ簱鏆傚瓨+1
            if(task.getStaNo().equals("205")) {
                basDevpMapper.updateInQty(Integer.parseInt(task.getStaNo()),1);
            }
        } else {
            result.put("Success", "2");
            result.put("Message", "浠诲姟涓嬪彂缁橰CS澶辫触");
        }

        return result;
    }

    /**
     * 9.2杩斿洖浠诲姟鎵ц缁撴灉
     *
     * @param rcsReporterTask
     * @return
     */
    public int reporterTask(RcsReporterTask rcsReporterTask) {

        // 缁撴灉姹囨��
        boolean completed = true;
        EntityWrapper<Task> wrapper = new EntityWrapper<>();
        wrapper.eq("task_no", rcsReporterTask.getRobotTaskCode());
        List<Task> tasks = taskService.selectList(wrapper);
        if (tasks != null && !tasks.isEmpty()) {
            for (Task task : tasks) {
                if (task.getWrkSts() != 304) {   // TODO锛氱‘璁ゅ畬鎴愶紝鍙兘瀛樺湪澶氱洏浠诲姟
                    completed = false;
                }
            }
        }

        if (completed) {
            TransTaskFeedback transTaskFeedback = new TransTaskFeedback();
            transTaskFeedback.setTaskno(rcsReporterTask.getRobotTaskCode());
//            transTaskFeedback.setTaskname();
            transTaskFeedback.setResult(1);

            String url = MES_URL + "api/task/reporter";
            String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(transTaskFeedback));
            if (!StringUtils.isEmpty(response) && response.contains("Success")){
                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                if("1".equals(mesReturn.getSuccess())) {
                    return 1;
                }
            }
        }

        return 0;
    }

    /**
     * 9.8鐢宠鍗庢檽AGV杩涘叆鐢熶骇绾�
     *
     * @param apply
     * @return
     */
    public String applyInLine(TransParent apply) {

        String url = MES_URL + "api/apply/inLine";
        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
        if (!StringUtils.isEmpty(response) && response.contains("Success")){
            JSONObject jsonObject = JSONObject.parseObject(response);
            if("1".equals(jsonObject.getString("Success"))) {
                return jsonObject.getJSONObject("Data").getString("status");
            }
        }

        return "N";
    }

    /**
     * 鍏ョ珯璇锋眰锛氳浆鍙慉GV->鍏ョ珯璇锋眰->缁橫ES
     *
     * @param apply
     * @return
     */
    public int applyInStation(TransParent apply) {
        String path = ("LL").equals(apply.getProductLineId()) || ("LJ").equals(apply.getProductLineId()) ? "AGVTransportPalletNotice" : "Aprs/AGVTransportPalletNotice";
        String url = MES_URL + path;
        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
        if (!StringUtils.isEmpty(response) && response.contains("Success")){
            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
            if("1".equals(mesReturn.getSuccess())) {
                return 1;
            }
        }

        return 0;
    }

    /**
     * 鍏ョ珯鍏佽锛氳浆鍙慚ES->鍏佽鍏ョ珯->缁橝GV
     *
     * @param allow
     * @return
     */
    public MesReturn allowInStation(TransInOutStationAllow allow) {

        MesReturn mesReturn = new MesReturn();
        mesReturn.setSuccess("1");

        if ("Y".equals(allow.getStatus())) {
            RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
            rcsTaskContinue.setRobotTaskCode(allow.getTaskno());
            rcsTaskContinue.setTriggerType("TASK");
            rcsTaskContinue.setTriggerCode(allow.getTaskno());
//            rcsTaskContinue.setTriggerType("ROBOT");
//            rcsTaskContinue.setTriggerCode(allow.getAgvCode());

            int success = rcsService.continueTask(rcsTaskContinue, 1);
            mesReturn.setSuccess(success == 1 ? "1" : "2");
            mesReturn.setMessage(success == 1 ? "" : "杞彂缁橰CS澶辫触");
        }

        return mesReturn;
    }

    /**
     * 鍒扮珯瀹屾垚锛氳浆鍙慉GV->鍒扮珯瀹屾垚->缁橫ES
     *
     * @param arrivalStation
     * @return
     */
    public int arriveOnStation(TransArrivalStation arrivalStation) {

        if ("01".equals(arrivalStation.getDaotype())) {
            arrivalStation.setItemno(null);
            arrivalStation.setItemBarcode(new ArrayList<>());
            arrivalStation.setOrderNo(null);
        }

        String path = ("LL").equals(arrivalStation.getProductLineId()) || ("LJ").equals(arrivalStation.getProductLineId()) ? "AGVArrivalCompleted" : "Aprs/AGVArrivalCompleted";
        String url = MES_URL + path;
        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(arrivalStation));
        if (!StringUtils.isEmpty(response) && response.contains("Success")){
            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
            if("1".equals(mesReturn.getSuccess())) {
                return 1;
            }
        }

        return 0;
    }

    /**
     * 绂荤珯璇锋眰锛氳浆鍙慉GV->绂荤珯璇锋眰->缁橫ES
     *
     * @param apply
     * @return
     */
    public int applyOutStation(TransParent apply) {

        String url = MES_URL + "api/apply/outStation";
        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
        if (!StringUtils.isEmpty(response) && response.contains("Success")){
            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
            if("1".equals(mesReturn.getSuccess())) {
                return 1;
            }
        }

        return 0;
    }

    /**
     * 绂荤珯鍏佽锛氳浆鍙慚ES->鍏佽绂荤珯->缁橝GV
     *
     * @param allow
     * @return
     */
    public MesReturn allowOutStation(TransInOutStationAllow allow) {

        MesReturn mesReturn = new MesReturn();
        mesReturn.setSuccess("1");

        if ("Y".equals(allow.getStatus())) {
            RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
            rcsTaskContinue.setRobotTaskCode(allow.getTaskno());
            rcsTaskContinue.setTriggerType("TASK");
            rcsTaskContinue.setTriggerCode(allow.getTaskno());

            int success = rcsService.continueTask(rcsTaskContinue, checkRcsFactory(allow.getAgvCode()));
            mesReturn.setSuccess(success == 1 ? "1" : "2");
            mesReturn.setMessage(success == 1 ? "" : "杞彂缁橰CS澶辫触");
        }

        return mesReturn;
    }

    /**
     * 绂荤珯瀹屾垚锛氳浆鍙慉GV->绂荤珯瀹屾垚->缁橫ES
     *
     * @param apply
     * @return
     */
    public int outStation(TransParent apply) {

        String path = ("LL").equals(apply.getProductLineId()) || ("LJ").equals(apply.getProductLineId()) ? "AGVDepartureCompleted" : "Aprs/AGVDepartureCompleted";
        String url = MES_URL + path;
        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
        if (!StringUtils.isEmpty(response) && response.contains("Success")){
            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
            if("1".equals(mesReturn.getSuccess())) {
                return 1;
            }
        }

        return 0;
    }

    @Override
    public MesReturn queryInventory(String itemno,String orderNo) {
        MesReturn mesReturn = new MesReturn();
        mesReturn.setSuccess("1");
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", itemno).eq("order_no",orderNo));

        int count = 0;
        for(LocDetl locDetl:locDetls) {
            count += locDetl.getAnfme();
        }
        mesReturn.setMessage(String.valueOf(count));
        return mesReturn;
    }

    // endregion

    /**
     * 鏌ヨRcs鍦板潃
     *
     * @param agvNo
     * @return 1 娴峰悍锛�2 鍗庢檽
     */
    private int checkRcsFactory(String agvNo) {

        AgvInfo agvInfo = agvInfoMapper.selectById(agvNo);
        return agvInfo.getAgvFactory();
    }

}
\ No newline at end of file

--
Gitblit v1.9.1