b536c7481a048a27a0951600791e08edc30e7009..c427395d096da3df775a2fac9987bbcbd1f654fd
2026-09-15 sinake
案例趋势相关统计
c42739 对比 | 目录
2026-09-15 sinake
案例趋势相关统计
afe21c 对比 | 目录
2026-09-15 sinake
案例趋势相关统计
ba6547 对比 | 目录
已修改2个文件
已添加12个文件
755 ■■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceTotalsController.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceDonatebaseinfoReport.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceTotals.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/ServiceTotalsBood.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/ServiceTotalsOrgan.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/ServiceTotalsSex.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/ServiceTotalsTotal.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/ServiceTotalsTrend.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/trendList.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceTotalsMapper.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/iServiceTotalsService.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceDonatebaseinfoReportServiceImpl.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceTotalsServiceImp.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceTotalsMapper.xml 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceTotalsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
package com.ruoyi.web.controller.project;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.project.domain.ServiceTotals;
import com.ruoyi.project.domain.vo.*;
import com.ruoyi.project.service.iServiceTotalsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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 java.util.List;
@Api(description = "opo统计",tags = {"opo统计"})
@RestController
@RequestMapping("/opo/totals")
public class ServiceTotalsController extends BaseController
    {
        @Autowired
        private iServiceTotalsService service;
        @ApiOperation("案例趋势")
        @PostMapping("/caseTrend")
        public Result<List<ServiceTotalsTrend>> caseTrend(@RequestBody ServiceTotals totals)
        {
            List<ServiceTotalsTrend> list = service.caseTrend(totals);
            return Result.success(list);
        }
        @ApiOperation("案例趋势月份")
        @PostMapping("/caseTrendMoon")
        public Result<List<ServiceTotalsTrend>> caseTrendMoon(@RequestBody ServiceTotals totals)
        {
            List<ServiceTotalsTrend> list = service.caseTrendMoon(totals);
            return Result.success(list);
        }
        @ApiOperation("案例趋势区域")
        @PostMapping("/caseTrendArea")
        public Result<List<ServiceTotalsTrend>> caseTrendArea(@RequestBody ServiceTotals totals)
        {
            List<ServiceTotalsTrend> list = service.caseTrendArea(totals);
            return Result.success(list);
        }
        @ApiOperation("捐献器官统计明细")
        @PostMapping("/organ")
        public Result<List<ServiceTotalsOrgan>> organ(@RequestBody ServiceTotals totals)
        {
            List<ServiceTotalsOrgan> list = service.organ(totals);
            return Result.success(list);
        }
        @ApiOperation("器官获取/移植趋势")
        @PostMapping("/organMoon")
        public Result<List<ServiceTotalsOrgan>> organMoon(@RequestBody ServiceTotals totals)
        {
            List<ServiceTotalsOrgan> list = service.organMoon(totals);
            return Result.success(list);
        }
        @ApiOperation("器官类型分布")
        @PostMapping("/organType")
        public Result<List<ServiceTotalsOrgan>> organType(@RequestBody ServiceTotals totals)
        {
            List<ServiceTotalsOrgan> list = service.organType(totals);
            return Result.success(list);
        }
        @ApiOperation("捐献者年龄性别分布")
        @PostMapping("/caseSex")
        public Result<List<ServiceTotalsSex>> caseSex(@RequestBody ServiceTotals totals)
        {
            List<ServiceTotalsSex> list = service.caseSex(totals);
            return Result.success(list);
        }
        @ApiOperation("平均年龄")
        @PostMapping("/caseAvgAge")
        public Result caseAvgAge(@RequestBody ServiceTotals totals)
        {
            List<ServiceTotals> list = service.caseAvgAge(totals);
            return Result.success(list);
        }
        @ApiOperation("性别与血型分布")
        @PostMapping("/caseBloodType")
        public Result<List<ServiceTotalsBood>> caseBloodType(@RequestBody ServiceTotals totals)
        {
            List<ServiceTotalsBood> list = service.caseBloodType(totals);
            return Result.success(list);
        }
        @ApiOperation("总潜在总完成数统计")
        @PostMapping("/totals")
        public Result<List<ServiceTotalsTotal>> totals(@RequestBody ServiceTotals totals)
        {
            List<ServiceTotalsTotal> list = service.totals(totals);
            return Result.success(list);
        }
        @ApiOperation("案例明细列表")
        @PostMapping("/trendList")
        public Result<List<trendList>> trendList(@RequestBody ServiceTotals totals)
        {
            List<trendList> list = service.trendList(totals);
            return Result.success(list);
        }
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceDonatebaseinfoReport.java
@@ -463,5 +463,12 @@
    @ApiModelProperty("非管理员ID")
    private String notAdminId;
    /**
     * åœ°åŒº
     */
    @ApiModelProperty("地区")
    @Excel(name = "地区", readConverterExp = "地区")
    private String registerCountyName;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceTotals.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.ruoyi.project.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel("opo统计")
public class ServiceTotals {
    @ApiModelProperty("开始时间")
    private String startTime;
    @ApiModelProperty("结束时间")
    private String endTime;
    @ApiModelProperty("区域")
    private String area;
    @ApiModelProperty("性别")
    private String sex;
    @ApiModelProperty("血型")
    private String boodType;
    @ApiModelProperty("年龄段1:<17;2:18-49;3:50-69;4:>69")
    private String ageGroup;
    @ApiModelProperty("器管名称")
    private String organName;
    @ApiModelProperty("平均年龄")
    private Integer avgAge;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/ServiceTotalsBood.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.project.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("opo血型统计")
public class ServiceTotalsBood {
    @ApiModelProperty("血型数")
    private Integer boodTypeCount;
    @ApiModelProperty("血型")
    private String boodType;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/ServiceTotalsOrgan.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.project.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("opo器官统计")
public class ServiceTotalsOrgan {
    @ApiModelProperty("案例时间")
    private String donateTime;
    @ApiModelProperty("器管名称")
    private String organName;
    @ApiModelProperty("获取数")
    private Integer getCount;
    @ApiModelProperty("移植数")
    private Integer useCount;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/ServiceTotalsSex.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.project.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("opo性别统计")
public class ServiceTotalsSex {
    @ApiModelProperty("总数")
    private Integer totalCount;
    @ApiModelProperty("男性数")
    private Integer manCount;
    @ApiModelProperty("女性数")
    private Integer womanCount;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/ServiceTotalsTotal.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.project.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("opo总统计")
public class ServiceTotalsTotal {
    @ApiModelProperty("总潜在捐献案例")
    private Integer totalPotential;
    @ApiModelProperty("总完成捐献数")
    private Integer totalCompletion;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/ServiceTotalsTrend.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.project.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("opo统计")
public class ServiceTotalsTrend {
    @ApiModelProperty("区域")
    private String area;
    @ApiModelProperty("案例时间")
    private String donateTime;
    @ApiModelProperty("潜在捐献数")
    private Integer potentialCount;
    @ApiModelProperty("完成捐献数")
    private Integer completeCount;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/trendList.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.ruoyi.project.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("案例明细")
public class trendList {
    @ApiModelProperty("id")
    private Integer id;
    @ApiModelProperty("案例编号")
    private String caseNo;
    @ApiModelProperty("姓名")
    private String name;
    @ApiModelProperty("住院号")
    private String  InpatientNo;
    @ApiModelProperty("医院")
    private String  TreatmentHospitalName;
    @ApiModelProperty("工作流:1.供者维护   2 æçŒ®æ„æ„¿  3 åŒ»å­¦è¯„ä¼°  4 æ­»äº¡åˆ¤å®š 5 ä¼¦ç†å®¡æŸ¥  6 å™¨å®˜åˆ†é…  7 å™¨å®˜åˆ©ç”¨   99 æçŒ®å®Œæˆ")
    private Integer  workflow;
    @ApiModelProperty("案例时间")
    private String donatetime;
    @ApiModelProperty("死亡原因")
    private String DeathReason;
    @ApiModelProperty("器官")
    private String OrganName;
}
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceTotalsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
package com.ruoyi.project.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.project.domain.GiApi;
import com.ruoyi.project.domain.ServiceTasknum;
import com.ruoyi.project.domain.ServiceTotals;
import com.ruoyi.project.domain.vo.*;
import io.jsonwebtoken.impl.crypto.MacProvider;
import java.util.List;
import java.util.Map;
public interface ServiceTotalsMapper extends BaseMapper<ServiceTotals> {
    /**
     * æ¡ˆä¾‹è¶‹åŠ¿
     *
     */
    public List<ServiceTotalsTrend> caseTrend(ServiceTotals totals);
    /**
     * æ¡ˆä¾‹è¶‹åŠ¿æœˆä»½
     *
     */
    public List<ServiceTotalsTrend> caseTrendMoon(ServiceTotals totals);
    /**
     * æ¡ˆä¾‹è¶‹åŠ¿åŒºåŸŸ
     *
     */
    public List<ServiceTotalsTrend> caseTrendArea(ServiceTotals totals);
    /**
     * æçŒ®å™¨å®˜ç»Ÿè®¡æ˜Žç»†
     *
     */
    public List<ServiceTotalsOrgan> organ(ServiceTotals totals);
    /**
     * å™¨å®˜èŽ·å–/移植趋势
     *
     */
    public List<ServiceTotalsOrgan> organMoon(ServiceTotals totals);
    /**
     * å™¨å®˜ç±»åž‹åˆ†å¸ƒ
     *
     */
    public List<ServiceTotalsOrgan> organType(ServiceTotals totals);
    /**
     * æçŒ®è€…年龄性别分布
     *
     */
    public List<ServiceTotalsSex> caseSex(ServiceTotals totals);
    /**
     * å¹³å‡å¹´é¾„
     *
     */
    public List<ServiceTotals> caseAvgAge(ServiceTotals totals);
    /**
     * æ€§åˆ«ä¸Žè¡€åž‹åˆ†å¸ƒ
     *
     */
    public List<ServiceTotalsBood> caseBloodType(ServiceTotals totals);
    /**
     * æ€»æ½œåœ¨æ€»å®Œæˆæ•°ç»Ÿè®¡
     *
     */
    public List<ServiceTotalsTotal> totals(ServiceTotals totals);
    /**
     * æ¡ˆä¾‹æ˜Žç»†åˆ—表
     *
     */
    public List<trendList> trendList(ServiceTotals totals);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/iServiceTotalsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package com.ruoyi.project.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.project.domain.ServiceTotals;
import com.ruoyi.project.domain.vo.*;
import java.util.List;
public interface iServiceTotalsService extends IService<ServiceTotals>
{
    /**
     * æ¡ˆä¾‹è¶‹åŠ¿
     *
     */
    public List<ServiceTotalsTrend> caseTrend(ServiceTotals totals);
    /**
     * æ¡ˆä¾‹è¶‹åŠ¿æœˆä»½
     *
     */
    public List<ServiceTotalsTrend> caseTrendMoon(ServiceTotals totals);
    /**
     * æ¡ˆä¾‹è¶‹åŠ¿åŒºåŸŸ
     *
     */
    public List<ServiceTotalsTrend> caseTrendArea(ServiceTotals totals);
    /**
     * æçŒ®å™¨å®˜ç»Ÿè®¡æ˜Žç»†
     *
     */
    public List<ServiceTotalsOrgan> organ(ServiceTotals totals);
    /**
     * å™¨å®˜èŽ·å–/移植趋势
     *
     */
    public List<ServiceTotalsOrgan> organMoon(ServiceTotals totals);
    /**
     * å™¨å®˜ç±»åž‹åˆ†å¸ƒ
     *
     */
    public List<ServiceTotalsOrgan> organType(ServiceTotals totals);
    /**
     * æçŒ®è€…年龄性别分布
     *
     */
    public List<ServiceTotalsSex> caseSex(ServiceTotals totals);
    /**
     * å¹³å‡å¹´é¾„
     *
     */
    public List<ServiceTotals> caseAvgAge(ServiceTotals totals);
    /**
     * æ€§åˆ«ä¸Žè¡€åž‹åˆ†å¸ƒ
     *
     */
    public List<ServiceTotalsBood> caseBloodType(ServiceTotals totals);
    /**
     * æ€»æ½œåœ¨æ€»å®Œæˆæ•°ç»Ÿè®¡
     *
     */
    List<ServiceTotalsTotal> totals(ServiceTotals totals);
    /**
     * æ¡ˆä¾‹æ˜Žç»†åˆ—表
     *
     */
    List<trendList> trendList(ServiceTotals totals);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceDonatebaseinfoReportServiceImpl.java
@@ -143,6 +143,7 @@
        serviceDonatebaseinfo1.setRegistertown(serviceDonatebaseinfoReport.getRegistertownname());
        serviceDonatebaseinfo1.setReportHospital(serviceDonatebaseinfoReport.getToHospital());
        serviceDonatebaseinfo1.setFirstDept(serviceDonatebaseinfoReport.getDeptName());
        serviceDonatebaseinfo1.setRegistercountyname(serviceDonatebaseinfoReport.getRegisterCountyName());
        serviceDonatebaseinfo1.setCaseNo(null);
        //先通过caseNo查询是否存在
        ServiceDonatebaseinfo serviceDonatebaseinfo = new ServiceDonatebaseinfo();
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceTotalsServiceImp.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
package com.ruoyi.project.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.project.domain.ServiceTotals;
import com.ruoyi.project.domain.vo.*;
import com.ruoyi.project.mapper.ServiceTotalsMapper;
import com.ruoyi.project.service.iServiceTotalsService;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ServiceTotalsServiceImp extends ServiceImpl<ServiceTotalsMapper, ServiceTotals> implements iServiceTotalsService
{
    @Autowired
    ServiceTotalsMapper mapper;
    /**
     * æ¡ˆä¾‹è¶‹åŠ¿
     *
     */
    @Override
    public List<ServiceTotalsTrend> caseTrend(ServiceTotals totals) {
        if(ObjectUtils.isNotEmpty(totals.getAgeGroup())){
            switch (totals.getAgeGroup()) {
                case "1": totals.setAgeGroup(" and age<=17 "); break;
                case "2": totals.setAgeGroup(" and age>17 and age<=49 "); break;
                case "3": totals.setAgeGroup(" and age>49 and age<=69 "); break;
                case "4": totals.setAgeGroup(" and age>69 "); break;
                default: break;
            }
        }
        return mapper.caseTrend(totals);
    }
    /**
     * æ¡ˆä¾‹è¶‹åŠ¿æœˆä»½
     *
     */
    @Override
    public List<ServiceTotalsTrend> caseTrendMoon(ServiceTotals totals) {
        return mapper.caseTrendMoon(totals);
    }
    /**
     * æ¡ˆä¾‹è¶‹åŠ¿åŒºåŸŸ
     *
     */
    @Override
    public List<ServiceTotalsTrend> caseTrendArea(ServiceTotals totals) {
        return mapper.caseTrendArea(totals);
    }
    /**
     * æçŒ®å™¨å®˜ç»Ÿè®¡æ˜Žç»†
     *
     */
    @Override
    public List<ServiceTotalsOrgan> organ(ServiceTotals totals) {
        return mapper.organ(totals);
    }
    /**
     * å™¨å®˜èŽ·å–/移植趋势
     *
     */
    @Override
    public List<ServiceTotalsOrgan> organMoon(ServiceTotals totals) {
        return mapper.organMoon(totals);
    }
    /**
     * å™¨å®˜ç±»åž‹åˆ†å¸ƒ
     *
     */
    @Override
    public List<ServiceTotalsOrgan> organType(ServiceTotals totals) {
        return mapper.organType(totals);
    }
    /**
     * æçŒ®è€…年龄性别分布
     *
     */
    @Override
    public List<ServiceTotalsSex> caseSex(ServiceTotals totals) {
        return mapper.caseSex(totals);
    }
    /**
     * å¹³å‡å¹´é¾„
     *
     */
    @Override
    public List<ServiceTotals> caseAvgAge(ServiceTotals totals) {
        return mapper.caseAvgAge(totals);
    }
    /**
     * æ€§åˆ«ä¸Žè¡€åž‹åˆ†å¸ƒ
     *
     */
    @Override
    public List<ServiceTotalsBood> caseBloodType(ServiceTotals totals) {
        return mapper.caseBloodType(totals);
    }
    /**
     * æ€§åˆ«ä¸Žè¡€åž‹åˆ†å¸ƒ
     *
     */
    @Override
    public List<ServiceTotalsTotal> totals(ServiceTotals totals) {
        return mapper.totals(totals);
    }
    /**
     * æ€§åˆ«ä¸Žè¡€åž‹åˆ†å¸ƒ
     *
     */
    @Override
    public List<trendList> trendList(ServiceTotals totals) {
        return mapper.trendList(totals);
    }
}
ruoyi-project/src/main/resources/mapper/project/ServiceTotalsMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,179 @@
<?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.ruoyi.project.mapper.ServiceTotalsMapper">
    <select id="caseTrend" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="ServiceTotalsTrend">
        SELECT DATE_FORMAT(a.donatetime, '%Y-%m') donateTime, RegisterCountyName area,  COUNT(*) potentialCount,COUNT(IF(complete_state=3, true, null)) completeCount  FROM service_donatebaseinfo a
        LEFT JOIN  service_donatecompletioninfo  b ON b.InfoID=a.id where a.del_flag=0
        <where>
            <if test="area != null  and area != ''">and a.RegisterCountyName>=#{area}</if>
            <if test="startTime != null  and startTime != ''">and a.donatetime>=#{startTime}</if>
            <if test="endTime != null  and endTime != ''">and a.donatetime &lt;= #{endTime}</if>
        </where>
        GROUP BY RegisterCountyName, DATE_FORMAT(a.donatetime, '%Y-%m')
    </select>
    <select id="caseTrendMoon" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="ServiceTotalsTrend">
        SELECT DATE_FORMAT(a.donatetime, '%Y-%m') donateTime, COUNT(*) potentialCount,COUNT(IF(complete_state=3, true, null)) completeCount  FROM service_donatebaseinfo a
        LEFT JOIN  service_donatecompletioninfo  b ON b.InfoID=a.id where a.del_flag=0
        <where>
            <if test="area != null  and area != ''">and a.RegisterCountyName>=#{area}</if>
            <if test="startTime != null  and startTime != ''">and a.donatetime>=#{startTime}</if>
            <if test="endTime != null  and endTime != ''">and a.donatetime &lt;= #{endTime}</if>
        </where>
        GROUP BY DATE_FORMAT(a.donatetime, '%Y-%m')
    </select>
    <select id="caseTrendArea" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="ServiceTotalsTrend">
        SELECT RegisterCountyName area, COUNT(*) potentialCount,COUNT(IF(complete_state=3, true, null)) completeCount  FROM service_donatebaseinfo a
        LEFT JOIN  service_donatecompletioninfo  b ON b.InfoID=a.id where a.del_flag=0
        <where>
            <if test="area != null  and area != ''">and a.RegisterCountyName>=#{area}</if>
            <if test="startTime != null  and startTime != ''">and a.donatetime>=#{startTime}</if>
            <if test="endTime != null  and endTime != ''">and a.donatetime &lt;= #{endTime}</if>
        </where>
        GROUP BY RegisterCountyName
    </select>
    <select id="organ" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="ServiceTotalsOrgan">
        SELECT DATE_FORMAT(a.OrganGetTime, '%Y-%m') donateTime,a.OrganName organName, COUNT(*) getCount,
        COUNT(IF(transplantstate=3, true, NULL)) useCount   FROM  service_donationwitnessorgan a
        LEFT JOIN  service_donatecomporgan b ON a.InfoID=b.InfoID AND a.OrganName=b.OrganName  where a.del_flag=0
        <where>
            <if test="area != null  and area != ''">
                and a.InfoID in (select id FROM service_donatecompletioninfo where RegisterCountyName>=#{area} )
            </if>
            <if test="organName != null  and organName != ''">and a.OrganName>=#{organName}</if>
            <if test="startTime != null  and startTime != ''">and a.OrganGetTime>=#{startTime}</if>
            <if test="endTime != null  and endTime != ''">and a.OrganGetTime &lt;= #{endTime}</if>
        </where>
        GROUP BY DATE_FORMAT(a.OrganGetTime, '%Y-%m'),a.OrganName
    </select>
    <select id="organMoon" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="ServiceTotalsOrgan">
        SELECT DATE_FORMAT(a.OrganGetTime, '%Y-%m') donateTime, COUNT(*) getCount,
        COUNT(IF(transplantstate=3, true, NULL)) useCount   FROM  service_donationwitnessorgan a
        LEFT JOIN  service_donatecomporgan b ON a.InfoID=b.InfoID AND a.OrganName=b.OrganName  where a.del_flag=0
        <where>
            <if test="area != null  and area != ''">
                and a.InfoID in (select id FROM service_donatecompletioninfo where RegisterCountyName>=#{area} )
            </if>
            <if test="organName != null  and organName != ''">and a.OrganName>=#{organName}</if>
            <if test="startTime != null  and startTime != ''">and a.OrganGetTime>=#{startTime}</if>
            <if test="endTime != null  and endTime != ''">and a.OrganGetTime &lt;= #{endTime}</if>
        </where>
        GROUP BY DATE_FORMAT(a.OrganGetTime, '%Y-%m')
    </select>
    <select id="organType" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="ServiceTotalsOrgan">
        SELECT a.OrganName organName, COUNT(*) getCount,
        COUNT(IF(transplantstate=3, true, NULL)) useCount   FROM  service_donationwitnessorgan a
        LEFT JOIN  service_donatecomporgan b ON a.InfoID=b.InfoID AND a.OrganName=b.OrganName  where a.del_flag=0
        <where>
            <if test="area != null  and area != ''">
                and a.InfoID in (select id FROM service_donatecompletioninfo where RegisterCountyName>=#{area} )
            </if>
            <if test="organName != null  and organName != ''">and a.OrganName>=#{organName}</if>
            <if test="startTime != null  and startTime != ''">and a.OrganGetTime>=#{startTime}</if>
            <if test="endTime != null  and endTime != ''">and a.OrganGetTime &lt;= #{endTime}</if>
        </where>
        GROUP BY a.OrganName
    </select>
    <select id="caseSex" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="ServiceTotalsSex">
        SELECT COUNT(sex) totalCount, COUNT(IF(sex=1, true, NULL)) manCount ,COUNT(IF(sex=2, true, NULL)) womanCount
        FROM service_donatebaseinfo where del_flag=0
        <where>
            <if test="area != null  and area != ''">
                and  RegisterCountyName>=#{area}
            </if>
            <if test="boodType != null  and boodType != ''">
                and  BloodType>=#{boodType}
            </if>
            <if test="sex != null  and sex != ''">
                and  sex>=#{sex}
            </if>
            <if test="ageGroup != null  and ageGroup != ''">
                and  ${ageGroup}
            </if>
            <if test="startTime != null  and startTime != ''">and a.donatetime>=#{startTime}</if>
            <if test="endTime != null  and endTime != ''">and a.donatetime &lt;= #{endTime}</if>
        </where>
        GROUP BY  sex
    </select>
    <select id="caseAvgAge" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="ServiceTotals">
        SELECT AVG(age) avgAge FROM  service_donatebaseinfo where del_flag=0
        <where>
            <if test="area != null  and area != ''">
                and  RegisterCountyName>=#{area}
            </if>
            <if test="boodType != null  and boodType != ''">
                and  BloodType>=#{boodType}
            </if>
            <if test="sex != null  and sex != ''">
                and  sex>=#{sex}
            </if>
            <if test="ageGroup != null  and ageGroup != ''">
                and  ${ageGroup}
            </if>
            <if test="startTime != null  and startTime != ''">and a.donatetime>=#{startTime}</if>
            <if test="endTime != null  and endTime != ''">and a.donatetime &lt;= #{endTime}</if>
        </where>
    </select>
    <select id="caseBloodType" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="ServiceTotalsBood">
        SELECT COUNT(BloodType) boodTypeCount,BloodType bloodType
        FROM service_donatebaseinfo where del_flag=0
        <where>
            <if test="area != null  and area != ''">
                and  RegisterCountyName>=#{area}
            </if>
            <if test="boodType != null  and boodType != ''">
                and  BloodType>=#{boodType}
            </if>
            <if test="sex != null  and sex != ''">
                and  sex>=#{sex}
            </if>
            <if test="ageGroup != null  and ageGroup != ''">
                and  ${ageGroup}
            </if>
            <if test="startTime != null  and startTime != ''">and a.donatetime>=#{startTime}</if>
            <if test="endTime != null  and endTime != ''">and a.donatetime &lt;= #{endTime}</if>
        </where>
        GROUP BY  BloodType
    </select>
    <select id="totals" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="ServiceTotalsTotal">
        SELECT ( SELECT COUNT(*) FROM service_donatebaseinfo_report WHERE del_flag=0) totalPotential,
        (SELECT COUNT(*) FROM service_donatecompletioninfo WHERE del_flag=0) totalCompletion
    </select>
    <select id="trendList" parameterType="com.ruoyi.project.domain.ServiceTotals"
            resultType="trendList">
        SELECT a.id,a.case_no,a.NAME ,a.InpatientNo,a.TreatmentHospitalName,a.workflow,a.donatetime,d.DeathReason,
        (SELECT  GROUP_CONCAT(c.OrganName) FROM service_donateorgan c WHERE c.InfoId=a.id AND c.del_flag=0) OrganName
        FROM service_donatebaseinfo a
        LEFT JOIN service_deathinfo d ON d.InfoID=a.id
        where a.del_flag=0
        <where>
            <if test="area != null  and area != ''">and a.RegisterCountyName>=#{area}</if>
            <if test="startTime != null  and startTime != ''">and a.donatetime>=#{startTime}</if>
            <if test="endTime != null  and endTime != ''">and a.donatetime &lt;= #{endTime}</if>
        </where>
    </select>
</mapper>