Browse Source

20201217修改称重显示和震动数据

recovery
zy_Java 5 years ago
parent
commit
a705d142df
  1. 8
      wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/Message/CarRecordMessageDto.java
  2. 1
      wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/vo/StepVo.java
  3. 2
      wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/StepDao.java
  4. 59
      wisdomcar/src/main/java/com/ccsens/wisdomcar/rabbitMQ/RabbitController.java
  5. 141
      wisdomcar/src/main/java/com/ccsens/wisdomcar/service/RecordService.java
  6. 4
      wisdomcar/src/main/resources/application.yml
  7. 12
      wisdomcar/src/main/resources/mapper_dao/StepDao.xml

8
wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/Message/CarRecordMessageDto.java

@ -14,7 +14,7 @@ public class CarRecordMessageDto {
/**
* 类型 0开始 1体重 2rfid, 3称重一 4称重二 5称重三 6称重四 7震动 8溶栓 9团注 10维持
*/
private byte type;
private Byte type;
/**
*
*/
@ -29,6 +29,9 @@ public class CarRecordMessageDto {
private Long time;
public byte getType(){
if(this.type != null){
return type;
}
switch (addr){
case 3:
return 0;
@ -58,8 +61,9 @@ public class CarRecordMessageDto {
case 32:
return 6;
case 24:
default:
return 2;
default:
return this.type;
}
}

1
wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/vo/StepVo.java

@ -9,6 +9,7 @@ import lombok.Data;
public class StepVo {
@Data
public static class Step{
private Long id;
private String stepCode;
private byte stepType;

2
wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/StepDao.java

@ -19,4 +19,6 @@ public interface StepDao extends StepMapper {
StepVo.Step getCodeByRfId(@Param("rfid") String value);
StepVo.Step getCodeByStepOne();
String getRecordByCarIdAndType(@Param("carId") Long carId, @Param("type") byte type);
}

59
wisdomcar/src/main/java/com/ccsens/wisdomcar/rabbitMQ/RabbitController.java

@ -4,11 +4,13 @@ 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;
@ -17,6 +19,7 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
@Slf4j
@ -25,6 +28,8 @@ import java.util.*;
public class RabbitController {
@Resource
private IRecordService recordService;
@Resource
private RedisUtil redisUtil;
private Logger logger = LoggerFactory.getLogger(RabbitController.class);
@ -48,29 +53,39 @@ public class RabbitController {
return;
}
switch (carRecordMessageDto.getType()){
case 2:
case Constant.CAR_RECORD_WEIGHT:
getWeight(carRecordMessageDtoList, map, carRecordMessageDto,16);
break;
case 3:
case Constant.WEIGHT_SENSOR_1:
// getWeight(carRecordMessageDtoList, map, carRecordMessageDto,25);
break;
case 4:
case Constant.WEIGHT_SENSOR_2:
// getWeight(carRecordMessageDtoList, map, carRecordMessageDto,27);
break;
case 5:
case Constant.WEIGHT_SENSOR_3:
// getWeight(carRecordMessageDtoList, map, carRecordMessageDto,29);
break;
case 6:
case Constant.WEIGHT_SENSOR_4:
// getWeight(carRecordMessageDtoList, map, carRecordMessageDto,31);
break;
case 7:
map.put(carRecordMessageDto.getAddr(),Long.parseLong(carRecordMessageDto.getValue()));
if(map.get(18) != null && map.get(19) != null && map.get(20) != null ){
String value = map.get(18) + "," + map.get(19) + "," + map.get(20);
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;
@ -89,9 +104,27 @@ public class RabbitController {
}
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;
}
@ -100,16 +133,20 @@ public class RabbitController {
}
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){
return weight1 << 16 + weight2;
log.info("weight1 << 16 + weight2:{}",weight1 << 16 | weight2);
return weight1 << 16 | weight2;
}else {
return weight2 << 16 + weight1;
log.info("weight2 << 16 + weight1:{}",weight2 << 16 | weight1);
return weight2 << 16 | weight1;
}
}
}

141
wisdomcar/src/main/java/com/ccsens/wisdomcar/service/RecordService.java

@ -60,6 +60,7 @@ public class RecordService implements IRecordService{
if(ObjectUtil.isNull(carRecordMessageDto)){
return;
}
log.info("接受信息:{}",carRecordMessageDto);
//查找平车信息
WisdomCar wisdomCar = null;
WisdomCarExample wisdomCarExample = new WisdomCarExample();
@ -72,13 +73,6 @@ public class RecordService implements IRecordService{
log.info("找不到平车id");
return;
}
WisdomCarRecord wisdomCarRecord = new WisdomCarRecord();
wisdomCarRecord.setId(snowflake.nextId());
wisdomCarRecord.setCarId(wisdomCars.get(0).getId());
wisdomCarRecord.setType(carRecordMessageDto.getType());
wisdomCarRecord.setValue(carRecordMessageDto.getValue());
wisdomCarRecord.setTime(carRecordMessageDto.getTime());
wisdomCarRecordMapper.insertSelective(wisdomCarRecord);
//查找医院大屏的userId(暂时查找主屏幕)
Set<String> userIdSet = new HashSet<>();
@ -88,14 +82,40 @@ public class RecordService implements IRecordService{
if(CollectionUtil.isNotEmpty(screenList)){
screenList.forEach(screen -> userIdSet.add(screen.getUserId().toString()));
}
//如果是称重信息,制造测试数据发送大屏
boolean f = false;
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_WEIGHT){
String value = stepDao.getRecordByCarIdAndType(wisdomCars.get(0).getId(),carRecordMessageDto.getType());
if(!carRecordMessageDto.getValue().equals(value)){
f = true;
}
}
WisdomCarRecord wisdomCarRecord = new WisdomCarRecord();
wisdomCarRecord.setId(snowflake.nextId());
wisdomCarRecord.setCarId(wisdomCars.get(0).getId());
wisdomCarRecord.setType(carRecordMessageDto.getType());
wisdomCarRecord.setValue(carRecordMessageDto.getValue());
wisdomCarRecord.setTime(carRecordMessageDto.getTime());
wisdomCarRecordMapper.insertSelective(wisdomCarRecord);
//获取流程
StepVo.Step step = null;
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_WEIGHT || carRecordMessageDto.getType() == Constant.CAR_RECORD_START){
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_WEIGHT){
step = stepDao.getCodeByStepOne();
//处理体重数据
int weightInt = Integer.parseInt(carRecordMessageDto.getValue());
BigDecimal weight = BigDecimal.valueOf(weightInt).divide(BigDecimal.valueOf(1000),3,BigDecimal.ROUND_HALF_UP);
BigDecimal weight = BigDecimal.valueOf(weightInt).divide(BigDecimal.valueOf(1000),2,BigDecimal.ROUND_HALF_DOWN);
carRecordMessageDto.setValue(weight+"");
if(f){
log.info("处理称重信息");
doseAndSensorMessage(carRecordMessageDto, userIdSet);
}
}
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_START){
step = stepDao.getCodeByStepOne();
}
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_RFID){
step = stepDao.getCodeByRfId(carRecordMessageDto.getValue());
@ -104,55 +124,55 @@ public class RecordService implements IRecordService{
sendRecordMessage(carRecordMessageDto,userIdSet,step == null?null:step.getStepCode(),step == null?null:step.getStepType());
//如果是称重信息,制造测试数据发送大屏
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_WEIGHT){
log.info("处理称重信息");
doseAndSensorMessage(carRecordMessageDto, userIdSet);
}
// //如果是称重信息,制造测试数据发送大屏
// if(carRecordMessageDto.getType() == Constant.CAR_RECORD_WEIGHT){
//
// String value = stepDao.getRecordByCarIdAndType(wisdomCars.get(0).getId(),carRecordMessageDto.getType());
// BigDecimal weight = BigDecimal.valueOf(Double.parseDouble(value)).divide(BigDecimal.valueOf(1000),2,BigDecimal.ROUND_HALF_DOWN);
// if(!carRecordMessageDto.getValue().equals(weight.toString())){
// log.info("处理称重信息");
// doseAndSensorMessage(carRecordMessageDto, userIdSet);
// }
// }
//新建急救表存储信息
saveAidRecord(carRecordMessageDto, wisdomCar.getId());
saveAidRecord(carRecordMessageDto, wisdomCar.getId(),step);
}
private void doseAndSensorMessage(CarRecordMessageDto carRecordMessageDto, Set<String> userIdSet) throws Exception {
//体重 单位g
BigDecimal weightInt = BigDecimal.valueOf(Double.parseDouble(carRecordMessageDto.getValue()));
// /*剂量数据*/
// //计算剂量信息 总剂量 = 重量 * 0.9,团注剂量=总剂量*10%,维持剂量=总剂量*90%,均保留两位小数(重量为kg,消息发送的重量为g,需处理)
// String dosage;
// BigDecimal weight = BigDecimal.valueOf(weightInt).divide(BigDecimal.valueOf(1000),2,BigDecimal.ROUND_HALF_UP);
// //总剂量
// BigDecimal totalDose = weight.multiply(BigDecimal.valueOf(0.9)).setScale(2, BigDecimal.ROUND_HALF_UP);
// //团注剂量
// BigDecimal dose1 = totalDose.multiply(BigDecimal.valueOf(0.1)).setScale(2, BigDecimal.ROUND_HALF_UP);
// //维持剂量
// BigDecimal dose2 = totalDose.subtract(dose1);
// dosage = totalDose + "," + dose1 + "," + dose2;
// //发送消息
// CarRecordMessageDto dosageRecord = new CarRecordMessageDto();
// BeanUtil.copyProperties(carRecordMessageDto,dosageRecord);
// dosageRecord.setType(Constant.CAR_RECORD_DOSAGE);
// dosageRecord.setValue(dosage);
// //发送消息
// sendRecordMessage(dosageRecord,userIdSet);
BigDecimal sensor1 = BigDecimal.valueOf(0);
BigDecimal sensor2 = BigDecimal.valueOf(0);
BigDecimal sensor3 = BigDecimal.valueOf(0);
BigDecimal sensor4 = BigDecimal.valueOf(0);
/*称重传感器数据*/
//获取一个5000以内的平均数
Random random = new Random();
BigDecimal randomWeight1 = BigDecimal.valueOf(random.nextInt(5000)).divide(BigDecimal.valueOf(1000),3,BigDecimal.ROUND_HALF_UP);
BigDecimal randomWeight2 = BigDecimal.valueOf(random.nextInt(5000)).divide(BigDecimal.valueOf(1000),3,BigDecimal.ROUND_HALF_UP);
//体重除以4
BigDecimal aveWeight = weightInt.divide(BigDecimal.valueOf(4),3,BigDecimal.ROUND_HALF_UP);
BigDecimal sensor1 = aveWeight.subtract(randomWeight1);
BigDecimal sensor2 = aveWeight.add(randomWeight1);
BigDecimal sensor3 = aveWeight.subtract(randomWeight2);
BigDecimal sensor4 = weightInt.subtract(sensor1).subtract(sensor2).subtract(sensor3);
if(!weightInt.equals(BigDecimal.valueOf(0))){
//获取一个5000以内的平均数
Random random = new Random();
BigDecimal randomWeight1 = BigDecimal.valueOf(random.nextInt(5000)).divide(BigDecimal.valueOf(1000),2,BigDecimal.ROUND_HALF_DOWN);
BigDecimal randomWeight2 = BigDecimal.valueOf(random.nextInt(5000)).divide(BigDecimal.valueOf(1000),2,BigDecimal.ROUND_HALF_DOWN);
//体重除以4
BigDecimal aveWeight = weightInt.divide(BigDecimal.valueOf(4),3,BigDecimal.ROUND_HALF_DOWN);
if(aveWeight.compareTo(BigDecimal.valueOf(5000)) < 1){
BigDecimal divide = aveWeight.multiply(BigDecimal.valueOf(1000)).divide(BigDecimal.valueOf(3), 2, BigDecimal.ROUND_HALF_DOWN);
randomWeight1 = BigDecimal.valueOf(random.nextInt(divide.intValue())).divide(BigDecimal.valueOf(1000),2,BigDecimal.ROUND_HALF_DOWN);
randomWeight2 = BigDecimal.valueOf(random.nextInt(divide.intValue())).divide(BigDecimal.valueOf(1000),2,BigDecimal.ROUND_HALF_DOWN);
}
sensor1 = aveWeight.subtract(randomWeight1);
sensor2 = aveWeight.add(randomWeight1);
sensor3 = aveWeight.subtract(randomWeight2);
sensor4 = weightInt.subtract(sensor1).subtract(sensor2).subtract(sensor3);
if(sensor4.compareTo(BigDecimal.valueOf(0)) < 1){
sensor4 = BigDecimal.valueOf(0);
}
}
//第一个传感器
CarRecordMessageDto sensorMessage1 = new CarRecordMessageDto();
BeanUtil.copyProperties(carRecordMessageDto,sensorMessage1);
sensorMessage1.setType(Constant.WEIGHT_SENSOR_1);
sensorMessage1.setValue(sensor1 + "");
log.info("传感器一数据:{}",sensorMessage1);
//发送消息
sendRecordMessage(sensorMessage1,userIdSet,null,null);
//第二个传感器
@ -160,6 +180,7 @@ public class RecordService implements IRecordService{
BeanUtil.copyProperties(carRecordMessageDto,sensorMessage2);
sensorMessage2.setType(Constant.WEIGHT_SENSOR_2);
sensorMessage2.setValue(sensor2 + "");
log.info("传感器二数据:{}",sensorMessage2);
//发送消息
sendRecordMessage(sensorMessage2,userIdSet,null,null);
//第三个传感器
@ -167,6 +188,7 @@ public class RecordService implements IRecordService{
BeanUtil.copyProperties(carRecordMessageDto,sensorMessage3);
sensorMessage3.setType(Constant.WEIGHT_SENSOR_3);
sensorMessage3.setValue(sensor3 + "");
log.info("传感器三数据:{}",sensorMessage3);
//发送消息
sendRecordMessage(sensorMessage3,userIdSet,null,null);
//第四个传感器
@ -174,23 +196,9 @@ public class RecordService implements IRecordService{
BeanUtil.copyProperties(carRecordMessageDto,sensorMessage4);
sensorMessage4.setType(Constant.WEIGHT_SENSOR_4);
sensorMessage4.setValue(sensor4 + "");
log.info("传感器四数据:{}",sensorMessage4);
//发送消息
sendRecordMessage(sensorMessage4,userIdSet,null,null);
// /*震动传感器数据*/
// //随机生成坐标
// int shakeX = random.nextInt(65535);
// int shakeY = random.nextInt(65535);
// int shakeZ = random.nextInt(65535);
// //震动传感器
// CarRecordMessageDto shakeMessage = new CarRecordMessageDto();
// BeanUtil.copyProperties(carRecordMessageDto,shakeMessage);
// shakeMessage.setType(Constant.SHAKE_SENSOR);
// shakeMessage.setValue(shakeX + "," + shakeY + "," + shakeZ);
// //发送消息
// sendRecordMessage(shakeMessage,userIdSet);
// return dosage;
}
@ -202,6 +210,7 @@ public class RecordService implements IRecordService{
carRecordMessageDto.getValue(),carRecordMessageDto.getTime(),stepCode,stepType);
MessageRule messageRule = MessageRule.defaultRule(MessageConstant.DomainType.User);
messageRule.setAckRule(MessageRule.AckRule.NONE);
String s = JacksonUtil.beanToJson(carRecordMessageVo);
InMessage inMessage = InMessage.newToUserMessage(null,userIdSet,null,messageRule,s);
//发送消息
@ -211,7 +220,7 @@ public class RecordService implements IRecordService{
/**
* 添加急救信息和急救记录信息
*/
private void saveAidRecord(CarRecordMessageDto carRecordMessageDto, Long wisdomCarId) {
private void saveAidRecord(CarRecordMessageDto carRecordMessageDto, Long wisdomCarId, StepVo.Step step) {
// 如果是开始信息,新建一条急救表数据
String key = Constant.FIRST_AID + wisdomCarId;
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_START){
@ -224,6 +233,11 @@ public class RecordService implements IRecordService{
firstAidMapper.insertSelective(firstAid);
//存入redis
redisUtil.set(key,firstAid.getId(),Constant.FIRST_AID_REDIS_TIME);
//删除redis内此平车之前的倾角数据
String keyX = Constant.FIRST_AID + carRecordMessageDto.getAuthId() + 21;
String keyY = Constant.FIRST_AID + carRecordMessageDto.getAuthId() + 22;
String keyZ = Constant.FIRST_AID + carRecordMessageDto.getAuthId() + 23;
redisUtil.del(keyX,keyY,keyZ);
return;
}
//redis查询急救表
@ -249,14 +263,14 @@ public class RecordService implements IRecordService{
case Constant.THROMBOLYTIC:
case Constant.BOLUS_DOSE:
case Constant.MAINTENANCE_DOSE:
saveFirstAidRecord(carRecordMessageDto,firstAidId);
saveFirstAidRecord(carRecordMessageDto,firstAidId,step);
break;
default:
}
}
private void saveFirstAidRecord(CarRecordMessageDto carRecordMessageDto, Long firstAidId) {
private void saveFirstAidRecord(CarRecordMessageDto carRecordMessageDto, Long firstAidId, StepVo.Step step) {
String reidKey;
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_RFID){
reidKey = Constant.FIRST_AID + firstAidId + "_" + carRecordMessageDto.getType() + "_" + carRecordMessageDto.getValue();
@ -286,6 +300,7 @@ public class RecordService implements IRecordService{
aidRecord.setFirstAidId(firstAidId);
aidRecord.setBeginTime(carRecordMessageDto.getTime());
aidRecord.setType(carRecordMessageDto.getType());
aidRecord.setStepId(step == null ? null : step.getId());
firstAidRecordMapper.insertSelective(aidRecord);
//添加redis
redisUtil.set(reidKey,aidRecord.getId(),Constant.FIRST_AID_REDIS_TIME);

4
wisdomcar/src/main/resources/application.yml

@ -1,6 +1,6 @@
spring:
profiles:
active: dev
include: common, util-dev
active: prod
include: common, util-prod

12
wisdomcar/src/main/resources/mapper_dao/StepDao.xml

@ -5,6 +5,7 @@
<select id="getCodeByRfId" resultType="com.ccsens.wisdomcar.bean.vo.StepVo$Step">
SELECT
s.id,
s.code as stepCode,
s.step_type as stepType
FROM
@ -17,6 +18,7 @@
</select>
<select id="getCodeByStepOne" resultType="com.ccsens.wisdomcar.bean.vo.StepVo$Step">
SELECT
s.id,
s.code as stepCode,
s.step_type as stepType
FROM
@ -24,4 +26,14 @@
ORDER BY id
limit 1
</select>
<select id="getRecordByCarIdAndType" resultType="java.lang.String">
SELECT
`value`
FROM `t_wisdom_car_record`
WHERE
car_id = 1
and type = 1
ORDER BY time DESC
limit 1
</select>
</mapper>
Loading…
Cancel
Save