From 3d274e016ae6f40cea86254af6c6f32691978ab8 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期四, 30 四月 2026 15:40:47 +0800
Subject: [PATCH] Merge branch 'master' into master-手术随访

---
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskIsAbnormalStatistic.java          |   71 ++++++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java |   10 
 smartor/src/main/resources/mapper/smartor/SvyTaskTemplateTargetoptionMapper.xml          |    4 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java                     |  149 ++++++++++++++++++++-
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java                    |   15 ++
 smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java                |    5 
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java            |  149 +++++++++++++++-----
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskExport.java                       |    1 
 smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java                    |    3 
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java      |    6 
 ruoyi-admin/src/main/resources/application-ls.yml                                        |    2 
 11 files changed, 356 insertions(+), 59 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
index 8840645..62d6927 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -79,14 +79,14 @@
     @Autowired
     private ISysConfigService configService;
 
+    @Autowired
+    private RyTask ryTask;
+
     @Value("${spring.profiles.active}")
     private String active;
 
     @Autowired
     private RedisCache redisCache;
-
-    @Autowired
-    private RyTask ryTask;
 
     /**
      * 鏌ヨ鎮h�呴殢璁夸俊鎭�
@@ -741,9 +741,9 @@
         return serviceSubtaskService.getHeLibraryCount(heLibraryCountVO);
     }
 
+
     @PostMapping("/test")
     public void test() {
-        ryTask.dealOutHospInfo();
+        ryTask.longTaskSend();
     }
-
 }
diff --git a/ruoyi-admin/src/main/resources/application-ls.yml b/ruoyi-admin/src/main/resources/application-ls.yml
index 43de361..f4479cd 100644
--- a/ruoyi-admin/src/main/resources/application-ls.yml
+++ b/ruoyi-admin/src/main/resources/application-ls.yml
@@ -185,7 +185,7 @@
 req_path: 8093
 #localIP: https://wx.lihusmart.com
 #涓芥按澶栭摼璇锋眰IP鍜岀鍙e彿
-localIP: https://221.12.19.26
+localIP: https://lishuisf.health-y.cn
 
 #鑾峰彇鎮h�呬俊鎭疷RL(鍗庡崜鎻愪緵)
 hosp_info_url: http://esb-core-rest.wowjoy.cn/esb/exchange
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
index c81ec58..06e482e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -38,14 +38,9 @@
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.CellRangeAddressList;
 import org.apache.poi.util.IOUtils;
+import org.apache.poi.xddf.usermodel.chart.*;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
-import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
-import org.apache.poi.xssf.usermodel.XSSFDataValidation;
-import org.apache.poi.xssf.usermodel.XSSFDrawing;
-import org.apache.poi.xssf.usermodel.XSSFPicture;
-import org.apache.poi.xssf.usermodel.XSSFShape;
-import org.apache.poi.xssf.usermodel.XSSFSheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xssf.usermodel.*;
 import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1472,4 +1467,144 @@
             log.error("{}璁剧疆瀵煎嚭Excel鏂囦欢鍚嶇О寮傚父,{}", fileName, e.getMessage());
         }
     }
+
+//    public static void main(String[] args) {
+//        // 1. 鍒涘缓宸ヤ綔绨�
+//        try (XSSFWorkbook workbook = new XSSFWorkbook()) {
+//            // 2. 鐢熸垚鏌辩姸鍥� Sheet
+//            createBarChartSheet(workbook);
+//            // 3. 鐢熸垚鎶樼嚎鍥� Sheet
+//            createLineChartSheet(workbook);
+//            // 4. 鐢熸垚楗肩姸鍥� Sheet
+//            createPieChartSheet(workbook);
+//
+//            // 5. 瀵煎嚭鍒版湰鍦版枃浠�
+//            try (FileOutputStream fos = new FileOutputStream("D:/鍥捐〃瀵煎嚭.xlsx")) {
+//                workbook.write(fos);
+//                System.out.println("Excel 鍥捐〃瀵煎嚭鎴愬姛锛佽矾寰勶細D:/鍥捐〃瀵煎嚭.xlsx");
+//            }
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//    }
+
+    // ==================== 1. 鍒涘缓鏌辩姸鍥� Sheet ====================
+    private static void createBarChartSheet(XSSFWorkbook workbook) {
+        XSSFSheet sheet = workbook.createSheet("鏌辩姸鍥�");
+        writeChartData(sheet);
+
+        XSSFDrawing drawing = sheet.createDrawingPatriarch();
+        XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 3, 1, 12, 15);
+        XSSFChart chart = drawing.createChart(anchor);
+        chart.setTitleText("浜у搧閿�閲�-鏌辩姸鍥�");
+        chart.setTitleOverlay(false);
+
+        // 鍧愭爣杞�
+        XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
+        XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);
+        yAxis.setCrosses(AxisCrosses.AUTO_ZERO);
+
+        // 鏁版嵁鑼冨洿锛氬垎绫籄2:A6锛屾暟鍊糂2:B6
+        XDDFDataSource<String> cat = XDDFDataSourcesFactory.fromStringCellRange(sheet,
+                new CellRangeAddress(1, 5, 0, 0));
+        XDDFNumericalDataSource<Double> val = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
+                new CellRangeAddress(1, 5, 1, 1));
+
+        // 鏌辩姸鍥炬暟鎹�
+        XDDFBarChartData barChart = (XDDFBarChartData) chart.createData(ChartTypes.BAR, xAxis, yAxis);
+        XDDFBarChartData.Series series = (XDDFBarChartData.Series) barChart.addSeries(cat, val);
+        series.setTitle("閿�閲�", null);
+        barChart.setBarDirection(BarDirection.COL);
+
+        // 缁樺埗锛堝叧閿細缂哄け灏变笉鏄剧ず鍥捐〃锛�
+        chart.plot(barChart);
+    }
+
+    // ==================== 2. 鍒涘缓鎶樼嚎鍥� Sheet ====================
+    private static void createLineChartSheet(XSSFWorkbook workbook) {
+        XSSFSheet sheet = workbook.createSheet("鎶樼嚎鍥�");
+        // 鍐欏叆琛ㄥご + 鏁版嵁
+        writeChartData(sheet);
+
+        // 缁樺浘鍖哄煙
+        XSSFDrawing drawing = sheet.createDrawingPatriarch();
+        XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 20);
+        XSSFChart chart = drawing.createChart(anchor);
+
+        // 鍥捐〃鏍囬
+        chart.setTitleText("鏈堝害閿�鍞鎶樼嚎鍥�");
+        chart.setTitleOverlay(false);
+
+        // 鍥句緥
+        XDDFChartLegend legend = chart.getOrAddLegend();
+        legend.setPosition(LegendPosition.TOP_RIGHT);
+
+        // X杞淬�乊杞�
+        XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
+        bottomAxis.setTitle("鏈堜唤");
+        XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
+        leftAxis.setTitle("閿�鍞锛堜竾鍏冿級");
+
+        // 鏁版嵁鑼冨洿
+        XDDFDataSource<String> months = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(0, 5, 0, 0));
+        XDDFNumericalDataSource<Double> values = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(0, 5, 1, 1));
+
+        // 鍒涘缓鎶樼嚎鍥�
+        XDDFLineChartData lineData = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
+        XDDFLineChartData.Series series = (XDDFLineChartData.Series) lineData.addSeries(months, values);
+        series.setTitle("閿�鍞", null);
+        series.setMarkerStyle(MarkerStyle.CIRCLE); // 鏄剧ず鍦嗙偣
+
+        chart.plot(lineData);
+    }
+
+    // ========== 鏂板锛氶ゼ鐘跺浘 ==========
+    private static void createPieChartSheet(XSSFWorkbook workbook) {
+        XSSFSheet sheet = workbook.createSheet("楗肩姸鍥�");
+        writeChartData(sheet);
+
+        XSSFDrawing drawing = sheet.createDrawingPatriarch();
+        XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 3, 1, 12, 15);
+        XSSFChart chart = drawing.createChart(anchor);
+        chart.setTitleText("浜у搧鍗犳瘮-楗肩姸鍥�");
+        chart.setTitleOverlay(false);
+
+        // 楗煎浘涓嶉渶瑕乆Y杞�
+        XDDFDataSource<String> cat = XDDFDataSourcesFactory.fromStringCellRange(sheet,
+                new CellRangeAddress(1, 5, 0, 0));
+        XDDFNumericalDataSource<Double> val = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
+                new CellRangeAddress(1, 5, 1, 1));
+
+        // 楗煎浘鏁版嵁
+        XDDFPieChartData pieChart = (XDDFPieChartData) chart.createData(ChartTypes.PIE, null, null);
+        pieChart.addSeries(cat, val);
+        chart.plot(pieChart);
+    }
+
+    // ==================== 鍏叡鏂规硶锛氬啓鍏ュ浘琛ㄦ暟鎹� ====================
+    private static void writeChartData(XSSFSheet sheet) {
+        Object[][] data = {
+                {"鍒嗙被", "鏁板��"},
+                {"浜у搧A", 35},
+                {"浜у搧B", 28},
+                {"浜у搧C", 42},
+                {"浜у搧D", 19},
+                {"浜у搧E", 26}
+        };
+        int rowIdx = 0;
+        for (Object[] rows : data) {
+            Row row = sheet.createRow(rowIdx++);
+            int cellIdx = 0;
+            for (Object val : rows) {
+                if (val instanceof String) {
+                    row.createCell(cellIdx++).setCellValue((String) val);
+                } else if (val instanceof Number) {
+                    row.createCell(cellIdx++).setCellValue(((Number) val).doubleValue());
+                }
+            }
+        }
+        sheet.autoSizeColumn(0);
+        sheet.autoSizeColumn(1);
+    }
+
 }
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskExport.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskExport.java
index ffd4a0a..c9bd59f 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskExport.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskExport.java
@@ -44,6 +44,7 @@
     /**
      * 瀹屾垚鏃堕棿
      */
