Lihong@123456 5 years ago
parent
commit
458942f1ae
  1. 2
      util/src/main/java/com/ccsens/util/WebConstant.java
  2. 3
      wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/Message/CarRecordMessageDto.java
  3. 7
      wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/vo/Message/CarRecordMessageVo.java
  4. 21
      wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/StepDao.java
  5. 112
      wisdomcar/src/main/java/com/ccsens/wisdomcar/rabbitMQ/RabbitController.java
  6. 190
      wisdomcar/src/main/java/com/ccsens/wisdomcar/service/RecordService.java
  7. 1
      wisdomcar/src/main/java/com/ccsens/wisdomcar/service/StatisticsService.java
  8. 8
      wisdomcar/src/main/java/com/ccsens/wisdomcar/util/Constant.java
  9. 1
      wisdomcar/src/main/resources/mapper_dao/StatisticsDao.xml
  10. 25
      wisdomcar/src/main/resources/mapper_dao/StepDao.xml

2
util/src/main/java/com/ccsens/util/WebConstant.java

@ -663,7 +663,7 @@ public class WebConstant {
}
}
public static Message_Ack_Event phaseOf(String phase) { // 手写的从String到enum的转换函数
if(phase.equalsIgnoreCase("Ack")) {
if("Ack".equalsIgnoreCase(phase)) {
return Ack;
} else {
return null;

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

@ -12,7 +12,7 @@ public class CarRecordMessageDto {
*/
private String carNumber;
/**
* 类型 0开始 1体重 2rfid, 3称重一 4称重二 5称重三 6称重四 7震动 8剂量
* 类型 0开始 1体重 2rfid, 3称重一 4称重二 5称重三 6称重四 7震动 8溶栓 9团注 10维持
*/
private byte type;
/**
@ -23,4 +23,5 @@ public class CarRecordMessageDto {
* 时间
*/
private Long time;
}

7
wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/vo/Message/CarRecordMessageVo.java

@ -28,6 +28,10 @@ public class CarRecordMessageVo extends BaseMessageDto {
* 时间
*/
private Long time;
/**
* 流程
*/
private String step;
}
private Data data;
@ -36,13 +40,14 @@ public class CarRecordMessageVo extends BaseMessageDto {
setTime(System.currentTimeMillis());
}
public CarRecordMessageVo(String carNumber,int type,String value,Long time){
public CarRecordMessageVo(String carNumber,int type,String value,Long time,String step){
this();
Data d = new Data();
d.setCarNumber(carNumber);
d.setType(type);
d.setValue(value);
d.setTime(time);
d.setStep(step);
setData(d);
}
}

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

@ -0,0 +1,21 @@
package com.ccsens.wisdomcar.persist.dao;
import com.ccsens.wisdomcar.persist.mapper.StepMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
/**
* @author
*/
@Repository
public interface StepDao extends StepMapper {
/**
* 通过rfid查找流程
* @param value rfid
* @return 返回流程的code
*/
String getCodeByRfId(@Param("rfid") String value);
String getCodeByStepOne();
}

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

@ -1,57 +1,55 @@
//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 com.ccsens.wisdomcar.service.RecordService;
//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.List;
//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 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();
}
});
}
}

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

