Commit de1aac41 zshaohui

新增机器人接料机接口

1 个父辈 0c346fd8
...@@ -676,10 +676,10 @@ public class DataCache { ...@@ -676,10 +676,10 @@ public class DataCache {
public List<String> getAvailableStorageIds(){ public List<String> getAvailableStorageIds(){
List<String> availableStorageIds = new ArrayList<>(); List<String> availableStorageIds = new ArrayList<>();
for (Storage storage : getAllStorage().values()) { for (Storage storage : getAllStorage().values()) {
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid()); /*StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (bean == null || bean.timeOut() || !bean.isAvailable()) { if (bean == null || bean.timeOut() || !bean.isAvailable()) {
continue; continue;
} }*/
availableStorageIds.add(storage.getId()); availableStorageIds.add(storage.getId());
} }
return availableStorageIds; return availableStorageIds;
......
...@@ -169,7 +169,7 @@ public class LiteOrderCache { ...@@ -169,7 +169,7 @@ public class LiteOrderCache {
for (LiteOrder order : for (LiteOrder order :
liteOrders) { liteOrders) {
if (order.isNew() || order.isTaskFinished()) { if (order.isNew() || order.isTaskFinished()) {
if (order.isTaskFinished() && order.isMaiZheng()){ if (order.isTaskFinished() && (order.isMaiZheng() || order.isRobot())){
} else { } else {
//判断是否到达时间 //判断是否到达时间
......
...@@ -116,4 +116,6 @@ public class OrderDto implements Serializable { ...@@ -116,4 +116,6 @@ public class OrderDto implements Serializable {
@ApiModelProperty("是否迈征") @ApiModelProperty("是否迈征")
private boolean maiZheng = false; private boolean maiZheng = false;
private boolean robot = false;
} }
...@@ -21,4 +21,6 @@ public interface ILiteOrderManager extends IBaseManager<LiteOrder> { ...@@ -21,4 +21,6 @@ public interface ILiteOrderManager extends IBaseManager<LiteOrder> {
List<LiteOrder> findByQueryAndPartNumber(Query q, String partNumber); List<LiteOrder> findByQueryAndPartNumber(Query q, String partNumber);
LiteOrder batchCheckOut(Set<TacticsOutDto> outDtoSet); LiteOrder batchCheckOut(Set<TacticsOutDto> outDtoSet);
LiteOrder findOne(Query query);
} }
...@@ -159,6 +159,11 @@ public class LiteOrderManagerImpl implements ILiteOrderManager { ...@@ -159,6 +159,11 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
} }
@Override @Override
public LiteOrder findOne(Query query) {
return liteOrderDao.findOne(query);
}
@Override
public PageData<LiteOrder> findByPage(Query query, Pageable pageable) { public PageData<LiteOrder> findByPage(Query query, Pageable pageable) {
int totalCount = liteOrderDao.countByQuery(query); int totalCount = liteOrderDao.countByQuery(query);
List<LiteOrder> list = liteOrderDao.findByQuery(query, pageable); List<LiteOrder> list = liteOrderDao.findByQuery(query, pageable);
......
...@@ -162,6 +162,11 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -162,6 +162,11 @@ public class LiteOrder extends BasePo implements Serializable {
*/ */
private boolean maiZheng = false; private boolean maiZheng = false;
/**
* 是否机器人
*/
private boolean robot = false;
private boolean transReelBox = false; private boolean transReelBox = false;
...@@ -176,7 +181,10 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -176,7 +181,10 @@ public class LiteOrder extends BasePo implements Serializable {
private String startTime; private String startTime;
private String reelBoxId; private String reelBoxId;
//迈征额外参数
private String repoOrder;
private String cacheID;
//private String reelBoxID;
public void setClosed(boolean value){ public void setClosed(boolean value){
this.closed=value; this.closed=value;
......
package com.neotel.smfcore.custom.lizhen.innerBox.bean;
import lombok.Data;
@Data
public class AgvLineDto extends StorageExport{
private boolean maiZheng = false;
private boolean robot = false;
}
...@@ -24,6 +24,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos; ...@@ -24,6 +24,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager; import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.innerBox.bean.AgvLineDto;
import com.neotel.smfcore.custom.lizhen.innerBox.bean.StorageExport; import com.neotel.smfcore.custom.lizhen.innerBox.bean.StorageExport;
import com.neotel.smfcore.custom.lizhen.innerBox.util.StorageExportUtil; import com.neotel.smfcore.custom.lizhen.innerBox.util.StorageExportUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
...@@ -531,7 +532,23 @@ public class InnerBoxRestController { ...@@ -531,7 +532,23 @@ public class InnerBoxRestController {
storageExport = StorageExportUtil.getExport(export); storageExport = StorageExportUtil.getExport(export);
} }
log.info(export + "获取目的地信息:" + JSON.toJSONString(storageExport)); log.info(export + "获取目的地信息:" + JSON.toJSONString(storageExport));
return ResultBean.newOkResult(storageExport); AgvLineDto agvLineDto = new AgvLineDto();
agvLineDto.setLine(storageExport.getLine());
agvLineDto.setDisable(storageExport.isDisable());
agvLineDto.setMaterial(storageExport.getMaterial());
agvLineDto.setHSerial(storageExport.getHSerial());
agvLineDto.setRemainTaskCount(storageExport.getRemainTaskCount());
String hSerial = storageExport.getHSerial();
if (StringUtils.isNotEmpty(hSerial)){
LiteOrder liteOrder = liteOrderManager.findOne(new Query(Criteria.where("orderNo").is(hSerial)));
if (liteOrder != null){
agvLineDto.setMaiZheng(liteOrder.isMaiZheng());
agvLineDto.setRobot(liteOrder.isRobot());
}
}
return ResultBean.newOkResult(agvLineDto);
} }
@ApiOperation("料箱离开工位") @ApiOperation("料箱离开工位")
...@@ -573,7 +590,7 @@ public class InnerBoxRestController { ...@@ -573,7 +590,7 @@ public class InnerBoxRestController {
Collection<LiteOrder> liteOrders = liteOrderCache.getAllLiteOrder(); Collection<LiteOrder> liteOrders = liteOrderCache.getAllLiteOrder();
liteOrders = liteOrders.stream().sorted(Comparator.comparing(LiteOrder :: getCreateDate)).collect(Collectors.toList()); liteOrders = liteOrders.stream().sorted(Comparator.comparing(LiteOrder :: getCreateDate)).collect(Collectors.toList());
for (LiteOrder liteOrder : liteOrders) { for (LiteOrder liteOrder : liteOrders) {
if (!liteOrder.isMaiZheng()) { if (!liteOrder.isMaiZheng() && !liteOrder.isRobot()) {
if (liteOrder.isNew() || liteOrder.isTaskFinished()) { if (liteOrder.isNew() || liteOrder.isTaskFinished()) {
if (storageExport.getLine().equals(liteOrder.getLine())) { if (storageExport.getLine().equals(liteOrder.getLine())) {
String result = liteOrderCache.checkOutLiteOrder(liteOrder.getOrderNo(), false, export); String result = liteOrderCache.checkOutLiteOrder(liteOrder.getOrderNo(), false, export);
......
package com.neotel.smfcore.custom.lizhen.third.robot.bean;
import com.neotel.smfcore.custom.lizhen.third.maicheng.bean.AskReelBoxList;
import lombok.Data;
import java.util.List;
@Data
public class RobotAskReelBox {
private String RepoOrder;
private String CacheID;
private String ReelBoxID;
private String Count;
private String StartTime;
private java.util.List<RobotAskReelBoxList> List;
}
package com.neotel.smfcore.custom.lizhen.third.robot.bean;
import lombok.Data;
@Data
public class RobotAskReelBoxList {
private String ID;
private String WORKORDERNO;
private String LINE;
private String MACHINENAME;
private String STATION;
private String SIDE;
private String SLOT;
private String SUBSLOT;
private String PARTNUMBER;
private String LEFTQTY;
private String LEFTPCBS;
private String LEFTTIMES;
private String PRIORITY;
private String OP;
private String PRODUCTBOARDS;
private String REEL;
private String STATUS;
private String MACHINETYPE;
private String RECIEVETYPE;
private String VENDOR;
private String Pitch;
private String Num;
}
package com.neotel.smfcore.custom.lizhen.third.robot.controller;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Maps;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.custom.lizhen.third.maicheng.bean.AskReelBox;
import com.neotel.smfcore.custom.lizhen.third.maicheng.bean.AskReelBoxList;
import com.neotel.smfcore.custom.lizhen.third.robot.bean.RobotAskReelBox;
import com.neotel.smfcore.custom.lizhen.third.robot.bean.RobotAskReelBoxList;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@Slf4j
@RestController
@RequestMapping("/robot")
public class RobotController {
@Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private ILiteOrderItemManager liteOrderItemManager;
@Autowired
private LiteOrderCache liteOrderCache;
Map<String, RobotAskReelBox> askReelBoxMap = Maps.newConcurrentMap();
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
//定时执行请求
@PostConstruct
void init() {
scheduledThreadPool.scheduleAtFixedRate(() -> {
if (askReelBoxMap != null && !askReelBoxMap.isEmpty()) {
for (Map.Entry<String, RobotAskReelBox> entry : askReelBoxMap.entrySet()) {
log.info("开始处理:" + entry.getKey() + "的数据");
RobotAskReelBox askReelBox = entry.getValue();
String result = createRobotOrder(entry.getKey(), askReelBox);
//maiZhengApi.prepareReelBox(entry.getKey(), result,askReelBox.getStartTime());
log.info("处理结束:" + entry.getKey() + "的数据,结果为:" + result);
}
askReelBoxMap.clear();
}
}, 10, 5, TimeUnit.SECONDS);
}
@ApiOperation("机器人接料机请求数据")
@RequestMapping("/askReelBox")
@AnonymousAccess
public Map<String, String> askReelBox(@RequestBody RobotAskReelBox askReelBox) {
log.info("收到机器人请求数据信息为:" + JSON.toJSONString(askReelBox));
log.info("数据先加载到缓存中,定时处理");
askReelBoxMap.put(askReelBox.getRepoOrder(), askReelBox);
Map<String, String> resultMap = new HashMap<>();
resultMap.put("RepoOrder", askReelBox.getRepoOrder());
resultMap.put("Result", "OK");
return resultMap;
}
private String createRobotOrder(String guid, RobotAskReelBox askReelBox) {
LiteOrder liteOrder = liteOrderManager.findByOrderNo(guid);
if (liteOrder == null) {
List<RobotAskReelBoxList> boxList = askReelBox.getList();
if (boxList == null || boxList.isEmpty()) {
log.info(guid + "List为空");
askReelBoxMap.remove(guid);
return "List不能为空";
}
} else {
if (liteOrder.getOrderItems() != null && !liteOrder.getOrderItems().isEmpty()) {
log.info(guid + "已经存在");
askReelBoxMap.remove(guid);
return guid + "已经存在";
}
}
if (liteOrder == null) {
liteOrder = new LiteOrder();
}
liteOrder.setOrderNo(askReelBox.getRepoOrder());
liteOrder.setCacheID(askReelBox.getCacheID());
liteOrder.setRepoOrder(askReelBox.getRepoOrder());
liteOrder.setReelBoxId(askReelBox.getReelBoxID());
liteOrder.setCount(askReelBox.getCount());
liteOrder.setStartTime(askReelBox.getStartTime());
liteOrder.setRobot(true);
liteOrder = liteOrderManager.save(liteOrder);
int totalReelCount = 0;
//开始设置工单数据
List<LiteOrderItem> orderItemList = new ArrayList<>();
for (RobotAskReelBoxList box : askReelBox.getList()) {
LiteOrderItem item = new LiteOrderItem();
item.setWarningItemId(box.getID());
item.setMo(box.getWORKORDERNO());
if (StringUtils.isBlank(liteOrder.getLine()) && StringUtils.isNotBlank(box.getLINE())) {
liteOrder.setLine(box.getLINE());
}
item.setLine(box.getLINE());
item.setMachineName(box.getMACHINENAME());
item.setStation(box.getSTATION());
item.setSide(box.getSIDE());
item.setSlot(box.getSLOT());
item.setSubSlot(box.getSUBSLOT());
item.setPn(box.getPARTNUMBER());
item.setReel(box.getREEL());
item.setOrderId(liteOrder.getId());
item.setOrderNo(liteOrder.getOrderNo());
int num = NumberUtil.parseInt(box.getNum());
item.setNeedReelCount(num);
totalReelCount = totalReelCount + num;
orderItemList.add(item);
}
orderItemList = (List<LiteOrderItem>) liteOrderItemManager.batchSave(orderItemList);
liteOrder.setOrderItems(orderItemList);
liteOrder.setTotalTaskReelCount(totalReelCount);
liteOrder = liteOrderManager.save(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
log.info(guid + "工单任务已经生成,任务数量为:" + orderItemList.size());
return "OK";
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!