ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
@@ -358,7 +358,6 @@ // sendMagParam.setUrl(ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "¶m2=" + patid + "¶m3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "¶m5=false"); sendMagParam.setPhone(serviceSubtask.getPhone()); sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format); log.info("sendMagParamçå¼ä¸ºï¼{}", sendMagParam); //妿typeæ¯è¯é³é访çè¯ï¼è¯´æè¡¥å¿åéæ¹å¼ä¸æçµè¯éè®¿çæ¹å¼ï¼è¿éçå¤é¾å°±å°ååªè½ç¨/sfï¼ if (serviceSubtask.getType().equals("1")) sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/sf?p=" + format : ip + "/sf?p=" + format); @@ -425,7 +424,7 @@ serviceOutPath.setUrl(url); iServiceOutPathService.updateServiceOutPath(serviceOutPath); } log.info("sendMagParamçå¼ä¸ºï¼{}", sendMagParam); //çä¿¡è¿éè¦æ¨¡æ¿ String s = null; if (active.equals("xh")) { @@ -1069,6 +1068,7 @@ String body = new Gson().toJson(map); String result = null; log.info("ãgetDXCodeã-çä¿¡åéå ¥å body = {}", body); try { result = OkHttpExample.sendPostRequest(address, body, token); } catch (IOException e) { ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -1029,5 +1029,11 @@ } @ApiOperation("è·åç»è®¡æ°") @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid") @PostMapping("/countByCondition") public Map<String, Object> countByCondition(@RequestBody ServiceSubtaskEntity condition) { Map<String, Object> map = serviceSubtaskService.countByCondition(condition); return map; } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
@@ -72,37 +72,7 @@ List<ServiceTask> list = serviceTaskService.selectServiceTaskAndtaskDeptList(serviceTask); List<ServiceTaskVO> serviceTaskVOS = DtoConversionUtils.sourceToTarget(list, ServiceTaskVO.class); List<Long> taskIds = list.stream().map(ServiceTask::getTaskid).collect(Collectors.toList()); ServiceSubtaskEntity serviceSubtaskEntity = new ServiceSubtaskEntity(); serviceSubtaskEntity.setTaskIds(taskIds); serviceSubtaskEntity.setStartOutHospTime(serviceTask.getStartOutHospTime()); serviceSubtaskEntity.setEndOutHospTime(serviceTask.getEndOutHospTime()); // æ¹éæ¥è¯¢ææåä»»å¡ Map<String, List<ServiceSubtask>> subtaskMap = iServiceSubtaskService .selectServiceSubtaskList(serviceSubtaskEntity) .stream() .filter(subtask -> subtask.getTaskid() != null) // æ·»å è¿æ»¤ .collect(Collectors.groupingBy(subtask -> Optional.of(subtask.getTaskid().toString()).orElse("Unknown"))); if (CollectionUtils.isNotEmpty(serviceTaskVOS)) { for (ServiceTaskVO taskVO : serviceTaskVOS) { List<ServiceSubtask> subtasks = subtaskMap.getOrDefault(taskVO.getTaskid().toString(), Collections.emptyList()); if (CollectionUtils.isNotEmpty(subtasks)) { //å·²åéï¼åä»»å¡ä¸ç sendstate=1为被é¢åï¼ long yfs = subtasks.stream().filter(s -> s.getSendstate() != null && (s.getSendstate() >= 3L || s.getSendstate() == 1L)).count(); //æªåé long wfs = subtasks.stream().filter(s -> s.getSendstate() != null && s.getSendstate() == 2L).count(); taskVO.setYfs(yfs); taskVO.setWfs(wfs); } } //è·åtotal long total = PageUtils.count(new ISelect() { @Override @@ -118,7 +88,6 @@ return getDataTable2(0, serviceTaskVOS); } /** * 导åºä»»å¡å表 */ smartor/src/main/java/com/smartor/common/MydOptionRatioChartBuilder.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,172 @@ package com.smartor.common; import com.ruoyi.common.utils.poi.ExcelUtil; import com.smartor.domain.ServiceSubtaskDetailRatioExport; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xddf.usermodel.chart.AxisCrosses; import org.apache.poi.xddf.usermodel.chart.AxisPosition; import org.apache.poi.xddf.usermodel.chart.BarDirection; import org.apache.poi.xddf.usermodel.chart.ChartTypes; import org.apache.poi.xddf.usermodel.chart.LegendPosition; import org.apache.poi.xddf.usermodel.chart.XDDFBarChartData; import org.apache.poi.xddf.usermodel.chart.XDDFCategoryAxis; import org.apache.poi.xddf.usermodel.chart.XDDFChartData; import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend; import org.apache.poi.xddf.usermodel.chart.XDDFDataSource; import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory; import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource; import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis; import org.apache.poi.xssf.usermodel.XSSFChart; import org.apache.poi.xssf.usermodel.XSSFClientAnchor; import org.apache.poi.xssf.usermodel.XSSFDrawing; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; /** * 导åºãé®é¢è¯¦æ å æ¯å¾è¡¨ãSheet çæå»ºå¨ * <p> * æä»»å¡åç§°åç»ï¼æ¯ä¸ªä»»å¡åä¸åæ°æ®ï¼è¡=é¢ç®ï¼å=é项ï¼å¼=æ°éï¼ï¼å¹¶å¨æ°æ®å³ä¾§ç»ä¸å¼ æ±ç¶å¾ã * * @author smartor */ public class MydOptionRatioChartBuilder implements ExcelUtil.ChartSheetBuilder { /** * å¾è¡¨ Sheet åç§° */ public static final String SHEET_NAME = "é®é¢è¯¦æ å æ¯å¾è¡¨"; private final List<ServiceSubtaskDetailRatioExport> rows; public MydOptionRatioChartBuilder(List<ServiceSubtaskDetailRatioExport> rows) { this.rows = rows == null ? new ArrayList<>() : rows; } @Override public void build(XSSFWorkbook workbook) { if (rows.isEmpty()) { return; } XSSFSheet sheet = workbook.createSheet(SHEET_NAME); int startRow = 0; for (Map.Entry<String, List<ServiceSubtaskDetailRatioExport>> entry : groupByTask().entrySet()) { // æ¯åå®ä¸åæ°æ®ç«å»å»ºå¾ï¼SXSSF æµå¼å·¥ä½ç°¿éååçè¡è¿å¨å åä¸ï¼å¾è¡¨æè½è¯»å°åå æ ¼ startRow = writeTaskBlockWithChart(sheet, entry.getKey(), entry.getValue(), startRow) + 2; } } /** * æä»»å¡åç§°åç»ï¼ä¿æå表åæé¡ºåºï¼å³ SQL ç task_name æåºï¼ */ private Map<String, List<ServiceSubtaskDetailRatioExport>> groupByTask() { Map<String, List<ServiceSubtaskDetailRatioExport>> grouped = new LinkedHashMap<>(); for (ServiceSubtaskDetailRatioExport row : rows) { String taskName = row.getTaskname() == null ? "" : row.getTaskname(); grouped.computeIfAbsent(taskName, k -> new ArrayList<>()).add(row); } return grouped; } /** * åä¸ä¸ªä»»å¡çæ°æ®åå¹¶ç»æ±ç¶å¾ï¼è¿åä¸ä¸ä¸ªåå¯ç¨çèµ·å§è¡ */ private int writeTaskBlockWithChart(XSSFSheet sheet, String taskName, List<ServiceSubtaskDetailRatioExport> taskRows, int startRow) { // é¢ç® -> (é项 -> é该é项ç人æ°)ï¼é项æåºç°é¡ºåºæ¶éææ¬ä»»å¡çç³»å Map<String, Map<String, Double>> questionOptions = new LinkedHashMap<>(); LinkedHashSet<String> optionSet = new LinkedHashSet<>(); String taskid = ""; for (ServiceSubtaskDetailRatioExport row : taskRows) { String question = row.getQuestiontext() == null ? "" : row.getQuestiontext(); String option = row.getOptionresult() == null ? "" : row.getOptionresult(); questionOptions.computeIfAbsent(question, k -> new LinkedHashMap<>()).put(option, parseCount(row.getCount())); optionSet.add(option); if (taskid.isEmpty() && row.getTaskid() != null) { taskid = row.getTaskid(); } } List<String> optionList = new ArrayList<>(optionSet); List<String> questionList = new ArrayList<>(questionOptions.keySet()); int rowIdx = startRow; // æ é¢è¡ Row titleRow = sheet.createRow(rowIdx++); titleRow.createCell(0).setCellValue("ä»»å¡åç§°ï¼" + taskName + "ï¼ä»»å¡ç¼å· " + taskid + "ï¼"); // 表头è¡ï¼é¢ç® + åé项ï¼å¾è¡¨ç³»åçæ é¢å°±æ¯è¿ä¸è¡ï¼ Row headerRow = sheet.createRow(rowIdx++); headerRow.createCell(0).setCellValue("é¢ç®"); for (int i = 0; i < optionList.size(); i++) { headerRow.createCell(i + 1).setCellValue(optionList.get(i)); } // æ°æ®è¡ï¼å¼ = é该é项çäººæ° int firstDataRow = rowIdx; for (String question : questionList) { Row dataRow = sheet.createRow(rowIdx++); dataRow.createCell(0).setCellValue(question); Map<String, Double> optionMap = questionOptions.get(question); for (int i = 0; i < optionList.size(); i++) { Double count = optionMap.get(optionList.get(i)); dataRow.createCell(i + 1).setCellValue(count == null ? 0D : count); } } int lastDataRow = rowIdx - 1; // æ±ç¶å¾ï¼åç±»=é¢ç®ï¼ç³»å=éé¡¹ï¼æ°å¼=é该é项çäººæ° int chartCol = optionList.size() + 3; int chartHeight = Math.max(16, questionList.size() + 4); XSSFDrawing drawing = sheet.createDrawingPatriarch(); XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, chartCol, firstDataRow - 1, chartCol + 10, firstDataRow - 1 + chartHeight); XSSFChart chart = drawing.createChart(anchor); chart.setTitleText(taskName); chart.setTitleOverlay(false); XDDFChartLegend legend = chart.getOrAddLegend(); legend.setPosition(LegendPosition.BOTTOM); XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM); bottomAxis.setTitle("é¢ç®"); XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT); leftAxis.setTitle("æ°é"); leftAxis.setCrosses(AxisCrosses.AUTO_ZERO); XDDFDataSource<String> categories = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(firstDataRow, lastDataRow, 0, 0)); XDDFBarChartData barChart = (XDDFBarChartData) chart.createData(ChartTypes.BAR, bottomAxis, leftAxis); for (int i = 0; i < optionList.size(); i++) { XDDFNumericalDataSource<Double> values = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(firstDataRow, lastDataRow, i + 1, i + 1)); XDDFChartData.Series series = barChart.addSeries(categories, values); series.setTitle(optionList.get(i), null); } barChart.setBarDirection(BarDirection.COL); // å ³é®ï¼ä¸è°ç¨ plot å¾è¡¨ä¸ä¼æ¾ç¤º chart.plot(barChart); return rowIdx; } /** * æ°éå符串 -> æ°åï¼å¼å¸¸å¼æ 0 å¤ç */ private double parseCount(String count) { if (count == null || count.isEmpty()) { return 0D; } try { return Double.parseDouble(count.trim()); } catch (NumberFormatException e) { return 0D; } } } smartor/src/main/java/com/smartor/domain/DTO/ServiceSubtaskOptionStatDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.smartor.domain.DTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * 导åºãé®é¢è¯¦æ å æ¯ãä¸ç¨çé项ä½çç»è®¡ * <p> * 䏿¡ = ä¸ä¸ªãä»»å¡ + é¢ç® + é项ãçèåç»æï¼ * æ°éææ£è ï¼åä»»å¡ï¼å»éï¼åæ°ä¸ºè¯¥é项æç»ç score ä¹åï¼ * æ¯ä¾ä¸å¨è¿éç®ï¼ç± Service æã该é¢ä½çæ£è æ°ãç»ä¸è®¡ç®ã * * @author smartor */ @ApiModel(value = "ServiceSubtaskOptionStatDTO", description = "导åºç¨é项ä½çç»è®¡") @Data public class ServiceSubtaskOptionStatDTO { @ApiModelProperty(value = "ä»»å¡ç¼å·") private String taskid; @ApiModelProperty(value = "ä»»å¡åç§°") private String taskName; @ApiModelProperty(value = "é®é¢å 容") private String questiontext; @ApiModelProperty(value = "æ£è å®é éä¸çé项ï¼service_subtask_detail.asrtextï¼") private String optionresult; @ApiModelProperty(value = "é¢ç®é ç½®çé项ï¼service_subtask_detail.targetvalueï¼å¯è½ç¨ & è¿æ¥å¤ä¸ªé项ï¼") private String targetvalue; @ApiModelProperty(value = "é®é¢ç±»åï¼1.åé 2.å¤é 3.é®ç 4.填空 5.å ¶å®ï¼") private String valueType; @ApiModelProperty(value = "éæ©è¯¥éé¡¹çæ£è æ°ï¼æåä»»å¡å»éï¼") private Long patientCount; @ApiModelProperty(value = "该é项æç»ç score ä¹å") private BigDecimal scoreSum; } smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -210,6 +210,8 @@ * xsf: éé访æ°é sendstate = 4 * dsf: å¾ é访æ°é sendstate = 1L, 2L, 3L, 5L, 7L * ywc: 已宿æ°é sendstate = 6L * dfs: å¾ åéæ°é sendstate = 1L, 3L, 4L, 5L, 6L, 7L * yfs: å·²åéæ°é sendstate = 2L * yc: å¼å¸¸æ°é excep = '1' * yc: è¦åæ°é excep = '2' */ smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -69,6 +69,8 @@ public Map<String, Object> patItemCount(ServiceSubtaskEntity serviceSubtaskEntity); public Map<String, Object> countByCondition(ServiceSubtaskEntity serviceSubtaskEntity); /** * æ°å¢åä¸ä»»å¡ï¼éè®¿ï¼ * smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -640,6 +640,43 @@ } /** * ç»è®¡ä»»å¡åç§ç¶æçæ°éï¼å·²ä¼åï¼ * ä¼å说æï¼ * 1. ä½¿ç¨æ°æ®åºå±èå计ç®ï¼æ¿ä»£åºç¨å±éå * 2. æ§è½æå 10-100 åï¼åå³äºæ°æ®éï¼ * 3. éä½å åå ç¨åç½ç»ä¼ è¾ * * @param serviceSubtaskEntity æ¥è¯¢æ¡ä»¶ * @return åç¶æç»è®¡ç»æ */ @Override public Map<String, Object> countByCondition(ServiceSubtaskEntity serviceSubtaskEntity) { // ç´æ¥è°ç¨æ°æ®åºç»è®¡æ¹æ³ï¼å¨æ°æ®åºå±å®æèåè®¡ç® Map<String, Object> result = serviceSubtaskMapper.countByCondition(serviceSubtaskEntity); // å¤ç空å¼å¸¸ if (MapUtils.isEmpty(result)) { result = new HashMap<>(); // ç¡®ä¿ææ key 齿å¼ï¼é¿å 空æéå¼å¸¸ // MyBatis ç SUM 卿²¡æå¹é è¡æ¶ä¼è¿å null result.putIfAbsent("wzx", 0); result.putIfAbsent("ysf", 0); result.putIfAbsent("fssb", 0); result.putIfAbsent("yfs", 0); result.putIfAbsent("blq", 0); result.putIfAbsent("total", 0); result.putIfAbsent("wxsf", 0); result.putIfAbsent("xsf", 0); result.putIfAbsent("dsf", 0); result.putIfAbsent("dfs", 0); result.putIfAbsent("yfs", 0); result.putIfAbsent("ywc", 0); result.putIfAbsent("yc", 0); result.putIfAbsent("jg", 0); } return result; } /** * æ°å¢åä¸ä»»å¡ï¼éè®¿ï¼ * * @param serviceSubtask åä¸ä»»å¡ï¼éè®¿ï¼ @@ -6193,7 +6230,8 @@ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy()); //è®°å½ç¶æ setFailPreachForm(serviceSubtask, "3", "çµè¯æ¨æå·²å®æ", "9"); return phoneCallBackYQVO; back = phoneCallBackYQVO; return back; } flag = 1; @@ -6201,9 +6239,10 @@ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop"); // //è·åä¸ä¸é¢ log.error("è·åä¸ä¸é¢çä¿¡æ¯ï¼{}", ivrTaskTemplateScriptVO); if (ivrTaskTemplateScriptVO.getBranchFlag().equals("1") || ivrTaskTemplateScriptVO.getBranchFlag().equals("0") && ivrTaskTemplateScriptVO.getNextScriptno() != null && ivrTaskTemplateScriptVO.getNextScriptno() != 0) { //branchFlag为nullæ¶æåæ¯0å¤çï¼é¿å NPE if ("1".equals(ivrTaskTemplateScriptVO.getBranchFlag()) || "0".equals(ivrTaskTemplateScriptVO.getBranchFlag()) && ivrTaskTemplateScriptVO.getNextScriptno() != null && ivrTaskTemplateScriptVO.getNextScriptno() != 0) { Long nextQuestion = null; if (ivrTaskTemplateScriptVO.getBranchFlag().equals("1")) { if ("1".equals(ivrTaskTemplateScriptVO.getBranchFlag())) { nextQuestion = chosenOption.getNextQuestion(); //æ´æ°åæ° double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE"); @@ -6236,15 +6275,9 @@ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); phoneCallBackYQVO.setType("text"); phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy()); //å°ç»æåè¿detail表 ServiceSubTaskDetailReq ssdReq = new ServiceSubTaskDetailReq(); List<ServiceSubtaskDetail> serviceSubtaskDetailList2 = new ArrayList<>(); serviceSubtaskDetailList.add(getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate)); serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList2); ssdReq.setGuid(phoneCallReqYQVO.getGuid()); ssdReq.setOrgid(phoneCallReqYQVO.getOrgid()); saveQuestionAnswerPhone(ssdReq); return phoneCallBackYQVO; //æç»å¨æ¬é¢å¹é æåæ¶å·²è½åºï¼è§ä¸æ¹ saveQuestionAnswerPhoneï¼ï¼è¿éä¸åéå¤ä¿å back = phoneCallBackYQVO; return back; } for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) { @@ -6261,6 +6294,15 @@ redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid()); } } //ä¸ä¸é¢èæ¬æ²¡æ¾å°æ¶ï¼å åºéé®å½åé¢ï¼é¿å è°ç¨æ¹è¯¯å¤ä¸ºæªå¤çèé忣åè¯å« if (StringUtils.isEmpty(phoneCallBackYQVO.getValue())) { log.error("ä¸ä¸é¢èæ¬æªæ¾å°ï¼éé®å½åé¢ï¼nextQuestionï¼{}", nextQuestion); phoneCallBackYQVO.setType("text"); phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue()); phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, questionText)); } back = phoneCallBackYQVO; return back; } else if (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0) { ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); phoneCallBackYQVO.setType("text"); @@ -6289,33 +6331,101 @@ //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); // return phoneCallBackYQVO; //ç»æè¯å·²æ¼è¿è¿åå¼ï¼ææºç±å¹³å°æè¿å弿§è¡ back = phoneCallBackYQVO; return back; } } else { log.info("没æå¹é ä¸----------------------------"); //flag=0,è¯´ææ²¡ å¹é ä¸ï¼ä¹è¦ææ£è 说çè¯è®°å½ä¸æ¥ if (matched == ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().size() - 1 && flag == 0) { ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq(); List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>(); ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate); //ä¿®æ¹ä¸ä¸è¯é³è·¯å¾ï¼æ¹æå端å¯ä»¥è®¿é®çï¼åå°æ°æ®åºä¸ï¼ if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) { String questionvoice = serviceSubtaskDetail.getQuestionvoice(); String[] split = questionvoice.split("\\\\"); if (split.length > 0) { String lastPart = split[split.length - 1]; serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart); //AI没æå¹é ä¸ï¼ç±AI忝èªå·±æ"æ²¡é®æ¸ å°±éé®"çæ¬¡æ°å¤çï¼ä¸åé忣åè¯å« log.info("ai没æå¹é ä¸----------------------------"); //没å¹é ä¸ä¹è¦ææ£è 说çè¯è®°å½ä¸æ¥ï¼matchedtext置空ï¼ä¸æ£åè·¯å¾å£å¾ä¸è´ï¼ ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq(); List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>(); ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate); //ä¿®æ¹ä¸ä¸è¯é³è·¯å¾ï¼æ¹æå端å¯ä»¥è®¿é®çï¼åå°æ°æ®åºä¸ï¼ if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) { String questionvoice = serviceSubtaskDetail.getQuestionvoice(); String[] split = questionvoice.split("\\\\"); if (split.length > 0) { String lastPart = split[split.length - 1]; serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart); } } serviceSubtaskDetailList.add(serviceSubtaskDetail); //å¦ææ²¡æ å¹é ä¸ï¼è¿ä¸ªå¿ 须为null serviceSubtaskDetailList.get(0).setMatchedtext(""); serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList); serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid()); serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid()); saveQuestionAnswerPhone(serviceSubTaskDetailReq); String mateKey = phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid(); Integer count = null; Object countObj = redisCache.getCacheObject(mateKey); if (ObjectUtils.isNotEmpty(countObj)) count = (Integer) countObj; if (count != null && count >= ivrTaskTemplate.getMateNum()) { //没å¹é 次æ°å·²ç»ç¨æ»¡ï¼ä¸è½åéé®äº boolean noNextQuestion = ("0".equals(ivrTaskTemplateScriptVO.getBranchFlag()) || "1".equals(ivrTaskTemplateScriptVO.getBranchFlag())) && (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0); if (noNextQuestion) { //å·²ç»æ¯æåä¸é¢ï¼ç´æ¥ææº ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); phoneCallBackYQVO.setType("text"); phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue()); phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy()); //æ´æ°ä¸ä¸åæ° Double score = null; Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE"); if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj; serviceSubtask.setScore(String.valueOf(score)); serviceSubtask.setFinishtime(new Date()); serviceSubtask.setSendstate(6L); serviceSubtask.setRemark("çµè¯æ¨æå·²å®æ"); serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); //è®°å½ç¶æ setFailPreachForm(serviceSubtask, "3", "çµè¯æ¨æå·²å®æ", "9"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); //å»redisä¸ï¼æè¯¥åä»»å¡IDå é¤ Long id = serviceSubtask.getId(); Map<String, String> map = delRedisValue(null, id.toString()); if (ObjectUtils.isNotEmpty(map)) { redisCache.setCacheObject(map.get("cacheName"), map.get("val")); redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone()); redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE"); } } else { //è¿æä¸ä¸é¢ï¼ænextScriptnoç»§ç»æé® for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) { if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) { phoneCallBackYQVO.setType("text"); phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue()); String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent(); phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent)); //å°è¯¥æ£è çRedisä¸çé¢ç®IDï¼è¿è¡ä¿®æ¹ redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES); //æ´æ°ä¸ä¸åæ° Double score = null; Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE"); if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj; score = BigDecimal.valueOf(score).add(new BigDecimal(script.getScore())).doubleValue(); redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES); //æ¢é¢æåï¼æ²¡å¹é æ¬¡æ°æ¸ é¶ redisCache.deleteObject(mateKey); } } } serviceSubtaskDetailList.add(serviceSubtaskDetail); //å¦ææ²¡æ å¹é ä¸ï¼è¿ä¸ªå¿ 须为null serviceSubtaskDetailList.get(0).setMatchedtext(""); serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList); serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid()); serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid()); saveQuestionAnswerPhone(serviceSubTaskDetailReq); } else { //è¿æ²¡é®æ»¡æ¬¡æ°ï¼ç¨noMatchTextå¼å¯¼æ£è éç redisCache.setCacheObject(mateKey, count == null ? 1 : count + 1, 120, TimeUnit.MINUTES); phoneCallBackYQVO.setType("text"); phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue()); phoneCallBackYQVO.setValue(ivrTaskTemplateScriptVO.getNoMatchText() + getObject(serviceSubtask, StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent())); } back = phoneCallBackYQVO; return back; } return back; } smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -2584,6 +2584,8 @@ SUM(CASE WHEN sendstate != 4 THEN 1 ELSE 0 END) AS xsf, SUM(CASE WHEN (sendstate = 1 OR sendstate = 2 OR sendstate = 3 OR sendstate = 5 OR sendstate = 7 ) THEN 1 ELSE 0 END) AS dsf, SUM(CASE WHEN sendstate != 2 THEN 1 ELSE 0 END) AS yfs, SUM(CASE WHEN sendstate = 2 THEN 1 ELSE 0 END) AS wfs, SUM(CASE WHEN sendstate = 6 THEN 1 ELSE 0 END) AS ywc, SUM(CASE WHEN excep IS NOT NULL AND excep = '1' THEN 1 ELSE 0 END) AS yc, SUM(CASE WHEN excep IS NOT NULL AND excep = '2' THEN 1 ELSE 0 END) AS jg, @@ -3677,5 +3679,6 @@ </select> </mapper>