From 2264c8add1d33f7ada417e7698a2676a9e04933b Mon Sep 17 00:00:00 2001 From: zhangye <654600784@qq.com> Date: Fri, 29 Apr 2022 20:21:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=A7=E5=B1=8F=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ccsens/ht/api/StatisticsController.java | 129 ++++++++++ .../com/ccsens/ht/bean/dto/StatisticsDto.java | 27 +++ .../com/ccsens/ht/bean/vo/StatisticsVo.java | 103 ++++++++ .../ccsens/ht/persist/dao/HtReportDao.java | 7 +- .../ccsens/ht/persist/dao/StatisticsDao.java | 66 ++++++ .../ccsens/ht/service/IStatisticsService.java | 76 ++++++ .../ccsens/ht/service/StatisticsService.java | 124 ++++++++++ .../main/resources/mapper_dao/HtReportDao.xml | 41 ++++ .../resources/mapper_dao/StatisticsDao.xml | 223 ++++++++++++++++++ .../question/api/QuestionController.java | 2 +- 10 files changed, 796 insertions(+), 2 deletions(-) create mode 100644 ht/src/main/java/com/ccsens/ht/api/StatisticsController.java create mode 100644 ht/src/main/java/com/ccsens/ht/bean/dto/StatisticsDto.java create mode 100644 ht/src/main/java/com/ccsens/ht/bean/vo/StatisticsVo.java create mode 100644 ht/src/main/java/com/ccsens/ht/persist/dao/StatisticsDao.java create mode 100644 ht/src/main/java/com/ccsens/ht/service/IStatisticsService.java create mode 100644 ht/src/main/java/com/ccsens/ht/service/StatisticsService.java create mode 100644 ht/src/main/resources/mapper_dao/StatisticsDao.xml diff --git a/ht/src/main/java/com/ccsens/ht/api/StatisticsController.java b/ht/src/main/java/com/ccsens/ht/api/StatisticsController.java new file mode 100644 index 00000000..10e04cda --- /dev/null +++ b/ht/src/main/java/com/ccsens/ht/api/StatisticsController.java @@ -0,0 +1,129 @@ +package com.ccsens.ht.api; + +import com.ccsens.ht.bean.dto.StatisticsDto; +import com.ccsens.ht.bean.vo.PositionVo; +import com.ccsens.ht.bean.vo.StatisticsVo; +import com.ccsens.ht.service.IStatisticsService; +import com.ccsens.util.JsonResponse; +import io.swagger.annotations.*; +import lombok.extern.slf4j.Slf4j; +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 java.util.List; + +/** + * @author 逗 + */ +@Slf4j +@Api(tags = "大屏查询统计数据",value = "") +@RestController +@RequestMapping("/statistics") +public class StatisticsController { + + @Resource + private IStatisticsService statisticsService; + + @ApiOperation(value = "查询医院",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="/hospital", method = RequestMethod.GET) + public JsonResponse> queryHospital(){ + log.info("查询医院"); + List positionList = statisticsService.queryHospital(); + log.info("返回医院信息:{}",positionList); + return JsonResponse.newInstance().ok(positionList); + } + + @ApiOperation(value = "查询测评类型和分项",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="/queryCode", method = RequestMethod.POST) + public JsonResponse> queryReportCode(@RequestBody @ApiParam @Validated StatisticsDto.HospitalId hospitalId){ + log.info("查询测评类型和分项"); + List reportCodeList = statisticsService.queryReportCode(hospitalId.getId()); + log.info("返回查询测评类型和分项:{}",reportCodeList); + return JsonResponse.newInstance().ok(reportCodeList); + } + + @ApiOperation(value = "测评人数实时统计",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="/realtime", method = RequestMethod.POST) + public JsonResponse realtime(@RequestBody @ApiParam @Validated StatisticsDto.HospitalId hospitalId){ + log.info("测评人数实时统计:{}", hospitalId); + StatisticsVo.Realtime realtime = statisticsService.realtime(hospitalId.getId()); + log.info("测评人数实时统计完成"); + return JsonResponse.newInstance().ok(realtime); + } + + @ApiOperation(value = "查询性别年龄分布",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="/age", method = RequestMethod.POST) + public JsonResponse ageAndSex(@RequestBody @ApiParam @Validated StatisticsDto.HospitalId hospitalId){ + log.info("查询性别年龄分布:{}", hospitalId); + StatisticsVo.AgeAndSex ageAndSex = statisticsService.ageAndSex(hospitalId.getId()); + log.info("查询性别年龄分布完成"); + return JsonResponse.newInstance().ok(ageAndSex); + } + + @ApiOperation(value = "区域分布",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="/area", method = RequestMethod.POST) + public JsonResponse areaDistribution(@RequestBody @ApiParam @Validated StatisticsDto.HospitalId hospitalId){ + log.info("查询区域分布:{}", hospitalId); + StatisticsVo.AreaDistribution areaDistribution = statisticsService.areaDistribution(hospitalId.getId()); + log.info("查询区域分布完成"); + return JsonResponse.newInstance().ok(areaDistribution); + } + + @ApiOperation(value = "测评结果总评分布",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="/appraise", method = RequestMethod.POST) + public JsonResponse> appraise(@RequestBody @ApiParam @Validated StatisticsDto.HospitalId hospitalId){ + log.info("查询测评结果总评分布:{}", hospitalId); + List chartList = statisticsService.appraise(hospitalId.getId()); + log.info("查询测评结果总评分布完成"); + return JsonResponse.newInstance().ok(chartList); + } + + @ApiOperation(value = "报告单总分分布 ",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="/report", method = RequestMethod.POST) + public JsonResponse reportScore(@RequestBody @ApiParam @Validated StatisticsDto.Report report){ + log.info("查询报告单总分分布:{}", report); + StatisticsVo.ReportDistribution reportDistribution = statisticsService.reportScore(report); + log.info("查询报告单总分分布完成"); + return JsonResponse.newInstance().ok(reportDistribution); + } + + @ApiOperation(value = "报告单分项分数分布 ",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="/subentry", method = RequestMethod.POST) + public JsonResponse subentryScore(@RequestBody @ApiParam @Validated StatisticsDto.Report report){ + log.info("查询报告单分项分数分布:{}", report); + StatisticsVo.ReportDistribution reportDistribution = statisticsService.subentryScore(report); + log.info("查询报告单分项分数分布完成"); + return JsonResponse.newInstance().ok(reportDistribution); + } + + @ApiOperation(value = "报告单分数散点图",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="/scatter", method = RequestMethod.POST) + public JsonResponse scatterDiagram(@RequestBody @ApiParam @Validated StatisticsDto.Report report){ + log.info("查询报告单分数散点图:{}", report); + StatisticsVo.ReportScatterDiagram reportScatterDiagram = statisticsService.scatterDiagram(report); + log.info("查询报告单分数散点图完成"); + return JsonResponse.newInstance().ok(reportScatterDiagram); + } +} diff --git a/ht/src/main/java/com/ccsens/ht/bean/dto/StatisticsDto.java b/ht/src/main/java/com/ccsens/ht/bean/dto/StatisticsDto.java new file mode 100644 index 00000000..5a8b4be9 --- /dev/null +++ b/ht/src/main/java/com/ccsens/ht/bean/dto/StatisticsDto.java @@ -0,0 +1,27 @@ +package com.ccsens.ht.bean.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class StatisticsDto { + + @Data + @ApiModel("请求-医院id") + public static class HospitalId{ + @ApiModelProperty("医院id") + private Long id; + } + + @Data + @ApiModel("请求-报告单类型信息") + public static class Report{ + @ApiModelProperty("医院id") + private Long hospitalId; + @ApiModelProperty("报告单类型code") + private Long reportCode; + @ApiModelProperty("报告单分项code") + private Long subentryCode; + } +} diff --git a/ht/src/main/java/com/ccsens/ht/bean/vo/StatisticsVo.java b/ht/src/main/java/com/ccsens/ht/bean/vo/StatisticsVo.java new file mode 100644 index 00000000..0f917911 --- /dev/null +++ b/ht/src/main/java/com/ccsens/ht/bean/vo/StatisticsVo.java @@ -0,0 +1,103 @@ +package com.ccsens.ht.bean.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import jnr.ffi.annotations.In; +import lombok.Data; + +import java.util.List; + +/** + * @author 逗 + */ +@Data +public class StatisticsVo { + + @ApiModel("返回-测评人数实时统计") + @Data + public static class Realtime{ + @ApiModelProperty("累计") + private int totalNum; + @ApiModelProperty("本月") + private int monthNum; + @ApiModelProperty("本日") + private int dayNum; + @ApiModelProperty("折线图数据") + private List chartList; + } + + @ApiModel("图表数据-类型数据") + @Data + public static class Chart{ + @ApiModelProperty("类型") + private String type; + @ApiModelProperty("数量") + private int num; + } + + @Data + @ApiModel("返回-性别年龄分布") + public static class AgeAndSex{ + @ApiModelProperty("男性人数") + private int man; + @ApiModelProperty("女性人数") + private int woman; + @ApiModelProperty("年龄分布数据") + private List chartList; + } + + @Data + @ApiModel("返回-区域分布") + public static class AreaDistribution{ + @ApiModelProperty("当前省份") + private String name; + @ApiModelProperty("当前省份数量") + private int num; + @ApiModelProperty("省份分布数据") + private List chartList; + } + + @Data + @ApiModel("返回-报告单分数分布") + public static class ReportDistribution{ + @ApiModelProperty("数据类型") + private List types; + @ApiModelProperty("横坐标类型") + private List xAxis; + @ApiModelProperty("数据") + private List chartList; + } + + @Data + @ApiModel("图表数据-男女") + public static class ChartManWoman{ + @ApiModelProperty("男生数据") + private List manList; + @ApiModelProperty("女生数据") + private List womanList; + } + + @Data + @ApiModel("返回-报告单分数散点图") + public static class ReportScatterDiagram{ + @ApiModelProperty("测评类型的最大分") + private int allMax; + @ApiModelProperty("分项的最大分") + private int mMax; + @ApiModelProperty("数据") + private List> list; + } + + @Data + @ApiModel("返回-查询试题类型") + public static class ReportCode{ + @ApiModelProperty("id") + private Long id; + @ApiModelProperty("类型名") + private String name; + @ApiModelProperty("code") + private String code; + @ApiModelProperty("分项信息") + private List subentryList; + } +} diff --git a/ht/src/main/java/com/ccsens/ht/persist/dao/HtReportDao.java b/ht/src/main/java/com/ccsens/ht/persist/dao/HtReportDao.java index da45444f..04583c26 100644 --- a/ht/src/main/java/com/ccsens/ht/persist/dao/HtReportDao.java +++ b/ht/src/main/java/com/ccsens/ht/persist/dao/HtReportDao.java @@ -3,6 +3,7 @@ package com.ccsens.ht.persist.dao; import com.ccsens.ht.bean.po.HtReport; import com.ccsens.ht.bean.vo.PatientReportSearchVo; import com.ccsens.ht.bean.vo.QuestionVo; +import com.ccsens.ht.bean.vo.StatisticsVo; import com.ccsens.ht.persist.mapper.HtReportMapper; import org.apache.ibatis.annotations.Param; @@ -54,5 +55,9 @@ public interface HtReportDao extends HtReportMapper { */ QuestionVo.Report queryReportAndRecord(@Param("code") String code, @Param("patientReportId") Long patientReportId); - + /** + * 查询测评类型和分项id + * @return 返回类型和分项id + */ + List queryReportAndSubentry(); } diff --git a/ht/src/main/java/com/ccsens/ht/persist/dao/StatisticsDao.java b/ht/src/main/java/com/ccsens/ht/persist/dao/StatisticsDao.java new file mode 100644 index 00000000..871caa6b --- /dev/null +++ b/ht/src/main/java/com/ccsens/ht/persist/dao/StatisticsDao.java @@ -0,0 +1,66 @@ +package com.ccsens.ht.persist.dao; + +import com.ccsens.ht.bean.vo.StatisticsVo; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author 逗 + */ +@Repository +public interface StatisticsDao { + + /** + * 查找总数 当月数量 当天数量 + * @param hospitalId 医院id + * @param beginOfMonth 本月开始时间 + * @param endOfMonth 本月结束时间 + * @param beginOfDay 当天开始时间 + * @param endOfDay 当天结束时间 + * @return 返回总数 本月数量 当天数量 + */ + StatisticsVo.Realtime getTotalNum(@Param("hospitalId") long hospitalId, @Param("beginOfMonth") long beginOfMonth,@Param("endOfMonth") long endOfMonth,@Param("beginOfDay") long beginOfDay,@Param("endOfDay") long endOfDay); + + /** + * 查找实时数据 + * @param hospitalId 医院Id + * @return 返回实时数据 + */ + List getRealtimeNum(@Param("hospitalId") Long hospitalId); + + /** + * 查找年龄分布信息 + * @param hospitalId 医院id + * @return 返回各个年龄段的数量 + */ + List getWithAge(@Param("hospitalId")Long hospitalId); + + /** + * 查找男女占比 + * @param hospitalId 医院id + * @return 返回男女数量 + */ + StatisticsVo.AgeAndSex getWithSex(@Param("hospitalId")Long hospitalId); + + /** + * 查找测评结果总评分布 + * @param hospitalId 医院id + * @return 返回总评分布 + */ + List getAppraise(@Param("hospitalId")Long hospitalId); + + /** + * 查找各省份的数据 + * @return 返回省份数据 + */ + List areaDistribution(); + + /** + * 查找医院所在省份的数据 + * @param hospitalId 医院id + * @return 返回医院所在省份的数据 + */ + StatisticsVo.AreaDistribution hospitalProvince(@Param("hospitalId")Long hospitalId); +} diff --git a/ht/src/main/java/com/ccsens/ht/service/IStatisticsService.java b/ht/src/main/java/com/ccsens/ht/service/IStatisticsService.java new file mode 100644 index 00000000..dd817776 --- /dev/null +++ b/ht/src/main/java/com/ccsens/ht/service/IStatisticsService.java @@ -0,0 +1,76 @@ +package com.ccsens.ht.service; + +import com.ccsens.ht.bean.dto.StatisticsDto; +import com.ccsens.ht.bean.vo.PositionVo; +import com.ccsens.ht.bean.vo.StatisticsVo; + +import java.util.List; + +/** + * @author 逗 + */ +public interface IStatisticsService { + + /** + * 查找医院信息 + * @return 返回医院信息 + */ + List queryHospital(); + + /** + * 查找测评类型和分项 + * @param hospitalId 医院id + * @return 返回测评类型和分项 + */ + List queryReportCode(Long hospitalId); + + /** + * 测评人数实时统计 + * @param hospitalId 医院id + * @return 返回实时统计数据 + */ + StatisticsVo.Realtime realtime(Long hospitalId); + + /** + * 查找性别年龄分布图 + * @param hospitalId 医院id + * @return 返回性别年龄分布信息 + */ + StatisticsVo.AgeAndSex ageAndSex(Long hospitalId); + + /** + * 查询区域分布信息 + * @param hospitalId 医院id + * @return 返回区域分布信息 + */ + StatisticsVo.AreaDistribution areaDistribution(Long hospitalId); + + /** + * 测评结果总评分布 + * @param hospitalId 医院id + * @return 返回总评分布 + */ + List appraise(Long hospitalId); + + /** + * 查询报告单总分分布 + * @param report 测评类型信息 + * @return 返回报告单总分分布 + */ + StatisticsVo.ReportDistribution reportScore(StatisticsDto.Report report); + + /** + * 报告单分项分数分布 + * @param report 测评类型信息 + * @return 返回报告单分项分数分布 + */ + StatisticsVo.ReportDistribution subentryScore(StatisticsDto.Report report); + + /** + * 查询报告单分数散点图 + * @param report 测评类型信息 + * @return 返回散点图信息 + */ + StatisticsVo.ReportScatterDiagram scatterDiagram(StatisticsDto.Report report); + +} diff --git a/ht/src/main/java/com/ccsens/ht/service/StatisticsService.java b/ht/src/main/java/com/ccsens/ht/service/StatisticsService.java new file mode 100644 index 00000000..9ce6624e --- /dev/null +++ b/ht/src/main/java/com/ccsens/ht/service/StatisticsService.java @@ -0,0 +1,124 @@ +package com.ccsens.ht.service; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.ccsens.ht.bean.dto.StatisticsDto; +import com.ccsens.ht.bean.po.HtPosition; +import com.ccsens.ht.bean.po.HtPositionExample; +import com.ccsens.ht.bean.vo.PositionVo; +import com.ccsens.ht.bean.vo.StatisticsVo; +import com.ccsens.ht.persist.dao.HtPositionDao; +import com.ccsens.ht.persist.dao.HtReportDao; +import com.ccsens.ht.persist.dao.StatisticsDao; +import com.ccsens.ht.uitl.Constant; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.List; + +/** + * @author 逗 + */ +@Slf4j +@Service +@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) +public class StatisticsService implements IStatisticsService { + + @Resource + private HtPositionDao htPositionDao; + @Resource + private HtReportDao htReportDao; + @Resource + private StatisticsDao statisticsDao; + + @Override + public List queryHospital() { + List list = null; + //查找所有的医院信息 + HtPositionExample example = new HtPositionExample(); + example.createCriteria().andTypeEqualTo(Constant.Ht.Position.POSITION_MAP_HOSPITAL); + List positionList = htPositionDao.selectByExample(example); + if(CollectionUtil.isNotEmpty(positionList)){ + list = PositionVo.Position.copy(positionList); + } + return list; + } + + @Override + public List queryReportCode(Long hospitalId) { + return htReportDao.queryReportAndSubentry(); + } + + @Override + public StatisticsVo.Realtime realtime(Long hospitalId) { + //获取当前月的开始结束时间 + long beginOfMonth = DateUtil.beginOfMonth(new Date()).getTime(); + long endOfMonth = DateUtil.endOfMonth(new Date()).getTime(); + //获取当前开始结束时间 + long beginOfDay = DateUtil.beginOfDay(new Date()).getTime(); + long endOfDay = DateUtil.endOfDay(new Date()).getTime(); + //查找总数,当月,当天数量 + StatisticsVo.Realtime realtime = statisticsDao.getTotalNum(hospitalId,beginOfMonth,endOfMonth,beginOfDay,endOfDay); + //查找折线图里的数据 + List chartList = statisticsDao.getRealtimeNum(hospitalId); + //返回 + if(ObjectUtil.isNotNull(realtime)){ + realtime.setChartList(chartList); + } + return realtime; + } + + @Override + public StatisticsVo.AgeAndSex ageAndSex(Long hospitalId) { + //查找男女分布信息 + StatisticsVo.AgeAndSex ageAndSex = statisticsDao.getWithSex(hospitalId); + //0~18未成年 19~44青年 45~59中年 60~74老人 75~89老年人 90以上长寿老年人 + List chartList = statisticsDao.getWithAge(hospitalId); + //返回 + if(ObjectUtil.isNotNull(ageAndSex)){ + ageAndSex.setChartList(chartList); + } + return ageAndSex; + } + + @Override + public StatisticsVo.AreaDistribution areaDistribution(Long hospitalId) { + //查找医院所在省的数据 + StatisticsVo.AreaDistribution areaDistribution = statisticsDao.hospitalProvince(hospitalId); + //查找各省份的数据 + List chartList = statisticsDao.areaDistribution(); + //返回 + if(ObjectUtil.isNotNull(areaDistribution)){ + areaDistribution.setChartList(chartList); + } + return areaDistribution; + } + + @Override + public List appraise(Long hospitalId) { + return statisticsDao.getAppraise(hospitalId); + } + + @Override + public StatisticsVo.ReportDistribution reportScore(StatisticsDto.Report report) { + return null; + } + + @Override + public StatisticsVo.ReportDistribution subentryScore(StatisticsDto.Report report) { + return null; + } + + @Override + public StatisticsVo.ReportScatterDiagram scatterDiagram(StatisticsDto.Report report) { + return null; + } +} diff --git a/ht/src/main/resources/mapper_dao/HtReportDao.xml b/ht/src/main/resources/mapper_dao/HtReportDao.xml index 3cdedf1b..30e4461c 100644 --- a/ht/src/main/resources/mapper_dao/HtReportDao.xml +++ b/ht/src/main/resources/mapper_dao/HtReportDao.xml @@ -103,5 +103,46 @@ ) record on report.id = record.question_id + + + + + + + + + + + + + \ No newline at end of file diff --git a/ht/src/main/resources/mapper_dao/StatisticsDao.xml b/ht/src/main/resources/mapper_dao/StatisticsDao.xml new file mode 100644 index 00000000..f60428d1 --- /dev/null +++ b/ht/src/main/resources/mapper_dao/StatisticsDao.xml @@ -0,0 +1,223 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/question/src/main/java/com/ccsens/question/api/QuestionController.java b/question/src/main/java/com/ccsens/question/api/QuestionController.java index 60353f79..994b45b2 100644 --- a/question/src/main/java/com/ccsens/question/api/QuestionController.java +++ b/question/src/main/java/com/ccsens/question/api/QuestionController.java @@ -120,7 +120,7 @@ public class QuestionController { @MustLogin @DoctorAudit - @ApiOperation(value = "根据上级code查询测评类型",notes = "zy:删除画图的轨迹,可以一次删除多条") + @ApiOperation(value = "根据上级code查询测评类型",notes = "") @ApiImplicitParams({ }) @RequestMapping(value="/queryReportCode", method = RequestMethod.POST)