9 changed files with 1336 additions and 81 deletions
@ -0,0 +1,29 @@ |
|||||||
|
package com.biutag.enums; |
||||||
|
|
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import lombok.Getter; |
||||||
|
|
||||||
|
@Getter |
||||||
|
@AllArgsConstructor |
||||||
|
public enum DeptTypeEnum { |
||||||
|
|
||||||
|
|
||||||
|
SJ_TYPE("1", "市局专班"), |
||||||
|
|
||||||
|
|
||||||
|
FJ_TYPE("2", "分县市局"), |
||||||
|
|
||||||
|
// 三级机构专班
|
||||||
|
ZD_TYPE("3", "支队"), |
||||||
|
|
||||||
|
// 二级机构领导
|
||||||
|
BW_TYPE("4", "部委警校"), |
||||||
|
|
||||||
|
// 三级机构领导
|
||||||
|
SD_TYPE("5", "所队"); |
||||||
|
|
||||||
|
private String type; |
||||||
|
|
||||||
|
private String name; |
||||||
|
|
||||||
|
} |
||||||
@ -1,76 +0,0 @@ |
|||||||
package com.biutag.enums; |
|
||||||
|
|
||||||
import java.util.LinkedHashMap; |
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
public enum LogMoneyEnum { |
|
||||||
|
|
||||||
/** |
|
||||||
* 用户余额类型 |
|
||||||
*/ |
|
||||||
UM_INC_ADMIN(1001, "平台增加余额"), |
|
||||||
UM_DEC_ADMIN(1002, "平台减少余额"), |
|
||||||
UM_INC_RECHARGE(1003, "充值余额增加"), |
|
||||||
UM_DEC_RECHARGE(1004, "充值余额退回"); |
|
||||||
|
|
||||||
/** |
|
||||||
* 构造方法 |
|
||||||
*/ |
|
||||||
private final int code; |
|
||||||
private final String msg; |
|
||||||
LogMoneyEnum(int code, String msg) { |
|
||||||
this.code = code; |
|
||||||
this.msg = msg; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 获取状态码 |
|
||||||
* |
|
||||||
* @author |
|
||||||
* @return Long |
|
||||||
*/ |
|
||||||
public int getCode() { |
|
||||||
return this.code; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 获取提示 |
|
||||||
* |
|
||||||
* @author |
|
||||||
* @return String |
|
||||||
*/ |
|
||||||
public String getMsg() { |
|
||||||
return this.msg; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 根据编码获取Msg |
|
||||||
* |
|
||||||
* @author |
|
||||||
* @param code 类型 |
|
||||||
* @return String |
|
||||||
*/ |
|
||||||
public static String getMsgByCode(Integer code){ |
|
||||||
for(LogMoneyEnum enumItem : LogMoneyEnum.values()) { |
|
||||||
if (enumItem.getCode() == code) { |
|
||||||
return enumItem.getMsg(); |
|
||||||
} |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 获取所有类型 |
|
||||||
* |
|
||||||
* @author |
|
||||||
* @return String |
|
||||||
*/ |
|
||||||
public static Map<Integer, String> getTypeList(){ |
|
||||||
Map<Integer, String> map = new LinkedHashMap<>(); |
|
||||||
for(LogMoneyEnum enumItem : LogMoneyEnum.values()) { |
|
||||||
map.put(enumItem.getCode(), enumItem.getMsg()); |
|
||||||
} |
|
||||||
return map; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -0,0 +1,735 @@ |
|||||||
|
package com.biutag.util; |
||||||
|
|
||||||
|
import org.apache.commons.lang3.time.DateFormatUtils; |
||||||
|
|
||||||
|
import java.text.ParseException; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 日期工具类, |
||||||
|
* 继承org.apache.commons.lang.time.DateUtils类 |
||||||
|
* |
||||||
|
* |
||||||
|
* @version 2014-4-15 |
||||||
|
*/ |
||||||
|
public class DateUtils extends org.apache.commons.lang3.time.DateUtils { |
||||||
|
|
||||||
|
|
||||||
|
private static final long ONE_MILLIS = 1000; |
||||||
|
private static final long ONE_MINUTE = 60; |
||||||
|
private static final long ONE_HOUR = 3600; |
||||||
|
private static final long ONE_DAY = 86400; |
||||||
|
private static final long ONE_MONTH = 2592000; |
||||||
|
private static final long ONE_YEAR = 31104000; |
||||||
|
|
||||||
|
private static final TimeZone zone = TimeZone.getTimeZone("GMT+8"); |
||||||
|
private static String[] parsePatterns = { |
||||||
|
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", |
||||||
|
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", |
||||||
|
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM", |
||||||
|
"yyyyMMdd", "yyyyMMddHHmmss", "yyyyMMddHHmm", "yyyyMM"}; |
||||||
|
|
||||||
|
/** |
||||||
|
* 日期型字符串转化为日期 格式 |
||||||
|
* { |
||||||
|
* "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", |
||||||
|
* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", |
||||||
|
* "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM", |
||||||
|
* "yyyyMMdd", "yyyyMMddHHmmss", "yyyyMMddHHmm", "yyyyMM"} |
||||||
|
*/ |
||||||
|
public static Date parseDate(String str) { |
||||||
|
if (str == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
try { |
||||||
|
return parseDate(str, parsePatterns); |
||||||
|
} catch (ParseException e) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到当前日期字符串 格式(yyyy-MM-dd) |
||||||
|
*/ |
||||||
|
public static String formatCurrentDate() { |
||||||
|
return formatCurrentDate("yyyy-MM-dd"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到当前日期字符串 格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E" |
||||||
|
*/ |
||||||
|
public static String formatCurrentDate(String pattern) { |
||||||
|
return DateFormatUtils.format(new Date(), pattern); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E" |
||||||
|
*/ |
||||||
|
public static String formatDate(Date date, String pattern) { |
||||||
|
String formatDate = null; |
||||||
|
if (pattern != null) { |
||||||
|
formatDate = DateFormatUtils.format(date, pattern); |
||||||
|
} else { |
||||||
|
formatDate = DateFormatUtils.format(date, "yyyy-MM-dd"); |
||||||
|
} |
||||||
|
return formatDate; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 得到当前日期字符串 格式(yyyy-MM-dd) |
||||||
|
*/ |
||||||
|
public static String formatDate() { |
||||||
|
return formatDate("yyyy-MM-dd"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到当前日期字符串 格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E" |
||||||
|
*/ |
||||||
|
public static String formatDate(String pattern) { |
||||||
|
return DateFormatUtils.format(new Date(), pattern,zone); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E" |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取当前时间戳(yyyyMMddHHmmss) |
||||||
|
* |
||||||
|
* @return nowTimeStamp |
||||||
|
*/ |
||||||
|
public static long getCurrentTimestamp() { |
||||||
|
long nowTimeStamp = Long.parseLong(getCurrentTimestampStr()); |
||||||
|
return nowTimeStamp; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取当前时间戳(yyyyMMddHHmmss) |
||||||
|
* |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getCurrentTimestampStr() { |
||||||
|
return formatDate(new Date(), "yyyyMMddHHmmss"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取当前时间戳(yyyyMMddHHmmss) |
||||||
|
* |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getCurrentTimestampStr(String pattern) { |
||||||
|
return formatDate(new Date(), pattern); |
||||||
|
} |
||||||
|
/** |
||||||
|
* 获取Unix时间戳 |
||||||
|
* |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static long getCurrentUnixTimestamp() { |
||||||
|
long nowTimeStamp = System.currentTimeMillis() / 1000; |
||||||
|
return nowTimeStamp; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取Unix时间戳 |
||||||
|
* |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getCurrentUnixTimestampStr() { |
||||||
|
return String.valueOf(getCurrentUnixTimestamp()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 转换Unix时间戳 |
||||||
|
* |
||||||
|
* @return nowTimeStamp |
||||||
|
*/ |
||||||
|
public static long parseUnixTimeStamp(long time) { |
||||||
|
return time / ONE_MILLIS; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取前一周 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Date getBeforeWeek(Date date) { |
||||||
|
return getAddDate(date, Calendar.WEEK_OF_YEAR, -1); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取前一天 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Date getBeforeDay(Date date) { |
||||||
|
return getAddDate(date, Calendar.DAY_OF_YEAR, -1); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取前一月 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Date getBeforeMouth(Date date) { |
||||||
|
return getAddDate(date, Calendar.MONTH, -1); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取前一年 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Date getBeforeYear(Date date) { |
||||||
|
return getAddDate(date, Calendar.YEAR, -1); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取前一周 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Date getAfterWeek(Date date) { |
||||||
|
return getAddDate(date, Calendar.WEEK_OF_YEAR, 1); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取前一天 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Date getAfterDay(Date date) { |
||||||
|
return getAddDate(date, Calendar.DAY_OF_YEAR, 1); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取前一月 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Date getAfterMouth(Date date) { |
||||||
|
return getAddDate(date, Calendar.MONTH, 1); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取前一年 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Date getAfterYear(Date date) { |
||||||
|
return getAddDate(date, Calendar.YEAR, 1); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 增加日期 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @param field Calendar.MONTH,Calendar.DAY_OF_YEAR |
||||||
|
* @param amount 正数为将来时间, 负数为过去时间 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Date getAddDate(Date date, int field, int amount) { |
||||||
|
Calendar cl = Calendar.getInstance(); |
||||||
|
cl.setTime(date); |
||||||
|
cl.add(field, amount); |
||||||
|
Date dateFrom = cl.getTime(); |
||||||
|
return dateFrom; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到日期时间字符串,转换格式(yyyy-MM-dd HH:mm:ss) |
||||||
|
*/ |
||||||
|
public static String formatDateTime(Date date) { |
||||||
|
return formatDate(date, "yyyy-MM-dd HH:mm:ss"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到当前时间字符串 格式(HH:mm:ss) |
||||||
|
*/ |
||||||
|
public static String formatTime() { |
||||||
|
return formatDate(new Date(), "HH:mm:ss"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到当前日期和时间字符串 格式(yyyy-MM-dd HH:mm:ss) |
||||||
|
*/ |
||||||
|
public static String formatCurrentDateTime() { |
||||||
|
return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到当前年份字符串 格式(yyyy) |
||||||
|
*/ |
||||||
|
public static String formatYear() { |
||||||
|
return formatDate(new Date(), "yyyy"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到当前月份字符串 格式(MM) |
||||||
|
*/ |
||||||
|
public static String formatMonth() { |
||||||
|
return formatDate(new Date(), "MM"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到当天字符串 格式(dd) |
||||||
|
*/ |
||||||
|
public static String formatDay() { |
||||||
|
return formatDate(new Date(), "dd"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到当前星期字符串 格式(E)星期几 |
||||||
|
*/ |
||||||
|
public static String formatWeek() { |
||||||
|
return formatDate(new Date(), "E"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取过去的天数 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static long getBeforeDays(Date date) { |
||||||
|
long t = System.currentTimeMillis() - date.getTime(); |
||||||
|
return t / (ONE_DAY * ONE_MILLIS); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取过去的小时 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static long getBeforeHours(Date date) { |
||||||
|
long t = System.currentTimeMillis() - date.getTime(); |
||||||
|
return t / (ONE_HOUR * ONE_MILLIS); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取过去的分钟 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static long getBeforeMinutes(Date date) { |
||||||
|
long t = System.currentTimeMillis() - date.getTime(); |
||||||
|
return t / (ONE_MINUTE * ONE_MILLIS); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取过去的秒 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static long getBeforeSeconds(Date date) { |
||||||
|
long t = System.currentTimeMillis() - date.getTime(); |
||||||
|
return t / ONE_MILLIS; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取两个日期之间的天数 |
||||||
|
* |
||||||
|
* @param before |
||||||
|
* @param after |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static double getDays(Date before, Date after) { |
||||||
|
long beforeTime = before.getTime(); |
||||||
|
long afterTime = after.getTime(); |
||||||
|
return (afterTime - beforeTime) / (ONE_MILLIS * ONE_DAY); |
||||||
|
} |
||||||
|
/** |
||||||
|
* 获取昨天 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @param pattern |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getLastDay(Date date, String pattern) { |
||||||
|
Calendar cl = Calendar.getInstance(); |
||||||
|
cl.setTime(date); |
||||||
|
//一天
|
||||||
|
cl.add(Calendar.DAY_OF_YEAR, -1); |
||||||
|
Date dateFrom = cl.getTime(); |
||||||
|
return formatDate(dateFrom, pattern); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取上个月 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @param pattern |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getLastMouth(Date date, String pattern) { |
||||||
|
Calendar cl = Calendar.getInstance(); |
||||||
|
cl.setTime(date); |
||||||
|
//一个月
|
||||||
|
cl.add(Calendar.MONTH, -1); |
||||||
|
Date dateFrom = cl.getTime(); |
||||||
|
return formatDate(dateFrom, pattern); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 距离今天多久 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String formatFromToday(Date date) { |
||||||
|
if (date != null) { |
||||||
|
Calendar calendar = Calendar.getInstance(); |
||||||
|
calendar.setTime(date); |
||||||
|
|
||||||
|
long time = date.getTime() / ONE_MILLIS; |
||||||
|
long now = System.currentTimeMillis() / ONE_MILLIS; |
||||||
|
long ago = now - time; |
||||||
|
if (ago <= ONE_HOUR) { |
||||||
|
return ago / ONE_MINUTE + "分钟前"; |
||||||
|
} else if (ago <= ONE_DAY) { |
||||||
|
return ago / ONE_HOUR + "小时" + (ago % ONE_HOUR / ONE_MINUTE) |
||||||
|
+ "分钟前"; |
||||||
|
} else if (ago <= ONE_DAY * 2) { |
||||||
|
return "昨天" + calendar.get(Calendar.HOUR_OF_DAY) + "点" |
||||||
|
+ calendar.get(Calendar.MINUTE) + "分"; |
||||||
|
} else if (ago <= ONE_DAY * 3) { |
||||||
|
return "前天" + calendar.get(Calendar.HOUR_OF_DAY) + "点" |
||||||
|
+ calendar.get(Calendar.MINUTE) + "分"; |
||||||
|
} else if (ago <= ONE_MONTH) { |
||||||
|
long day = ago / ONE_DAY; |
||||||
|
return day + "天前" + calendar.get(Calendar.HOUR_OF_DAY) + "点" |
||||||
|
+ calendar.get(Calendar.MINUTE) + "分"; |
||||||
|
} else if (ago <= ONE_YEAR) { |
||||||
|
long month = ago / ONE_MONTH; |
||||||
|
long day = ago % ONE_MONTH / ONE_DAY; |
||||||
|
return month + "个月" + day + "天前" |
||||||
|
+ calendar.get(Calendar.HOUR_OF_DAY) + "点" |
||||||
|
+ calendar.get(Calendar.MINUTE) + "分"; |
||||||
|
} else { |
||||||
|
long year = ago / ONE_YEAR; |
||||||
|
// JANUARY which is 0 so month+1
|
||||||
|
int month = calendar.get(Calendar.MONTH) + 1; |
||||||
|
return year + "年前" + month + "月" + calendar.get(Calendar.DATE) |
||||||
|
+ "日"; |
||||||
|
} |
||||||
|
|
||||||
|
} else { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 距离今天多久 |
||||||
|
* |
||||||
|
* @param createAt |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String formatTextFromtoday(Date createAt) { |
||||||
|
// 定义最终返回的结果字符串。
|
||||||
|
String interval = null; |
||||||
|
if (createAt == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
long millisecond = System.currentTimeMillis() - createAt.getTime(); |
||||||
|
|
||||||
|
long second = millisecond / ONE_MILLIS; |
||||||
|
|
||||||
|
if (second <= 0) { |
||||||
|
second = 0; |
||||||
|
} |
||||||
|
//*--------------微博体(标准)
|
||||||
|
if (second == 0) { |
||||||
|
interval = "刚刚"; |
||||||
|
} else if (second < ONE_MINUTE / 2) { |
||||||
|
interval = second + "秒以前"; |
||||||
|
} else if (second >= ONE_MINUTE / 2 && second < ONE_MINUTE) { |
||||||
|
interval = "半分钟前"; |
||||||
|
} else if (second >= ONE_MINUTE && second < ONE_MINUTE * ONE_MINUTE) { |
||||||
|
//大于1分钟 小于1小时
|
||||||
|
long minute = second / ONE_MINUTE; |
||||||
|
interval = minute + "分钟前"; |
||||||
|
} else if (second >= ONE_HOUR && second < ONE_DAY) { |
||||||
|
//大于1小时 小于24小时
|
||||||
|
long hour = (second / ONE_MINUTE) / ONE_MINUTE; |
||||||
|
interval = hour + "小时前"; |
||||||
|
} else if (second >= ONE_DAY && second <= ONE_DAY * 2) { |
||||||
|
//大于1D 小于2D
|
||||||
|
interval = "昨天" + formatDate(createAt, "HH:mm"); |
||||||
|
} else if (second >= ONE_DAY * 2 && second <= ONE_DAY * 7) { |
||||||
|
//大于2D小时 小于 7天
|
||||||
|
long day = ((second / ONE_MINUTE) / ONE_MINUTE) / 24; |
||||||
|
interval = day + "天前"; |
||||||
|
} else if (second <= ONE_DAY * 365 && second >= ONE_DAY * 7) { |
||||||
|
//大于7天小于365天
|
||||||
|
interval = formatDate(createAt, "MM-dd HH:mm"); |
||||||
|
} else if (second >= ONE_DAY * 365) { |
||||||
|
//大于365天
|
||||||
|
interval = formatDate(createAt, "yyyy-MM-dd HH:mm"); |
||||||
|
} else { |
||||||
|
interval = "0"; |
||||||
|
} |
||||||
|
return interval; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 距离截止日期还有多长时间 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String formatTextFromDeadline(Date date) { |
||||||
|
long deadline = date.getTime() / ONE_MILLIS; |
||||||
|
long now = (System.currentTimeMillis()) / ONE_MILLIS; |
||||||
|
long remain = deadline - now; |
||||||
|
if (remain <= ONE_HOUR) { |
||||||
|
return "只剩下" + remain / ONE_MINUTE + "分钟"; |
||||||
|
} else if (remain <= ONE_DAY) { |
||||||
|
return "只剩下" + remain / ONE_HOUR + "小时" |
||||||
|
+ (remain % ONE_HOUR / ONE_MINUTE) + "分钟"; |
||||||
|
} else { |
||||||
|
long day = remain / ONE_DAY; |
||||||
|
long hour = remain % ONE_DAY / ONE_HOUR; |
||||||
|
long minute = remain % ONE_DAY % ONE_HOUR / ONE_MINUTE; |
||||||
|
return "只剩下" + day + "天" + hour + "小时" + minute + "分钟"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 转换为时间(天,时:分:秒.毫秒) |
||||||
|
* |
||||||
|
* @param timeMillis |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String formatDateTime(long timeMillis) { |
||||||
|
long day = timeMillis / (ONE_DAY * ONE_MILLIS); |
||||||
|
long hour = (timeMillis / (ONE_HOUR * ONE_MILLIS) - day * 24); |
||||||
|
long min = ((timeMillis / (ONE_MINUTE * ONE_MILLIS)) - day * 24 * ONE_MINUTE - hour * ONE_MINUTE); |
||||||
|
long s = (timeMillis / ONE_MILLIS - day * 24 * ONE_MINUTE * ONE_MINUTE - hour * ONE_MINUTE * ONE_MINUTE - min * ONE_MINUTE); |
||||||
|
long sss = (timeMillis - day * 24 * ONE_MINUTE * ONE_MINUTE * ONE_MILLIS - hour * ONE_MINUTE * ONE_MINUTE * ONE_MILLIS - min * ONE_MINUTE * ONE_MILLIS - s * ONE_MILLIS); |
||||||
|
return (day > 0 ? day + "," : "") + hour + ":" + min + ":" + s + "." + sss; |
||||||
|
} |
||||||
|
|
||||||
|
public static String formatDate(long timeMillis) { |
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小时制
|
||||||
|
Date date = new Date(); |
||||||
|
date.setTime(timeMillis); |
||||||
|
return (simpleDateFormat.format(date)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Unix时间戳转换成指定格式日期字符串 |
||||||
|
* |
||||||
|
* @param timestampString 时间戳 如:"1473048265"; |
||||||
|
* @param pattern 要格式化的格式 默认:"yyyy-MM-dd HH:mm:ss"; |
||||||
|
* @return 返回结果 如:"2016-09-05 16:06:42"; |
||||||
|
*/ |
||||||
|
public static String unixTimeStamp2Date(String timestampString, String pattern) { |
||||||
|
if (StringUtils.isBlank(pattern)) { |
||||||
|
pattern = "yyyy-MM-dd HH:mm:ss"; |
||||||
|
} |
||||||
|
Long timestamp = Long.parseLong(timestampString) * ONE_MINUTE; |
||||||
|
String date = new SimpleDateFormat(pattern, Locale.CHINA).format(new Date(timestamp)); |
||||||
|
return date; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 日期格式字符串转换成Unix时间戳 |
||||||
|
* |
||||||
|
* @param dateStr 字符串日期 |
||||||
|
* @param pattern 如:yyyy-MM-dd HH:mm:ss |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String date2UnixTimeStamp(String dateStr, String pattern) { |
||||||
|
try { |
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(pattern); |
||||||
|
return String.valueOf(sdf.parse(dateStr).getTime() / ONE_MINUTE); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 毫秒转化时分秒毫秒 10000 - 10秒 |
||||||
|
* |
||||||
|
* @param ms |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String formatTime(Long ms) { |
||||||
|
long ss = ONE_MINUTE; |
||||||
|
long mi = ss * ONE_MINUTE; |
||||||
|
long hh = mi * ONE_MINUTE; |
||||||
|
long dd = hh * 24; |
||||||
|
|
||||||
|
Long day = ms / dd; |
||||||
|
Long hour = (ms - day * dd) / hh; |
||||||
|
Long minute = (ms - day * dd - hour * hh) / mi; |
||||||
|
Long second = (ms - day * dd - hour * hh - minute * mi) / ss; |
||||||
|
StringBuffer sb = new StringBuffer(); |
||||||
|
if (day > 0) { |
||||||
|
sb.append(day + "天"); |
||||||
|
} |
||||||
|
if (hour > 0) { |
||||||
|
sb.append(hour + "小时"); |
||||||
|
} |
||||||
|
if (minute > 0) { |
||||||
|
sb.append(minute + "分钟"); |
||||||
|
} |
||||||
|
if (second > 0) { |
||||||
|
sb.append(second + "秒"); |
||||||
|
} |
||||||
|
return sb.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取中国星期的下标 |
||||||
|
* @param date |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static int getWeekIndex(Date date){ |
||||||
|
Calendar cal = Calendar.getInstance(); |
||||||
|
cal.setTime(date); |
||||||
|
int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1; |
||||||
|
if (week_index <= 0){ |
||||||
|
week_index = 7; |
||||||
|
} |
||||||
|
return week_index; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到距离今天int类型数量的某天 |
||||||
|
* @param date |
||||||
|
* @param day |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getSomeDay(Date date, int day){ |
||||||
|
Calendar calendar = Calendar.getInstance(); |
||||||
|
calendar.setTime(date); |
||||||
|
calendar.add(Calendar.DATE, day); |
||||||
|
return formatDate(calendar.getTime(),null); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取某个月 |
||||||
|
* |
||||||
|
* @param date |
||||||
|
* @param pattern |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getSomeMouth(Date date, int mouth, String pattern) { |
||||||
|
Calendar cl = Calendar.getInstance(); |
||||||
|
cl.setTime(date); |
||||||
|
//一个月
|
||||||
|
cl.add(Calendar.MONTH, mouth); |
||||||
|
Date dateFrom = cl.getTime(); |
||||||
|
return formatDate(dateFrom, pattern); |
||||||
|
} |
||||||
|
|
||||||
|
public static String getNowEndDay(){ |
||||||
|
return formatDate(new Date(),"yyyy-MM-dd 23:59:59"); |
||||||
|
} |
||||||
|
public static long getNowEndDayMilles() { |
||||||
|
long current=System.currentTimeMillis();//当前时间毫秒数
|
||||||
|
long zero=current/(1000*3600*24)*(1000*3600*24)-TimeZone.getDefault().getRawOffset();//今天零点零分零秒的毫秒数
|
||||||
|
long twelve=zero+24*60*60*1000-1;//今天23点59分59秒的毫秒数
|
||||||
|
return twelve; |
||||||
|
} |
||||||
|
|
||||||
|
//JAVA获取某段时间内的所有日期
|
||||||
|
public static List<Date> findDates(Date dStart, Date dEnd) { |
||||||
|
Calendar cStart = Calendar.getInstance(); |
||||||
|
cStart.setTime(dStart); |
||||||
|
|
||||||
|
List<Date> dateList = new ArrayList<>(); |
||||||
|
//别忘了,把起始日期加上
|
||||||
|
dateList.add(dStart); |
||||||
|
// 此日期是否在指定日期之后
|
||||||
|
while (dEnd.after(cStart.getTime())) { |
||||||
|
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
|
||||||
|
cStart.add(Calendar.DAY_OF_MONTH, 1); |
||||||
|
dateList.add(cStart.getTime()); |
||||||
|
} |
||||||
|
return dateList; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static List<String> findWeeKDates(Date dStart, Date dEnd) { |
||||||
|
Calendar cStart = Calendar.getInstance(); |
||||||
|
cStart.setTime(dStart); |
||||||
|
|
||||||
|
List<String> dateList = new ArrayList<>(); |
||||||
|
//别忘了,把起始日期加上
|
||||||
|
dateList.add( cStart.get(Calendar.YEAR) +"/" + cStart.get(Calendar.WEEK_OF_YEAR)); |
||||||
|
// 此日期是否在指定日期之后
|
||||||
|
while (dEnd.after(cStart.getTime())) { |
||||||
|
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
|
||||||
|
cStart.add(Calendar.WEEK_OF_YEAR, 1); |
||||||
|
dateList.add(cStart.get(Calendar.YEAR) +"/"+cStart.get(Calendar.WEEK_OF_YEAR)); |
||||||
|
} |
||||||
|
return dateList; |
||||||
|
} |
||||||
|
// string类型转换为date类型
|
||||||
|
// strTime要转换的string类型的时间,formatType要转换的格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日
|
||||||
|
// HH时mm分ss秒,
|
||||||
|
// strTime的时间格式必须要与formatType的时间格式相同
|
||||||
|
public static Date stringToDate(String strTime, String formatType) |
||||||
|
throws ParseException { |
||||||
|
SimpleDateFormat formatter = new SimpleDateFormat(formatType); |
||||||
|
Date date = null; |
||||||
|
date = formatter.parse(strTime); |
||||||
|
return date; |
||||||
|
} |
||||||
|
|
||||||
|
public static List<Integer> getMonthList(int year) { |
||||||
|
List<Integer> monthList = new ArrayList<>(); |
||||||
|
Calendar calendar = Calendar.getInstance(); |
||||||
|
|
||||||
|
// 设置年份
|
||||||
|
calendar.set(Calendar.YEAR, year); |
||||||
|
|
||||||
|
// 遍历月份,添加到列表中
|
||||||
|
for (int month = 0; month < 12; month++) { |
||||||
|
// 设置月份
|
||||||
|
calendar.set(Calendar.MONTH, month); |
||||||
|
|
||||||
|
// 获取当前月份的名称
|
||||||
|
//String monthName = calendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
|
||||||
|
int monthValue = calendar.get(Calendar.MONTH) + 1; |
||||||
|
// 将月份添加到列表
|
||||||
|
monthList.add(monthValue); |
||||||
|
} |
||||||
|
|
||||||
|
return monthList; |
||||||
|
} |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
|
||||||
|
List<Integer> dayList= DateUtils.getMonthList(2023); |
||||||
|
|
||||||
|
dayList.forEach(date -> { |
||||||
|
System.out.printf(date+" "); |
||||||
|
|
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,111 @@ |
|||||||
|
package com.biutag.lan.controller.datascreen; |
||||||
|
|
||||||
|
import com.biutag.aop.NotLogin; |
||||||
|
import com.biutag.core.AjaxResult; |
||||||
|
import com.biutag.entity.system.Duty; |
||||||
|
import com.biutag.enums.DeptTypeEnum; |
||||||
|
import com.biutag.lan.AdminThreadLocal; |
||||||
|
import com.biutag.lan.domain.Mail; |
||||||
|
import com.biutag.lan.domain.MailSource; |
||||||
|
import com.biutag.lan.service.DataScreenService; |
||||||
|
import com.biutag.lan.service.IDutyService; |
||||||
|
import com.biutag.lan.service.IIndexService; |
||||||
|
import com.biutag.util.DateUtils; |
||||||
|
import io.swagger.annotations.Api; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import jakarta.annotation.Resource; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
@RestController |
||||||
|
@RequestMapping("api/dataScreen") |
||||||
|
@Api(tags = "主页数据管理") |
||||||
|
public class DataScreenController { |
||||||
|
|
||||||
|
|
||||||
|
@Resource |
||||||
|
DataScreenService dataScreenService; |
||||||
|
@Resource |
||||||
|
IDutyService iDutyService; |
||||||
|
|
||||||
|
|
||||||
|
@NotLogin |
||||||
|
@GetMapping("/mapData") |
||||||
|
@ApiOperation(value="地图数据") |
||||||
|
public AjaxResult<List<Map<String, Object>>> mapData(@RequestParam Map<String,Object> params) { |
||||||
|
|
||||||
|
return AjaxResult.success(dataScreenService.mapData(null)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@NotLogin |
||||||
|
@GetMapping("/peopleMail") |
||||||
|
@ApiOperation(value="群众来信") |
||||||
|
public AjaxResult<List<Mail>> peopleMail() { |
||||||
|
return AjaxResult.success(dataScreenService.selectRecentlyMailList()); |
||||||
|
} |
||||||
|
|
||||||
|
@NotLogin |
||||||
|
@GetMapping("/consoleData") |
||||||
|
@ApiOperation(value="大屏数据") |
||||||
|
public AjaxResult<Map<String, Object>> consoleData() { |
||||||
|
return AjaxResult.success(dataScreenService.consoleData(null)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@NotLogin |
||||||
|
@GetMapping("/dutyDay") |
||||||
|
@ApiOperation(value="今日值班") |
||||||
|
public AjaxResult<Map<String, Object>> dutyDay() { |
||||||
|
Map<String, Object> map =new HashMap<>(); |
||||||
|
List<Duty> dutySjList = iDutyService.getSameDayDuty(DeptTypeEnum.SJ_TYPE.getType()); |
||||||
|
List<Duty> dutyFjList = iDutyService.getSameDayDuty(DeptTypeEnum.FJ_TYPE.getType()); |
||||||
|
List<Duty> dutyZdList = iDutyService.getSameDayDuty(DeptTypeEnum.ZD_TYPE.getType()); |
||||||
|
List<Duty> dutyBwList = iDutyService.getSameDayDuty(DeptTypeEnum.BW_TYPE.getType()); |
||||||
|
map.put("dutySjList",dutySjList); |
||||||
|
map.put("dutyFjList",dutyFjList); |
||||||
|
map.put("dutyZdList",dutyZdList); |
||||||
|
map.put("dutyBwList",dutyBwList); |
||||||
|
return AjaxResult.success(map); |
||||||
|
} |
||||||
|
|
||||||
|
@NotLogin |
||||||
|
@GetMapping("/threeRate") |
||||||
|
@ApiOperation(value="三率") |
||||||
|
public AjaxResult<Map<String, Object>> threeRate() { |
||||||
|
Map<String, Object> map =new HashMap<>(); |
||||||
|
List<Map<String, String>> completeList = dataScreenService.getCompletedRate(); |
||||||
|
List<Map<String, String>> satisfiedList = dataScreenService.getSatisfiedRate(); |
||||||
|
List<Map<String, String>> resolvedList = dataScreenService.getResolvedRate(); |
||||||
|
map.put("completeList",completeList); |
||||||
|
map.put("satisfiedList",satisfiedList); |
||||||
|
map.put("resolvedList",resolvedList); |
||||||
|
return AjaxResult.success(map); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@NotLogin |
||||||
|
@GetMapping("/mailTrend") |
||||||
|
@ApiOperation(value="来信趋势") |
||||||
|
public AjaxResult<Map<String, Object>> mailTrend(@RequestParam Map<String,Object> params) { |
||||||
|
return AjaxResult.success(dataScreenService.getMailTrend(params)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@NotLogin |
||||||
|
@GetMapping("/mailTypeRank") |
||||||
|
@ApiOperation(value="信件类型排行") |
||||||
|
public AjaxResult< List<Map<String, Object>>> mailTypeRank() { |
||||||
|
return AjaxResult.success(dataScreenService.mailTypeRank()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,137 @@ |
|||||||
|
package com.biutag.lan.mapper; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||||
|
import com.biutag.lan.domain.Mail; |
||||||
|
import com.biutag.lan.domain.MailSource; |
||||||
|
import com.biutag.lan.domain.Work; |
||||||
|
import com.biutag.lan.domain.vo.WorkVo; |
||||||
|
import org.apache.ibatis.annotations.Param; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public interface DataScreenMapper extends BaseMapper<Mail> { |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
List<Map<String,Object>> mapData(String deptId); |
||||||
|
/** |
||||||
|
* 最近信件 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
List<Mail> selectRecentlyMailList(); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取三率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
List<Map<String,String>> getCompletedRate(); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取三率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
List<Map<String,String>> getResolvedRate(); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取三率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
List<Map<String,String>> getSatisfiedRate(); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取所队三率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
List<Map<String,String>> getStationCompletedRateByDept(String deptId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取所队三率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
List<Map<String,String>> getStationResolvedRateByDept(String deptId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取所队三率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
List<Map<String,String>> getStationSatisfiedRateByDept(String deptId); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取今日来信数量 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
Integer getTodayMailCount(@Param("deptId") String deptId); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取总共来信数量 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
Integer getAllMailCount(@Param("deptId") String deptId); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 全长沙办结率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
Map<String,Object> getAllResolvedRate(); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 全长沙解决率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
Map<String,Object> getAllResolvedRate(@Param("deptId") String deptId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 全长沙办结率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
Map<String,Object> getAllCompletedRate(@Param("deptId") String deptId); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 全长沙满意率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
Map<String,Object> getAllSatisfiedRate(@Param("deptId") String deptId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 各区县办结率 |
||||||
|
* @param deptId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
Map<String,String> getResolvedRateByDeptId(@Param("deptId") String deptId); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 各类型占比 |
||||||
|
* @param |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
List< Map<String,Object>> mailTypeRank(); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
List< Map<String,Object>> getMailDayTrend(@Param("startDate") String startDate,@Param("endDate") String endDate); |
||||||
|
|
||||||
|
List< Map<String,Object>> getMailWeekTrend(@Param("startDate") String startDate,@Param("endDate") String endDate); |
||||||
|
|
||||||
|
List< Map<String,Object>> getMailMonthTrend(@Param("year") String year); |
||||||
|
} |
||||||
@ -0,0 +1,176 @@ |
|||||||
|
package com.biutag.lan.service; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.biutag.lan.domain.Mail; |
||||||
|
import com.biutag.lan.mapper.DataScreenMapper; |
||||||
|
import com.biutag.util.DateUtils; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.util.*; |
||||||
|
import java.util.concurrent.atomic.AtomicReference; |
||||||
|
|
||||||
|
@RequiredArgsConstructor |
||||||
|
@Service |
||||||
|
public class DataScreenService extends ServiceImpl<DataScreenMapper, Mail> { |
||||||
|
|
||||||
|
|
||||||
|
public List<Map<String,Object>> mapData(String deptId){ |
||||||
|
return baseMapper.mapData(deptId); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public List<Mail> selectRecentlyMailList() { |
||||||
|
|
||||||
|
return baseMapper.selectRecentlyMailList(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 办结率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<Map<String,String>> getCompletedRate(){ |
||||||
|
return baseMapper.getCompletedRate(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 解决率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
|
||||||
|
public List<Map<String,String>> getResolvedRate(){ |
||||||
|
return baseMapper.getResolvedRate(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 满意率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<Map<String,String>> getSatisfiedRate(){ |
||||||
|
return baseMapper.getSatisfiedRate(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取所队三率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<Map<String,String>> getStationCompletedRateByDept(String deptId){ |
||||||
|
return baseMapper.getStationCompletedRateByDept(deptId); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取所队三率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<Map<String,String>> getStationResolvedRateByDept(String deptId){ |
||||||
|
return baseMapper.getStationResolvedRateByDept(deptId); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取所队三率 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<Map<String,String>> getStationSatisfiedRateByDept(String deptId){ |
||||||
|
return baseMapper.getStationSatisfiedRateByDept(deptId); |
||||||
|
} |
||||||
|
public Map<String, Object> consoleData(String deptId) { |
||||||
|
Map<String, Object> mapCompleted = baseMapper.getAllCompletedRate(null);//获取长沙市局 办结率
|
||||||
|
Map<String, Object> mapResolved = baseMapper.getAllResolvedRate(null);//获取长沙市局 解决率
|
||||||
|
Map<String, Object> mapSatisfied = baseMapper.getAllSatisfiedRate(null);//获取长沙市局 满意率
|
||||||
|
Integer allSum =baseMapper.getAllMailCount(null); |
||||||
|
Integer toDayCount=baseMapper.getTodayMailCount(null); |
||||||
|
mapCompleted.putAll(mapResolved); |
||||||
|
mapCompleted.putAll(mapSatisfied); |
||||||
|
mapCompleted.put("todaySum",toDayCount); |
||||||
|
mapCompleted.put("allSum",allSum); |
||||||
|
return mapCompleted; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public List<Map<String,Object>> mailTypeRank(){ |
||||||
|
return baseMapper.mailTypeRank(); |
||||||
|
} |
||||||
|
|
||||||
|
public Map<String,Object> getMailTrend( Map<String,Object> params){ |
||||||
|
Map dataMap=new HashMap(); |
||||||
|
//按天
|
||||||
|
Date endDayDate =new Date(); |
||||||
|
Date startDayDate = DateUtils.getAddDate(endDayDate, Calendar.DAY_OF_YEAR, -(Integer.valueOf(params.get("day").toString()))); |
||||||
|
List<Date> dayList= DateUtils.findDates(startDayDate,endDayDate); |
||||||
|
List<String> dayXList= new ArrayList<>(); |
||||||
|
dayList.forEach(date -> { |
||||||
|
dayXList.add(DateUtils.formatDate(date,"yyyy/MM/dd")); |
||||||
|
|
||||||
|
}); |
||||||
|
String endDayDataStr=DateUtils.formatDate(endDayDate,"yyyy-MM-dd")+ " 23:59:59"; |
||||||
|
String startDayDateStr=DateUtils.formatDate(startDayDate,"yyyy-MM-dd")+ " 00:00:00"; |
||||||
|
List< Map<String,Object>> dayDataList= baseMapper.getMailDayTrend(startDayDateStr,endDayDataStr); |
||||||
|
List<Object> dayYList= new ArrayList<>(); |
||||||
|
AtomicReference<Boolean> dayTrue= new AtomicReference<>(true); |
||||||
|
dayXList.forEach(date-> { |
||||||
|
dayTrue.set(true); |
||||||
|
dayDataList.forEach(map ->{ |
||||||
|
if(date.equals(map.get("create_time").toString()) ){ |
||||||
|
dayYList.add(Integer.valueOf(map.get("countsum").toString()) ); |
||||||
|
dayTrue.set(false); |
||||||
|
} |
||||||
|
}); |
||||||
|
if(dayTrue.get()){ |
||||||
|
dayYList.add(0); |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
dataMap.put("dayXList",dayXList); |
||||||
|
dataMap.put("dayYList",dayYList); |
||||||
|
//按周
|
||||||
|
Date startWeekDate = DateUtils.getAddDate(endDayDate, Calendar.WEEK_OF_YEAR, -(Integer.valueOf(params.get("week").toString()))); |
||||||
|
String startWeekDateStr=DateUtils.formatDate(startWeekDate,"yyyy-MM-dd")+ " 00:00:00"; |
||||||
|
List<String> weekXList= DateUtils.findWeeKDates(startWeekDate,endDayDate); |
||||||
|
List< Map<String,Object>> weekDataList= baseMapper.getMailWeekTrend(startWeekDateStr,endDayDataStr); |
||||||
|
List<Object> weekYList= new ArrayList<>(); |
||||||
|
AtomicReference<Boolean> weekTrue= new AtomicReference<>(true); |
||||||
|
weekXList.forEach(date-> { |
||||||
|
weekTrue.set(true); |
||||||
|
weekDataList.forEach(map ->{ |
||||||
|
if(date.equals(map.get("week").toString()) ){ |
||||||
|
weekYList.add(Integer.valueOf(map.get("countsum").toString())); |
||||||
|
weekTrue.set(false); |
||||||
|
} |
||||||
|
}); |
||||||
|
if(weekTrue.get()){ |
||||||
|
weekYList.add(0); |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
dataMap.put("weekXList",weekXList); |
||||||
|
dataMap.put("weekYList",weekYList); |
||||||
|
//按月
|
||||||
|
String year=params.get("year").toString(); |
||||||
|
List<Integer> monthXList= DateUtils.getMonthList(Integer.valueOf(year)); |
||||||
|
List<Map<String,Object>> monthDataList= baseMapper.getMailMonthTrend(year); |
||||||
|
List<Object> monthYList= new ArrayList<>(); |
||||||
|
AtomicReference<Boolean> monthTrue= new AtomicReference<>(true); |
||||||
|
monthXList.forEach(month-> { |
||||||
|
monthTrue.set(true); |
||||||
|
monthDataList.forEach(map ->{ |
||||||
|
if(month.equals(Integer.valueOf(map.get("month").toString())) ){ |
||||||
|
monthYList.add(Integer.valueOf(map.get("countsum").toString())); |
||||||
|
monthTrue.set(false); |
||||||
|
} |
||||||
|
}); |
||||||
|
if(monthTrue.get()) { |
||||||
|
monthYList.add(0); |
||||||
|
} |
||||||
|
}); |
||||||
|
dataMap.put("monthXList",monthXList); |
||||||
|
dataMap.put("monthYList",monthYList); |
||||||
|
return dataMap; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,124 @@ |
|||||||
|
<?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.biutag.lan.mapper.DataScreenMapper"> |
||||||
|
|
||||||
|
|
||||||
|
<select id="selectRecentlyMailList" resultType="com.biutag.lan.domain.Mail"> |
||||||
|
|
||||||
|
select a.id,contact_name,contact_phone,a.create_time ,b.name mail_state from mail a |
||||||
|
left join dict_data b on a.mail_state=b.value |
||||||
|
left join mail_mark c on a.id=c.mail_id |
||||||
|
/* where c.resolved ='1' or satisfied='1'*/ |
||||||
|
order by a.create_time desc limit 20; |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="getCompletedRate" resultType="java.util.Map"> |
||||||
|
select b.second_dept_name name,CONCAT(ROUND(sum(COALESCE(b.completed, 0))*100/count(1),0),'%') rate, SUM(COALESCE(b.completed, 0)) completed,count(1) sum |
||||||
|
from dept a inner join mail_mark b on a.id=b.second_dept_id where a.category='2' GROUP BY second_dept_name order by rate desc limit 10 |
||||||
|
</select> |
||||||
|
<select id="getResolvedRate" resultType="java.util.Map"> |
||||||
|
select b.second_dept_name name,CONCAT(ROUND(sum(COALESCE(b.resolved, 0))*100/count(1),0),'%') rate,SUM(COALESCE(b.resolved, 0)) resolved,count(1) sum |
||||||
|
from dept a inner join mail_mark b on a.id=b.second_dept_id where a.category='2' GROUP BY second_dept_name order by rate desc limit 10 |
||||||
|
</select> |
||||||
|
<select id="getSatisfiedRate" resultType="java.util.Map"> |
||||||
|
select b.second_dept_name name,CONCAT(ROUND(sum(COALESCE(b.satisfied, 0))*100/count(1),0),'%') rate,SUM(COALESCE(b.satisfied, 0)) satisfied,count(1) sum |
||||||
|
from dept a inner join mail_mark b on a.id=b.second_dept_id where a.category='2' GROUP BY second_dept_name order by rate desc limit 10 |
||||||
|
</select> |
||||||
|
|
||||||
|
|
||||||
|
<select id="getStationCompletedRateByDept" resultType="java.util.Map" parameterType="String"> |
||||||
|
select b.three_dept_name name,CONCAT(ROUND(sum(COALESCE(b.completed, 0))*100/count(1),0),'%') rate, SUM(COALESCE(b.completed, 0)) completed,count(1) sum |
||||||
|
from dept a inner join mail_mark b on a.id=b.second_dept_id where a.id=b.three_dept_id where b.second_dept_id=#{deptId} GROUP BY three_dept_name order by rate desc limit 10 |
||||||
|
</select> |
||||||
|
<select id="getStationResolvedRateByDept" resultType="java.util.Map" parameterType="String"> |
||||||
|
select b.three_dept_name name,CONCAT(ROUND(sum(COALESCE(b.resolved, 0))*100/count(1),0),'%') rate,SUM(COALESCE(b.resolved, 0)) resolved,count(1) sum |
||||||
|
from dept a inner join mail_mark b on a.id=b.second_dept_id where a.id=b.three_dept_id where b.second_dept_id=#{deptId} GROUP BY three_dept_name order by rate desc limit 10 |
||||||
|
</select> |
||||||
|
<select id="getStationSatisfiedRateByDept" resultType="java.util.Map" parameterType="String"> |
||||||
|
select b.three_dept_name name,CONCAT(ROUND(sum(COALESCE(b.satisfied, 0))*100/count(1),0),'%') rate,SUM(COALESCE(b.satisfied, 0)) satisfied,count(1) sum |
||||||
|
from dept a inner join mail_mark b on a.id=b.second_dept_id where a.id=b.three_dept_id where b.second_dept_id=#{deptId} GROUP BY three_dept_name order by rate desc limit 10 |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="getTodayMailCount" resultType="Integer" parameterType="String"> |
||||||
|
select count(1) mailCount from mail where create_time>=CURRENT_DATE |
||||||
|
<if test="deptId != null and deptId != ''">and second_dep_id=#{deptId} </if> |
||||||
|
</select> |
||||||
|
<select id="getAllMailCount" resultType="Integer"> |
||||||
|
select count(1) as countSum from mail_mark |
||||||
|
</select> |
||||||
|
|
||||||
|
|
||||||
|
<select id="getResolvedRateByDeptId" resultType="java.util.Map" > |
||||||
|
select b.second_dept_name name,CONCAT(ROUND(sum(COALESCE(b.resolved, 0))*100/count(1),0),'%') rate,SUM(COALESCE(b.resolved, 0)) resolved,count(1) sum |
||||||
|
from dept a inner join mail_mark b on a.id=b.second_dept_id where a.category='2' |
||||||
|
<if test="deptId != null and deptId != ''">and b.second_dept_id=#{deptId} GROUP BY second_dept_name </if> |
||||||
|
|
||||||
|
</select> |
||||||
|
<select id="getAllResolvedRate" resultType="java.util.Map"> |
||||||
|
select CONCAT(ROUND(sum(COALESCE(b.resolved, 0))*100/count(1),0),'%') resolvedRate,SUM(COALESCE(b.resolved, 0)) resolved,count(1) resolvedSum |
||||||
|
from mail_mark b left join dept a on a.id=b.second_dept_id where 1=1 |
||||||
|
|
||||||
|
<if test="deptId != null and deptId != ''"> and a.category='2' and b.second_dept_id=#{deptId} GROUP BY second_dept_name</if> |
||||||
|
</select> |
||||||
|
<select id="getAllCompletedRate" resultType="java.util.Map"> |
||||||
|
select CONCAT(ROUND(sum(COALESCE(b.completed, 0))*100/count(1),0),'%') completedRate,SUM(COALESCE(b.completed, 0)) completed,count(1) completedSum |
||||||
|
from mail_mark b left join dept a on a.id=b.second_dept_id where 1=1 |
||||||
|
|
||||||
|
<if test="deptId != null and deptId != ''"> and a.category='2' and b.second_dept_id=#{deptId} GROUP BY second_dept_name</if> |
||||||
|
</select> |
||||||
|
<select id="getAllSatisfiedRate" resultType="java.util.Map"> |
||||||
|
select CONCAT(ROUND(sum(COALESCE(b.satisfied, 0))*100/count(1),0),'%') satisfiedRate,SUM(COALESCE(b.satisfied, 0)) satisfied,count(1) satisfiedSum |
||||||
|
from mail_mark b left join dept a on a.id=b.second_dept_id where 1=1 |
||||||
|
|
||||||
|
<if test="deptId != null and deptId != ''"> and a.category='2' and b.second_dept_id=#{deptId} GROUP BY second_dept_name</if> |
||||||
|
</select> |
||||||
|
<select id="mailTypeRank" resultType="java.util.Map"> |
||||||
|
select ROW_NUMBER() OVER (ORDER BY sumCount desc) AS rowNumber , mail_first_category category,count(1) sumCount ,CONCAT(ROUND(count(1)*100/(select count(1) from mail),0),'%') countRate |
||||||
|
from mail group by mail_first_category limit 10 |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="getMailDayTrend" resultType="java.util.Map"> |
||||||
|
select TO_CHAR(create_time, 'YYYY/MM/DD') create_time,count(1) countsum from mail |
||||||
|
WHERE create_time between #{startDate} and #{endDate} |
||||||
|
group by TO_CHAR(create_time, 'YYYY/MM/DD') order by create_time |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="getMailWeekTrend" resultType="java.util.Map"> |
||||||
|
select countSum ,CONCAT(year,'/',week) week from ( |
||||||
|
SELECT |
||||||
|
EXTRACT(YEAR FROM create_time) AS year, |
||||||
|
EXTRACT(WEEK FROM create_time) AS week , |
||||||
|
count(1) countSum |
||||||
|
FROM mail WHERE create_time between #{startDate} and #{endDate} |
||||||
|
GROUP BY year,week order by year,week) a |
||||||
|
</select> |
||||||
|
<select id="getMailMonthTrend" resultType="java.util.Map"> |
||||||
|
SELECT |
||||||
|
to_char(create_time::DATE, 'MM') AS month , |
||||||
|
count(1) countSum |
||||||
|
FROM mail where EXTRACT(YEAR FROM create_time)=#{year} |
||||||
|
GROUP BY month order by month |
||||||
|
</select> |
||||||
|
<select id="mapData" resultType="java.util.Map"> |
||||||
|
select d.name, a.id, |
||||||
|
(select count(1) mailCount from mail c where c.create_time>=CURRENT_DATE and c.second_dept_id=a.id) todaysum , |
||||||
|
CONCAT(ROUND(sum(COALESCE(b.resolved, 0))*100/count(1),0),'%') resolvedRate, |
||||||
|
SUM(COALESCE(b.resolved, 0)) resolved, |
||||||
|
ROUND(sum(COALESCE(b.completed, 0))*100/count(b.mail_id),0) value, |
||||||
|
CONCAT(ROUND(sum(COALESCE(b.completed, 0))*100/count(b.mail_id),0),'%') completedRate, |
||||||
|
SUM(COALESCE(b.completed, 0)) completed, |
||||||
|
CONCAT(ROUND(sum(COALESCE(b.satisfied, 0))*100/count(1),0),'%') satisfiedRate, |
||||||
|
SUM(COALESCE(b.satisfied, 0)) satisfied, |
||||||
|
count(1) allsum |
||||||
|
from mail_mark b left join dept a on a.id=b.second_dept_id |
||||||
|
inner join county_street_dept d on b.second_dept_id=d.dept_id |
||||||
|
where 1=1 |
||||||
|
<if test="deptId != null and deptId != ''"> and b.second_dept_id=#{deptId}</if> |
||||||
|
GROUP BY d.name,a.id |
||||||
|
|
||||||
|
</select> |
||||||
|
|
||||||
|
|
||||||
|
</mapper> |
||||||
Loading…
Reference in new issue