陈昶聿
3 天以前 9fc52256df321e14a179811eda954491f5b71fea
【市一】问题统计接口调整
已修改4个文件
164 ■■■■■ 文件已修改
smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateScriptMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/SvyTaskTemplateScriptMapper.xml 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateScriptMapper.java
@@ -1,5 +1,7 @@
package com.smartor.mapper;
import com.smartor.domain.ServiceSubtaskCountReq;
import com.smartor.domain.ServiceSubtaskScriptCount;
import com.smartor.domain.SvyTaskTemplateScript;
import org.apache.ibatis.annotations.Mapper;
@@ -61,4 +63,12 @@
     * @return 结果
     */
    public int deleteSvyTaskTemplateScriptByIDs(Long[] IDs);
    /**
     * 获取问题回答所有选项
     *
     * @return 结果
     */
    public List<ServiceSubtaskScriptCount> getSvyTemplateScriptListForSubtaskCount(ServiceSubtaskCountReq serviceSubtaskCountReq);
}
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -72,6 +72,9 @@
    private IvrTaskVisitResultMapper serviceTaskVisitResultMapper;
    @Autowired
    private SvyTaskTemplateScriptMapper svyTaskTemplateScriptMapper;
    @Autowired
    private IServiceTaskdeptService serviceTaskdeptService;
    @Autowired
@@ -2701,10 +2704,18 @@
            //满意度
            List<ServiceSubtaskCount> joyCountTemp = joySubCount.stream().filter(r -> r.getSubTaskId().equals(serviceSubtask.getId())).collect(Collectors.toList());
            if (joyCountTemp != null && joyCountTemp.size() > 0) {
                if (ObjectUtils.isNotEmpty(joyCountTemp.get(0).getJoyCount()))
                    serviceSubtaskStatistic.setJoyCount(serviceSubtaskStatistic.getJoyCount() + joyCountTemp.get(0).getJoyCount());
                if (ObjectUtils.isNotEmpty(joyCountTemp.get(0).getJoyAllCount()))
                    serviceSubtaskStatistic.setJoyAllCount(serviceSubtaskStatistic.getJoyAllCount() + joyCountTemp.get(0).getJoyAllCount());
                Integer joyCount = joyCountTemp.get(0).getJoyCount();
                Integer joyAllCount = joyCountTemp.get(0).getJoyAllCount();
                if (ObjectUtils.isNotEmpty(joyCount)){
                    if(joyCount>0){
                        serviceSubtaskStatistic.setJoyCount(serviceSubtaskStatistic.getJoyCount() + joyCount);
                    }
                }
                if (ObjectUtils.isNotEmpty(joyAllCount)){
                    if(joyAllCount>0){
                        serviceSubtaskStatistic.setJoyAllCount(serviceSubtaskStatistic.getJoyAllCount() + joyAllCount);
                    }
                }
            }
            //无需随访人次
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
@@ -2949,7 +2960,7 @@
     * @return
     */
    @Override
    @Cacheable(value = "sfStatisticsJoy", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#serviceSubtaskCountReq.toString().getBytes())", unless = "#result == null or #result.isEmpty()")
//    @Cacheable(value = "sfStatisticsJoy", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#serviceSubtaskCountReq.toString().getBytes())", unless = "#result == null or #result.isEmpty()")
    public List<ServiceSubtaskStatistic> getSfStatisticsScript(ServiceSubtaskCountReq serviceSubtaskCountReq) {
        log.error("getSfStatisticsScript的入参为:{}", serviceSubtaskCountReq);
        List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
@@ -3015,18 +3026,19 @@
                BigDecimal mydtblsum = new BigDecimal(0);
                //完成比例
                Double wcbl = null;
                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyAllCount())){
                    mydtblsum = new BigDecimal(serviceSubtaskStatistic.getJoyAllCount());
                }
                //满意度填报量
                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyCount())){
                    mydtmzlsum = new BigDecimal(serviceSubtaskStatistic.getJoyCount());
                    mydtblsum = new BigDecimal(serviceSubtaskStatistic.getJoyCount());
                }
                //满意度题目总量
                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyAllCount())){
                    mydtmzlsum = new BigDecimal(serviceSubtaskStatistic.getJoyAllCount());
                }
                if(mydtmzlsum.intValue() != 0){
                    wcbl = mydtblsum.divide(mydtmzlsum, 2, RoundingMode.HALF_UP).doubleValue();
                }
                serviceSubtaskStatistic.setJoyAllCount(mydtmzlsum.intValue());
                serviceSubtaskStatistic.setJoyCount(mydtblsum.intValue());
                serviceSubtaskStatistic.setJoyAllCount(mydtmzlsum.intValue());
                serviceSubtaskStatistic.setJoyTotal(wcbl);
            }
        }
