35 changed files with 1876 additions and 406 deletions
@ -0,0 +1,65 @@ |
|||
package com.acupuncture.web.controller.web; |
|||
|
|||
import com.acupuncture.common.core.domain.JsonResponse; |
|||
import com.acupuncture.system.domain.dto.StatisticsDto; |
|||
import com.acupuncture.system.domain.vo.AdminStatisticsVo; |
|||
import com.acupuncture.system.service.AdminStatisticsService; |
|||
import com.acupuncture.system.service.StatisticsService; |
|||
import io.swagger.annotations.Api; |
|||
import io.swagger.annotations.ApiOperation; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.validation.annotation.Validated; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestBody; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @Author zzc |
|||
* @Package com.acupuncture.web.controller.web |
|||
* @Date 2025/2/13 8:58 |
|||
* @description: |
|||
*/ |
|||
@Slf4j |
|||
@Api(tags = "统计相关") |
|||
@RestController |
|||
@RequestMapping("/admin/statistics") |
|||
public class AdminStatisticsController { |
|||
|
|||
@Resource |
|||
private AdminStatisticsService statisticsService; |
|||
|
|||
@ApiOperation("患者统计") |
|||
@PostMapping("/patientTotal") |
|||
public JsonResponse<AdminStatisticsVo.PatientVo> queryPatientStatistics(@RequestBody @Validated StatisticsDto.Query dto) { |
|||
return JsonResponse.ok(statisticsService.queryPatientStatistics(dto)); |
|||
} |
|||
|
|||
@ApiOperation("诊疗统计") |
|||
@PostMapping("/zlInfo") |
|||
public JsonResponse<AdminStatisticsVo.TreamentVo> queryZlStatistics(@RequestBody @Validated StatisticsDto.Query dto) { |
|||
return JsonResponse.ok(statisticsService.queryZlStatistics(dto)); |
|||
} |
|||
|
|||
@ApiOperation("治疗类型统计") |
|||
@PostMapping("/zlType") |
|||
public JsonResponse<AdminStatisticsVo.ZlTypeVo> queryZlTypeStatistics(@RequestBody @Validated StatisticsDto.Query dto) { |
|||
return JsonResponse.ok(statisticsService.queryZlTypeStatistics(dto)); |
|||
} |
|||
|
|||
@ApiOperation("随访分布统计") |
|||
@PostMapping("/sffb") |
|||
public JsonResponse<List<AdminStatisticsVo.SffbVo.DlVo>> querySfStatistics(@RequestBody @Validated StatisticsDto.Query dto) { |
|||
return JsonResponse.ok(statisticsService.querySfStatistics(dto)); |
|||
} |
|||
|
|||
@ApiOperation("失访统计") |
|||
@PostMapping("/sftj") |
|||
public JsonResponse<List<AdminStatisticsVo.SftjVo>> querySfTjStatistics(@RequestBody @Validated StatisticsDto.Query dto) { |
|||
return JsonResponse.ok(statisticsService.querySfTjStatistics(dto)); |
|||
} |
|||
|
|||
} |
@ -1,35 +0,0 @@ |
|||
package com.acupuncture.web.controller.web; |
|||
|
|||
import com.acupuncture.common.core.domain.BaseDto; |
|||
import com.acupuncture.common.core.domain.JsonResponse; |
|||
import com.acupuncture.system.domain.dto.FmsFollowupDto; |
|||
import com.acupuncture.system.domain.vo.FmsFollowupVo; |
|||
import com.acupuncture.system.service.FmsFollowupQueueService; |
|||
import com.github.pagehelper.PageHelper; |
|||
import com.github.pagehelper.PageInfo; |
|||
import io.swagger.annotations.Api; |
|||
import io.swagger.annotations.ApiOperation; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.validation.annotation.Validated; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestBody; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
/** |
|||
* @Author zzc |
|||
* @Package com.acupuncture.web.controller.web |
|||
* @Date 2025/2/10 16:59 |
|||
* @description: |
|||
*/ |
|||
@Slf4j |
|||
@Api(tags = "随访相关") |
|||
@RestController |
|||
@RequestMapping("/followup") |
|||
public class FmsFollowupQueueController { |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,29 @@ |
|||
package com.acupuncture.common.constant; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* @Author zzc |
|||
* @Package com.acupuncture.common.constant |
|||
* @Date 2025/2/18 9:37 |
|||
* @description: |
|||
*/ |
|||
public class DiseaseMapping { |
|||
public static final Map<String, String> DISEASE_MAP = new HashMap<>(); |
|||
|
|||
static { |
|||
DISEASE_MAP.put("E66.0", "肥胖症"); |
|||
DISEASE_MAP.put("BNX040", "失眠病"); |
|||
DISEASE_MAP.put("F51.0", "失眠病"); |
|||
DISEASE_MAP.put("BNG080", "中风病"); |
|||
DISEASE_MAP.put("I63", "中风病"); |
|||
DISEASE_MAP.put("BWV120", "面瘫病"); |
|||
DISEASE_MAP.put("G51.802", "面瘫病"); |
|||
DISEASE_MAP.put("BGS000", "项痹病"); |
|||
DISEASE_MAP.put("M47.221+G55.2*", "项痹病"); |
|||
DISEASE_MAP.put("M51.202", "腰痛病"); |
|||
DISEASE_MAP.put("BNG090", "痉挛性斜颈"); |
|||
DISEASE_MAP.put("G24.300", "痉挛性斜颈"); |
|||
} |
|||
} |
@ -0,0 +1,26 @@ |
|||
package com.acupuncture.system.domain.dto; |
|||
|
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @Author zzc |
|||
* @Package com.acupuncture.system.domain.dto |
|||
* @Date 2025/2/13 10:52 |
|||
* @description: |
|||
*/ |
|||
public class AdminStatisticsDto { |
|||
|
|||
@Data |
|||
public static class Query { |
|||
@ApiModelProperty("开始时间") |
|||
private Date startTime; |
|||
@ApiModelProperty("结束时间") |
|||
private Date endTime; |
|||
@ApiModelProperty("统计方式 0:周 1:月 2:季 3:年") |
|||
private Integer timeType; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,389 @@ |
|||
package com.acupuncture.system.domain.vo; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @Author zzc |
|||
* @Package com.acupuncture.system.domain.vo |
|||
* @Date 2025/2/13 8:59 |
|||
* @description: |
|||
*/ |
|||
public class AdminStatisticsVo { |
|||
|
|||
@Data |
|||
@ApiModel("患者统计") |
|||
public static class PatientVo { |
|||
private Integer totalPatients; |
|||
@ApiModelProperty("性别统计") |
|||
private GenderVo gender; |
|||
|
|||
@ApiModelProperty("年龄统计") |
|||
private AgeVo age; |
|||
|
|||
@ApiModelProperty("疾病统计") |
|||
private JwbzVo jwbz; |
|||
|
|||
@Data |
|||
public static class GenderVo { |
|||
@ApiModelProperty("男患者人数") |
|||
private Integer male; |
|||
@ApiModelProperty("女患者人数") |
|||
private Integer female; |
|||
@ApiModelProperty("未知患者人数") |
|||
private Integer other; |
|||
} |
|||
|
|||
@Data |
|||
public static class AgeVo { |
|||
@ApiModelProperty("0-40") |
|||
private Integer num1; |
|||
@ApiModelProperty("41-50") |
|||
private Integer num2; |
|||
@ApiModelProperty("51-60") |
|||
private Integer num3; |
|||
@ApiModelProperty("61-70") |
|||
private Integer num4; |
|||
@ApiModelProperty("71-80") |
|||
private Integer num5; |
|||
@ApiModelProperty("80") |
|||
private Integer num6; |
|||
} |
|||
|
|||
@Data |
|||
public static class JwbzVo { |
|||
@ApiModelProperty("高血压") |
|||
private Integer gxy; |
|||
@ApiModelProperty("脑血管病") |
|||
private Integer nxgb; |
|||
@ApiModelProperty("恶性肿瘤") |
|||
private Integer exzl; |
|||
@ApiModelProperty("冠心病") |
|||
private Integer gxb; |
|||
@ApiModelProperty("精神疾病") |
|||
private Integer jsjb; |
|||
@ApiModelProperty("胃和十二指肠溃疡") |
|||
private Integer whsezcky; |
|||
@ApiModelProperty("肥胖症") |
|||
private Integer fpz; |
|||
@ApiModelProperty("骨质疏松症") |
|||
private Integer gzssz; |
|||
@ApiModelProperty("遗传性、先天性疾病") |
|||
private Integer ycxXtxjb; |
|||
@ApiModelProperty("糖尿病") |
|||
private Integer tnb; |
|||
@ApiModelProperty("慢性肺系疾病") |
|||
private Integer mxfxjb; |
|||
@ApiModelProperty("高脂血症") |
|||
private Integer gzxz; |
|||
@ApiModelProperty("肝脏疾病") |
|||
private Integer gzjb; |
|||
@ApiModelProperty("过敏性疾病") |
|||
private Integer gmxjb; |
|||
@ApiModelProperty("关节炎") |
|||
private Integer gjy; |
|||
@ApiModelProperty("痛风") |
|||
private Integer tf; |
|||
@ApiModelProperty("肾炎、肾病") |
|||
private Integer sySb; |
|||
@ApiModelProperty("其他") |
|||
private Integer other; |
|||
|
|||
} |
|||
} |
|||
|
|||
|
|||
@Data |
|||
@ApiModel("诊疗信息") |
|||
public static class TreamentVo { |
|||
|
|||
@ApiModelProperty("排名信息") |
|||
private List<SortVo> sort; |
|||
@ApiModelProperty("体型分布") |
|||
private TxfbVo txfb; |
|||
@ApiModelProperty("中医体质分布") |
|||
private ZytzVo zytz; |
|||
@ApiModelProperty("体态") |
|||
private TtfbVo ttfb; |
|||
@ApiModelProperty("失眠") |
|||
private SmfbVo smfb; |
|||
@ApiModelProperty("焦虑") |
|||
private JlfbVo jlfb; |
|||
|
|||
@Data |
|||
@ApiModel("排名信息") |
|||
public static class SortVo { |
|||
private Integer total; |
|||
private Integer sort; |
|||
private String type; |
|||
|
|||
private String diseaseName; |
|||
private Integer count; |
|||
public SortVo(Integer total, Integer sort, String type, String diseaseName, Integer count) { |
|||
this.total = total; |
|||
this.sort = sort; |
|||
this.type = type; |
|||
this.diseaseName = diseaseName; |
|||
this.count = count; |
|||
} |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("体型分布") |
|||
public static class TxfbVo { |
|||
@ApiModelProperty("") |
|||
private Integer total; |
|||
@ApiModelProperty("隐形肥胖型") |
|||
private Integer yxfpz; |
|||
@ApiModelProperty("脂肪过多型") |
|||
private Integer zfgdx; |
|||
@ApiModelProperty("肥胖型") |
|||
private Integer fpx; |
|||
@ApiModelProperty("肌肉不足型") |
|||
private Integer jrbzx; |
|||
@ApiModelProperty("健康匀称型") |
|||
private Integer jkjcx; |
|||
@ApiModelProperty("超重肌肉型") |
|||
private Integer czjrx; |
|||
@ApiModelProperty("消瘦型") |
|||
private Integer xsx; |
|||
@ApiModelProperty("低脂肪型") |
|||
private Integer dzfx; |
|||
@ApiModelProperty("运动员型") |
|||
private Integer ydyx; |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("体型分布") |
|||
public static class ZytzVo { |
|||
@ApiModelProperty("") |
|||
private Integer total; |
|||
@ApiModelProperty("平和质") |
|||
private Integer phz; |
|||
@ApiModelProperty("气虚质") |
|||
private Integer qxz; |
|||
@ApiModelProperty("阳虚质") |
|||
private Integer yangxz; |
|||
@ApiModelProperty("阴虚质") |
|||
private Integer yinxz; |
|||
@ApiModelProperty("痰湿质") |
|||
private Integer tsz; |
|||
@ApiModelProperty("湿热质") |
|||
private Integer srz; |
|||
@ApiModelProperty("血瘀质") |
|||
private Integer xyz; |
|||
@ApiModelProperty("气郁质") |
|||
private Integer qyz; |
|||
@ApiModelProperty("特禀质") |
|||
private Integer tlz; |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("体态分布") |
|||
public static class TtfbVo { |
|||
@ApiModelProperty("") |
|||
private Integer score1; |
|||
@ApiModelProperty("") |
|||
private Integer score2; |
|||
@ApiModelProperty("") |
|||
private Integer score3; |
|||
@ApiModelProperty("") |
|||
private Integer score4; |
|||
@ApiModelProperty("") |
|||
private Integer score5; |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("失眠分布") |
|||
public static class SmfbVo { |
|||
@ApiModelProperty("") |
|||
private Integer score1; |
|||
@ApiModelProperty("") |
|||
private Integer score2; |
|||
@ApiModelProperty("") |
|||
private Integer score3; |
|||
@ApiModelProperty("") |
|||
private Integer score4; |
|||
@ApiModelProperty("") |
|||
private Integer score5; |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("焦虑分布") |
|||
public static class JlfbVo { |
|||
@ApiModelProperty("") |
|||
private Integer score1; |
|||
@ApiModelProperty("") |
|||
private Integer score2; |
|||
@ApiModelProperty("") |
|||
private Integer score3; |
|||
@ApiModelProperty("") |
|||
private Integer score4; |
|||
} |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("治疗类型") |
|||
public static class ZlTypeVo { |
|||
@ApiModelProperty("治疗类型统计") |
|||
private Zllxtj zllxtj; |
|||
@ApiModelProperty("病种方法分布") |
|||
private BzfffbVo bzfffb; |
|||
@ApiModelProperty("病种穴位分布") |
|||
private BzxwfbVo bzxwfb; |
|||
@ApiModelProperty("治疗效果统计") |
|||
private ZlxgVo zlxwfb; |
|||
@ApiModelProperty("诊疗费用分布") |
|||
private ZlfyVo zlfy; |
|||
|
|||
@Data |
|||
@ApiModel("治疗类型统计") |
|||
public static class Zllxtj { |
|||
private Integer zxyjh; |
|||
private Integer czy; |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("病种方法分布") |
|||
public static class BzfffbVo { |
|||
private Fpz fpz; |
|||
private Smz smz; |
|||
private Otherbz otherbz; |
|||
|
|||
@Data |
|||
@ApiModel("肥胖症") |
|||
public static class Fpz { |
|||
@ApiModelProperty("行为心理干预") |
|||
private Integer xwxlg; |
|||
@ApiModelProperty("运动干预") |
|||
private Integer ydgy; |
|||
@ApiModelProperty("临床营养治疗") |
|||
private Integer lcyyzl; |
|||
@ApiModelProperty("针灸疗法") |
|||
private Integer zjlf; |
|||
@ApiModelProperty("药物治疗") |
|||
private Integer ywzl; |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("失眠症") |
|||
public static class Smz { |
|||
@ApiModelProperty("生活习惯") |
|||
private Integer shxg; |
|||
@ApiModelProperty("心理调适") |
|||
private Integer xlts; |
|||
@ApiModelProperty("针灸") |
|||
private Integer zj; |
|||
@ApiModelProperty("药物治疗") |
|||
private Integer ywzl; |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("失眠症") |
|||
public static class Otherbz { |
|||
@ApiModelProperty("针灸") |
|||
private Integer zj; |
|||
@ApiModelProperty("药物治疗") |
|||
private Integer ywzl; |
|||
} |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("病种穴位分布") |
|||
public static class BzxwfbVo { |
|||
@ApiModelProperty("肥胖症病种穴位分布") |
|||
private Bzxwfb fpzbzxwfb; |
|||
@ApiModelProperty("失眠症病种穴位分布") |
|||
private Bzxwfb smzbzxwfb; |
|||
@ApiModelProperty("其他病种穴位分布") |
|||
private Bzxwfb qtbzxwfb; |
|||
|
|||
@Data |
|||
@ApiModel("病种穴位分布") |
|||
public static class Bzxwfb { |
|||
@ApiModelProperty("足三里") |
|||
private Integer zsl; |
|||
@ApiModelProperty("中脘") |
|||
private Integer zr; |
|||
@ApiModelProperty("天枢") |
|||
private Integer tq; |
|||
@ApiModelProperty("神门") |
|||
private Integer sm; |
|||
@ApiModelProperty("三阴交") |
|||
private Integer syj; |
|||
@ApiModelProperty("百会") |
|||
private Integer bh; |
|||
@ApiModelProperty("其他") |
|||
private Integer am; |
|||
@ApiModelProperty("药物治疗") |
|||
private Integer other; |
|||
} |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("治疗效果统计") |
|||
public static class ZlxgVo { |
|||
@ApiModelProperty("治愈") |
|||
private Integer zy; |
|||
@ApiModelProperty("显效") |
|||
private Integer xx; |
|||
@ApiModelProperty("好转") |
|||
private Integer hz; |
|||
@ApiModelProperty("无效") |
|||
private Integer wx; |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("诊疗费用分布") |
|||
public static class ZlfyVo { |
|||
@ApiModelProperty("<300元") |
|||
private Integer score1; |
|||
@ApiModelProperty("300 ~ 900元") |
|||
private Integer score2; |
|||
@ApiModelProperty("900 ~ 2000元") |
|||
private Integer score3; |
|||
@ApiModelProperty("2000 ~ 5000元") |
|||
private Integer score4; |
|||
@ApiModelProperty(">5000元") |
|||
private Integer score5; |
|||
} |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("随访分布") |
|||
public static class SffbVo { |
|||
@ApiModelProperty("减重队列") |
|||
private DlVo jzdl; |
|||
@ApiModelProperty("失眠队列") |
|||
private DlVo smdl; |
|||
|
|||
@Data |
|||
@ApiModel("队列") |
|||
public static class DlVo { |
|||
private Long queueId; |
|||
private String queueName; |
|||
@ApiModelProperty("人数") |
|||
private Integer num; |
|||
@ApiModelProperty("待随访") |
|||
private Integer dsf; |
|||
@ApiModelProperty("临近随访") |
|||
private Integer ljsf; |
|||
@ApiModelProperty("超期随访") |
|||
private Integer cqsf; |
|||
@ApiModelProperty("正常随访") |
|||
private Integer zc; |
|||
} |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("失访统计") |
|||
public static class SftjVo { |
|||
@ApiModelProperty("失访数量") |
|||
private Integer num; |
|||
@ApiModelProperty("失访原因") |
|||
private String reason; |
|||
} |
|||
} |
@ -0,0 +1,88 @@ |
|||
package com.acupuncture.system.persist.dao; |
|||
|
|||
import com.acupuncture.common.annotation.DataSource; |
|||
import com.acupuncture.common.enums.DataSourceType; |
|||
import com.acupuncture.system.domain.dto.StatisticsDto; |
|||
import com.acupuncture.system.domain.vo.AdminStatisticsVo; |
|||
import org.apache.ibatis.annotations.Param; |
|||
import org.mybatis.spring.annotation.MapperScan; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @Author zzc |
|||
* @Package com.acupuncture.system.persist.dao |
|||
* @Date 2025/2/13 14:07 |
|||
* @description: |
|||
*/ |
|||
@MapperScan("AdminTongjiDao") |
|||
public interface AdminTongjiDao { |
|||
|
|||
/** |
|||
* 患者统计 |
|||
* |
|||
* @param dto |
|||
* @param tenantId |
|||
* @return |
|||
*/ |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.PatientVo.GenderVo queryGenderStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
|
|||
/** |
|||
* 年龄统计 |
|||
* |
|||
* @param dto |
|||
* @param tenantId |
|||
* @return |
|||
*/ |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.PatientVo.AgeVo queryAgeStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.PatientVo.JwbzVo queryJwbzStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
List<String> queryZyzdStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
Integer queryTotalPatient(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.TreamentVo.TxfbVo queryTxfbStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.TreamentVo.ZytzVo queryZytzStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.ZlTypeVo.Zllxtj queryZllxtjStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
|
|||
AdminStatisticsVo.ZlTypeVo.BzfffbVo.Fpz queryFpzStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.ZlTypeVo.ZlxgVo queryZlxgStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.ZlTypeVo.ZlfyVo queryZlfyStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
List<AdminStatisticsVo.SftjVo> querySftjStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
List<AdminStatisticsVo.SffbVo.DlVo> querySfStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.TreamentVo.TtfbVo queryTtfbStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.TreamentVo.SmfbVo querySmfbStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.TreamentVo.JlfbVo queryJlfbStatistics(@Param("dto") StatisticsDto.Query dto, |
|||
@Param("tenantId") Long tenantId); |
|||
@DataSource(DataSourceType.MASTER) |
|||
AdminStatisticsVo.ZlTypeVo.BzfffbVo.Smz querySmzStatistics(StatisticsDto.Query dto, Long tenantId); |
|||
} |
|||
|
@ -0,0 +1,55 @@ |
|||
package com.acupuncture.system.service; |
|||
|
|||
import com.acupuncture.system.domain.dto.StatisticsDto; |
|||
import com.acupuncture.system.domain.vo.AdminStatisticsVo; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @Author zzc |
|||
* @Package com.acupuncture.system.service |
|||
* @Date 2025/2/13 8:58 |
|||
* @description: |
|||
*/ |
|||
public interface AdminStatisticsService { |
|||
|
|||
/** |
|||
* 患者统计 |
|||
* |
|||
* @param dto |
|||
* @return |
|||
*/ |
|||
AdminStatisticsVo.PatientVo queryPatientStatistics(StatisticsDto.Query dto); |
|||
|
|||
/** |
|||
* 诊疗统计 |
|||
* |
|||
* @param dto |
|||
* @return |
|||
*/ |
|||
AdminStatisticsVo.TreamentVo queryZlStatistics(StatisticsDto.Query dto); |
|||
|
|||
/** |
|||
* 治疗类型统计 |
|||
* |
|||
* @param dto |
|||
* @return |
|||
*/ |
|||
AdminStatisticsVo.ZlTypeVo queryZlTypeStatistics(StatisticsDto.Query dto); |
|||
|
|||
/** |
|||
* 随访分布统计 |
|||
* |
|||
* @param dto |
|||
* @return |
|||
*/ |
|||
List<AdminStatisticsVo.SffbVo.DlVo> querySfStatistics(StatisticsDto.Query dto); |
|||
|
|||
/** |
|||
* 失访统计 |
|||
* |
|||
* @param dto |
|||
* @return |
|||
*/ |
|||
List<AdminStatisticsVo.SftjVo> querySfTjStatistics(StatisticsDto.Query dto); |
|||
} |
@ -0,0 +1,121 @@ |
|||
package com.acupuncture.system.service.impl; |
|||
|
|||
import cn.hutool.core.collection.CollUtil; |
|||
import com.acupuncture.common.constant.DiseaseMapping; |
|||
import com.acupuncture.common.utils.SecurityUtils; |
|||
import com.acupuncture.system.domain.dto.StatisticsDto; |
|||
import com.acupuncture.system.domain.vo.AdminStatisticsVo; |
|||
import com.acupuncture.system.persist.dao.AdminTongjiDao; |
|||
import com.acupuncture.system.service.AdminStatisticsService; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* @Author zzc |
|||
* @Package com.acupuncture.system.service |
|||
* @Date 2025/2/13 8:58 |
|||
* @description: |
|||
*/ |
|||
@Service |
|||
public class AdminStatisticsServiceImpl implements AdminStatisticsService { |
|||
@Resource |
|||
private AdminTongjiDao adminTongjiDao; |
|||
|
|||
@Override |
|||
public AdminStatisticsVo.PatientVo queryPatientStatistics(StatisticsDto.Query dto) { |
|||
AdminStatisticsVo.PatientVo patientVo = new AdminStatisticsVo.PatientVo(); |
|||
patientVo.setGender(adminTongjiDao.queryGenderStatistics(dto, SecurityUtils.getTenantId())); |
|||
patientVo.setAge(adminTongjiDao.queryAgeStatistics(dto, SecurityUtils.getTenantId())); |
|||
patientVo.setJwbz(adminTongjiDao.queryJwbzStatistics(dto, SecurityUtils.getTenantId())); |
|||
patientVo.setTotalPatients(adminTongjiDao.queryTotalPatient(dto, SecurityUtils.getTenantId())); |
|||
return patientVo; |
|||
} |
|||
|
|||
@Override |
|||
public AdminStatisticsVo.TreamentVo queryZlStatistics(StatisticsDto.Query dto) { |
|||
AdminStatisticsVo.TreamentVo treamentVo = new AdminStatisticsVo.TreamentVo(); |
|||
List<String> answers = adminTongjiDao.queryZyzdStatistics(dto, SecurityUtils.getTenantId()); |
|||
// 统计病种出现次数
|
|||
if (CollUtil.isNotEmpty(answers)) { |
|||
Map<String, Integer> diseaseCountMap = new HashMap<>(); |
|||
for (String answer : answers) { |
|||
if (answer != null && !answer.isEmpty()) { |
|||
String[] items = answer.split("!@#"); |
|||
for (String item : items) { |
|||
String code = item.split(" ")[0]; // 提取编码
|
|||
String diseaseName = DiseaseMapping.DISEASE_MAP.get(code); |
|||
if (diseaseName != null) { |
|||
diseaseCountMap.put(diseaseName, diseaseCountMap.getOrDefault(diseaseName, 0) + 1); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
// 转换为列表并排序
|
|||
List<Map.Entry<String, Integer>> sortedList = new ArrayList<>(diseaseCountMap.entrySet()); |
|||
sortedList.sort((e1, e2) -> e2.getValue().compareTo(e1.getValue())); |
|||
|
|||
// 封装为SortVo对象
|
|||
List<AdminStatisticsVo.TreamentVo.SortVo> result = new ArrayList<>(); |
|||
int total = sortedList.size(); |
|||
for (int i = 0; i < sortedList.size(); i++) { |
|||
Map.Entry<String, Integer> entry = sortedList.get(i); |
|||
result.add(new AdminStatisticsVo.TreamentVo.SortVo(total, i + 1, "主要诊断", entry.getKey(), entry.getValue())); |
|||
} |
|||
treamentVo.setSort(result); |
|||
} |
|||
treamentVo.setTxfb(adminTongjiDao.queryTxfbStatistics(dto, SecurityUtils.getTenantId())); |
|||
treamentVo.setZytz(adminTongjiDao.queryZytzStatistics(dto, SecurityUtils.getTenantId())); |
|||
treamentVo.setTtfb(adminTongjiDao.queryTtfbStatistics(dto, SecurityUtils.getTenantId())); |
|||
treamentVo.setSmfb(adminTongjiDao.querySmfbStatistics(dto, SecurityUtils.getTenantId())); |
|||
treamentVo.setJlfb(adminTongjiDao.queryJlfbStatistics(dto, SecurityUtils.getTenantId())); |
|||
return treamentVo; |
|||
} |
|||
|
|||
@Override |
|||
public AdminStatisticsVo.ZlTypeVo queryZlTypeStatistics(StatisticsDto.Query dto) { |
|||
AdminStatisticsVo.ZlTypeVo zlTypeVo = new AdminStatisticsVo.ZlTypeVo(); |
|||
zlTypeVo.setZllxtj(adminTongjiDao.queryZllxtjStatistics(dto, SecurityUtils.getTenantId())); |
|||
|
|||
AdminStatisticsVo.ZlTypeVo.BzfffbVo bzfffbVo = new AdminStatisticsVo.ZlTypeVo.BzfffbVo(); |
|||
bzfffbVo.setFpz(adminTongjiDao.queryFpzStatistics(dto, SecurityUtils.getTenantId())); |
|||
bzfffbVo.setSmz(adminTongjiDao.querySmzStatistics(dto, SecurityUtils.getTenantId())); |
|||
//TODO
|
|||
zlTypeVo.setBzfffb(bzfffbVo); |
|||
zlTypeVo.setZlxwfb(adminTongjiDao.queryZlxgStatistics(dto, SecurityUtils.getTenantId())); |
|||
zlTypeVo.setZlfy(adminTongjiDao.queryZlfyStatistics(dto, SecurityUtils.getTenantId())); |
|||
return zlTypeVo; |
|||
} |
|||
|
|||
@Override |
|||
public List<AdminStatisticsVo.SffbVo.DlVo> querySfStatistics(StatisticsDto.Query dto) { |
|||
AdminStatisticsVo.SffbVo sffbVo = new AdminStatisticsVo.SffbVo(); |
|||
return adminTongjiDao.querySfStatistics(dto, SecurityUtils.getTenantId()); |
|||
// if (CollUtil.isNotEmpty(dlVos)) {
|
|||
// for (AdminStatisticsVo.SffbVo.DlVo dlVo : dlVos) {
|
|||
// if (dlVo.getQueueId() == 10L) {
|
|||
// //减重队列
|
|||
// AdminStatisticsVo.SffbVo.DlVo jzdl = new AdminStatisticsVo.SffbVo.DlVo();
|
|||
// BeanUtil.copyProperties(dlVo, jzdl);
|
|||
// sffbVo.setJzdl(jzdl);
|
|||
// } else if (dlVo.getQueueId() == 11L) {
|
|||
// //失眠队列
|
|||
// //减重队列
|
|||
// AdminStatisticsVo.SffbVo.DlVo smdl = new AdminStatisticsVo.SffbVo.DlVo();
|
|||
// BeanUtil.copyProperties(dlVo, smdl);
|
|||
// sffbVo.setSmdl(smdl);
|
|||
// }
|
|||
// }
|
|||
// }
|
|||
// return sffbVo;
|
|||
} |
|||
|
|||
@Override |
|||
public List<AdminStatisticsVo.SftjVo> querySfTjStatistics(StatisticsDto.Query dto) { |
|||
return adminTongjiDao.querySftjStatistics(dto, SecurityUtils.getTenantId()); |
|||
} |
|||
} |
@ -0,0 +1,306 @@ |
|||
<?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.acupuncture.system.persist.dao.AdminTongjiDao"> |
|||
|
|||
<select id="queryGenderStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$PatientVo$GenderVo"> |
|||
SELECT |
|||
IFNULL(SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END), 0) AS male, |
|||
IFNULL(SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END), 0) AS female, |
|||
IFNULL(SUM(CASE WHEN gender IS NULL OR gender NOT IN (0, 1) THEN 1 ELSE 0 END), 0) AS other |
|||
FROM |
|||
v_pms_patient |
|||
<where> |
|||
<if test="tenantId != null"> |
|||
AND tenant_id = #{tenantId} |
|||
</if> |
|||
</where> |
|||
</select> |
|||
|
|||
<select id="queryAgeStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$PatientVo$AgeVo"> |
|||
SELECT |
|||
IFNULL(SUM(CASE WHEN age BETWEEN 0 AND 40 THEN 1 ELSE 0 END), 0) as num1, |
|||
IFNULL(SUM(CASE WHEN age BETWEEN 41 AND 50 THEN 1 ELSE 0 END), 0) as num2, |
|||
IFNULL(SUM(CASE WHEN age BETWEEN 51 AND 60 THEN 1 ELSE 0 END), 0) as num3, |
|||
IFNULL(SUM(CASE WHEN age BETWEEN 61 AND 70 THEN 1 ELSE 0 END), 0) as num4, |
|||
IFNULL(SUM(CASE WHEN age BETWEEN 71 AND 80 THEN 1 ELSE 0 END), 0) as num5, |
|||
IFNULL(SUM(CASE WHEN age > 80 THEN 1 ELSE 0 END), 0) as num6 |
|||
FROM |
|||
v_pms_treatment |
|||
<where> |
|||
<if test="tenantId != null"> |
|||
AND tenant_id = #{tenantId} |
|||
</if> |
|||
</where> |
|||
</select> |
|||
|
|||
<select id="queryJwbzStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$PatientVo$JwbzVo"> |
|||
SELECT |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"高血压"') THEN 1 ELSE 0 END) AS gxy, -- 高血压 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"脑血管病"') THEN 1 ELSE 0 END) AS nxgb, -- 脑血管病 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"恶性肿瘤"') THEN 1 ELSE 0 END) AS exzl, -- 恶性肿瘤 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"冠心病"') THEN 1 ELSE 0 END) AS gxb, -- 冠心病 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"精神疾病"') THEN 1 ELSE 0 END) AS jsjb, -- 精神疾病 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"胃和十二指肠溃疡"') THEN 1 ELSE 0 END) AS whsezcky, -- 胃和十二指肠溃疡 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"肥胖症"') THEN 1 ELSE 0 END) AS fpz, -- 肥胖症 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"骨质疏松症"') THEN 1 ELSE 0 END) AS gzssz, -- 骨质疏松症 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"遗传性、先天性疾病"') THEN 1 ELSE 0 END) AS ycxXtxjb, -- 遗传性、先天性疾病 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"糖尿病"') THEN 1 ELSE 0 END) AS tnb, -- 糖尿病 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"慢性肺系疾病"') THEN 1 ELSE 0 END) AS mxfxjb, -- 慢性肺系疾病 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"高脂血症"') THEN 1 ELSE 0 END) AS gzxz, -- 高脂血症 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"肝脏疾病"') THEN 1 ELSE 0 END) AS gzjb, -- 肝脏疾病 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"过敏性疾病"') THEN 1 ELSE 0 END) AS gmxjb, -- 过敏性疾病 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"关节炎"') THEN 1 ELSE 0 END) AS gjy, -- 关节炎 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"痛风"') THEN 1 ELSE 0 END) AS tf, -- 痛风 |
|||
SUM(CASE WHEN JSON_CONTAINS(current_illness_history, '"肾炎、肾病"') THEN 1 ELSE 0 END) AS sySb, -- 肾炎、肾病 |
|||
SUM(CASE WHEN |
|||
JSON_CONTAINS(current_illness_history, '"高血压"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"脑血管病"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"恶性肿瘤"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"冠心病"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"精神疾病"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"胃和十二指肠溃疡"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"肥胖症"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"骨质疏松症"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"遗传性、先天性疾病"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"糖尿病"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"慢性肺系疾病"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"高脂血症"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"肝脏疾病"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"过敏性疾病"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"关节炎"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"痛风"') = 0 AND |
|||
JSON_CONTAINS(current_illness_history, '"肾炎、肾病"') = 0 |
|||
THEN 1 ELSE 0 END) AS other -- 其他 |
|||
FROM |
|||
v_pms_patient |
|||
<where> |
|||
<if test="tenantId != null"> |
|||
AND tenant_id = #{tenantId} |
|||
</if> |
|||
</where> |
|||
</select> |
|||
|
|||
<resultMap id="ResultMap" type="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$SortVo"> |
|||
<id column="type" property="type" javaType="java.lang.String"/> |
|||
<result column="total" property="total" javaType="java.lang.Integer"/> |
|||
<result column="count" property="count" javaType="java.lang.Integer"/> |
|||
<result column="disease_name" property="diseaseName" javaType="java.lang.String"/> |
|||
</resultMap> |
|||
|
|||
<select id="queryZyzdStatistics" resultType="java.lang.String"> |
|||
SELECT answer FROM v_pms_treatment_record WHERE question_code = 'JBXX_ZYZD' and del_flag = 0 |
|||
</select> |
|||
<select id="queryTotalPatient" resultType="java.lang.Integer"> |
|||
SELECT |
|||
COUNT(1) |
|||
FROM |
|||
v_pms_patient |
|||
<where> |
|||
<if test="tenantId != null"> |
|||
AND tenant_id = #{tenantId} |
|||
</if> |
|||
</where> |
|||
</select> |
|||
|
|||
<select id="queryTxfbStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$TxfbVo"> |
|||
SELECT |
|||
COUNT(*) AS total, |
|||
SUM(CASE WHEN answer = '隐形肥胖型' THEN 1 ELSE 0 END) AS yxfpz, |
|||
SUM(CASE WHEN answer = '脂肪过多型' THEN 1 ELSE 0 END) AS zfgdx, |
|||
SUM(CASE WHEN answer = '肥胖型' THEN 1 ELSE 0 END) AS fpx, |
|||
SUM(CASE WHEN answer = '肌肉不足型' THEN 1 ELSE 0 END) AS jrbzx, |
|||
SUM(CASE WHEN answer = '健康匀称型' THEN 1 ELSE 0 END) AS jkjcx, |
|||
SUM(CASE WHEN answer = '超重肌肉型' THEN 1 ELSE 0 END) AS czjrx, |
|||
SUM(CASE WHEN answer = '消瘦型' THEN 1 ELSE 0 END) AS xsx, |
|||
SUM(CASE WHEN answer = '低脂肪型' THEN 1 ELSE 0 END) AS dzfx, |
|||
SUM(CASE WHEN answer = '运动员型' THEN 1 ELSE 0 END) AS ydyx |
|||
FROM |
|||
v_pms_treatment t |
|||
left join |
|||
v_pms_treatment_record r on t.id = r.treatment_id |
|||
WHERE |
|||
question_code = 'PG_RTCF_TXLX' |
|||
AND r.del_flag = 0 |
|||
and t.del_flag = 0 |
|||
<if test="tenantId != null"> |
|||
AND tenant_id = #{tenantId} |
|||
</if> |
|||
</select> |
|||
|
|||
<select id="queryZytzStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$ZytzVo"> |
|||
SELECT |
|||
COUNT(*) AS total, |
|||
SUM(CASE WHEN answer = '平和质' THEN 1 ELSE 0 END) AS phz, |
|||
SUM(CASE WHEN answer = '气虚质' THEN 1 ELSE 0 END) AS qxz, |
|||
SUM(CASE WHEN answer = '阳虚质' THEN 1 ELSE 0 END) AS yangxz, |
|||
SUM(CASE WHEN answer = '阴虚质' THEN 1 ELSE 0 END) AS yinxz, |
|||
SUM(CASE WHEN answer = '痰湿质' THEN 1 ELSE 0 END) AS tsz, |
|||
SUM(CASE WHEN answer = '湿热质' THEN 1 ELSE 0 END) AS srz, |
|||
SUM(CASE WHEN answer = '血瘀质' THEN 1 ELSE 0 END) AS xyz, |
|||
SUM(CASE WHEN answer = '气郁质' THEN 1 ELSE 0 END) AS qyz, |
|||
SUM(CASE WHEN answer = '特禀质' THEN 1 ELSE 0 END) AS tlz |
|||
FROM |
|||
v_pms_treatment t |
|||
left join |
|||
v_pms_treatment_record r on t.id = r.treatment_id |
|||
WHERE |
|||
question_code = 'PG_TZBS_ZYTZ' |
|||
AND r.del_flag = 0 and t.del_flag = 0 |
|||
<if test="tenantId != null"> |
|||
AND t.tenant_id = #{tenantId} |
|||
</if> |
|||
</select> |
|||
|
|||
<select id="queryZllxtjStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$ZlTypeVo$Zllxtj"> |
|||
SELECT |
|||
SUM( CASE WHEN answer = '中西医结合治疗' THEN 1 ELSE 0 END ) AS zxyjh, |
|||
SUM( CASE WHEN answer = '单纯中医治疗' THEN 1 ELSE 0 END ) AS czy |
|||
FROM |
|||
v_pms_treatment t |
|||
LEFT JOIN v_pms_treatment_record r ON t.id = r.treatment_id |
|||
WHERE |
|||
question_code = 'ZLFA_ZLLX' |
|||
AND t.del_flag = 0 |
|||
AND t.del_flag = 0 |
|||
<if test="tenantId != null"> |
|||
AND tenant_id = #{tenantId} |
|||
</if> |
|||
</select> |
|||
|
|||
<select id="queryFpzStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$ZlTypeVo$BzfffbVo$Fpz"> |
|||
SELECT |
|||
COUNT( CASE WHEN question_code = 'ZLFA_XWXLGY' THEN 1 END ) AS xwxlg, |
|||
COUNT( CASE WHEN question_code = 'ZLFA_YDGY' THEN 1 END ) AS ydgy, |
|||
COUNT( CASE WHEN question_code = 'ZLFA_LCYYZL' THEN 1 END ) AS lcyyzl, |
|||
COUNT( CASE WHEN question_code = 'ZLFA_ZJ' THEN 1 END ) AS zjlf, |
|||
COUNT( CASE WHEN question_code = 'ZLFA_ZL' THEN 1 END ) AS ywzl |
|||
FROM |
|||
v_pms_treatment_record r |
|||
left join |
|||
v_pms_treatment t on r.treatment_id = t.id |
|||
WHERE |
|||
question_code IN ( 'ZLFA_XWXLGY', 'ZLFA_YDGY', 'ZLFA_LCYYZL', 'ZLFA_ZJ', 'ZLFA_ZL' ) |
|||
AND r.del_flag = 0 |
|||
</select> |
|||
|
|||
|
|||
<select id="queryZlxgStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$ZlTypeVo$ZlxgVo"> |
|||
sELECT |
|||
SUM(CASE WHEN answer = '治愈' THEN 1 ELSE 0 END) AS zy, |
|||
SUM(CASE WHEN answer = '显效' THEN 1 ELSE 0 END) AS xx, |
|||
SUM(CASE WHEN answer = '好转' THEN 1 ELSE 0 END) AS hz, |
|||
SUM(CASE WHEN answer = '无效' THEN 1 ELSE 0 END) AS wx |
|||
FROM |
|||
v_pms_treatment t |
|||
LEFT JOIN v_pms_treatment_record r ON t.id = r.treatment_id |
|||
WHERE |
|||
question_code = 'ZLFA_ZLXG' |
|||
AND t.del_flag = 0 |
|||
and r.del_flag = 0 |
|||
</select> |
|||
|
|||
<select id="queryZlfyStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$ZlTypeVo$ZlfyVo"> |
|||
SELECT |
|||
SUM(CASE WHEN answer < 300 THEN 1 ELSE 0 END) AS score1, |
|||
SUM(CASE WHEN answer BETWEEN 300 AND 900 THEN 1 ELSE 0 END) AS score2, |
|||
SUM(CASE WHEN answer BETWEEN 901 AND 2000 THEN 1 ELSE 0 END) AS score3, |
|||
SUM(CASE WHEN answer BETWEEN 2001 AND 5000 THEN 1 ELSE 0 END) AS score4, |
|||
SUM(CASE WHEN answer > 5000 THEN 1 ELSE 0 END) AS score5 |
|||
FROM |
|||
v_pms_treatment t |
|||
LEFT JOIN v_pms_treatment_record r ON t.id = r.treatment_id |
|||
WHERE |
|||
question_code = 'ZLFA_ZTFY' |
|||
AND t.del_flag = 0 |
|||
and r.del_flag = 0 |
|||
AND answer REGEXP '^[0-9]+$'; |
|||
</select> |
|||
|
|||
<select id="querySftjStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$SftjVo"> |
|||
SELECT |
|||
COUNT(*) AS num, |
|||
lost_reason AS reason |
|||
FROM |
|||
v_fms_followup_task |
|||
WHERE |
|||
status = 2 |
|||
AND del_flag = 0 |
|||
GROUP BY |
|||
lost_reason |
|||
ORDER BY |
|||
num DESC |
|||
</select> |
|||
|
|||
<select id="querySfStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$SffbVo$DlVo"> |
|||
SELECT |
|||
queue_id as queueId, |
|||
q.name as queueName, |
|||
COUNT(*) AS num, -- 总记录数 |
|||
SUM(CASE WHEN t.status = 0 AND followup_time IS NULL AND end_time > NOW() THEN 1 ELSE 0 END) AS dsf, -- 待随访 |
|||
SUM(CASE WHEN t.status = 0 AND followup_time IS NULL AND end_time BETWEEN DATE_SUB(NOW(), INTERVAL 2 DAY) AND DATE_ADD(NOW(), INTERVAL 2 DAY) THEN 1 ELSE 0 END) AS ljsf, -- 临近随访 |
|||
SUM(CASE WHEN (t.status = 0 AND followup_time IS NULL AND end_time < NOW()) OR (t.status = 1 AND followup_time > end_time) THEN 1 ELSE 0 END) AS cqsf, -- 超期随访 |
|||
SUM(CASE WHEN t.status = 1 AND followup_time <= end_time THEN 1 ELSE 0 END) AS zc -- 正常随访 |
|||
FROM |
|||
v_fms_followup_task t |
|||
left join fms_followup_queue q on t.queue_id = q.id |
|||
WHERE |
|||
t.del_flag = 0 |
|||
group by queue_id |
|||
</select> |
|||
|
|||
<select id="queryTtfbStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$TtfbVo"> |
|||
SELECT |
|||
MAX( CASE WHEN answer = '1' THEN 1 ELSE 0 END ) AS score1, |
|||
MAX( CASE WHEN answer = '2' THEN 1 ELSE 0 END ) AS score2, |
|||
MAX( CASE WHEN answer = '3' THEN 1 ELSE 0 END ) AS score3, |
|||
MAX( CASE WHEN answer = '4' THEN 1 ELSE 0 END ) AS score4, |
|||
MAX( CASE WHEN answer = '5' THEN 1 ELSE 0 END ) AS score5 |
|||
FROM |
|||
v_pms_treatment t |
|||
left join |
|||
v_pms_treatment_record r on t.id = r.treatment_id |
|||
WHERE |
|||
question_code = 'PG_TT_TAPS_DF' |
|||
AND t.del_flag = 0 and r.del_flag = 0 |
|||
</select> |
|||
|
|||
<select id="querySmfbStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$SmfbVo"> |
|||
SELECT COUNT(CASE WHEN answer BETWEEN 0 AND 4 THEN 1 END) AS score1, |
|||
COUNT(CASE WHEN answer BETWEEN 5 AND 9 THEN 1 END) AS score2, |
|||
COUNT(CASE WHEN answer BETWEEN 10 AND 14 THEN 1 END) AS score3, |
|||
COUNT(CASE WHEN answer BETWEEN 15 AND 19 THEN 1 END) AS score4, |
|||
COUNT(CASE WHEN answer BETWEEN 20 AND 27 THEN 1 END) AS score5 |
|||
FROM v_pms_treatment t |
|||
left join |
|||
v_pms_treatment_record r on t.id = r.treatment_id |
|||
WHERE question_code = 'PG_SM_PHQ_9_DF' |
|||
AND t.del_flag = 0 |
|||
and r.del_flag = 0 |
|||
</select> |
|||
|
|||
<select id="queryJlfbStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$JlfbVo"> |
|||
SELECT COUNT(CASE WHEN answer < 8 THEN 1 END) AS score1, |
|||
COUNT(CASE WHEN answer BETWEEN 8 AND 20 THEN 1 END) AS score2, |
|||
COUNT(CASE WHEN answer BETWEEN 21 AND 35 THEN 1 END) AS score3, |
|||
COUNT(CASE WHEN answer > 35 THEN 1 END) AS score4 |
|||
FROM v_pms_treatment t |
|||
left join |
|||
v_pms_treatment_record r on t.id = r.treatment_id |
|||
WHERE question_code = 'PG_JL_HAMD_24_DF' |
|||
AND t.del_flag = 0 |
|||
and r.del_flag = 0 |
|||
</select> |
|||
|
|||
<select id="querySmzStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$ZlTypeVo$BzfffbVo$Smz"> |
|||
SELECT |
|||
COUNT( CASE WHEN question_code = 'ZLFA_SHXG' THEN 1 END ) AS xwxlg, |
|||
COUNT( CASE WHEN question_code = 'ZLFA_XLTS' THEN 1 END ) AS ydgy, |
|||
COUNT( CASE WHEN question_code = 'ZLFA_ZJ' THEN 1 END ) AS lcyyzl, |
|||
COUNT( CASE WHEN question_code = 'ZLFA_YW' THEN 1 END ) AS zjlf |
|||
FROM |
|||
v_pms_treatment_record |
|||
WHERE |
|||
question_code IN ( 'ZLFA_XWXLGY', 'ZLFA_YDGY', 'ZLFA_LCYYZL', 'ZLFA_ZJ', 'ZLFA_ZL' ) |
|||
AND del_flag = 0 |
|||
</select> |
|||
</mapper> |
Loading…
Reference in new issue