陈昶聿
5 天以前 11657a03ac9a0eb7e292663cf8ad03545af52c2c
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailController.java
@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.smartor;
import com.ruoyi.common.annotation.AddOrgId;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
@@ -9,10 +10,12 @@
import com.ruoyi.common.utils.DtoConversionUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysConfigService;
import com.smartor.domain.*;
import com.smartor.domain.DTO.QuestionResultDTO;
import com.smartor.domain.DTO.ServiceSubtaskDetailDTO;
import com.smartor.domain.VO.QuestionResultVO;
import com.smartor.domain.*;
import com.smartor.domain.VO.MydTrendReqVO;
import com.smartor.domain.VO.MzMydScoreRankVO;
import com.smartor.domain.VO.QuestionCountKsOrBqVO;
import com.smartor.domain.VO.SltdMydTotalVO;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.service.IServiceSubtaskDetailService;
import com.smartor.service.IServiceSubtaskService;
@@ -22,6 +25,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -203,35 +207,84 @@
     * 查询患者随访信息
     */
    @ApiOperation("省立同德满意度数据统计")
    @PostMapping("/sltaMydTotalByScore")
    public Map<String, Object> sltaMydTotal(@RequestBody QuestionResultVO questionResultVO) {
    @PostMapping("/sltdMydTotalByScore")
    public Map<String, Object> sltdMydTotalByScore(@RequestBody SltdMydTotalVO sltdMydTotalVO) {
        List<ServiceSubtaskRes> serviceSubtaskResList = null;
        ServiceSubtaskEntity serviceSubtaskEntity = new ServiceSubtaskEntity();
        serviceSubtaskEntity.setServiceType(questionResultVO.getServiceType());
        serviceSubtaskEntity.setEndOutHospTime(questionResultVO.getEndOutHospTime());
        serviceSubtaskEntity.setStartOutHospTime(questionResultVO.getStartOutHospTime());
        serviceSubtaskEntity.setDeptOrDistrict(questionResultVO.getDeptOrDistrict());
        serviceSubtaskEntity.setLeavehospitaldistrictcodes(questionResultVO.getLeavehospitaldistrictcodes());
        if (serviceSubtaskEntity != null) {
            List<ServiceSubtask> serviceSubtasks = serviceSubtaskService.getServiceSubtasks(serviceSubtaskEntity);
            serviceSubtaskResList = DtoConversionUtils.sourceToTarget(serviceSubtasks, ServiceSubtaskRes.class);
        if (CollectionUtils.isNotEmpty(sltdMydTotalVO.getServiceTypeList())) {
            //serviceType可能会出现多个,不想多写方法了,一个一个查询吧
            for (String st : sltdMydTotalVO.getServiceTypeList()) {
                ServiceSubtaskEntity serviceSubtaskEntity = new ServiceSubtaskEntity();
                serviceSubtaskEntity.setServiceType(st);
                serviceSubtaskEntity.setEndOutHospTime(sltdMydTotalVO.getEndOutHospTime());
                serviceSubtaskEntity.setStartOutHospTime(sltdMydTotalVO.getStartOutHospTime());
                serviceSubtaskEntity.setDeptOrDistrict(sltdMydTotalVO.getDeptOrDistrict());
                serviceSubtaskEntity.setLeavehospitaldistrictcodes(sltdMydTotalVO.getLeavehospitaldistrictcodes());
                serviceSubtaskEntity.setLeaveldeptcodes(sltdMydTotalVO.getLeaveldeptcodes());
                if (serviceSubtaskEntity != null) {
                    List<ServiceSubtask> serviceSubtasks = serviceSubtaskService.getServiceSubtasks(serviceSubtaskEntity);
                    List<ServiceSubtaskRes> serviceSubtaskRes = DtoConversionUtils.sourceToTarget(serviceSubtasks, ServiceSubtaskRes.class);
                    if (CollectionUtils.isNotEmpty(serviceSubtaskResList)) {
                        serviceSubtaskResList.addAll(serviceSubtaskRes);
                    } else {
                        if (CollectionUtils.isEmpty(serviceSubtaskResList)) serviceSubtaskResList = serviceSubtaskRes;
                    }
                }
            }
        }
        List<ServiceSubtaskDetailRatioExport> detailList = serviceSubtaskService.getDetailRatio(questionResultVO, serviceSubtaskResList);
        // 按 questiontext 分组后转换为 QuestionResultVO
        List<QuestionResultDTO> result = new ArrayList<>();
        if (!detailList.isEmpty()) {
            Map<String, List<ServiceSubtaskDetailRatioExport>> groupedMap = detailList.stream()
                    .collect(Collectors.groupingBy(ServiceSubtaskDetailRatioExport::getQuestiontext));
        if (CollectionUtils.isNotEmpty(serviceSubtaskResList)) {
            List<ServiceSubtaskDetailRatioExport> detailList = serviceSubtaskService.getDetailRatio(sltdMydTotalVO, serviceSubtaskResList);
            groupedMap.forEach((questionText, exportList) -> {
                QuestionResultDTO questionResultDTO = new QuestionResultDTO();
                questionResultDTO.setQeustionText(questionText);
                questionResultDTO.setSubtaskDetailRatioExportList(exportList);
                result.add(questionResultDTO);
            });
            if (CollectionUtils.isNotEmpty(detailList)) {
                Map<String, List<ServiceSubtaskDetailRatioExport>> groupedMap = detailList.stream().collect(Collectors.groupingBy(ServiceSubtaskDetailRatioExport::getQuestiontext));
                groupedMap.forEach((questionText, exportList) -> {
                    QuestionResultDTO questionResultDTO = new QuestionResultDTO();
                    questionResultDTO.setQeustionText(questionText);
                    questionResultDTO.setSubtaskDetailRatioExportList(exportList);
                    BigDecimal allCount = new BigDecimal("0");
                    BigDecimal allScore = new BigDecimal("0.00");
                    for (ServiceSubtaskDetailRatioExport ssdre : exportList) {
                        if (StringUtils.isNotEmpty(ssdre.getCount()))
                            allCount.add(BigDecimal.valueOf(Long.valueOf(ssdre.getCount())));
                        allScore.add(BigDecimal.valueOf(Double.valueOf(ssdre.getScore())));
                    }
                    if (allCount.compareTo(BigDecimal.ZERO) > 0)
                        questionResultDTO.setAvgScore(allScore.divide(allCount, 2).toString());
                    result.add(questionResultDTO);
                });
            }
        }
        return success(result);
    }
    @ApiOperation("省立同德满意度数据统计通过科室或病区")
    @PostMapping("/statQuestionOptionByKsOrBq")
    public Map<String, Object> statQuestionOptionByKsOrBq(@RequestBody QuestionCountKsOrBqVO questionResultVO) {
        return success(serviceSubtaskService.statQuestionOptionByKsOrBq(questionResultVO));
    }
    @ApiOperation("省立同德患者满意度趋势")
    @PostMapping("/mydTrend")
    public Map<String, Object> mydTrend(@RequestBody MydTrendReqVO mydTrendReqVO) {
        return success(serviceSubtaskService.mydTrend(mydTrendReqVO));
    }
    @ApiOperation("省立同德患者满意度维护")
    @PostMapping("/sltdMydTotalByDimension")
    public Map<String, Object> sltdMydTotalByDimension(@RequestBody MydTrendReqVO mydTrendReqVO) {
        return success(serviceSubtaskService.sltdMydTotalByDimension(mydTrendReqVO));
    }
    @ApiOperation("门诊满意度综合得分排名(按科室或病区)")
    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
    @PostMapping("/mzMydScoreRank")
    public Map<String, Object> mzMydScoreRank(@RequestBody MzMydScoreRankVO mzMydScoreRankVO) {
        return success(serviceSubtaskService.mzMydScoreRank(mzMydScoreRankVO));
    }
}