Files
scrq-hd/RuoYi-Vue/.svn/pristine/07/07fe5fd44db93b94ef8bb0774d9f0de7e4a6ca97.svn-base
2025-07-03 10:34:04 +08:00

638 lines
31 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.ruoyi.wms.controller;
import com.alibaba.fastjson.JSONObject;
import com.cmeim.common.core.utils.BeanUtil;
import com.cmeim.common.core.utils.DateUtil;
import com.cmeim.common.core.utils.ExcelExportUtil;
import com.cmeim.common.core.web.controller.GenericController;
import com.cmeim.common.core.web.domain.Respond;
import com.cmeim.common.core.web.page.PageVo;
import com.ruoyi.ruiYiController.exception.ServiceException;
import com.ruoyi.wms.enums.AgvTaskEnum;
import com.ruoyi.wms.enums.RequestEnum;
import com.ruoyi.wms.po.*;
import com.ruoyi.wms.repository.*;
import com.ruoyi.wms.service.AGVService;
import com.ruoyi.wms.service.ScheduleService;
import com.ruoyi.wms.vo.*;
import com.google.common.collect.Lists;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @Verasion:1.0
* @Author:DZY
* @Date:2023/6/26
**/
@Api(tags = "数据采集接口")
@RestController
@Slf4j
@RequestMapping(value = "agv")
public class AgvController extends GenericController {
@Autowired
private AgvTaskRepository agvTaskRepository;
@Autowired
private AGVService agvService;
@Autowired
private ContainerInfoRepository containerInfoRepository;
@Autowired
private OrderInfoRepository orderInfoRepository;
@Autowired
private StationInfoRepository stationInfoRepository;
@Autowired
private ShelfInfoRepository shelfInfoRepository;
@Autowired
private ScheduleService scheduleService;
@ApiOperation(value = "列表")
@GetMapping(value = "list")
public Respond list(PageVo pv, AgvTask agvTask) {
PageRequest pageRequest = PageRequest.of(pv.getPageNo() - 1, pv.getPageSize(),
Sort.by(sortOrder(agvTask.getOrders())));
Page page = agvTaskRepository.findAll(buildSpecification(agvTask), pageRequest);
List<AgvTask> list = page.getContent();
pv.setRecordsTotal(page.getTotalElements());
pv.setData(list);
return buildSuccess(pv);
}
@ApiOperation(value = "导出excel")
@PostMapping("exportExcel")
public void export(AgvTask agvTask, HttpServletResponse response) throws Exception {
List<AgvTask> list = agvTaskRepository.findAll(buildSpecification(agvTask));
List<AgvTaskExportVo> exportList = new ArrayList<>();
for (AgvTask task : list) {
AgvTaskExportVo agvTaskExportVo = BeanUtil.copyProperties(task, AgvTaskExportVo.class);
exportList.add(agvTaskExportVo);
}
// 创建工作簿对象
SXSSFWorkbook workbook = new SXSSFWorkbook(1000);
// 创建工作表
SXSSFSheet sheet = workbook.createSheet("AGV任务列表");
String[] rowsName = new String[]{"序号", "请求单号", "类型", "json", "任务状态", "处理结果", "创建人", "创建时间"};
List<Object[]> dataList = new ArrayList<Object[]>();
Object[] objs = null;
int i = 1;
for (AgvTaskExportVo agvTaskExportVo : exportList) {
if (agvTaskExportVo.getDictType() == 1) {
agvTaskExportVo.setDictTypeShow("请求空箱");
} else if (agvTaskExportVo.getDictType() == 2) {
agvTaskExportVo.setDictTypeShow("入水测");
} else if (agvTaskExportVo.getDictType() == 3) {
agvTaskExportVo.setDictTypeShow("出水测");
} else if (agvTaskExportVo.getDictType() == 4) {
agvTaskExportVo.setDictTypeShow("送待检");
} else if (agvTaskExportVo.getDictType() == 5) {
agvTaskExportVo.setDictTypeShow("送检验");
} else if (agvTaskExportVo.getDictType() == 6) {
agvTaskExportVo.setDictTypeShow("回待检");
} else if (agvTaskExportVo.getDictType() == 7) {
agvTaskExportVo.setDictTypeShow("送抽检");
} else if (agvTaskExportVo.getDictType() == 8) {
agvTaskExportVo.setDictTypeShow("送成品库");
} else if (agvTaskExportVo.getDictType() == 9) {
agvTaskExportVo.setDictTypeShow("出成品库");
} else if (agvTaskExportVo.getDictType() == 10) {
agvTaskExportVo.setDictTypeShow("空箱入库");
} else if (agvTaskExportVo.getDictType() == 11) {
agvTaskExportVo.setDictTypeShow("呼叫空货架");
}
if (agvTaskExportVo.getStatus() == 1) {
agvTaskExportVo.setStatusShow("未发起");
} else if (agvTaskExportVo.getDictType() == 2) {
agvTaskExportVo.setStatusShow("进行中");
} else if (agvTaskExportVo.getDictType() == 3) {
agvTaskExportVo.setStatusShow("已完成");
} else if (agvTaskExportVo.getDictType() == 4) {
agvTaskExportVo.setStatusShow("失败");
} else if (agvTaskExportVo.getDictType() == 5) {
agvTaskExportVo.setStatusShow("取消");
} else if (agvTaskExportVo.getStatus() == 6) {
agvTaskExportVo.setStatusShow("挂起");
}
objs = new Object[rowsName.length];
objs[0] = i;
objs[1] = agvTaskExportVo.getRequestCode();
objs[2] = agvTaskExportVo.getDictTypeShow();
objs[3] = agvTaskExportVo.getJson();
objs[4] = agvTaskExportVo.getStatusShow();
objs[5] = agvTaskExportVo.getMessage();
objs[6] = agvTaskExportVo.getCreatedBy();
objs[7] = agvTaskExportVo.getCreatedDt();
dataList.add(objs);
i += 1;
}
ExcelExportUtil.getExportWorkbook(workbook, sheet, rowsName, dataList);
ExcelExportUtil.sendHttpResponse(response, "Agv", workbook);
}
private Specification buildSpecification(AgvTask agvTask) {
Specification<AgvTask> specification = new Specification<AgvTask>() {
@Override
public Predicate toPredicate(Root<AgvTask> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
List<Predicate> predicates = Lists.newArrayList();
if (agvTask.getRequestCode() != null) {
predicates.add(cb.like(root.get("requestCode").as(String.class), "%" + agvTask.getRequestCode() + "%"));
}
if (agvTask.getMessage() != null) {
predicates.add(cb.like(root.get("message").as(String.class), "%" + agvTask.getMessage() + "%"));
}
if (agvTask.getDictType() != null) {
predicates.add(cb.equal(root.get("dictType").as(Integer.class), agvTask.getDictType()));
}
if (agvTask.getStatus() != null) {
predicates.add(cb.equal(root.get("status").as(Integer.class), agvTask.getStatus()));
}
if (StringUtils.isNotBlank(agvTask.getCreatedDtStart())) {
predicates.add(cb.greaterThanOrEqualTo(root.get("createdDt").as(String.class), agvTask.getCreatedDtStart()));
}
if (StringUtils.isNotBlank(agvTask.getCreatedDtEnd())) {
predicates.add(cb.lessThanOrEqualTo(root.get("createdDt").as(String.class), agvTask.getCreatedDtEnd()));
}
if (agvTask.getStatusArr() != null) {
CriteriaBuilder.In<Integer> in = cb.in(root.get("status").as(Integer.class));
for (Integer status : agvTask.getStatusArr()) {
in.value(status);
}
predicates.add(in);
}
if (agvTask.getDictTypeArr() != null) {
CriteriaBuilder.In<Integer> in = cb.in(root.get("dictType").as(Integer.class));
for (Integer status : agvTask.getDictTypeArr()) {
in.value(status);
}
predicates.add(in);
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
return specification;
}
/**
* AGV任务回调
*
* @param jsonObject 回调参数
* @return 结果返回
*/
@ApiOperation(value = "AGV任务回调")
@PostMapping(value = "TaskStatusCallback")
public JSONObject TaskStatusCallback(@RequestBody JSONObject jsonObject) {
//log.info("回调任务all" + jsonObject);
String taskCode = jsonObject.getString("taskCode");
final AgvTask agvTask = agvTaskRepository.findByRequestCode(taskCode);
String status = jsonObject.getString("status");
if (StringUtils.isNotBlank(status)) {
if (status.equals("fail")) {
agvService.updateAgvTask(taskCode, agvTask.getDictType(), agvTask.getJson(), AgvTaskEnum.FAIL.getCode(), jsonObject.getString("message"));
} else if (status.equals("success")) {
//获取回调类型
String eventType = jsonObject.getString("eventType");
if (eventType.equals("task")) {
log.info("回调任务task" + jsonObject);
//更新任务状态
agvService.updateAgvTask(taskCode, agvTask.getDictType(), agvTask.getJson(), AgvTaskEnum.FINISH.getCode(), jsonObject.getString("message"));
//成功回调
agvService.callBackSuccess(agvTask, jsonObject);
}
//取箱完成时,修改工位状态
else if (eventType.equals("tote_load") && agvTask.getDictType() > 3) {
String locationCode = jsonObject.getString("locationCode");
agvService.updateStationStatus(locationCode);
}
//放箱完成回调,滚筒线请求空箱
else if (eventType.equals("tote_unload") && agvTask.getDictType() == 1) {
String param = jsonObject.toJSONString();
agvService.noticeToPlc(param);
}
} else if (status.equals("cancel")) {
agvService.updateAgvTask(taskCode, agvTask.getDictType(), agvTask.getJson(), AgvTaskEnum.CANCEL.getCode(), jsonObject.getString("message"));
} else if (status.equals("suspend")) {
agvService.updateAgvTask(taskCode, agvTask.getDictType(), agvTask.getJson(), AgvTaskEnum.PENDING.getCode(), jsonObject.getString("message"));
}
}
JSONObject result = new JSONObject();
result.put("code", 0);
result.put("msg", "success");
result.put("data", "");
return result;
}
@ApiOperation(value = "空箱入库")
@PostMapping(value = "EmptyContainerInStore")
@Transactional
public Respond EmptyContainerInStore(@RequestBody AgvRequestVo requestVo) {
//校验周转箱是否存在以及状态
ContainerInfo containerInfo = containerInfoRepository.findByContainerNumber(requestVo.getContainerCode());
if (containerInfo == null) {
throw new ServiceException("周转箱号不存在:" + requestVo.getContainerCode());
}
if (containerInfo.getContainerStatus() != 15 && containerInfo.getContainerStatus() != 20 && containerInfo.getContainerStatus() != 25) {
throw new ServiceException("周转箱号状态不是入库中的状态:" + requestVo.getContainerCode());
}
requestVo.setType(1);
requestVo.setRequestType(RequestEnum.NULLBOXINSTORE.getCode());
requestVo.setFromLocationCode(requestVo.getFromLocationCode());
requestVo.setToLocationCode("LA_SHELF_STORAGE");
requestVo.setContainerCode(requestVo.getContainerCode());
String result = agvService.taskParamCreate(requestVo);
if (JSONObject.parseObject(result).getInteger("code") == 0) {
return buildSuccess("请求成功");
}
return buildFailure(JSONObject.parseObject(result).getString("msg"));
}
@ApiOperation(value = "空料箱出库")
@PostMapping(value = "EmptyContainerOutStore")
public Respond EmptyContainerOutStore(@RequestBody AgvRequestVo agvRequestVo) {
//判断空箱出库任务是否唯一
List<AgvTask> agvTaskList = agvTaskRepository.findByDictTypeAndStatus(RequestEnum.NULLBOX.getCode(), 2);
if (agvTaskList.size() > 6) {
return buildFailure("还有正在执行的出库任务:" + agvTaskList);
}
//设置agv请求类型
agvRequestVo.setRequestType(RequestEnum.NULLBOX.getCode());
agvRequestVo.setType(0);
agvService.EmptyContainerOutStore(agvRequestVo);
return buildSuccess();
}
@ApiOperation(value = "料箱入库")
@PostMapping(value = "ContainerInStore")
public Respond ContainerInStore(@RequestBody AgvRequestVo requestVo) {
//校验周转箱是否存在以及状态
ContainerInfo containerInfo = containerInfoRepository.findByContainerNumber(requestVo.getContainerCode());
if (containerInfo == null) {
throw new ServiceException("周转箱号不存在:" + requestVo.getContainerCode());
}
if (containerInfo.getContainerStatus() != 15 && containerInfo.getContainerStatus() != 20 && containerInfo.getContainerStatus() != 25) {
throw new ServiceException("该料箱在入库状态!" + requestVo.getContainerCode());
}
requestVo.setType(1);
requestVo.setRequestType(RequestEnum.INSTORE.getCode());
requestVo.setToStationCode("LA_SHELF_STORAGE");
String result = agvService.taskParamCreate(requestVo);
if (JSONObject.parseObject(result).getInteger("code") == 0) {
//final ContainerInfo containerInfo = containerInfoRepository.findByContainerNumber(requestVo.getContainerCode());
//containerInfo.setProductionTask(requestVo.productionTask);
//containerInfo.setOnInstoreTime(DateUtil.getCurrentDate());
//final OrderInfo orderInfo = orderInfoRepository.findByProductionTask(requestVo.getProductionTask());
//Integer qty = orderInfo.getPlanQty() - (orderInfo.getInQty() + orderInfo.getOngoingQty() + orderInfo.getOutQty() + orderInfo.getOnoutingCheckQty());
//if (qty > 6) {
// qty = 6;
//}
////入库中数量
//orderInfo.setOngoingQty(orderInfo.getOngoingQty() + qty);
//containerInfo.setQty(qty);
//orderInfoRepository.save(orderInfo);
//containerInfoRepository.save(containerInfo);
return buildSuccess("请求成功");
} else {
return buildSuccess(JSONObject.parseObject(result).getString("msg"));
}
}
@ApiOperation(value = "送待检缓存区")
@PostMapping(value = "sendWaitCheck")
public Respond sendWaitCheck(@RequestBody AgvRequestVo agvRequestVo) {
//校验
if (StringUtils.isBlank(agvRequestVo.getContainerCode())) {
throw new ServiceException("无货架编码,请检查!");
}
if (StringUtils.isBlank(agvRequestVo.getProductionTask())) {
throw new ServiceException("无生产工单号,请检查!");
}
if (StringUtils.isBlank(agvRequestVo.getFromLocationCode())) {
throw new ServiceException("无起始点位置,请检查!");
}
if (agvRequestVo.getBoxNumber() == null) {
throw new ServiceException("无货架数量,请检查!");
}
agvRequestVo.setType(0);
agvRequestVo.setRequestType(RequestEnum.SENDWAITCHECK.getCode());
String toLocationCode = findToLocationCode(15);
agvRequestVo.setToLocationCode(toLocationCode);
final String result = agvService.taskParamCreate(agvRequestVo);
if (JSONObject.parseObject(result).getInteger("code") == 0) {
//修改起点位状态为空闲
StationInfo stationInfo = stationInfoRepository.findByStationCode(agvRequestVo.getFromLocationCode());
if (stationInfo != null) {
stationInfo.setStationStatus(5);
stationInfo.setUpdatedDt(DateUtil.getCurrentDate());
stationInfoRepository.save(stationInfo);
}
//修改终点点位状态为待占用
StationInfo stationInfo1 = stationInfoRepository.findByStationCode(toLocationCode);
stationInfo1.setStationStatus(10);
stationInfo1.setUpdatedDt(DateUtil.getCurrentDate());
stationInfoRepository.save(stationInfo1);
//修改货架信息
ShelfInfo shelfInfo = shelfInfoRepository.findByShelfCode(agvRequestVo.getContainerCode());
if (shelfInfo != null) {
shelfInfo.setStationCode(agvRequestVo.getFromLocationCode());
shelfInfo.setProductionTask(agvRequestVo.getProductionTask());
shelfInfo.setQty(agvRequestVo.getBoxNumber());
shelfInfo.setUpdatedDt(DateUtil.getCurrentDate());
shelfInfo.setPriority(0);
shelfInfo.setStationCode(agvRequestVo.getFromLocationCode());
shelfInfoRepository.save(shelfInfo);
} else {
ShelfInfo shelfInfo1 = new ShelfInfo();
shelfInfo1.setShelfCode(agvRequestVo.getContainerCode());
shelfInfo1.setStationCode(agvRequestVo.getFromLocationCode());
shelfInfo1.setProductionTask(agvRequestVo.getProductionTask());
shelfInfo1.setQty(agvRequestVo.getBoxNumber());
shelfInfo1.setUpdatedDt(DateUtil.getCurrentDate());
shelfInfo1.setPriority(0);
shelfInfo1.setStationCode(agvRequestVo.getFromLocationCode());
shelfInfoRepository.save(shelfInfo);
}
return buildSuccess("请求成功");
}
return buildFailure(JSONObject.parseObject(result).getString("msg"));
}
@ApiOperation(value = "从缓存库位到检验库位")
@PostMapping(value = "sendCheck")
@Transactional
public Respond sendCheck(@RequestBody AgvRequestVo agvRequestVo) {
//校验
if (StringUtils.isNotBlank(agvRequestVo.getLastRequestCode())) {
AgvTask agvTask = agvTaskRepository.findByRequestCode(agvRequestVo.getLastRequestCode());
if (agvTask != null) {
if (agvTask.getStatus() <= 2) {
throw new ServiceException("上次任务还在执行中,任务号:" + agvRequestVo.getLastRequestCode());
}
}
}
if (StringUtils.isBlank(agvRequestVo.getProductionTask())) {
throw new ServiceException("无生产工单号,请检查!");
}
if (StringUtils.isBlank(agvRequestVo.getToLocationCode())) {
throw new ServiceException("无终点位置,请检查!");
}
List<ShelfInfo> shelfInfoList = shelfInfoRepository.findByProductionTaskAndOrderStatus(agvRequestVo.getProductionTask(), 5);
if (shelfInfoList.size() == 0) {
throw new ServiceException("该订单没有货架在缓存库位!");
}
agvRequestVo.setType(0);
agvRequestVo.setContainerCode(shelfInfoList.get(0).getShelfCode());
agvRequestVo.setFromLocationCode(shelfInfoList.get(0).getStationCode());
agvRequestVo.setRequestType(RequestEnum.SENDCHECK.getCode());
String result = agvService.taskParamCreate(agvRequestVo);
if (JSONObject.parseObject(result).getInteger("code") == 0) {
//修改起始点位状态为空闲
StationInfo stationInfo = stationInfoRepository.findByStationCode(agvRequestVo.getFromLocationCode());
if (stationInfo != null) {
stationInfo.setStationStatus(5);
stationInfo.setUpdatedDt(DateUtil.getCurrentDate());
stationInfoRepository.save(stationInfo);
}
//修改终点工位待占用状态
StationInfo stationInfo1 = stationInfoRepository.findByStationCode(agvRequestVo.getToLocationCode());
if (stationInfo1 != null) {
stationInfo1.setStationStatus(10);
stationInfo1.setUpdatedDt(DateUtil.getCurrentDate());
stationInfoRepository.save(stationInfo1);
}
//修改货架的工单状态
ShelfInfo shelfInfo = shelfInfoList.get(0);
shelfInfo.setOrderStatus(10);
shelfInfo.setUpdatedDt(DateUtil.getCurrentDate());
ShelfInfo save = shelfInfoRepository.save(shelfInfo);
String data = JSONObject.parseObject(result).getString("data");
SpotCheckVo spotCheckVo = BeanUtil.copyProperties(save, SpotCheckVo.class);
data = data.replaceAll("\\\"","");
data = data.replace("{", "").replace("}","");
spotCheckVo.setRequestCode(data.substring(0, data.indexOf(":")));
return buildSuccess(spotCheckVo);
}
return buildFailure(JSONObject.parseObject(result).getString("msg"));
}
Lock lock = new ReentrantLock();
@ApiOperation(value = "送抽检")
@PostMapping(value = "sendSpotCheck")
public Respond sendSpotCheck(@RequestBody AgvRequestVo agvRequestVo) {
if (StringUtils.isBlank(agvRequestVo.getFromLocationCode())) {
throw new ServiceException("无起始位置,请检查!");
}
agvRequestVo.setType(0);
agvRequestVo.setRequestType(RequestEnum.SENDSPOTCHECK.getCode());
String result = null;
lock.lock();
try {
//查起始点位对应的货架编码
List<ShelfInfo> shelfInfoList = shelfInfoRepository.findByStationCode(agvRequestVo.getFromLocationCode());
if (shelfInfoList.size() > 0) {
agvRequestVo.setContainerCode(shelfInfoList.get(0).getShelfCode());
} else {
throw new ServiceException("该位置无货架:" + agvRequestVo.getFromLocationCode());
}
final List<StationInfo> stationInfos = stationInfoRepository.findByStationTypeAndStationStatus(25, 5);
if (stationInfos.size() > 0) {
agvRequestVo.setToLocationCode(stationInfos.get(0).getStationCode());
} else {
agvRequestVo.setRequestType(RequestEnum.BACKWAITCHECK.getCode());
}
result = agvService.taskParamCreate(agvRequestVo);
//查找任务单号
if (JSONObject.parseObject(result).getInteger("code") == 0) {
if (stationInfos.size() > 0) {
//修改起始点位状态为空闲
StationInfo stationInfo = stationInfoRepository.findByStationCode(agvRequestVo.getFromLocationCode());
stationInfo.setStationStatus(5);
stationInfo.setUpdatedDt(DateUtil.getCurrentDate());
stationInfoRepository.save(stationInfo);
//修改抽检工位待占用状态
stationInfos.get(0).setStationStatus(10);
stationInfoRepository.save(stationInfos.get(0));
}
String data = JSONObject.parseObject(result).getString("data");
SpotCheckVo spotCheckVo = BeanUtil.copyProperties(shelfInfoList.get(0), SpotCheckVo.class);
data = data.replaceAll("\\\"","");
data = data.replace("{", "").replace("}","");
spotCheckVo.setRequestCode(data.substring(0, data.indexOf(":")));
return buildSuccess(spotCheckVo);
}
} finally {
lock.unlock();
}
return buildFailure(JSONObject.parseObject(result).getString("msg"));
}
@ApiOperation(value = "送成品库")
@PostMapping(value = "sendProdStore")
@Transactional
public Respond sendProdStore(@RequestBody AgvRequestVo agvRequestVo) {
//校验
if (StringUtils.isBlank(agvRequestVo.getContainerCode())) {
throw new ServiceException("无货架编码,请检查!");
}
ShelfInfo byShelfCode = shelfInfoRepository.findByShelfCode(agvRequestVo.getContainerCode());
agvRequestVo.setFromLocationCode(byShelfCode.getStationCode());
agvRequestVo.setType(0);
agvRequestVo.setRequestType(RequestEnum.SENDPRODSTORE.getCode());
String toLocationCode = findToLocationCode(30);
agvRequestVo.setToLocationCode(toLocationCode);
final String result = agvService.taskParamCreate(agvRequestVo);
if (JSONObject.parseObject(result).getInteger("code") == 0) {
//修改起始点位状态为空闲
StationInfo stationInfo = stationInfoRepository.findByStationCode(agvRequestVo.getFromLocationCode());
stationInfo.setStationStatus(5);
stationInfo.setUpdatedDt(DateUtil.getCurrentDate());
stationInfoRepository.save(stationInfo);
//修改终点点位状态为待占用
StationInfo stationInfo1 = stationInfoRepository.findByStationCode(toLocationCode);
stationInfo1.setStationStatus(10);
stationInfo1.setUpdatedDt(DateUtil.getCurrentDate());
stationInfoRepository.save(stationInfo1);
final ShelfInfo shelfInfo = shelfInfoRepository.findByShelfCode(agvRequestVo.getContainerCode());
final OrderInfo orderInfo = orderInfoRepository.findByProductionTask(shelfInfo.getProductionTask());
orderInfo.setProductOngoingQty(orderInfo.getProductOngoingQty() + shelfInfo.getQty());
orderInfo.setUpdatedDt(DateUtil.getCurrentDate());
orderInfoRepository.save(orderInfo);
return buildSuccess("请求成功");
}
return buildFailure(JSONObject.parseObject(result).getString("msg"));
}
@ApiOperation(value = "空货架送回(不用用tcpUtil的空箱入库方法)")
@PostMapping(value = "sendNullShelf")
public Respond sendNullShelf(@RequestBody AgvRequestVo agvRequestVo) {
agvRequestVo.setType(0);
agvRequestVo.setRequestType(RequestEnum.SENDNULLSHELF.getCode());
final String result = agvService.taskParamCreate(agvRequestVo);
if (JSONObject.parseObject(result).getInteger("code") == 0) {
return buildSuccess("请求成功");
}
return buildFailure(JSONObject.parseObject(result).getString("msg"));
}
@ApiOperation(value = "呼叫空货架")
@PostMapping(value = "callNullShelf")
public Respond callNullShelf(@RequestBody AgvRequestVo agvRequestVo) {
//校验
if (StringUtils.isBlank(agvRequestVo.getToLocationCode())) {
throw new ServiceException("无终点位置,请检查!");
}
if (StringUtils.isBlank(agvRequestVo.getContainerCode())) {
throw new ServiceException("无货架编码,请检查!");
}
agvRequestVo.setType(0);
agvRequestVo.setRequestType(RequestEnum.CALLNULLSHELF.getCode());
String result = null;
lock.lock();
try {
final List<ShelfInfo> shelfInfos = shelfInfoRepository.findByProductionTaskIsNullAndStationCodeIsNotNull();
if (shelfInfos.size() == 0) {
return buildFailure("暂无空货架");
}
agvRequestVo.setContainerCode(shelfInfos.get(0).getShelfCode());
StationInfo stationInfo = stationInfoRepository.findByStationCode(shelfInfos.get(0).getStationCode());
agvRequestVo.setFromLocationCode(stationInfo.getStationCode());
result = agvService.taskParamCreate(agvRequestVo);
if (JSONObject.parseObject(result).getInteger("code") == 0) {
shelfInfos.get(0).setProductionTask("待绑定");
shelfInfoRepository.save(shelfInfos.get(0));
return buildSuccess("请求成功");
}
} finally {
lock.unlock();
}
return buildFailure(JSONObject.parseObject(result).getString("msg"));
}
@ApiOperation(value = "取消AGV任务")
@GetMapping(value = "cancelTask")
public Respond cancelTask(@RequestParam("taskCode") String taskCode) {
agvService.taskCancel(taskCode);
return buildSuccess();
}
@ApiOperation(value = "机器人是否允许取走/放置周转箱")
@PostMapping(value = "allowOperation")
public String allowOperation(@RequestBody String Bash) {
String result = agvService.allowOperation(Bash);
return result;
}
@ApiOperation(value = "料箱出库(定时任务测试)")
@PostMapping(value = "waterTest")
public void waterTest() {
scheduleService.waterTest();
}
@ApiOperation(value = "成品出库(测试)")
@GetMapping(value = "outProdStore")
public void outProdStore(String status) {
agvService.outProdStore(status);
}
@ApiOperation(value = "空货架入库(测试)")
@GetMapping(value = "sendNullShelf")
public void sendNullShelf(String status) {
agvService.sendNullShelf(status);
}
@ApiOperation(value = "空车入库PDA")
@GetMapping(value = "nullShelfIn")
public Respond nullShelfIn(@RequestParam("containerCode") String containerCode, @RequestParam("positionCode") String positionCode) {
String result = agvService.moveIn(containerCode, positionCode);
if (JSONObject.parseObject(result).getInteger("code") == 0) {
ShelfInfo shelfInfo = shelfInfoRepository.findByShelfCode(containerCode);
if (shelfInfo != null) {
shelfInfo.setStationCode(positionCode);
}
} else {
return buildFailure("海柔报错:" + JSONObject.parseObject(result).getString("msg"));
}
return buildSuccess();
}
@ApiOperation(value = "找终点位置")
@PostMapping(value = "findToLocationCode")
public String findToLocationCode(Integer storeType) {
String toLocationCode = null;
List<StationInfo> stationInfoList = stationInfoRepository.findByStationTypeAndStationStatus(storeType, 5);
if (stationInfoList.size() > 0) {
toLocationCode = stationInfoList.get(0).getStationCode();
} else {
throw new ServiceException("暂无空闲的点位!");
}
return toLocationCode;
}
}