|
@@ -10,6 +10,7 @@ import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Calendar;
|
|
|
import java.util.List;
|
|
|
import java.util.Locale;
|
|
@@ -40,6 +41,8 @@ import java.awt.image.BufferedImage;
|
|
|
|
|
|
import com.nokia.tsl_data.dao.SysDataDictionaryRepository;
|
|
|
import com.nokia.tsl_data.entity.pojo.XSSFWorkbookWrapper;
|
|
|
+import com.nokia.tsl_data.util.DateFormatUtil;
|
|
|
+import com.nokia.tsl_data.util.TextUtil;
|
|
|
import com.nokia.tsl_data.util.excel.PoiUtil;
|
|
|
import com.nokia.tsl_data.util.excel.entity.CellRect;
|
|
|
|
|
@@ -62,6 +65,126 @@ public class ReportServiceV3 {
|
|
|
|
|
|
private static final DateFormat DAY_FORMAT = new SimpleDateFormat("yyyyMMdd");
|
|
|
|
|
|
+ /**
|
|
|
+ * 每日消息
|
|
|
+ */
|
|
|
+ public void messageToSend(File file, String day) {
|
|
|
+ try (Workbook workbook = WorkbookFactory.create(file)) {
|
|
|
+ StringBuffer stringBuffer = new StringBuffer();
|
|
|
+ Calendar calendar = DateFormatUtil.toCalendar(day, "yyyyMMdd");
|
|
|
+ int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
|
|
+ stringBuffer.append(calendar.get(Calendar.YEAR))
|
|
|
+ .append("年")
|
|
|
+ .append(calendar.get(Calendar.MONTH) + 1)
|
|
|
+ .append("月截至")
|
|
|
+ .append(dayOfMonth)
|
|
|
+ .append("日移动网投诉情况统计:\n\n");
|
|
|
+ // 管理端-移网感知类
|
|
|
+ Sheet sheet = workbook.getSheet("管理端-移网感知类");
|
|
|
+ Row row;
|
|
|
+ if (sheet != null) {
|
|
|
+ List<List<Object>> list = new ArrayList<>();
|
|
|
+ List<List<Object>> list0 = new ArrayList<>();
|
|
|
+ for (int i = 2; i < 14; i++) {
|
|
|
+ row = sheet.getRow(i);
|
|
|
+ double value = row.getCell(dayOfMonth + 6).getNumericCellValue();
|
|
|
+ List<Object> list2 = new ArrayList<>();
|
|
|
+ list2.add(0, value);
|
|
|
+ list2.add(1, row.getCell(dayOfMonth + 7).getStringCellValue());
|
|
|
+ if (value > 0.0) {
|
|
|
+ list.add(list2);
|
|
|
+ }
|
|
|
+ list0.add(list2);
|
|
|
+ }
|
|
|
+ // 排序
|
|
|
+ list.sort((o1, o2) -> Double.compare((double) o2.get(0), (double) o1.get(0)));
|
|
|
+ list0.sort((o1, o2) -> Double.compare((double) o2.get(0), (double) o1.get(0)));
|
|
|
+ stringBuffer.append("管理端-移网感知类:");
|
|
|
+ if (list.size() == 0) {
|
|
|
+ stringBuffer.append("投诉率:12个地市均已达标,<font color=#FF0000>");
|
|
|
+ } else {
|
|
|
+ stringBuffer.append("投诉率:<font color=#FF0000>");
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ stringBuffer.append(list.get(i).get(1).toString()).append("、");
|
|
|
+ }
|
|
|
+ stringBuffer.deleteCharAt(stringBuffer.length() - 1);
|
|
|
+ stringBuffer.append("</font>未达到目标值,<font color=#FF0000>");
|
|
|
+ }
|
|
|
+ StringBuffer stringBuffer2 = new StringBuffer();
|
|
|
+ for (int i = 0; i < 3; i++) {
|
|
|
+ stringBuffer2.append(list0.get(i).get(1).toString()).append("、");
|
|
|
+ }
|
|
|
+ stringBuffer2.deleteCharAt(stringBuffer2.length() - 1);
|
|
|
+ stringBuffer.append(stringBuffer2.toString()).append("</font>排名靠后。");
|
|
|
+ }
|
|
|
+ // 管理端-重复投诉率
|
|
|
+ sheet = workbook.getSheet("管理端-重复投诉率");
|
|
|
+ if (sheet == null || day.endsWith("01")) {
|
|
|
+ // 1号忽略重复投诉率
|
|
|
+ stringBuffer.append("\n\n");
|
|
|
+ } else {
|
|
|
+ stringBuffer.append("重复投诉率:<font color=#FF0000>");
|
|
|
+ stringBuffer.append(sheet.getRow(3).getCell(0).getStringCellValue()).append("、")
|
|
|
+ .append(sheet.getRow(4).getCell(0).getStringCellValue()).append("、")
|
|
|
+ .append(sheet.getRow(5).getCell(0).getStringCellValue())
|
|
|
+ .append("</font>增长较快。\n\n");
|
|
|
+ }
|
|
|
+ // 移网综合投诉评价
|
|
|
+ sheet = workbook.getSheet("移网综合投诉评价");
|
|
|
+ if (sheet != null) {
|
|
|
+ stringBuffer.append("移网综合投诉评价:<font color=#FF0000>");
|
|
|
+ for (int i = 2; i < 14; i++) {
|
|
|
+ if (sheet.getRow(i).getCell(6).getNumericCellValue() > 0.0d) {
|
|
|
+ stringBuffer.append(sheet.getRow(i).getCell(0).getStringCellValue());
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ stringBuffer.append("、");
|
|
|
+ }
|
|
|
+ stringBuffer.append("</font>未达到目标值。\n\n");
|
|
|
+ }
|
|
|
+ // 投诉处理时长、超时工单概况
|
|
|
+ sheet = workbook.getSheet("投诉处理时长、超时工单概况");
|
|
|
+ if (sheet != null) {
|
|
|
+ stringBuffer.append("投诉处理时长、超时工单概况:超时工单:<font color=#FF0000>")
|
|
|
+ .append(sheet.getRow(2).getCell(0).getStringCellValue()).append("、")
|
|
|
+ .append(sheet.getRow(3).getCell(0).getStringCellValue()).append("、")
|
|
|
+ .append(sheet.getRow(4).getCell(0).getStringCellValue())
|
|
|
+ .append("</font>分公司超时工单占比较高,<font color=#FF0000>");
|
|
|
+ List<List<Object>> list = new ArrayList<>();
|
|
|
+ for (int i = 2; i < 14; i++) {
|
|
|
+ List<Object> list2 = new ArrayList<>();
|
|
|
+ list.add(list2);
|
|
|
+ list2.add(0, sheet.getRow(i).getCell(2).getNumericCellValue());
|
|
|
+ list2.add(1, sheet.getRow(i).getCell(0).getStringCellValue());
|
|
|
+ }
|
|
|
+ list.sort((o1, o2) -> Double.compare((double) o2.get(0), (double) o1.get(0)));
|
|
|
+ stringBuffer.append(list.get(0).get(1).toString()).append("、")
|
|
|
+ .append(list.get(1).get(1).toString()).append("、")
|
|
|
+ .append(list.get(2).get(1).toString())
|
|
|
+ .append("</font>超时工单数量较多。平均处理时长:本月相对较长的地市为<font color=#FF0000>");
|
|
|
+
|
|
|
+ list = new ArrayList<>();
|
|
|
+ for (int i = 2; i < 14; i++) {
|
|
|
+ List<Object> list2 = new ArrayList<>();
|
|
|
+ list.add(list2);
|
|
|
+ list2.add(0, sheet.getRow(i).getCell(8).getNumericCellValue());
|
|
|
+ list2.add(1, sheet.getRow(i).getCell(6).getStringCellValue());
|
|
|
+ }
|
|
|
+ list.sort((o1, o2) -> Double.compare((double) o2.get(0), (double) o1.get(0)));
|
|
|
+ stringBuffer.append(list.get(0).get(1).toString()).append("、")
|
|
|
+ .append(list.get(1).get(1).toString()).append("、")
|
|
|
+ .append(list.get(2).get(1).toString()).append("</font>;与")
|
|
|
+ .append(sheet.getRow(1).getCell(7).getStringCellValue()).append("比<font color=#FF0000>")
|
|
|
+ .append(sheet.getRow(2).getCell(6).getStringCellValue()).append("</font>时长增幅较大。");
|
|
|
+ }
|
|
|
+ TextUtil.writeToFileWithUTF8(stringBuffer.toString(), Paths.get(file.getParent(), "总结.txt").toString());
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error("读取excel文件出错:{}", e.getMessage());
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 截图
|
|
|
*/
|
|
@@ -80,20 +203,28 @@ public class ReportServiceV3 {
|
|
|
area = "A1:" + CellRect.getColumnName(dayOfMonth + 7) + "15";
|
|
|
screenShot = PoiUtil.screenShot(sheet, area, "微软雅黑");
|
|
|
ImageIO.write(screenShot, "png",
|
|
|
- Paths.get(file.getParentFile().getAbsolutePath(), "管理端-移网感知类" + day + ".png").toFile());
|
|
|
+ Paths.get(file.getParentFile().getAbsolutePath(), "管理端-移网感知类-" + day + ".png").toFile());
|
|
|
}
|
|
|
// 截图 服请
|
|
|
- // 截图 重复投诉 超时工单
|
|
|
+ // 截图 重复投诉
|
|
|
+ sheet = workbook.getSheet("管理端-重复投诉率");
|
|
|
+ if (sheet != null) {
|
|
|
+ area = "A1:G16";
|
|
|
+ screenShot = PoiUtil.screenShot(sheet, area, "微软雅黑");
|
|
|
+ ImageIO.write(screenShot, "png",
|
|
|
+ Paths.get(file.getParentFile().getAbsolutePath(), "管理端-重复投诉率-" + day + ".png").toFile());
|
|
|
+ }
|
|
|
+ // 截图 处理时长 超时工单
|
|
|
sheet = workbook.getSheet("投诉处理时长、超时工单概况");
|
|
|
if (sheet != null) {
|
|
|
area = "A1:D15";
|
|
|
screenShot = PoiUtil.screenShot(sheet, area, "微软雅黑");
|
|
|
ImageIO.write(screenShot, "png",
|
|
|
- Paths.get(file.getParentFile().getAbsolutePath(), "超时工单概况" + day + ".png").toFile());
|
|
|
- area = "G1:J14";
|
|
|
+ Paths.get(file.getParentFile().getAbsolutePath(), "超时工单概况-" + day + ".png").toFile());
|
|
|
+ area = "G1:J15";
|
|
|
screenShot = PoiUtil.screenShot(sheet, area, "微软雅黑");
|
|
|
ImageIO.write(screenShot, "png",
|
|
|
- Paths.get(file.getParentFile().getAbsolutePath(), "投诉处理时长" + day + ".png").toFile());
|
|
|
+ Paths.get(file.getParentFile().getAbsolutePath(), "投诉处理时长-" + day + ".png").toFile());
|
|
|
}
|
|
|
// 截图 移网综合投诉评价
|
|
|
sheet = workbook.getSheet("移网综合投诉评价");
|
|
@@ -101,7 +232,7 @@ public class ReportServiceV3 {
|
|
|
area = "A1:G15";
|
|
|
screenShot = PoiUtil.screenShot(sheet, area, "微软雅黑");
|
|
|
ImageIO.write(screenShot, "png",
|
|
|
- Paths.get(file.getParentFile().getAbsolutePath(), "移网综合投诉评价" + day + ".png").toFile());
|
|
|
+ Paths.get(file.getParentFile().getAbsolutePath(), "移网综合投诉评价-" + day + ".png").toFile());
|
|
|
}
|
|
|
} catch (EncryptedDocumentException | IOException e) {
|
|
|
e.printStackTrace();
|
|
@@ -120,10 +251,12 @@ public class ReportServiceV3 {
|
|
|
writeSheet1(workbookWrapper, day);
|
|
|
log.info("帐期 {} 管理端-移网感知类 sheet写入成功", day);
|
|
|
// 1.2 写入 服请情况
|
|
|
- // 1.3 写入 投诉处理时长、超时工单概况
|
|
|
+ // 1.3 管理端-重复投诉率
|
|
|
+ writeSheetRepeatTs(workbookWrapper, day);
|
|
|
+ // 1.4 写入 投诉处理时长、超时工单概况
|
|
|
writeSheet3(workbookWrapper, day);
|
|
|
log.info("帐期 {} 投诉处理时长、超时工单概况 sheet写入成功", day);
|
|
|
- // 1.4 写入三率
|
|
|
+ // 1.5 写入三率
|
|
|
tslDataService.checkStatDayCount(day);
|
|
|
writeSheet4(workbookWrapper, day);
|
|
|
log.info("帐期 {} 客户端-三率 sheet写入成功", day);
|
|
@@ -139,6 +272,122 @@ public class ReportServiceV3 {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 管理端-重复投诉率
|
|
|
+ */
|
|
|
+ private void writeSheetRepeatTs(XSSFWorkbookWrapper workbookWrapper, String day) {
|
|
|
+ // 计算时间常数
|
|
|
+ Calendar calendar = Calendar.getInstance(Locale.CHINA);
|
|
|
+ try {
|
|
|
+ calendar.setTime(DAY_FORMAT.parse(day));
|
|
|
+ } catch (ParseException e) {
|
|
|
+ log.error("时间字符串解析失败--{}", day);
|
|
|
+ }
|
|
|
+ int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
|
|
+ int monthOfYear = calendar.get(Calendar.MONTH) + 1;
|
|
|
+ // 显示当前和前一天的对比
|
|
|
+ int preDayOfMonth = (dayOfMonth > 1) ? dayOfMonth - 1 : dayOfMonth;
|
|
|
+ Sheet sheet = workbookWrapper.getWorkbook().createSheet("管理端-重复投诉率");
|
|
|
+ Row row;
|
|
|
+ Cell cell;
|
|
|
+ // 第一行 标题栏
|
|
|
+ row = sheet.createRow(0);
|
|
|
+ cell = row.createCell(0);
|
|
|
+ cell.setCellValue(String.format("重复投诉率(1-%s)", dayOfMonth));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ // 合并单元格 A1 - G1
|
|
|
+ PoiUtil.addMergedRegion(sheet, 0, 0, 0, 6);
|
|
|
+ // 第二行
|
|
|
+ row = sheet.createRow(1);
|
|
|
+ cell = row.createCell(0);
|
|
|
+ cell.setCellValue("");
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ cell = row.createCell(1);
|
|
|
+ cell.setCellValue("工单数");
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ // 合并单元格 B2-C2
|
|
|
+ PoiUtil.addMergedRegion(sheet, 1, 1, 1, 2);
|
|
|
+ cell = row.createCell(3);
|
|
|
+ cell.setCellValue("重复投诉率");
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ // 合并单元格 B2-C2
|
|
|
+ PoiUtil.addMergedRegion(sheet, 1, 1, 3, 4);
|
|
|
+ cell = row.createCell(5);
|
|
|
+ cell.setCellValue("增量");
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ // 合并单元格 F2-G2
|
|
|
+ PoiUtil.addMergedRegion(sheet, 1, 1, 5, 6);
|
|
|
+ // 第三行
|
|
|
+ row = sheet.createRow(2);
|
|
|
+ cell = row.createCell(0);
|
|
|
+ cell.setCellValue("地市");
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ cell = row.createCell(1);
|
|
|
+ cell.setCellValue(String.format("%s月截止%s日", monthOfYear, preDayOfMonth));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ cell = row.createCell(2);
|
|
|
+ cell.setCellValue(String.format("%s月截止%s日", monthOfYear, dayOfMonth));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ cell = row.createCell(3);
|
|
|
+ cell.setCellValue(String.format("%s月截止%s日", monthOfYear, preDayOfMonth));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ cell = row.createCell(4);
|
|
|
+ cell.setCellValue(String.format("%s月截止%s日", monthOfYear, dayOfMonth));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ cell = row.createCell(5);
|
|
|
+ cell.setCellValue("工单数");
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ cell = row.createCell(6);
|
|
|
+ cell.setCellValue("重复投诉率");
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle3());
|
|
|
+ // 从数据库读取 客户端 重复投诉数据
|
|
|
+ List<List<Object>> sheet2Data = managementDetailService.getRepeatTsDataV3(day);
|
|
|
+ int rowNum = 3;
|
|
|
+ for (List<Object> list : sheet2Data) {
|
|
|
+ row = sheet.createRow(rowNum++);
|
|
|
+ cell = row.createCell(0);
|
|
|
+ // 地市
|
|
|
+ cell.setCellValue(list.get(0).toString());
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle1());
|
|
|
+ // 前一天重复工单数
|
|
|
+ cell = row.createCell(1);
|
|
|
+ cell.setCellValue(((double) list.get(1)));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle1());
|
|
|
+ // 当天重复工单数
|
|
|
+ cell = row.createCell(2);
|
|
|
+ cell.setCellValue(((double) list.get(2)));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle1());
|
|
|
+ // 前一天重复投诉率
|
|
|
+ cell = row.createCell(3);
|
|
|
+ cell.setCellValue(((double) list.get(3)));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle2());
|
|
|
+ // 当前重复投诉率
|
|
|
+ cell = row.createCell(4);
|
|
|
+ cell.setCellValue(((double) list.get(4)));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle2());
|
|
|
+ // 重复工单增量
|
|
|
+ cell = row.createCell(5);
|
|
|
+ cell.setCellValue(((double) list.get(5)));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle1());
|
|
|
+ // 重复投诉率增量
|
|
|
+ cell = row.createCell(6);
|
|
|
+ cell.setCellValue(((double) list.get(6)));
|
|
|
+ cell.setCellStyle(workbookWrapper.getCellStyle2());
|
|
|
+ }
|
|
|
+ // 添加条件格式F4-F15
|
|
|
+ PoiUtil.setConditionalFormattingRedToGreen(sheet, 3, 14, 5, 5);
|
|
|
+ // 添加条件格式G4-G15
|
|
|
+ PoiUtil.setConditionalFormattingRedToGreen(sheet, 3, 14, 6, 6);
|
|
|
+ // 设置列宽2048
|
|
|
+ for (int i = 0; i <= 6; i++) {
|
|
|
+ sheet.setColumnWidth(i, 2848);
|
|
|
+ }
|
|
|
+ // 设置行高 15.0 ...
|
|
|
+ for (int i = 0; i < 16; i++) {
|
|
|
+ sheet.getRow(i).setHeightInPoints(15.0F);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 移网综合投诉评价
|
|
|
*/
|