springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/api/AnalyticStatisticsController.java
New file @@ -0,0 +1,76 @@ package com.panzhihua.sangeshenbian.api; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.utlis.DateUtils; import com.panzhihua.sangeshenbian.model.entity.Complaint; import com.panzhihua.sangeshenbian.model.query.AnalyticStatisticsQuery; import com.panzhihua.sangeshenbian.model.vo.AnalyticStatisticsOneVo; import com.panzhihua.sangeshenbian.model.vo.AnalyticStatisticsThreeVo; import com.panzhihua.sangeshenbian.model.vo.AnalyticStatisticsTwoVo; import com.panzhihua.sangeshenbian.service.IComplaintService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.text.SimpleDateFormat; import java.util.List; /** * <p> * 分析统计 前端控制器 * </p> * * @author * @since 2025-04-28 */ @RestController @RequestMapping("/analytic-statistics") @Validated public class AnalyticStatisticsController { @Autowired private IComplaintService complaintService; @PostMapping("/data") @ApiOperation(value = "分析统计", tags = {"三个身边后台-分析统计"}) public R<?> data(@Valid @RequestBody AnalyticStatisticsQuery query){ // TODO 判断当前账号的层级 如果包含市级 可以查看所有 包含区县多个 包含镇多个 包含村多个 LambdaQueryWrapper<Complaint> wrapper = new LambdaQueryWrapper<Complaint>().eq(Complaint::getCityCode, query.getCityCode()); if(query.getDistrictCode()!=null){ wrapper.eq(Complaint::getDistrictsCode, query.getDistrictCode()); } if(query.getStreetId()!=null){ wrapper.eq(Complaint::getStreetId, query.getStreetId()); } if(query.getCommunityId()!=null){ wrapper.eq(Complaint::getCommunityId, query.getCommunityId()); } SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List<Complaint> complaints =complaintService.list(wrapper); // 第一部分数据 AnalyticStatisticsOneVo analyticStatisticsOneVo = complaintService.analyticStatisticsOne(query,complaints,simpleDateFormat); // 第二部分数据 List<AnalyticStatisticsTwoVo> analyticStatisticsTwoVos =complaintService.analyticStatisticsTwo(query,complaints,simpleDateFormat); // 第三部分数据 List<AnalyticStatisticsThreeVo> analyticStatisticsThreeVos =complaintService.analyticStatisticsThree(query,complaints); return R.ok(analyticStatisticsThreeVos); } public static void main(String[] args) { String beforeDay = DateUtils.getBeforeDay(6); System.out.println(beforeDay); } } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/api/ComplaintRejectController.java
New file @@ -0,0 +1,41 @@ package com.panzhihua.sangeshenbian.api; import com.baomidou.mybatisplus.core.metadata.IPage; import com.panzhihua.common.model.vos.R; import com.panzhihua.sangeshenbian.model.query.ComplaintRejectQuery; import com.panzhihua.sangeshenbian.model.vo.ComplaintRejectVo; import com.panzhihua.sangeshenbian.service.IComplaintRejectService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * <p> * 诉求驳回表 前端控制器 * </p> * * @author * @since 2025-04-30 */ @RestController @RequestMapping("/complaint-reject") @Api public class ComplaintRejectController { @Resource private IComplaintRejectService complaintRejectService; @GetMapping("/list") @ApiOperation(value = "获取问题驳回统计列表", tags = {"三个身边后台-问题驳回统计"}) public R<IPage<ComplaintRejectVo>> list(ComplaintRejectQuery query){ IPage<ComplaintRejectVo> list = complaintRejectService.getComplaintRejectList(query); return R.ok(list); } } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/controller/ComplaintController.java
@@ -142,6 +142,7 @@ return R.ok(); } /** * 诉求下派 */ @@ -215,6 +216,7 @@ complaintCommentService.save(complaintComment); Complaint complaint = complaintService.getById(complaintComment.getComplaintId()); complaint.setStatus(8); complaint.setCommentRate(complaintComment.getRate()); complaintService.updateById(complaint); return R.ok(); } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/dao/ComplaintRejectMapper.java
New file @@ -0,0 +1,26 @@ package com.panzhihua.sangeshenbian.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.panzhihua.sangeshenbian.model.entity.ComplaintReject; import com.panzhihua.sangeshenbian.model.query.ComplaintRejectQuery; import com.panzhihua.sangeshenbian.model.vo.ComplaintRejectVo; import org.apache.ibatis.annotations.Param; /** * <p> * 诉求驳回表 Mapper 接口 * </p> * * @author * @since 2025-04-30 */ public interface ComplaintRejectMapper extends BaseMapper<ComplaintReject> { IPage<ComplaintRejectVo> getComplaintRejectList(@Param("page") Page<ComplaintRejectVo> page, @Param("applyStartTime") String applyStartTime, @Param("applyEndTime") String applyEndTime, @Param("examineStartTime") String examineStartTime, @Param("examineEndTime") String examineEndTime, @Param("query") ComplaintRejectQuery query); } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/dao/SystemLogMapper.java
@@ -18,4 +18,6 @@ IPage<SystemLog> getLogList(@Param("page") Page page, @Param("sTime") String sTime, @Param("eTime") String eTime, @Param("operatorName") String operatorName, @Param("operatorPhone") String operatorPhone, @Param("operatorCategory") String operatorCategory, @Param("ip") String ip); } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/model/entity/Complaint.java
@@ -203,4 +203,12 @@ @ApiModelProperty(value = "语音文件") @TableField("voice_file") private String voiceFile; @ApiModelProperty(value = "处理天数") @TableField("handling_day") private Double handlingDay; @ApiModelProperty(value = "评价") @TableField("comment_rate") private Integer commentRate; } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/model/entity/ComplaintAuditRecord.java
@@ -1,19 +1,18 @@ package com.panzhihua.sangeshenbian.model.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import java.util.Date; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Date; /** * <p> @@ -123,4 +122,14 @@ @ApiModelProperty("审核人联系方式") @TableField("auditor_phone") private String auditorPhone; @ApiModelProperty("申请人id") @TableField("apply_id") private Long applyId; @ApiModelProperty("申请人id名称") @TableField("apply_name") private String applyName; } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/model/entity/ComplaintReject.java
New file @@ -0,0 +1,60 @@ package com.panzhihua.sangeshenbian.model.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * 诉求驳回表 * </p> * * @author * @since 2025-04-30 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("sgsb_complaint_reject") @ApiModel(value="ComplaintReject对象", description="诉求驳回表") public class ComplaintReject implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主键ID") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "诉求id") private Long complaintId; @ApiModelProperty(value = "1上级 2党员") private Integer userType; @ApiModelProperty(value = "审批人id") private Long userId; @ApiModelProperty(value = "驳回理由") private String remark; @ApiModelProperty(value = "流转类型 0-上报 1-下派") private Boolean type; @ApiModelProperty(value = "创建时间") private LocalDateTime createTime; @ApiModelProperty(value = "1上报驳回 2延期驳回") private Boolean complaintType; @ApiModelProperty(value = "申请驳回记录id ") private Long complaintAuditId; } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/model/query/AnalyticStatisticsQuery.java
New file @@ -0,0 +1,22 @@ package com.panzhihua.sangeshenbian.model.query; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel("数据统计数据传输对象") public class AnalyticStatisticsQuery { @ApiModelProperty("城市编码") private Integer cityCode; @ApiModelProperty("区县编码") private Integer districtCode; @ApiModelProperty("街道id") private Long streetId; @ApiModelProperty("社区id") private Long communityId; @ApiModelProperty("2022-02-02 - 2023-02-02") private String time; @ApiModelProperty("5 10 不传是所有") private Integer rank; } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/model/query/ComplaintRejectQuery.java
New file @@ -0,0 +1,28 @@ package com.panzhihua.sangeshenbian.model.query; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel("问题驳回统计查询对象") public class ComplaintRejectQuery extends BasePage{ @ApiModelProperty("诉求号") private String serialNumber; @ApiModelProperty("录入人") private String reportUserName; @ApiModelProperty("录入人联系方式") private String reportUserPhone; @ApiModelProperty("申请人") private String applyUserName; @ApiModelProperty("审批人") private String examineUserName; @ApiModelProperty("申请时间 2022-02-02 - 2022-03-03") private String applyTime; @ApiModelProperty("审批时间 2022-02-02 - 2022-03-03") private String examineTime; @ApiModelProperty("诉求状态 0-正在办理 1-延期办理 2-超时办理 3-已办结 4-群众撤销 5-上报待审核 6-上级驳回 7-延期待审核 8-已评价 9-延期驳回") private Integer status; } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/model/vo/AnalyticStatisticsFourVo.java
New file @@ -0,0 +1,22 @@ package com.panzhihua.sangeshenbian.model.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel("数据统计第四部分Vo") public class AnalyticStatisticsFourVo { @ApiModelProperty("非常满意") private Double greatSatisfactionRate; @ApiModelProperty("满意") private Double satisfactionRate; @ApiModelProperty("一般") private Double generalSatisfactionRate; @ApiModelProperty("不满意") private Double dissatisfactionRate; } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/model/vo/AnalyticStatisticsOneVo.java
New file @@ -0,0 +1,43 @@ package com.panzhihua.sangeshenbian.model.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel("数据统计第一部分Vo") public class AnalyticStatisticsOneVo { @ApiModelProperty("诉求单量总计") private Integer allTotal; @ApiModelProperty("诉求单量本月") private Integer thisMonthTotal; @ApiModelProperty("诉求单量同比上月") private Integer lastMonthCompareTotal; @ApiModelProperty("正在办理") private Integer nowTransactTotal; @ApiModelProperty("审核中") private Integer auditTransactTotal; @ApiModelProperty("延期办理") private Integer postponeTransactTotal; @ApiModelProperty("已办结") private Integer completeTransactTotal; @ApiModelProperty("超时办理总量") private Integer overtimeTransactTotal; @ApiModelProperty("超时办理本月") private Integer thisMonthOvertimeTransactTotal; @ApiModelProperty("超时办理同比上月") private Integer lastMonthOvertimeTransactCompareTotal; @ApiModelProperty("平均处理时长") private Double averageTime=0.0; @ApiModelProperty("处理时长本月") private Double thisMonthAverageTime=0.0; @ApiModelProperty("处理时长同比上月") private Double lastMonthCompareAverageTime=0.0; @ApiModelProperty("总体满意率") private Double satisfactionRate=0.0; @ApiModelProperty("满意率本月") private Double thisMonthSatisfactionRate=0.0; @ApiModelProperty("满意率同比上月") private Double lastMonthCompareSatisfactionRate=0.0; } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/model/vo/AnalyticStatisticsThreeVo.java
New file @@ -0,0 +1,15 @@ package com.panzhihua.sangeshenbian.model.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel("数据统计第三部分Vo") public class AnalyticStatisticsThreeVo { @ApiModelProperty("类型名称") private String name; @ApiModelProperty("诉求数量") private Integer allTotal; } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/model/vo/AnalyticStatisticsTwoVo.java
New file @@ -0,0 +1,17 @@ package com.panzhihua.sangeshenbian.model.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel("数据统计第二部分Vo") public class AnalyticStatisticsTwoVo { @ApiModelProperty("诉求单量") private Integer allTotal; @ApiModelProperty("诉求办结数") private Integer completeTotal; @ApiModelProperty("时间") private String time; } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/model/vo/ComplaintRejectVo.java
New file @@ -0,0 +1,31 @@ package com.panzhihua.sangeshenbian.model.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel("问题驳回Vo") public class ComplaintRejectVo { @ApiModelProperty(value = "诉求Id") private Long complaintId; @ApiModelProperty("诉求号") private String serialNumber; @ApiModelProperty("录入人") private String reportUserName; @ApiModelProperty("录入人联系方式") private String reportUserPhone; @ApiModelProperty("申请人") private String applyUserName; @ApiModelProperty("审批人") private String examineUserName; @ApiModelProperty("申请时间 2022-02-02 - 2022-03-03") private String applyTime; @ApiModelProperty("审批时间 2022-02-02 - 2022-03-03") private String examineTime; @ApiModelProperty("驳回理由") private String remark; @ApiModelProperty("诉求状态 0-正在办理 1-延期办理 2-超时办理 3-已办结 4-群众撤销 5-上报待审核 6-上级驳回 7-延期待审核 8-已评价 9-延期驳回") private Integer status; } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/scheduled/SystemLogTasks.java
New file @@ -0,0 +1,39 @@ package com.panzhihua.sangeshenbian.scheduled; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.panzhihua.sangeshenbian.model.entity.SystemLog; import com.panzhihua.sangeshenbian.service.ISystemLogService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDate; @Component @RequiredArgsConstructor @Slf4j public class SystemLogTasks { @Autowired private ISystemLogService systemLogService; /** * 每周一凌晨1点删除一年前的数据 */ @Scheduled(cron = "0 0 1 ? * 1") public void SystemLogDelTasks() { log.info("开始删除系统日志"); // 获取当前时间一年前的时间 String oneYearAgo = LocalDate.now().minusYears(1)+" 00:00:00"; systemLogService.remove(new LambdaQueryWrapper<SystemLog>().le(SystemLog::getCreateTime,oneYearAgo)); } } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/service/IComplaintRejectService.java
New file @@ -0,0 +1,26 @@ package com.panzhihua.sangeshenbian.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.panzhihua.sangeshenbian.model.entity.ComplaintReject; import com.baomidou.mybatisplus.extension.service.IService; import com.panzhihua.sangeshenbian.model.query.ComplaintRejectQuery; import com.panzhihua.sangeshenbian.model.vo.ComplaintRejectVo; /** * <p> * 诉求驳回表 服务类 * </p> * * @author * @since 2025-04-30 */ public interface IComplaintRejectService extends IService<ComplaintReject> { /** * 获取诉求驳回统计列表 * @param query * @return */ IPage<ComplaintRejectVo> getComplaintRejectList(ComplaintRejectQuery query); } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/service/IComplaintService.java
@@ -10,15 +10,15 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.panzhihua.sangeshenbian.model.entity.ComplaintAuditRecord; import com.panzhihua.sangeshenbian.model.entity.ComplaintProgress; 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.warpper.MgtComplaintQuery; import javax.validation.Valid; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.List; /** @@ -176,4 +176,30 @@ */ void delProgress(Long id); /** * 数据统计第一部分 * @param query * @return */ AnalyticStatisticsOneVo analyticStatisticsOne(AnalyticStatisticsQuery query,List<Complaint> complaints, SimpleDateFormat simpleDateFormat); /** * 数据统计第二部分 * @param query * @param complaints * @param simpleDateFormat * @return */ List<AnalyticStatisticsTwoVo> analyticStatisticsTwo(@Valid AnalyticStatisticsQuery query, List<Complaint> complaints, SimpleDateFormat simpleDateFormat); /**+ * 数据统计第三部分 * @param query * @param complaints * @return */ List<AnalyticStatisticsThreeVo> analyticStatisticsThree(@Valid AnalyticStatisticsQuery query, List<Complaint> complaints); } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/service/ISystemLogService.java
@@ -33,4 +33,6 @@ void addLogInfo(Long operatorId, String operatorCategory, String targetName,String ip,String operatorInto); } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/service/impl/ComplaintRejectServiceImpl.java
New file @@ -0,0 +1,44 @@ package com.panzhihua.sangeshenbian.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.sangeshenbian.dao.ComplaintRejectMapper; import com.panzhihua.sangeshenbian.model.entity.ComplaintReject; import com.panzhihua.sangeshenbian.model.query.ComplaintRejectQuery; import com.panzhihua.sangeshenbian.model.vo.ComplaintRejectVo; import com.panzhihua.sangeshenbian.service.IComplaintRejectService; import org.springframework.stereotype.Service; /** * <p> * 诉求驳回表 服务实现类 * </p> * * @author * @since 2025-04-30 */ @Service public class ComplaintRejectServiceImpl extends ServiceImpl<ComplaintRejectMapper, ComplaintReject> implements IComplaintRejectService { @Override public IPage<ComplaintRejectVo> getComplaintRejectList(ComplaintRejectQuery query) { Page<ComplaintRejectVo> page = new Page<>(query.getPageNum(), query.getPageSize()); String applyStartTime=null; String applyEndTime=null; String examineStartTime=null; String examineEndTime=null; if(StringUtils.isNotEmpty(query.getApplyTime())){ String[] split = query.getApplyTime().split(" - "); applyStartTime=split[0]+" 00:00:00"; applyEndTime=split[1]+" 23:59:59"; } if(StringUtils.isNotEmpty(query.getExamineTime())){ String[] split = query.getExamineTime().split(" - "); examineStartTime=split[0]+" 00:00:00"; examineEndTime=split[1]+" 23:59:59"; } return this.baseMapper.getComplaintRejectList(page,applyStartTime,applyEndTime,examineStartTime,examineEndTime,query); } } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/service/impl/ComplaintServiceImpl.java
@@ -12,22 +12,18 @@ 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; @@ -43,9 +39,15 @@ 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; @@ -649,6 +651,11 @@ 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); } @@ -772,6 +779,7 @@ complaintAuditRecord.setDepartmentName(departmentName); complaintAuditRecord.setReporterLevel(reporterLevel); complaintAuditRecord.setReporterId(reporterId); complaintAuditRecord.setApplyName(reporter); complaintAuditRecordService.save(complaintAuditRecord); } @@ -1027,6 +1035,8 @@ record1.setSort(count + 1); record1.setComment(dto.getComment()); record1.setDepartmentName(departmentName); // 冗余申请人名称 record1.setApplyName(reporter); complaintAuditRecordService.save(record1); } @@ -1376,28 +1386,28 @@ } 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(); // } // } /** @@ -1430,5 +1440,195 @@ 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(); } } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/service/impl/SystemLogServiceImpl.java
@@ -2,12 +2,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.sangeshenbian.model.entity.SystemLog; import com.panzhihua.sangeshenbian.dao.SystemLogMapper; import com.panzhihua.sangeshenbian.model.entity.SystemLog; import com.panzhihua.sangeshenbian.model.query.SystemLogQuery; import com.panzhihua.sangeshenbian.service.ISystemLogService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** @@ -47,4 +47,5 @@ systemLog.setOperatorInto(operatorInto); this.save(systemLog); } } springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/resources/mapper/ComplaintRejectMapper.xml
New file @@ -0,0 +1,44 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.panzhihua.sangeshenbian.dao.ComplaintRejectMapper"> <select id="getComplaintRejectList" resultType="com.panzhihua.sangeshenbian.model.vo.ComplaintRejectVo"> select t1.remark,t1.create_time examineTime,t2.id complaintId,t2.serial_number serialNumber,t2.report_user_name reportUserName,t2.status, t2.report_user_phone reportUserPhone,t3.auditor_name examineUserName,t3.create_time applyTime,t3.apply_name applyUserName from sgsb_complaint_reject t1 left join sgsb_complaint t2 on t1.complaint_id = t2.id left join sgsb_complaint_audit_record t3 on t1.complaint_audit_id = t3.id <where> <if test="query.serialNumber != null and query.serialNumber != ''"> and t2.serial_number = #{query.serialNumber} </if> <if test="query.reportUserName != null and query.reportUserName != ''"> and t2.report_user_name like concat("%",#{query.reportUserName},"%") </if> <if test="query.reportUserPhone != null and query.reportUserPhone != ''"> and t2.report_user_phone like concat("%",#{query.reportUserPhone},"%") </if> <if test="query.applyUserName != null and query.applyUserName != ''"> and t3.apply_name like concat("%",#{query.applyUserName},"%") </if> <if test="query.examineUserName != null and query.examineUserName != ''"> and t3.auditor_name like concat("%",#{query.examineUserName},"%") </if> <if test="applyStartTime !=null"> and t3.create_time between #{applyStartTime} and #{applyEndTime} </if> <if test="examineStartTime !=null"> and t1.create_time between #{applyStartTime} and #{applyEndTime} </if> </where> order by t1.create_time desc </select> </mapper> springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/resources/mapper/SystemLogMapper.xml
@@ -2,6 +2,7 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.panzhihua.sangeshenbian.dao.SystemLogMapper"> <select id="getLogList" resultType="com.panzhihua.sangeshenbian.model.entity.SystemLog"> select t1.id, t1.operator_id, t2.name as operatorName, t2.phone as operatorPhone, t1.operator_category, t1.target_name, t1.ip, t1.create_time, t1.operator_into from sgsb_system_log t1 left join sgsb_system_user t2 on t1.operator_id = t2.id @@ -23,4 +24,7 @@ </if> order by t1.create_time desc </select> </mapper>