+    @Excel(name = " 瀹屾垚鏃堕棿 ", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "瀹屾垚鏃堕棿")
     private Date finishtime;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskIsAbnormalStatistic.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskIsAbnormalStatistic.java
new file mode 100644
index 0000000..e355670
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskIsAbnormalStatistic.java
@@ -0,0 +1,71 @@
+package com.smartor.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 鍚勭梾鍖洪殢璁跨粺璁℃瘮渚�
+ *
+ * @author ruoyi
+ * @date 2024-12-11
+ */
+@ApiModel(value = "ServiceSubtaskStatistic", description = "鍚勭梾鍖洪殢璁跨粺璁℃瘮渚�")
+@Data
+public class ServiceSubtaskIsAbnormalStatistic implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "绉戝鐥呭尯")
+    private Integer statisticaltype;
+
+    @ApiModelProperty(value = "鍑洪櫌鐥呭尯缂栧彿")
+    private String leavehospitaldistrictcode;
+
+    @ApiModelProperty(value = "鍑洪櫌鐥呭尯鍚嶇О")
+    @Excel(name = " 鍑洪櫌鐥呭尯鍚嶇О ")
+    private String leavehospitaldistrictname;
+
+    @ApiModelProperty(value = "鍑洪櫌绉戝缂栧彿")
+    private String deptcode;
+
+    @ApiModelProperty(value = "鍑洪櫌绉戝鍚嶇О")
+    @Excel(name = " 鍑洪櫌鐥呭尯鍚嶇О ")
+    private String deptname;
+
+    /**
+     * 鎬у埆
+     */
+    @ApiModelProperty(value = "鎬у埆 1鐢�  2濂�")
+    private Long sex;
+
+    @ApiModelProperty(value = "寮傚父浜烘暟0-10宀�")
+    private Long abnormalCount010 = 0L;
+
+    @ApiModelProperty(value = "寮傚父浜烘暟10-20宀�")
+    private Long abnormalCount1020 = 0L;
+
+    @ApiModelProperty(value = "寮傚父浜烘暟20-30宀�")
+    private Long abnormalCount2030 = 0L;
+
+    @ApiModelProperty(value = "寮傚父浜烘暟30-40宀�")
+    private Long abnormalCount3040 = 0L;
+
+    @ApiModelProperty(value = "寮傚父浜烘暟40-50宀�")
+    private Long abnormalCount4050 = 0L;
+
+    @ApiModelProperty(value = "寮傚父浜烘暟50-60宀�")
+    private Long abnormalCount5060 = 0L;
+
+    @ApiModelProperty(value = "寮傚父浜烘暟60-70宀�")
+    private Long abnormalCount6070 = 0L;
+
+    @ApiModelProperty(value = "寮傚父浜烘暟70-80宀�")
+    private Long abnormalCount7090 = 0L;
+
+    @ApiModelProperty(value = "寮傚父浜烘暟80宀佷互涓�")
+    private Long abnormalCount80More = 0L;
+}
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
index 5f62fea..7608a6a 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
@@ -136,6 +136,9 @@
     @ApiModelProperty(value = "棣栨闅忚浜哄伐璇︽儏")
     private List<ServiceSubtask> manualInfo;
 