@ -12,6 +12,7 @@ import com.ccsens.util.bean.message.common.MessageRule;
import com.ccsens.wisdomcar.bean.dto.Message.CarRecordMessageDto;
import com.ccsens.wisdomcar.bean.po.*;
import com.ccsens.wisdomcar.bean.vo.Message.CarRecordMessageVo;
import com.ccsens.wisdomcar.persist.dao.StepDao;
import com.ccsens.wisdomcar.persist.mapper.*;
import com.ccsens.wisdomcar.util.Constant;
import lombok.extern.slf4j.Slf4j;
@ -20,7 +21,6 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
@ -42,6 +42,8 @@ public class RecordService implements IRecordService{
@Resource
private FirstAidRecordMapper firstAidRecordMapper;
@Resource
private StepDao stepDao;
@Resource
private Snowflake snowflake;
@Resource
private IMessageService messageService;
@ -83,38 +85,46 @@ public class RecordService implements IRecordService{
if(CollectionUtil.isNotEmpty(screenList)){
screenList.forEach(screen -> userIdSet.add(screen.getUserId().toString()));
}
//获取流程
String step = null;
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_WEIGHT){
step = stepDao.getCodeByStepOne();
}
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_RFID){
step = stepDao.getCodeByRfId(carRecordMessageDto.getValue());
}
//发送消息
sendRecordMessage(carRecordMessageDto,userIdSet);
sendRecordMessage(carRecordMessageDto,userIdSet,step);
//如果是称重信息,制造测试数据发送大屏
String dosage = "";
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_WEIGHT){
dosage = doseAndSensorMessage(carRecordMessageDto, userIdSet);
doseAndSensorMessage(carRecordMessageDto, userIdSet);
}
//新建急救表存储信息
saveAidRecord(carRecordMessageDto, wisdomCar.getId(),dosage);
saveAidRecord(carRecordMessageDto, wisdomCar.getId());
}
private String doseAndSensorMessage(CarRecordMessageDto carRecordMessageDto, Set<String> userIdSet) throws Exception {
private void doseAndSensorMessage(CarRecordMessageDto carRecordMessageDto, Set<String> userIdSet) throws Exception {
//体重 单位g
int weightInt = Integer.parseInt(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);
// /*剂量数据*/
// //计算剂量信息 总剂量 = 重量 * 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);
/*称重传感器数据*/
//获取一个5000以内的平均数
@ -133,51 +143,51 @@ public class RecordService implements IRecordService{
sensorMessage1.setType(Constant.WEIGHT_SENSOR_1);
sensorMessage1.setValue(sensor1 + "");
//发送消息
sendRecordMessage(sensorMessage1,userIdSet);
sendRecordMessage(sensorMessage1,userIdSet,null);
//第二个传感器
CarRecordMessageDto sensorMessage2 = new CarRecordMessageDto();
BeanUtil.copyProperties(carRecordMessageDto,sensorMessage2);
sensorMessage2.setType(Constant.WEIGHT_SENSOR_2);
sensorMessage2.setValue(sensor2 + "");
//发送消息
sendRecordMessage(sensorMessage2,userIdSet);
sendRecordMessage(sensorMessage2,userIdSet,null);
//第三个传感器
CarRecordMessageDto sensorMessage3 = new CarRecordMessageDto();
BeanUtil.copyProperties(carRecordMessageDto,sensorMessage3);
sensorMessage3.setType(Constant.WEIGHT_SENSOR_3);
sensorMessage3.setValue(sensor3 + "");
//发送消息
sendRecordMessage(sensorMessage3,userIdSet);
sendRecordMessage(sensorMessage3,userIdSet,null);
//第四个传感器
CarRecordMessageDto sensorMessage4 = new CarRecordMessageDto();
BeanUtil.copyProperties(carRecordMessageDto,sensorMessage4);
sensorMessage4.setType(Constant.WEIGHT_SENSOR_4);
sensorMessage4.setValue(sensor4 + "");
//发送消息
sendRecordMessage(sensorMessage4,userIdSet);
sendRecordMessage(sensorMessage4,userIdSet,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.WEIGHT_SENSOR_4);
shakeMessage.setValue(shakeX + "," + shakeY + "," + shakeZ);
//发送消息
sendRecordMessage(shakeMessage,userIdSet);
// /*震动传感器数据*/
// //随机生成坐标
// 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;
// return dosage;
}
/**
* 发送消息
*/
private void sendRecordMessage(CarRecordMessageDto carRecordMessageDto,Set<String> userIdSet) throws Exception {
CarRecordMessageVo carRecordMessageVo = new CarRecordMessageVo(carRecordMessageDto.getCarNumber(),carRecordMessageDto.getType(),carRecordMessageDto.getValue(),carRecordMessageDto.getTime());
private void sendRecordMessage(CarRecordMessageDto carRecordMessageDto,Set<String> userIdSet,String step) throws Exception {
CarRecordMessageVo carRecordMessageVo = new CarRecordMessageVo(carRecordMessageDto.getCarNumber(),carRecordMessageDto.getType(),carRecordMessageDto.getValue(),carRecordMessageDto.getTime(),step);
MessageRule messageRule = MessageRule.defaultRule(MessageConstant.DomainType.User);
String s = JacksonUtil.beanToJson(carRecordMessageVo);
@ -189,7 +199,7 @@ public class RecordService implements IRecordService{
/**
* 添加急救信息和急救记录信息
*/
private void saveAidRecord(CarRecordMessageDto carRecordMessageDto, Long wisdomCarId,String dosage) {
private void saveAidRecord(CarRecordMessageDto carRecordMessageDto, Long wisdomCarId) {
// 如果是开始信息,新建一条急救表数据
String key = Constant.FIRST_AID + wisdomCarId;
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_START){
@ -220,60 +230,52 @@ public class RecordService implements IRecordService{
if(firstAidId == null){
return;
}
//如果是称重信息
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_WEIGHT){
String weightKey = Constant.FIRST_AID + firstAidId + "_" + Constant.CAR_RECORD_WEIGHT;
Object weightRedis = redisUtil.get(weightKey);
if(ObjectUtil.isNotNull(weightRedis)){
return;
}
FirstAidRecordExample aidRecordExample = new FirstAidRecordExample();
aidRecordExample.createCriteria().andTypeEqualTo(carRecordMessageDto.getType()).andFirstAidIdEqualTo(firstAidId);
if(firstAidRecordMapper.countByExample(aidRecordExample) > 0){
return;
}
//没有数据则添加
FirstAidRecord aidRecord = new FirstAidRecord();
aidRecord.setId(snowflake.nextId());
aidRecord.setFirstAidId(firstAidId);
aidRecord.setValue(carRecordMessageDto.getValue());
aidRecord.setBeginTime(carRecordMessageDto.getTime());
aidRecord.setType(carRecordMessageDto.getType());
firstAidRecordMapper.insertSelective(aidRecord);
//添加redis
redisUtil.set(weightKey,aidRecord.getId(),Constant.FIRST_AID_REDIS_TIME);
//添加剂量信息
FirstAidRecord dosageRecord = new FirstAidRecord();
dosageRecord.setId(snowflake.nextId());
dosageRecord.setFirstAidId(firstAidId);
dosageRecord.setValue(dosage);
dosageRecord.setType(Constant.SHAKE_SENSOR);
dosageRecord.setBeginTime(carRecordMessageDto.getTime());
firstAidRecordMapper.insertSelective(dosageRecord);
switch (carRecordMessageDto.getType()){
case Constant.CAR_RECORD_RFID :
case Constant.CAR_RECORD_WEIGHT:
case Constant.THROMBOLYTIC:
case Constant.BOLUS_DOSE:
case Constant.MAINTENANCE_DOSE:
saveFirstAidRecord(carRecordMessageDto,firstAidId);
break;
default:
}
//如果是rfid信息
}
private void saveFirstAidRecord(CarRecordMessageDto carRecordMessageDto, Long firstAidId) {
String reidKey;
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_RFID){
String reidKey = Constant.FIRST_AID + firstAidId + "_" + Constant.CAR_RECORD_RFID + "_" + carRecordMessageDto.getValue();
Object weightRedis = redisUtil.get(reidKey);
if(ObjectUtil.isNotNull(weightRedis)){
return;
}
FirstAidRecordExample aidRecordExample = new FirstAidRecordExample();
reidKey = Constant.FIRST_AID + firstAidId + "_" + carRecordMessageDto.getType() + "_" + carRecordMessageDto.getValue();
}else {
reidKey = Constant.FIRST_AID + firstAidId + "_" + carRecordMessageDto.getType();
}
Object weightRedis = redisUtil.get(reidKey);
if(ObjectUtil.isNotNull(weightRedis)){
return;
}
FirstAidRecordExample aidRecordExample = new FirstAidRecordExample();
if(carRecordMessageDto.getType() == Constant.CAR_RECORD_RFID) {
aidRecordExample.createCriteria().andFirstAidIdEqualTo(firstAidId)
.andTypeEqualTo(carRecordMessageDto.getType()).andValueEqualTo(carRecordMessageDto.getValue());
if(firstAidRecordMapper.countByExample(aidRecordExample) > 0){
return;
}
//没有数据则添加
FirstAidRecord aidRecord = new FirstAidRecord();
aidRecord.setId(snowflake.nextId());
aidRecord.setValue(carRecordMessageDto.getValue());
aidRecord.setFirstAidId(firstAidId);
aidRecord.setBeginTime(carRecordMessageDto.getTime());
aidRecord.setType(carRecordMessageDto.getType());
firstAidRecordMapper.insertSelective(aidRecord);
//添加redis
redisUtil.set(reidKey,aidRecord.getId(),Constant.FIRST_AID_REDIS_TIME);
}else {
aidRecordExample.createCriteria().andFirstAidIdEqualTo(firstAidId)
.andTypeEqualTo(carRecordMessageDto.getType());
}
if(firstAidRecordMapper.countByExample(aidRecordExample) > 0){
return;
}
//没有数据则添加
FirstAidRecord aidRecord = new FirstAidRecord();
aidRecord.setId(snowflake.nextId());
aidRecord.setValue(carRecordMessageDto.getValue());
aidRecord.setFirstAidId(firstAidId);
aidRecord.setBeginTime(carRecordMessageDto.getTime());
aidRecord.setType(carRecordMessageDto.getType());
firstAidRecordMapper.insertSelective(aidRecord);
//添加redis
redisUtil.set(reidKey,aidRecord.getId(),Constant.FIRST_AID_REDIS_TIME);
}
}

1
wisdomcar/src/main/java/com/ccsens/wisdomcar/service/StatisticsService.java

@ -10,7 +10,6 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.security.PrivateKey;
import java.util.ArrayList;
import java.util.List;

8
wisdomcar/src/main/java/com/ccsens/wisdomcar/util/Constant.java

@ -29,8 +29,12 @@ public class Constant {
public static final byte WEIGHT_SENSOR_4 = 6;
/**振动传感器(倾角传感器)*/
public static final byte SHAKE_SENSOR = 7;
/**剂量*/
public static final byte CAR_RECORD_DOSAGE = 8;
/**溶栓剂量*/
public static final byte THROMBOLYTIC = 8;
/**团注剂量*/
public static final byte BOLUS_DOSE = 9;
/**维持剂量*/
public static final byte MAINTENANCE_DOSE = 10;
}

1
wisdomcar/src/main/resources/mapper_dao/StatisticsDao.xml

@ -34,6 +34,7 @@ FROM
<select id="getPointTimeCurrent" parameterType="java.util.Map" resultType="Long">
select tfar.begin_time/1000 as time
from

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

@ -0,0 +1,25 @@
<?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="com.ccsens.wisdomcar.persist.dao.StepDao">
<select id="getCodeByRfId" resultType="java.lang.String">
SELECT
s.
FROM
`t_step` s,
t_rfid r
WHERE
s.id = r.step_id
and r.rfid = #{rfid}
limit 1
</select>
<select id="getCodeByStepOne" resultType="java.lang.String">
SELECT
s.code
FROM
`t_step` s
ORDER BY id
limit 1
</select>
</mapper>
Loading…
Cancel
Save