From bc48a855d98e360042a7e2fff5594a91a82578c6 Mon Sep 17 00:00:00 2001
From: taisheng <taisheng@qq.com>
Date: 星期四, 24 七月 2025 16:16:33 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 840 ++++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 596 insertions(+), 244 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index f1874dc..618adbf 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,297 +1,649 @@
package com.zy.asrs.service.impl;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.baomidou.mybatisplus.mapper.Wrapper;
-import com.core.common.Cools;
import com.core.exception.CoolException;
-import com.zy.asrs.entity.LocMast;
-import com.zy.asrs.entity.StaDesc;
-import com.zy.asrs.entity.WaitPakin;
-import com.zy.asrs.entity.WrkMast;
-import com.zy.asrs.mapper.WaitPakinMapper;
-import com.zy.asrs.mapper.WrkMastMapper;
-import com.zy.asrs.service.LocMastService;
-import com.zy.asrs.service.StaDescService;
-import com.zy.asrs.service.WrkDetlService;
-import com.zy.common.model.StartupDto;
-import com.zy.core.Slave;
+import com.zy.asrs.domain.enums.TaskStatusType;
+import com.zy.asrs.domain.enums.WorkNoType;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.GenerateAgvTaskParam;
+import com.zy.asrs.mapper.*;
+import com.zy.asrs.service.*;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.service.CommonService;
+import com.zy.common.utils.HttpHandler;
+import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
-import com.zy.core.enums.CrnStatusType;
-import com.zy.core.enums.SlaveType;
-import com.zy.core.model.DevpSlave;
+import com.zy.core.enums.*;
+import com.zy.core.model.CrnSlave;
import com.zy.core.model.Task;
-import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
-import com.zy.core.thread.BarcodeThread;
-import com.zy.core.thread.CrnThread;
-import com.zy.core.thread.DevpThread;
+import com.zy.core.thread.SiemensDevpThread;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
+import java.io.IOException;
+import java.util.*;
/**
- * Created by vincent on 2020/8/6
+ * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
*/
@Slf4j
@Service("mainService")
+@Transactional
public class MainServiceImpl {
- @Autowired
- private CommonService commonService;
+ public static final long COMMAND_TIMEOUT = 5 * 1000;
+
@Autowired
private SlaveProperties slaveProperties;
@Autowired
- private WrkMastMapper wrkMastMapper;
- @Autowired
- private WrkDetlService wrkDetlService;
- @Autowired
- private WaitPakinMapper waitPakinMapper;
- @Autowired
private LocMastService locMastService;
@Autowired
- private StaDescService staDescService;
+ private BasDevpService basDevpService;
@Autowired
- private JdbcTemplate jdbcTemplate;
+ private TaskWrkMapper taskWrkMapper;
+ @Autowired
+ private TaskWrkService taskWrkService;
+ @Autowired
+ private ConfigService configService;
+ @Autowired
+ private StaDescMapper staDescMapper;
+ @Autowired
+ private CommandInfoService commandInfoService;
+ @Autowired
+ private ApiLogService apiLogService;
+ @Autowired
+ private OpenService openService;
+ @Autowired
+ private CommonService commonService;
+ @Value("${wcs.urlWcs}")
+ private String wcsUrl;
+ @Value("${wcs.inboundTaskApplyPathWcs}")
+ private String wcsInboundTaskApplyPath;
- /**
- * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
- */
- @Transactional
- public void generateStoreWrkFile() {
- // 鏍规嵁杈撻�佺嚎plc閬嶅巻
- for (DevpSlave devp : slaveProperties.getDevp()) {
- // 閬嶅巻鍏ュ簱鍙�
- for (DevpSlave.Sta inSta : devp.getInSta()) {
- // 鑾峰彇鏉$爜
- BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
- String barcode = barcodeThread.getBarcode();
- // 鑾峰彇鍏ュ簱绔欎俊鎭�
- DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
- StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
- // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
- if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInreq1()
- && !staProtocol.isEmptyMk() && staProtocol.isInreq1() && staProtocol.getWorkNo() ==0
- && staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
- // 鍒ゆ柇閲嶅宸ヤ綔妗�
- WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
- if (wrkMast != null) {
- log.warn("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负1鐨勬暟鎹�,宸ヤ綔鍙�-{}", wrkMast.getWrkNo());
- continue;
- }
- // 鑾峰彇鍏ュ簱閫氱煡妗�
- List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("barcode", barcode));
- // 宸ヤ綔鍙�
- int workNo = commonService.getWorkNo(0);
- // 妫�绱㈠簱浣�
- List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
- StartupDto startupDto = commonService.getLocNo(1, 1, inSta.getStaNo(), matNos);
- String locNo = startupDto.getLocNo();
- if (!waitPakins.isEmpty()) {
- // 鎻掑叆宸ヤ綔鏄庣粏妗�
- wrkDetlService.createWorkDetail(workNo, waitPakins, barcode);
- } else {
- log.warn("鏃犳鍏ュ簱鏉$爜鏁版嵁---{}", barcode);
- continue;
- }
-
- // 鎻掑叆宸ヤ綔涓绘。
- wrkMast = new WrkMast();
- wrkMast.setWrkNo(workNo);
- wrkMast.setIoTime(new Date());
- wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
- wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
- wrkMast.setIoPri(10D); // 浼樺厛绾э細10
- wrkMast.setCrnNo(startupDto.getCrnNo());
- wrkMast.setSourceStaNo(startupDto.getSourceStaNo());
- wrkMast.setStaNo(startupDto.getStaNo());
- wrkMast.setLocNo(startupDto.getLocNo());
- wrkMast.setBarcode(barcode); // 鎵樼洏鐮�
- wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
- wrkMast.setPicking("N"); // 鎷f枡
- wrkMast.setExitMk("N"); // 閫�鍑�
- wrkMast.setEmptyMk("N"); // 绌烘澘
- wrkMast.setLinkMis("N");
-// wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
- // 鎿嶄綔浜哄憳鏁版嵁
- wrkMast.setAppeTime(new Date());
- wrkMast.setModiTime(new Date());
- Integer insert = wrkMastMapper.insert(wrkMast);
- if (insert == 0) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
- }
- // 鏇存柊鐩爣搴撲綅鐘舵��
- LocMast locMast = locMastService.selectById(startupDto.getLocNo());
- locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
- locMast.setModiTime(new Date());
- if (!locMastService.updateById(locMast)){
- throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
- }
-
- // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
- barcodeThread.setBarcode("");
- staProtocol.setWorkNo(workNo);
- staProtocol.setStaNo(startupDto.getStaNo());
- staProtocol.setPakMk(false);
- staProtocol.setInreq1(false);
- boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task<>(4, staProtocol));
- if (!result) {
- throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
- }
-
- }
-
-
- }
+ public synchronized void demo() {
+ boolean demoEnable = false;
+ Config demoEnableConfig = configService.selectByCode("demoEnable");
+ if(demoEnableConfig != null) {
+ demoEnable = Boolean.parseBoolean(demoEnableConfig.getValue());
}
+ if (!demoEnable) {
+ return;
+ }
+
+ //婕旂ず妯″紡-AGV鍑哄簱
+ demoAgvOut();
+ //婕旂ず妯″紡-AGV鍏ュ簱
+ demoAgvIn();
+ //婕旂ず妯″紡-鍥涘悜搴撳嚭搴�
+ demoShuttleOut();
+ //婕旂ず妯″紡-鍥涘悜搴撳叆搴�
+ demoShuttleIn();
}
-
- /**
- * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
- */
- public void stnToCrnStnPick(){
- for (DevpSlave devp : slaveProperties.getDevp()) {
- // 閬嶅巻鎷f枡鍏ュ簱鍙�
- for (DevpSlave.Sta pickSta : devp.getPickSta()) {
- // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
- DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
- StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
-
- if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInreq1()
- && staProtocol.getWorkNo() > 0 && staProtocol.isPakMk()){
- WrkMast wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo());
- if (wrkMast == null) {
- // 鏃犳嫞鏂欐暟鎹�
- continue;
- }
- if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 1070)
- || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) {
- continue;
- }
- // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
- if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
- throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
- }
- // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
- if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
- throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
- }
- // 鑾峰彇鐩爣绔�
- Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
- .eq("type_no", wrkMast.getIoType() - 50)
- .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
- .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
- StaDesc staDesc = staDescService.selectOne(wrapper);
- if (Cools.isEmpty(staDesc)) {
- throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
- }
- // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
- Integer staNo = staDesc.getCrnStn();
- // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
- wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
- wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
- wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
- wrkMast.setStaNo(staNo); // 鐩爣绔�
- wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
- wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
- wrkMast.setModiTime(new Date());
- if (wrkMastMapper.updateById(wrkMast) == 0) {
- throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
- }
- // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
- LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
- locMast.setLocSts("Q");
- locMast.setModiTime(new Date());
- if (!locMastService.updateById(locMast)) {
- throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
- }
-
- // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
- staProtocol.setWorkNo(wrkMast.getWrkNo());
- staProtocol.setStaNo(wrkMast.getStaNo());
- staProtocol.setPakMk(false);
- staProtocol.setInreq1(false);
- boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task<>(4, staProtocol));
- if (!result) {
- throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
- }
-
- }
-
- }
-
+ //婕旂ず妯″紡-AGV鍑哄簱
+ private synchronized void demoAgvOut() {
+ LocMast locMast = locMastService.selectByLocNo("0900601");
+ if(locMast == null) {
+ return;
}
+
+ if (!locMast.getLocSts().equals("O")) {
+ return;
+ }
+
+ List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+ .eq("mk", "agv")
+ .eq("loc_sts", "F")
+ .notIn("loc_no", "1100601")
+ );
+
+ if (locMasts.isEmpty()) {
+ return;
+ }
+
+ LocMast originLocMast = locMasts.get(0);
+
+ //鐢熸垚AGV鍑哄簱浠诲姟
+ GenerateAgvTaskParam param = new GenerateAgvTaskParam();
+ param.setOriginPoint(originLocMast.getLocNo());
+ param.setTargetPoint(locMast.getLocNo());
+ openService.generateAgvTask(param);
+ }
+
+ //婕旂ず妯″紡-AGV鍏ュ簱
+ private synchronized void demoAgvIn() {
+ LocMast locMast = locMastService.selectByLocNo("1100601");
+ if(locMast == null) {
+ return;
+ }
+
+ if (!locMast.getLocSts().equals("F")) {
+ return;
+ }
+
+ List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+ .eq("mk", "agv")
+ .eq("loc_sts", "O")
+ .notIn("loc_no", "0900601")
+ );
+
+ if (locMasts.isEmpty()) {
+ return;
+ }
+
+ LocMast targetLocMast = locMasts.get(0);
+
+ //鐢熸垚AGV鍑哄簱浠诲姟
+ GenerateAgvTaskParam param = new GenerateAgvTaskParam();
+ param.setOriginPoint(locMast.getLocNo());
+ param.setTargetPoint(targetLocMast.getLocNo());
+ openService.generateAgvTask(param);
+ }
+
+ //婕旂ず妯″紡-鍥涘悜搴撳嚭搴�
+ private synchronized void demoShuttleOut() {
+ LocMast locMast = locMastService.selectByLocNo("1100601");
+ if(locMast == null) {
+ return;
+ }
+
+ if (!locMast.getLocSts().equals("O")) {
+ return;
+ }
+
+ ArrayList<Integer> disableLevList = new ArrayList<>();
+ disableLevList.add(1);
+
+ //query in task
+ List<TaskWrk> taskWrks = taskWrkService.selectList(new EntityWrapper<TaskWrk>()
+ .eq("io_type", 1));
+ for (TaskWrk taskWrk : taskWrks) {
+ int lev = Utils.getLev(taskWrk.getTargetPoint());
+ if(!disableLevList.contains(lev)) {
+ disableLevList.add(lev);
+ }
+ }
+
+ List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+ .notIn("lev1", disableLevList)
+ .eq("loc_sts", "F")
+ );
+
+ if(locMasts.isEmpty()) {
+ return;
+ }
+
+ LocMast locMast1 = locMasts.get(0);
+
+ Date now = new Date();
+ TaskWrk taskWrk = new TaskWrk();
+ int workNo1 = commonService.getWorkNo(WorkNoType.PAKOUT.type);//鑾峰彇鍏ュ簱宸ヤ綔鍙�
+ taskWrk.setTaskNo(String.valueOf(workNo1));//浠诲姟鍙�
+ taskWrk.setWrkNo(workNo1);
+ taskWrk.setStatus(TaskStatusType.RECEIVE.id);//浠诲姟鐘舵�侊細鎺ユ敹
+ taskWrk.setWrkSts(11);
+ taskWrk.setCreateTime(now);
+ taskWrk.setIoType(2);//鍑哄簱
+ taskWrk.setIoPri(100);//浼樺厛绾�
+ taskWrk.setStartPoint(locMast1.getLocNo());
+ taskWrk.setTargetPoint("101");//缁堢偣
+ taskWrk.setBarcode(locMast1.getBarcode());
+ boolean result = taskWrkService.insert(taskWrk);
+
+ locMast1.setLocSts("R");
+ locMast1.setModiTime(now);
+ locMastService.updateById(locMast1);
+
+ locMast.setLocSts("S");
+ locMast.setModiTime(now);
+ locMastService.updateById(locMast);
+ }
+
+ //婕旂ず妯″紡-鍥涘悜搴撳叆搴�
+ private synchronized void demoShuttleIn() {
+ LocMast locMast = locMastService.selectByLocNo("0900601");
+ if(locMast == null) {
+ return;
+ }
+
+ if (!locMast.getLocSts().equals("F")) {
+ return;
+ }
+
+ ArrayList<Integer> disableLevList = new ArrayList<>();
+ disableLevList.add(1);
+
+ //query out task
+ List<TaskWrk> taskWrks = taskWrkService.selectList(new EntityWrapper<TaskWrk>()
+ .eq("io_type", 2));
+ for (TaskWrk taskWrk : taskWrks) {
+ int lev = Utils.getLev(taskWrk.getTargetPoint());
+ if(!disableLevList.contains(lev)) {
+ disableLevList.add(lev);
+ }
+ }
+
+ List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+ .notIn("lev1", disableLevList)
+ .eq("loc_sts", "O")
+ );
+
+ if(locMasts.isEmpty()) {
+ return;
+ }
+
+ LocMast locMast1 = locMasts.get(0);
+
+ Date now = new Date();
+ TaskWrk taskWrk = new TaskWrk();
+ int workNo1 = commonService.getWorkNo(WorkNoType.PAKIN.type);//鑾峰彇鍏ュ簱宸ヤ綔鍙�
+ taskWrk.setTaskNo(String.valueOf(workNo1));//浠诲姟鍙�
+ taskWrk.setWrkNo(workNo1);
+ taskWrk.setStatus(TaskStatusType.RECEIVE.id);//浠诲姟鐘舵�侊細鎺ユ敹
+ taskWrk.setWrkSts(1);
+ taskWrk.setCreateTime(now);
+ taskWrk.setIoType(1);//鍏ュ簱
+ taskWrk.setIoPri(100);//浼樺厛绾�
+ taskWrk.setOriginStartPoint("1");
+ taskWrk.setOriginTargetPoint(String.valueOf(Utils.getLev(locMast1.getLocNo())));
+ taskWrk.setTargetPoint(locMast1.getLocNo());//缁堢偣
+ taskWrk.setBarcode(locMast.getBarcode());
+ boolean result = taskWrkService.insert(taskWrk);
+
+ locMast1.setLocSts("S");
+ locMast1.setModiTime(now);
+ locMastService.updateById(locMast1);
+
+ locMast.setLocSts("R");
+ locMast.setModiTime(now);
+ locMastService.updateById(locMast);
}
/**
* 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯
*/
- public void crnStnToOutStn() {
- for (DevpSlave devp : slaveProperties.getDevp()) {
- // 閬嶅巻鎷f枡鍏ュ簱鍙�
- for (DevpSlave.Sta outSta : devp.getOutSta()) {
- // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
- DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
- StaProtocol staProtocol = devpThread.getStation().get(outSta.getStaNo());
- if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
- // 鏌ヨ宸ヤ綔妗�
- WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(staProtocol.getSiteId());
- if (wrkMast == null) {
- continue;
- }
- // 鍒ゆ柇宸ヤ綔妗f潯浠�
- if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
- continue;
- }
- // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
- CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
- CrnProtocol crnProtocol = crnThread.getCrnProtocol();
- if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
- // 绉诲姩涓�
- continue;
- }
- // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触 todo:luxiaotao
- if (crnProtocol.mode == 3 && crnProtocol.getTaskNo() == wrkMast.getWrkNo()
- && crnProtocol.statusType == CrnStatusType.IDLE
- && crnProtocol.forkPos==0) {
- wrkMast.setWrkSts(14L);
- wrkMast.setCrnEndTime(new Date());
- if (wrkMastMapper.updateById(wrkMast) == 0) {
- throw new CoolException("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛屽伐浣滃彿"+wrkMast.getWrkNo());
+ public synchronized void crnStnToOutStn() {
+ for (CrnSlave crnSlave : slaveProperties.getCrn()) {
+ // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
+ for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
+ List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnSlave.getId()).eq("crn_stn", crnStn.getStaNo()));
+ for (StaDesc staDesc : staDescs) {
+ try {
+ // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+ StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
}
- }
+ if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
+ // 鏌ヨ宸ヤ綔妗�
+ TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnSlave.getId(), staDesc.getStnNo().toString());
+ if (taskWrk == null) {
+ continue;
+ }
+ log.info("涓嬪彂杈撻�佺嚎浠诲姟锛歵askWrk:" + JSON.toJSONString(taskWrk));
+// R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false);
+ staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
+ staProtocol.setStaNo(staDesc.getStnNo().shortValue());
+ boolean offer = false;
+ try {
+ offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+ } catch (Exception e) {
+ log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛氬紓甯�:" + e);
+ log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛氬紓甯�:offer:" + offer);
+ }
+// JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(r));
+ if (offer) {
+ log.info("涓嬪彂杈撻�佺嚎浠诲姟鎴愬姛锛歵askWrk:" + JSON.toJSONString(taskWrk));
+ taskWrk.setStatus(5);
+ taskWrk.setWrkSts(14);
+ taskWrkService.updateById(taskWrk);
- // 鏇存柊鍫嗗灈鏈轰俊鎭� 涓� 涓嬪彂plc鍛戒护 todo:luxiaotao
- crnProtocol.setStatus(CrnStatusType.IDLE);
- crnProtocol.setTaskNo((short)0);
- boolean result = MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task<>(4, crnProtocol));
- if (!result) {
- throw new CoolException("鏇存柊鍫嗗灈鏈轰俊鎭け璐�");
+ } else {
+ log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛歵askWrk:" + JSON.toJSONString(taskWrk));
+// log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛氬紓甯镐俊鎭�:"+JSON.toJSONString(r));
+ }
+ }
+ } catch (Exception e) {
+ log.error("鍑哄簱鍒板嚭搴撶珯寮傚父:寮傚父淇℃伅锛�" + e);
}
+ }
+ }
+ }
+ }
+
+ /**
+ * 鍏ュ嚭搴� ===>> 璋冪敤RCS杩涜鍏ュ嚭搴�
+ */
+ public synchronized void crnIoExecute() throws IOException {
+ for (CrnSlave crn : slaveProperties.getCrn()) {
+ this.crnStnToLoc(crn); // 鍏ュ簱
+ this.locToCrnStn(crn); // 鍑哄簱
+ // 搴撲綅绉昏浆
+// this.locToLoc(crn, crnProtocol);
+ }
+ }
+
+ /**
+ * 鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鍒板簱浣�
+ */
+ public synchronized void crnStnToLoc(CrnSlave slave) throws IOException {
+ for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
+ List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", slave.getId()).eq("crn_stn", crnStn.getStaNo()));
+ for (StaDesc staDesc : staDescs) {
+ boolean flag = false;
+ // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+ StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ // 鏌ヨ绔欑偣璇︾粏淇℃伅
+ BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
+ if (staDetl == null) {
+ log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+ continue;
+ }
+ if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
+ && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+ flag = true;
+ }
+ if (!flag) {
+ continue;
+ }
+
+ // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
+ TaskWrk taskWrk = taskWrkMapper.selectPakIn(slave.getId(), staProtocol.getWorkNo().intValue(), staDesc.getStnNo().toString());
+ if (null == taskWrk) {
+ continue;
+ }
+
+ String mbz=taskWrk.getTargetPoint().substring(5);
+
+ HashMap<String, Object> hashMap = new HashMap<>();
+ hashMap.put("taskNo",taskWrk.getTaskNo());//wms浠诲姟鍙�
+ hashMap.put("sourceStaNo",staDetl.getDevNo());//婧愮珯鐐�
+ hashMap.put("staNo",Integer.parseInt(mbz)+"");//鐩爣绔�
+ hashMap.put("locNo",taskWrk.getTargetPoint());//鐩爣搴撲綅
+ String response = "";
+ Boolean bool = false;
+ try {
+ //寮�濮嬩笂鎶�,鍑哄簱浠诲姟寮�濮嬫椂锛學CS鍥炶皟WMS
+ response = new HttpHandler.Builder()
+ .setUri(wcsUrl)
+ .setPath(wcsInboundTaskApplyPath)
+ .setJson(JSON.toJSONString(hashMap))
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+
+ if(jsonObject.get("code").equals(200)){
+ bool = true;
+ taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//娲惧彂鐘舵��
+ taskWrk.setAssignTime(new Date());//娲惧彂鏃堕棿
+ taskWrk.setWrkSts(3);//宸ヤ綔鐘舵�� 3.鎴愬姛涓嬪彂鍏ュ簱浠诲姟缁橰CS
+ taskWrk.setCrnNo(staDesc.getCrnNo());//鍫嗗灈鏈哄彿
+ taskWrk.setModiTime(new Date());
+ taskWrk.setModiUser(9988L);
+ }
+ } catch (Exception e) {
+ }finally {
+ apiLogService.save("wcs娲惧彂鍏ュ簱浠诲姟缁橰CS"
+ , wcsUrl + wcsInboundTaskApplyPath
+ , null
+ , "127.0.0.1"
+ , JSON.toJSONString(hashMap)
+ , response
+ , bool
+ );
}
}
}
}
/**
- * 鎵ц瀵瑰伐浣滄。鐨勫叆搴撳畬鎴�
+ * 鍑哄簱 ===>> 搴撲綅鍒板爢鍨涙満绔�
+ * 2022-06-09 TQS淇敼锛屾煡璇㈠伐浣滄。LIST锛岄亶鍘嗕笅鍙戯紝闃叉绗竴涓换鍔″牭濉炲嚭搴�
*/
- public void storeFinished() {
- for (Slave crn : slaveProperties.getCrn()) {
- // 鑾峰彇鍫嗗灈鏈轰俊鎭�
- CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
- CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+ public synchronized void locToCrnStn(CrnSlave slave) {
+ List<TaskWrk> taskWrksInitial = taskWrkMapper.selectPakOut(slave.getId(), null);
+ if (taskWrksInitial.size() == 0) {
+ return;
+ }
+ for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
+ List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", slave.getId()).eq("crn_stn", crnStn.getStaNo()));
+ for (StaDesc staDesc : staDescs) {
+ // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
+ List<TaskWrk> taskWrks = taskWrkMapper.selectPakOut(slave.getId(), staDesc.getStnNo().toString());
+ for (TaskWrk taskWrk : taskWrks) {
+ if (taskWrk == null) {
+ continue;
+ }
+ // 宸ヤ綔妗g姸鎬佸垽鏂�
+ if (taskWrk.getIoType() != 2 || taskWrk.getTargetPoint() == null || taskWrk.getStartPoint() == null) {
+ log.error("鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", taskWrk.getWrkNo(), taskWrk.getStartPoint(), taskWrk.getIoType());
+ continue;
+ }
+ LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
+ //鍒ゆ柇鍏跺簱浣嶆槸鍚︿负娣卞簱浣嶏紝濡傛灉涓烘繁搴撲綅鎵惧叾娴呭簱浣嶆槸閮芥湁璐�
+ //棰勭暀
+
+
+ // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+ StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+ if (staProtocol == null) {
+ break;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+
+ // 鏌ヨ绔欑偣璇︾粏淇℃伅
+ BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
+ if (staDetl == null) {
+ log.error("鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+ break;
+ }
+
+ // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
+ if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
+ && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+
+ // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+ if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
+ break;
+ }
+
+ try {
+ // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
+ Date now = new Date();
+ taskWrk.setWrkSts(12);
+ taskWrk.setModiTime(now);
+ if (taskWrkMapper.updateById(taskWrk) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", taskWrk.getWrkNo());
+ }
+ } catch (Exception e) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", taskWrk.getWrkNo());
+ log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽紓甯革細" + e);
+ }
+// try {
+// HashMap<String, Object> headParam = new HashMap<>();
+// headParam.put("taskNo", taskWrk.getTaskNo());
+// headParam.put("status", taskWrk.getStatus());
+// headParam.put("ioType", taskWrk.getIoType());
+// headParam.put("barcode", taskWrk.getBarcode());
+// String response;
+// response = new HttpHandler.Builder()
+// // .setHeaders(headParam)
+// .setUri(wmsUrl)
+// .setPath(taskStatusFeedbackPath)
+// .setJson(JSON.toJSONString(headParam))
+// .build()
+// .doPost();
+// JSONObject jsonObject = JSON.parseObject(response);
+// apiLogService.save("wcs娲惧彂鍑哄簱浠诲姟涓婃姤wms"
+// , wmsUrl + taskStatusFeedbackPath
+// , null
+// , "127.0.0.1"
+// , JSON.toJSONString(headParam)
+// , response
+// , true
+// );
+// } catch (Exception e) {
+// log.error("wcs娲惧彂鍑哄簱浠诲姟涓婃姤wms澶辫触", JSON.toJSONString(taskWrk));
+//// throw new CoolException("wcs娲惧彂鍏ュ簱浠诲姟涓婃姤wms澶辫触");
+// }
+
+ }
+ }
+ }
+ }
+ }
+
+ //鑷姩娲惧彂浠诲姟
+ public synchronized void autoDistribute() {
+ Config config = configService.selectByCode("autoDistribute");
+ if (config == null) {
+ return;
+ }
+
+ if (config.getValue().equals("false")) {//鍒ゆ柇鏄惁寮�鍚嚜鍔ㄦ淳鍙戜换鍔�
+ return;
+ }
+
+ for (TaskWrk taskWrk : taskWrkService.selectReceive()) {
+
+ try {
+ taskWrkService.distribute(taskWrk.getTaskNo(), 9527L);
+ } catch (CoolException e) {
+ log.info(e.getMessage());
+ }
+ }
+ }
+
+ //agv鍙栨斁璐т换鍔″畬鎴�
+ public synchronized void autoCompleteAGV() {
+ List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+ try {
+ Thread.sleep(500);
+ } catch (Exception e) {
+
+ }
+
+ for (BasDevp basDevp : basDevps) {
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ if (basDevp.getWrkNo() != 0) {
+ if (basDevp.getAgvTargetPick() != 0) {//鍙栬揣
+ staProtocol.setAgvTypeSign((short) 0);
+ staProtocol.setStaNo(basDevp.getDevNo().shortValue());
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol));
+ }
+ boolean sign = true;
+ if (basDevp.getAgvTargetPlace() != 0) {
+ sign = false;
+ basDevp.setAgvTargetPlace(0);
+ basDevpService.updateById(basDevp);
+ staProtocol.setAgvTypeSign((short) 3);//1
+ staProtocol.setStaNo(basDevp.getDevNo().shortValue());
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol));
+ }
+ } else {
+ if (basDevp.getAgvTargetPlace() != 0) {
+ if (basDevp.getLoading().equals("Y")) {
+ staProtocol.setAgvTypeSign((short) 1);
+ staProtocol.setStaNo(basDevp.getDevNo().shortValue());
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol));
+ } else {
+ log.error("AGV鏀捐揣瀹屾垚浣嗚緭閫佺嚎鏃犵墿锛屽浣嶄俊鍙� ===>> [staNo:{}] [basDevp:{}]", basDevp.getDevNo(), basDevp);
+ basDevp.setAgvTargetPlace(0);
+ basDevpService.updateById(basDevp);
+ staProtocol.setAgvTypeSign((short) 3);//1
+ staProtocol.setStaNo(basDevp.getDevNo().shortValue());
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol));
+ }
+
+ }
+ if (basDevp.getAgvTargetPick() != 0) {
+ basDevp.setAgvTargetPick(0);
+ basDevpService.updateById(basDevp);
+ staProtocol.setAgvTypeSign((short) 2);//0
+ staProtocol.setStaNo(basDevp.getDevNo().shortValue());
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol));
+ }
+ }
+ }
+ }
+
+ public synchronized void autoCompleteTask() {
+ List<TaskWrk> taskWrks = taskWrkMapper.selectWorkingTask();
+ for (TaskWrk taskWrk : taskWrks) {
+ //鑾峰彇鍛戒护闆嗗悎
+ List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskWrk.getTaskNo());
+ if (taskWrk.getCommandStep() < commandInfos.size()) {
+ continue;//褰撳墠姝ュ簭娌℃湁鍒拌揪鏈�鍚庝竴鏉″懡浠�
+ }
+
+ //鍒ゆ柇鏈鍛戒护鏄惁鎵ц瀹屾垚
+ CommandInfo commandInfo = commandInfos.get(commandInfos.size() - 1);
+ if (commandInfo.getCommandStatus() != CommandStatusType.COMPLETE.id) {
+ continue;//鎸囦护鏈畬鎴�
+ }
+
+ Date now = new Date();
+ //鎸囦护宸插畬鎴愶紝鏇存柊浠诲姟
+ if (taskWrk.getIoType() == 1) {
+ //鍏ュ簱浠诲姟
+ taskWrk.setWrkSts(4);//3.鍚婅溅鍏ュ簱涓� => 4.鍏ュ簱瀹屾垚
+ //taskWrk.setStatus(TaskStatusType.COMPLETE.id);
+ taskWrk.setModiTime(now);
+ taskWrkService.updateById(taskWrk);
+
+ //鏇存柊搴撲綅鐘舵��
+ LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
+ locMast.setLocSts("F");//F.鍦ㄥ簱
+ locMast.setBarcode(taskWrk.getBarcode());//鎵樼洏鐮�
+ locMast.setModiTime(now);
+ locMast.setModiUser(9999L);
+ locMastService.updateById(locMast);
+ } else if (taskWrk.getIoType() == 2) {
+ //鍑哄簱浠诲姟
+ taskWrk.setWrkSts(14);//12.鍚婅溅鍑哄簱涓� => 14.鍑哄簱瀹屾垚
+// taskWrk.setStatus(TaskStatusType.COMPLETE.id);
+ taskWrk.setModiTime(now);
+ taskWrkService.updateById(taskWrk);
+
+ //鏇存柊搴撲綅鐘舵��
+ LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
+ locMast.setLocSts("O");//O.绌哄簱浣�
+ locMast.setBarcode("");//鎵樼洏鐮�
+ locMast.setModiTime(now);
+ locMast.setModiUser(9999L);
+ locMastService.updateById(locMast);
+ }
}
}
--
Gitblit v1.9.1