From 3b59e9a5a98dc08b548fa3fbc472da54b1bef831 Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Mon, 8 Mar 2021 16:57:56 +0800 Subject: [PATCH 1/3] 20210308v1.1 --- .../api/ParameterController.java | 2 +- .../beneficiation/bean/dto/ParameterDto.java | 2 +- .../service/IMessageService.java | 7 + .../service/IParameterService.java | 3 +- .../beneficiation/service/MessageService.java | 28 +++ .../service/ParameterService.java | 183 ++++++++++++------ .../ccsens/beneficiation/util/Constant.java | 56 ++++++ .../src/main/resources/application.yml | 4 +- .../ccsens/tcm/service/QuestionService.java | 2 +- 9 files changed, 224 insertions(+), 63 deletions(-) create mode 100644 beneficiation/src/main/java/com/ccsens/beneficiation/service/IMessageService.java create mode 100644 beneficiation/src/main/java/com/ccsens/beneficiation/service/MessageService.java create mode 100644 beneficiation/src/main/java/com/ccsens/beneficiation/util/Constant.java diff --git a/beneficiation/src/main/java/com/ccsens/beneficiation/api/ParameterController.java b/beneficiation/src/main/java/com/ccsens/beneficiation/api/ParameterController.java index ddbf4a7c..7e4f53df 100644 --- a/beneficiation/src/main/java/com/ccsens/beneficiation/api/ParameterController.java +++ b/beneficiation/src/main/java/com/ccsens/beneficiation/api/ParameterController.java @@ -44,7 +44,7 @@ public class ParameterController { @MustLogin @ApiOperation(value = "修改设备的参数", notes = "") @RequestMapping(value = "/update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse updateParameter(@ApiParam @Validated @RequestBody QueryDto params) { + public JsonResponse updateParameter(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { log.info("修改设备的参数:{}",params); parameterService.updateParameter(params.getParam()); log.info("修改设备的参数成功"); diff --git a/beneficiation/src/main/java/com/ccsens/beneficiation/bean/dto/ParameterDto.java b/beneficiation/src/main/java/com/ccsens/beneficiation/bean/dto/ParameterDto.java index 08bf6857..049aefe8 100644 --- a/beneficiation/src/main/java/com/ccsens/beneficiation/bean/dto/ParameterDto.java +++ b/beneficiation/src/main/java/com/ccsens/beneficiation/bean/dto/ParameterDto.java @@ -62,7 +62,7 @@ public class ParameterDto { public static class Threshold{ @ApiModelProperty("最小") private BigDecimal minValue; - @ApiModelProperty("最打") + @ApiModelProperty("最大") private BigDecimal maxValue; } diff --git a/beneficiation/src/main/java/com/ccsens/beneficiation/service/IMessageService.java b/beneficiation/src/main/java/com/ccsens/beneficiation/service/IMessageService.java new file mode 100644 index 00000000..aa1fb5ef --- /dev/null +++ b/beneficiation/src/main/java/com/ccsens/beneficiation/service/IMessageService.java @@ -0,0 +1,7 @@ +package com.ccsens.beneficiation.service; + +import com.ccsens.util.bean.message.common.InMessage; + +public interface IMessageService { + void sendToCarRecord(InMessage inMessage) throws Exception; +} diff --git a/beneficiation/src/main/java/com/ccsens/beneficiation/service/IParameterService.java b/beneficiation/src/main/java/com/ccsens/beneficiation/service/IParameterService.java index 86e54bbc..e09e03f6 100644 --- a/beneficiation/src/main/java/com/ccsens/beneficiation/service/IParameterService.java +++ b/beneficiation/src/main/java/com/ccsens/beneficiation/service/IParameterService.java @@ -2,6 +2,7 @@ package com.ccsens.beneficiation.service; import com.ccsens.beneficiation.bean.dto.ParameterDto; import com.ccsens.beneficiation.bean.vo.ParameterVo; +import com.fasterxml.jackson.core.JsonProcessingException; /** * @author 逗 @@ -18,5 +19,5 @@ public interface IParameterService { * 修改一起的参数 * @param param 参数 */ - void updateParameter(ParameterDto.ParameterInfo param); + void updateParameter(ParameterDto.ParameterInfo param) throws JsonProcessingException, Exception; } diff --git a/beneficiation/src/main/java/com/ccsens/beneficiation/service/MessageService.java b/beneficiation/src/main/java/com/ccsens/beneficiation/service/MessageService.java new file mode 100644 index 00000000..0e76faeb --- /dev/null +++ b/beneficiation/src/main/java/com/ccsens/beneficiation/service/MessageService.java @@ -0,0 +1,28 @@ +package com.ccsens.beneficiation.service; + +import com.ccsens.util.JacksonUtil; +import com.ccsens.util.bean.message.common.InMessage; +import com.ccsens.util.config.RabbitMQConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.AmqpTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Service +@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) +public class MessageService implements IMessageService{ + @Autowired + private AmqpTemplate rabbitTemplate; + + @Override + public void sendToCarRecord(InMessage inMessage) throws Exception{ +// log.info(JacksonUtil.beanToJson(inMessage)); + //FixMe 发送到消息队列 + rabbitTemplate.convertAndSend(RabbitMQConfig.MESSAGE_QUEUE_NAME, + JacksonUtil.beanToJson(inMessage)); + log.info("发送到消息队列:{}",JacksonUtil.beanToJson(inMessage)); + } +} diff --git a/beneficiation/src/main/java/com/ccsens/beneficiation/service/ParameterService.java b/beneficiation/src/main/java/com/ccsens/beneficiation/service/ParameterService.java index 834ea1c5..7c1cf23d 100644 --- a/beneficiation/src/main/java/com/ccsens/beneficiation/service/ParameterService.java +++ b/beneficiation/src/main/java/com/ccsens/beneficiation/service/ParameterService.java @@ -8,16 +8,18 @@ import com.ccsens.beneficiation.bean.po.EquipmentTypeExample; import com.ccsens.beneficiation.bean.vo.ParameterVo; import com.ccsens.beneficiation.persist.dao.RecordDao; import com.ccsens.beneficiation.persist.mapper.EquipmentTypeMapper; +import com.ccsens.beneficiation.util.Constant; import com.ccsens.util.CRCUtil; +import com.ccsens.util.bean.message.common.InMessage; +import com.ccsens.util.bean.message.common.MessageConstant; +import com.ccsens.util.bean.message.common.MessageRule; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; +import java.util.*; /** * @author 逗 @@ -30,6 +32,8 @@ public class ParameterService implements IParameterService{ private RecordDao recordDao; @Resource private EquipmentTypeMapper equipmentTypeMapper; + @Resource + private IMessageService messageService; @Override public ParameterVo.QueryParameter queryParameter(Object param) { @@ -94,72 +98,137 @@ public class ParameterService implements IParameterService{ } @Override - public void updateParameter(ParameterDto.ParameterInfo param) { + public void updateParameter(ParameterDto.ParameterInfo param) throws Exception { if(ObjectUtil.isNull(param)){ return; } - byte[] header = new byte[]{(byte)0xff,(byte)0xfe,(byte)0x00}; - //电磁阀1 ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); - if(ObjectUtil.isNotNull(solenoidValue1)){ - if(ObjectUtil.isNotNull(solenoidValue1.getSettingValue())){ - //根据id和数据类型 查找该设备的addr 设置值是1 - EquipmentTypeExample equipmentTypeExample = new EquipmentTypeExample(); - equipmentTypeExample.createCriteria().andEquipmentIdEqualTo(solenoidValue1.getId()).andTypeEqualTo((byte) 1); - List equipmentTypes = equipmentTypeMapper.selectByExample(equipmentTypeExample); - if(CollectionUtil.isNotEmpty(equipmentTypes)){ - EquipmentType equipmentType = equipmentTypes.get(0); - //计算value的高低值 - byte uc1 = (byte) (solenoidValue1.getSettingValue().intValue() >> 8); - byte uc2 = (byte) (solenoidValue1.getSettingValue().intValue() & 0xff); - //计算addr的高低值 - byte addr1 = (byte) (equipmentType.getAddr() >> 8); - byte addr2 = (byte) (equipmentType.getAddr() & 0xff); - //TODO 长度未处理 传感器地址未处理 - byte[] center = new byte[]{(byte)0x00,(byte)0x06,addr1,addr2,uc1,uc2}; - byte[] crc = new byte[2]; - CRCUtil.crc16(crc,center,0,center.length); - - byte[] all = new byte[header.length + center.length + crc.length]; - System.arraycopy(header,0,all,0,header.length); - System.arraycopy(center,0,all,header.length,center.length); - System.arraycopy(crc,0,all,header.length + center.length,crc.length); - - all[2] = (byte) (all.length - 3); + transducer(solenoidValue1); + //电磁阀2 + ParameterDto.Parameter solenoidValue2 = param.getSolenoidValue2(); + transducer(solenoidValue2); + //变频器1 + ParameterDto.Parameter transducer1 = param.getTransducer1(); + transducer(transducer1); + //变频器2 + ParameterDto.Parameter transducer2 = param.getTransducer1(); + transducer(transducer2); + //变频器3 + ParameterDto.Parameter transducer3 = param.getTransducer1(); + transducer(transducer3); + //变频器4 + ParameterDto.Parameter transducer4 = param.getTransducer1(); + transducer(transducer4); + + //电耳1 + ParameterDto.ParameterThreshold electricEar1 = param.getElectricEar1(); + electric(electricEar1); + //电耳2 + ParameterDto.ParameterThreshold electricEar2 = param.getElectricEar2(); + electric(electricEar2); + } + private void transducer(ParameterDto.Parameter transducer3) throws Exception { + if (ObjectUtil.isNotNull(transducer3)) { + if (ObjectUtil.isNotNull(transducer3.getSettingValue())) { + getBytes(transducer3.getId(), transducer3.getSettingValue().intValue(), Constant.Type.SET_VALUE); + } + } + } + private void electric(ParameterDto.ParameterThreshold electricEar) throws Exception { + if (ObjectUtil.isNotNull(electricEar)) { + //最低值 + if (ObjectUtil.isNotNull(electricEar.getThresholdValue1())) { + ParameterDto.Threshold threshold = electricEar.getThresholdValue1(); + //低 + if (ObjectUtil.isNotNull(threshold.getMinValue())) { + getBytes(electricEar.getId(), threshold.getMinValue().intValue(), Constant.Type.MINIMUM_VALUE_MIN); + } + //高 + if (ObjectUtil.isNotNull(threshold.getMaxValue())) { + getBytes(electricEar.getId(), threshold.getMaxValue().intValue(), Constant.Type.MINIMUM_VALUE_MAX); + } + } + //理想值 + if (ObjectUtil.isNotNull(electricEar.getThresholdValue2())) { + ParameterDto.Threshold threshold = electricEar.getThresholdValue2(); + //低 + if (ObjectUtil.isNotNull(threshold.getMinValue())) { + getBytes(electricEar.getId(), threshold.getMinValue().intValue(), Constant.Type.MINIMUM_VALUE_MIN); + } + //高 + if (ObjectUtil.isNotNull(threshold.getMaxValue())) { + getBytes(electricEar.getId(), threshold.getMaxValue().intValue(), Constant.Type.MINIMUM_VALUE_MAX); + } + } + //最高值 + if (ObjectUtil.isNotNull(electricEar.getThresholdValue3())) { + ParameterDto.Threshold threshold = electricEar.getThresholdValue3(); + //低 + if (ObjectUtil.isNotNull(threshold.getMinValue())) { + getBytes(electricEar.getId(), threshold.getMinValue().intValue(), Constant.Type.MINIMUM_VALUE_MIN); + } + //高 + if (ObjectUtil.isNotNull(threshold.getMaxValue())) { + getBytes(electricEar.getId(), threshold.getMaxValue().intValue(), Constant.Type.MINIMUM_VALUE_MAX); } } } -// //电磁阀1 -// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); -// if(ObjectUtil.isNotNull(solenoidValue1)){ -// -// } -// //电磁阀1 -// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); -// if(ObjectUtil.isNotNull(solenoidValue1)){ -// -// } -// //电磁阀1 -// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); -// if(ObjectUtil.isNotNull(solenoidValue1)){ -// -// } -// //电磁阀1 -// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); -// if(ObjectUtil.isNotNull(solenoidValue1)){ -// -// } -// //电磁阀1 -// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); -// if(ObjectUtil.isNotNull(solenoidValue1)){ -// -// } - //生成数组 + } + + /** + * 获取设置值的byte数组 并发送消息 + */ + private void getBytes(Long id, int value,byte type) throws Exception { + //根据id和数据类型 查找该设备的addr 设置值是1 + EquipmentTypeExample equipmentTypeExample = new EquipmentTypeExample(); + equipmentTypeExample.createCriteria().andEquipmentIdEqualTo(id).andTypeEqualTo(type); + List equipmentTypes = equipmentTypeMapper.selectByExample(equipmentTypeExample); + if(CollectionUtil.isNotEmpty(equipmentTypes)){ + EquipmentType equipmentType = equipmentTypes.get(0); + log.info("查找设备配置信息:{}",equipmentType); + + byte[] header = new byte[]{(byte)0xff,(byte)0xfe,(byte)0x00}; + + byte uc1 = (byte) (value >> 8); + byte uc2 = (byte) (value & 0xff); + log.info("计算value的高低值:{}---{}",uc1,uc2); + + byte addr1 = (byte) (equipmentType.getAddr() >> 8); + byte addr2 = (byte) (equipmentType.getAddr() & 0xff); + log.info("计算addr的高低值:{}---{}",addr1,addr2); + + byte[] center = new byte[]{(byte)0x10,(byte)0x06,addr1,addr2,uc1,uc2}; + byte[] crc = new byte[2]; + CRCUtil.crc16(crc,center,0,center.length); + log.info("计算crc校验:{}---{}",crc[0],crc[1]); + + byte[] all = new byte[header.length + center.length + crc.length]; + System.arraycopy(header,0,all,0,header.length); + System.arraycopy(center,0,all,header.length,center.length); + System.arraycopy(crc,0,all,header.length + center.length,crc.length); + + all[2] = (byte) (all.length - 3); + sendInMessage(all); + } + } + /** + * 生成InMessage消息并发送 + */ + private void sendInMessage(byte[] all) throws Exception { + Set userIdSet = new HashSet<>(); + userIdSet.add(String.valueOf(2)); + MessageRule messageRule = MessageRule.defaultRule(MessageConstant.DomainType.User); + messageRule.setAckRule(MessageRule.AckRule.NONE); + messageRule.setOfflineDiscard((byte) 1); + String s = Arrays.toString(all); + InMessage inMessage = InMessage.newToUserMessage(null,userIdSet,null,messageRule,s); + //发送消息 + messageService.sendToCarRecord(inMessage); } } diff --git a/beneficiation/src/main/java/com/ccsens/beneficiation/util/Constant.java b/beneficiation/src/main/java/com/ccsens/beneficiation/util/Constant.java new file mode 100644 index 00000000..aab22896 --- /dev/null +++ b/beneficiation/src/main/java/com/ccsens/beneficiation/util/Constant.java @@ -0,0 +1,56 @@ +package com.ccsens.beneficiation.util; + + +/** + * @author 逗 + */ +public class Constant { + /**注册来源*/ + public static final class Type { + /** + * 实时值 + */ + public final static byte REAL_VALUE = 0; + /** + * 设置值 + */ + public final static byte SET_VALUE = 1; + /** + * 累计值 + */ + public final static byte AGGREGATE_VALUE = 2; + /** + * 最低值——低 + */ + public final static byte MINIMUM_VALUE_MIN = 3; + /** + * 最低值——高 + */ + public final static byte MINIMUM_VALUE_MAX = 8; + /** + * 理想值——低 + */ + public final static byte IDEAL_VALUE_MIN = 4; + /** + * 理想值——高 + */ + public final static byte IDEAL_VALUE_MAX = 9; + /** + * 最高值——低 + */ + public final static byte MAXIMUM_VALUE_MIN = 5; + /** + * 最高值——高 + */ + public final static byte MAXIMUM_VALUE_MAX = 10; + /** + * 迟滞 + */ + public final static byte HYSTERESIS = 6; + /** + * 迟滞 + */ + public final static byte OTHER = 7; + } + +} diff --git a/beneficiation/src/main/resources/application.yml b/beneficiation/src/main/resources/application.yml index a47f2a7b..ac92adb9 100644 --- a/beneficiation/src/main/resources/application.yml +++ b/beneficiation/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: dev - include: common, util-dev + active: test + include: common, util-test diff --git a/tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java b/tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java index f76bbedd..b4c9c858 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java @@ -53,7 +53,7 @@ public class QuestionService implements IQuestionService{ if(CollectionUtil.isNotEmpty(patientCode.getSubReportCodes())){ patientCode.getSubReportCodes().forEach(subReportCode -> { //查询二级code下的试题和答案 - List subpatientQuestionNumList = questionDao.getQuestionByCodeAndPatientId(patientCode.getCode(),param.getId(),param.getNums()); + List subpatientQuestionNumList = questionDao.getQuestionByCodeAndPatientId(subReportCode.getCode(),param.getId(),param.getNums()); //查询选项关联的试题及答案 if(CollectionUtil.isNotEmpty(subpatientQuestionNumList)){ subpatientQuestionNumList.forEach(question -> { From 99bda200718634037ca119e8da824c2724140b63 Mon Sep 17 00:00:00 2001 From: zhizhi wu <2377881365@qq.com> Date: Tue, 9 Mar 2021 10:11:26 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=99=BA=E6=85=A7=E5=B9=B3=E8=BD=A6?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../main/java/com/ccsens/util/DateUtil.java | 15 ++- .../wisdomcar/api/RecordController.java | 47 +++++++ .../ccsens/wisdomcar/bean/dto/RecordDto.java | 69 +++++++++++ .../ccsens/wisdomcar/bean/vo/RecordVo.java | 28 +++++ .../persist/dao/WisdomCarRecordDao.java | 23 ++++ .../wisdomcar/service/IRecordService.java | 22 ++++ .../wisdomcar/service/RecordService.java | 117 +++++++++++++++++- .../src/main/resources/application-dev.yml | 11 +- .../src/main/resources/application-prod.yml | 10 +- .../src/main/resources/application-test.yml | 9 +- wisdomcar/src/main/resources/application.yml | 4 +- .../mapper_dao/WisdomCarRecordDao.xml | 14 +++ 13 files changed, 353 insertions(+), 18 deletions(-) create mode 100644 wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/RecordDto.java create mode 100644 wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/vo/RecordVo.java create mode 100644 wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/WisdomCarRecordDao.java create mode 100644 wisdomcar/src/main/resources/mapper_dao/WisdomCarRecordDao.xml diff --git a/pom.xml b/pom.xml index ad838557..625987e1 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ - + wisdomcar beneficiation diff --git a/util/src/main/java/com/ccsens/util/DateUtil.java b/util/src/main/java/com/ccsens/util/DateUtil.java index 603ac764..0961a956 100644 --- a/util/src/main/java/com/ccsens/util/DateUtil.java +++ b/util/src/main/java/com/ccsens/util/DateUtil.java @@ -1,6 +1,5 @@ package com.ccsens.util; -import cn.hutool.core.date.DateTime; import cn.hutool.core.util.StrUtil; import com.ccsens.util.exception.BaseException; @@ -9,6 +8,20 @@ import java.text.SimpleDateFormat; import java.util.*; public class DateUtil extends cn.hutool.core.date.DateUtil { + /**年月日时分秒*/ + public static final String yyyyMMddHHmmss="yyyyMMddHHmmss"; + + /** + * 时间格式转换 + * @param date date + * @param format 格式 + * @return 时间字符串 + */ + public static String format(Date date, String format) { + SimpleDateFormat sdf = new SimpleDateFormat(format); + return sdf.format(date); + } + public static Long dateBeginSeconds(Long seconds){ if(seconds == null) { seconds = currentSeconds(); diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/RecordController.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/RecordController.java index 50db7110..10e4dcd9 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/RecordController.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/RecordController.java @@ -1,10 +1,30 @@ package com.ccsens.wisdomcar.api; +import cn.hutool.core.util.CharsetUtil; +import com.ccsens.util.DateUtil; +import com.ccsens.util.JsonResponse; +import com.ccsens.util.bean.dto.QueryDto; +import com.ccsens.wisdomcar.bean.dto.RecordDto; +import com.ccsens.wisdomcar.bean.vo.RecordVo; +import com.ccsens.wisdomcar.service.IRecordService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.Date; +import java.util.List; + /** * @author 逗 */ @@ -13,4 +33,31 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/record") public class RecordController { + + @Resource + private IRecordService recordService; + @ApiOperation(value = "查询智慧平车称重和rfid记录", notes = "") + @RequestMapping(value = "/weightList", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse timeList(@ApiParam @Validated @RequestBody QueryDto params){ + log.info("查询智慧平车称重和rfid记录:{}", params); + List list = recordService.queryWeightAndRfid(params.getParam(), params.getUserId()); + log.info("查询智慧平车称重和rfid记录结果:{}",list); + return JsonResponse.newInstance().ok(list); + } + + @ApiOperation(value = "智慧平车称重和rfid记录导出", notes = "") + @RequestMapping(value = "/weightExport", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) + public void weightExport(@ApiParam @Validated RecordDto.WeightAndRfidExport param, HttpServletResponse response) throws IOException { + log.info("导出智慧平车称重和rfid记录:{}", param); + Workbook workbook = recordService.exportWeightAndRfid(param); + log.info("导出智慧平车称重和rfid记录结果结束"); + Date start = new Date(); + start.setTime(param.getStartTime()); + Date end = new Date(); + end.setTime(param.getEndTime()); + String fileName = "智慧平车记录"+ DateUtil.format(start, DateUtil.yyyyMMddHHmmss) + "-" + DateUtil.format(end, DateUtil.yyyyMMddHHmmss) +".xlsx"; + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, CharsetUtil.UTF_8)); + workbook.write(response.getOutputStream()); + } + } diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/RecordDto.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/RecordDto.java new file mode 100644 index 00000000..2a8b0fdc --- /dev/null +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/RecordDto.java @@ -0,0 +1,69 @@ +package com.ccsens.wisdomcar.bean.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @description: 数据记录 + * @author: whj + * @time: 2021/3/5 13:59 + */ +@Data +public class RecordDto { + @Data + @ApiModel("称重和rfid记录的请求参数") + public static class WeightAndRfid{ + @ApiModelProperty("平车ID,默认1") + private Long carId = 1L; + @ApiModelProperty("开始时间, 默认今天0点") + private Long startTime; + @ApiModelProperty("结束时间, 默认当前时间") + private Long endTime; +// @ApiModelProperty("当前页,默认1") +// private int pageNum=1; +// @ApiModelProperty("每页数量,默认100") +// @Min(value = 1) +// @Max(value=10000) +// private int pageSize = 100; + + + { + endTime = System.currentTimeMillis(); + Date today = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + startTime = sdf.parse(sdf.format(today)).getTime(); + } catch (ParseException e) { + } + } + } + + + @Data + @ApiModel("称重和rfid记录导出的请求参数") + public static class WeightAndRfidExport{ + @ApiModelProperty("平车ID,默认1") + private Long carId = 1L; + @ApiModelProperty("开始时间, 默认今天0点") + private Long startTime; + @ApiModelProperty("结束时间, 默认当前时间") + private Long endTime; + + { + endTime = System.currentTimeMillis(); + Date today = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + startTime = sdf.parse(sdf.format(today)).getTime(); + } catch (ParseException e) { + } + } + } +} diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/vo/RecordVo.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/vo/RecordVo.java new file mode 100644 index 00000000..2a0259e4 --- /dev/null +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/vo/RecordVo.java @@ -0,0 +1,28 @@ +package com.ccsens.wisdomcar.bean.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @description: 数据记录 + * @author: whj + * @time: 2021/3/5 13:59 + */ +@Data +public class RecordVo { + + @Data + @ApiModel("称重和rfid记录的响应结果") + public static class WeightAndRfid{ + @ApiModelProperty("时间") + private Long time; + @ApiModelProperty("类型:1体重 2rfid") + private Byte type; + private String value; + private String name; + } +} diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/WisdomCarRecordDao.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/WisdomCarRecordDao.java new file mode 100644 index 00000000..41f5dbe1 --- /dev/null +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/WisdomCarRecordDao.java @@ -0,0 +1,23 @@ +package com.ccsens.wisdomcar.persist.dao; + +import com.ccsens.wisdomcar.bean.vo.RecordVo; +import com.ccsens.wisdomcar.persist.mapper.WisdomCarRecordMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + * + * @author whj + */ +public interface WisdomCarRecordDao extends WisdomCarRecordMapper { + /** + * 查询平车的称重和rfid记录 + * @param carId 平车ID + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 称重和rfid记录 + */ + List queryWeightAndRfid(@Param("carId") Long carId, @Param("startTime") Long startTime, @Param("endTime") Long endTime); +} diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/IRecordService.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/IRecordService.java index 1debd2fc..2b5f8076 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/IRecordService.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/IRecordService.java @@ -1,7 +1,15 @@ package com.ccsens.wisdomcar.service; import com.ccsens.wisdomcar.bean.dto.Message.CarRecordMessageDto; +import com.ccsens.wisdomcar.bean.dto.RecordDto; +import com.ccsens.wisdomcar.bean.vo.RecordVo; import com.fasterxml.jackson.core.JsonProcessingException; +import com.github.pagehelper.PageInfo; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Workbook; + +import java.io.IOException; +import java.util.List; public interface IRecordService { @@ -11,4 +19,18 @@ public interface IRecordService { * @throws Exception */ void disposeMessage(CarRecordMessageDto carRecordMessageDto) throws Exception; + + /** + * 查询称重和Rfid记录 + * @param param 查询条件 + * @param userId 查询用户ID + * @return 记录 + */ + List queryWeightAndRfid(RecordDto.WeightAndRfid param, Long userId); + + /** + * 导出称重和Rfid记录 + * @param param 查询条件 + */ + Workbook exportWeightAndRfid(RecordDto.WeightAndRfidExport param) ; } diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/RecordService.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/RecordService.java index 50318cd4..efdcc554 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/RecordService.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/RecordService.java @@ -5,28 +5,33 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; import com.ccsens.util.JacksonUtil; +import com.ccsens.util.PoiUtil; import com.ccsens.util.RedisUtil; import com.ccsens.util.bean.message.common.InMessage; import com.ccsens.util.bean.message.common.MessageConstant; import com.ccsens.util.bean.message.common.MessageRule; import com.ccsens.wisdomcar.bean.dto.Message.CarRecordMessageDto; +import com.ccsens.wisdomcar.bean.dto.RecordDto; import com.ccsens.wisdomcar.bean.po.*; import com.ccsens.wisdomcar.bean.vo.Message.CarRecordMessageVo; +import com.ccsens.wisdomcar.bean.vo.RecordVo; import com.ccsens.wisdomcar.bean.vo.StepVo; import com.ccsens.wisdomcar.persist.dao.StepDao; +import com.ccsens.wisdomcar.persist.dao.WisdomCarRecordDao; import com.ccsens.wisdomcar.persist.mapper.*; import com.ccsens.wisdomcar.util.Constant; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; 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; -import java.util.Set; +import java.text.SimpleDateFormat; +import java.util.*; /** * @author 逗 @@ -53,6 +58,12 @@ public class RecordService implements IRecordService{ private ScreenMapper screenMapper; @Resource private RedisUtil redisUtil; + @Resource + private WisdomCarRecordDao wisdomCarRecordDao; + @Value("#{T(java.lang.Long).parseLong('${wisdom.weight:10000}')}") + private Long weightMinus; + @Value("#{T(java.lang.Long).parseLong('${wisdom.time:300000}')}") + private Long timeMinus; @Override public void disposeMessage(CarRecordMessageDto carRecordMessageDto) throws Exception { @@ -138,6 +149,104 @@ public class RecordService implements IRecordService{ saveAidRecord(carRecordMessageDto, wisdomCar.getId(),step,userIdSet); } + @Override + public List queryWeightAndRfid(RecordDto.WeightAndRfid param, Long userId) { + List list = queryWeightAndRfid(param.getCarId(), param.getStartTime(), param.getEndTime()); + return list; + } + + /** + * 查询数据 + * @param carId 平车ID + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 记录 + */ + private List queryWeightAndRfid(Long carId, Long startTime, Long endTime) { + RecordVo.WeightAndRfid weight = null; + RecordVo.WeightAndRfid rfid = null; + List list = wisdomCarRecordDao.queryWeightAndRfid(carId, startTime, endTime); + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + RecordVo.WeightAndRfid next = iterator.next(); + if (next.getType() == Constant.CAR_RECORD_WEIGHT) { + // 称重 + + if (weight == null) { + weight = next; + continue; + } + // 体重变化和上一条体重相似且间隔时间较短,删除 + if (Integer.parseInt(next.getValue()) - Integer.parseInt(weight.getValue()) <= weightMinus && next.getTime() - weight.getTime() <= timeMinus) { + iterator.remove(); + } else { + weight = next; + } + } else { + if (weight != null) { + next.setValue(weight.getValue()); + } + // rfid + if (rfid == null) { + rfid = next; + continue; + } + + // rfid和上一个一样且间隔时间较短,删除 + if (next.getValue().equals(rfid.getValue()) && next.getTime() - rfid.getTime() <= timeMinus) { + iterator.remove(); + } else { + rfid = next; + } + } + + } + return list; + } + + @Override + public Workbook exportWeightAndRfid(RecordDto.WeightAndRfidExport param) { + log.info("数据导出:{}", param); + List list = queryWeightAndRfid(param.getCarId(), param.getStartTime(), param.getEndTime()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 参数封装 + List> rows = new ArrayList<>(); + // 标题 + List headRow = new ArrayList<>(); + PoiUtil.PoiUtilCell headCell = new PoiUtil.PoiUtilCell(); + headCell.setColspan(4); + headCell.setValue("智慧平车记录"); + headRow.add(headCell); + rows.add(headRow); + log.info("标题:{}", headCell); + // 表头 + List titleRow = new ArrayList<>(); + titleRow.add(new PoiUtil.PoiUtilCell("序号")); + titleRow.add(new PoiUtil.PoiUtilCell("时间")); + titleRow.add(new PoiUtil.PoiUtilCell("类型")); + titleRow.add(new PoiUtil.PoiUtilCell("数据")); + rows.add(titleRow); + log.info("表头:{}", titleRow); + + for (int i = 0; i < list.size(); i++) { + RecordVo.WeightAndRfid record = list.get(i); + List row = new ArrayList<>(); + row.add(new PoiUtil.PoiUtilCell("" + (i + 1))); + Date time = new Date(); + time.setTime(record.getTime()); + row.add(new PoiUtil.PoiUtilCell(sdf.format(time))); + row.add(new PoiUtil.PoiUtilCell(record.getType() == Constant.CAR_RECORD_WEIGHT ? "称重" : "rfid")); + row.add(new PoiUtil.PoiUtilCell(record.getType() == Constant.CAR_RECORD_WEIGHT ? new BigDecimal(record.getValue()).divide(new BigDecimal(1000), 3).toString() + "Kg" : record.getName())); + rows.add(row); + } + log.info("数据:{}", list.size()); + //生成一个excel文件 + + Workbook workbook = new XSSFWorkbook(); + PoiUtil.exportWB("智慧平车记录",rows, workbook); + return workbook; + } + private void doseAndSensorMessage(CarRecordMessageDto carRecordMessageDto, Set userIdSet) throws Exception { //体重 单位g BigDecimal weightInt = BigDecimal.valueOf(Double.parseDouble(carRecordMessageDto.getValue())); diff --git a/wisdomcar/src/main/resources/application-dev.yml b/wisdomcar/src/main/resources/application-dev.yml index 92b5cda5..e6145f0a 100644 --- a/wisdomcar/src/main/resources/application-dev.yml +++ b/wisdomcar/src/main/resources/application-dev.yml @@ -29,10 +29,13 @@ spring: swagger: enable: true file: - path: /home/cloud/mt/uploads/ + path: /home/cloud/wisdomcar/uploads/ signUpUrl: https://test.tall.wiki/compete/ - domain: https://test.tall.wiki/gateway/mt/ - imgDomain: https://test.tall.wiki/gateway/mt/uploads/ + domain: https://test.tall.wiki/gateway/wisdomcar/ + imgDomain: https://test.tall.wiki/gateway/wisdomcar/uploads/ #gameMqName: game_status_wisdom logging: - path: \ No newline at end of file + path: +wisdom: + weight: 10000 + time: 600000 \ No newline at end of file diff --git a/wisdomcar/src/main/resources/application-prod.yml b/wisdomcar/src/main/resources/application-prod.yml index 129271c0..d63a1a17 100644 --- a/wisdomcar/src/main/resources/application-prod.yml +++ b/wisdomcar/src/main/resources/application-prod.yml @@ -34,7 +34,11 @@ eureka: gatewayUrl: https://www.tall.wiki/gateway/ notGatewayUrl: https://www.tall.wiki/ file: - path: /home/cloud/mt/uploads/ + path: /home/cloud/wisdomcar/uploads/ signUpUrl: https://www.tall.wiki/compete/ - domain: https://www.tall.wiki/gateway/mt/ - imgDomain: https://www.tall.wiki/gateway/mt/uploads/ \ No newline at end of file + domain: https://www.tall.wiki/gateway/wisdomcar/ + imgDomain: https://www.tall.wiki/gateway/wisdomcar/uploads/ + +wisdom: + weight: 10000 + time: 600000 \ No newline at end of file diff --git a/wisdomcar/src/main/resources/application-test.yml b/wisdomcar/src/main/resources/application-test.yml index f7765467..9af9b909 100644 --- a/wisdomcar/src/main/resources/application-test.yml +++ b/wisdomcar/src/main/resources/application-test.yml @@ -30,7 +30,10 @@ eureka: instance: ip-address: 192.168.0.99 file: - path: /home/cloud/mt/uploads/ + path: /home/cloud/wisdomcar/uploads/ signUpUrl: https://test.tall.wiki/compete/ - domain: https://test.tall.wiki/gateway/mt/ - imgDomain: https://test.tall.wiki/gateway/mt/uploads/ + domain: https://test.tall.wiki/gateway/wisdomcar/ + imgDomain: https://test.tall.wiki/gateway/wisdomcar/uploads/ +wisdom: + weight: 10000 + time: 600000 diff --git a/wisdomcar/src/main/resources/application.yml b/wisdomcar/src/main/resources/application.yml index a47f2a7b..1ac895fc 100644 --- a/wisdomcar/src/main/resources/application.yml +++ b/wisdomcar/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: dev - include: common, util-dev + active: prod + include: common, util-prod diff --git a/wisdomcar/src/main/resources/mapper_dao/WisdomCarRecordDao.xml b/wisdomcar/src/main/resources/mapper_dao/WisdomCarRecordDao.xml new file mode 100644 index 00000000..b09c5510 --- /dev/null +++ b/wisdomcar/src/main/resources/mapper_dao/WisdomCarRecordDao.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file From fe7d89d6bbebc22994f0c54609d3e5ce81f874d7 Mon Sep 17 00:00:00 2001 From: zhizhi wu <2377881365@qq.com> Date: Tue, 9 Mar 2021 15:28:24 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=99=BA=E6=85=A7=E5=B9=B3=E8=BD=A6?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- util/src/main/java/com/ccsens/util/DateUtil.java | 2 ++ .../main/java/com/ccsens/wisdomcar/api/RecordController.java | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/util/src/main/java/com/ccsens/util/DateUtil.java b/util/src/main/java/com/ccsens/util/DateUtil.java index 0961a956..0e6fbd9f 100644 --- a/util/src/main/java/com/ccsens/util/DateUtil.java +++ b/util/src/main/java/com/ccsens/util/DateUtil.java @@ -10,6 +10,8 @@ import java.util.*; public class DateUtil extends cn.hutool.core.date.DateUtil { /**年月日时分秒*/ public static final String yyyyMMddHHmmss="yyyyMMddHHmmss"; + /**年月日*/ + public static final String yyyyMMdd="yyyyMMdd"; /** * 时间格式转换 diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/RecordController.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/RecordController.java index 10e4dcd9..824df9af 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/RecordController.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/RecordController.java @@ -54,8 +54,8 @@ public class RecordController { Date start = new Date(); start.setTime(param.getStartTime()); Date end = new Date(); - end.setTime(param.getEndTime()); - String fileName = "智慧平车记录"+ DateUtil.format(start, DateUtil.yyyyMMddHHmmss) + "-" + DateUtil.format(end, DateUtil.yyyyMMddHHmmss) +".xlsx"; + end.setTime(param.getEndTime() - 24 * 3600 * 1000); + String fileName = "智慧平车记录"+ DateUtil.format(start, DateUtil.yyyyMMdd) + "-" + DateUtil.format(end, DateUtil.yyyyMMdd) +".xlsx"; response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, CharsetUtil.UTF_8)); workbook.write(response.getOutputStream()); }