Commit 6f25a841 LN

1053:SBSH,SBDH页面功能,过期物料和呆滞物料增加时间过滤

1 个父辈 92b0f22c
......@@ -137,6 +137,7 @@ public class MenuInit {
addDefaultFunctionMenu(9, poutOut, "呆滞物料", "sluggishMaterials", "system/sluggishMaterials/index", "sMaterial");
addDefaultFunctionMenu(10,poutOut, "安全库存", "safetyInventory", "system/safetyInventory/index", "safeInventory");
addDefaultFunctionMenu(11, poutOut,"过期物料", "expireMaterials", "system/expireMaterials/index", "sMaterial");
addDefaultFunctionMenu(12, poutOut,"生成工单", "createOrder", "system/createOrder/index", "createOrder");
//MSD管理:MSD库存.MSD追溯性.MSD设置
......
......@@ -25,6 +25,12 @@ public class StoragePosFindCriteria {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> putInDate;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "barcode.expireDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> expireDate;
@QueryCondition
@ApiModelProperty("料仓ID")
private String storageId;
......
package com.neotel.smfcore.custom.micron1053.bean;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class ML5StatusBean implements Serializable {
/**
* L1状态 1=正常运行,2=报警
*/
private int l1Status=0;
/**
* L2状态 1=正常运行,2=报警
*/
private int l2Status=0;
/**
* R1状态 1=正常运行,2=报警
*/
private int r1Status=0;
/**
* R2状态 1=正常运行,2=报警
*/
private int r2Status=0;
/**
* NG1处料盘数量
*/
private int ng1Count=0;
/**
* NG2处料盘数量
*/
private int ng2Count=0;
/**
* 消息列表
*/
private List<EquipMsg> msgList=null;
private long updateTime = System.currentTimeMillis();
/**
* 10秒超时
* @return
*/
public boolean timeOut(){return (System.currentTimeMillis()-updateTime)>(10*1000);}
}
......@@ -13,12 +13,17 @@ import java.util.List;
public class MicronEquipStatus implements Serializable {
/**
* 设备名称:ML5,CI,R1,R2,R3,M1-M8,SBDH1,SBDH2,SBDH3,SBSH1,SBSH2
* ML5-R1,ML5-R2,ML5-L1,ML5-R2
*/
private String equipName;
/**
* 1=正常运行,2=报警
*/
private int status;
/**
* 当name为ML5-R1对应右侧的ng,ML5-L1对应左侧的ng
*/
private int ngCount;
private long updateTime;
private List<EquipMsg> msgList=null;
/**
......
......@@ -17,7 +17,7 @@ import java.util.Map;
@NoArgsConstructor
public class MicronEquipStatusDto implements Serializable {
@ApiModelProperty("设备状态集合,KEY为设备名词(ML5,CI,R1,R2,R3,M1-M8,SBDH1,SBDH2,SBDH3,SBSH1,SBSH2)")
@ApiModelProperty("设备状态集合,KEY为设备名词(ML5,CI,R1,R2,R3,M1-M8,SBDH1,SBDH2,SBDH3,SBSH1,SBSH2),value为状态(0=离线,1=正常,2=报警)")
private Map<String,Integer> statusMap=new HashMap<>();
@ApiModelProperty("消息列表")
......
package com.neotel.smfcore.custom.micron1053.bean.dto;
import com.neotel.smfcore.core.report.bean.ChartItem;
import com.neotel.smfcore.core.storage.bean.UsageItem;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.Map;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SBDHViewDto implements Serializable {
private String boxName;
@ApiModelProperty("单台BOX状态,key=CID,0=离线,1=正常运行中, 2=急停,3=故障,4=警告,5=调试中,6入库执行中,7入仓位完成,8入库失败, 9出库执行中,10出仓位完成,11出库失败,12移栽出库,13 重置中,14 扫码入库失败 ")
private Map<String,Integer> statuMap=new HashMap<>();
@ApiModelProperty("料仓文本,key=CID,value=文本")
private Map<String,String> msgMap = new HashMap<>();
@ApiModelProperty("温度")
private String temperature;
@ApiModelProperty("湿度")
......@@ -25,11 +30,11 @@ public class SBDHViewDto implements Serializable {
@ApiModelProperty("今天出入库数量")
private Integer todayCounts;
@ApiModelProperty("库存使用率")
private Integer Usage;
@ApiModelProperty("使用仓位数")
private Integer usedCount;
@ApiModelProperty("总仓位数")
private Integer totalCount;
@ApiModelProperty("使用情况")
private Map<String, UsageItem> usageMap = new ConcurrentHashMap<>();
@ApiModelProperty("出入库报表")
private List<ChartItem> chartItems;
......
package com.neotel.smfcore.custom.micron1053.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.custom.micron1053.bean.ML5StatusBean;
import com.neotel.smfcore.custom.micron1053.bean.dto.ML5StatusDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring" ,unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ML5StatusMapper extends BaseMapper<ML5StatusDto, ML5StatusBean> {
}
package com.neotel.smfcore.custom.micron1053.controller;
import com.neotel.smfcore.custom.micron1053.bean.EquipMsg;
import com.neotel.smfcore.custom.micron1053.bean.MicronEquipStatus;
import com.neotel.smfcore.custom.micron1053.bean.dto.ML5StatusDto;
import com.neotel.smfcore.custom.micron1053.bean.mapstruct.ML5StatusMapper;
import com.neotel.smfcore.custom.micron1053.enums.MicronEquipName;
import com.neotel.smfcore.custom.micron1053.util.MicronDataCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@RestController
@Api(tags = "1053:ML5")
@RequestMapping("/rest/micron/ml5")
public class MicronML5Controller {
@Autowired
private ML5StatusMapper ml5StatusMapper;
@ApiOperation("ML5页面数据获取")
@GetMapping("/status")
@AnonymousAccess
public ML5StatusDto ml5Status( ) {
if(MicronDataCache.ml5StatusBean!=null){
if(!MicronDataCache.ml5StatusBean.timeOut()){
ML5StatusDto dto=ml5StatusMapper.toDto(MicronDataCache.ml5StatusBean);
return dto;
}
}
return new ML5StatusDto();
ML5StatusDto dto=new ML5StatusDto();
MicronEquipStatus r1=MicronDataCache.getStatus(MicronEquipName.ML5_R1.getName());
MicronEquipStatus r2=MicronDataCache.getStatus(MicronEquipName.ML5_R2.getName());
MicronEquipStatus l1=MicronDataCache.getStatus(MicronEquipName.ML5_L1.getName());
MicronEquipStatus l2=MicronDataCache.getStatus(MicronEquipName.ML5_L2.getName());
dto.setL1Status(l1.getStatus());
dto.setL2Status(l2.getStatus());
dto.setR1Status(r1.getStatus());
dto.setR2Status(r2.getStatus());
dto.setNg1Count(l1.getNgCount());
dto.setNg2Count(r1.getNgCount());
List<EquipMsg> msgs=new ArrayList<>();
msgs.addAll(r1.getMsgList());
msgs.addAll(r2.getMsgList());
msgs.addAll(l1.getMsgList());
msgs.addAll(l2.getMsgList());
dto.setMsgList(msgs);
return dto;
}
}
package com.neotel.smfcore.custom.micron1053.controller;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.custom.micron1053.bean.ML5StatusBean;
import com.neotel.smfcore.custom.micron1053.bean.MicronEquipStatus;
import com.neotel.smfcore.custom.micron1053.util.MicronDataCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
......@@ -37,16 +36,16 @@ public class MicronServiceController {
return ResultBean.newOkResult("");
}
@ApiOperation("ML5设备状态更新")
@PostMapping(value = "ml5/updateStatus")
@ResponseBody
@AnonymousAccess
public ResultBean ml5Status(@RequestBody final ML5StatusBean statusBean, HttpServletRequest request) {
//记录设备状态
if(statusBean!=null){
statusBean.setUpdateTime(System.currentTimeMillis());
MicronDataCache.ml5StatusBean=statusBean;
}
return ResultBean.newOkResult("");
}
// @ApiOperation("ML5设备状态更新")
// @PostMapping(value = "ml5/updateStatus")
// @ResponseBody
// @AnonymousAccess
// public ResultBean ml5Status(@RequestBody final ML5StatusBean statusBean, HttpServletRequest request) {
// //记录设备状态
// if(statusBean!=null){
// statusBean.setUpdateTime(System.currentTimeMillis());
// MicronDataCache.ml5StatusBean=statusBean;
// }
// return ResultBean.newOkResult("");
// }
}
package com.neotel.smfcore.custom.micron1053.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.report.bean.ChartItem;
import com.neotel.smfcore.core.storage.bean.UsageItem;
import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.custom.micron1053.bean.EquipMsg;
......@@ -20,6 +25,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
......@@ -30,6 +36,8 @@ public class MicronStatusController {
@Autowired
private DataCache dataCache;
@Autowired
private IStorageManager storageManager;
@ApiOperation("设备状态页面")
@GetMapping("/equipView")
......@@ -39,9 +47,11 @@ public class MicronStatusController {
dto.setMsgList(new ArrayList<>());
dto.setStatusMap(new HashMap<>());
// ML5,CI,R1,R2,R3
List<MicronEquipStatus> statuses=new ArrayList<>(MicronDataCache.equipStatusMap.values());
for (MicronEquipStatus s:statuses
String[] names=new String[]{"ML5","CI","R1","R2","R3"};
for (String name :names
) {
MicronEquipStatus s=MicronDataCache.getStatus(name);
if(!s.timeOut()){
dto.getStatusMap().put(s.getEquipName(),s.getStatus() );
if(s.getMsgList()!=null&&s.getMsgList().size()>0) {
......@@ -79,6 +89,8 @@ public class MicronStatusController {
allStorages.values()) {
if (storage.getCid().contains(boxName)) {
cids.add(storage.getCid());
}else if(storage.getName().equals(boxName)){
cids.add(storage.getCid());
}
}
return cids;
......@@ -87,7 +99,7 @@ public class MicronStatusController {
private MicronEquipStatus getBoxEquip(String boxName) {
List<String> cids =getCidsByBoxName(boxName);
MicronEquipStatus dto = new MicronEquipStatus(boxName, 0, System.currentTimeMillis(), new ArrayList<>());
MicronEquipStatus dto = new MicronEquipStatus(boxName, 0,0, System.currentTimeMillis(), new ArrayList<>());
List<StatusBean> statusBeans = new ArrayList<>();
for (String cid :
cids) {
......@@ -117,11 +129,73 @@ public class MicronStatusController {
}
@ApiOperation("SBDH SBSH 页面")
@ApiOperation("SBDH SBSH 页面,发送boxName(SBDH1,SBDH2,SBDH3,SBSH1,SBSH2)")
@GetMapping("/SBDHView")
@AnonymousAccess
public SBDHViewDto SBDHView(String boxName, HttpServletRequest servletRequest) {
SBDHViewDto dto=new SBDHViewDto();
SBDHViewDto dto = new SBDHViewDto();
List<String> cids = getCidsByBoxName(boxName);
int useCount = 0;
int totalCount = 0;
int todayCounts = 0;
List<StatusBean> statusBeans = new ArrayList<>();
Map<String, ChartItem> chartItemMap = new HashMap<>();
for (String cid :
cids) {
Storage storage = dataCache.getStorage(cid);
for (UsageItem item : storage.getUsageMap().values()
) {
useCount += item.getUsedCount();
totalCount += item.getTotalCount();
}
StatusBean statusBean = DevicesStatusUtil.getStatusBean(cid);
if (statusBean != null && (!statusBean.timeOut())) {
for (BoxStatusBean boxStatus : statusBean.getBoxStatus().values()) {
if (ObjectUtil.isEmpty(dto.getHumidity())) {
String humidity = boxStatus.getHumidity();
String temperature = boxStatus.getTemperature();
dto.setHumidity(humidity);
dto.setTemperature(temperature);
}
dto.getStatuMap().put(cid, boxStatus.getStatus());
dto.getMsgMap().put(cid, statusBean.getShowMsg(servletRequest.getLocale()));
}
}else{
dto.getStatuMap().put(cid,0);
dto.getMsgMap().put(cid,"");
}
//出入库报表 默认过去一周到现在的
Calendar time = Calendar.getInstance();
time.setTime(new Date());
time.add(Calendar.DAY_OF_YEAR, -6);
String today = DateUtil.toDateTimeString(new Date());
List<ChartItem> chartItems = storageManager.getRunStatusData(time.getTime(), new Date(), "");
for (ChartItem chartItem :
chartItems) {
if (chartItemMap.containsKey(chartItem.getLabel())) {
ChartItem item = chartItemMap.get(chartItem.getLabel());
int newOut = item.getCheckOutValue() + chartItem.getCheckOutValue();
int newIn = item.getPutInValue() + chartItem.getPutInValue();
chartItemMap.get(chartItem.getLabel()).setPutInValue(newIn);
chartItemMap.get(chartItem.getLabel()).setCheckOutValue(newOut);
} else {
chartItemMap.put(chartItem.getLabel(), chartItem);
}
if (chartItem.getLabel().equals(today)) {
todayCounts += chartItem.getCheckOutValue() + chartItem.getPutInValue();
}
}
}
dto.setTotalCount(totalCount);
dto.setUsedCount(useCount);
dto.setChartItems(chartItemMap.values().stream().collect(Collectors.toList()));
dto.setTodayCounts(todayCounts);
return dto;
}
......
......@@ -19,7 +19,11 @@ public enum MicronEquipName {
SBDH2("SBDH2"),
SBDH3("SBDH3"),
SBSH1("SBSH1"),
SBSH2("SBSH2");
SBSH2("SBSH2"),
ML5_R1("ML5-R1"),
ML5_R2("ML5-R2"),
ML5_L1("ML5-L1"),
ML5_L2("ML5-L2");
private String key;
......
package com.neotel.smfcore.custom.micron1053.util;
import com.neotel.smfcore.custom.micron1053.bean.ML5StatusBean;
import com.neotel.smfcore.custom.micron1053.bean.MicronEquipStatus;
import java.util.HashMap;
......@@ -11,7 +10,7 @@ import java.util.Map;
*/
public class MicronDataCache {
public static ML5StatusBean ml5StatusBean=null;
// public static ML5StatusBean ml5StatusBean=null;
public static Map<String, MicronEquipStatus> equipStatusMap=new HashMap<>();
......@@ -26,4 +25,14 @@ public class MicronDataCache {
}
equipStatusMap.put(bean.getEquipName(), bean);
}
public static MicronEquipStatus getStatus(String name){
if(equipStatusMap.containsKey(name)){
MicronEquipStatus result= equipStatusMap.get(name);
if(!result.timeOut()){
return result;
}
}
return new MicronEquipStatus();
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!