@@ -3039,6 +3051,43 @@
        Map<String, ServiceSubtaskScriptCount> result = new HashMap<>();
        List<ServiceSubtaskScriptCount> allCounts = new ArrayList<>();
        List<ServiceSubtaskScriptCount> allItemCounts = new ArrayList<>();
        List<ServiceSubtaskScriptCount> emptyCounts = svyTaskTemplateScriptMapper.getSvyTemplateScriptListForSubtaskCount(serviceSubtaskCountReq);
        if(ObjectUtils.isNotEmpty(emptyCounts)){
            Map<Long, List<ServiceSubtaskScriptCount>> emptyCountMap = emptyCounts.stream().collect(Collectors.groupingBy(ServiceSubtaskScriptCount::getScriptid));
            for (Map.Entry<Long, List<ServiceSubtaskScriptCount>> entry : emptyCountMap.entrySet()) {
                Long eScriptId = entry.getKey();
                if(ObjectUtils.isNotEmpty(eScriptId)){
                    ServiceSubtaskScriptCount eCount = new ServiceSubtaskScriptCount();
                    List<ServiceSubtaskScriptCount> emptyCountList = entry.getValue();
                    Map<String, ServiceSubtaskScriptCount> eMap = new HashMap<>();
                    if(ObjectUtils.isNotEmpty(emptyCountList)){
                        eCount.setScriptid(eScriptId);
                        eCount.setScriptType(emptyCountList.get(0).getScriptType());
                        eCount.setScriptContent(emptyCountList.get(0).getScriptContent());
                        eCount.setTemplateid(emptyCountList.get(0).getTemplateid());
                        eCount.setChosenQuantity(0);
                        eCount.setChosenPercentage("0.0");
                        eCount.setCompletedQuantity(0);
                        eCount.setCompletedPercentage("0.0");
                        eCount.setAllQuantity(0);
                        //填空空数据
                        for(ServiceSubtaskScriptCount empCount: emptyCountList){
                            empCount.setChosenQuantity(0);
                            empCount.setChosenPercentage("0.0");
                            empCount.setCompletedQuantity(0);
                            empCount.setCompletedPercentage("0.0");
                            empCount.setAllQuantity(0);
                            eMap.put(empCount.getOptionText(),eCount);
                        }
                    }
                    List<ServiceSubtaskScriptCount> empCountList = new ArrayList<>(eMap.values());
                    eCount.setDetails(empCountList);
                    result.put(eScriptId.toString(),eCount);
                }
            }
        }
        String type = serviceSubtaskCountReq.getType();
        if(ObjectUtils.isEmpty(type)){
            //查询语音统计明细
@@ -3114,6 +3163,7 @@
                    }
                }
            });
            List<ServiceSubtaskScriptCount> itemCounts = new ArrayList<>(itemCountMap.values());
            count.setDetails(itemCounts);
            result.put(count.getScriptid().toString(),count);
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -1330,12 +1330,18 @@
    <select id="getSfStatisticsCategory" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
            resultMap="ServiceSubtaskResult2">
        SELECT a.sub_id as subTaskId,
        SELECT
        <if test="configValue != null and configValue != ''">
            SUM(CASE WHEN a.categoryid IN(${configValue})
            AND IFNULL(a.matchedtext,a.asrtext) IS NOT NULL
            AND IFNULL(a.matchedtext,a.asrtext) != ''
            THEN 1 ELSE 0 END) AS joyCount,
        </if>
        <if test="configValue != null and configValue != ''">
            SUM(CASE WHEN a.categoryid IN(${configValue})
            THEN 1 ELSE 0 END) AS joyAllCount,
        </if>
        COUNT(sub_id) joyCount
        a.sub_id as subTaskId
        FROM service_subtask_detail a
        INNER JOIN service_subtask t ON a.sub_id = t.id
        where 1=1
