diff --git a/youchain-system/src/main/java/com/youchain/AppRun.java b/youchain-system/src/main/java/com/youchain/AppRun.java index 472bfa7..4aa6a42 100644 --- a/youchain-system/src/main/java/com/youchain/AppRun.java +++ b/youchain-system/src/main/java/com/youchain/AppRun.java @@ -55,6 +55,8 @@ public class AppRun { // 或者在 application.yml 添加文件路径,方便 kill,kill `cat /home/eladmin/app.pid` springApplication.addListeners(new ApplicationPidFileWriter()); springApplication.run(args); + + } @Bean diff --git a/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java b/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java index 9bae964..e48a867 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java @@ -1,19 +1,20 @@ /* -* Copyright 2019-2020 Zheng Jie -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.youchain.businessdata.repository; + import com.youchain.businessdata.domain.AgvTask; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -22,63 +23,18 @@ import org.springframework.data.jpa.repository.Query; import java.util.List; /** -* @website https://eladmin.vip -* @author baobinglin -* @date 2023-08-18 -**/ + * @author baobinglin + * @website https://eladmin.vip + * @date 2023-08-18 + **/ public interface AgvTaskRepository extends JpaRepository, JpaSpecificationExecutor { - /** - * 查询滚筒出库任务执行中的任务 - * @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 */ @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) List 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 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 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 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 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 queryLineAgvTask(String line_slot_code); } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java index 7fc0f65..637e4b2 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java @@ -68,7 +68,7 @@ public class KMReSController { String missionStatus = missionStateCallback.getMissionStatus();//作业当前状态 try { //料箱出库任务 - if(id.indexOf("XJ")!=-1){ + if(id.indexOf("LX")!=-1){ if(missionStatus.equals("CANCELED")){ List agvTaskList= agvTaskService.findByjobCode(id); for(AgvTask agvTask:agvTaskList){ @@ -143,6 +143,7 @@ public class KMReSController { * * @param task */ + @Async public void returnIssue(@RequestBody Task task) { ReturnIssueInfo returnIssueInfo = getReturnIssueInfo(task); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java index 3cc3097..0efb4bf 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java @@ -1,18 +1,18 @@ /* -* Copyright 2019-2020 Zheng Jie -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.youchain.businessdata.service; import com.youchain.annotation.Log; @@ -23,70 +23,79 @@ import com.youchain.businessdata.service.dto.AgvTaskDto; import com.youchain.businessdata.service.dto.AgvTaskQueryCriteria; import io.swagger.annotations.Api; import org.springframework.data.domain.Pageable; + import java.util.Map; import java.util.List; import java.io.IOException; import javax.servlet.http.HttpServletResponse; /** -* @website https://eladmin.vip -* @description 服务接口 -* @author baobinglin -* @date 2023-08-18 -**/ + * @author baobinglin + * @website https://eladmin.vip + * @description 服务接口 + * @date 2023-08-18 + **/ public interface AgvTaskService { /** - * 查询数据分页 - * @param criteria 条件 - * @param pageable 分页参数 - * @return Map - */ - Map queryAll(AgvTaskQueryCriteria criteria, Pageable pageable); + * 查询数据分页 + * + * @param criteria 条件 + * @param pageable 分页参数 + * @return Map + */ + Map queryAll(AgvTaskQueryCriteria criteria, Pageable pageable); /** - * 查询所有数据不分页 - * @param criteria 条件参数 - * @return List - */ + * 查询所有数据不分页 + * + * @param criteria 条件参数 + * @return List + */ List queryAll(AgvTaskQueryCriteria criteria); /** * 根据ID查询 + * * @param id ID * @return AgvTaskDto */ AgvTaskDto findById(Integer id); /** - * 创建 - * @param resources / - * @return AgvTaskDto - */ + * 创建 + * + * @param resources / + * @return AgvTaskDto + */ AgvTaskDto create(AgvTask resources); /** - * 编辑 - * @param resources / - */ + * 编辑 + * + * @param resources / + */ void update(AgvTask resources); /** - * 多选删除 - * @param ids / - */ + * 多选删除 + * + * @param ids / + */ void deleteAll(Integer[] ids); /** - * 导出数据 - * @param all 待导出的数据 - * @param response / - * @throws IOException / - */ + * 导出数据 + * + * @param all 待导出的数据 + * @param response / + * @throws IOException / + */ void download(List all, HttpServletResponse response) throws IOException; /** * 发送货架搬运接口任务 + * * @param agvTasks * @return */ @@ -94,45 +103,25 @@ public interface AgvTaskService { /** * 发送料箱搬运接口任务 + * * @param agvTasks * @return */ - public String sendAgvTaskLXImpl(List agvTasks); + String sendAgvTaskLXImpl(List agvTasks); - /** - * 发送滚筒搬运接口任务 - * @param agvTasks1-满箱任务 - * @param agvTasks1-控销任务 - * @return - */ - public String sendAgvTaskGTImpl(List agvTasks1,List agvTasks2); - - - String containerIn(String containerCode,String position); + String containerIn(String containerCode, String position); /** * 容器出场 + * * @param containerCode-容器编号 * @return */ String containerOut(String containerCode); - /** - * 查询容器状态 - * @param containerCode-容器编号 - * @return - */ - String containerQuery(String containerCode); - - /** - * 查询输送线上料箱总数 - * @param taskCode-输送线编号 - * @return - */ - int QueryCount(String taskCode); - /** * 读取输送线、流利式货架状态 + * * @param conveyorId-输送线编号 * @return */ @@ -142,32 +131,43 @@ public interface AgvTaskService { /** * 任务回报更新状态 + * * @param agvTask * @param status * @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 findById(List ids); +// List findById(List ids); double queryBillCodeSum(String billCode); /** - *根据组号+料箱号招找到对应的AGV + * 根据组号+料箱号招找到对应的AGV + * * @param jobForce-任务组号 * @param containerCode-容器号 * @return */ - AgvTask findByjobCode(String jobForce,String containerCode); + AgvTask findByjobCode(String jobForce, String containerCode); /** - *根据组号+找到对应的AGV集合 + * 根据组号+找到对应的AGV集合 + * * @param jobForce-任务组号 * @return */ List findByjobCode(String jobForce); + /** + * + * @param status + * @param type + * @return + */ + List queryByAgvTask(String status,String type); + } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java index 76c22fc..c7bc0b9 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java @@ -235,7 +235,7 @@ public class AgvTaskServiceImpl implements AgvTaskService { @Override public synchronized String sendAgvTaskLXImpl(List agvTasks) { JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); - String agvCode = TimeNumberUtils.getXJTaskCode(); + String agvCode = TimeNumberUtils.getLXTaskCode(); Map objMap = new LinkedHashMap<>(); objMap.put("orgId", agvCode);//库存组织 ID(或工厂代码,供应商代码) objMap.put("requestId", agvCode);//请求 id @@ -273,10 +273,19 @@ public class AgvTaskServiceImpl implements AgvTaskService { objMap.put("missionData", missionDataArray); jsonObject.putAll(objMap); - System.out.println(jsonObject.toString()); - String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission, jsonObject.toString()); + String resultJson="{\n" + + " \"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); String code = resulObject.getString("code") == null ? "" : resulObject.getString("code"); + if (code.equals("0")) { for (int i = 0; i < agvTasks.size(); i++) { AgvTask agvTask = agvTasks.get(i); @@ -299,92 +308,6 @@ public class AgvTaskServiceImpl implements AgvTaskService { return resultJson; } - @Override - public synchronized String sendAgvTaskGTImpl(List agvTasks1, List agvTasks2) { - JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); - String agvCode = TimeNumberUtils.getGTTaskCode(); - Map 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 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 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 public synchronized String containerIn(String containerCode, String position) { JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); @@ -406,28 +329,6 @@ public class AgvTaskServiceImpl implements AgvTaskService { 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 public void getConveyorState(String conveyorId) { /* String resultJson= HttpPostUtil.sendPostReq(UrlApi.agv_url, jsonObject.toString());//返回ResponseJson*/ @@ -463,7 +364,7 @@ public class AgvTaskServiceImpl implements AgvTaskService { @Override public void agvTaskCallback(AgvTask agvTask, Task task, String status) { - if (status.equals("COMPLETED")) { + if (status.equals("COMPLETED")) { //入库 if (agvTask.getType().equals(BizStatus.ASN)) { //增加库存 @@ -524,16 +425,6 @@ public class AgvTaskServiceImpl implements AgvTaskService { } } - @Override - public List findById(List ids) { - String agvTaskIds = StringUtils.strip(ids.toString(), "[]"); - String hql = " from AgvTask agv where agv.id in (" + agvTaskIds + ") "; - Query query = entityMapper.createQuery(hql); - List agvTaskList = query.getResultList(); - return agvTaskList; - } - - @Override public double queryBillCodeSum(String 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; } + @Override + public List 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 agvTaskList = query.getResultList(); + return agvTaskList; + } + } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java index 03d7d8c..b82e12e 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java @@ -447,7 +447,7 @@ public class MlsServiceImpl implements MlsService { 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); //生成Task @@ -478,14 +478,17 @@ public class MlsServiceImpl implements MlsService { batchCreateOrUpdate.batchUpdate(inventoryToUpdate); } + //批量生成出库明细 if (!pickDetailToCreate.isEmpty()) { batchCreateOrUpdate.batchCreate(pickDetailToCreate); } + //批量生成agv任务 if (!agvTaskToCreate.isEmpty()) { batchCreateOrUpdate.batchCreate(agvTaskToCreate); } + //批量生成task任务 if (!taskToCreate.isEmpty()) { batchCreateOrUpdate.batchCreate(taskToCreate); } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java index 6ddb96d..5a35c5d 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java @@ -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) { // 生成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); // 生成入库任务 diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java index 4b7ae65..8125846 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java @@ -2,14 +2,12 @@ package com.youchain.modules.quartz.task; import com.youchain.businessdata.inputJson.MoInfo; import com.youchain.businessdata.inputJson.MoParams; -import com.youchain.businessdata.rest.MlsController; import com.youchain.businessdata.service.MlsService; import com.youchain.service.LogService; import com.youchain.utils.UrlApi; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import java.util.HashSet; import java.util.Set; diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java index ae6de15..a3ff796 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java @@ -26,77 +26,45 @@ import java.util.concurrent.CopyOnWriteArrayList; @Service public class pickTask { - @Autowired - public AgvTaskRepository agvTaskRepository; - @Autowired public AgvTaskService agvTaskService; - private Map> 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(); public void pickTask() { - //按线边分组 下发出库任务 - List objectList = agvTaskRepository.queryGroupAgvTask(); - for (Object obj : objectList) { - List agvTaskList = agvTaskRepository.queryLineAgvTask(obj.toString()); - for (AgvTask agvTask : agvTaskList) { - List 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(); + // 下发出库任务 + List agvTaskList = agvTaskService.queryByAgvTask(BizStatus.OPEN,BizStatus.PICK); + if (agvTaskList.size() > 0) { + if ((agvTaskList.size() == MAX_TASK_COUNT)) { + Result(agvTaskService.sendAgvTaskLXImpl(agvTaskList)); lastTaskTime = System.currentTimeMillis(); - }else{ - log.info("小件出库料箱任务未满足条件!"); + }else if((System.currentTimeMillis() - lastTaskTime >=TIMEOUT_MS) ){ + if(agvTaskList.size()>MAX_TASK_COUNT){ + List newAgvTask = agvTaskList.subList(0,MAX_TASK_COUNT); + Result(agvTaskService.sendAgvTaskLXImpl(newAgvTask)); + }else{ + Result(agvTaskService.sendAgvTaskLXImpl(agvTaskList)); + lastTaskTime = System.currentTimeMillis(); + } + } else { + throw new RuntimeException("出库料箱任务未满足条件(不满足五个料箱需等待2分钟)!"); } + } else { + throw new RuntimeException("无出库料箱任务!"); } } - private boolean isLine() { - // 判断缓存输送线上的料箱总数+AGV执行中的数量 不能超过6个 - int queryCount = agvTaskService.QueryCount("6x1"); - - //出库料箱AGV执行中的数量 - //List agvTaskList= agvTaskService.findByAgvList(BizStatus.PICK,"PICKER_MOVE"); - if(queryCount<=6){ - return true; + private void Result(String result) { + if(result==null ||result.length()==0){ + throw new RuntimeException("任务下发失败!"); } - 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 tasksInGroup : groupedTasks.values()) { - List agvTaskList= agvTaskService.findById(tasksInGroup); - String rul=agvTaskService.sendAgvTaskLXImpl(agvTaskList); - System.out.println(rul); - } - - } } diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/utils/TimeNumberUtils.java b/youchain-system/src/main/java/com/youchain/modules/quartz/utils/TimeNumberUtils.java index a1df986..c6ea230 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/utils/TimeNumberUtils.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/utils/TimeNumberUtils.java @@ -31,12 +31,12 @@ public class TimeNumberUtils { return "RC"+datetime +addLeftZero(s, length); } - public static synchronized String getXJTaskCode() { + public static synchronized String getLXTaskCode() { sequence = sequence >= 999999 ? 1 : sequence + 1; String datetime = new SimpleDateFormat("yyMMddHHmmss") .format(new Date()); String s = Integer.toString(sequence); - return "XJ"+datetime +addLeftZero(s, length); + return "LX"+datetime +addLeftZero(s, length); } public static synchronized String getGTTaskCode() {