| | |
| | | import com.panzhihua.common.model.vos.LoginUserInfoVO; |
| | | import com.panzhihua.common.model.vos.sangeshenbian.SystemUserVo; |
| | | import com.panzhihua.common.redis.RedisUtils; |
| | | import com.panzhihua.common.utlis.DateUtils; |
| | | import com.panzhihua.common.utlis.StringUtils; |
| | | import com.panzhihua.sangeshenbian.config.AutoColumnWidthStrategy; |
| | | import com.panzhihua.sangeshenbian.dao.ComplaintMapper; |
| | | import com.panzhihua.sangeshenbian.enums.AuditStatusEnum; |
| | | import com.panzhihua.sangeshenbian.enums.ComplaintExportEnum; |
| | | import com.panzhihua.sangeshenbian.enums.ProcessStatusEnum; |
| | | import com.panzhihua.sangeshenbian.enums.RateEnum; |
| | | import com.panzhihua.sangeshenbian.enums.ReportTypeEnum; |
| | | import com.panzhihua.sangeshenbian.enums.*; |
| | | import com.panzhihua.sangeshenbian.model.dto.*; |
| | | import com.panzhihua.sangeshenbian.model.entity.*; |
| | | import com.panzhihua.sangeshenbian.model.excel.ComplaintExcel; |
| | | import com.panzhihua.sangeshenbian.model.query.AnalyticStatisticsQuery; |
| | | import com.panzhihua.sangeshenbian.model.query.BasePage; |
| | | import com.panzhihua.sangeshenbian.model.query.ComplaintQuery; |
| | | import com.panzhihua.sangeshenbian.model.vo.ComplaintTodoVO; |
| | | import com.panzhihua.sangeshenbian.model.vo.ComplaintVO; |
| | | import com.panzhihua.sangeshenbian.model.vo.DispatchVO; |
| | | import com.panzhihua.sangeshenbian.model.vo.*; |
| | | import com.panzhihua.sangeshenbian.service.*; |
| | | import com.panzhihua.sangeshenbian.warpper.IdentityInformation; |
| | | import com.panzhihua.sangeshenbian.warpper.MgtComplaintQuery; |
| | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.net.URLEncoder; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.Duration; |
| | | import java.time.LocalDate; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.hutool.core.util.ObjectUtil.isNull; |
| | | |
| | |
| | | complaint.setCompletionUserPhone(loginUserInfoVO.getPhone()); |
| | | complaint.setCompletionTime(new Date()); |
| | | complaint.setCompletionUserLevel(accountLevel); |
| | | // 计算处理时间 |
| | | Date createTime = complaint.getCreateTime(); |
| | | long l = Duration.between(createTime.toInstant(), complaint.getCompletionTime().toInstant()).getSeconds() / 3600; |
| | | double handlingDay = new BigDecimal(l).divide(new BigDecimal("24"), 2, RoundingMode.HALF_UP).doubleValue(); |
| | | complaint.setHandlingDay(handlingDay); |
| | | this.updateById(complaint); |
| | | } |
| | | |
| | |
| | | complaintAuditRecord.setDepartmentName(departmentName); |
| | | complaintAuditRecord.setReporterLevel(reporterLevel); |
| | | complaintAuditRecord.setReporterId(reporterId); |
| | | complaintAuditRecord.setApplyName(reporter); |
| | | complaintAuditRecordService.save(complaintAuditRecord); |
| | | } |
| | | |
| | |
| | | record1.setSort(count + 1); |
| | | record1.setComment(dto.getComment()); |
| | | record1.setDepartmentName(departmentName); |
| | | // 冗余申请人名称 |
| | | record1.setApplyName(reporter); |
| | | complaintAuditRecordService.save(record1); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | public static void main(String[] args) { |
| | | try { |
| | | /*文本*/ |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("community", "社区社区"); |
| | | map.put("problemType", "就业"); |
| | | map.put("descriptionContent", "描述内容"); |
| | | map.put("reportType", "党员"); |
| | | map.put("partyOrganization", "石羊党群"); |
| | | map.put("name", "张三"); |
| | | map.put("contactNumber", "1888888888"); |
| | | map.put("nickname", "李四"); |
| | | map.put("phone", "17777777777"); |
| | | // 在文本中直接使用换行符 |
| | | String content = "第一行内容\n第二行内容\n第三行内容"; |
| | | map.put("complaintProgress", content); |
| | | map.put("status", "处理中"); |
| | | XWPFTemplate.compile("F:\\DeskTop\\zhihuishequ\\springcloud_k8s_panzhihuazhihuishequ\\service_sangeshenbian\\src\\main\\resources\\template\\community_question.docx").render(map).writeToFile("F:\\DeskTop\\社区.docx"); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | // public static void main(String[] args) { |
| | | // try { |
| | | // /*文本*/ |
| | | // Map<String, Object> map = new HashMap<>(); |
| | | // map.put("community", "社区社区"); |
| | | // map.put("problemType", "就业"); |
| | | // map.put("descriptionContent", "描述内容"); |
| | | // map.put("reportType", "党员"); |
| | | // map.put("partyOrganization", "石羊党群"); |
| | | // map.put("name", "张三"); |
| | | // map.put("contactNumber", "1888888888"); |
| | | // map.put("nickname", "李四"); |
| | | // map.put("phone", "17777777777"); |
| | | // // 在文本中直接使用换行符 |
| | | // String content = "第一行内容\n第二行内容\n第三行内容"; |
| | | // map.put("complaintProgress", content); |
| | | // map.put("status", "处理中"); |
| | | // XWPFTemplate.compile("F:\\DeskTop\\zhihuishequ\\springcloud_k8s_panzhihuazhihuishequ\\service_sangeshenbian\\src\\main\\resources\\template\\community_question.docx").render(map).writeToFile("F:\\DeskTop\\社区.docx"); |
| | | // } catch (IOException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | |
| | | |
| | | /** |
| | |
| | | complaintProgressService.removeById(id); |
| | | } |
| | | |
| | | @Override |
| | | public AnalyticStatisticsOneVo analyticStatisticsOne(AnalyticStatisticsQuery query,List<Complaint> complaints, SimpleDateFormat simpleDateFormat) { |
| | | String nowYearMonth; |
| | | String lastYearMonth; |
| | | int value = LocalDate.now().getMonth().getValue(); |
| | | if(value<10){ |
| | | nowYearMonth = LocalDate.now().getYear() + "-0" + LocalDate.now().getMonth().getValue(); |
| | | }else { |
| | | nowYearMonth = LocalDate.now().getYear() + "-" + LocalDate.now().getMonth().getValue(); |
| | | } |
| | | int value1 = LocalDate.now().minusMonths(1).getMonth().getValue(); |
| | | if(value1<10){ |
| | | lastYearMonth = LocalDate.now().minusMonths(1).getYear() + "-0" + LocalDate.now().minusMonths(1).getMonth().getValue(); |
| | | }else { |
| | | lastYearMonth = LocalDate.now().minusMonths(1).getYear() + "-" + LocalDate.now().minusMonths(1).getMonth().getValue(); |
| | | } |
| | | |
| | | |
| | | AnalyticStatisticsOneVo vo = new AnalyticStatisticsOneVo(); |
| | | |
| | | // 诉求单量总计 |
| | | vo.setAllTotal(complaints.size()); |
| | | |
| | | // 诉求单量本月 |
| | | int thisMonthTotal = (int)complaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(nowYearMonth)).count(); |
| | | vo.setThisMonthTotal( thisMonthTotal); |
| | | |
| | | // 诉求单量同比上月 |
| | | int lastMonthTotal = (int)complaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(lastYearMonth)).count(); |
| | | vo.setLastMonthCompareTotal(thisMonthTotal- lastMonthTotal); |
| | | |
| | | // 正在办理 |
| | | int nowTransactTotal = (int) complaints.stream().filter(e -> e.getStatus() == 0).count(); |
| | | vo.setNowTransactTotal(nowTransactTotal); |
| | | |
| | | // 审核中 |
| | | int auditTransactTotal = (int) complaints.stream().filter(e -> e.getStatus() == 5 || e.getStatus() == 7).count(); |
| | | vo.setAuditTransactTotal(auditTransactTotal); |
| | | |
| | | // 延期办理 |
| | | int postponeTransactTotal = (int) complaints.stream().filter(e -> e.getStatus() == 1).count(); |
| | | vo.setPostponeTransactTotal(postponeTransactTotal); |
| | | |
| | | // 已办结 |
| | | int completeTransactTotal = (int) complaints.stream().filter(e -> e.getStatus() == 3).count(); |
| | | vo.setCompleteTransactTotal(completeTransactTotal); |
| | | |
| | | // 超时办理总量 |
| | | List<Complaint> overtimeComplaints = complaints.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList()); |
| | | vo.setOvertimeTransactTotal(overtimeComplaints.size()); |
| | | |
| | | // 超时办理本月 |
| | | int thisMonthOvertimeTransactTotal = (int) overtimeComplaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(nowYearMonth)).count(); |
| | | vo.setThisMonthOvertimeTransactTotal(thisMonthOvertimeTransactTotal); |
| | | |
| | | // 超时办理同比上月 |
| | | int lastMonthOvertimeTransactTotal = (int) overtimeComplaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(lastYearMonth)).count(); |
| | | vo.setLastMonthOvertimeTransactCompareTotal(thisMonthOvertimeTransactTotal-lastMonthOvertimeTransactTotal); |
| | | |
| | | // 平均处理时长 |
| | | if(complaints.size()>0) { |
| | | double averageDay = complaints.stream().mapToDouble(v -> v.getHandlingDay() == null ? 0 : v.getHandlingDay()).average().getAsDouble(); |
| | | averageDay = BigDecimal.valueOf(averageDay).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | vo.setAverageTime(averageDay); |
| | | |
| | | List<Complaint> thisMonthAverageTimeComplaints = complaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(nowYearMonth)).collect(Collectors.toList()); |
| | | if(thisMonthAverageTimeComplaints.size()>0){ |
| | | double thisMonthAverageTime = thisMonthAverageTimeComplaints.stream().mapToDouble(v -> v.getHandlingDay() == null ? 0 : v.getHandlingDay()).average().getAsDouble(); |
| | | thisMonthAverageTime = BigDecimal.valueOf(thisMonthAverageTime).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | vo.setThisMonthAverageTime(thisMonthAverageTime); |
| | | } |
| | | List<Complaint> lastMonthAverageTimeComplaints = complaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(lastYearMonth)).collect(Collectors.toList()); |
| | | if(lastMonthAverageTimeComplaints.size()>0){ |
| | | double lastMonthAverageTime = lastMonthAverageTimeComplaints.stream().mapToDouble(v -> v.getHandlingDay() == null ? 0 : v.getHandlingDay()).average().getAsDouble(); |
| | | lastMonthAverageTime = BigDecimal.valueOf(lastMonthAverageTime).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | vo.setAverageTime(vo.getThisMonthAverageTime() - lastMonthAverageTime); |
| | | } |
| | | |
| | | } |
| | | // 获取评价了的诉求 |
| | | List<Complaint> commentRateComplaints = complaints.stream().filter(e -> e.getCommentRate() != null).collect(Collectors.toList()); |
| | | long count = commentRateComplaints.stream().filter(e -> e.getCommentRate() > 1).count(); |
| | | int size = commentRateComplaints.size(); |
| | | if(size>0){ |
| | | BigDecimal multiply = BigDecimal.valueOf(count).divide(new BigDecimal(size), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); |
| | | vo.setSatisfactionRate(multiply.doubleValue()); |
| | | |
| | | List<Complaint> nowMonth = commentRateComplaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(nowYearMonth)).collect(Collectors.toList()); |
| | | // 当月满意 |
| | | long count1 = nowMonth.stream().filter(e -> e.getCommentRate() > 1).count(); |
| | | // 当月的评价数 |
| | | int nowMonthSize = nowMonth.size(); |
| | | if(nowMonthSize>0){ |
| | | BigDecimal multiply1 = BigDecimal.valueOf(count1).divide(new BigDecimal(nowMonthSize), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); |
| | | vo.setThisMonthSatisfactionRate(multiply1.doubleValue()); |
| | | } |
| | | |
| | | List<Complaint> lastMonth = commentRateComplaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(nowYearMonth)).collect(Collectors.toList()); |
| | | // 当月满意 |
| | | long count2 = lastMonth.stream().filter(e -> e.getCommentRate() > 1).count(); |
| | | // 当月的评价数 |
| | | int lastMonthSize = lastMonth.size(); |
| | | if(lastMonthSize>0){ |
| | | BigDecimal multiply2 = BigDecimal.valueOf(count2).divide(new BigDecimal(lastMonthSize), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); |
| | | vo.setLastMonthCompareSatisfactionRate(vo.getThisMonthSatisfactionRate()-multiply2.doubleValue()); |
| | | } |
| | | } |
| | | return vo; |
| | | } |
| | | |
| | | @Override |
| | | public List<AnalyticStatisticsTwoVo> analyticStatisticsTwo(AnalyticStatisticsQuery query, List<Complaint> complaints, SimpleDateFormat simpleDateFormat) { |
| | | ArrayList<AnalyticStatisticsTwoVo> list = new ArrayList<>(); |
| | | try { |
| | | if (StringUtils.isNotEmpty(query.getTime())) { |
| | | String[] split = query.getTime().split(" - "); |
| | | Date parse = simpleDateFormat.parse(split[0] + " 00:00:00"); |
| | | Date parse1 = simpleDateFormat.parse(split[1] + " 23:59:59"); |
| | | complaints = complaints.stream().filter(e -> e.getCreateTime().getTime() <= parse1.getTime() && e.getCreateTime().getTime() >= parse.getTime()).collect(Collectors.toList()); |
| | | int day = DateUtils.getDay(parse, parse1); |
| | | |
| | | for (int i = 0; i <= day; i++) { |
| | | AnalyticStatisticsTwoVo analyticStatisticsTwoVo = new AnalyticStatisticsTwoVo(); |
| | | if(i==0){ |
| | | List<Complaint> collect = complaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(split[0])).collect(Collectors.toList()); |
| | | analyticStatisticsTwoVo.setTime(split[0]); |
| | | analyticStatisticsTwoVo.setAllTotal(collect.size()); |
| | | int count = (int) collect.stream().filter(e -> e.getStatus() == 3).count(); |
| | | analyticStatisticsTwoVo.setCompleteTotal(count); |
| | | list.add(analyticStatisticsTwoVo); |
| | | }else { |
| | | String nextDay = DateUtils.getNextDay(parse, i); |
| | | List<Complaint> collect = complaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(nextDay)).collect(Collectors.toList()); |
| | | analyticStatisticsTwoVo.setTime(nextDay); |
| | | analyticStatisticsTwoVo.setAllTotal(collect.size()); |
| | | int count = (int) collect.stream().filter(e -> e.getStatus() == 3).count(); |
| | | analyticStatisticsTwoVo.setCompleteTotal(count); |
| | | list.add(analyticStatisticsTwoVo); |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | String time = DateUtils.getBeforeDay(6) + " 00:00:00"; |
| | | Date parse = simpleDateFormat.parse(time); |
| | | // 近7天数据 |
| | | complaints = complaints.stream().filter(e -> e.getCreateTime().getTime() <= new Date().getTime() && e.getCreateTime().getTime() >= parse.getTime()).collect(Collectors.toList()); |
| | | |
| | | for (int i = 6; i > 0; i--) { |
| | | // 获取前7天的时间 |
| | | String day = DateUtils.getBeforeDay(i); |
| | | List<Complaint> complaintList = complaints.stream().filter(e -> simpleDateFormat.format(e.getCreateTime()).contains(day)).collect(Collectors.toList()); |
| | | AnalyticStatisticsTwoVo analyticStatisticsTwoVo = new AnalyticStatisticsTwoVo(); |
| | | analyticStatisticsTwoVo.setTime(day); |
| | | analyticStatisticsTwoVo.setAllTotal(complaintList.size()); |
| | | int count = (int) complaintList.stream().filter(e -> e.getStatus() == 3).count(); |
| | | analyticStatisticsTwoVo.setCompleteTotal(count); |
| | | list.add(analyticStatisticsTwoVo); |
| | | } |
| | | |
| | | } |
| | | } catch (ParseException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | public List<AnalyticStatisticsThreeVo> analyticStatisticsThree(AnalyticStatisticsQuery query, List<Complaint> complaints) { |
| | | Map<String, List<Complaint>> groupedByProblemType = complaints.stream() |
| | | .collect(Collectors.groupingBy(Complaint::getProblemType)); |
| | | List<AnalyticStatisticsThreeVo> analyticStatisticsThreeVos = groupedByProblemType.entrySet().stream() |
| | | .map(entry -> { |
| | | AnalyticStatisticsThreeVo analyticStatisticsThreeVo = new AnalyticStatisticsThreeVo(); |
| | | analyticStatisticsThreeVo.setName(entry.getKey()); |
| | | analyticStatisticsThreeVo.setAllTotal(entry.getValue().size()); |
| | | return analyticStatisticsThreeVo; |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | analyticStatisticsThreeVos = analyticStatisticsThreeVos.stream().sorted(Comparator.comparing(AnalyticStatisticsThreeVo::getAllTotal).reversed()).collect(Collectors.toList()); |
| | | if(query.getRank()==null){ |
| | | return analyticStatisticsThreeVos; |
| | | }else if(query.getRank()==5){ |
| | | return analyticStatisticsThreeVos.stream().limit(5).collect(Collectors.toList()); |
| | | }else if(query.getRank()==10){ |
| | | return analyticStatisticsThreeVos.stream().limit(10).collect(Collectors.toList()); |
| | | } |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | |
| | | } |
| | | |