smartor/src/main/resources/mapper/smartor/SvyTaskTemplateScriptMapper.xml
@@ -48,6 +48,21 @@
    </resultMap>
    <resultMap type="com.smartor.domain.ServiceSubtaskScriptCount" id="ServiceSubtaskScriptCountResult">
        <result property="scriptid" column="scriptid"/>
        <result property="templateid" column="templateid"/>
        <result property="scriptType" column="script_type"/>
        <result property="scriptContent" column="script_content"/>
        <result property="subtaskType" column="subtask_type"/>
        <result property="completedQuantity" column="completed_quantity"/>
        <result property="allQuantity" column="all_quantity"/>
        <result property="completedPercentage" column="completed_percentage"/>
        <result property="optionText" column="option_text"/>
        <result property="chosenQuantity" column="chosen_quantity"/>
        <result property="chosenPercentage" column="chosen_percentage"/>
        <result property="options" column="options"/>
    </resultMap>
    <sql id="selectSvyTaskTemplateScriptVo">
        select id,
               sort,
@@ -264,4 +279,61 @@
            #{id}
        </foreach>
    </delete>
    <select id="getSvyTemplateScriptListForSubtaskCount" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
            resultMap="ServiceSubtaskScriptCountResult">
        SELECT
        ss.templateid,
        ssd.scriptid,
        task_script.script_type,
        task_script.script_content,
        task_targetoption.optioncontent AS option_text
        FROM
        service_subtask_detail ssd
        INNER JOIN service_subtask ss ON ssd.sub_id = ss.id
        INNER JOIN svy_task_template_script task_script
        ON task_script.id = ssd.scriptid
        INNER JOIN svy_task_template_targetoption task_targetoption
        ON task_targetoption.scriptid = task_script.id
        where 1=1
        and ss.del_flag=0
        <if test="orgid != null and orgid != ''">
            and ss.orgid = #{orgid}
        </if>
        <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
            AND ss.leavehospitaldistrictcode IN
            <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
                     close=")">
                #{leavehospitaldistrictcode}
            </foreach>
        </if>
        <if test="deptcodes != null and deptcodes.size() > 0">
            AND ss.deptcode IN
            <foreach collection="deptcodes" item="deptcode" open="(" separator=","
                     close=")">
                #{deptcode}
            </foreach>
        </if>
        <if test="serviceType != null and serviceType.size() > 0">
            AND ss.service_type IN
            <foreach collection="serviceType" item="serviceType" open="(" separator=","
                     close=")">
                #{serviceType}
            </foreach>
        </if>
        <if test="startTime != null and endTime!=null">
            AND date_format(ss.visit_time,'%y%m%d') >= date_format(#{startTime},'%y%m%d')
            AND date_format(ss.visit_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
        </if>
        <!-- 目前只统计语音和问卷 -->
        <if test="type != null">
            and ss.type = #{type}
        </if>
        <if test="configValue != null and configValue != ''">
            AND ssd.categoryid IN (${configValue})
        </if>
        group by ss.templateid, ssd.scriptid,
                 task_script.script_type, task_script.script_content,
                 task_targetoption.optioncontent
    </select>
</mapper>