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

联调修改

parent 2bc23d54
......@@ -141,7 +141,11 @@
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<filtering>false</filtering>
<excludes>
<exclude>**/*.ttf</exclude>
<exclude>**/*.woff</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources/lib</directory>
......
......@@ -49,13 +49,13 @@ public class EquipInfo {
@ApiModelProperty(notes = "设备编号")
@NotNull(message = "设备名称不能为空")
@Length(max = 100, message = "设备编号长度不能大于{max}")
@Column(name = "equip_code")
@Column(name = "alias")
@Search
private String equipCode;
@ApiModelProperty(notes = "设备名称")
@Length(max = 100, message = "设备名称长度不能大于{max}")
@Column(name = "alias")
@Column(name = "equip_code")
@Search
private String alias;
......
......@@ -35,6 +35,7 @@ public class FaultRecord {
private String equipCode;
@ApiModelProperty(notes = "设备名称")
@Column(name = "machine_code")
private String alias;
@ApiModelProperty(notes = "故障信息")
......
......@@ -35,11 +35,11 @@ public class RuntimeRecord {
private Long machineId;
@ApiModelProperty(notes = "设备编号")
@JoinColumn(tableName = EquipInfo.class, name = "equip_code")
@JoinColumn(tableName = EquipInfo.class, name = "alias")
private String equipCode;
@ApiModelProperty(notes = "设备名称")
@JoinColumn(tableName = EquipInfo.class, name = "alias")
@JoinColumn(tableName = EquipInfo.class, name = "equip_code")
@Search
private String alias;
......
......@@ -16,6 +16,7 @@ import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
......@@ -50,8 +51,13 @@ public class CleanStatusDataJob extends QuartzJobBean {
if (CollectionUtils.isEmpty(dataList)) {
continue;
}
//插入设备监控数据
equipmentDataMapper.insertList(dataList);
if (key.contains("DRYING_ROOM_TEMP")){
//插入设备监控数据
equipmentDataMapper.insert(dataList.get(0));
}else{
//插入设备监控数据
equipmentDataMapper.insertList(dataList);
}
if (key.contains("DRYING_ROOM_TEMP") || key.contains("SPRAY_BOOTH")){
continue;
}
......
......@@ -8,6 +8,7 @@ import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.OrderBy;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.user.search.service.SearchService;
import net.vtstar.utils.CollecUtils;
import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo;
import net.vtstar.zhongtong.avi.equipment.domain.FaultRecord;
import net.vtstar.zhongtong.avi.equipment.domain.RuntimeRecord;
......@@ -90,10 +91,20 @@ public class RunRecordService {
*/
public List<FaultRecord> findPageFault(JSONObject pageFilter) {
PageHelper.startPage(pageFilter.getIntValue("pageNum"), pageFilter.getIntValue("pageSize"));
return faultRecordMapper.findList(searchService.pageFilter2Filter(pageFilter, new WhereFilter() {{
List<FaultRecord> list = faultRecordMapper.findList(searchService.pageFilter2Filter(pageFilter, new WhereFilter() {{
/*addJoin(PaintshopStation.class, "area_id", PaintshopArea.class, "id");
addJoin(PaintshopStation.class, "lane_id", PaintshopLane.class, "id");*/
}}), FaultRecord.class);
list.forEach(faultRecord -> {
faultRecord.getEquipCode();
List<EquipInfo> equipInfos = basicInfoMapper.findList(new WhereFilter() {{
addFilter("equip_code", Operation.EQUAL, faultRecord.getEquipCode());
}}, EquipInfo.class);
if (!CollecUtils.isEmpty(equipInfos)){
faultRecord.setEquipCode(equipInfos.get(0).getEquipCode());
}
});
return list;
}
......
......@@ -14,7 +14,6 @@ import javax.persistence.Table;
import java.util.Date;
@Data
@Search(code = "PAINTING_ROBOT")
@ApiModel(value = "喷涂机器人", description = "喷涂机器人监控数据表")
@Table(name = "eqp_data_painting_robot")
public class PaintingRobotMachine extends EquipmentData {
......
package net.vtstar.zhongtong.avi.gateway.painting.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.vtstar.user.search.Search;
import net.vtstar.zhongtong.avi.global.web.Show;
import net.vtstar.zhongtong.avi.global.web.domain.enums.FieldType;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Data
@Search(code = "PAINTING_ROBOT")
@ApiModel(value = "喷涂机器人", description = "喷涂机器人监控数据表")
@Table(name = "eqp_data_painting_robot_record")
public class PaintingRobotRecordMachine{
@Show(label = "设备名称")
@Column(name = "eqp_code")
@ApiModelProperty(notes = "设备名称")
@Search
private String equipCode;
@Show(label = "车型")
@Column(name = "bus_type")
@ApiModelProperty(notes = "车型")
private String busType;
@Show(label = "数量")
@Column(name = "num")
@ApiModelProperty(notes = "数量")
private Integer num;
@Show(label = "采集时间",dataType = FieldType.DATETIME)
@ApiModelProperty("时间")
@Column(name = "create_time")
@Search
private Date createTime;
@Id
private Long id;
@ApiModelProperty("采集状态")
@Column(name = "status")
private String status;
}
package net.vtstar.zhongtong.avi.gateway.painting.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.CollecUtils;
import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.gateway.painting.domain.PaintingRobotRecordMachine;
import net.vtstar.zhongtong.avi.gateway.painting.mapper.PaintingRobotRecordMapper;
import net.vtstar.zhongtong.avi.monitoring.domain.StationPassInfo;
import net.vtstar.zhongtong.avi.monitoring.mapper.StationPassInfoMapper;
import net.vtstar.zhongtong.avi.sqlserver.domain.MesWorkOrderInfo;
import net.vtstar.zhongtong.avi.sqlserver.mapper.MesWorkOrderMapper;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 喷涂机器人运行次数统计JOB
*/
@Slf4j
@Component
public class PaintingRobotRecordMachineJob extends QuartzJobBean {
@Autowired
private PaintingRobotRecordMapper recordMapper;
@Autowired
private MesWorkOrderMapper mesWorkOrderMapper;
@Autowired
private StationPassInfoMapper mapper;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
String startOfDay = DateUtils.parseDateToString(DateUtils.getStartOfDay(0, new Date()), "yyyy-MM-dd HH:mm:ss");
String endOfDay = DateUtils.parseDateToString(DateUtils.getEndOfDay(0, new Date()), "yyyy-MM-dd HH:mm:ss");
List<StationPassInfo> list = mapper.findList(new WhereFilter() {{
addFilter(StationPassInfo.class, "station_no", Operation.EQUAL, "HDG1-125");
addFilter(StationPassInfo.class, "in_time", Operation.IS_NOT, "null");
addFilter(StationPassInfo.class, "create_time", Operation.EQUAL_GREATER_THAN, startOfDay);
addFilter(StationPassInfo.class, "create_time", Operation.EQUAL_LESS_THAN, endOfDay);
}}, StationPassInfo.class);
list.stream().filter(s -> s.getVIN() != null).forEach(stationPassInfo -> {
List<MesWorkOrderInfo> orderNo = mesWorkOrderMapper.findList(new WhereFilter() {{
addFilter("work_order_no", Operation.EQUAL, stationPassInfo.getVIN());
addFilter("status", Operation.EQUAL, "4");
}}, MesWorkOrderInfo.class);
if (!CollecUtils.isEmpty(orderNo)){
stationPassInfo.setBusType(orderNo.get(0).getVehicleModel());
}
});
Map<String, List<StationPassInfo>> collect = list.stream().filter(s -> s.getBusType() != null).collect(Collectors.groupingBy(StationPassInfo::getBusType));
for (Map.Entry<String, List<StationPassInfo>> entry : collect.entrySet()){
List<PaintingRobotRecordMachine> recordMachines = recordMapper.findList(new WhereFilter() {{
addFilter("bus_type", Operation.EQUAL, entry.getKey());
addFilter("create_time", Operation.EQUAL_GREATER_THAN, startOfDay);
addFilter("create_time", Operation.EQUAL_LESS_THAN, endOfDay);
}}, PaintingRobotRecordMachine.class);
if (CollecUtils.isEmpty(recordMachines)){
PaintingRobotRecordMachine machine = new PaintingRobotRecordMachine();
machine.setEquipCode("喷涂机器人");
machine.setBusType(entry.getKey());
machine.setNum(entry.getValue().size());
machine.setCreateTime(new Date());
recordMapper.insert(machine);
}else {
PaintingRobotRecordMachine machine = recordMachines.get(0);
machine.setBusType(entry.getKey());
machine.setNum(entry.getValue().size());
machine.setCreateTime(new Date());
recordMapper.update(machine);
}
}
}
}
......@@ -46,37 +46,37 @@ public class SprayBoothListener implements CommandLineRunner {
String name = "";
switch (deviceId) {
case 30019199:
name = "喷漆室-01";
name = "底架喷漆室";
break;
case 30019212:
name = "喷漆室-02";
name = "中涂喷漆室349";
break;
case 30019220:
name = "喷漆室-03";
name = "中涂喷漆室350";
break;
case 30019158:
name = "喷漆室-04";
name = "彩条喷漆室365";
break;
case 30019217:
name = "喷漆室-05";
name = "彩条喷漆室367";
break;
case 30019414:
name = "喷漆室-06";
name = "彩条喷漆室369";
break;
case 30019151:
name = "喷漆室-07";
name = "彩条喷漆室371";
break;
case 30019183:
name = "喷漆室-08";
name = "罩光喷漆室374";
break;
case 30019370:
name = "喷漆室-09";
name = "面漆喷漆室359";
break;
case 30018326:
name = "喷漆室-10";
name = "面漆喷漆室363";
break;
case 30019186:
name = "喷漆室-11";
name = "面漆喷漆室361";
break;
case 30019193:
name = "喷漆室-12";
......@@ -85,6 +85,7 @@ public class SprayBoothListener implements CommandLineRunner {
name = "喷漆室-13";
break;
default:
name = "彩条喷漆室369";
break;
}
......
package net.vtstar.zhongtong.avi.gateway.painting.mapper;
import net.vtstar.user.mybatis.BaseMapper;
import net.vtstar.zhongtong.avi.gateway.painting.domain.PaintingRobotRecordMachine;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PaintingRobotRecordMapper extends BaseMapper<PaintingRobotRecordMachine> {
}
......@@ -53,6 +53,9 @@ public class DustingLineMachineJob extends GatherJob {
return "喷粉";
}
}
if("chainSpeed".equals(fieldName) && null != value){
return Integer.valueOf(value.toString()) / 100;
}
return value;
}
......
......@@ -11,6 +11,7 @@ import net.vtstar.zhongtong.avi.laboratory.domain.DailyCheckModel;
import net.vtstar.zhongtong.avi.laboratory.domain.DailyItemModel;
import net.vtstar.zhongtong.avi.laboratory.domain.DailyItemRecord;
import net.vtstar.zhongtong.avi.laboratory.domain.vo.CheckRecordVo;
import net.vtstar.zhongtong.avi.laboratory.domain.vo.DailyItemRecordVo;
import net.vtstar.zhongtong.avi.laboratory.service.DailyCheckService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
......@@ -127,10 +128,9 @@ public class DailyCheckController {
@GetMapping("/getCheckItemRecord")
public Return getCheckItemRecord(@RequestParam(value = "modelId") Long modelId,
@RequestParam(value = "itemNames", required = false) String[] itemNames,
@RequestParam(value = "beginTime", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date beginTime,
@RequestParam(value = "endTime", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date endTime) {
@RequestParam(value = "currentMonth", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date currentMonth) {
ParamAssert.notNull(modelId, "模板ID不能为空!");
Map<String, List<DailyItemRecord>> map = service.getCheckItemRecord(modelId, itemNames, beginTime, endTime);
List<DailyItemRecordVo> map = service.getCheckItemRecord(modelId, itemNames, currentMonth);
return Return.success(map);
}
}
package net.vtstar.zhongtong.avi.laboratory.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.vtstar.zhongtong.avi.laboratory.domain.DailyItemRecord;
import java.util.List;
/**
* @Author: xiadongwei
* @Date: 2019/10/20 16:23
*/
@Data
public class DailyItemRecordVo {
@ApiModelProperty(notes = "检测项名称")
private String name;
@ApiModelProperty(notes = "检测项记录")
private List<DailyItemRecord> itemRecords;
}
......@@ -8,12 +8,14 @@ import net.vtstar.user.mybatis.provider.OrderBy;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.user.search.service.SearchService;
import net.vtstar.user.util.UserUtil;
import net.vtstar.utils.CollecUtils;
import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.laboratory.domain.DailyCheckModel;
import net.vtstar.zhongtong.avi.laboratory.domain.DailyCheckRecord;
import net.vtstar.zhongtong.avi.laboratory.domain.DailyItemModel;
import net.vtstar.zhongtong.avi.laboratory.domain.DailyItemRecord;
import net.vtstar.zhongtong.avi.laboratory.domain.vo.CheckRecordVo;
import net.vtstar.zhongtong.avi.laboratory.domain.vo.DailyItemRecordVo;
import net.vtstar.zhongtong.avi.laboratory.mapper.DailyCheckModelMapper;
import net.vtstar.zhongtong.avi.laboratory.mapper.DailyCheckRecordMapper;
import net.vtstar.zhongtong.avi.laboratory.mapper.DailyItemModelMapper;
......@@ -120,10 +122,12 @@ public class DailyCheckService {
DailyCheckRecord checkRecord = checkRecordVo.getCheckRecord();
checkRecordMapper.insertRecord(checkRecord);
List<DailyItemRecord> itemRecords = checkRecordVo.getItemRecords();
for (DailyItemRecord itemRecord : itemRecords) {
itemRecord.setCheckRecordId(checkRecord.getId());
}
itemRecordMapper.insertList(itemRecords);
itemRecords.forEach(item -> {
if (null != item.getCheckResult()){
item.setCheckRecordId(checkRecord.getId());
itemRecordMapper.insert(item);
}
});
}
/**
......@@ -236,11 +240,14 @@ public class DailyCheckService {
}}, DailyItemModel.class);
}
public Map<String, List<DailyItemRecord>> getCheckItemRecord(Long modelId, String[] itemNames, Date beginTime, Date endTime) {
if (null == beginTime || null == endTime){
beginTime = DateUtils.getMonthStart(0, new Date());
endTime = DateUtils.getMonthEnd(0, new Date());
public List<DailyItemRecordVo> getCheckItemRecord(Long modelId, String[] itemNames, Date currentMonth) {
if (null == currentMonth){
currentMonth = new Date();
}
Map<String, List<DailyItemRecord>> map = new HashMap<>();
List<DailyItemRecordVo> voList = new ArrayList();
Date beginTime = DateUtils.getMonthStart(0, currentMonth);
Date endTime = DateUtils.getMonthEnd(0, currentMonth);
String startTimeStr = DateUtils.parseDateToString(beginTime, "yyyy-MM-dd HH:mm:ss");
String endTimeStr = DateUtils.parseDateToString(endTime, "yyyy-MM-dd HH:mm:ss");
if (null == itemNames || itemNames.length == 0){
......@@ -259,20 +266,30 @@ public class DailyCheckService {
addFilter("create_time", Operation.LESS_THAN, endTimeStr);
addOrderBy("create_time", OrderBy.ASC);
}}, DailyItemRecord.class);
return list.stream().collect(Collectors.groupingBy(DailyItemRecord :: getName));
}
StringBuffer sbuffer= new StringBuffer();
for (String itemName : itemNames){
sbuffer.append("'");
sbuffer.append(itemName);
sbuffer.append("',");
map = list.stream().collect(Collectors.groupingBy(DailyItemRecord::getName));
}else {
StringBuffer sbuffer= new StringBuffer();
for (String itemName : itemNames){
sbuffer.append("'");
sbuffer.append(itemName);
sbuffer.append("',");
}
List<DailyItemRecord> list = itemRecordMapper.findList(new WhereFilter() {{
addFilter("name", Operation.IN, sbuffer.substring(1, sbuffer.length()-2));
addFilter("create_time", Operation.GREATER_THAN, startTimeStr);
addFilter("create_time", Operation.LESS_THAN, endTimeStr);
addOrderBy("create_time", OrderBy.ASC);
}}, DailyItemRecord.class);
map = list.stream().collect(Collectors.groupingBy(DailyItemRecord :: getName));
}
List<DailyItemRecord> list = itemRecordMapper.findList(new WhereFilter() {{
addFilter("name", Operation.IN, sbuffer.substring(1, sbuffer.length()-2));
addFilter("create_time", Operation.GREATER_THAN, startTimeStr);
addFilter("create_time", Operation.LESS_THAN, endTimeStr);
addOrderBy("create_time", OrderBy.ASC);
}}, DailyItemRecord.class);
return list.stream().collect(Collectors.groupingBy(DailyItemRecord :: getName));
map.forEach((name, dailyItemRecords) -> {
if (!CollecUtils.isEmpty(dailyItemRecords)){
DailyItemRecordVo itemRecordVo = new DailyItemRecordVo();
itemRecordVo.setName(name);
itemRecordVo.setItemRecords(dailyItemRecords);
voList.add(itemRecordVo);
}
});
return voList;
}
}
......@@ -148,7 +148,9 @@ public class AreaController {
@ApiOperation(value = "根据车身号获得当前车体信息", response = Bus.class)
@GetMapping("/detail/busNo")
private Return getBusDetail(@RequestParam(value = "busNo", required = false) String busNo) {
if (null == busNo){
return Return.success();
}
Bus bus = areaService.getByBusNo(busNo);
return Return.success(bus);
}
......
......@@ -33,4 +33,9 @@ public class StationPassInfo {
@Column(name = "out_time")
private Date outTime;
@Column(name = "create_time")
private Date createTime;
private String busType;
}
package net.vtstar.zhongtong.avi.monitoring.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.protocol.modbus.tcp.netty.utils.NettyUtils;
import net.vtstar.protocol.modbus.tcp.netty.utils.PoolKey;
import net.vtstar.scada.base.equipmgt.domain.*;
import net.vtstar.scada.base.equipmgt.service.EquipInfoService;
import net.vtstar.scada.base.gather.job.GatherJob;
import net.vtstar.scada.base.global.service.ModbusService;
import net.vtstar.utils.CollecUtils;
import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation;
import net.vtstar.zhongtong.avi.global.constant.Constant;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState;
import net.wimpi.modbus.io.ModbusTCPTransaction;
import net.wimpi.modbus.msg.*;
import net.wimpi.modbus.net.TCPMasterConnection;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Component
public class AVIElectrophoresisJob extends GatherJob {
//电泳空中行车
private static final String EQUIPMENT_TYPE = "PLC_E";
@Autowired
private EquipInfoService equipInfoService;
@Autowired
private ModbusService modbusService;
@Resource(name = "redisTemplate")
private ValueOperations valueOperations;
@Resource(name = "laneStationCache")
private Cache laneStationCache;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
log.info("-------------------------------");
log.info("AVIElectrophoresisJob start");
List<PaintshopStation> temStation = laneStationCache.get(Long.valueOf("111"), ArrayList.class);
if (CollecUtils.isEmpty(temStation) || temStation.size() != 14){
log.error("空中行车的工位数不对!");
return;
}
Map<Integer, List<PaintshopStation>> collect = temStation.stream().collect(Collectors.groupingBy(PaintshopStation::getSequence));
//处理空中行车
List<EquipCommunication> commList = equipInfoService.getCommunicationListByEquipType(EQUIPMENT_TYPE, 1);
if (CollectionUtils.isEmpty(commList)) {
return;
}
for (EquipCommunication communication : commList) {
EquipDataChannel dataChannel = communication.getDataChannel();
if (null != dataChannel.getEquipCode() && !dataChannel.getEquipCode().startsWith(EQUIPMENT_TYPE)) {
continue;
}
String ip = dataChannel.getIp();
Integer port = dataChannel.getPort();
PoolKey poolKey = NettyUtils.wrapPoolKey(ip, port);
Integer slaveId = dataChannel.getNo();
EquipDataTemplate template = communication.getDataTemplate();
if (template == null) {
log.info("无法获取设备的数据模板,设备编号:{}", dataChannel.getEquipCode());
continue;
}
List<EquipDataTemplateItem> templateItemList = template.getTemplateItemList();
if (CollectionUtils.isEmpty(templateItemList)) {
// log.info("无法获取数据模板的条目,设备编号:{},模板名称:{}", dataChannel.getEquipCode(), template.getName());
continue;
}
Map<Integer, List<EquipDataTemplateItem>> listMap = modbusService.groupByFuntionCode(templateItemList);
for (Map.Entry<Integer, List<EquipDataTemplateItem>> entry : listMap.entrySet()) {
List<EquipDataTemplateItem> value = entry.getValue();
if (CollectionUtils.isEmpty(value)) {
continue;
}
Integer start = value.get(0).getAddress();
Integer end = value.get(value.size() - 1).getAddress();
Integer size = value.get(value.size() - 1).getLength();
Integer quantity = end + size - start;
Integer functionCode = entry.getKey();
ModbusRequest modbusRequest = null;
ModbusResponse response = null;
if (1 == functionCode) {
modbusRequest = new ReadCoilsRequest(start, quantity);
} else if (2 == functionCode) {
modbusRequest = new ReadInputDiscretesRequest(start, quantity);
} else if (3 == functionCode) {
modbusRequest = new ReadMultipleRegistersRequest(start, quantity);
} else if (4 == functionCode) {
modbusRequest = new ReadInputRegistersRequest(start, quantity);
}
modbusRequest.setUnitID(slaveId);
try {
TCPMasterConnection connection = new TCPMasterConnection(InetAddress.getByName(poolKey.getHost()));
connection.setPort(port);
connection.setTimeout(3000);
connection.connect();
ModbusTCPTransaction transaction = new ModbusTCPTransaction(connection);
transaction.setReconnecting(false);
transaction.setRequest(modbusRequest);
transaction.execute();
response = transaction.getResponse();
} catch (Exception e) {
e.printStackTrace();
}
if (null == response) {
log.error("读取失败! response 为空!");
return;
}
String[] hexStrs = response.getHexMessage().split(" ");
if (hexStrs.length == 9) {
log.error("读取失败! length 为9!");
return;
}
StringBuilder sb = new StringBuilder();
for (int i = 9; i < hexStrs.length; i++) {
Integer newValue = Integer.valueOf(hexStrs[i], 16);
int j = 0;
while (j < 8) {
sb.append(newValue % 2);
newValue = newValue / 2;
j++;
}
}
byte[] bytes = sb.toString().getBytes();
for (EquipDataTemplateItem templateItem : value) {
Integer address = templateItem.getAddress();
int quality = address - start;
byte state = bytes[quality];
String fieldName = templateItem.getFieldName();
String sequence = fieldName.split(":")[1];
PaintshopStation station = collect.get(Integer.valueOf(sequence)).get(0);
if (state == 48) {
station.setState(StationState.FREE);
} else {
station.setState(StationState.USE);
}
valueOperations.set(Constant.STATION_PREFIX + station.getCode(), station);
}
}
}
}
}
\ No newline at end of file
......@@ -345,9 +345,9 @@ public class AVIMonitorJob extends GatherJob {
PaintshopStation end = lands.get(lands.size() - 1);
//下车时, 记录进去车道的开始时间, 并将记录ID绑定在工位上
Long passInfoId = 0L;
if (null != skid){
/*if (null != skid){
passInfoId = passInfoService.createPassInfo(skid.getWorkOrderNo(), skid.getRfid(), station.getAreaName(), station.getLandNo());
}
}*/
if (start.getCode().equals(station.getCode())) {
for (int j = lands.size() - 1; j > 0; j--) {
PaintshopStation tem = lands.get(j);
......
......@@ -42,7 +42,11 @@ public class AreaService {
for (PaintshopArea area : areas) {
if (areaNo.equals(area.getCode())) {
int num = 0;
for (Map.Entry<String, PaintshopStation> entry : area.getStationMap().entrySet()){
Map<String, PaintshopStation> stationMap = area.getStationMap();
if (null == stationMap){
continue;
}
for (Map.Entry<String, PaintshopStation> entry : stationMap.entrySet()){
PaintshopStation value = entry.getValue();
if (StationState.USE.equals(value.getState())){
num ++;
......@@ -84,10 +88,10 @@ public class AreaService {
PaintshopStation value = entry.getValue();
String key = entry.getKey();
for (String no : nos) {
if (null == value.getBusNo()) {
if (null == value.getWorkOrderNo()) {
continue;
}
if (value.getBusNo().equals(no)) {
if (value.getWorkOrderNo().equals(no)) {
newMap.put(key, value);
}
}
......
......@@ -8,7 +8,9 @@ import net.vtstar.zhongtong.avi.global.constant.Constant;
import net.vtstar.zhongtong.avi.monitoring.domain.Skid;
import net.vtstar.zhongtong.avi.monitoring.domain.Vehicle;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState;
import net.vtstar.zhongtong.avi.sqlserver.domain.MesHZWorkOrderInfo;
import net.vtstar.zhongtong.avi.sqlserver.domain.MesWorkOrderInfo;
import net.vtstar.zhongtong.avi.sqlserver.mapper.MesHZWorkOrderMapper;
import net.vtstar.zhongtong.avi.sqlserver.mapper.MesWorkOrderMapper;
import net.vtstar.zhongtong.avi.utils.EquipDataUtil;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -30,7 +32,7 @@ public class PDAService {
@Resource(name = "redisTemplate")
protected ValueOperations valueOperations;
@Autowired
private MesWorkOrderMapper mesWorkOrderMapper;
private MesHZWorkOrderMapper mesWorkOrderMapper;
@Resource(name = "redisTemplate")
protected ValueOperations testValueOperations;
@Resource(name = "laneStationCache")
......@@ -40,16 +42,16 @@ public class PDAService {
public boolean bound(String vehicleNo, String busNo, String workOrderNo) {
// TODO: 2019-11-02 判断车身工单号是否在计划中
List<MesWorkOrderInfo> list = mesWorkOrderMapper.findList(new WhereFilter() {{
addFilter("work_order_no", Operation.EQUAL, workOrderNo);
addFilter("status", Operation.EQUAL, 4);
}}, MesWorkOrderInfo.class);
List<MesHZWorkOrderInfo> list = mesWorkOrderMapper.findList(new WhereFilter() {{
addFilter("WONo", Operation.EQUAL, workOrderNo);
}}, MesHZWorkOrderInfo.class);
if (CollecUtils.isEmpty(list)){
return false;
}
if (null == busNo){
busNo = "";
}
workOrderNo.replace("HZ", "TZ");
String keyW = EquipDataUtil.getTestValueKey("ROTARY_ROLLER_BED_W");
testValueOperations.set(keyW, null == testValueOperations.get(keyW) ? 0 : ((int)testValueOperations.get(keyW)) + 1);
if (vehicleNo.equals("HZC1")) {
......
......@@ -56,13 +56,17 @@ public class StationPassInfoService {
public Long createPassInfo(String workOrderNo, String rfid, String areaNo, String stationNo){
StationPassInfo info = new StationPassInfo();
info.setVIN(workOrderNo);
info.setAreaNo(areaNo);
if (null == workOrderNo){
info.setVIN("");
}
if (null == areaNo){
info.setAreaNo("");
}
info.setRfid(rfid);
info.setAreaNo(areaNo);
info.setStationNo(stationNo);
info.setInTime(new Date());
info.setCreateTime(new Date());
passInfoMapper.insert(info);
String sql = "INSERT INTO VEHICLE_PASSING_INFO VALUES (?,?,?,?,?,?,?)";
mesSqlServerJdbcTemplate.update(sql, new Object[]{info.getVIN(), info.getRfid(), info.getAreaNo(),
......@@ -74,13 +78,17 @@ public class StationPassInfoService {
public void endPassInfo(PaintshopStation station){
StationPassInfo info = new StationPassInfo();
info.setVIN(station.getSkid().getWorkOrderNo());
info.setAreaNo(station.getAreaName());
if (null == station.getSkid().getWorkOrderNo()){
info.setVIN("");
}
if (null == station.getAreaName()){
info.setAreaNo("");
}
info.setRfid(station.getSkid().getRfid());
info.setAreaNo(station.getAreaName());
info.setStationNo(station.getCode());
info.setOutTime(new Date());
info.setCreateTime(new Date());
passInfoMapper.insert(info);
//todo:!!!!!!!!!!!!!!!!
String sql = "INSERT INTO VEHICLE_PASSING_INFO VALUES (?,?,?,?,?,?,?)";
......
......@@ -6,12 +6,15 @@ import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.OrderBy;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.CollecUtils;
import net.vtstar.utils.DateUtils;
import net.vtstar.utils.domain.Return;
import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo;
import net.vtstar.zhongtong.avi.equipment.domain.RuntimeRecord;
import net.vtstar.zhongtong.avi.equipment.mapper.RuntimeRecordMapper;
import net.vtstar.zhongtong.avi.equipment.service.EquipmentService;
import net.vtstar.zhongtong.avi.global.constant.Constant;
import net.vtstar.zhongtong.avi.monitoring.domain.Warning;
import net.vtstar.zhongtong.avi.report.domain.vo.EquStatePercent;
......@@ -28,10 +31,8 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Api(description = "中控室监控页面")
......@@ -46,6 +47,9 @@ public class ReportController {
@Autowired
private RuntimeRecordMapper runtimeRecordMapper;
@Autowired
private EquipmentService equipmentService;
private Integer errNum = 2;
private Integer runNum = 5;
......@@ -207,14 +211,42 @@ public class ReportController {
@GetMapping("/runTimeList")
private Return getMachineRunTime(@RequestParam String workshopCode){
List<RuntimeRecord> list = new ArrayList<>();
String startOfDay = DateUtils.parseDateToString(DateUtils.getStartOfDay(0), "yyyy-MM-dd HH:mm:ss");
String startOfDay = DateUtils.parseDateToString(DateUtils.getStartOfDay(7), "yyyy-MM-dd HH:mm:ss");
String endOfDay = DateUtils.parseDateToString(DateUtils.getEndOfDay(0), "yyyy-MM-dd HH:mm:ss");
int hour = DateUtil.getHour(new Date());
list = runtimeRecordMapper.findList(new WhereFilter() {{
addFilter(RuntimeRecord.class,"create_time", Operation.GREATER_THAN, startOfDay);
addFilter(RuntimeRecord.class,"create_time", Operation.LESS_THAN, endOfDay);
addFilter(RuntimeRecord.class,"workshop_code", Operation.EQUAL, workshopCode);
addJoin(RuntimeRecord.class, "machine_id", EquipInfo.class, "id");
addOrderBy(RuntimeRecord.class,"create_time", OrderBy.DESC);
}}, RuntimeRecord.class);
return Return.success(list);
Map<Long, List<RuntimeRecord>> map = list.stream().collect(Collectors.groupingBy(RuntimeRecord::getMachineId));
List<RuntimeRecord> listNew = new ArrayList<>();
if ("PAINTING".equals(workshopCode)){
for (Map.Entry<Long, List<RuntimeRecord>> entry : map.entrySet()){
RuntimeRecord record = entry.getValue().get(0);
record.setEquipCode(record.getAlias());
listNew.add(record);
}
return Return.success(listNew);
}
List<EquipInfo> equipInfos = equipmentService.findByShopCode(workshopCode);
for (EquipInfo info : equipInfos){
List<RuntimeRecord> runtimeRecords = map.get(info.getId());
if (CollecUtils.isEmpty(runtimeRecords)){
RuntimeRecord record = new RuntimeRecord();
record.setWorkshopCode(info.getWorkshopCode());
record.setEquipCode(info.getAlias());
record.setAlias(info.getEquipCode());
record.setCurrentRuntime(new BigDecimal(0));
listNew.add(record);
}else {
RuntimeRecord record = runtimeRecords.get(0);
record.setEquipCode(record.getAlias());
listNew.add(record);
}
}
return Return.success(listNew);
}
}
package net.vtstar.zhongtong.avi.sqlserver.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Table;
import java.util.Date;
/**
* @Author: xiadongwei
* @Date: 2019/10/29 9:31
*/
@ApiModel("焊装车间工单表")
@Data
@Table(name = "mes_hz_work_order")
public class MesHZWorkOrderInfo {
@ApiModelProperty(notes = "销售订单号")
@Column(name = "SaleOrderNo")
private String salesOrderNo;
@ApiModelProperty(notes = "主计划工单号")
@Column(name = "PlannedOrderNo")
private String masterWorkOrderNo;
@ApiModelProperty(notes = "车间计划工单号")
@Column(name = "WONo")
private String workOrderNo;
@ApiModelProperty(notes = "开始时间")
@Column(name = "RealStartTime")
private String realStartTime;
@ApiModelProperty(notes = "结束时间")
@Column(name = "RealEndTime")
private String realEndTime;
}
package net.vtstar.zhongtong.avi.sqlserver.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.utils.CollecUtils;
import net.vtstar.utils.DateUtils;
import net.vtstar.zhongtong.avi.sqlserver.domain.MesHZWorkOrderInfo;
import net.vtstar.zhongtong.avi.sqlserver.domain.MesWorkOrderInfo;
import net.vtstar.zhongtong.avi.sqlserver.mapper.MesHZWorkOrderMapper;
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.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* mes工单同步数据
* @Author: xiadongwei
* @Date: 2019/11/4 18:20
*/
@Slf4j
@Component
public class MesHZWorkOrderJob extends QuartzJobBean {
@Resource(name = "mesSqlServerJdbcTemplate")
private JdbcTemplate mesSqlServerJdbcTemplate;
@Autowired
private MesHZWorkOrderMapper mapper;
@Value("${zt.ip.mes}")
private String ipAddress;
@Value("${zt.ip.pingtimes}")
private int pingTimes;
@Value("${zt.ip.timeout}")
private int timeOut;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
if (!PingIpUtils.ping(ipAddress, pingTimes, timeOut)){
log.error("ping: {}失败, 此次同步mes数据操作结束!", ipAddress);
return;
}
log.info("--------开始同步mes焊装数据--------");
Date startOfDay = DateUtils.getStartOfDay(0);
String dateString = DateUtils.parseDateToString(startOfDay, "yyyy-MM-dd HH:mm:ss");
StringBuilder sql = new StringBuilder();
sql.append("SELECT WONo, SaleOrderNo, PlannedOrderNo, RealStartTime, RealEndTime FROM APS_WeldingWorkOrder " +
"WHERE RealEndTime > '" + dateString + "'");
List<MesHZWorkOrderInfo> query = mesSqlServerJdbcTemplate.query(sql.toString(), (rs, rowNum) -> {
MesHZWorkOrderInfo map = new MesHZWorkOrderInfo();
map.setSalesOrderNo(rs.getString("SaleOrderNo"));
map.setMasterWorkOrderNo(rs.getString("PlannedOrderNo"));
map.setWorkOrderNo(rs.getString("WONo"));
map.setRealStartTime(rs.getString("RealStartTime"));
map.setRealEndTime(rs.getString("RealEndTime"));
return map;
});
log.error("mes查询到焊装数据: {} 条", query.size());
if (CollectionUtils.isEmpty(query)) {
//todo: ping通
log.error("连接mesSQL SERVER失败!");
return;
}
for (MesHZWorkOrderInfo info : query){
List<MesHZWorkOrderInfo> orderNo = mapper.findList(new WhereFilter() {{
addFilter("WONo", Operation.EQUAL, info.getWorkOrderNo());
}}, MesWorkOrderInfo.class);
if (CollecUtils.isEmpty(orderNo)){
mapper.insert(info);
}
}
log.info("--------同步mes焊装数据结束--------");
}
}
package net.vtstar.zhongtong.avi.sqlserver.mapper;
import net.vtstar.user.mybatis.BaseMapper;
import net.vtstar.zhongtong.avi.sqlserver.domain.MesHZWorkOrderInfo;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author: xiadongwei
* @Date: 2019/9/20 9:31
*/
@Mapper
public interface MesHZWorkOrderMapper extends BaseMapper<MesHZWorkOrderInfo> {
}
spring.profiles.include=mybatis,quartz,swagger,security,mqtt,ztip,modbus
spring.profiles.include=mybatis,quartz2,swagger,security,mqtt,ztip,modbus
# Mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
......@@ -42,4 +42,9 @@ logging.level.root=info
logging.level.net.vtstar.scada.base.equipmgt.mapper = error
logging.level.net.vtstar.zhongtong.avi.equipment.mapper = error
logging.level.net.vtstar.protocol.modbus.tcp.netty.service = error
logging.level.net.vtstar.scada.base.equipmgt.service.EquipDataService = error
logging.level.net.vtstar.zhongtong.avi.monitoring.job.AVIMonitorJob = error
logging.level.net.vtstar.zhongtong.avi.monitoring.job.RedisToCacheJob = error
logging.level.net.vtstar.scada.base.gather.job.GatherJob = error
logging.level.net.vtstar.protocol.modbus.tcp.netty.handler.ModbusClientHandler = error
logging.level.net.vtstar.protocol.modbus.tcp.netty.handler.ModbusRequestEncoder = error
logging.level.net.vtstar.scada.base.global.service.ModbusService = error
......@@ -36,7 +36,15 @@ spring.mes.sqlserver.username=wanteng
spring.mes.sqlserver.password=wanteng@2019
server.port=8082
mqtt.server-uri=tcp://localhost:1883
mqtt.server-uri=tcp://10.1.25.223:1883
logging.level.root=info
logging.level.net.vtstar=debug
#logging.level.net.vtstar=info
logging.level.net.vtstar.scada.base.equipmgt.mapper = error
logging.level.net.vtstar.zhongtong.avi.equipment.mapper = error
logging.level.net.vtstar.protocol.modbus.tcp.netty.service = error
logging.level.net.vtstar.zhongtong.avi.monitoring.job.AVIMonitorJob = error
logging.level.net.vtstar.zhongtong.avi.monitoring.job.RedisToCacheJob = error
logging.level.net.vtstar.scada.base.gather.job.GatherJob = error
logging.level.net.vtstar.protocol.modbus.tcp.netty.handler.ModbusClientHandler = error
logging.level.net.vtstar.protocol.modbus.tcp.netty.handler.ModbusRequestEncoder = error
\ No newline at end of file
......@@ -16,11 +16,11 @@ zt.ip.assemblynewenergy3=10.1.25.130
zt.ip.assemblynewenergy4=10.1.25.131
#底盘车间--四轮定位A线
zt.ip.wheelalignment1=10.1.5.25
zt.ip.wheelalignment1=10.1.25.87
#底盘车间--四轮定位B线
zt.ip.wheelalignment2=10.1.5.87
zt.ip.wheelalignment2=10.1.25.86
#底盘车间--四轮定位C线
zt.ip.wheelalignment3=10.1.5.33
zt.ip.wheelalignment3=10.1.25.88
#试交车间
#检测线
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="net.vtstar.zhongtong.avi.sqlserver.mapper.MesHZWorkOrderMapper">
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="net.vtstar.zhongtong.avi.gateway.painting.mapper.PaintingRobotRecordMapper">
</mapper>
\ No newline at end of file
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