+    @ApiModelProperty(value = "棣栨闅忚璇煶璇︽儏")
+    private List<ServiceSubtask> voiceInfo;
+
     @ApiModelProperty(value = "棣栨闅忚鐭俊璇︽儏")
     private List<ServiceSubtask> smsInfo;
 
@@ -156,6 +159,9 @@
 
     @ApiModelProperty(value = "鍐嶆闅忚浜哄伐璇︽儏")
     private List<ServiceSubtask> manualAgainInfo;
+
+    @ApiModelProperty(value = "鍐嶆闅忚璇煶璇︽儏")
+    private List<ServiceSubtask> voiceAgainInfo;
 
     @ApiModelProperty(value = "鍐嶆闅忚鐭俊璇︽儏")
     private List<ServiceSubtask> smsAgainInfo;
@@ -178,6 +184,10 @@
     @ApiModelProperty(value = "棣栨浜哄伐")
     @Excel(name = " 棣栨浜哄伐 ")
     private Long manual = 0L;
+
+    @ApiModelProperty(value = "棣栨璇煶")
+    @Excel(name = " 棣栨璇煶 ")
+    private Long voice = 0L;
 
     @ApiModelProperty(value = "棣栨鐭俊")
     @Excel(name = " 棣栨鐭俊 ")
