From aa21112291b04d0d3d53d75104a348f019f935a1 Mon Sep 17 00:00:00 2001
From: 王佳豪 <g675230687@126.com>
Date: 星期三, 09 六月 2021 09:03:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 213 ++++++++++++++++++++++++++++++++----------
src/main/java/com/zy/asrs/controller/WorkController.java | 31 +++++-
src/main/java/com/zy/asrs/service/BasAgvService.java | 2
src/main/java/com/zy/asrs/service/impl/BasAgvServiceImpl.java | 29 +++++
4 files changed, 215 insertions(+), 60 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/WorkController.java b/src/main/java/com/zy/asrs/controller/WorkController.java
index ff968e0..074d0d8 100644
--- a/src/main/java/com/zy/asrs/controller/WorkController.java
+++ b/src/main/java/com/zy/asrs/controller/WorkController.java
@@ -12,10 +12,7 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* 宸ヤ綔娴佹帴鍙f帶鍒跺櫒
@@ -23,6 +20,10 @@
*/
@RestController
public class WorkController extends BaseController {
+
+ public static final ArrayList<Integer> AGV_EMPTY_AREA = new ArrayList<Integer>() {{
+ add(1061);add(1062);add(1063);add(1064);add(1065);add(1066);add(1067);add(1068);
+ }};
@Autowired
private WorkService workService;
@@ -44,7 +45,16 @@
@RequestMapping("/available/empty/put/site")
@ManagerAuth(memo = "鑾峰彇绌烘澘鍏ュ簱绔欑偣")
public R availableEmptyPutSite(){
- return R.ok().add(basDevpService.getAvailableEmptyInSite());
+ List<Integer> availableEmptyInSite = basDevpService.getAvailableEmptyInSite();
+ List<Integer> agvSite = new ArrayList<>();
+ List<Integer> availableEmptyInSite1 = basDevpService.getAgvAvailableInSite();
+ for (Integer integer : availableEmptyInSite1) {
+ if (AGV_EMPTY_AREA.contains(integer)) {
+ agvSite.add(integer);
+ }
+ }
+ availableEmptyInSite.addAll(agvSite);
+ return R.ok().add(availableEmptyInSite);
}
@RequestMapping("/available/take/site")
@@ -84,7 +94,16 @@
@RequestMapping("/available/empty/take/site")
@ManagerAuth(memo = "鑾峰彇绌烘澘鍑哄簱绔欑偣")
public R availableEmptyTakeSite(){
- return R.ok().add(basDevpService.getAvailableEmptyOutSite());
+ List<Integer> availableEmptyOutSite = basDevpService.getAvailableEmptyOutSite();
+ List<Integer> agvSite = new ArrayList<>();
+ List<Integer> availableEmptyInSite1 = basDevpService.getAgvAvailableInSite();
+ for (Integer integer : availableEmptyInSite1) {
+ if (AGV_EMPTY_AREA.contains(integer)) {
+ agvSite.add(integer);
+ }
+ }
+ availableEmptyOutSite.addAll(agvSite);
+ return R.ok().add(availableEmptyOutSite);
}
@RequestMapping("/full/store/put/start")
diff --git a/src/main/java/com/zy/asrs/service/BasAgvService.java b/src/main/java/com/zy/asrs/service/BasAgvService.java
index 9d5bc4b..3f74e8c 100644
--- a/src/main/java/com/zy/asrs/service/BasAgvService.java
+++ b/src/main/java/com/zy/asrs/service/BasAgvService.java
@@ -9,4 +9,6 @@
String getAgvWorkNo();
+ String getEmptyAgvWorkNo();
+
}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasAgvServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasAgvServiceImpl.java
index 4bc5994..ce84de8 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasAgvServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasAgvServiceImpl.java
@@ -22,7 +22,7 @@
List<BasAgv> idleAgvs = this.selectList(new EntityWrapper<BasAgv>()
.eq("in_enable", "Y")
.eq("is_user", 1)
- .eq("status", 6)
+ .in("status", 6, 8 ,12)
);
if (Cools.isEmpty(idleAgvs)) {
log.warn("娌℃湁绌洪棽鐨凙gv灏忚溅");
@@ -47,8 +47,33 @@
return workNo;
}
+ @Override
+ public String getEmptyAgvWorkNo() {
+ String workNo = null;
+ for (int i = 0; i < 10; i++) {
+ workNo = getEmptyRandom();
+ int count = this.selectCount(new EntityWrapper<BasAgv>().eq("task_code", workNo));
+ if (count == 0) {
+ break;
+ }
+ }
+ if (Cools.isEmpty(workNo)) {
+ throw new CoolException("涓嬪彂AGV浠诲姟閿欒锛屽伐浣滃彿寮傚父");
+ }
+ return workNo;
+ }
+
+
private String getRandom() {
- return String.format("%04d",new Random().nextInt(9999));
+ return String.format("%04d",new Random().nextInt(6000));
+ }
+
+ public String getEmptyRandom(){
+ int min = 6001;
+ int max = 9999;
+ Random random = new Random();
+ int s = random.nextInt(max) % (max - min + 1) + min;
+ return String.format("%04d", s);
}
}
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 8fbda85..ae9d3fc 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -6,6 +6,7 @@
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.DateUtils;
+import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
@@ -15,13 +16,18 @@
import com.zy.common.model.LocTypeDto;
import com.zy.common.model.OutLocDto;
import com.zy.common.model.StartupDto;
+import com.zy.common.model.agv.AgvCommand;
+import com.zy.common.model.agv.AgvResult;
import com.zy.common.service.CommonService;
import com.zy.common.service.erp.ErpSqlServer;
+import com.zy.common.utils.HttpHandler;
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.io.IOException;
import java.text.MessageFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
@@ -39,6 +45,8 @@
// 搴撲綅鎺掑彿鍒嗛厤榛樿绫诲埆
private static final int DEFAULT_ROW_NO_TYPE = 1;
+ @Value("${agv.url}")
+ private String agvUrl;
@Autowired
private WrkMastService wrkMastService;
@Autowired
@@ -63,6 +71,8 @@
private WrkDetlLogService wrkDetlLogService;
@Autowired
private ErpSqlServer erpSqlServer;
+ @Autowired
+ private BasAgvService basAgvService;
@Override
@Transactional
@@ -313,66 +323,163 @@
@Override
@Transactional
public String emptyPlateIn(Integer devpNo, Long userId) {
- // 婧愮珯鐐圭姸鎬佹娴�
- BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
- // 妫�绱㈠簱浣�
- LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
- StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, true, null, locTypeDto, 0);
- // 宸ヤ綔鍙�
- int workNo = dto.getWorkNo();
- // 鐢熸垚宸ヤ綔妗�
- WrkMast wrkMast = new WrkMast();
- wrkMast.setWrkNo(workNo);
- wrkMast.setIoTime(new Date());
- wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
- wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱
- wrkMast.setIoPri(13D); // 浼樺厛绾э細10
- wrkMast.setCrnNo(dto.getCrnNo());
- wrkMast.setSourceStaNo(dto.getSourceStaNo());
- wrkMast.setStaNo(dto.getStaNo());
- wrkMast.setLocNo(dto.getLocNo());
- wrkMast.setFullPlt("N"); // 婊℃澘锛歒
- wrkMast.setPicking("N"); // 鎷f枡
- wrkMast.setExitMk("N"); // 閫�鍑�
- wrkMast.setEmptyMk("Y"); // 绌烘澘
- wrkMast.setLinkMis("N");
- wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
- // 鎿嶄綔浜哄憳鏁版嵁
- wrkMast.setAppeUser(userId);
- wrkMast.setAppeTime(new Date());
- wrkMast.setModiUser(userId);
- wrkMast.setModiTime(new Date());
- boolean res = wrkMastService.insert(wrkMast);
- if (!res) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
- }
- // 鏇存柊婧愮珯鐐逛俊鎭�
- sourceStaNo.setWrkNo(workNo);
- sourceStaNo.setModiUser(userId);
- sourceStaNo.setModiTime(new Date());
- if (!basDevpService.updateById(sourceStaNo)) {
- throw new CoolException("鏇存柊婧愮珯澶辫触");
- }
- // 鏇存柊鐩爣搴撲綅鐘舵��
- LocMast locMast = locMastService.selectById(dto.getLocNo());
- if (locMast.getLocSts().equals("O")) {
- locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
- locMast.setModiUser(userId);
- locMast.setModiTime(new Date());
- if (!locMastService.updateById(locMast)) {
- throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+ // 鐩爣绔欑偣鐘舵�佹娴�
+ BasDevp staNo = basDevpService.checkSiteStatus(devpNo);
+ if (!Cools.isEmpty(staNo.getFronting()) && staNo.getFronting().equals("Y")) {
+ // 灏忚溅鍏ュ簱鎼繍鍛戒护 ----------------------------------------------------
+ BasAgv idleAgv = basAgvService.selectIdleAgv();
+ AgvCommand command = new AgvCommand();
+ command.setAgvId(idleAgv.getAgvId());
+ command.setInterCode(basAgvService.getEmptyAgvWorkNo());
+ command.setBeginLoc(String.valueOf(devpNo));
+ command.setEndLoc("1088");
+ log.info(JSON.toJSONString(command));
+ String result;
+ try {
+ result = new HttpHandler.Builder()
+ .setUri(agvUrl + "/api/interfaceTask/SendTaskByThirdParty")
+ .setJson(JSON.toJSONString(command))
+ .build()
+ .doPost();
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new CoolException("璁块棶AGV鎺ュ彛澶辫触");
}
+ AgvResult agvResult = JSON.parseObject(result, AgvResult.class);
+ log.info(JSON.toJSONString(agvResult));
+ if (!agvResult.getResult()) {
+ log.error("agv鍛戒护鍙戦�佸け璐agvId={}]锛岄敊璇俊鎭�={}", command.getAgvId(), agvResult.getExplain());
+ throw new CoolException("agv鍛戒护鍙戦�佸け璐agvId=" + command.getAgvId() + "]锛岄敊璇俊鎭�=" + agvResult.getExplain());
+ }
+ return "寰呭畾";
} else {
- throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
+ // 婧愮珯鐐圭姸鎬佹娴�
+ BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
+ // 妫�绱㈠簱浣�
+ LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
+ StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, true, null, locTypeDto, 0);
+ // 宸ヤ綔鍙�
+ int workNo = dto.getWorkNo();
+ // 鐢熸垚宸ヤ綔妗�
+ WrkMast wrkMast = new WrkMast();
+ wrkMast.setWrkNo(workNo);
+ wrkMast.setIoTime(new Date());
+ wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+ wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱
+ wrkMast.setIoPri(13D); // 浼樺厛绾э細10
+ wrkMast.setCrnNo(dto.getCrnNo());
+ wrkMast.setSourceStaNo(dto.getSourceStaNo());
+ wrkMast.setStaNo(dto.getStaNo());
+ wrkMast.setLocNo(dto.getLocNo());
+ wrkMast.setFullPlt("N"); // 婊℃澘锛歒
+ wrkMast.setPicking("N"); // 鎷f枡
+ wrkMast.setExitMk("N"); // 閫�鍑�
+ wrkMast.setEmptyMk("Y"); // 绌烘澘
+ wrkMast.setLinkMis("N");
+ wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
+ // 鎿嶄綔浜哄憳鏁版嵁
+ wrkMast.setAppeUser(userId);
+ wrkMast.setAppeTime(new Date());
+ wrkMast.setModiUser(userId);
+ wrkMast.setModiTime(new Date());
+ boolean res = wrkMastService.insert(wrkMast);
+ if (!res) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+ }
+ // 鏇存柊婧愮珯鐐逛俊鎭�
+ sourceStaNo.setWrkNo(workNo);
+ sourceStaNo.setModiUser(userId);
+ sourceStaNo.setModiTime(new Date());
+ if (!basDevpService.updateById(sourceStaNo)) {
+ throw new CoolException("鏇存柊婧愮珯澶辫触");
+ }
+ // 鏇存柊鐩爣搴撲綅鐘舵��
+ LocMast locMast = locMastService.selectById(dto.getLocNo());
+ if (locMast.getLocSts().equals("O")) {
+ locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+ locMast.setModiUser(userId);
+ locMast.setModiTime(new Date());
+ if (!locMastService.updateById(locMast)) {
+ throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+ }
+ } else {
+ throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
+ }
+ return dto.getLocNo();
}
- return dto.getLocNo();
+
}
+
+// @Override
+// @Transactional
+// public String emptyPlateIn(Integer devpNo, Long userId) {
+// // 婧愮珯鐐圭姸鎬佹娴�
+// BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
+// // 妫�绱㈠簱浣�
+// LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
+// StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, true, null, locTypeDto, 0);
+// // 宸ヤ綔鍙�
+// int workNo = dto.getWorkNo();
+// // 鐢熸垚宸ヤ綔妗�
+// WrkMast wrkMast = new WrkMast();
+// wrkMast.setWrkNo(workNo);
+// wrkMast.setIoTime(new Date());
+// wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+// wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱
+// wrkMast.setIoPri(13D); // 浼樺厛绾э細10
+// wrkMast.setCrnNo(dto.getCrnNo());
+// wrkMast.setSourceStaNo(dto.getSourceStaNo());
+// wrkMast.setStaNo(dto.getStaNo());
+// wrkMast.setLocNo(dto.getLocNo());
+// wrkMast.setFullPlt("N"); // 婊℃澘锛歒
+// wrkMast.setPicking("N"); // 鎷f枡
+// wrkMast.setExitMk("N"); // 閫�鍑�
+// wrkMast.setEmptyMk("Y"); // 绌烘澘
+// wrkMast.setLinkMis("N");
+// wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
+// // 鎿嶄綔浜哄憳鏁版嵁
+// wrkMast.setAppeUser(userId);
+// wrkMast.setAppeTime(new Date());
+// wrkMast.setModiUser(userId);
+// wrkMast.setModiTime(new Date());
+// boolean res = wrkMastService.insert(wrkMast);
+// if (!res) {
+// throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+// }
+// // 鏇存柊婧愮珯鐐逛俊鎭�
+// sourceStaNo.setWrkNo(workNo);
+// sourceStaNo.setModiUser(userId);
+// sourceStaNo.setModiTime(new Date());
+// if (!basDevpService.updateById(sourceStaNo)) {
+// throw new CoolException("鏇存柊婧愮珯澶辫触");
+// }
+// // 鏇存柊鐩爣搴撲綅鐘舵��
+// LocMast locMast = locMastService.selectById(dto.getLocNo());
+// if (locMast.getLocSts().equals("O")) {
+// locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+// locMast.setModiUser(userId);
+// locMast.setModiTime(new Date());
+// if (!locMastService.updateById(locMast)) {
+// throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+// }
+// } else {
+// throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
+// }
+// return dto.getLocNo();
+// }
@Override
@Transactional
public void emptyPlateOut(EmptyPlateOutParam param, Long userId) {
if (Cools.isEmpty(param.getOutSite())) {
throw new CoolException("绔欑偣涓嶅瓨鍦�");
+ }
+ // 鐩爣绔欑偣鐘舵�佹娴�
+ BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
+ int agvSite = 0;
+ if (!Cools.isEmpty(staNo.getFronting()) && staNo.getFronting().equals("Y")) {
+ agvSite = staNo.getDevNo();
+ staNo = basDevpService.checkSiteStatus(201);
}
for (String locNo : param.getLocNos()) {
// 鑾峰彇宸ヤ綔鍙�
@@ -385,7 +492,7 @@
// 鑾峰彇婧愮珯
Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
.eq("type_no", 110)
- .eq("stn_no", param.getOutSite())
+ .eq("stn_no", staNo.getDevNo())
.eq("crn_no", locMast.getCrnNo());
StaDesc staDesc = staDescService.selectOne(wrapper);
Integer sourceStaNo = staDesc.getCrnStn();
@@ -400,7 +507,7 @@
wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
wrkMast.setIoPri(10D);
wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
- wrkMast.setStaNo(param.getOutSite()); // 鐩爣绔�
+ wrkMast.setStaNo(staNo.getDevNo()); // 鐩爣绔�
wrkMast.setCrnNo(locMast.getCrnNo());
wrkMast.setSourceLocNo(locNo); // 婧愬簱浣�
wrkMast.setFullPlt("N"); // 婊℃澘锛歒
@@ -408,6 +515,8 @@
wrkMast.setExitMk("N"); // 閫�鍑�
wrkMast.setEmptyMk("Y"); // 绌烘澘
wrkMast.setLinkMis("N");
+ wrkMast.setCtnKind(agvSite); // 鍑哄簱涓嬬殑灏忚溅宸ヤ綔鍖虹珯濂�
+ wrkMast.setExitMk("N"); // 灏忚溅鏄惁鎼繍
wrkMast.setAppeUser(userId);
wrkMast.setAppeTime(new Date());
wrkMast.setModiUser(userId);
--
Gitblit v1.9.1