16 changed files with 529 additions and 149 deletions
@ -0,0 +1,17 @@ |
|||
package com.ccsens.wisdomcar.bean.vo; |
|||
|
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* @author 逗 |
|||
*/ |
|||
@Data |
|||
public class StepVo { |
|||
@Data |
|||
public static class Step{ |
|||
private Long id; |
|||
private String stepCode; |
|||
private byte stepType; |
|||
|
|||
} |
|||
} |
@ -1,55 +1,154 @@ |
|||
//package com.ccsens.wisdomcar.rabbitMQ;
|
|||
//
|
|||
//import cn.hutool.core.collection.CollectionUtil;
|
|||
//import cn.hutool.core.util.ObjectUtil;
|
|||
//import com.alibaba.fastjson.JSONObject;
|
|||
//import com.ccsens.util.bean.message.common.OutMessage;
|
|||
//import com.ccsens.util.bean.message.common.OutMessageSet;
|
|||
//import com.ccsens.util.config.RabbitMQConfig;
|
|||
//import com.ccsens.wisdomcar.bean.dto.Message.CarRecordMessageDto;
|
|||
//import com.ccsens.wisdomcar.service.IRecordService;
|
|||
//import lombok.extern.slf4j.Slf4j;
|
|||
//import org.slf4j.Logger;
|
|||
//import org.slf4j.LoggerFactory;
|
|||
//import org.springframework.amqp.rabbit.annotation.RabbitHandler;
|
|||
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
|||
//import org.springframework.stereotype.Component;
|
|||
//
|
|||
//import javax.annotation.Resource;
|
|||
//import java.util.Set;
|
|||
//
|
|||
//@Slf4j
|
|||
//@Component
|
|||
//@RabbitListener(queues = RabbitMQConfig.WISDOM_CAR)
|
|||
//public class RabbitController {
|
|||
// @Resource
|
|||
// private IRecordService recordService;
|
|||
//
|
|||
// private Logger logger = LoggerFactory.getLogger(RabbitController.class);
|
|||
//
|
|||
// @RabbitHandler
|
|||
// public void process(String messageJson) {
|
|||
// logger.info("平车上传消息数据: {}",messageJson);
|
|||
// OutMessageSet outMessageSet = JSONObject.parseObject(messageJson,OutMessageSet.class);
|
|||
// if(ObjectUtil.isNull(outMessageSet)){
|
|||
// return;
|
|||
// }
|
|||
// Set<OutMessage> messageSet = outMessageSet.getMessageSet();
|
|||
// if (CollectionUtil.isEmpty(messageSet)) {
|
|||
// return;
|
|||
// }
|
|||
// messageSet.forEach(outMessage -> {
|
|||
// CarRecordMessageDto carRecordMessageDto = JSONObject.parseObject(outMessage.getData(),CarRecordMessageDto.class);
|
|||
// if(ObjectUtil.isNull(carRecordMessageDto)){
|
|||
// return;
|
|||
// }
|
|||
// try {
|
|||
// recordService.disposeMessage(carRecordMessageDto);
|
|||
// } catch (Exception e) {
|
|||
// log.error("处理平车信息异常",e);
|
|||
// e.printStackTrace();
|
|||
// }
|
|||
// });
|
|||
// }
|
|||
//
|
|||
//}
|
|||
package com.ccsens.wisdomcar.rabbitMQ; |
|||
|
|||
import cn.hutool.core.collection.CollectionUtil; |
|||
import cn.hutool.core.util.ObjectUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.ccsens.util.RedisUtil; |
|||
import com.ccsens.util.bean.message.common.OutMessage; |
|||
import com.ccsens.util.bean.message.common.OutMessageSet; |
|||
import com.ccsens.util.config.RabbitMQConfig; |
|||
import com.ccsens.wisdomcar.bean.dto.Message.CarRecordMessageDto; |
|||
import com.ccsens.wisdomcar.service.IRecordService; |
|||
import com.ccsens.wisdomcar.util.Constant; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
import org.springframework.amqp.rabbit.annotation.RabbitHandler; |
|||
import org.springframework.amqp.rabbit.annotation.RabbitListener; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.math.BigDecimal; |
|||
import java.util.*; |
|||
|
|||
@Slf4j |
|||
@Component |
|||
@RabbitListener(queues = RabbitMQConfig.WISDOM_CAR) |
|||
public class RabbitController { |
|||
@Resource |
|||
private IRecordService recordService; |
|||
@Resource |
|||
private RedisUtil redisUtil; |
|||
|
|||
private Logger logger = LoggerFactory.getLogger(RabbitController.class); |
|||
|
|||
@RabbitHandler |
|||
public void process(String messageJson) { |
|||
logger.info("平车上传消息数据: {}",messageJson); |
|||
OutMessageSet outMessageSet = JSONObject.parseObject(messageJson,OutMessageSet.class); |
|||
if(ObjectUtil.isNull(outMessageSet)){ |
|||
return; |
|||
} |
|||
Set<OutMessage> messageSet = outMessageSet.getMessageSet(); |
|||
if (CollectionUtil.isEmpty(messageSet)) { |
|||
return; |
|||
} |
|||
|
|||
List<CarRecordMessageDto> carRecordMessageDtoList = new ArrayList<>(); |
|||
Map<Integer ,Long> map = new HashMap<>(); |
|||
messageSet.forEach(outMessage -> { |
|||
CarRecordMessageDto carRecordMessageDto = JSONObject.parseObject(outMessage.getData(),CarRecordMessageDto.class); |
|||
if(ObjectUtil.isNull(carRecordMessageDto)){ |
|||
return; |
|||
} |
|||
switch (carRecordMessageDto.getType()){ |
|||
case Constant.CAR_RECORD_WEIGHT: |
|||
getWeight(carRecordMessageDtoList, map, carRecordMessageDto,16); |
|||
break; |
|||
case Constant.WEIGHT_SENSOR_1: |
|||
// getWeight(carRecordMessageDtoList, map, carRecordMessageDto,25);
|
|||
break; |
|||
case Constant.WEIGHT_SENSOR_2: |
|||
// getWeight(carRecordMessageDtoList, map, carRecordMessageDto,27);
|
|||
break; |
|||
case Constant.WEIGHT_SENSOR_3: |
|||
// getWeight(carRecordMessageDtoList, map, carRecordMessageDto,29);
|
|||
break; |
|||
case Constant.WEIGHT_SENSOR_4: |
|||
// getWeight(carRecordMessageDtoList, map, carRecordMessageDto,31);
|
|||
break; |
|||
case Constant.SHAKE_SENSOR: |
|||
log.info("倾角传感器:{}",carRecordMessageDto); |
|||
long shakeValue = getShakeValue(carRecordMessageDto); |
|||
|
|||
map.put(carRecordMessageDto.getAddr(),shakeValue); |
|||
if(map.get(21) != null && map.get(22) != null && map.get(23) != null ){ |
|||
String value = map.get(21) + "," + map.get(22) + "," + map.get(23); |
|||
carRecordMessageDto.setValue(value); |
|||
carRecordMessageDtoList.add(carRecordMessageDto); |
|||
} |
|||
break; |
|||
case Constant.THROMBOLYTIC: |
|||
case Constant.BOLUS_DOSE: |
|||
case Constant.MAINTENANCE_DOSE: |
|||
BigDecimal value1 = BigDecimal.valueOf(Double.parseDouble(carRecordMessageDto.getValue())).divide(BigDecimal.valueOf(100),2,BigDecimal.ROUND_HALF_DOWN); |
|||
carRecordMessageDto.setValue(value1.toString()); |
|||
carRecordMessageDtoList.add(carRecordMessageDto); |
|||
break; |
|||
default: |
|||
carRecordMessageDtoList.add(carRecordMessageDto); |
|||
break; |
|||
} |
|||
}); |
|||
|
|||
carRecordMessageDtoList.forEach(carRecordMessageDto -> { |
|||
try { |
|||
log.info("处理后的平车消息:{}",carRecordMessageDto); |
|||
recordService.disposeMessage(carRecordMessageDto); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
}); |
|||
|
|||
} |
|||
|
|||
private long getShakeValue(CarRecordMessageDto carRecordMessageDto) { |
|||
String key = Constant.FIRST_AID + carRecordMessageDto.getAuthId() + carRecordMessageDto.getAddr(); |
|||
|
|||
long value = 0L; |
|||
//redis查找该平车上一次的倾角数据
|
|||
Object o = redisUtil.get(key); |
|||
if(ObjectUtil.isNull(o)){ |
|||
//如果没有依次存入redis,value值都是0
|
|||
redisUtil.set(key,carRecordMessageDto.getValue()); |
|||
carRecordMessageDto.setValue(0+""); |
|||
}else { |
|||
//如果有,用当前的值减去上次的数据,得到的是新的value
|
|||
value = Long.parseLong(carRecordMessageDto.getValue()) - Long.parseLong(o.toString()); |
|||
} |
|||
return value; |
|||
} |
|||
|
|||
private void getWeight(List<CarRecordMessageDto> carRecordMessageDtoList, Map<Integer, Long> map, CarRecordMessageDto carRecordMessageDto,int highAddr) { |
|||
boolean flag = carRecordMessageDto.getAddr() == highAddr; |
|||
Long weight = getWeight(map, carRecordMessageDto, flag ? highAddr + 1 : highAddr,flag); |
|||
log.info("计算后的重量:{}",weight); |
|||
if(weight == null){ |
|||
return; |
|||
} |
|||
carRecordMessageDto.setValue(weight.toString()); |
|||
carRecordMessageDtoList.add(carRecordMessageDto); |
|||
} |
|||
|
|||
private Long getWeight(Map<Integer, Long> map, CarRecordMessageDto carRecordMessageDto,int value2,boolean firstHigh) { |
|||
log.info("value = {},,firstHigh={}",value2,firstHigh); |
|||
if(map.get(value2) == null){ |
|||
map.put(carRecordMessageDto.getAddr(),Long.parseLong(carRecordMessageDto.getValue())); |
|||
return null; |
|||
}else { |
|||
long weight1 = Long.parseLong(carRecordMessageDto.getValue()); |
|||
long weight2 = map.get(value2); |
|||
log.info("准备计算重量:{},,,{}",weight1,weight2); |
|||
if(firstHigh){ |
|||
log.info("weight1 << 16 + weight2:{}",weight1 << 16 | weight2); |
|||
return weight1 << 16 | weight2; |
|||
}else { |
|||
log.info("weight2 << 16 + weight1:{}",weight2 << 16 | weight1); |
|||
return weight2 << 16 | weight1; |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
@ -1,6 +1,6 @@ |
|||
spring: |
|||
profiles: |
|||
active: dev |
|||
include: common, util-dev |
|||
active: prod |
|||
include: common, util-prod |
|||
|
|||
|
|||
|
Loading…
Reference in new issue