@@ -214,10 +224,13 @@
     @Excel(name = " 浜屾浜哄伐 ")
     private Long manualAgain = 0L;
 
+    @ApiModelProperty(value = "浜屾璇煶")
+    @Excel(name = " 浜屾璇煶 ")
+    private Long voiceAgain = 0L;
+
     @ApiModelProperty(value = "浜屾鐭俊")
     @Excel(name = " 浜屾鐭俊 ")
     private Long smsAgain = 0L;
-    @Excel(name = " 浜屾寰俊 ")
 
     @ApiModelProperty(value = "浜屾寰俊")
     private Long weChatAgain = 0L;
diff --git a/smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java b/smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
index e237473..7426080 100644
--- a/smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
+++ b/smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
@@ -7,6 +7,7 @@
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 import java.util.List;
@@ -677,6 +678,7 @@
      * 寮�濮嬪嚭闄㈡棩鏈�
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "寮�濮嬪嚭闄㈡棩鏈�")
     private Date startOutHospTime;
 
@@ -684,6 +686,7 @@
      * 寮�濮嬪彂閫佹棩鏈�
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "寮�濮嬪彂閫佹棩鏈�")
     private Date startSendDateTime;
 
@@ -691,6 +694,7 @@
      * 缁撴潫鍙戦�佹棩鏈�
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "缁撴潫鍙戦�佹棩鏈�")
     private Date endSendDateTime;
 
