liusheng
15 小时以前 1bd118f44a45b2da389de83608dc980a1ad7c170
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -16,6 +16,7 @@
import com.smartor.config.PhoneUtils;
import com.smartor.domain.DTO.ServiceSubtaskDetailDTO;
import com.smartor.domain.*;
import com.smartor.domain.VO.HeLibraryCountVO;
import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
@@ -31,6 +32,7 @@
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import java.math.BigDecimal;
import java.math.RoundingMode;
@@ -2461,11 +2463,13 @@
        ssRate.setStarttime(serviceSubtaskCountReq.getStartTime());
        ssRate.setEndtime(serviceSubtaskCountReq.getEndTime());
        ssRate.setVisitCount(serviceSubtaskCountReq.getVisitCount());
        ssRate.setServiceTypeList(serviceSubtaskCountReq.getServiceType());
        if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) {
            ssRate.setEndtime(new Date());
        }
        ssRate.setGroupKey(groupKey);
        ssRate.setGroupKeyList(groupKeyList);
        ssRate.setRateDay(serviceSubtaskCountReq.getRateDay());
        Map<String, Map<String, Object>> jsRates = new HashMap<>();
        if (!collect.isEmpty()) {
            jsRates = serviceSubtaskMapper.selectTimelyRateBatch(ssRate);
@@ -2685,6 +2689,8 @@
            serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname());
            //出院人次
            serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
            //无需随访详情
            List<ServiceSubtask> nonFollowUpInfo = new ArrayList<>();
            //记录过滤患者详情
            List<ServiceSubtask> filterServiceSubtasks = new ArrayList<>();
            //记录首次应随访详情
@@ -2721,6 +2727,7 @@
                //无需随访人次
                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                    serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
                    nonFollowUpInfo.add(serviceSubtask);
                    if (serviceSubtask.getTaskSituation() != null && serviceSubtask.getTaskSituation() == 6) {
                        serviceSubtaskStatistic.setFilterCount(serviceSubtaskStatistic.getFilterCount() + 1L);
                        filterServiceSubtasks.add(serviceSubtask);
@@ -2899,6 +2906,8 @@
                }
            }
            serviceSubtaskStatistic.setFilterCountList(filterServiceSubtasks);
            //记录无需随访详情
            serviceSubtaskStatistic.setNonFollowUpInfo(nonFollowUpInfo);
            //记录首次应随访详情
            serviceSubtaskStatistic.setNeedFollowUpInfo(needFollowUpInfo);
            //记录首次待随访详情
@@ -2951,6 +2960,8 @@
        serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname());
        //出院人次
        serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
        //无需随访详情
        List<ServiceSubtask> nonFollowUpInfo = new ArrayList<>();
        //记录过滤患者详情
        List<ServiceSubtask> filterServiceSubtasks = new ArrayList<>();
        //记录首次应随访详情
@@ -2972,6 +2983,7 @@
            //无需随访人次
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
                nonFollowUpInfo.add(serviceSubtask);
                if (serviceSubtask.getTaskSituation() != null && serviceSubtask.getTaskSituation() == 6) {
                    serviceSubtaskStatistic.setFilterCount(serviceSubtaskStatistic.getFilterCount() + 1L);
                    filterServiceSubtasks.add(serviceSubtask);
@@ -3077,6 +3089,8 @@
            }
        }
        serviceSubtaskStatistic.setFilterCountList(filterServiceSubtasks);
        //记录无需随访详情
        serviceSubtaskStatistic.setNonFollowUpInfo(nonFollowUpInfo);
        //记录首次应随访详情
        serviceSubtaskStatistic.setNeedFollowUpInfo(needFollowUpInfo);
        //记录首次待随访详情
@@ -3113,6 +3127,8 @@
        serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname());
        //出院人次
        serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
        //无需随访详情
        List<ServiceSubtask> nonFollowUpInfo = new ArrayList<>();
        //记录过滤患者详情
        List<ServiceSubtask> filterServiceSubtasks = new ArrayList<>();
@@ -3135,6 +3151,7 @@
            //无需随访人次
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
                nonFollowUpInfo.add(serviceSubtask);
                if (serviceSubtask.getTaskSituation() != null && serviceSubtask.getTaskSituation() == 6) {
                    serviceSubtaskStatistic.setFilterCount(serviceSubtaskStatistic.getFilterCount() + 1L);
                    filterServiceSubtasks.add(serviceSubtask);
@@ -3240,6 +3257,8 @@
            }
        }
        serviceSubtaskStatistic.setFilterCountList(filterServiceSubtasks);
        //记录无需随访详情
        serviceSubtaskStatistic.setNonFollowUpInfo(nonFollowUpInfo);
        //记录再次应随访详情
        serviceSubtaskStatistic.setNeedFollowUpAgainInfo(needFollowUpAgainInfo);
        //记录再次待随访详情
@@ -3572,7 +3591,8 @@
        map.put("content", sendMagParam.getContent());
        String result = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(map));
        redisCache.setCacheObject(subTaskId + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES);
        if (StringUtils.isNotEmpty(serviceSubtask.getRemark())) serviceSubtask.setRemark("电话发送拒接,短信补偿发送成功");
        if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
            serviceSubtask.setRemark("电话发送拒接,短信补偿发送成功");
        else serviceSubtask.setRemark("短信补偿发送成功");
        serviceSubtask.setSendstate(3L);
        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
@@ -4155,6 +4175,38 @@
        }
    }
    @Override
    public Map<String, Object> getHeLibraryCount(@RequestBody HeLibraryCountVO heLibraryCountVO) {
        if (ObjectUtils.isEmpty(heLibraryCountVO)) {
            return new HashMap<>();
        }
        // 1. 查询分组统计(发送总量、发送成功量、已读量)
        List<Map<String, Object>> groupStats = serviceSubtaskMapper.getHeLibraryCount(heLibraryCountVO);
        // 2. 计算各组的发送成功率和已读率
        List<Map<String, Object>> result = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(groupStats)) {
            for (Map<String, Object> row : groupStats) {
                long totalCount = row.get("totalCount") != null ? ((Number) row.get("totalCount")).longValue() : 0L;
                long sendSuccessCount = row.get("sendSuccessCount") != null ? ((Number) row.get("sendSuccessCount")).longValue() : 0L;
                long readCount = row.get("readCount") != null ? ((Number) row.get("readCount")).longValue() : 0L;
                // 发送成功率
                double sendSuccessRate = totalCount > 0 ? (double) sendSuccessCount / totalCount : 0.0;
                // 已读率(基于发送成功的数量计算)
                double readRate = sendSuccessCount > 0 ? (double) readCount / sendSuccessCount : 0.0;
                row.put("sendSuccessRate", sendSuccessRate);
                row.put("readRate", readRate);
                result.add(row);
            }
        }
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("list", result);
        resultMap.put("total", result.size());
        return resultMap;
    }
    private Boolean saveServiceSubtaskDetail(ServiceSubtask serviceSubtask) {
        Boolean result = true;
        //3.4 如果3.1或3.2为true的话,根据type判断什么类型