AgvMoveService.java
6.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package com.huaheng.api.pda.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.pda.domain.AgvMoveDetailDomain;
import com.huaheng.api.pda.domain.AgvMoveDomain;
import com.huaheng.api.pda.domain.AgvMoveHeaderDomain;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.BusinessException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
import com.huaheng.pc.task.agvTask.domain.AgvTask;
import com.huaheng.pc.task.agvTask.service.AgvTaskService;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Component
@Transactional
public class AgvMoveService {
@Resource
private LocationService locationService;
@Resource
private TaskHeaderService taskHeaderService;
@Resource
private TaskDetailService taskDetailService;
@Resource
private AgvTaskService agvTaskService;
/**
* 商片仓,从起点 工作台到终点 自动区或手动去
* 原料仓 从起点 工作台到终点 缓存区,从起点 缓存区到终点 工作台
*
* agv搬运任务
* @param agvMoveDomain
*/
@Transactional
public AjaxResult agvMove(AgvMoveDomain agvMoveDomain){
//创建主任务
if(agvMoveDomain==null){
return AjaxResult.error("接收数据为空");
}
AgvMoveHeaderDomain headerDomain=agvMoveDomain.getHeaderDomain();
List<AgvMoveDetailDomain> detailDomains=agvMoveDomain.getMoveDetailDomains();
if(StringUtils.isEmpty(headerDomain.getWorkCode())){
return AjaxResult.error("请填写工作台");
}
//保存taskheader和taskdetail
TaskHeader task=createTaskHeaderForMove(headerDomain,detailDomains);
//agv搬运任务,生成agv任务
// AgvTask agvTask=agvTaskService.createAgvTaskByTaskHeader(task);
// task.setAgvNo(agvTask.getTaskNo());
// taskHeaderService.updateById(task);
return AjaxResult.success();
}
public TaskHeader createTaskHeaderForMove(AgvMoveHeaderDomain headerDomain,List<AgvMoveDetailDomain> detailDomains){
TaskHeader taskHeader=new TaskHeader();
taskHeader.setWarehouseCode(QuantityConstant.WAREHOUSECODE);
taskHeader.setCompanyCode(QuantityConstant.COMPANYCODE);
taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT);
taskHeader.setZoneCode(headerDomain.getZoneCode());
Location location=null;
location= locationService.getLocationCodeByWorkCodeEmpty(headerDomain.getZoneCode(),headerDomain.getWorkCode(),taskHeader.getIsEmpty());
if(location==null){
throw new BusinessException("找不到该设备对应空闲库位");
}
if(StringUtils.isNotEmpty(headerDomain.getContainerCode())){
//B库区,有托盘,pda选择区域,
if(StringUtils.isNotEmpty(headerDomain.getTaskType())&&headerDomain.getTaskType().equals("1")){
taskHeader.setPort(headerDomain.getWorkCode());
taskHeader.setTaskType(QuantityConstant.TASK_TYPE_WHOLERECEIPT);
taskHeader.setToPort(location.getCode());
}else{
taskHeader.setPort(headerDomain.getWorkCode());
taskHeader.setTaskType(QuantityConstant.TASK_TYPE_WHOLESHIPMENT);
taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_SHIPMENT);
taskHeader.setToPort(location.getCode());
}
}else{
//A库区,无托盘
if(StringUtils.isNotEmpty(headerDomain.getTaskType())&&headerDomain.getTaskType().equals("1")){
taskHeader.setPort(headerDomain.getWorkCode());
taskHeader.setToPort(headerDomain.getWorkCode());
taskHeader.setTaskType(QuantityConstant.TASK_TYPE_AGV_MOVE_RECEIPT);
taskHeader.setToPort(location.getCode());
}else{
taskHeader.setPort(headerDomain.getWorkCode());
taskHeader.setTaskType(QuantityConstant.TASK_TYPE_AGV_MOVE_SHIPMENT);
taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_SHIPMENT);
taskHeader.setToPort(location.getCode());
}
}
taskHeader.setFromLocation(location.getCode());
taskHeader.setToLocation(location.getCode());
taskHeader.setContainerCode(headerDomain.getContainerCode());
taskHeader.setSendTo(QuantityConstant.TASK_SEND_TO_AGV);
//查找该入库口出库口是否有相同的还未完成的任务
LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
taskHeaderLambdaQueryWrapper.eq(TaskHeader::getPort,taskHeader.getPort());
taskHeaderLambdaQueryWrapper.eq(TaskHeader::getToPort,taskHeader.getToPort());
taskHeaderLambdaQueryWrapper.eq(TaskHeader::getTaskType,taskHeader.getTaskType());
taskHeaderLambdaQueryWrapper.lt(TaskHeader::getStatus,QuantityConstant.TASK_STATUS_COMPLETED);
taskHeaderLambdaQueryWrapper.last("limit 1");
TaskHeader preTaskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper);
if(preTaskHeader!=null){
throw new BusinessException("该工作台还有未完成的任务,请稍等");
}
if(!taskHeaderService.save(taskHeader)){
throw new BusinessException("创建主任务失败");
}
//保存TaskDetail任务明细
createTaskDetailForMove(detailDomains,taskHeader);
return taskHeader;
}
public void createTaskDetailForMove(List<AgvMoveDetailDomain> detailDomains,TaskHeader task){
for (AgvMoveDetailDomain detailDomain:detailDomains){
TaskDetail taskDetail=new TaskDetail();
taskDetail.setTaskId(task.getId());
taskDetail.setTaskType(task.getTaskType());
taskDetail.setWarehouseCode(task.getWarehouseCode());
taskDetail.setCompanyCode(task.getCompanyCode());
taskDetail.setMaterialCode(detailDomain.getMaterialCode());
taskDetail.setQty(detailDomain.getQyt());
taskDetail.setContainerCode(task.getContainerCode());
taskDetail.setRollNumber(detailDomain.getRollNumber());
if(!taskDetailService.save(taskDetail)){
throw new BusinessException("创建任务明细失败");
}
}
}
}