@@ -698,6 +702,7 @@
      * 缁撴潫鍑洪櫌鏃ユ湡
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "缁撴潫鍑洪櫌鏃ユ湡")
     private Date endOutHospTime;
 
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
index 11554e9..fafffb0 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -137,6 +137,9 @@
     //瀵煎嚭闅忚
     public List<ServiceSubtaskStatistic> getSfStatisticsExport(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
+    //瀵煎嚭闅忚-寮傚父
+    public List<ServiceSubtaskIsAbnormalStatistic> getSfStatisticsIsAbnormalExport(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
     public List<ServiceSubtaskStatistic> getSfStatisticsJoy(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
     public List<ServiceSubtaskCount> getSfStatisticsJoydetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
index 6af155d..6dedd3a 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -457,7 +457,9 @@
 
             //灏嗗綋鍓嶅彂閫佺姸鎬佹敼鎴�9瀹屾垚
             ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
-            serviceSubtaskPreachform.setPreachform(serviceSubtaskList.get(0).getCurrentPreachform());
+            if (CollectionUtils.isNotEmpty(serviceSubtaskList)) {
+                serviceSubtaskPreachform.setPreachform(serviceSubtaskList.get(0).getCurrentPreachform());
+            }
             serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
             serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
             List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
@@ -900,7 +902,7 @@
         }
 
         //鍒ゆ柇涓�涓嬪綋鍓嶇殑闂鏄笉鏄弧鎰忓害闂锛屽苟涓攄utyDeptCode鏄惁鏈夊�硷紝骞朵笖閫夐」鏄笉鏄紓甯搁�夐」锛屽鏋滃叏绗﹀悎锛屽垯寰�婊℃剰搴﹂棶棰樺紓甯歌〃鏂板
-        if (StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getDutyDeptCode()) && 1 == stt.getIsabnormal()) {
+        if (StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getDutyDeptCode()) && stt != null && 1 == stt.getIsabnormal()) {
             isabnormalFlag = 1L;
             ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace();
             subtaskDetailTrace.setDetailId(serviceSubtaskDetail.getId());
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
index 9b04a47..0568ae2 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -2477,7 +2477,7 @@
         return jsRates;
     }
 
-    @Override
+
     public List<ServiceSubtaskStatistic> getSfStatisticsExport(ServiceSubtaskCountReq serviceSubtaskCountReq) {
         List<ServiceSubtaskStatistic> sfStatistics = getSfStatistics(serviceSubtaskCountReq);
         // 娣诲姞鎬昏琛�
@@ -2489,6 +2489,12 @@
         }
 
         return sfStatistics;
+    }
+
+    @Override
+    public List<ServiceSubtaskIsAbnormalStatistic> getSfStatisticsIsAbnormalExport(ServiceSubtaskCountReq serviceSubtaskCountReq){
+
+        return null;
     }
 
     /**
@@ -2703,6 +2709,8 @@
             List<ServiceSubtask> followUpFailInfo = new ArrayList<>();
             //璁板綍棣栨闅忚浜哄伐璇︽儏
             List<ServiceSubtask> manualInfo = new ArrayList<>();
+            //璁板綍棣栨闅忚璇煶璇︽儏
+            List<ServiceSubtask> voiceInfo = new ArrayList<>();
             //璁板綍棣栨闅忚鐭俊璇︽儏
             List<ServiceSubtask> smsInfo = new ArrayList<>();
             //璁板綍棣栨闅忚寰俊璇︽儏
@@ -2716,11 +2724,13 @@
             List<ServiceSubtask> followUpSuccessAgainInfo = new ArrayList<>();
             //璁板綍鍐嶆闅忚澶辫触璇︽儏
             List<ServiceSubtask> followUpFailAgainInfo = new ArrayList<>();
-            //璁板綍棣栨闅忚浜哄伐璇︽儏
+            //璁板綍鍐嶆闅忚浜哄伐璇︽儏
             List<ServiceSubtask> manualAgainInfo = new ArrayList<>();
-            //璁板綍棣栨闅忚鐭俊璇︽儏
+            //璁板綍鍐嶆闅忚璇煶璇︽儏
+            List<ServiceSubtask> voiceAgainInfo = new ArrayList<>();
+            //璁板綍鍐嶆闅忚鐭俊璇︽儏
             List<ServiceSubtask> smsAgainInfo = new ArrayList<>();
-            //璁板綍棣栨闅忚寰俊璇︽儏
+            //璁板綍鍐嶆闅忚寰俊璇︽儏
             List<ServiceSubtask> wechatAgainInfo = new ArrayList<>();
 
             for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
@@ -2765,17 +2775,22 @@
                             followUpSuccessInfo.add(serviceSubtask);
                         }
                         //棣栨闅忚浜哄伐 (涓嶇粺璁′笉鎵ц)
-                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("1")) {
+                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                             serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
                             manualInfo.add(serviceSubtask);
                         }
+                        //棣栨闅忚璇煶 (涓嶇粺璁′笉鎵ц)
+                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("3")) {
+                            serviceSubtaskStatistic.setVoice(serviceSubtaskStatistic.getVoice() + 1L);
+                            voiceInfo.add(serviceSubtask);
+                        }
                         //棣栨闅忚鐭俊(涓嶇粺璁′笉鎵ц)
-                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("4")) {
+                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                             serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
                             smsInfo.add(serviceSubtask);
                         }
                         //棣栨闅忚寰俊(涓嶇粺璁′笉鎵ц)
-                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("5")) {
+                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                             serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                             wechatInfo.add(serviceSubtask);
                         }
@@ -2786,17 +2801,22 @@
                             followUpSuccessInfo.add(serviceSubtask);
                         }
                         //棣栨闅忚浜哄伐 (缁熻涓嶆墽琛�)
-                        if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                        if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                             serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
                             manualInfo.add(serviceSubtask);
                         }
+                        //棣栨闅忚璇煶 (缁熻涓嶆墽琛�)
+                        if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("3")) {
+                            serviceSubtaskStatistic.setVoice(serviceSubtaskStatistic.getVoice() + 1L);
+                            voiceInfo.add(serviceSubtask);
+                        }
                         //棣栨闅忚鐭俊(缁熻涓嶆墽琛�)
-                        if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                        if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                             serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
                             smsInfo.add(serviceSubtask);
                         }
                         //棣栨闅忚寰俊(缁熻涓嶆墽琛�)
-                        if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                        if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                             serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                             wechatInfo.add(serviceSubtask);
                         }
@@ -2838,17 +2858,22 @@
                             followUpSuccessAgainInfo.add(serviceSubtask);
                         }
                         //鍐嶆闅忚浜哄伐(涓嶇粺璁′笉鎵ц)
-                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("1")) {
+                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                             serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
                             manualAgainInfo.add(serviceSubtask);
                         }
+                        //鍐嶆闅忚璇煶(涓嶇粺璁′笉鎵ц)
+                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("3")) {
+                            serviceSubtaskStatistic.setVoiceAgain(serviceSubtaskStatistic.getVoiceAgain() + 1L);
+                            voiceAgainInfo.add(serviceSubtask);
+                        }
                         //鍐嶆闅忚鐭俊(涓嶇粺璁′笉鎵ц)
-                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("4")) {
+                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                             serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
                             smsAgainInfo.add(serviceSubtask);
                         }
                         //鍐嶆闅忚寰俊(涓嶇粺璁′笉鎵ц)
-                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("5")) {
+                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                             serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
                             wechatAgainInfo.add(serviceSubtask);
                         }
@@ -2859,17 +2884,22 @@
                             followUpSuccessAgainInfo.add(serviceSubtask);
                         }
                         //鍐嶆闅忚浜哄伐(缁熻涓嶆墽琛�)
-                        if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                        if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                             serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
                             manualAgainInfo.add(serviceSubtask);
                         }
+                        //鍐嶆闅忚璇煶(缁熻涓嶆墽琛�)
+                        if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("3")) {
+                            serviceSubtaskStatistic.setVoiceAgain(serviceSubtaskStatistic.getVoiceAgain() + 1L);
+                            voiceAgainInfo.add(serviceSubtask);
+                        }
                         //鍐嶆闅忚鐭俊(缁熻涓嶆墽琛�)
-                        if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                        if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                             serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
                             smsAgainInfo.add(serviceSubtask);
                         }
                         //鍐嶆闅忚寰俊(缁熻涓嶆墽琛�)
-                        if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                        if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                             serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
                             wechatAgainInfo.add(serviceSubtask);
                         }
@@ -2918,6 +2948,8 @@
             serviceSubtaskStatistic.setFollowUpFailInfo(followUpFailInfo);
             //璁板綍棣栨闅忚浜哄伐璇︽儏
             serviceSubtaskStatistic.setManualInfo(manualInfo);
+            //璁板綍棣栨闅忚璇煶璇︽儏
+            serviceSubtaskStatistic.setVoiceInfo(voiceInfo);
             //璁板綍棣栨闅忚鐭俊璇︽儏
             serviceSubtaskStatistic.setSmsInfo(smsInfo);
             //璁板綍棣栨闅忚寰俊璇︽儏
@@ -2932,6 +2964,8 @@
             serviceSubtaskStatistic.setFollowUpFailAgainInfo(followUpFailAgainInfo);
             //璁板綍鍐嶆闅忚浜哄伐璇︽儏
             serviceSubtaskStatistic.setManualAgainInfo(manualAgainInfo);
+            //璁板綍鍐嶆闅忚璇煶璇︽儏
+            serviceSubtaskStatistic.setVoiceAgainInfo(voiceAgainInfo);
             //璁板綍鍐嶆闅忚鐭俊璇︽儏
             serviceSubtaskStatistic.setSmsAgainInfo(smsAgainInfo);
             //璁板綍鍐嶆闅忚寰俊璇︽儏
@@ -2974,6 +3008,8 @@
         List<ServiceSubtask> followUpFailInfo = new ArrayList<>();
         //璁板綍棣栨闅忚浜哄伐璇︽儏
         List<ServiceSubtask> manualInfo = new ArrayList<>();
+        //璁板綍棣栨闅忚璇煶璇︽儏
+        List<ServiceSubtask> voiceInfo = new ArrayList<>();
         //璁板綍棣栨闅忚鐭俊璇︽儏
         List<ServiceSubtask> smsInfo = new ArrayList<>();
         //璁板綍棣栨闅忚寰俊璇︽儏
@@ -3021,17 +3057,22 @@
                         followUpSuccessInfo.add(serviceSubtask);
                     }
                     //棣栨闅忚浜哄伐 (涓嶇粺璁′笉鎵ц)
-                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("1")) {
+                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                         serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
                         manualInfo.add(serviceSubtask);
                     }
+                    //棣栨闅忚璇煶 (涓嶇粺璁′笉鎵ц)
+                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("3")) {
+                        serviceSubtaskStatistic.setVoice(serviceSubtaskStatistic.getVoice() + 1L);
+                        voiceInfo.add(serviceSubtask);
+                    }
                     //棣栨闅忚鐭俊(涓嶇粺璁′笉鎵ц)
-                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("4")) {
+                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                         serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
                         smsInfo.add(serviceSubtask);
                     }
                     //棣栨闅忚寰俊(涓嶇粺璁′笉鎵ц)
-                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("5")) {
+                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                         serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                         wechatInfo.add(serviceSubtask);
                     }
@@ -3042,17 +3083,22 @@
                         followUpSuccessInfo.add(serviceSubtask);
                     }
                     //棣栨闅忚浜哄伐 (缁熻涓嶆墽琛�)
-                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                    if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                         serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
                         manualInfo.add(serviceSubtask);
                     }
+                    //棣栨闅忚璇煶 (缁熻涓嶆墽琛�)
+                    if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("3")) {
+                        serviceSubtaskStatistic.setVoice(serviceSubtaskStatistic.getVoice() + 1L);
+                        voiceInfo.add(serviceSubtask);
+                    }
                     //棣栨闅忚鐭俊(缁熻涓嶆墽琛�)
-                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                    if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                         serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
                         smsInfo.add(serviceSubtask);
                     }
                     //棣栨闅忚寰俊(缁熻涓嶆墽琛�)
-                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                    if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                         serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                         wechatInfo.add(serviceSubtask);
                     }
@@ -3101,6 +3147,8 @@
         serviceSubtaskStatistic.setFollowUpFailInfo(followUpFailInfo);
         //璁板綍棣栨闅忚浜哄伐璇︽儏
         serviceSubtaskStatistic.setManualInfo(manualInfo);
+        //璁板綍棣栨闅忚璇煶璇︽儏
+        serviceSubtaskStatistic.setVoiceInfo(voiceInfo);
         //璁板綍棣栨闅忚鐭俊璇︽儏
         serviceSubtaskStatistic.setSmsInfo(smsInfo);
         //璁板綍棣栨闅忚寰俊璇︽儏
@@ -3142,6 +3190,8 @@
         List<ServiceSubtask> followUpFailAgainInfo = new ArrayList<>();
         //璁板綍鍐嶆闅忚浜哄伐璇︽儏
         List<ServiceSubtask> manualAgainInfo = new ArrayList<>();
+        //璁板綍鍐嶆闅忚璇煶璇︽儏
+        List<ServiceSubtask> voiceAgainInfo = new ArrayList<>();
         //璁板綍鍐嶆闅忚鐭俊璇︽儏
         List<ServiceSubtask> smsAgainInfo = new ArrayList<>();
         //璁板綍鍐嶆闅忚寰俊璇︽儏
@@ -3189,17 +3239,22 @@
                         followUpSuccessAgainInfo.add(serviceSubtask);
                     }
                     //鍐嶆闅忚浜哄伐(涓嶇粺璁′笉鎵ц)
-                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("1")) {
+                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                         serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
                         manualAgainInfo.add(serviceSubtask);
                     }
+                    //鍐嶆闅忚璇煶(涓嶇粺璁′笉鎵ц)
+                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("3")) {
+                        serviceSubtaskStatistic.setVoiceAgain(serviceSubtaskStatistic.getVoiceAgain() + 1L);
+                        voiceAgainInfo.add(serviceSubtask);
+                    }
                     //鍐嶆闅忚鐭俊(涓嶇粺璁′笉鎵ц)
-                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("4")) {
+                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                         serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
                         smsAgainInfo.add(serviceSubtask);
                     }
                     //鍐嶆闅忚寰俊(涓嶇粺璁′笉鎵ц)
-                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && serviceSubtask.getPreachform().equals("5")) {
+                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                         serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
                         wechatAgainInfo.add(serviceSubtask);
                     }
@@ -3210,17 +3265,22 @@
                         followUpSuccessAgainInfo.add(serviceSubtask);
                     }
                     //鍐嶆闅忚浜哄伐(缁熻涓嶆墽琛�)
-                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                    if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                         serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
                         manualAgainInfo.add(serviceSubtask);
                     }
+                    //鍐嶆闅忚璇煶(缁熻涓嶆墽琛�)
+                    if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("3")) {
+                        serviceSubtaskStatistic.setVoiceAgain(serviceSubtaskStatistic.getVoiceAgain() + 1L);
+                        voiceAgainInfo.add(serviceSubtask);
+                    }
                     //鍐嶆闅忚鐭俊(缁熻涓嶆墽琛�)
-                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                    if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                         serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
                         smsAgainInfo.add(serviceSubtask);
                     }
                     //鍐嶆闅忚寰俊(缁熻涓嶆墽琛�)
-                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                    if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                         serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
                         wechatAgainInfo.add(serviceSubtask);
                     }
@@ -3269,6 +3329,8 @@
         serviceSubtaskStatistic.setFollowUpFailAgainInfo(followUpFailAgainInfo);
         //璁板綍鍐嶆闅忚浜哄伐璇︽儏
         serviceSubtaskStatistic.setManualAgainInfo(manualAgainInfo);
+        //璁板綍鍐嶆闅忚璇煶璇︽儏
+        serviceSubtaskStatistic.setVoiceAgainInfo(voiceAgainInfo);
         //璁板綍鍐嶆闅忚鐭俊璇︽儏
         serviceSubtaskStatistic.setSmsAgainInfo(smsAgainInfo);
         //璁板綍鍐嶆闅忚寰俊璇︽儏
@@ -3329,13 +3391,13 @@
                 } else {
                     serviceSubtaskStatistic.setFollowUpRate("0.00%");
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                     serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                     serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                     serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                 }
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")) {
@@ -3361,13 +3423,13 @@
                 } else {
                     serviceSubtaskStatistic.setFollowUpRateAgain("0.00%");
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                     serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                     serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                     serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
                 }
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")) {
@@ -3447,13 +3509,13 @@
                 } else {
                     serviceSubtaskStatistic.setFollowUpRate("0.00%");
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                     serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                     serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                     serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                 }
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")) {
@@ -3479,13 +3541,13 @@
                 } else {
                     serviceSubtaskStatistic.setFollowUpRateAgain("0.00%");
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")) {
                     serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("4")) {
                     serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
+                if (serviceSubtask.getSendstate() != null && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                     serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
                 }
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")) {
@@ -3870,13 +3932,18 @@
             serviceSubtaskPreachform1.setRemark(remark);
             serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
 
+
             //濡傛灉褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡锛岄偅鐩存帴灏唖erviceSubtask鐨剆endstate鐘舵�佹敼鎴�5灏辫浜�(鍏ㄥけ璐ヤ簡)
             if (serviceSubtaskPreachform1.getSort() == spSize.size() && failSendstate.equals("4")) {
                 serviceSubtask.setCurrentPreachform(preachform);
                 serviceSubtask.setSendstate(5L);
-                serviceSubtask.setRemark("鎵�鏈夊彂閫佹柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触");
+                serviceSubtask.setRemark(remark + ";鎵�鏈夊彂閫佹柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触");
                 serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                 return true;
+            }else {
+                //鍔犲叆鐩墠琛ュ伩閲岀殑 remark
+                serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + "," + remark : remark);
+                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
             }
         }
 
diff --git a/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateTargetoptionMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateTargetoptionMapper.xml
index 66359ab..3dcc275 100644
--- a/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateTargetoptionMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SvyTaskTemplateTargetoptionMapper.xml
@@ -162,7 +162,7 @@
             <if test="prompt != null">prompt,</if>
             <if test="sendTaskid != null">send_taskid,</if>
             <if test="sendTaskname != null">send_taskname,</if>
-            <if test="defaultValue != null">default_value,</if>
+            <if test="defaultValue != null">default_value</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="taskid != null">#{taskid},</if>
@@ -202,7 +202,7 @@
             <if test="score != null">#{score},</if>
             <if test="prompt != null">#{prompt},</if>
             <if test="sendTaskid != null">#{sendTaskid},</if>
-            <if test="sendTaskname != null">#{sendTaskname}</if>
+            <if test="sendTaskname != null">#{sendTaskname},</if>
             <if test="defaultValue != null">#{defaultValue}</if>
         </trim>
     </insert>

--
Gitblit v1.9.3