From 276d837c0bb808e6d93ac7c7ba6abe654c75552e Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期一, 09 二月 2026 08:45:45 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java |  265 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 261 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index c68de35..120aa8c 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,18 +1,36 @@
 package com.zy.asrs.service.impl;
 
-import com.core.common.R;
-import com.zy.asrs.entity.param.ArmPrecomputeParam;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.WrkDetl;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.entity.param.TaskCreateParam;
+import com.zy.asrs.entity.param.TaskStatusFeedbackParam;
+import com.zy.asrs.service.ApiLogService;
 import com.zy.asrs.service.OpenService;
+import com.zy.asrs.service.WrkDetlService;
 import com.zy.asrs.service.WrkMastService;
+import com.zy.common.service.CommonService;
+import com.zy.common.utils.HttpHandler;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.Task;
+import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
+import com.zy.core.thread.SiemensDevpThread;
+import com.zy.core.model.DevpSlave;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
+import java.math.BigDecimal;
 import java.util.Date;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Created by vincent on 2022/4/9
@@ -21,5 +39,244 @@
 @Service
 public class OpenServiceImpl implements OpenService {
 
+    @Value("${wms.url}")
+    private String wmsUrl;
 
+    @Autowired
+    private ApiLogService apiLogService;
+    
+    @Autowired
+    private CommonService commonService;
+    
+    @Autowired
+    private WrkMastService wrkMastService;
+    
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    
+    @Autowired
+    private SlaveProperties slaveProperties;
+
+
+    @Override
+    public boolean reportTaskStatus(String taskNo, Integer status, Integer ioType, String barcode) {
+        try {
+            TaskStatusFeedbackParam param = new TaskStatusFeedbackParam();
+            param.setTaskNo(taskNo);
+            param.setStatus(status);
+            param.setIoType(ioType);
+            param.setBarcode(barcode);
+            param.setReportTime(new Date());
+
+            Map<String, Object> headers = new HashMap<>();
+            headers.put("appkey", "ea1f0459efc02a79f046f982767939ae");
+
+            String response = new HttpHandler.Builder()
+                    .setUri(wmsUrl)
+                    .setPath("/taskStatusFeedback")
+                    .setJson(JSON.toJSONString(param))
+                    .setHeaders(headers)
+                    .build()
+                    .doPost();
+
+            boolean success = false;
+            log.info("浠诲姟鐘舵�佸弽棣堜笂鎶ョ粨鏋滐細{}", response);
+            if (response != null) {
+                try {
+                    JSONObject jsonObject = JSON.parseObject(response);
+                    // 鍋囪杩斿洖code涓�200琛ㄧず鎴愬姛
+                    if (jsonObject != null && jsonObject.containsKey("code") && jsonObject.getInteger("code") == 200) {
+                        success = true;
+                    }
+                } catch (Exception e) {
+                    log.warn("瑙f瀽鍝嶅簲澶辫触", e);
+                }
+            }
+
+            // 璁板綍鏃ュ織
+            try {
+                apiLogService.save("浠诲姟鐘舵�佸弽棣堜笂鎶�",
+                        "/taskStatusFeedback",
+                        "ea1f0459efc02a79f046f982767939ae",
+                        wmsUrl,
+                        JSON.toJSONString(param),
+                        response,
+                        success);
+            } catch (Exception e) {
+                log.error("淇濆瓨API鏃ュ織寮傚父", e);
+            }
+
+            return success;
+        } catch (Exception e) {
+            log.error("浠诲姟鐘舵�佸弽棣堜笂鎶ュ紓甯�", e);
+        }
+        return false;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean taskCreate(TaskCreateParam param) {
+        try {
+            Integer ioType = 0;
+            boolean Inbound = true;
+            //1锛氬嚭搴擄紝2锛氬叆搴� 3锛氱Щ搴�
+            //11锛氱┖鏉垮嚭搴擄紝12锛氱┖鏉垮叆搴�
+            //21锛氭嫞閫夊嚭搴� 22锛氭嫞閫夊叆搴�
+            //31锛氱洏鐐瑰嚭搴� 32锛氱洏鐐瑰叆搴�
+            switch (param.getIoType()){
+                case 1:  Inbound = false;break;
+                case 2 : Inbound = true;break;
+                case 3:  Inbound = false;break;
+                case 11: Inbound = false;ioType = 110;break;
+                case 12: Inbound = true;break;
+                case 21: Inbound = false;ioType = 103;break;
+                case 22: Inbound = true;break;
+                case 31: Inbound = false;ioType = 107;break;
+                case 32: Inbound = true;break;
+            }
+            // 2. 淇濆瓨WrkMast
+            WrkMast wrkMast = new WrkMast();
+
+            if(param.getIoType() == 2 || param.getIoType() == 12){
+                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setIoType(param.getIoType() != 2?10:1);
+                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
+                wrkMast.setBarcode(param.getBarcode());
+                wrkMast.setMemo(param.getMemo());
+                wrkMast.setSourceStaNo(Integer.valueOf(param.getStartPoint()));
+                wrkMast.setStaNo(Integer.valueOf(param.getTargetPoint()));
+                wrkMast.setLocNo(param.getTargetLocNo());
+                wrkMast.setSourceLocNo(param.getSourceLocNo());
+            }else if(param.getIoType() == 22 || param.getIoType() == 32){
+                wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",param.getBarcode()));
+                wrkMast.setWrkSts(param.getIoType() != 32 ? 53L: 57L);
+                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
+                wrkMast.setBarcode(param.getBarcode());
+                wrkMast.setMemo(param.getMemo());
+                wrkMast.setSourceStaNo(Integer.valueOf(param.getStartPoint()));
+                wrkMast.setStaNo(Integer.valueOf(param.getTargetPoint()));
+                wrkMast.setLocNo(param.getTargetLocNo());
+                wrkMast.setSourceLocNo(param.getSourceLocNo());
+            }else if(param.getIoType() == 3){
+                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setIoType(11);
+                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 12.0);
+                wrkMast.setBarcode(param.getBarcode());
+                wrkMast.setMemo(param.getMemo());
+                wrkMast.setSourceStaNo(Integer.valueOf(param.getStartPoint()));
+                wrkMast.setStaNo(Integer.valueOf(param.getTargetPoint()));
+                wrkMast.setLocNo(param.getTargetLocNo());
+                wrkMast.setSourceLocNo(param.getSourceLocNo());
+            }else{
+                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setIoType(ioType);
+                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
+                wrkMast.setBarcode(param.getBarcode());
+                wrkMast.setMemo(param.getMemo());
+                wrkMast.setSourceStaNo(Integer.valueOf(param.getStartPoint()));
+                wrkMast.setStaNo(Integer.valueOf(param.getTargetPoint()));
+                wrkMast.setLocNo(param.getTargetLocNo());
+                wrkMast.setSourceLocNo(param.getSourceLocNo());
+            }
+
+            if(Inbound){
+                wrkMast.setWrkSts(2L);
+            }else{
+                wrkMast.setWrkSts(11L);
+            }
+            wrkMast.setAppeTime(new Date());
+            wrkMast.setWrkDate(new Date());
+            
+            wrkMastService.insert(wrkMast);
+
+            // 3. 淇濆瓨WrkDetl
+            if (param.getDetlList() != null && !param.getDetlList().isEmpty()) {
+                for (TaskCreateParam.Detl detl : param.getDetlList()) {
+                    WrkDetl wrkDetl = new WrkDetl();
+                    wrkDetl.setWrkNo(wrkMast.getWrkNo());
+                    wrkDetl.setZpallet(detl.getBarcode());
+                    wrkDetl.setMatnr(detl.getMatnr());
+                    wrkDetl.setBatch(detl.getBatch());
+                    if (detl.getAnfme() != null) {
+                        wrkDetl.setAnfme(detl.getAnfme().doubleValue());
+                    }
+                    wrkDetlService.insert(wrkDetl);
+                }
+            }
+            
+            // 4. 涓嬪彂缁橮LC
+            if(Inbound){
+                writeToPlc(wrkMast);
+            }
+
+            // 璁板綍鏃ュ織
+            try {
+                apiLogService.save("浠诲姟涓嬪彂",
+                        "/taskCreate",
+                        "ea1f0459efc02a79f046f982767939ae",
+                        "LOCAL",
+                        JSON.toJSONString(param),
+                        "SUCCESS",
+                        true);
+            } catch (Exception e) {
+                log.error("淇濆瓨API鏃ュ織寮傚父", e);
+            }
+            
+            return true;
+        } catch (Exception e) {
+            log.error("浠诲姟涓嬪彂寮傚父", e);
+             try {
+                apiLogService.save("浠诲姟涓嬪彂",
+                        "/taskCreate",
+                        "ea1f0459efc02a79f046f982767939ae",
+                        "LOCAL",
+                        JSON.toJSONString(param),
+                        "FAIL: " + e.getMessage(),
+                        false);
+            } catch (Exception ex) {
+                // ignore
+            }
+            throw new RuntimeException(e); // 瑙﹀彂浜嬪姟鍥炴粴
+        }
+    }
+    
+    private void writeToPlc(WrkMast wrkMast) {
+        if (wrkMast.getSourceStaNo() == null) {
+            log.warn("浠诲姟涓嬪彂缂哄皯婧愮珯鐐�: wrkNo={}", wrkMast.getWrkNo());
+            return;
+        }
+        
+        Integer sourceStaNo = wrkMast.getSourceStaNo();
+        
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+             SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+             if (devpThread == null) continue;
+             
+             // 妫�鏌ヨPLC鏄惁绠$悊璇ョ珯鐐�
+             if (devpThread.getStation().containsKey(sourceStaNo.shortValue())) {
+                 StaProtocol staProtocol = devpThread.getStation().get(sourceStaNo.shortValue());
+                 if (staProtocol != null && staProtocol.getWorkNo() == 9998) {
+
+                     staProtocol.setWorkNo(wrkMast.getWrkNo());
+                     if (wrkMast.getStaNo() != null) {
+                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                     }
+                     
+                     // 涓嬪彂PLC鎸囦护
+                     devpThread.setPakMk(staProtocol.getSiteId(), false, 283);
+                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                     
+                     if (result) {
+                         log.info("浠诲姟涓嬪彂鎴愬姛锛屽凡鍐欏叆PLC銆俉rkNo: {}, Source: {}, Target: {}", 
+                                 wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), wrkMast.getStaNo());
+                     } else {
+                         log.error("浠诲姟涓嬪彂澶辫触锛屽啓鍏LC闃熷垪澶辫触銆俉rkNo: {}", wrkMast.getWrkNo());
+                     }
+                     return;
+                 }
+             }
+        }
+        log.warn("鏈壘鍒板搴旂殑PLC绔欑偣鎴栫嚎绋�: {}", sourceStaNo);
+    }
 }

--
Gitblit v1.9.1