Commit efc8d8c4 authored by 喻训浩's avatar 喻训浩

fix: avi修改

parent 1c06e3f1
...@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import net.vtstar.user.search.JoinColumn; import net.vtstar.user.search.JoinColumn;
import net.vtstar.user.search.Search; import net.vtstar.user.search.Search;
import net.vtstar.zhongtong.avi.monitoring.domain.Skid;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.BusType; import net.vtstar.zhongtong.avi.monitoring.domain.enums.BusType;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.ProductionType; import net.vtstar.zhongtong.avi.monitoring.domain.enums.ProductionType;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState; import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState;
...@@ -51,10 +52,15 @@ public class PaintshopStation { ...@@ -51,10 +52,15 @@ public class PaintshopStation {
private Long laneId; private Long laneId;
@ApiModelProperty(notes = "车道编号") @ApiModelProperty(notes = "车道编号")
@JoinColumn(tableName = PaintshopLane.class, name = "code") @JoinColumn(tableName = PaintshopLane.class, name = "lane_code")
@Search @Search
private String laneCode; private String laneCode;
@ApiModelProperty(notes = "平移车道编号")
@JoinColumn(tableName = PaintshopLane.class, name = "vehicle_lane_code")
@Search
private String vehicleLaneCode;
@ApiModelProperty(notes = "工位编号") @ApiModelProperty(notes = "工位编号")
@NotNull(message = "工位编号不能为空") @NotNull(message = "工位编号不能为空")
@Column(name = "code") @Column(name = "code")
...@@ -66,7 +72,7 @@ public class PaintshopStation { ...@@ -66,7 +72,7 @@ public class PaintshopStation {
@ApiModelProperty(notes = "滑撬ID") @ApiModelProperty(notes = "滑撬ID")
@Column(name = "skid_id") @Column(name = "skid_id")
private Long skidID; private String skidID;
@ApiModelProperty(notes = "序号") @ApiModelProperty(notes = "序号")
@NotNull(message = "工位序号不能为空") @NotNull(message = "工位序号不能为空")
...@@ -88,4 +94,10 @@ public class PaintshopStation { ...@@ -88,4 +94,10 @@ public class PaintshopStation {
@ApiModelProperty(notes = "平移车到位信号",hidden = true) @ApiModelProperty(notes = "平移车到位信号",hidden = true)
private Boolean arrive; private Boolean arrive;
@ApiModelProperty(notes = "当前绑定滑撬",hidden = true)
private Skid skid;
@ApiModelProperty(notes = "工位正反转",hidden = true)
private Boolean turn;
} }
...@@ -27,4 +27,9 @@ public class CacheConfig { ...@@ -27,4 +27,9 @@ public class CacheConfig {
Cache stationCache(ConcurrentMapCacheManager cacheManager) { Cache stationCache(ConcurrentMapCacheManager cacheManager) {
return cacheManager.getCache("stationCache"); return cacheManager.getCache("stationCache");
} }
@Bean
Cache laneStationCache(ConcurrentMapCacheManager cacheManager) {
return cacheManager.getCache("laneStationCache");
}
} }
package net.vtstar.zhongtong.avi.global.constant;
public class Constant {
public static final String SKID_PREFIX = "skid:";
public static final String STATION_PREFIX = "station:";
public static final String HANZHUANG_VEHICLE1_RFID = "11111";
public static final String HANZHUANG_VEHICLE2_RFID = "22222";
public static final String HANZHUANG_VEHICLE1_BUSNO_KEY = "HZC1";
public static final String HANZHUANG_VEHICLE2_BUSNO_KEY = "HZC2";
}
...@@ -9,6 +9,7 @@ import net.vtstar.zhongtong.avi.ledlamp.domain.vo.LedStationVO; ...@@ -9,6 +9,7 @@ import net.vtstar.zhongtong.avi.ledlamp.domain.vo.LedStationVO;
import net.vtstar.zhongtong.avi.ledlamp.service.LedService; import net.vtstar.zhongtong.avi.ledlamp.service.LedService;
import net.vtstar.zhongtong.avi.monitoring.domain.Warning; import net.vtstar.zhongtong.avi.monitoring.domain.Warning;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState; import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState;
import net.vtstar.zhongtong.avi.monitoring.domain.vo.VocVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -52,7 +53,7 @@ public class LedController { ...@@ -52,7 +53,7 @@ public class LedController {
roomInfo.setStationState(StationState.USE); roomInfo.setStationState(StationState.USE);
roomInfo.setWorkingHours(new BigDecimal(30)); roomInfo.setWorkingHours(new BigDecimal(30));
RoomInfo roomInfo2= new RoomInfo(); RoomInfo roomInfo2 = new RoomInfo();
roomInfo2.setName("喷漆室2"); roomInfo2.setName("喷漆室2");
roomInfo2.setStationState(StationState.FREE); roomInfo2.setStationState(StationState.FREE);
roomInfo2.setWorkingHours(new BigDecimal(22)); roomInfo2.setWorkingHours(new BigDecimal(22));
...@@ -63,4 +64,14 @@ public class LedController { ...@@ -63,4 +64,14 @@ public class LedController {
return Return.success(ledStationVO); return Return.success(ledStationVO);
} }
@ApiOperation(value = "led VOC浓度接口", response = VocVO.class)
@GetMapping(value = "/info/VOC")
private Return getVOCInfo() {
VocVO vocVO = new VocVO();
vocVO.setExitCONC(new BigDecimal(0.47));
vocVO.setNorthCONC(new BigDecimal(0.25));
vocVO.setSouthCONC(new BigDecimal(0.15));
return Return.success(vocVO);
}
} }
...@@ -25,8 +25,11 @@ public class PDAController { ...@@ -25,8 +25,11 @@ public class PDAController {
private Return hanZhuangBound(@RequestBody JSONObject json) { private Return hanZhuangBound(@RequestBody JSONObject json) {
log.info(json.toJSONString()); log.info(json.toJSONString());
ParamAssert.notNull(json.get("vehicleNo"),"param is null"); String vehicleNo = json.getString("vehicleNo");
ParamAssert.notNull(json.get("busNo"),"param is null"); String busNo = json.getString("busNo");
ParamAssert.notNull(vehicleNo,"param is null");
ParamAssert.notNull(busNo,"param is null");
pdaService.bound(vehicleNo,busNo);
return Return.success(); return Return.success();
} }
...@@ -35,8 +38,9 @@ public class PDAController { ...@@ -35,8 +38,9 @@ public class PDAController {
private Return changeSkid(@RequestBody JSONObject json) { private Return changeSkid(@RequestBody JSONObject json) {
log.info(json.toJSONString()); log.info(json.toJSONString());
ParamAssert.notNull(json.get("sourceStation"),"param is null"); ParamAssert.notNull(json.get("orderNo"),"orderNo is null");
ParamAssert.notNull(json.get("sourceStation"),"param is null"); ParamAssert.notNull(json.get("sourceStation"),"sourceStation is null");
ParamAssert.notNull(json.get("sourceStation"),"sourceStation is null");
return Return.success(); return Return.success();
} }
...@@ -48,4 +52,13 @@ public class PDAController { ...@@ -48,4 +52,13 @@ public class PDAController {
ParamAssert.notNull(json.get("busNo"),"param is null"); ParamAssert.notNull(json.get("busNo"),"param is null");
return Return.success(); return Return.success();
} }
@ApiOperation(value = "电泳重新绑定电泳工单号")
@PostMapping("/elec/bound/order")
private Return elecBoundOrder(@RequestBody JSONObject json) {
ParamAssert.notNull(json.get("sourceStation"),"sourceStation is null");
ParamAssert.notNull(json.get("sourceStation"),"sourceStation is null");
return Return.success(true);
}
} }
...@@ -3,6 +3,7 @@ package net.vtstar.zhongtong.avi.monitoring.domain; ...@@ -3,6 +3,7 @@ package net.vtstar.zhongtong.avi.monitoring.domain;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.ProductionType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Table; import javax.persistence.Table;
...@@ -25,4 +26,10 @@ public class Skid { ...@@ -25,4 +26,10 @@ public class Skid {
@ApiModelProperty(notes = "绑定车身号") @ApiModelProperty(notes = "绑定车身号")
private String busNo; private String busNo;
@ApiModelProperty(value = "车体类型")
private ProductionType busType;
private String ID;
} }
package net.vtstar.zhongtong.avi.monitoring.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel("led大屏 voc前端显示数据")
public class VocVO {
@ApiModelProperty(notes = "南进口VOC浓度")
private BigDecimal southCONC;
@ApiModelProperty(notes = "南进口VOC浓度")
private BigDecimal northCONC;
@ApiModelProperty(notes = "出口VOC浓度")
private BigDecimal exitCONC;
}
...@@ -129,20 +129,4 @@ public class AVIMonitorJob extends GatherJob { ...@@ -129,20 +129,4 @@ public class AVIMonitorJob extends GatherJob {
// hashOperations.putAll("station", stationMap); // hashOperations.putAll("station", stationMap);
} }
public Object handleValue(String fieldName, Object value) {
if (fieldName.startsWith("stationState")) {
String stationCode = fieldName.split("_")[1];
List<PaintshopStation> stationList = stationMapper.findList(new WhereFilter() {{
addFilter("code", Operation.EQUAL, stationCode);
}}, PaintshopStation.class);
if (CollectionUtils.isEmpty(stationList)) {
throw new IllegalArgumentException("找不到编号为:" + stationCode + ":的工位!");
}
PaintshopStation station = stationList.get(0);
Integer state = (Integer) value;
station.setState(state == 0 ? StationState.FREE : StationState.USE);
}
//if (fieldName.startsWith())
return value;
}
} }
...@@ -36,8 +36,8 @@ public class ReadStationToCacheRunner implements CommandLineRunner { ...@@ -36,8 +36,8 @@ public class ReadStationToCacheRunner implements CommandLineRunner {
@Autowired @Autowired
private SkidMapper skidMapper; private SkidMapper skidMapper;
// @Resource(name = "redisTemplate") @Resource(name = "redisTemplate")
// protected HashOperations hashOperations; protected HashOperations hashOperations;
@Override @Override
...@@ -56,9 +56,9 @@ public class ReadStationToCacheRunner implements CommandLineRunner { ...@@ -56,9 +56,9 @@ public class ReadStationToCacheRunner implements CommandLineRunner {
// Map<String, Skid> skid = skids.stream().collect(Collectors.toMap(Skid::getRfid, s -> s, (k1, k2) -> k1)); // Map<String, Skid> skid = skids.stream().collect(Collectors.toMap(Skid::getRfid, s -> s, (k1, k2) -> k1));
// hashOperations.putAll("skid", skid); // hashOperations.putAll("skid", skid);
// } // }
// List<Skid> skids = skidMapper.findList(new WhereFilter(), Skid.class);
for (PaintshopStation station : stations) { // for (PaintshopStation station : stations) {
stationCache.put(station.getCode(), station); // stationCache.put(station.getCode(), station);
} // }
} }
} }
package net.vtstar.zhongtong.avi.monitoring.service; package net.vtstar.zhongtong.avi.monitoring.service;
import net.vtstar.zhongtong.avi.monitoring.domain.Skid;
import net.vtstar.zhongtong.avi.monitoring.domain.Vehicle;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Map;
@Service @Service
public class PDAService { public class PDAService {
public void bound(String busOrderNo) { @Resource(name = "redisTemplate")
protected HashOperations hashOperations;
@Resource(name = "redisTemplate")
protected ValueOperations valueOperations;
//钣金上车绑定
public void bound(String vehicleNo, String busNo) {
// TODO: 2019-11-02 判断车身工单号是否在计划中
valueOperations.set(vehicleNo, busNo);
} }
} }
package net.vtstar.zhongtong.avi.monitoring.service;
import net.vtstar.zhongtong.avi.global.constant.Constant;
import net.vtstar.zhongtong.avi.monitoring.domain.Skid;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Map;
@Service
public class SkidService {
@Resource(name = "redisTemplate")
protected HashOperations hashOperations;
@Resource(name = "redisTemplate")
protected ValueOperations valueOperations;
public void boundSkid(String busNo,String skidNo){
String skidName = Constant.SKID_PREFIX + skidNo;
Skid skid = (Skid) valueOperations.get(skidName);
skid.setBusNo(busNo);
valueOperations.set(skidName,skid);
}
}
package net.vtstar.zhongtong.avi.mqtt.handle; package net.vtstar.zhongtong.avi.mqtt.handle;
import com.alibaba.fastjson.JSONObject;
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.vtstar.protocol.modbus.tcp.netty.service.ModbusTemplate;
import net.vtstar.scada.base.global.service.ModbusService;
import net.vtstar.scada.base.mqtt.utils.MqttConstants; import net.vtstar.scada.base.mqtt.utils.MqttConstants;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.OrderBy;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo;
import net.vtstar.zhongtong.avi.equipment.domain.PaintshopStation;
import net.vtstar.zhongtong.avi.equipment.domain.RuntimeRecord;
import net.vtstar.zhongtong.avi.equipment.mapper.PaintshopStationMapper;
import net.vtstar.zhongtong.avi.global.constant.Constant;
import net.vtstar.zhongtong.avi.monitoring.domain.Skid; import net.vtstar.zhongtong.avi.monitoring.domain.Skid;
import net.vtstar.zhongtong.avi.monitoring.domain.Vehicle; import net.vtstar.zhongtong.avi.monitoring.domain.Vehicle;
import net.vtstar.zhongtong.avi.monitoring.domain.enums.StationState;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations; import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ValueOperations;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.MessagingException; import org.springframework.messaging.MessagingException;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Component @Component
public class RfidMessageHandler extends AbstractTesterMessageHandler { public class RfidMessageHandler extends AbstractTesterMessageHandler {
@Autowired
private RedisTemplate redisTemplate;
@Resource(name = "redisTemplate") @Resource(name = "redisTemplate")
private ListOperations listOperations; private ListOperations listOperations;
@Resource(name = "redisTemplate") @Resource(name = "redisTemplate")
private HashOperations hashOperations; private HashOperations hashOperations;
@Resource(name = "redisTemplate") @Resource(name = "redisTemplate")
private ValueOperations valueOperations; private ValueOperations valueOperations;
@Resource(name = "laneStationCache")
private Cache laneStationCache;
@Autowired
private ModbusService modbusService;
@Autowired
private ModbusTemplate modbusTemplate;
@Autowired
private PaintshopStationMapper stationMapper;
public RfidMessageHandler() { public RfidMessageHandler() {
super("skid", "data/all"); super("skid", "data/all");
} }
@Override @Override
public void handleMessage(Message<?> message) throws MessagingException { public void handleMessage(Message<?> message) throws MessagingException {
Skid skid = (Skid) message.getPayload(); JSONObject json = (JSONObject) message.getPayload();
System.out.println(skid); String id = json.getString("ID");
Integer state = json.getIntValue("state");
MessageHeaders headers = message.getHeaders(); MessageHeaders headers = message.getHeaders();
String code = headers.get(MqttConstants.MSG_HEADER_KEY_EQUIPMENTNUMBER, String.class); String vehicleCode = headers.get(MqttConstants.MSG_HEADER_KEY_EQUIPMENTNUMBER, String.class);
Map<String, Vehicle> vehicleMap = hashOperations.entries("vehicle"); Map<String, Vehicle> vehicleMap = hashOperations.entries("vehicle");
Vehicle vehicle = vehicleMap.get(code); Skid skid = (Skid) valueOperations.get(Constant.SKID_PREFIX + id);
vehicle.setState(skid.getState() == 1 ? true : false); if (vehicleCode.equals(Constant.HANZHUANG_VEHICLE1_RFID) || vehicleCode.equals(Constant.HANZHUANG_VEHICLE1_RFID)) {
vehicle.setCurrentRfid(skid.getRfid()); String busNo = (String) valueOperations.get(vehicleCode);
valueOperations.set(code,vehicle); skid.setBusNo(busNo);
valueOperations.set(Constant.SKID_PREFIX + id, skid);
}
Vehicle vehicle = vehicleMap.get(vehicleCode);
// TODO: 2019-11-02 获得正反转信息,以及相邻的工位
Integer land = vehicle.getLane();
Set<String> keys = redisTemplate.keys(Constant.STATION_PREFIX + land + ":*");
List<PaintshopStation> arriveList = new ArrayList<>();
List<PaintshopStation> stationList = laneStationCache.get(land.toString(), ArrayList.class);
for (PaintshopStation station : stationList) {
String code = station.getCode();
PaintshopStation sta = (PaintshopStation) valueOperations.get(Constant.STATION_PREFIX + code);
if (sta.getArrive()) {
arriveList.add(sta);
}
}
if (CollectionUtils.isEmpty(stationList)) {
log.error("找不到对平移车到位信号! 平移车 id:{},滑撬 {}", vehicle.getCode(), id);
}
Map<String, List<PaintshopStation>> listMap = stationList.stream().filter(sta -> sta.getTurn() != null)
.collect(Collectors.groupingBy(PaintshopStation::getLaneCode));
PaintshopStation sourceStation;
if (listMap.size() > 1) {
} else {
List<PaintshopStation> stations = listMap.get(0);
if (stations.size() == 1) {
sourceStation = stations.get(0);
} else {
}
}
vehicle.setCurrentRfid(id);
StationState oldState = null;
String oldSkidId = null;
if (state == 1) {
//获得正反转信息,得到平移车相邻工位信息
PaintshopStation sta = new PaintshopStation();
List<PaintshopStation> stations;
stations = stationMapper.findList(new WhereFilter() {{
addFilter(PaintshopStation.class, "lane_id", Operation.EQUAL, sta.getLaneId());
addOrderBy(RuntimeRecord.class, "sequence", OrderBy.DESC);
}}, PaintshopStation.class);
for (PaintshopStation station : stations) {
station.setOldState(oldState);
station.setSkidID(oldSkidId);
oldState = station.getState();
oldSkidId = station.getSkidID();
station.setState(StationState.USE);
station.setSkidID(id);
}
String currentRfid = vehicle.getCurrentRfid();
vehicle.setCurrentRfid(null);
} else if (state == 0) {
List<PaintshopStation> stations = new ArrayList<>();
for (PaintshopStation station : stations) {
station.setOldState(oldState);
station.setSkidID(oldSkidId);
oldState = station.getState();
oldSkidId = station.getSkidID();
station.setState(StationState.FREE);
station.setSkidID(id);
}
PaintshopStation station = new PaintshopStation();
station.setState(StationState.FREE);
station.setSkidID(null);
}
} }
} }
...@@ -9,7 +9,7 @@ spring.aop.auto=true ...@@ -9,7 +9,7 @@ spring.aop.auto=true
spring.main.allow-bean-definition-overriding=true spring.main.allow-bean-definition-overriding=true
# server # server
server.port=8080 server.port=8082
spring.servlet.multipart.max-file-size=1000MB spring.servlet.multipart.max-file-size=1000MB
spring.servlet.multipart.max-request-size=2000MB spring.servlet.multipart.max-request-size=2000MB
spring.servlet.multipart.enabled=true spring.servlet.multipart.enabled=true
......
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