双呼 和统计
parent
58732ba7ab
commit
2c94d18261
@ -0,0 +1,121 @@
|
||||
package com.baiye.modules.report.api;
|
||||
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.hutool.poi.excel.ExcelUtil;
|
||||
import cn.hutool.poi.excel.ExcelWriter;
|
||||
|
||||
import com.baiye.http.CommonResponse;
|
||||
import com.baiye.modules.report.entity.dto.StatisticalReportDTO;
|
||||
import com.baiye.modules.report.entity.dto.UploadTaskDTO;
|
||||
import com.baiye.modules.report.service.ReportService;
|
||||
import com.baiye.util.ExportExcelUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/14
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api")
|
||||
@Slf4j
|
||||
@Api(tags = "获取统计信息")
|
||||
public class ReportController {
|
||||
@Resource
|
||||
private ReportService reportService;
|
||||
|
||||
@GetMapping("/report/all")
|
||||
@ApiOperation("按任务分组的统计信息")
|
||||
public CommonResponse<Object> getReportByAll() {
|
||||
return reportService.getReportByAll();
|
||||
}
|
||||
|
||||
@PostMapping("/report/task")
|
||||
@ApiOperation("按任务的统计信息")
|
||||
public CommonResponse<Object> getReportByTask(@RequestBody StatisticalReportDTO s) {
|
||||
return reportService.getReportByTask(s);
|
||||
}
|
||||
|
||||
@GetMapping("/download/task")
|
||||
@ApiOperation("导出任务统计信息")
|
||||
public void downloadTaskReport(HttpServletResponse response, String s) {
|
||||
StatisticalReportDTO statisticalReportDTO = JSONUtil.toBean(s, StatisticalReportDTO.class);
|
||||
reportService.downloadTaskReport(response, statisticalReportDTO);
|
||||
}
|
||||
|
||||
// @GetMapping("/download/task")
|
||||
// @ApiOperation("hutool导出测试")
|
||||
// public void downloadTaskReport(HttpServletResponse response) {
|
||||
// UploadTask uploadTaskDTO = new UploadTask();
|
||||
// uploadTaskDTO.setCreateTime("2020");
|
||||
// uploadTaskDTO.setTaskName("ww");
|
||||
// uploadTaskDTO.setUsrNum(1);
|
||||
// UploadTask uploadTaskDTO1 = new UploadTask();
|
||||
// uploadTaskDTO1.setCreateTime("2022");
|
||||
// uploadTaskDTO1.setTaskName("wwww");
|
||||
// uploadTaskDTO1.setUsrNum(2);
|
||||
// List<UploadTask> list = new ArrayList<>();
|
||||
// list.add(uploadTaskDTO1);
|
||||
// list.add(uploadTaskDTO);
|
||||
//
|
||||
// try {
|
||||
// ExcelWriter excelWriter = ExcelUtil.getWriter(true);
|
||||
// excelWriter.write(list);
|
||||
// response.reset();
|
||||
// response.setContentType("application/vnd.ms-excel");
|
||||
// response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("test.xlsx", "UTF-8"));
|
||||
// excelWriter.flush(response.getOutputStream());
|
||||
// excelWriter.close();
|
||||
// } catch (Exception e) {
|
||||
// log.error("{}", e.getMessage());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Data
|
||||
// class UploadTask {
|
||||
// private String createTime;
|
||||
// private String taskName;
|
||||
// private Integer usrNum;
|
||||
// }
|
||||
//
|
||||
// @PostMapping("/report/organize")
|
||||
// @ApiOperation("按组的统计信息")
|
||||
// public CommonResponse<Object> getReportByOrganize(@RequestBody StatisticalReportDTO s) {
|
||||
// return reportService.getReportByOrganize(s);
|
||||
// }
|
||||
|
||||
@PostMapping("/download/organize")
|
||||
@ApiOperation("导出组成员统计信息")
|
||||
public void downloadOrganizeReport(@RequestBody StatisticalReportDTO s) {
|
||||
HttpServletResponse response = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getResponse();
|
||||
reportService.downloadOrganizeReport(response, s);
|
||||
}
|
||||
|
||||
@GetMapping("/report/member")
|
||||
@ApiOperation("获取单个成员统计信息")
|
||||
public CommonResponse<Object> getMemberReport(String beginTime, String endTime, Long memberId) {
|
||||
return reportService.getMemberReport(beginTime, endTime, memberId);
|
||||
}
|
||||
|
||||
@GetMapping("/download/member")
|
||||
@ApiOperation("导出单个成员统计信息")
|
||||
public void downloadMemberReport(HttpServletResponse response, String beginTime, String endTime, Long memberId) {
|
||||
reportService.downloadMemberReport(response, beginTime, endTime, memberId);
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.baiye.modules.report.dao;
|
||||
|
||||
import com.baiye.modules.report.entity.ReportTask;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/13
|
||||
*/
|
||||
@Repository
|
||||
public interface ReportDayRepository extends JpaRepository<ReportTask, Long>, JpaSpecificationExecutor<ReportTask> {
|
||||
/**
|
||||
* 通过任务id 查询所有的日报
|
||||
*
|
||||
* @param taskId
|
||||
* @return
|
||||
*/
|
||||
List<ReportTask> findAllByTaskId(Long taskId);
|
||||
|
||||
/**
|
||||
* 通过条件查询记录
|
||||
* @param beginTime
|
||||
* @param endTime
|
||||
* @param ids
|
||||
* @return
|
||||
*/
|
||||
@Query(value = "select * from tb_report_task d where (d.create_time between ?1 and ?2) and (coalesce (?3,null) is null or d.task_id in (?3))", nativeQuery = true)
|
||||
List<ReportTask> selectAllByCondition(String beginTime, String endTime, List<Long> ids);
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.baiye.modules.report.dao;
|
||||
|
||||
import com.baiye.modules.report.entity.ReportOrganize;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wujingtao
|
||||
* @date 2022/01/11
|
||||
*/
|
||||
@Repository
|
||||
public interface ReportOrganizeRepository extends JpaRepository<ReportOrganize, Long>, JpaSpecificationExecutor<ReportOrganize> {
|
||||
/**
|
||||
* 通过条件查询记录
|
||||
*
|
||||
* @param beginTime
|
||||
* @param endTime
|
||||
* @param ids
|
||||
* @return
|
||||
*/
|
||||
@Query(value = "select * from tb_report_organize d where (d.create_time between ?1 and ?2) and (coalesce (?3,null) is null or d.organize_id in (?3))", nativeQuery = true)
|
||||
List<ReportOrganize> selectAllByCondition(String beginTime, String endTime, List<Long> ids);
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.baiye.modules.report.entity;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import org.springframework.data.annotation.CreatedDate;
|
||||
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wujingtao
|
||||
* @date 2022/01/11
|
||||
*/
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name = "tb_report_organize")
|
||||
@EntityListeners(AuditingEntityListener.class)
|
||||
public class ReportOrganize implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 9034474268733855182L;
|
||||
@Id
|
||||
@Column(name = "id")
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
private String organizeName;
|
||||
private Long organizeId;
|
||||
private Integer turnOnNum;
|
||||
private Double turnOnRate;
|
||||
private Double usrRate;
|
||||
private Integer totalNum;
|
||||
private Integer usrNum;
|
||||
@CreatedDate
|
||||
@Column(name = "create_time")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DatePattern.NORM_DATE_PATTERN, timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package com.baiye.modules.report.entity.dto;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnore;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author wujingtao
|
||||
* @date 2022/01/14
|
||||
*/
|
||||
@Data
|
||||
public class UploadTaskDTO {
|
||||
/**
|
||||
* 平均时长
|
||||
*/
|
||||
@ExcelProperty(value = "日期", index = 0)
|
||||
private String createTime;
|
||||
|
||||
// @ExcelIgnore
|
||||
private Long taskId;
|
||||
|
||||
@ExcelProperty(value = "任务名称", index = 1)
|
||||
private String taskName;
|
||||
/**
|
||||
* 外呼数
|
||||
*/
|
||||
@ExcelProperty(value = "外呼数量", index = 2)
|
||||
private Integer usrNum;
|
||||
/**
|
||||
* 接通数
|
||||
*/
|
||||
@ExcelProperty(value = "外呼接通量", index = 3)
|
||||
private Integer turnOnNum;
|
||||
/**
|
||||
* 接通率
|
||||
*/
|
||||
@ExcelProperty(value = "外呼接通率", index = 4)
|
||||
private Double turnOnRate;
|
||||
|
||||
/**
|
||||
* 外呼总时长
|
||||
*/
|
||||
@ExcelProperty(value = "外呼总时长", index = 5)
|
||||
private Integer breatheTotalDuration;
|
||||
|
||||
/**
|
||||
* 平均时长
|
||||
*/
|
||||
@ExcelProperty(value = "平均通话时长", index = 6)
|
||||
private Double breatheAverageDuration;
|
||||
|
||||
@ExcelProperty(value = "标签", index = 7)
|
||||
private String label;
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
package com.baiye.modules.report.entity.vo;
|
||||
|
||||
//import com.alibaba.excel.annotation.ExcelIgnore;
|
||||
//import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.ExcelIgnore;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/09
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode
|
||||
public class MemberInfoVO {
|
||||
|
||||
/**
|
||||
* 成员id
|
||||
*/
|
||||
@ExcelIgnore
|
||||
private Long memberId;
|
||||
/**
|
||||
* 成员名称
|
||||
*/
|
||||
@ExcelProperty(value = "姓名", index = 2)
|
||||
private String memberName;
|
||||
/**
|
||||
* 小组id
|
||||
*/
|
||||
@ExcelIgnore
|
||||
private Long organizeId;
|
||||
/**
|
||||
* 小组名
|
||||
*/
|
||||
@ExcelProperty(value = "小组", index = 1)
|
||||
private String organizeName;
|
||||
/**
|
||||
* 接通数
|
||||
*/
|
||||
@ExcelProperty(value = "外呼接通量", index = 4)
|
||||
private Integer turnOnNum;
|
||||
/**
|
||||
* 接通率
|
||||
*/
|
||||
@ExcelProperty(value = "外呼接通率", index = 5)
|
||||
private Double turnOnRate;
|
||||
/**
|
||||
* 外呼数
|
||||
*/
|
||||
@ExcelProperty(value = "外呼数量", index = 3)
|
||||
private Integer usrNum;
|
||||
/**
|
||||
* 外呼总时长
|
||||
*/
|
||||
@ExcelProperty(value = "外呼总时长", index = 6)
|
||||
private Integer breatheTotalDuration;
|
||||
|
||||
/**
|
||||
* 平均时长
|
||||
*/
|
||||
@ExcelProperty(value = "平均通话时长", index = 7)
|
||||
private Double breatheAverageDuration;
|
||||
|
||||
/**
|
||||
* 平均时长
|
||||
*/
|
||||
@ExcelProperty(value = "日期", index = 0)
|
||||
private String createTime;
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.baiye.modules.report.entity.vo;
|
||||
|
||||
import com.baiye.modules.report.entity.ReportOrganize;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wujingtao
|
||||
* @date 2022/01/11
|
||||
*/
|
||||
@Data
|
||||
public class OrganizeInfosVO implements Serializable {
|
||||
private static final long serialVersionUID = 133887339450743290L;
|
||||
private Long organizationId;
|
||||
private String organizationName;
|
||||
private List<ReportOrganize> data;
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
package com.baiye.modules.report.service;
|
||||
|
||||
import com.baiye.http.CommonResponse;
|
||||
import com.baiye.modules.report.entity.dto.StatisticalReportDTO;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/10
|
||||
*/
|
||||
public interface ReportService {
|
||||
|
||||
/**
|
||||
* 所有资源
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
CommonResponse<Object> getReportByAll();
|
||||
|
||||
|
||||
/**
|
||||
* 按条件获取任务统计信息
|
||||
*
|
||||
* @param s
|
||||
* @return
|
||||
*/
|
||||
CommonResponse<Object> getReportByTask(StatisticalReportDTO s);
|
||||
|
||||
/**
|
||||
* 导出任务文件
|
||||
*
|
||||
* @param response
|
||||
* @param s
|
||||
*/
|
||||
void downloadTaskReport(HttpServletResponse response, StatisticalReportDTO s);
|
||||
|
||||
/**
|
||||
* 管理员按小组统计
|
||||
*
|
||||
* @param s
|
||||
* @return
|
||||
*/
|
||||
CommonResponse<Object> getReportByOrganize(StatisticalReportDTO s);
|
||||
|
||||
/**
|
||||
* 导出小组文件
|
||||
*
|
||||
* @param response
|
||||
* @param s
|
||||
*/
|
||||
void downloadOrganizeReport(HttpServletResponse response, StatisticalReportDTO s);
|
||||
|
||||
/**
|
||||
* 获取成员接通信息
|
||||
*
|
||||
* @param beginTime
|
||||
* @param endTime
|
||||
* @param memberId
|
||||
* @return
|
||||
*/
|
||||
CommonResponse<Object> getMemberReport(String beginTime, String endTime, Long memberId);
|
||||
|
||||
/**
|
||||
* 导出成员统计
|
||||
*
|
||||
* @param response
|
||||
* @param beginTime
|
||||
* @param endTime
|
||||
* @param memberId
|
||||
* @return
|
||||
*/
|
||||
void downloadMemberReport(HttpServletResponse response, String beginTime, String endTime, Long memberId);
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.baiye.modules.system.service.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author wujingtao
|
||||
* @date 2022/01/18
|
||||
*/
|
||||
@Data
|
||||
public class ClueMiddleTo {
|
||||
|
||||
private Long organizeId;
|
||||
|
||||
private Long taskId;
|
||||
}
|
@ -0,0 +1,114 @@
|
||||
package com.baiye.util;
|
||||
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wujingtao
|
||||
* @date 2022/01/13
|
||||
*/
|
||||
public class DateTimeUtil {
|
||||
|
||||
/**
|
||||
* 获取当天开始时间
|
||||
*
|
||||
* @param beginTime
|
||||
* @return
|
||||
*/
|
||||
public static String getBeginTimeByDay(String beginTime) {
|
||||
return DateUtil.format(DateUtil.beginOfDay(DateUtil.parse(beginTime)), "yyyy-MM-dd HH:mm:dd");
|
||||
}
|
||||
|
||||
public static String getEndTimeByDay(String endTime) {
|
||||
return DateUtil.format(DateUtil.endOfDay(DateUtil.parse(endTime)), "yyyy-MM-dd HH:mm:dd");
|
||||
}
|
||||
|
||||
public static String getBeginTimeByMonth(String beginTime) {
|
||||
return DateUtil.format(DateUtil.beginOfMonth(DateUtil.parse(beginTime)), "yyyy-MM-dd HH:mm:dd");
|
||||
}
|
||||
|
||||
public static String getEndTimeByMonth(String endTime) {
|
||||
return DateUtil.format(DateUtil.endOfMonth(DateUtil.parse(endTime)), "yyyy-MM-dd HH:mm:dd");
|
||||
}
|
||||
|
||||
public static String getBeginTimeByHour(String beginTime) {
|
||||
return DateUtil.format(DateUtil.beginOfHour(DateUtil.parse(beginTime)), "yyyy-MM-dd HH:mm:dd");
|
||||
}
|
||||
|
||||
public static String getEndTimeByHour(String endTime) {
|
||||
return DateUtil.format(DateUtil.endOfHour(DateUtil.parse(endTime)), "yyyy-MM-dd HH:mm:dd");
|
||||
}
|
||||
|
||||
public static String getTimeType(Date dateTime, Integer timeType) {
|
||||
if (timeType == 2) {
|
||||
return DateUtil.format(dateTime, "yyyy-MM-dd");
|
||||
} else if (timeType == 3) {
|
||||
return DateUtil.format(dateTime, "yyyy-MM");
|
||||
} else {
|
||||
return DateUtil.format(dateTime, "yyyy-MM-dd HH");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 比较两个日期是否同年同月同一天
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static Boolean betweenByDay(Date begin, Date end) {
|
||||
begin = DateUtil.parse(DateUtil.format(begin, "yyyy-MM-dd"));
|
||||
end = DateUtil.parse(DateUtil.format(end, "yyyy-MM-dd"));
|
||||
long between = DateUtil.between(begin, end, DateUnit.DAY);
|
||||
if (between == 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 比较两个日期是否同一年同一月
|
||||
*
|
||||
* @param begin
|
||||
* @param end
|
||||
* @return
|
||||
*/
|
||||
public static Boolean betweenByMonth(Date begin, Date end) {
|
||||
int beginYear = DateUtil.year(begin);
|
||||
int endYear = DateUtil.year(end);
|
||||
int beginMonth = DateUtil.month(begin);
|
||||
int endMonth = DateUtil.month(end);
|
||||
if (beginYear == endYear) {
|
||||
if (beginMonth == endMonth) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 比较两个日期是否同年同月同一天
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static Boolean betweenByHour(Date begin, Date end) {
|
||||
if (betweenByDay(begin, end)) {
|
||||
int hour1 = DateUtil.hour(begin, true);
|
||||
int hour2 = DateUtil.hour(end, true);
|
||||
if (hour1 == hour2) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Date begin = DateUtil.beginOfDay(DateUtil.parse("2022-01-06 12:04:59"));
|
||||
Date end = DateUtil.endOfDay(DateUtil.parse("2022-1-5"));
|
||||
long between = DateUtil.between(begin, end, DateUnit.DAY);
|
||||
System.out.println(between);
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
package com.baiye.util;
|
||||
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.alibaba.excel.ExcelWriter;
|
||||
import com.alibaba.excel.write.metadata.WriteSheet;
|
||||
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
||||
import com.alibaba.excel.write.metadata.style.WriteFont;
|
||||
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
||||
import com.baiye.modules.report.entity.dto.UploadTaskDTO;
|
||||
import com.baiye.modules.report.entity.vo.MemberInfoVO;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
import org.apache.tomcat.util.http.fileupload.ByteArrayOutputStream;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
public class ExportExcelUtil {
|
||||
/**
|
||||
* 导出excel
|
||||
*/
|
||||
@SneakyThrows
|
||||
public static void downloadEasyExcel(HttpServletResponse response, Object obj, List list) {
|
||||
String fileName = URLEncoder.encode("表单", "UTF-8");
|
||||
response.reset();
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
|
||||
// excel头策略
|
||||
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
|
||||
WriteFont headWriteFont = new WriteFont();
|
||||
headWriteFont.setFontHeightInPoints((short) 11);
|
||||
headWriteFont.setBold(false);
|
||||
headWriteCellStyle.setWriteFont(headWriteFont);
|
||||
// excel内容策略
|
||||
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
|
||||
WriteFont contentWriteFont = new WriteFont();
|
||||
//内容水平对齐
|
||||
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.RIGHT);
|
||||
contentWriteFont.setFontHeightInPoints((short) 11);
|
||||
contentWriteCellStyle.setWriteFont(contentWriteFont);
|
||||
// 设置handler
|
||||
HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
|
||||
//写出
|
||||
EasyExcel.write(response.getOutputStream(), (Class) obj)
|
||||
.autoCloseStream(Boolean.FALSE)
|
||||
.sheet("sheet1")
|
||||
.registerWriteHandler(styleStrategy)
|
||||
//自动设置列的宽tm
|
||||
// .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
||||
.doWrite(list);
|
||||
}
|
||||
|
||||
public static void exportPackByDate(HttpServletResponse response, Map<String, List<MemberInfoVO>> params, String fileName) {
|
||||
ExcelWriter excelWriter = null;
|
||||
try {
|
||||
// 防止中文乱码
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx");
|
||||
//工作簿对象
|
||||
excelWriter = EasyExcel.write(response.getOutputStream()).build();
|
||||
int i = 0;
|
||||
for (String key : params.keySet()) {
|
||||
//sheet对象
|
||||
WriteSheet sheet = EasyExcel.writerSheet(i, key).head(MemberInfoVO.class).build();
|
||||
//写出
|
||||
excelWriter.write(params.get(key), sheet);
|
||||
|
||||
i += 1;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
} finally {
|
||||
if (excelWriter != null) {
|
||||
excelWriter.finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package com.baiye.feign;
|
||||
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
|
||||
/**
|
||||
* @author wujingtao
|
||||
* @date 2021/12/23
|
||||
*/
|
||||
@FeignClient(name = "ad-platform-source")
|
||||
public interface ConnectSourceFeign {
|
||||
|
||||
|
||||
@ApiOperation("查询组员资源总数")
|
||||
@GetMapping("/source/clue/queryMemberNum")
|
||||
ResponseEntity<Object> queryMemberNum(@RequestParam("memberId") Long memberId);
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
package com.baiye.feign;
|
||||
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
/**
|
||||
* @author wujingtao
|
||||
* @date 2021/12/23
|
||||
*/
|
||||
@Component
|
||||
public class ConnectSourceFeignFallBack implements ConnectSourceFeign {
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Object> queryMemberNum(Long memberId) {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
package com.baiye.job;
|
||||
|
||||
import com.baiye.modules.elsaticjob.entity.jobInstance.ElasticSimpleJob;
|
||||
import com.baiye.modules.report.service.ReportService;
|
||||
import com.dangdang.ddframe.job.api.ShardingContext;
|
||||
import com.dangdang.ddframe.job.api.simple.SimpleJob;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/10
|
||||
* 每小时调用一次
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@ElasticSimpleJob(jobName = "StatisticsHourJob", cron = "0 0 0/1 * * ?", jobExceptionHandler = "com.baiye.exception.ElasticException", overwrite = true)
|
||||
public class StatisticsHourJob implements SimpleJob {
|
||||
@Resource
|
||||
private ReportService reportService;
|
||||
private static StatisticsHourJob statisticsHourJob;
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
statisticsHourJob = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(ShardingContext shardingContext) {
|
||||
statisticsHourJob.reportService.reportHour();
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
package com.baiye.modules.elsaticjob.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baiye.constant.DefaultNumberConstants;
|
||||
import com.baiye.http.CommonResponse;
|
||||
import com.baiye.modules.elsaticjob.dao.AutoReminderRepository;
|
||||
import com.baiye.modules.elsaticjob.entity.AutoReminder;
|
||||
import com.baiye.modules.elsaticjob.service.AutoReminderService;
|
||||
import com.baiye.socket.WebSocketServer;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wujingtao
|
||||
* @date 2022/01/05
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class AutoReminderServiceImpl implements AutoReminderService {
|
||||
@Resource
|
||||
private AutoReminderRepository timeTaskRepository;
|
||||
@Resource
|
||||
private WebSocketServer webSocketServer;
|
||||
|
||||
@Override
|
||||
public CommonResponse<Object> addTimeTask(AutoReminder timeTask) {
|
||||
if (timeTaskRepository.save(timeTask).getId() == null) {
|
||||
return CommonResponse.createByErrorMessage("保存定时任务失败");
|
||||
}
|
||||
return CommonResponse.createBySuccess();
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行自体醒任务
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void runAutomaticReminder() {
|
||||
List<AutoReminder> allByStatus = timeTaskRepository.findAllByStatus(DefaultNumberConstants.ZERO_NUMBER);
|
||||
if (CollUtil.isEmpty(allByStatus)) {
|
||||
return;
|
||||
}
|
||||
JSONObject object = new JSONObject();
|
||||
object.putOpt("type", "");
|
||||
object.putOpt("code", DefaultNumberConstants.TWO_HUNDRED);
|
||||
for (AutoReminder info : allByStatus) {
|
||||
if (DateUtil.between(info.getExecuteTime(), DateUtil.date(), DateUnit.HOUR) == 0) {
|
||||
object.putOpt("message", info.getUserId());
|
||||
try {
|
||||
webSocketServer.sendMessage(JSONUtil.toJsonStr(object), String.valueOf(info.getUserId()));
|
||||
} catch (Exception e) {
|
||||
log.info("执行自提醒任务 id:{} 发送websocket失败 {}", info.getId(), e.getMessage());
|
||||
continue;
|
||||
}
|
||||
if (info.getIsRepeat() == DefaultNumberConstants.ZERO_NUMBER) {
|
||||
timeTaskRepository.updateTimeTaskStatus(DefaultNumberConstants.ONE_NUMBER, info.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
package com.baiye.modules.report.dao;
|
||||
|
||||
import com.baiye.modules.report.entity.CallClueInfo;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/13
|
||||
*/
|
||||
@Repository
|
||||
public interface CallClueRepository extends JpaRepository<CallClueInfo, Long>, JpaSpecificationExecutor<CallClueInfo> {
|
||||
/**
|
||||
* 主键查询
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
CallClueInfo findByClueId(Long id);
|
||||
|
||||
/**
|
||||
* 按条件查询
|
||||
*
|
||||
* @param memberId
|
||||
* @return
|
||||
*/
|
||||
@Query("select d from CallClueInfo d where d.memberId=?1 ")
|
||||
List<CallClueInfo> selectByMember(Long memberId);
|
||||
|
||||
/**
|
||||
* 按条件查询
|
||||
*
|
||||
* @param taskId
|
||||
* @param day
|
||||
* @return
|
||||
*/
|
||||
@Query("select d from CallClueInfo d where d.taskId=?1 and concat(d.createTime,'') =?2 ")
|
||||
List<CallClueInfo> selectByCondition(Long taskId, String day);
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package com.baiye.modules.report.dao;
|
||||
|
||||
import com.baiye.modules.report.entity.ReportDay;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/13
|
||||
*/
|
||||
@Repository
|
||||
public interface ReportDayRepository extends JpaRepository<ReportDay, Long>, JpaSpecificationExecutor<ReportDay> {
|
||||
/**
|
||||
* 通过任务id 查询所有的日报
|
||||
*
|
||||
* @param taskId
|
||||
* @return
|
||||
*/
|
||||
List<ReportDay> findAllByTaskId(Long taskId);
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package com.baiye.modules.report.entity;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import com.baiye.model.entity.BaseCallClueInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.springframework.data.annotation.LastModifiedDate;
|
||||
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/13
|
||||
* 线索中间表
|
||||
*/
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name = "tb_call_clue")
|
||||
@EntityListeners(AuditingEntityListener.class)
|
||||
public class CallClueInfo extends BaseCallClueInfo implements Serializable {
|
||||
private static final long serialVersionUID = -2063303635710762496L;
|
||||
|
||||
@Id
|
||||
@Column(name = "clue_id")
|
||||
private Long clueId;
|
||||
@LastModifiedDate
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DatePattern.NORM_DATETIME_PATTERN, timezone = "GMT+8")
|
||||
@Column(name = "create_time")
|
||||
private Date createTime;
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
package com.baiye.modules.report.entity.vo;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/09
|
||||
*/
|
||||
@Data
|
||||
public class MemberInfoVO {
|
||||
/**
|
||||
* 成员id
|
||||
*/
|
||||
private Long memberId;
|
||||
/**
|
||||
* 接通数
|
||||
*/
|
||||
private Integer turnOnNum;
|
||||
/**
|
||||
* 接通率
|
||||
*/
|
||||
private Double turnOnRate;
|
||||
/**
|
||||
* 使用率
|
||||
*/
|
||||
private Double usrRate;
|
||||
/**
|
||||
* 总数
|
||||
*/
|
||||
private Integer totalNum;
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DatePattern.NORM_DATETIME_PATTERN, timezone = "GMT+8")
|
||||
private Date date;
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
package com.baiye.modules.report.entity.vo;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/13
|
||||
*/
|
||||
@Data
|
||||
public class ReportMessageInfoVO implements Serializable {
|
||||
private static final long serialVersionUID = -4455400757718138363L;
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Integer code;
|
||||
private Long userId;
|
||||
private String type;
|
||||
private List<TaskInfosVO> data;
|
||||
private JSONObject totalData;
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
package com.baiye.modules.report.service;
|
||||
|
||||
import com.baiye.modules.report.entity.vo.MemberInfoVO;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/10
|
||||
*/
|
||||
public interface ReportService {
|
||||
/**
|
||||
* 推送管理员统计信息
|
||||
*/
|
||||
void reportHour();
|
||||
|
||||
/**
|
||||
* 获取成员接通信息
|
||||
*
|
||||
* @param memberId
|
||||
* @return
|
||||
*/
|
||||
MemberInfoVO getMemberReport(Long memberId);
|
||||
}
|
@ -1,216 +0,0 @@
|
||||
package com.baiye.modules.report.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baiye.constant.DefaultNumberConstants;
|
||||
import com.baiye.feign.ConnectManageFeign;
|
||||
import com.baiye.feign.ConnectSourceFeign;
|
||||
import com.baiye.model.dto.TaskQueryCriteria;
|
||||
import com.baiye.model.enums.CallStatusEnum;
|
||||
import com.baiye.modules.report.dao.CallClueRepository;
|
||||
import com.baiye.modules.report.dao.ReportDayRepository;
|
||||
import com.baiye.modules.report.entity.CallClueInfo;
|
||||
import com.baiye.modules.report.entity.ReportDay;
|
||||
import com.baiye.modules.report.entity.vo.MemberInfoVO;
|
||||
import com.baiye.modules.report.entity.vo.ReportMessageInfoVO;
|
||||
import com.baiye.modules.report.entity.vo.TaskInfosVO;
|
||||
import com.baiye.modules.report.service.ReportService;
|
||||
import com.baiye.socket.WebSocketServer;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2021/12/10
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ReportServiceImpl implements ReportService {
|
||||
@Resource
|
||||
private WebSocketServer webSocketServer;
|
||||
@Resource
|
||||
private CallClueRepository callClueRepository;
|
||||
@Resource
|
||||
private ReportDayRepository reportDayRepository;
|
||||
@Resource
|
||||
private ConnectSourceFeign connectSourceFeign;
|
||||
@Resource
|
||||
private ConnectManageFeign connectManageFeign;
|
||||
|
||||
@Override
|
||||
public void reportHour() {
|
||||
//所有线索总数
|
||||
int total = 0;
|
||||
|
||||
//查询所有的拨打线索记录
|
||||
List<CallClueInfo> all = callClueRepository.findAll();
|
||||
Map<Long, List<CallClueInfo>> callClueInfoMap = new HashMap<>(16);
|
||||
all.stream().collect(Collectors.groupingBy(CallClueInfo::getTaskId, Collectors.toList())).forEach(callClueInfoMap::put);
|
||||
|
||||
//查询所有的分配任务
|
||||
TaskQueryCriteria taskQueryCriteria = new TaskQueryCriteria();
|
||||
taskQueryCriteria.setIsDistribution(1);
|
||||
ResponseEntity<Object> query = connectManageFeign.query(taskQueryCriteria);
|
||||
JSONArray array = JSONUtil.parseArray(query.getBody());
|
||||
if (CollUtil.isEmpty(array)) {
|
||||
log.info("资源池里没有任务=");
|
||||
return;
|
||||
}
|
||||
//发送websocket信息
|
||||
ReportMessageInfoVO reportMessageInfoVO = new ReportMessageInfoVO();
|
||||
List<TaskInfosVO> taskInfos = new ArrayList<>();
|
||||
|
||||
for (Object o : array) {
|
||||
JSONObject jsonObject = (JSONObject) o;
|
||||
Long id = jsonObject.getLong("id");
|
||||
int clueTotal = jsonObject.getInt("totalNumber");
|
||||
String taskName = jsonObject.getStr("taskName");
|
||||
total += clueTotal;
|
||||
if (callClueInfoMap.containsKey(id)) {
|
||||
//获取今天产生的记录
|
||||
List<CallClueInfo> callClueInfos = callClueInfoMap.get(id).stream().filter(c -> DateUtil.between(c.getCreateTime(), DateUtil.date(), DateUnit.DAY) == 0).collect(Collectors.toList());
|
||||
JSONObject json = getMessageInfo(callClueInfos, clueTotal);
|
||||
ReportDay reportDay = saveReport(id, clueTotal, json);
|
||||
//任务保存到每天的数据
|
||||
List<ReportDay> allByTaskId = reportDayRepository.findAllByTaskId(id);
|
||||
allByTaskId.add(reportDay);
|
||||
allByTaskId.sort(Comparator.comparing(ReportDay::getCreateTime));
|
||||
//每个任务对应的所有日期的数据
|
||||
TaskInfosVO taskInfo = new TaskInfosVO();
|
||||
taskInfo.setTaskId(id);
|
||||
taskInfo.setTaskName(taskName);
|
||||
taskInfo.setData(allByTaskId);
|
||||
taskInfos.add(taskInfo);
|
||||
}
|
||||
}
|
||||
JSONObject totalData = getTotalData(all, total);
|
||||
reportMessageInfoVO.setData(taskInfos);
|
||||
reportMessageInfoVO.setTotalData(totalData);
|
||||
sendAllManage(reportMessageInfoVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MemberInfoVO getMemberReport(Long memberId) {
|
||||
//查询此员工的所有线索
|
||||
ResponseEntity<Object> objectResponseEntity = connectSourceFeign.queryMemberNum(memberId);
|
||||
int total = (int) objectResponseEntity.getBody();
|
||||
MemberInfoVO memberInfoVO = new MemberInfoVO();
|
||||
memberInfoVO.setMemberId(memberId);
|
||||
memberInfoVO.setTotalNum(total);
|
||||
memberInfoVO.setDate(DateUtil.date());
|
||||
memberInfoVO.setTurnOnNum(0);
|
||||
memberInfoVO.setTurnOnRate(0.00);
|
||||
memberInfoVO.setUsrRate(0.00);
|
||||
if (total == 0) {
|
||||
return memberInfoVO;
|
||||
}
|
||||
List<CallClueInfo> callClueInfos = callClueRepository.selectByMember(memberId);
|
||||
if (CollUtil.isEmpty(callClueInfos)) {
|
||||
return memberInfoVO;
|
||||
}
|
||||
JSONObject json = getMessageInfo(callClueInfos, total);
|
||||
memberInfoVO.setTurnOnNum(json.getInt("turnOnNum"));
|
||||
memberInfoVO.setTurnOnRate(json.getDouble("turnOnRate"));
|
||||
memberInfoVO.setUsrRate(json.getDouble("usrRate"));
|
||||
return memberInfoVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取总线索情况
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private JSONObject getTotalData(List<CallClueInfo> all, Integer totalNum) {
|
||||
JSONObject messageInfo = getMessageInfo(all, totalNum);
|
||||
messageInfo.putOpt("totalNum", totalNum);
|
||||
return messageInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送所有管理员身份的人
|
||||
*
|
||||
* @param reportMessageInfoVO
|
||||
* @return
|
||||
*/
|
||||
private void sendAllManage(ReportMessageInfoVO reportMessageInfoVO) {
|
||||
try {
|
||||
//todo 这里8为管理员 1为超级管理员。。后面改进
|
||||
List<Long> roleIds = new ArrayList<>();
|
||||
roleIds.add(1L);
|
||||
roleIds.add(8L);
|
||||
ResponseEntity<Object> adminInfo = connectManageFeign.getAdminInfo(roleIds);
|
||||
JSONArray jsonArray = JSONUtil.parseArray(adminInfo.getBody());
|
||||
for (Object o : jsonArray) {
|
||||
JSONObject jsonObject = (JSONObject) o;
|
||||
reportMessageInfoVO.setUserId(jsonObject.getLong("id"));
|
||||
reportMessageInfoVO.setType("adminStatistics");
|
||||
webSocketServer.sendMessage(reportMessageInfoVO);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("发生websocket异常 {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存当日的统计信息
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private ReportDay saveReport(Long id, Integer clueTotal, JSONObject json) {
|
||||
ReportDay reportDay = new ReportDay();
|
||||
reportDay.setTaskId(id);
|
||||
reportDay.setTotalNum(clueTotal);
|
||||
reportDay.setTurnOnNum(json.getInt("turnOnNum"));
|
||||
reportDay.setTurnOnRate(json.getDouble("turnOnRate"));
|
||||
reportDay.setUsrRate(json.getDouble("usrRate"));
|
||||
reportDay.setCreateTime(DateUtil.date());
|
||||
if (DateUtil.hour(DateUtil.date(), true) == DefaultNumberConstants.TWENTY_THREE) {
|
||||
//每天23点的统计 保存在数据库
|
||||
reportDayRepository.save(reportDay);
|
||||
}
|
||||
return reportDay;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算当日信息
|
||||
*
|
||||
* @param callClueInfos
|
||||
* @param total
|
||||
* @return
|
||||
*/
|
||||
private JSONObject getMessageInfo(List<CallClueInfo> callClueInfos, int total) {
|
||||
int usrNum = 0;
|
||||
int turnOnNum = 0;
|
||||
double turnOnRate = 0.00;
|
||||
double usrRate = 0.00;
|
||||
for (CallClueInfo info : callClueInfos) {
|
||||
if (info.getStatus() != 0) {
|
||||
usrNum++;
|
||||
if (info.getStatus() == CallStatusEnum.ANSWER.getValue()) {
|
||||
turnOnNum++;
|
||||
}
|
||||
}
|
||||
}
|
||||
//使用率 =使用数/总数
|
||||
usrRate = NumberUtil.div(usrNum, total, 2);
|
||||
if (usrNum != 0) {
|
||||
//接通率=接通数/使用数
|
||||
turnOnRate = NumberUtil.div(turnOnNum, usrNum, 2);
|
||||
}
|
||||
JSONObject json = new JSONObject();
|
||||
json.putOpt("turnOnNum", turnOnNum);
|
||||
json.putOpt("turnOnRate", turnOnRate);
|
||||
json.putOpt("usrRate", usrRate);
|
||||
return json;
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
package com.baiye.modules.elsaticjob.api;
|
||||
package com.baiye.modules.timetask.api;
|
||||
|
||||
import com.baiye.modules.elsaticjob.entity.Job;
|
||||
import com.baiye.modules.elsaticjob.entity.JobBriefInfo;
|
||||
import com.baiye.modules.elsaticjob.service.ElasticJobService;
|
||||
import com.baiye.modules.timetask.entity.Job;
|
||||
import com.baiye.modules.timetask.entity.JobBriefInfo;
|
||||
import com.baiye.modules.timetask.service.ElasticJobService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
@ -1,4 +1,4 @@
|
||||
package com.baiye.modules.elsaticjob.entity;
|
||||
package com.baiye.modules.timetask.entity;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import com.baiye.model.entity.BaseTimeTask;
|
@ -1,4 +1,4 @@
|
||||
package com.baiye.modules.elsaticjob.entity;
|
||||
package com.baiye.modules.timetask.entity;
|
||||
|
||||
import com.dangdang.ddframe.job.executor.handler.JobProperties;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.baiye.modules.elsaticjob.entity;
|
||||
package com.baiye.modules.timetask.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.baiye.modules.elsaticjob.entity.jobInstance;
|
||||
package com.baiye.modules.timetask.entity.jobInstance;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.baiye.modules.elsaticjob.listener;
|
||||
package com.baiye.modules.timetask.listener;
|
||||
|
||||
import com.dangdang.ddframe.job.executor.ShardingContexts;
|
||||
import com.dangdang.ddframe.job.lite.api.listener.ElasticJobListener;
|
@ -1,7 +1,7 @@
|
||||
package com.baiye.modules.elsaticjob.service;
|
||||
package com.baiye.modules.timetask.service;
|
||||
|
||||
import com.baiye.modules.elsaticjob.entity.Job;
|
||||
import com.baiye.modules.elsaticjob.entity.JobBriefInfo;
|
||||
import com.baiye.modules.timetask.entity.Job;
|
||||
import com.baiye.modules.timetask.entity.JobBriefInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -1,9 +1,9 @@
|
||||
package com.baiye.modules.elsaticjob.service.impl;
|
||||
package com.baiye.modules.timetask.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baiye.modules.elsaticjob.entity.Job;
|
||||
import com.baiye.modules.elsaticjob.entity.JobBriefInfo;
|
||||
import com.baiye.modules.elsaticjob.service.ElasticJobService;
|
||||
import com.baiye.modules.timetask.entity.Job;
|
||||
import com.baiye.modules.timetask.entity.JobBriefInfo;
|
||||
import com.baiye.modules.timetask.service.ElasticJobService;
|
||||
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
|
||||
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
|
||||
import com.dangdang.ddframe.job.executor.handler.JobProperties;
|
Loading…
Reference in New Issue