Commit b1c89e87 authored by 夏东伟's avatar 夏东伟

进出车数据统计修改, 加大去重力度

parent 9a18238b
......@@ -50,7 +50,6 @@ public class EquipmentController {
@ApiOperation(value = "程序传输")
@PostMapping("/program/transfer")
private Return programTransfer(@RequestBody ProgramTransferVO transferVO){
//TODO:
equipmentService.putFile(transferVO);
return Return.success();
}
......
......@@ -64,6 +64,6 @@ public class EquipInfo {
@Column(name = "equip_factory")
private String equipFactory;
@Column(name = "alias")
@Column(name = "equip_code")
private String equipName;
}
......@@ -49,7 +49,7 @@ public class StatisticsTimeJob extends QuartzJobBean {
List<EquipInfo> equipInfo = basicInfoMapper.findList(new WhereFilter(),EquipInfo.class);
for (EquipInfo info : equipInfo) {
String equipCode = info.getEquipCode();
String equipCode = info.getAlias();
long totalRuntime = 0;
//查询今日设备所有运行状态数据
List<EquipmentData> runData = equipDataService.findRunByCodeAndDate2(equipCode, startOfDay, endOfDay);
......@@ -64,11 +64,12 @@ public class StatisticsTimeJob extends QuartzJobBean {
BigDecimal hours = new BigDecimal(totalRuntime).divide(new BigDecimal(3600000), 2, BigDecimal.ROUND_HALF_UP);
//生成运行时间记录
RuntimeRecord lastRecord = runRecordService.getLastByCode(equipCode);
if (null != lastRecord && lastRecord.getCreateTime().before(DateUtils.getEndOfDay(0)) && lastRecord.getCreateTime().after(DateUtils.getStartOfDay(0))){
if (null != lastRecord){
//如果上一条记录是今天创建的, 则更新当班累计运行时间
lastRecord.setCreateTime(new Date());
lastRecord.setTotalRuntime(lastRecord.getTotalRuntime().subtract(lastRecord.getCurrentRuntime()).add(hours));
lastRecord.setCurrentRuntime(hours);
lastRecord.setWorkshopCode(info.getWorkshopName());
runtimeRecordMapper.update(lastRecord);
}else{
RuntimeRecord runtimeRecord = new RuntimeRecord();
......@@ -80,7 +81,7 @@ public class StatisticsTimeJob extends QuartzJobBean {
}
runtimeRecord.setTotalRuntime(total.add(hours));
runtimeRecord.setMachineId(info.getId());
runtimeRecord.setWorkshopCode(info.getWorkshopCode());
runtimeRecord.setWorkshopCode(info.getWorkshopName());
if("POLISHING_ROOM".equals(info.getEquipType())){
runtimeRecord.setGroupCode("1");
}
......
......@@ -2,7 +2,6 @@ package net.vtstar.zhongtong.avi.equipment.service;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import net.vtstar.scada.base.equipmgt.domain.EquipDataChannel;
import net.vtstar.scada.base.equipmgt.service.EquipDataChannelService;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter;
......@@ -71,18 +70,18 @@ public class EquipmentService {
PageHelper.startPage(pageFilter.getIntValue("pageNum"), pageFilter.getIntValue("pageSize"));
String searchCode = pageFilter.getString("searchCode");
Class searchCodeClazz = classNameCache.get(searchCode, Class.class);
if(searchCode == null){
if (searchCode == null) {
return new ArrayList<>();
}
if ("POLISHING_ROOM".equals(searchCode)){
return runtimeRecordMapper.findJoin(searchService.pageFilter2Filter(pageFilter, new WhereFilter(){{
if ("POLISHING_ROOM".equals(searchCode)) {
return runtimeRecordMapper.findJoin(searchService.pageFilter2Filter(pageFilter, new WhereFilter() {{
addJoin(PolishingRoomMachine.class, "machine_id", EquipInfo.class, "id");
addFilter(PolishingRoomMachine.class,"status", Operation.IS, "null");
addFilter(PolishingRoomMachine.class,"group_code", Operation.EQUAL, "1");
addFilter(PolishingRoomMachine.class, "status", Operation.IS, "null");
addFilter(PolishingRoomMachine.class, "group_code", Operation.EQUAL, "1");
}}), searchCodeClazz);
}
return dataMapper.findJoin(searchService.pageFilter2Filter(pageFilter, new WhereFilter(){{
return dataMapper.findJoin(searchService.pageFilter2Filter(pageFilter, new WhereFilter() {{
addFilter("status", Operation.EQUAL_GREATER_THAN, 1);
}}), searchCodeClazz);
}
......@@ -116,7 +115,7 @@ public class EquipmentService {
sheet.setColumnWidth(i, 5000);
row.createCell(i).setCellValue(showFields.get(i).getLabel());
}
for (Map<String, Object> item : result){
for (Map<String, Object> item : result) {
rowNumber++;
XSSFRow xssfRow = sheet.createRow(rowNumber);
for (int i = 0; i < showFields.size(); i++) {
......@@ -126,7 +125,7 @@ public class EquipmentService {
}
response.setCharacterEncoding("utf-8");
String name = classNameCache.get(searchCode + "name", String.class);
if (StringUtils.isEmpty(name)){
if (StringUtils.isEmpty(name)) {
name = "监控数据表";
}
String filename = URLEncoder.encode(name, "utf-8").replaceAll("\\+", "%20");
......@@ -144,7 +143,7 @@ public class EquipmentService {
}
public List<EquipInfo> findMachineByType(String equipType) {
return basicInfoMapper.findList(new WhereFilter(){{
return basicInfoMapper.findList(new WhereFilter() {{
addFilter("equip_type", Operation.EQUAL, equipType);
}}, EquipInfo.class);
}
......@@ -158,7 +157,7 @@ public class EquipmentService {
}
String fileName = ncFile.getOriginalFilename();
File saveNcFile = new File(baseUrl + fileName);
if (saveNcFile.exists()){
if (saveNcFile.exists()) {
saveNcFile.delete();
}
FileOutputStream outputStream = null;
......@@ -172,7 +171,7 @@ public class EquipmentService {
return program;
} catch (Exception e) {
throw new IllegalArgumentException("文件上传失败!");
}finally {
} finally {
if (null != outputStream) {
try {
outputStream.close();
......@@ -184,29 +183,49 @@ public class EquipmentService {
}
public void putFile(ProgramTransferVO transferVO) {
EquipDataChannel equipDataChannel = equipDataChannelService.getByEquipCode(transferVO.getEquipCode());
SmbFileUtil.smbPut("smb://10.1.4.107/数控下料/", transferVO.getFilePath());
// SmbFileUtil.smbPut("smb://" + equipDataChannel.getIp() +" /数控下料/", transferVO.getFilePath());
String ip = "";
switch (transferVO.getEquipCode()) {
case "076103-19":
ip = "10.1.25.192";
break;
case "076103-28":
ip = "10.1.25.114";
break;
case "076103-14":
ip = "10.1.4.107";
break;
case "076103-25":
ip = "10.1.4.129";
break;
case "076103-13":
ip = "10.1.4.106";
break;
case "076103-17":
ip = "10.1.4.120";
break;
}
// SmbFileUtil.smbPut("smb://10.1.4.107/数控下料/", transferVO.getFilePath());
SmbFileUtil.smbPut("smb://" + ip +" /数控下料/", transferVO.getFilePath());
}
public List<EquipInfo> findByShopCode(String workshopCode) {
if (StringUtils.isEmpty(workshopCode)){
if (StringUtils.isEmpty(workshopCode)) {
return basicInfoMapper.findList(new WhereFilter(), EquipInfo.class);
}
return basicInfoMapper.findList(new WhereFilter(){{
return basicInfoMapper.findList(new WhereFilter() {{
addFilter("workshop_code", Operation.EQUAL, workshopCode);
}}, EquipInfo.class);
}
public List<Map<String, Object>> findRealTimeDataMes(String searchCode) {
Class searchCodeClass = classNameCache.get(searchCode, Class.class);
if(StringUtils.isEmpty(searchCode)){
if (StringUtils.isEmpty(searchCode)) {
return new ArrayList<>();
}
List<Map<String, Object>> list = dataMapper.findJoin(new WhereFilter() {{
addFilter("status", Operation.EQUAL, 1);
}}, searchCodeClass);
for (Map<String, Object> map : list){
for (Map<String, Object> map : list) {
map.put("status", "9");
dataMapper.updateByClass(map, searchCodeClass);
}
......@@ -215,8 +234,8 @@ public class EquipmentService {
public List<StationPassInfo> getStationPassInfo(String vin) {
List<StationPassInfo> list = passInfoMapper.findList(new WhereFilter() {{
addFilter("VIN", Operation.EQUAL, vin);
}}, StationPassInfo.class);
addFilter("VIN", Operation.EQUAL, vin);
}}, StationPassInfo.class);
return list;
}
}
......@@ -76,7 +76,7 @@ public class RunRecordService {
runtimeRecord.setWorkshopCode("底盘车间");
break;
case "ASSEMBLY":
runtimeRecord.setWorkshopCode("总装车间");
runtimeRecord.setWorkshopCode("装配车间");
break;
case "TRIAL":
runtimeRecord.setWorkshopCode("试交车间");
......
package net.vtstar.zhongtong.avi.gateway.parts.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.zhongtong.avi.equipment.service.EquipStatusRealTimeService;
import net.vtstar.zhongtong.avi.utils.PingIpUtils;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
/**
* 型钢数控下料状态采集JOB
*/
@Slf4j
@Component
public class SteelCncCuttingMachineStateJob extends QuartzJobBean {
@Value("${zt.ip.steelCncCutting1}")
private String ipAddress1;
@Value("${zt.ip.steelCncCutting2}")
private String ipAddress2;
@Value("${zt.ip.steelCncCutting3}")
private String ipAddress3;
@Value("${zt.ip.steelCncCutting4}")
private String ipAddress4;
@Value("${zt.ip.pingtimes}")
private int pingTimes;
@Value("${zt.ip.timeout}")
private int timeOut;
@Autowired
private EquipStatusRealTimeService realTimeService;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
List<String> ipAddressList = Arrays.asList(ipAddress1, ipAddress2, ipAddress3, ipAddress4);
for (String ipAddress : ipAddressList) {
String equipName = "";
String equipCode = "";
String equipFactory = "";
switch (ipAddress){
case "10.1.4.107":
equipName = "自动数控锯切机";
equipCode = "076103-14";
equipFactory = "制件车间05东北方向靠里";
break;
case "10.1.4.129":
equipName = "自动转角锯切机";
equipCode = "076103-25";
equipFactory = "制件车间05东北方向靠外";
break;
case "10.1.4.106":
equipName = "自动转角锯切机";
equipCode = "076103-13";
equipFactory = "制件车间05中间南侧";
break;
case "10.1.4.120":
equipName = "自动数控锯切机";
equipCode = "076103-17";
equipFactory = "制件车间05中间北侧";
break;
}
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)) {
log.error("ping: {}失败, 读取焊接机器人数据操作结束!", ipAddress);
realTimeService.saveEquip("制件车间", equipCode, equipName, "关机");
continue;
}
realTimeService.saveEquip("制件车间", equipCode, equipName, "开机");
}
}
}
......@@ -118,9 +118,6 @@ public class RedisToCacheJob extends GatherJob {
private void addStatistics(String today, List<CarStatisticsVO> vos, String code, DateType dateType) {
Random r = new Random();
int i = r.nextInt(20);
CarStatisticsVO vo = new CarStatisticsVO();
vo.setAreaNo(code);
Integer todaySize = (Integer) valueOperations.get(Constant.BUS_SIZE_IN + code + ":" + today);
......
......@@ -38,7 +38,7 @@ public class AreaService {
public List<PaintshopArea> getInfoByAreaNo(String areaNo) {
List<PaintshopArea> areas = webStationCache.get("stationList", ArrayList.class);
if (null != areaNo) {
if (null != areaNo && null != areas) {
for (PaintshopArea area : areas) {
if (areaNo.equals(area.getCode())) {
int num = 0;
......
......@@ -173,13 +173,14 @@ public class RfidMessageHandler extends AbstractTesterMessageHandler {
log.error("mqtt接收到的state不为0也不为1!!!");
return;
}
listOperations.rightPush("rfid:testLog:before:" + vehicleCode + ":" + today, messageBO);
String rfid = vehicle.getCurrentRfid();
//若当前平移车上绑定了RFID, 并且与当前mqtt信息中的ID一致, 并且state=1, 则认为这是读写头的重发现象
if (null != rfid && id.equals(rfid)) {
Date occurTime = vehicle.getOccurTime();
if (null != occurTime) {
long l = (date.getTime() - occurTime.getTime()) / 1000;
if (l < 5) {
if (l < 600) {
//log.error("{} 平移车发生重发现象 ,滑撬id {}", vehicleCode, id);
vehicle.setOccurTime(date);
if (rfidList2.contains(vehicleCode)) {
......@@ -191,6 +192,19 @@ public class RfidMessageHandler extends AbstractTesterMessageHandler {
}
}
}
vehicle.setState(true);
vehicle.setOccurTime(date);
vehicle.setDownTime(null);
vehicle.setDownTimeMin(0);
vehicle.setCurrentRfid(id);
vehicle.setSkid(skid);
if (rfidList2.contains(vehicleCode)) {
valueOperations.set(Constant.VEHICLE_PREFIX + otherCode, vehicle);
} else {
valueOperations.set(Constant.VEHICLE_PREFIX + vehicleCode, vehicle);
}
listOperations.rightPush("rfid:testLog:after:" + vehicleCode + ":" + today, messageBO);
//判断是否为返修
Object reWorkVehicle = valueOperations.get(Constant.VEHICLE_PREFIX_REWORK);
if (null != reWorkVehicle && !"".equals(reWorkVehicle.toString())) {
......@@ -215,8 +229,8 @@ public class RfidMessageHandler extends AbstractTesterMessageHandler {
//若是焊装车间进车,绑定滑撬与车身关系
if ((vehicleCode.equals(Constant.HANZHUANG_VEHICLE1_RFID) || vehicleCode.equals(Constant.HANZHUANG_VEHICLE2_RFID))) {
//记录焊装上车的信息
listOperations.rightPush("rfid:log:shangqiao:" + vehicleCode, messageBO);
String format = dateFormat.format(date);
listOperations.rightPush("rfid:log:shangqiao:" + format, messageBO);
String key = Constant.BUS_SIZE_IN + "0:" + format;
Integer size = (Integer) valueOperations.get(key);
if (null == size) {
......@@ -285,7 +299,7 @@ public class RfidMessageHandler extends AbstractTesterMessageHandler {
//todo: 校验工单是否存在漏扫的工序
passInfoService.checkPassInfo(skid.getWorkOrderNo(), skid.getRfid());
}
listOperations.rightPush("rfid:log:chuche:" + vehicleCode, messageBO);
listOperations.rightPush("rfid:log:chuche:" + today, messageBO);
return;
}
//todo: 因PDA未使用, 暂不做此逻辑判断
......@@ -509,25 +523,27 @@ public class RfidMessageHandler extends AbstractTesterMessageHandler {
if (CollecUtils.isEmpty(stationByCache)) {
return;
}
for (PaintshopStation station : stationByCache) {
PaintshopStation land = (PaintshopStation) valueOperations.get(Constant.STATION_PREFIX + station.getCode());
if (land.getSkid() != null && id.equals(land.getSkid().getRfid())) {
passInfoService.endPassInfo(land);
land.setSkid(null);
land.setState(StationState.FREE);
isFind = true;
valueOperations.set(Constant.STATION_PREFIX + land.getCode(), land);
valueOperations.set(Constant.VEHICLE_PREFIX + vehicleCode, vehicle);
//记录过站数量
String areaCode = land.getAreaId().toString();
String areaKey = Constant.BUS_SIZE_OUT + areaCode + ":" + today;
Integer size = (Integer) valueOperations.get(areaKey);
if (null == size) {
size = 1;
} else {
size++;
if (!isFind){
for (PaintshopStation station : stationByCache) {
PaintshopStation land = (PaintshopStation) valueOperations.get(Constant.STATION_PREFIX + station.getCode());
if (land.getSkid() != null && id.equals(land.getSkid().getRfid())) {
passInfoService.endPassInfo(land);
land.setSkid(null);
land.setState(StationState.FREE);
isFind = true;
valueOperations.set(Constant.STATION_PREFIX + land.getCode(), land);
valueOperations.set(Constant.VEHICLE_PREFIX + vehicleCode, vehicle);
//记录过站数量
String areaCode = land.getAreaId().toString();
String areaKey = Constant.BUS_SIZE_OUT + areaCode + ":" + today;
Integer size = (Integer) valueOperations.get(areaKey);
if (null == size) {
size = 1;
} else {
size++;
}
valueOperations.set(areaKey, size);
}
valueOperations.set(areaKey, size);
}
}
if (isFind) {
......
......@@ -37,8 +37,8 @@ quartz.job.taskInfos[1].start=true
quartz.job.taskInfos[2].jobName=net.vtstar.zhongtong.avi.equipment.job.StatisticsTimeJob
quartz.job.taskInfos[2].jobGroup=StatisticsTimeJob
quartz.job.taskInfos[2].jobDescription=\u8ba1\u7b97\u8fd0\u884c\u65f6\u95f4Job
quartz.job.taskInfos[2].cronExpression=0 0/15 * * * ?
quartz.job.taskInfos[2].start=false
quartz.job.taskInfos[2].cronExpression=0/15 * * * * ?
quartz.job.taskInfos[2].start=true
#制件车间(PARTS)
#喷粉线
......@@ -326,8 +326,9 @@ quartz.job.taskInfos[42].jobDescription=\u7a7a\u4e2d\u884c\u8f66Job
quartz.job.taskInfos[42].cronExpression=0/10 * * * * ?
quartz.job.taskInfos[42].start=false
#quartz.job.taskInfos[8].jobName=net.vtstar.scada.base.equipmgt.job.CleanEquipStatusJob
##quartz.job.taskInfos[8].jobGroup=CleanEquipStatusJob
##quartz.job.taskInfos[8].jobDescription=\u6E05\u6D17\u8BBE\u5907\u72B6\u6001Job
##quartz.job.taskInfos[8].cronExpression=0/10 * * * * ?
##quartz.job.taskInfos[8].start=false
\ No newline at end of file
#型钢下料状态
quartz.job.taskInfos[43].jobName=net.vtstar.zhongtong.avi.gateway.parts.job.SteelCncCuttingMachineStateJob
quartz.job.taskInfos[43].jobGroup=SteelCncCuttingMachineStateJob
quartz.job.taskInfos[43].jobDescription=\u578b\u94a2\u4e0b\u6599Job
quartz.job.taskInfos[43].cronExpression=0/15 * * * * ?
quartz.job.taskInfos[43].start=false
\ No newline at end of file
This diff is collapsed.
......@@ -6,6 +6,12 @@ zt.ip.weldingrobot2=10.1.25.187
zt.ip.weldingrobot3=10.1.25.188
zt.ip.weldingrobot4=10.1.25.189
#型钢数控下料
zt.ip.steelCncCutting1=10.1.4.107
zt.ip.steelCncCutting2=10.1.4.129
zt.ip.steelCncCutting3=10.1.4.106
zt.ip.steelCncCutting4=10.1.4.120
#总装车间--新能源检测点1
zt.ip.assemblynewenergy1=10.1.25.128
#总装车间--新能源检测点2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment