package com.smartor.service.impl; import com.ruoyi.common.utils.DateUtils; import com.smartor.domain.*; import com.smartor.mapper.ServiceSubtaskMapper; import com.smartor.mapper.SvyLibTemplateScriptMapper; import com.smartor.service.ISvyLibTemplateScriptService; import com.smartor.service.ISvyLibTemplateTargetoptionService; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static net.sf.jsqlparser.parser.feature.Feature.values; /** * 模板问卷题目Service业务层处理 * * @author ruoyi * @date 2024-06-18 */ @Service public class SvyLibTemplateScriptServiceImpl implements ISvyLibTemplateScriptService { ISvyLibTemplateTargetoptionService svyLibTemplateTargetoptionService; @Autowired private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper; @Autowired private ServiceSubtaskMapper serviceSubtaskMapper; /** * 查询模板问卷题目 * * @param topicid 模板问卷题目主键 * @return 模板问卷题目 */ @Override public SvyLibTemplateScript selectSvyLibTemplateScriptByTopicid(Long topicid) { return svyLibTemplateScriptMapper.selectSvyLibTemplateScriptByTopicid(topicid); } /** * 查询模板问卷题目列表 * * @param svyLibTemplateScript 模板问卷题目 * @return 模板问卷题目 */ @Override public List selectSvyLibTemplateScriptList(SvyLibTemplateScript svyLibTemplateScript) { return svyLibTemplateScriptMapper.selectSvyLibTemplateScriptList(svyLibTemplateScript); } /** * 新增模板问卷题目 * * @param svyLibTemplateScript 模板问卷题目 * @return 结果 */ @Override public int insertSvyLibTemplateScript(SvyLibTemplateScript svyLibTemplateScript) { svyLibTemplateScript.setCreateTime(DateUtils.getNowDate()); return svyLibTemplateScriptMapper.insertSvyLibTemplateScript(svyLibTemplateScript); } /** * 修改模板问卷题目 * * @param svyLibTemplateScript 模板问卷题目 * @return 结果 */ @Override public int updateSvyLibTemplateScript(SvyLibTemplateScript svyLibTemplateScript) { svyLibTemplateScript.setUpdateTime(DateUtils.getNowDate()); return svyLibTemplateScriptMapper.updateSvyLibTemplateScript(svyLibTemplateScript); } /** * 批量删除模板问卷题目 * * @param topicids 需要删除的模板问卷题目主键 * @return 结果 */ @Override public int deleteSvyLibTemplateScriptByTopicids(Long[] topicids) { return svyLibTemplateScriptMapper.deleteSvyLibTemplateScriptByTopicids(topicids); } /** * 删除模板问卷题目信息 * * @param topicid 模板问卷题目主键 * @return 结果 */ @Override public int deleteSvyLibTemplateScriptByTopicid(Long topicid) { return svyLibTemplateScriptMapper.deleteSvyLibTemplateScriptByTopicid(topicid); } public Map countPatByScript(ServiceSubtaskCountReq serviceSubtaskCountReq) { Map result = new HashMap<>(); serviceSubtaskCountReq.setType("2"); List counts = serviceSubtaskMapper.getSfStatisticsScriptDetails(serviceSubtaskCountReq); List itemCounts = serviceSubtaskMapper.getSfStatisticsScriptItemDetails(serviceSubtaskCountReq); if(ObjectUtils.isNotEmpty(counts)){ for(ServiceSubtaskScriptCount count:counts){ Long scriptid = count.getScriptid(); //排除scriptid为空的情况 if(ObjectUtils.isEmpty(scriptid)){ continue; } Map itemCountMap = new HashMap<>(); //问卷加上空白选项 if(ObjectUtils.isNotEmpty(count.getTemplateid()) && ObjectUtils.isNotEmpty(count.getSubtaskType()) && count.getSubtaskType().equals("2")){ SvyLibTemplateScript script = selectSvyLibTemplateScriptByTopicid(scriptid); if(ObjectUtils.isNotEmpty(script)){ SvyLibTemplateTargetoption targetoptionVo = new SvyLibTemplateTargetoption(); targetoptionVo.setOrgid(script.getOrgid()); targetoptionVo.setScriptid(script.getScriptid()); List targetoptions = svyLibTemplateTargetoptionService.selectSvyLibTemplateTargetoptionList(targetoptionVo); if(ObjectUtils.isNotEmpty(targetoptions)){ //填入空白信息 targetoptions.forEach(targetoption ->{ ServiceSubtaskScriptCount emptyCount = new ServiceSubtaskScriptCount(); emptyCount.setScriptid(count.getScriptid()); emptyCount.setScriptContent(count.getScriptContent()); emptyCount.setScriptType(count.getScriptType()); emptyCount.setSubtaskType(count.getSubtaskType()); emptyCount.setCompletedQuantity(count.getCompletedQuantity()); emptyCount.setAllQuantity(count.getAllQuantity()); emptyCount.setCompletedPercentage(count.getCompletedPercentage()); emptyCount.setTemplateid(count.getTemplateid()); emptyCount.setChosenQuantity(0); emptyCount.setChosenPercentage("0.0"); emptyCount.setOptionText(targetoption.getOptioncontent()); itemCountMap.put(targetoption.getOptioncontent(),emptyCount); }); } } } itemCounts.forEach(itemCount ->{ if(ObjectUtils.isNotEmpty(count.getScriptid()) && ObjectUtils.isNotEmpty(itemCount.getScriptid())){ if(count.getScriptid().equals(itemCount.getScriptid())){ //放入统计信息 itemCount.setScriptContent(count.getScriptContent()); itemCount.setScriptType(count.getScriptType()); itemCount.setSubtaskType(count.getSubtaskType()); itemCount.setCompletedQuantity(count.getCompletedQuantity()); itemCount.setAllQuantity(count.getAllQuantity()); itemCount.setCompletedPercentage(count.getCompletedPercentage()); itemCount.setTemplateid(count.getTemplateid()); //计算选择比例 int chosenQuantity = ObjectUtils.isNotEmpty(itemCount.getChosenQuantity())?itemCount.getChosenQuantity():0; int completedQuantity = itemCount.getCompletedQuantity(); if(ObjectUtils.isNotEmpty(completedQuantity) && completedQuantity != 0){ BigDecimal chosenPercentage = (new BigDecimal(chosenQuantity)).divide(new BigDecimal(completedQuantity), 2, RoundingMode.HALF_UP); itemCount.setChosenPercentage(chosenPercentage.toString()); } itemCountMap.put(itemCount.getOptionText(), itemCount); } } }); List details = new ArrayList<>(itemCountMap.values()); count.setDetails(details); result.put(scriptid, count); } } return result; } }