Commit 8c3d6f1c LN

1.取消的工单出库任务,如果当前任务料仓离线,自动补发一盘。2.1053:MI接口修改,增加MT页面接口。

1 个父辈 49c24a90
......@@ -251,4 +251,6 @@ public class BarcodeDto implements Serializable {
@ApiModelProperty("入库时间+呆滞日期")
private Date sluggishTime;
@ApiModelProperty("制造商物料编号")
private String mpn;
}
......@@ -10,6 +10,7 @@ import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.api.SmfApi;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache;
......@@ -25,6 +26,7 @@ import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.TaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -256,6 +258,8 @@ public class LiteOrderCache {
order.setTaskReelCount(order.getTaskReelCount() - 1);
order.setTotalTaskReelCount(order.getTotalTaskReelCount()-1);
log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]已取消,任务数-1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount());
checkoutAgain(task,order);
}
else if (task.isFinished()) {
order.setFinishedReelCount(order.getFinishedReelCount() + 1);
......@@ -328,6 +332,68 @@ public class LiteOrderCache {
}
}
private LiteOrder checkoutAgain(DataLog task,LiteOrder order) {
try{
//出库任务,如果是工单任务,如果此料仓离线,需要补发一盘
if(ObjectUtil.isNotEmpty(task.getSourceId())) {
StatusBean bean = DevicesStatusUtil.getStatusBean(task.getCid());
if (bean != null && (!bean.timeOut())) {
//如果当前料仓在线,不处理
return order;
}
}
//取工单
String orderNo = task.getSourceName();
if (Strings.isNullOrEmpty(orderNo)) {
return order;
}
if ( order.isClosed() || order.isTaskFinished()) {
return order;
}
for (LiteOrderItem item :
order.getOrderItems()) {
if (ObjectUtil.isNotEmpty(item.getPn()) && item.getPn().equals(task.getPartNumber())) {
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
if (availableStorageIds.contains(task.getStorageId())) {
availableStorageIds.remove(task.getStorageId());
}
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
Collection<String> excludePosIds = excludeOutPosIds();
StoragePos pos = storagePosManager.findPartNumberInStorages(availableStorageIds, item.getPn(), excludePosIds, checkoutType);
if (pos == null) {
log.error("工单[" + orderNo + "],PN[" + item.getPn() + "]出库任务被取消,补发失败:未找到可以出库的物料 ");
break;
} else {
log.info("工单[" + orderNo + "],PN[" + item.getPn() + "]出库任务被取消,重新补发: 库位号=[" + pos.getPosName() + "],RI=[" + pos.getBarcode().getBarcode() + "] num:" + pos.getBarcode().getAmount());
DataLog newTasktask = newTask(pos);
newTasktask.setSourceId(order.getId());
newTasktask.setSourceName(order.getOrderNo());
newTasktask.setSubSourceId(item.getId());
newTasktask.setSubSourceInfo(item.getFeederInfo());
newTasktask.setType(OP.CHECKOUT);
newTasktask.setLightColor(task.getLightColor());
newTasktask.setStatus(OP_STATUS.WAIT.name());
newTasktask.setSingleOut(task.isSingleOut());
taskService.addTaskToExecute(task);
}
}
}
order.setTaskReelCount(order.getTaskReelCount() + 1);
order.setTotalTaskReelCount(order.getTotalTaskReelCount() + 1);
log.info("工单[" + orderNo + "]任务["+task.getPosName()+"]取消,补发结束,任务数[" + order.getTaskReelCount() + "]");
liteOrderManager.save(order);
liteOrderMap.put(order.getOrderNo(), order);
}catch (Exception ex){
log.error("任务["+task.getPosName()+"]["+task.getPartNumber()+"]["+task.getBarcode()+"]取消时,对应工单["+task.getSourceId()+"]["+task.getSourceName()+"]补发任务出错:"+ex.getMessage());
}
return order;
}
public ORDER_COLOR getNextColor() {
//设置颜色
Set<String> currentColors = new HashSet<>();
......@@ -640,4 +706,6 @@ public class LiteOrderCache {
}
return null;
}
}
......@@ -148,5 +148,6 @@ public class TaskDto implements Serializable {
}
return "";
}
@ApiModelProperty("位置信息,如料架编号,托盘编号,移栽编号,皮带线编号,机器人编号等")
private String locInfo = "";
}
......@@ -13,6 +13,8 @@ public class MIBoxDto implements Serializable {
@ApiModelProperty("CID")
private String cid;
@ApiModelProperty("name")
private String name;
@ApiModelProperty("料仓状态: 0=离线,1=正常运行,2=报警")
private int status=0;
......
package com.neotel.smfcore.custom.micron1053.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.core.device.bean.BoxStatusBean;
......@@ -53,7 +54,7 @@ public class MicronStatusController {
@ApiOperation("设备状态页面")
@GetMapping("/equipView")
@AnonymousAccess
public MicronEquipStatusDto view() {
public MicronEquipStatusDto view(HttpServletRequest servletRequest) {
MicronEquipStatusDto dto=new MicronEquipStatusDto();
dto.setMsgList(new ArrayList<>());
dto.setStatusMap(new HashMap<>());
......@@ -83,7 +84,7 @@ public class MicronStatusController {
for (String boxName :
boxList) {
//查找料仓
MicronEquipStatus s=getBoxEquip(boxName);
MicronEquipStatus s=getBoxEquip(boxName,servletRequest.getLocale());
dto.getStatusMap().put(s.getEquipName(),s.getStatus() );
if(s.getMsgList()!=null&&s.getMsgList().size()>0) {
dto.getMsgList().addAll(s.getMsgList());
......@@ -107,7 +108,7 @@ public class MicronStatusController {
return cids;
}
private MicronEquipStatus getBoxEquip(String boxName) {
private MicronEquipStatus getBoxEquip(String boxName,Locale locale) {
List<String> cids =getCidsByBoxName(boxName);
MicronEquipStatus dto = new MicronEquipStatus(boxName, 0,0, System.currentTimeMillis(), new ArrayList<>());
......@@ -131,8 +132,9 @@ public class MicronStatusController {
dto.setStatus(2);
}
if (ObjectUtil.isNotEmpty(s.getMsg())) {
dto.getMsgList().add(new EquipMsg(s.getCid(), s.getStatus(), s.getMsg(), new Date()));
String msg=s.getShowMsg(locale);
if (ObjectUtil.isNotEmpty(msg)) {
dto.getMsgList().add(new EquipMsg(s.getCid(), s.getStatus(), msg, new Date(s.getTime())));
}
}
}
......@@ -218,47 +220,67 @@ public class MicronStatusController {
@AnonymousAccess
public MIStatusDto MIView(String boxName, HttpServletRequest servletRequest) {
MIStatusDto result = new MIStatusDto();
String[] cids = new String[]{};
String[] nameList = new String[]{};
String robotName = "R1";
if (boxName.equals("MI1")) {
cids = new String[]{"M1", "M2", "M3", "M4"};
nameList = new String[]{"M1", "M2", "M3", "M4"};
robotName = "R1";
} else if (boxName.equals("MI2")) {
cids = new String[]{"M5", "M6", "M7", "M8"};
nameList = new String[]{"M5", "M6", "M7", "M8"};
robotName = "R2";
}
List<String> itemKey=new ArrayList<>();
List<MIBoxDto> boxDtos = new ArrayList<>();
for (String cid :
cids) {
MIBoxDto boxDto = new MIBoxDto();
boxDto.setCid(cid);
boxDto.setStatus(0);
Storage storage = dataCache.getStorage(cid);
if(storage!=null){
boxDto.setUsageMap(storage.getUsageMap());
int useCount=0,totalCount=0;
for (UsageItem item : storage.getUsageMap().values()
) {
useCount += item.getUsedCount();
totalCount += item.getTotalCount();
for (String name :
nameList) {
List<String> cids=getCidsByBoxName(name);
for (String cid :
cids) {
MIBoxDto boxDto = new MIBoxDto();
boxDto.setCid(cid);
boxDto.setStatus(0);
Storage storage = dataCache.getStorage(cid);
boxDto.setName(storage.getName());
if(storage!=null){
boxDto.setUsageMap(storage.getUsageMap());
int useCount=0,totalCount=0;
for (UsageItem item : storage.getUsageMap().values()
) {
useCount += item.getUsedCount();
totalCount += item.getTotalCount();
if(!itemKey.contains(item.getSizeStr())) {
itemKey.add(item.getSizeStr());
}
}
boxDto.setUsedCount(useCount);
boxDto.setTotalCount(totalCount);
}
boxDto.setUsedCount(useCount);
boxDto.setTotalCount(totalCount);
}
StatusBean statusBean = DevicesStatusUtil.getStatusBean(cid);
if (statusBean != null && (!statusBean.timeOut())) {
if (statusBean.getStatus() == 1) {
boxDto.setStatus(statusBean.getStatus());
} else if (statusBean.getStatus() == 2 || statusBean.getStatus() == 3) {
StatusBean statusBean = DevicesStatusUtil.getStatusBean(cid);
if (statusBean != null && (!statusBean.timeOut())) {
if (statusBean.getStatus() == 1) {
boxDto.setStatus(statusBean.getStatus());
} else if (statusBean.getStatus() == 2 || statusBean.getStatus() == 3) {
boxDto.setStatus(2);
boxDto.setStatus(2);
}
}
boxDtos.add(boxDto);
}
}
for (int i=0;i<boxDtos.size();i++){
for (String key :itemKey){
if(!boxDtos.get(i).getUsageMap().containsKey(key)){
UsageItem usageItem=new UsageItem();
boxDtos.get(i).getUsageMap().put(key,usageItem);
}
}
boxDtos.add(boxDto);
}
result.setBoxDtoList(boxDtos);
MicronEquipStatus s = MicronDataCache.getStatus(robotName);
if (!s.timeOut()) {
......@@ -275,10 +297,49 @@ public class MicronStatusController {
@AnonymousAccess
public List<TaskDto> MTView( HttpServletRequest servletRequest) {
Query query=new Query(Criteria.where("status").is(OP_STATUS.INLINE.name()));
Query query = new Query(Criteria.where("status").is(OP_STATUS.INLINE.name()));
List<DataLog> dataLogs=dataLogManager.findByQuery(query);
List<TaskDto> taskDtos=taskMapper.toDto(dataLogs);
List<DataLog> dataLogs = dataLogManager.findByQuery(query);
List<TaskDto> taskDtos = taskMapper.toDto(dataLogs);
return taskDtos;
}
@ApiOperation("异常看板:获取当前异常数量")
@GetMapping("/alarmMsgCount")
@AnonymousAccess
public ResultBean alarmMsgCount(HttpServletRequest servletRequest) {
int count=0;
//先添加设备的
List<MicronEquipStatus> statuses = new ArrayList<>();
statuses.addAll(MicronDataCache.equipStatusMap.values());
for (MicronEquipStatus s :
statuses) {
if (!s.timeOut()) {
if (s.getMsgList() != null && s.getMsgList().size() > 0) {
count+=s.getMsgList().size();
}
}
}
//添加料仓的
List<Storage> storages = new ArrayList<>();
storages.addAll(dataCache.getAllStorage().values());
for (Storage storage :
storages) {
StatusBean statusBean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (statusBean != null && (!statusBean.timeOut())) {
String msg = statusBean.getShowMsg(servletRequest.getLocale());
if (ObjectUtil.isNotEmpty(msg)) {
count+=1;
}
}
}
return ResultBean.newOkResult(count);
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!