package com.zy.asrs.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.AgvWrkMast;
|
import com.zy.asrs.entity.param.AgvTaskCreateParam;
|
import com.zy.asrs.entity.param.AgvTaskParam;
|
import com.zy.asrs.entity.param.AgvTaskkDescribeParam;
|
import com.zy.asrs.mapper.AgvWrkMastMapper;
|
import com.zy.asrs.service.AgvLocMastService;
|
import com.zy.asrs.service.AgvWrkDetlService;
|
import com.zy.asrs.service.AgvWrkMastService;
|
import com.zy.asrs.service.ApiLogService;
|
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 java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
@Service
|
@Slf4j
|
public class AgvWrkMastServiceImp extends ServiceImpl<AgvWrkMastMapper, AgvWrkMast> implements AgvWrkMastService {
|
|
@Value("${agv.url}")
|
private String url;
|
|
@Value("${agv.taskCreatePath}")
|
private String taskCreatePath;
|
|
@Value("${agv.containerMoveInPath}")
|
private String containerMoveInPath;
|
|
@Value("${agv.containerMoveOutPath}")
|
private String containerMoveOutPath;
|
|
@Autowired
|
AgvWrkMastMapper agvWrkMastMapper;
|
@Autowired
|
AgvWrkDetlService agvWrkDetlService;
|
@Autowired
|
AgvLocMastService agvLocMastService;
|
@Autowired
|
ApiLogService apiLogService;
|
|
public void updateWrkStsByWrkNo(int wrkNo, long wrkSts) {
|
AgvWrkMast agvWrkMast = this.selectById(wrkNo);
|
//判断要修改的工作档状态是否合理,如果不合理则抛出异常
|
checkWrkSts(agvWrkMast,wrkSts);
|
agvWrkMast.setWrkSts(wrkSts);
|
this.updateById(agvWrkMast);
|
}
|
|
// TODO 判断规则
|
private boolean checkWrkSts(AgvWrkMast agvWrkMast,long wrkSts){
|
|
|
|
return true;
|
}
|
|
public int startWrk(List<AgvWrkMast> agvWrkMastList, String taskType) throws IOException {
|
|
AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam();
|
agvTaskCreateParam.setTaskType(taskType);
|
|
// //调用容器入场时所需要参数
|
// Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>();
|
// List<Map<String,String>> positionCodeMapList = new ArrayList<>();
|
// containerMoveParam.put("containerMoveIns",positionCodeMapList);
|
|
getRequestParam(agvTaskCreateParam,agvWrkMastList);
|
|
return doHttpRequest(agvTaskCreateParam,"上架任务下发",url, taskCreatePath,null,"127.0.0.1");
|
|
//return containerMoveParam;
|
}
|
|
//容器入场
|
public int containerMove(List<AgvWrkMast> agvWrkMastList) throws IOException {
|
//调用容器入场时所需要参数
|
Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>();
|
List<Map<String,String>> positionCodeMapList = new ArrayList<>();
|
containerMoveParam.put("containerMoveIns",positionCodeMapList);
|
|
getContainerMoveParam(agvWrkMastList,positionCodeMapList);
|
return doHttpRequest(containerMoveParam,"容器入场任务下发",url, containerMoveInPath,null,"127.0.0.1");
|
|
}
|
|
//容器离场
|
public int containerMoveOut(List<AgvWrkMast> agvWrkMastList){
|
Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>();
|
List<Map<String,String>> positionCodeMapList = new ArrayList<>();
|
containerMoveParam.put("containerMoveOuts",positionCodeMapList);
|
for(AgvWrkMast agvWrkMast : agvWrkMastList){
|
Map<String,String> positionCodeMap = new HashMap<>();
|
positionCodeMap.put("positionCode",agvWrkMast.getLocNo());
|
positionCodeMapList.add(positionCodeMap);
|
}
|
return doHttpRequest(containerMoveParam,"容器离场任务下发",url, containerMoveOutPath,null,"127.0.0.1");
|
}
|
|
public boolean insertByIncrease(AgvWrkMast agvWrkMast) {
|
int index = this.baseMapper.insertByIncrease(agvWrkMast);
|
|
return index > 0;
|
}
|
|
private void getContainerMoveParam(List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){
|
//往容器入场参数中放入源站点位置
|
for(AgvWrkMast agvWrkMast : agvWrkMastList){
|
Map<String,String> positionCodeMap = new HashMap<>();
|
positionCodeMap.put("positionCode",agvWrkMast.getSourceLocNo());
|
positionCodeMapList.add(positionCodeMap);
|
}
|
}
|
|
private void getRequestParam(AgvTaskCreateParam agvTaskCreateParam,List<AgvWrkMast> agvWrkMastList){
|
List<AgvTaskParam> agvTaskParamList = agvWrkMastList.stream().map(agvWrkMast -> {
|
AgvTaskParam agvTaskParam = new AgvTaskParam();
|
AgvTaskkDescribeParam agvTaskkDescribeParam = new AgvTaskkDescribeParam();
|
agvTaskParam.setTaskDescribe(agvTaskkDescribeParam);
|
//AgvTaskParam
|
agvTaskParam.setTaskCode(agvWrkMast.getWrkNo().toString());
|
agvTaskParam.setTaskPriority(agvWrkMast.getIoPri().intValue());
|
|
//AgvTaskkDescribeParam
|
agvTaskkDescribeParam.setFromLocationCode(agvWrkMast.getSourceLocNo());
|
agvTaskkDescribeParam.setToLocationCode(agvWrkMast.getLocNo());
|
agvTaskkDescribeParam.setContainerCode(agvWrkMast.getBarcode());
|
return agvTaskParam;
|
}).collect(Collectors.toList());
|
|
agvTaskCreateParam.setTasks(agvTaskParamList);
|
}
|
|
private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip){
|
String response = "";
|
boolean success = false;
|
|
try {
|
response = new HttpHandler.Builder()
|
.setUri(url)
|
.setPath(path)
|
.setJson(JSONObject.toJSONString(requestParam))
|
.build()
|
.doPost();
|
JSONObject jsonObject = JSON.parseObject(response);
|
|
int code = (int) jsonObject.get("code");
|
if(code != 0){
|
throw new CoolException("调用AGV响应错误");
|
}
|
success = true;
|
return code;
|
}catch (Exception e){
|
log.error(e.getMessage());
|
throw new CoolException("调用AGV响应错误");
|
}finally {
|
apiLogService.save(
|
namespace,
|
url + path,
|
appkey,
|
ip,
|
JSON.toJSONString(JSONObject.toJSONString(requestParam)),
|
response,
|
success
|
);
|
}
|
|
}
|
|
}
|