diff --git a/src/main/java/com/ccsens/carbasics/api/manage/ManageStatisticalController.java b/src/main/java/com/ccsens/carbasics/api/manage/ManageStatisticalController.java index bef6ed7..86b5539 100644 --- a/src/main/java/com/ccsens/carbasics/api/manage/ManageStatisticalController.java +++ b/src/main/java/com/ccsens/carbasics/api/manage/ManageStatisticalController.java @@ -1,7 +1,10 @@ package com.ccsens.carbasics.api.manage; +import com.ccsens.carbasics.bean.dto.QuestionnaireDto; import com.ccsens.carbasics.bean.dto.StatisticalDto; +import com.ccsens.carbasics.bean.vo.QuestionnaireVo; import com.ccsens.carbasics.bean.vo.StatisticalVo; +import com.ccsens.carbasics.service.IManageStatisticalService; import com.ccsens.carbasics.service.IStatisticalService; import com.ccsens.cloudutil.annotation.MustLogin; import com.ccsens.util.JsonResponse; @@ -24,24 +27,64 @@ import java.util.List; * @author: whj * @time: 2021/7/28 8:54 */ -@Api(tags = "统计查询") +@Api(tags = "后台统计查询") @RestController @RequestMapping("/manage/statistical") @Slf4j public class ManageStatisticalController { + @Resource - private IStatisticalService statisticalService; + private IManageStatisticalService manageStatisticalService; + + + @MustLogin + @ApiOperation(value = "查找卒中问卷", notes = "") + @RequestMapping(value = "/questionnaireByType", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> questionnaireByType(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("查找卒中问卷:{}", params); + List questionnaireByTypes = manageStatisticalService.questionnaireByType(params.getParam(), params.getUserId()); + log.info("查找卒中问卷结果:{}", questionnaireByTypes); + return JsonResponse.newInstance().ok(questionnaireByTypes); + } + + @MustLogin + @ApiOperation(value = "按医院等级-收治急性缺血性脑卒中(AIS)总例数", notes = "") + @RequestMapping(value = "/allLevel", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse comparisonAllByLevel(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("按医院等级-对比AIS患者数据:{}", params); + StatisticalVo.ComparisonAis comparisonAis = manageStatisticalService.comparisonAllByLevel(params.getParam(), params.getUserId()); + log.info("按医院等级-对比AIS患者数据结果:{}", comparisonAis); + return JsonResponse.newInstance().ok(comparisonAis); + } + @MustLogin + @ApiOperation(value = "按地区-收治急性缺血性脑卒中(AIS)总例数", notes = "") + @RequestMapping(value = "/allArea", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse comparisonAllByArea(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("按地区-对比AIS患者数据:{}", params); + StatisticalVo.ComparisonAis comparisonAis = manageStatisticalService.comparisonAllByArea(params.getParam(), params.getUserId()); + log.info("按地区-对比AIS患者数据结果:{}", comparisonAis); + return JsonResponse.newInstance().ok(comparisonAis); + } @MustLogin - @ApiOperation(value = "跑道图", notes = "跑道图") - @RequestMapping(value = "/runway", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse runway(@ApiParam @Validated @RequestBody QueryDto params) { - log.info("跑道图:{}", params); - StatisticalVo.Common common = statisticalService.runway(params.getParam(), params.getUserId()); - log.info("跑道图结果:{}", common); - return JsonResponse.newInstance().ok(common); + @ApiOperation(value = "按地区-AIS就诊患者总数", notes = "") + @RequestMapping(value = "/aisArea", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse comparisonAisByArea(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("按地区-对比AIS患者数据:{}", params); + StatisticalVo.ComparisonAis comparisonAis = manageStatisticalService.comparisonAisByArea(params.getParam(), params.getUserId()); + log.info("按地区-对比AIS患者数据结果:{}", comparisonAis); + return JsonResponse.newInstance().ok(comparisonAis); } + @MustLogin + @ApiOperation(value = "按地区-发病4.5h内AIS患者总数和百分比", notes = "") + @RequestMapping(value = "/aisPercentArea", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse comparisonAisPercentByArea(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("按地区-发病4.5h内AIS患者总数和百分比:{}", params); + StatisticalVo.ComparisonAisPercent comparisonAis = manageStatisticalService.comparisonAisPercentByArea(params.getParam(), params.getUserId()); + log.info("按地区-发病4.5h内AIS患者总数和百分比结果:{}", comparisonAis); + return JsonResponse.newInstance().ok(comparisonAis); + } } diff --git a/src/main/java/com/ccsens/carbasics/bean/dto/QuestionnaireDto.java b/src/main/java/com/ccsens/carbasics/bean/dto/QuestionnaireDto.java index 6252416..5f4b4f6 100644 --- a/src/main/java/com/ccsens/carbasics/bean/dto/QuestionnaireDto.java +++ b/src/main/java/com/ccsens/carbasics/bean/dto/QuestionnaireDto.java @@ -240,4 +240,12 @@ public class QuestionnaireDto { private int pageSize = 10; } + + @Data + @ApiModel("根据类型查看问卷") + public static class QueryQuestionnaireByType { + @ApiModelProperty("问卷类型 0卒中 1高危筛查") + private Byte type = 0; + } + } diff --git a/src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java b/src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java index 742f5fd..9752aee 100644 --- a/src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java +++ b/src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java @@ -198,4 +198,17 @@ public class StatisticalDto { @ApiModelProperty("省质控code") private String code; } + + @Data + @ApiModel("后台对比两个问卷的AIS数据-请求") + public static class Comparison { + @ApiModelProperty("第一个问卷Id") + private Long oneId; + @ApiModelProperty("第二个问卷Id") + private Long twoId; + @ApiModelProperty("排序字段 0第一个AIS数量 1第二个AIS数量 2第一个4.5小时AIS数量 3第二个4.5小时AIS数量 4第一个4.5小时AIS百分比 5第二个4.5小时AIS百分比") + private byte desc = 0; + + + } } diff --git a/src/main/java/com/ccsens/carbasics/bean/vo/QuestionnaireVo.java b/src/main/java/com/ccsens/carbasics/bean/vo/QuestionnaireVo.java index 642861d..2d1ac29 100644 --- a/src/main/java/com/ccsens/carbasics/bean/vo/QuestionnaireVo.java +++ b/src/main/java/com/ccsens/carbasics/bean/vo/QuestionnaireVo.java @@ -409,4 +409,13 @@ public class QuestionnaireVo { } } + + @Data + @ApiModel("根据type查找问卷-请求") + public static class QuestionnaireByType { + @ApiModelProperty("问卷id") + private Long id; + @ApiModelProperty("问卷名称") + private String questionnaireName; + } } diff --git a/src/main/java/com/ccsens/carbasics/bean/vo/StatisticalVo.java b/src/main/java/com/ccsens/carbasics/bean/vo/StatisticalVo.java index 289ef94..4da01d7 100644 --- a/src/main/java/com/ccsens/carbasics/bean/vo/StatisticalVo.java +++ b/src/main/java/com/ccsens/carbasics/bean/vo/StatisticalVo.java @@ -1,11 +1,14 @@ package com.ccsens.carbasics.bean.vo; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ArrayUtil; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -119,4 +122,123 @@ public class StatisticalVo { @ApiModelProperty("下级机构") private List children; } + + + @ApiModel("对比两个问卷的AIS-返回") + @Data + public static class ComparisonAis{ + @ApiModelProperty("总数据") + private Integer totalNum = 0; + @ApiModelProperty("第一个问卷的数量") + private Integer oneNum = 0; + @ApiModelProperty("第二个问卷的数量") + private Integer towNum = 0; + @ApiModelProperty("表格数据") + private List aisList; + + public Integer getTotalNum() { + return oneNum + towNum; + } + + public Integer getOneNum() { + if(CollectionUtil.isNotEmpty(aisList)){ + for (Ais ais : aisList) { + oneNum += ais.oneNum; + } + } + return oneNum; + } + + public Integer getTowNum() { + if(CollectionUtil.isNotEmpty(aisList)){ + for (Ais ais : aisList) { + towNum += ais.towNum; + } + } + return towNum; + } + + @ApiModel("对比两个问卷的AI-表格数据-返回") + @Data + public static class Ais{ + @ApiModelProperty("列名") + private String name; + @ApiModelProperty("第一个数量") + private Integer oneNum = 0; + @ApiModelProperty("第二个数量") + private Integer towNum = 0; + + public Ais(String name, Integer oneNum, Integer towNum) { + this.name = name; + this.oneNum = oneNum; + this.towNum = towNum; + } + + public Ais() { + } + } + } + + @ApiModel("对比两个问卷的AIS-返回") + @Data + public static class ComparisonAisPercent{ + @ApiModelProperty("总数据") + private Integer totalNum = 0; + @ApiModelProperty("4.5小时的总数据") + private Integer num = 0; + @ApiModelProperty("4.5小时的百分比") + private BigDecimal percent = new BigDecimal(0); + @ApiModelProperty("表格数据") + private List aisList; + + public Integer getTotalNum() { + if(CollectionUtil.isNotEmpty(aisList)){ + for (Ais ais : aisList) { + totalNum += (ais.oneNum + ais.towNum); + } + } + return totalNum; + } + + public Integer getNum() { + if(CollectionUtil.isNotEmpty(aisList)){ + for (Ais ais : aisList) { + num += (ais.oneHourNum + ais.towHourNum); + } + } + return num; + } + + public BigDecimal getPercent() { + return totalNum == 0 ? percent : (new BigDecimal(num*100.00).divide(new BigDecimal(totalNum), 2, BigDecimal.ROUND_HALF_UP)); + } + + @ApiModel("对比两个问卷的AI-表格数据-返回") + @Data + public static class Ais{ + @ApiModelProperty("列名") + private String name; + @ApiModelProperty("第一个AIS数量") + private Integer oneNum = 0; + @ApiModelProperty("第二个AIS数量") + private Integer towNum = 0; + @ApiModelProperty("第一个4.5小时AIS数量") + private Integer oneHourNum = 0; + @ApiModelProperty("第二个4.5小时AIS数量") + private Integer towHourNum = 0; + @ApiModelProperty("第一个4.5小时AIS百分比") + private BigDecimal oneHourPercent = new BigDecimal(0); + @ApiModelProperty("第二个4.5小时AIS百分比") + private BigDecimal towHourPercent = new BigDecimal(0); + + public BigDecimal getOneHourPercent() { + return oneNum == 0 ? oneHourPercent : (new BigDecimal(oneHourNum*100.00).divide(new BigDecimal(oneNum), 2, BigDecimal.ROUND_HALF_UP)); + } + + public BigDecimal getTowHourPercent() { + return towNum == 0 ? towHourPercent : (new BigDecimal(towHourNum*100.00).divide(new BigDecimal(towNum), 2, BigDecimal.ROUND_HALF_UP)); + } + } + } + } diff --git a/src/main/java/com/ccsens/carbasics/persist/dao/ManageStatisticalDao.java b/src/main/java/com/ccsens/carbasics/persist/dao/ManageStatisticalDao.java new file mode 100644 index 0000000..73d70c9 --- /dev/null +++ b/src/main/java/com/ccsens/carbasics/persist/dao/ManageStatisticalDao.java @@ -0,0 +1,36 @@ +package com.ccsens.carbasics.persist.dao; + +import com.ccsens.carbasics.bean.vo.StatisticalVo; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * @author 逗 + */ +@Repository +public interface ManageStatisticalDao { + + /** + * + * @param oneId + * @param twoId + * @return + */ + Map comparisonAllByLevel(@Param("oneId")Long oneId, @Param("twoId")Long twoId); + + List comparisonAllByArea(@Param("oneId")Long oneId, @Param("twoId")Long twoId, @Param("desc")byte desc); + + /** + * + * @param oneId + * @param twoId + * @param desc + * @return + */ + List comparisonAisByArea(@Param("oneId")Long oneId, @Param("twoId")Long twoId, @Param("desc")byte desc); + + List comparisonAisPercentByArea(@Param("oneId")Long oneId, @Param("twoId")Long twoId, @Param("desc")byte desc); +} diff --git a/src/main/java/com/ccsens/carbasics/persist/dao/QuestionnaireDao.java b/src/main/java/com/ccsens/carbasics/persist/dao/QuestionnaireDao.java index 3d40fb2..e8495f4 100644 --- a/src/main/java/com/ccsens/carbasics/persist/dao/QuestionnaireDao.java +++ b/src/main/java/com/ccsens/carbasics/persist/dao/QuestionnaireDao.java @@ -87,4 +87,11 @@ public interface QuestionnaireDao extends QuestionnaireMapper { * @return 返回类表 */ List backQueryScreening(@Param("param")QuestionnaireDto.BackQueryScreening param, @Param("now")long now); + + /** + * 通过type查找问卷 + * @param type + * @return + */ + List questionnaireByType(@Param("type")Byte type); } diff --git a/src/main/java/com/ccsens/carbasics/service/IManageStatisticalService.java b/src/main/java/com/ccsens/carbasics/service/IManageStatisticalService.java new file mode 100644 index 0000000..6501539 --- /dev/null +++ b/src/main/java/com/ccsens/carbasics/service/IManageStatisticalService.java @@ -0,0 +1,48 @@ +package com.ccsens.carbasics.service; + +import com.ccsens.carbasics.bean.dto.QuestionnaireDto; +import com.ccsens.carbasics.bean.dto.StatisticalDto; +import com.ccsens.carbasics.bean.vo.QuestionnaireVo; +import com.ccsens.carbasics.bean.vo.StatisticalVo; + +import java.util.List; + +/** + * @author 逗 + */ +public interface IManageStatisticalService { + + /** + * 通过type查找问卷 + * @param param + * @param userId + * @return + */ + List questionnaireByType(QuestionnaireDto.QueryQuestionnaireByType param, Long userId); + + /** + * 根据等级统计Ais数据 + * @param param + * @param userId + * @return + */ + StatisticalVo.ComparisonAis comparisonAllByLevel(StatisticalDto.Comparison param, Long userId); + + /** + * 根据地区统计AIS数据 + * @param param + * @param userId + * @return + */ + StatisticalVo.ComparisonAis comparisonAllByArea(StatisticalDto.Comparison param, Long userId); + + /** + * + * @param param + * @param userId + * @return + */ + StatisticalVo.ComparisonAis comparisonAisByArea(StatisticalDto.Comparison param, Long userId); + + StatisticalVo.ComparisonAisPercent comparisonAisPercentByArea(StatisticalDto.Comparison param, Long userId); +} diff --git a/src/main/java/com/ccsens/carbasics/service/ManageStatisticalService.java b/src/main/java/com/ccsens/carbasics/service/ManageStatisticalService.java new file mode 100644 index 0000000..78192b3 --- /dev/null +++ b/src/main/java/com/ccsens/carbasics/service/ManageStatisticalService.java @@ -0,0 +1,102 @@ +package com.ccsens.carbasics.service; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; +import com.ccsens.carbasics.bean.dto.QuestionnaireDto; +import com.ccsens.carbasics.bean.dto.StatisticalDto; +import com.ccsens.carbasics.bean.vo.QuestionnaireVo; +import com.ccsens.carbasics.bean.vo.StatisticalVo; +import com.ccsens.carbasics.persist.dao.ManageStatisticalDao; +import com.ccsens.carbasics.persist.dao.QuestionnaireDao; +import javafx.print.Collation; +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.util.*; + +/** + * @author 逗 + */ +@Slf4j +@Service +@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) +public class ManageStatisticalService implements IManageStatisticalService { + + @Resource + private QuestionnaireDao questionnaireDao; + @Resource + private ManageStatisticalDao manageStatisticalDao; + + @Override + public List questionnaireByType(QuestionnaireDto.QueryQuestionnaireByType param, Long userId) { + return questionnaireDao.questionnaireByType(param.getType()); + } + + @Override + public StatisticalVo.ComparisonAis comparisonAllByLevel(StatisticalDto.Comparison param, Long userId) { + //查找“收治急性缺血性脑卒中(AIS)总例数” + Map map = manageStatisticalDao.comparisonAllByLevel(param.getOneId(),param.getTwoId()); + + StatisticalVo.ComparisonAis comparisonAis = new StatisticalVo.ComparisonAis(); + List aisList = new ArrayList<>(); + if(ObjectUtil.isNull(map)){ + aisList.add(new StatisticalVo.ComparisonAis.Ais("二级",0,0)); + aisList.add(new StatisticalVo.ComparisonAis.Ais("三级",0,0)); + aisList.add(new StatisticalVo.ComparisonAis.Ais("溶栓地图外",0,0)); + }else { + aisList.add(new StatisticalVo.ComparisonAis.Ais("二级", + map.get("secondLevel1") == null ? 0 : map.get("secondLevel1").intValue(), + map.get("secondLevel2") == null ? 0 : map.get("secondLevel2").intValue())); + aisList.add(new StatisticalVo.ComparisonAis.Ais("三级", + map.get("threeLevel1") == null ? 0 : map.get("threeLevel1").intValue(), + map.get("threeLevel2") == null ? 0 : map.get("threeLevel2").intValue())); + aisList.add(new StatisticalVo.ComparisonAis.Ais("溶栓地图外", + map.get("notMap1") == null ? 0 : map.get("notMap1").intValue(), + map.get("notMap2") == null ? 0 : map.get("notMap2").intValue())); + } + + comparisonAis.setAisList(aisList); + return comparisonAis; + } + + @Override + public StatisticalVo.ComparisonAis comparisonAllByArea(StatisticalDto.Comparison param, Long userId) { + //查找“收治急性缺血性脑卒中(AIS)总例数” + List aisList = manageStatisticalDao.comparisonAllByArea(param.getOneId(),param.getTwoId(),param.getDesc()); + + StatisticalVo.ComparisonAis comparisonAis = new StatisticalVo.ComparisonAis(); + + comparisonAis.setAisList(aisList); + return comparisonAis; + } + + + @Override + public StatisticalVo.ComparisonAis comparisonAisByArea(StatisticalDto.Comparison param, Long userId) { + //查找“收治急性缺血性脑卒中(AIS)总例数” + List aisList = manageStatisticalDao.comparisonAisByArea(param.getOneId(),param.getTwoId(),param.getDesc()); + StatisticalVo.ComparisonAis comparisonAis = new StatisticalVo.ComparisonAis(); + + comparisonAis.setAisList(aisList); + return comparisonAis; + } + + @Override + public StatisticalVo.ComparisonAisPercent comparisonAisPercentByArea(StatisticalDto.Comparison param, Long userId) { + StatisticalVo.ComparisonAisPercent comparisonAis = new StatisticalVo.ComparisonAisPercent(); + + List aisList = manageStatisticalDao.comparisonAisPercentByArea(param.getOneId(),param.getTwoId(),param.getDesc()); + if(param.getDesc() == 4){ + CollectionUtil.sort(aisList, (o1, o2) -> o2.getOneHourPercent().compareTo(o1.getOneHourPercent())); + }else { + CollectionUtil.sort(aisList, (o1, o2) -> o2.getTowHourPercent().compareTo(o1.getTowHourPercent())); + } + comparisonAis.setAisList(aisList); + + return comparisonAis; + } +} diff --git a/src/main/resources/druid-dev.yml b/src/main/resources/druid-dev.yml index 4892fc6..2a0843a 100644 --- a/src/main/resources/druid-dev.yml +++ b/src/main/resources/druid-dev.yml @@ -29,7 +29,7 @@ spring: testWhileIdle: true timeBetweenEvictionRunsMillis: 60000 url: jdbc:mysql://49.233.89.188:3306/carbasics?useUnicode=true&characterEncoding=UTF-8 -# url: jdbc:mysql://www.tall.wiki:3306/carbasics?useUnicode=true&characterEncoding=UTF-8 +# url: jdbc:mysql://121.36.3.207:3306/carbasics?useUnicode=true&characterEncoding=UTF-8 username: root validationQuery: SELECT 1 FROM DUAL # env: CCSENS_GAME diff --git a/src/main/resources/mapper_dao/ManageStatisticalDao.xml b/src/main/resources/mapper_dao/ManageStatisticalDao.xml new file mode 100644 index 0000000..a139afd --- /dev/null +++ b/src/main/resources/mapper_dao/ManageStatisticalDao.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper_dao/QuestionnaireDao.xml b/src/main/resources/mapper_dao/QuestionnaireDao.xml index 5a44bb9..bae095c 100644 --- a/src/main/resources/mapper_dao/QuestionnaireDao.xml +++ b/src/main/resources/mapper_dao/QuestionnaireDao.xml @@ -501,6 +501,18 @@ ORDER BY t.submitTime DESC + \ No newline at end of file