no message
parent
ff228f6f88
commit
ba4501dd6a
|
|
@ -55,6 +55,8 @@ public class AppRun {
|
||||||
// 或者在 application.yml 添加文件路径,方便 kill,kill `cat /home/eladmin/app.pid`
|
// 或者在 application.yml 添加文件路径,方便 kill,kill `cat /home/eladmin/app.pid`
|
||||||
springApplication.addListeners(new ApplicationPidFileWriter());
|
springApplication.addListeners(new ApplicationPidFileWriter());
|
||||||
springApplication.run(args);
|
springApplication.run(args);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,20 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2019-2020 Zheng Jie
|
* Copyright 2019-2020 Zheng Jie
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package com.youchain.businessdata.repository;
|
package com.youchain.businessdata.repository;
|
||||||
|
|
||||||
import com.youchain.businessdata.domain.AgvTask;
|
import com.youchain.businessdata.domain.AgvTask;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
|
|
@ -22,63 +23,18 @@ import org.springframework.data.jpa.repository.Query;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @website https://eladmin.vip
|
* @author baobinglin
|
||||||
* @author baobinglin
|
* @website https://eladmin.vip
|
||||||
* @date 2023-08-18
|
* @date 2023-08-18
|
||||||
**/
|
**/
|
||||||
public interface AgvTaskRepository extends JpaRepository<AgvTask, Integer>, JpaSpecificationExecutor<AgvTask> {
|
public interface AgvTaskRepository extends JpaRepository<AgvTask, Integer>, JpaSpecificationExecutor<AgvTask> {
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询滚筒出库任务执行中的任务
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Query(value = "SELECT * FROM data_agv_task where type='PICK' and job_type='ROLLER_MOVE' and status not in ('FINISH','CANCEL') and stock_code=?1 ", nativeQuery = true)
|
|
||||||
AgvTask findBycontainerCode(String containerCode);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询前后桶正在执行的任务
|
* 查询前后桶正在执行的任务
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Query(value = "select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER','OPEN') AND a.end_slot_code like 'MA1151-QH%'" +
|
@Query(value = "select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER','OPEN') AND a.end_slot_code like 'MA1151-QH%'" +
|
||||||
" UNION select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER','OPEN') AND a.start_slot_code like 'MA1151-QH%' ", nativeQuery = true)
|
" UNION select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER','OPEN') AND a.start_slot_code like 'MA1151-QH%' ", nativeQuery = true)
|
||||||
List<AgvTask> queryAgvTaskPerformedQH();
|
List<AgvTask> queryAgvTaskPerformedQH();
|
||||||
|
|
||||||
/**
|
|
||||||
* @param status-状态
|
|
||||||
* @param type-类型
|
|
||||||
* @param be_scan-是否扫描
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Query(value = "SELECT * FROM data_agv_task where 1=1 and if((?1 !='' or ?1 is not null) ,stock_code=?1,1=1) and status=?2 and type=?3 and be_scan=?4 and job_type=?5 order by update_time ", nativeQuery = true)
|
|
||||||
List<AgvTask> queryByAgvTask(String stockCode, String status, String type, int be_scan,String jobType);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询正在执行的开始点位有没有这个点位的任务
|
|
||||||
* @param startPoint 开始点位
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Query(value = "select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER') AND a.start_slot_code = ?1", nativeQuery = true)
|
|
||||||
List<AgvTask> findStartTask(String startPoint);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询正在执行的结束点位有没有这个点位的任务
|
|
||||||
* @param endPoint
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Query(value = "select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER') AND a.end_slot_code = ?1", nativeQuery = true)
|
|
||||||
List<AgvTask> findEndTask(String endPoint);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据线边分组
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Query(value = "select line_slot_code from data_agv_task where type='PICK' and `status`='OPEN' and line_slot_code is not null GROUP BY line_slot_code order by line_slot_code ", nativeQuery = true)
|
|
||||||
List<Object> queryGroupAgvTask();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询线边任务待执行的任务
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Query(value = "select * from data_agv_task where line_slot_code=?1 and type='PICK' and `status`='OPEN' and line_slot_code is not null ORDER BY create_time ", nativeQuery = true)
|
|
||||||
List<AgvTask> queryLineAgvTask(String line_slot_code);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ public class KMReSController {
|
||||||
String missionStatus = missionStateCallback.getMissionStatus();//作业当前状态
|
String missionStatus = missionStateCallback.getMissionStatus();//作业当前状态
|
||||||
try {
|
try {
|
||||||
//料箱出库任务
|
//料箱出库任务
|
||||||
if(id.indexOf("XJ")!=-1){
|
if(id.indexOf("LX")!=-1){
|
||||||
if(missionStatus.equals("CANCELED")){
|
if(missionStatus.equals("CANCELED")){
|
||||||
List<AgvTask> agvTaskList= agvTaskService.findByjobCode(id);
|
List<AgvTask> agvTaskList= agvTaskService.findByjobCode(id);
|
||||||
for(AgvTask agvTask:agvTaskList){
|
for(AgvTask agvTask:agvTaskList){
|
||||||
|
|
@ -143,6 +143,7 @@ public class KMReSController {
|
||||||
*
|
*
|
||||||
* @param task
|
* @param task
|
||||||
*/
|
*/
|
||||||
|
@Async
|
||||||
public void returnIssue(@RequestBody Task task) {
|
public void returnIssue(@RequestBody Task task) {
|
||||||
|
|
||||||
ReturnIssueInfo returnIssueInfo = getReturnIssueInfo(task);
|
ReturnIssueInfo returnIssueInfo = getReturnIssueInfo(task);
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2019-2020 Zheng Jie
|
* Copyright 2019-2020 Zheng Jie
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package com.youchain.businessdata.service;
|
package com.youchain.businessdata.service;
|
||||||
|
|
||||||
import com.youchain.annotation.Log;
|
import com.youchain.annotation.Log;
|
||||||
|
|
@ -23,29 +23,32 @@ import com.youchain.businessdata.service.dto.AgvTaskDto;
|
||||||
import com.youchain.businessdata.service.dto.AgvTaskQueryCriteria;
|
import com.youchain.businessdata.service.dto.AgvTaskQueryCriteria;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @website https://eladmin.vip
|
* @author baobinglin
|
||||||
* @description 服务接口
|
* @website https://eladmin.vip
|
||||||
* @author baobinglin
|
* @description 服务接口
|
||||||
* @date 2023-08-18
|
* @date 2023-08-18
|
||||||
**/
|
**/
|
||||||
public interface AgvTaskService {
|
public interface AgvTaskService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询数据分页
|
* 查询数据分页
|
||||||
|
*
|
||||||
* @param criteria 条件
|
* @param criteria 条件
|
||||||
* @param pageable 分页参数
|
* @param pageable 分页参数
|
||||||
* @return Map<String,Object>
|
* @return Map<String, Object>
|
||||||
*/
|
*/
|
||||||
Map<String,Object> queryAll(AgvTaskQueryCriteria criteria, Pageable pageable);
|
Map<String, Object> queryAll(AgvTaskQueryCriteria criteria, Pageable pageable);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询所有数据不分页
|
* 查询所有数据不分页
|
||||||
|
*
|
||||||
* @param criteria 条件参数
|
* @param criteria 条件参数
|
||||||
* @return List<AgvTaskDto>
|
* @return List<AgvTaskDto>
|
||||||
*/
|
*/
|
||||||
|
|
@ -53,6 +56,7 @@ public interface AgvTaskService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据ID查询
|
* 根据ID查询
|
||||||
|
*
|
||||||
* @param id ID
|
* @param id ID
|
||||||
* @return AgvTaskDto
|
* @return AgvTaskDto
|
||||||
*/
|
*/
|
||||||
|
|
@ -60,6 +64,7 @@ public interface AgvTaskService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建
|
* 创建
|
||||||
|
*
|
||||||
* @param resources /
|
* @param resources /
|
||||||
* @return AgvTaskDto
|
* @return AgvTaskDto
|
||||||
*/
|
*/
|
||||||
|
|
@ -67,18 +72,21 @@ public interface AgvTaskService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 编辑
|
* 编辑
|
||||||
|
*
|
||||||
* @param resources /
|
* @param resources /
|
||||||
*/
|
*/
|
||||||
void update(AgvTask resources);
|
void update(AgvTask resources);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 多选删除
|
* 多选删除
|
||||||
|
*
|
||||||
* @param ids /
|
* @param ids /
|
||||||
*/
|
*/
|
||||||
void deleteAll(Integer[] ids);
|
void deleteAll(Integer[] ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出数据
|
* 导出数据
|
||||||
|
*
|
||||||
* @param all 待导出的数据
|
* @param all 待导出的数据
|
||||||
* @param response /
|
* @param response /
|
||||||
* @throws IOException /
|
* @throws IOException /
|
||||||
|
|
@ -87,6 +95,7 @@ public interface AgvTaskService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送货架搬运接口任务
|
* 发送货架搬运接口任务
|
||||||
|
*
|
||||||
* @param agvTasks
|
* @param agvTasks
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
|
@ -94,45 +103,25 @@ public interface AgvTaskService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送料箱搬运接口任务
|
* 发送料箱搬运接口任务
|
||||||
|
*
|
||||||
* @param agvTasks
|
* @param agvTasks
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public String sendAgvTaskLXImpl(List<AgvTask> agvTasks);
|
String sendAgvTaskLXImpl(List<AgvTask> agvTasks);
|
||||||
|
|
||||||
/**
|
String containerIn(String containerCode, String position);
|
||||||
* 发送滚筒搬运接口任务
|
|
||||||
* @param agvTasks1-满箱任务
|
|
||||||
* @param agvTasks1-控销任务
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public String sendAgvTaskGTImpl(List<AgvTask> agvTasks1,List<AgvTask> agvTasks2);
|
|
||||||
|
|
||||||
|
|
||||||
String containerIn(String containerCode,String position);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 容器出场
|
* 容器出场
|
||||||
|
*
|
||||||
* @param containerCode-容器编号
|
* @param containerCode-容器编号
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
String containerOut(String containerCode);
|
String containerOut(String containerCode);
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询容器状态
|
|
||||||
* @param containerCode-容器编号
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
String containerQuery(String containerCode);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询输送线上料箱总数
|
|
||||||
* @param taskCode-输送线编号
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
int QueryCount(String taskCode);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 读取输送线、流利式货架状态
|
* 读取输送线、流利式货架状态
|
||||||
|
*
|
||||||
* @param conveyorId-输送线编号
|
* @param conveyorId-输送线编号
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
|
@ -142,32 +131,43 @@ public interface AgvTaskService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务回报更新状态
|
* 任务回报更新状态
|
||||||
|
*
|
||||||
* @param agvTask
|
* @param agvTask
|
||||||
* @param status
|
* @param status
|
||||||
* @param
|
* @param
|
||||||
*/
|
*/
|
||||||
void agvTaskCallback(AgvTask agvTask,Task task, String status);
|
void agvTaskCallback(AgvTask agvTask, Task task, String status);
|
||||||
|
|
||||||
void agvTaskCallback(AgvTask agvTask,String status,String containerCode);
|
void agvTaskCallback(AgvTask agvTask, String status, String containerCode);
|
||||||
|
|
||||||
|
|
||||||
List<AgvTask> findById(List<Integer> ids);
|
// List<AgvTask> findById(List<Integer> ids);
|
||||||
|
|
||||||
double queryBillCodeSum(String billCode);
|
double queryBillCodeSum(String billCode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*根据组号+料箱号招找到对应的AGV
|
* 根据组号+料箱号招找到对应的AGV
|
||||||
|
*
|
||||||
* @param jobForce-任务组号
|
* @param jobForce-任务组号
|
||||||
* @param containerCode-容器号
|
* @param containerCode-容器号
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
AgvTask findByjobCode(String jobForce,String containerCode);
|
AgvTask findByjobCode(String jobForce, String containerCode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*根据组号+找到对应的AGV集合
|
* 根据组号+找到对应的AGV集合
|
||||||
|
*
|
||||||
* @param jobForce-任务组号
|
* @param jobForce-任务组号
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<AgvTask> findByjobCode(String jobForce);
|
List<AgvTask> findByjobCode(String jobForce);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param status
|
||||||
|
* @param type
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AgvTask> queryByAgvTask(String status,String type);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -235,7 +235,7 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
||||||
@Override
|
@Override
|
||||||
public synchronized String sendAgvTaskLXImpl(List<AgvTask> agvTasks) {
|
public synchronized String sendAgvTaskLXImpl(List<AgvTask> agvTasks) {
|
||||||
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
|
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
|
||||||
String agvCode = TimeNumberUtils.getXJTaskCode();
|
String agvCode = TimeNumberUtils.getLXTaskCode();
|
||||||
Map<String, Object> objMap = new LinkedHashMap<>();
|
Map<String, Object> objMap = new LinkedHashMap<>();
|
||||||
objMap.put("orgId", agvCode);//库存组织 ID(或工厂代码,供应商代码)
|
objMap.put("orgId", agvCode);//库存组织 ID(或工厂代码,供应商代码)
|
||||||
objMap.put("requestId", agvCode);//请求 id
|
objMap.put("requestId", agvCode);//请求 id
|
||||||
|
|
@ -273,10 +273,19 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
||||||
|
|
||||||
objMap.put("missionData", missionDataArray);
|
objMap.put("missionData", missionDataArray);
|
||||||
jsonObject.putAll(objMap);
|
jsonObject.putAll(objMap);
|
||||||
System.out.println(jsonObject.toString());
|
String resultJson="{\n" +
|
||||||
String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission, jsonObject.toString());
|
" \"data\": null,\n" +
|
||||||
|
" \"code\": \"0\",\n" +
|
||||||
|
" \"message\": null,\n" +
|
||||||
|
" \"success\": true\n" +
|
||||||
|
"}";
|
||||||
|
//String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission, jsonObject.toString());
|
||||||
|
if (resultJson == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
JSONObject resulObject = JSON.parseObject(resultJson);
|
JSONObject resulObject = JSON.parseObject(resultJson);
|
||||||
String code = resulObject.getString("code") == null ? "" : resulObject.getString("code");
|
String code = resulObject.getString("code") == null ? "" : resulObject.getString("code");
|
||||||
|
|
||||||
if (code.equals("0")) {
|
if (code.equals("0")) {
|
||||||
for (int i = 0; i < agvTasks.size(); i++) {
|
for (int i = 0; i < agvTasks.size(); i++) {
|
||||||
AgvTask agvTask = agvTasks.get(i);
|
AgvTask agvTask = agvTasks.get(i);
|
||||||
|
|
@ -299,92 +308,6 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
||||||
return resultJson;
|
return resultJson;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized String sendAgvTaskGTImpl(List<AgvTask> agvTasks1, List<AgvTask> agvTasks2) {
|
|
||||||
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
|
|
||||||
String agvCode = TimeNumberUtils.getGTTaskCode();
|
|
||||||
Map<String, Object> objMap = new LinkedHashMap<>();
|
|
||||||
objMap.put("orgId", agvCode);//库存组织 ID(或工厂代码,供应商代码)
|
|
||||||
objMap.put("requestId", agvCode);//请求 id
|
|
||||||
objMap.put("missionCode", agvCode);//任务编号
|
|
||||||
objMap.put("missionType", "ROLLER_MOVE");//任务类型 :滚筒
|
|
||||||
objMap.put("viewBoardType", "");//上视识别类型:
|
|
||||||
JSONArray missionDataArray = new JSONArray();
|
|
||||||
for (int i = 0; i < agvTasks1.size(); i++) {
|
|
||||||
AgvTask agvTask = agvTasks1.get(i);
|
|
||||||
JSONObject missionDataObj = new JSONObject(new LinkedHashMap<>());
|
|
||||||
Map<String, Object> missionDataMap = new LinkedHashMap<>();
|
|
||||||
missionDataMap.put("sequence", (i + 1));//序号
|
|
||||||
missionDataMap.put("binCode", agvTask.getStockCode());//料箱号
|
|
||||||
missionDataMap.put("startDeviceCode", agvTask.getStartSlotCode());//料箱所在的起始槽位
|
|
||||||
missionDataMap.put("endDeviceCode", agvTask.getEndSlotCode());//料箱所在的目标槽位
|
|
||||||
missionDataMap.put("rollerLevel", 2);//层
|
|
||||||
missionDataMap.put("rollerColumn", (i + 1));//列
|
|
||||||
missionDataObj.putAll(missionDataMap);
|
|
||||||
missionDataArray.add(missionDataObj);
|
|
||||||
}
|
|
||||||
int sum = agvTasks1.size();
|
|
||||||
if (agvTasks2.size() > 0) {
|
|
||||||
for (int i = 0; i < agvTasks2.size(); i++) {
|
|
||||||
AgvTask agvTask = agvTasks2.get(i);
|
|
||||||
JSONObject missionDataObj = new JSONObject(new LinkedHashMap<>());
|
|
||||||
Map<String, Object> missionDataMap = new LinkedHashMap<>();
|
|
||||||
missionDataMap.put("sequence", (sum + (i + 1)));//序号
|
|
||||||
missionDataMap.put("binCode", agvTask.getStockCode());//料箱号
|
|
||||||
missionDataMap.put("startDeviceCode", agvTask.getStartSlotCode());//料箱所在的起始槽位
|
|
||||||
missionDataMap.put("endDeviceCode", agvTask.getEndSlotCode());//料箱所在的目标槽位
|
|
||||||
missionDataMap.put("rollerLevel", 1);//层
|
|
||||||
missionDataMap.put("rollerColumn", (i + 1));//列
|
|
||||||
missionDataObj.putAll(missionDataMap);
|
|
||||||
missionDataArray.add(missionDataObj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
objMap.put("missionData", missionDataArray);
|
|
||||||
jsonObject.putAll(objMap);
|
|
||||||
System.out.println(jsonObject.toString());
|
|
||||||
String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission, jsonObject.toString());//返回ResponseJson*/
|
|
||||||
JSONObject resulObject = JSON.parseObject(resultJson);
|
|
||||||
String code = resulObject.getString("code") == null ? "" : resulObject.getString("code");
|
|
||||||
if (code.equals("0")) {
|
|
||||||
for (int i = 0; i < agvTasks1.size(); i++) {
|
|
||||||
AgvTask agvTask = agvTasks1.get(i);
|
|
||||||
agvTask.setJobForce(agvCode);//任务组
|
|
||||||
agvTask.setJobForceAsc((i + 1));
|
|
||||||
agvTask.setStatus(BizStatus.ATCALL);
|
|
||||||
agvTask.setJobMessage(resultJson);
|
|
||||||
agvTask.setReqMessage(jsonObject.toString());
|
|
||||||
agvTask.setStartTime(new Timestamp(new Date().getTime()));
|
|
||||||
update(agvTask);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < agvTasks2.size(); i++) {
|
|
||||||
AgvTask agvTask = agvTasks2.get(i);
|
|
||||||
agvTask.setJobForce(agvCode);//任务组
|
|
||||||
agvTask.setJobForceAsc((i + 1));
|
|
||||||
agvTask.setStatus(BizStatus.ATCALL);
|
|
||||||
agvTask.setJobMessage(resultJson);
|
|
||||||
agvTask.setReqMessage(jsonObject.toString());
|
|
||||||
agvTask.setStartTime(new Timestamp(new Date().getTime()));
|
|
||||||
update(agvTask);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < agvTasks1.size(); i++) {
|
|
||||||
AgvTask agvTask = agvTasks1.get(i);
|
|
||||||
agvTask.setJobMessage(resultJson);
|
|
||||||
agvTask.setReqMessage(jsonObject.toString());
|
|
||||||
update(agvTask);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < agvTasks2.size(); i++) {
|
|
||||||
AgvTask agvTask = agvTasks2.get(i);
|
|
||||||
agvTask.setJobMessage(resultJson);
|
|
||||||
agvTask.setReqMessage(jsonObject.toString());
|
|
||||||
update(agvTask);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return resultJson;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized String containerIn(String containerCode, String position) {
|
public synchronized String containerIn(String containerCode, String position) {
|
||||||
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
|
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
|
||||||
|
|
@ -406,28 +329,6 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
||||||
return jsonObject.toJSONString();
|
return jsonObject.toJSONString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String containerQuery(String containerCode) {
|
|
||||||
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
|
|
||||||
jsonObject.put("nodeCode", "");//点位编码
|
|
||||||
jsonObject.put("containerModelCode", "");//容器模型编码
|
|
||||||
jsonObject.put("containerCode", containerCode);//容器编号
|
|
||||||
jsonObject.put("areaCode", "");//区域编码
|
|
||||||
jsonObject.put("emptyFullStatus", 2);//容器的空满状态 空 0 满 1 全部 2
|
|
||||||
return jsonObject.toJSONString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int QueryCount(String taskCode) {
|
|
||||||
|
|
||||||
String jsonObject = "{\"taskCode\":\"" + taskCode + "\"}";//查询出库缓存输送线上满料箱总数
|
|
||||||
String resultJson = HttpPostUtil.sendPostReq(UrlApi.QueryCount, jsonObject);
|
|
||||||
JSONObject json = JSON.parseObject(resultJson);
|
|
||||||
String queryCount = json.getString("queryCount");
|
|
||||||
|
|
||||||
return Integer.parseInt(queryCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void getConveyorState(String conveyorId) {
|
public void getConveyorState(String conveyorId) {
|
||||||
/* String resultJson= HttpPostUtil.sendPostReq(UrlApi.agv_url, jsonObject.toString());//返回ResponseJson*/
|
/* String resultJson= HttpPostUtil.sendPostReq(UrlApi.agv_url, jsonObject.toString());//返回ResponseJson*/
|
||||||
|
|
@ -524,16 +425,6 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<AgvTask> findById(List<Integer> ids) {
|
|
||||||
String agvTaskIds = StringUtils.strip(ids.toString(), "[]");
|
|
||||||
String hql = " from AgvTask agv where agv.id in (" + agvTaskIds + ") ";
|
|
||||||
Query query = entityMapper.createQuery(hql);
|
|
||||||
List<AgvTask> agvTaskList = query.getResultList();
|
|
||||||
return agvTaskList;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double queryBillCodeSum(String billCode) {
|
public double queryBillCodeSum(String billCode) {
|
||||||
String hql = "select sum(task.moveQty) from Task task where task.billCode= :billCode";
|
String hql = "select sum(task.moveQty) from Task task where task.billCode= :billCode";
|
||||||
|
|
@ -569,4 +460,14 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
||||||
return agvTaskList;
|
return agvTaskList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AgvTask> queryByAgvTask(String status, String type) {
|
||||||
|
String hql = " from AgvTask agv where agv.status= :status and agv.type= :type";
|
||||||
|
Query query = entityMapper.createQuery(hql);
|
||||||
|
query.setParameter("status", status);
|
||||||
|
query.setParameter("type", type);
|
||||||
|
List<AgvTask> agvTaskList = query.getResultList();
|
||||||
|
return agvTaskList;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -447,7 +447,7 @@ public class MlsServiceImpl implements MlsService {
|
||||||
pickDetailToCreate.add(pd);
|
pickDetailToCreate.add(pd);
|
||||||
|
|
||||||
//生成搬运任务
|
//生成搬运任务
|
||||||
AgvTask agvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "01");
|
AgvTask agvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "PICKER_MOVE");
|
||||||
agvTaskToCreate.add(agvTask);
|
agvTaskToCreate.add(agvTask);
|
||||||
|
|
||||||
//生成Task
|
//生成Task
|
||||||
|
|
@ -478,14 +478,17 @@ public class MlsServiceImpl implements MlsService {
|
||||||
batchCreateOrUpdate.batchUpdate(inventoryToUpdate);
|
batchCreateOrUpdate.batchUpdate(inventoryToUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//批量生成出库明细
|
||||||
if (!pickDetailToCreate.isEmpty()) {
|
if (!pickDetailToCreate.isEmpty()) {
|
||||||
batchCreateOrUpdate.batchCreate(pickDetailToCreate);
|
batchCreateOrUpdate.batchCreate(pickDetailToCreate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//批量生成agv任务
|
||||||
if (!agvTaskToCreate.isEmpty()) {
|
if (!agvTaskToCreate.isEmpty()) {
|
||||||
batchCreateOrUpdate.batchCreate(agvTaskToCreate);
|
batchCreateOrUpdate.batchCreate(agvTaskToCreate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//批量生成task任务
|
||||||
if (!taskToCreate.isEmpty()) {
|
if (!taskToCreate.isEmpty()) {
|
||||||
batchCreateOrUpdate.batchCreate(taskToCreate);
|
batchCreateOrUpdate.batchCreate(taskToCreate);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -235,7 +235,7 @@ public class MoServiceImpl implements MoService {
|
||||||
|
|
||||||
public void createTasks(Item item, Stock stock, Point srcPoint, Point endPoint, String propC1, MoDto moDto, OrderDto orderDto) {
|
public void createTasks(Item item, Stock stock, Point srcPoint, Point endPoint, String propC1, MoDto moDto, OrderDto orderDto) {
|
||||||
// 生成AGV任务
|
// 生成AGV任务
|
||||||
AgvTask agvTask = new AgvTask(BizStatus.ASN, stock.getCode(), srcPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "RACK_MOVE_FULL");
|
AgvTask agvTask = new AgvTask(BizStatus.ASN, stock.getCode(), srcPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "PICKER_MOVE");
|
||||||
agvTaskService.create(agvTask);
|
agvTaskService.create(agvTask);
|
||||||
|
|
||||||
// 生成入库任务
|
// 生成入库任务
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,12 @@ package com.youchain.modules.quartz.task;
|
||||||
|
|
||||||
import com.youchain.businessdata.inputJson.MoInfo;
|
import com.youchain.businessdata.inputJson.MoInfo;
|
||||||
import com.youchain.businessdata.inputJson.MoParams;
|
import com.youchain.businessdata.inputJson.MoParams;
|
||||||
import com.youchain.businessdata.rest.MlsController;
|
|
||||||
import com.youchain.businessdata.service.MlsService;
|
import com.youchain.businessdata.service.MlsService;
|
||||||
import com.youchain.service.LogService;
|
import com.youchain.service.LogService;
|
||||||
import com.youchain.utils.UrlApi;
|
import com.youchain.utils.UrlApi;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,77 +26,45 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
@Service
|
@Service
|
||||||
public class pickTask {
|
public class pickTask {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public AgvTaskRepository agvTaskRepository;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public AgvTaskService agvTaskService;
|
public AgvTaskService agvTaskService;
|
||||||
|
|
||||||
private Map<String, List<Integer>> groupedTasks = new HashMap<>();
|
private static final int MAX_TASK_COUNT = 5;
|
||||||
|
|
||||||
|
private static final long TIMEOUT_MS = 2*60*1000;
|
||||||
private long lastTaskTime = System.currentTimeMillis();
|
private long lastTaskTime = System.currentTimeMillis();
|
||||||
|
|
||||||
public void pickTask() {
|
public void pickTask() {
|
||||||
//按线边分组 下发出库任务
|
// 下发出库任务
|
||||||
List<Object> objectList = agvTaskRepository.queryGroupAgvTask();
|
List<AgvTask> agvTaskList = agvTaskService.queryByAgvTask(BizStatus.OPEN,BizStatus.PICK);
|
||||||
for (Object obj : objectList) {
|
if (agvTaskList.size() > 0) {
|
||||||
List<AgvTask> agvTaskList = agvTaskRepository.queryLineAgvTask(obj.toString());
|
if ((agvTaskList.size() == MAX_TASK_COUNT)) {
|
||||||
for (AgvTask agvTask : agvTaskList) {
|
Result(agvTaskService.sendAgvTaskLXImpl(agvTaskList));
|
||||||
List<Integer> agvTaskList1 = groupedTasks.get(obj.toString());
|
|
||||||
if (agvTaskList1 == null) {
|
|
||||||
groupedTasks.computeIfAbsent(obj.toString(), k -> new CopyOnWriteArrayList<>()).add(agvTask.getId());
|
|
||||||
} else if (agvTaskList1.size() <= 4) {
|
|
||||||
boolean containsElement = agvTaskList1.contains(agvTask.getId());
|
|
||||||
if (!containsElement) {
|
|
||||||
groupedTasks.computeIfAbsent(obj.toString(), k -> new CopyOnWriteArrayList<>()).add(agvTask.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 检查是否满足四个为一组或者时间超过五分钟
|
|
||||||
if ((isGroupingConditionsMet() || timeExceeded()) && isLine() ) {
|
|
||||||
issueGroupedTasks();
|
|
||||||
groupedTasks.clear();
|
|
||||||
lastTaskTime = System.currentTimeMillis();
|
lastTaskTime = System.currentTimeMillis();
|
||||||
|
}else if((System.currentTimeMillis() - lastTaskTime >=TIMEOUT_MS) ){
|
||||||
|
if(agvTaskList.size()>MAX_TASK_COUNT){
|
||||||
|
List<AgvTask> newAgvTask = agvTaskList.subList(0,MAX_TASK_COUNT);
|
||||||
|
Result(agvTaskService.sendAgvTaskLXImpl(newAgvTask));
|
||||||
}else{
|
}else{
|
||||||
log.info("小件出库料箱任务未满足条件!");
|
Result(agvTaskService.sendAgvTaskLXImpl(agvTaskList));
|
||||||
|
lastTaskTime = System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("出库料箱任务未满足条件(不满足五个料箱需等待2分钟)!");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("无出库料箱任务!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isLine() {
|
private void Result(String result) {
|
||||||
// 判断缓存输送线上的料箱总数+AGV执行中的数量 不能超过6个
|
if(result==null ||result.length()==0){
|
||||||
int queryCount = agvTaskService.QueryCount("6x1");
|
throw new RuntimeException("任务下发失败!");
|
||||||
|
|
||||||
//出库料箱AGV执行中的数量
|
|
||||||
//List<AgvTask> agvTaskList= agvTaskService.findByAgvList(BizStatus.PICK,"PICKER_MOVE");
|
|
||||||
if(queryCount<=6){
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isGroupingConditionsMet() {
|
|
||||||
// 判断是否满足四个为一组的条件
|
|
||||||
return groupedTasks.values().stream().anyMatch(tasks -> tasks.size() == 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean timeExceeded() {
|
|
||||||
// 判断时间是否超过3分钟
|
|
||||||
return System.currentTimeMillis() - lastTaskTime >= 2 * 60 * 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void issueGroupedTasks() {
|
|
||||||
// 实现任务下发的逻辑
|
|
||||||
// 可以遍历groupedTasks,处理每个分组的任务
|
|
||||||
for (List<Integer> tasksInGroup : groupedTasks.values()) {
|
|
||||||
List<AgvTask> agvTaskList= agvTaskService.findById(tasksInGroup);
|
|
||||||
String rul=agvTaskService.sendAgvTaskLXImpl(agvTaskList);
|
|
||||||
System.out.println(rul);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,12 +31,12 @@ public class TimeNumberUtils {
|
||||||
return "RC"+datetime +addLeftZero(s, length);
|
return "RC"+datetime +addLeftZero(s, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static synchronized String getXJTaskCode() {
|
public static synchronized String getLXTaskCode() {
|
||||||
sequence = sequence >= 999999 ? 1 : sequence + 1;
|
sequence = sequence >= 999999 ? 1 : sequence + 1;
|
||||||
String datetime = new SimpleDateFormat("yyMMddHHmmss")
|
String datetime = new SimpleDateFormat("yyMMddHHmmss")
|
||||||
.format(new Date());
|
.format(new Date());
|
||||||
String s = Integer.toString(sequence);
|
String s = Integer.toString(sequence);
|
||||||
return "XJ"+datetime +addLeftZero(s, length);
|
return "LX"+datetime +addLeftZero(s, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static synchronized String getGTTaskCode() {
|
public static synchronized String getGTTaskCode() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue