Commit e999938f by 阳浪

日期查询优化1-今年2-本月3-今日4-本周

parent ca8193a5
...@@ -21,9 +21,9 @@ public interface EventTrackMapper extends BaseMapper<EventTrack> { ...@@ -21,9 +21,9 @@ public interface EventTrackMapper extends BaseMapper<EventTrack> {
EventTrackDayNumVo getTodayNum(@Param("date") String date); EventTrackDayNumVo getTodayNum(@Param("date") String date);
DayNumVo getNumByType(@Param("date") String date,@Param("types")List<Integer> types); DayNumVo getNumByType(@Param("date") String date,@Param("dateString") String dateString,@Param("types")List<Integer> types);
List<EventTrackTypeNumVo> queryNumByType(@Param("deptId") Long deptId,@Param("date") String date,@Param("types")List<Integer> types); List<EventTrackTypeNumVo> queryNumByType(@Param("deptId") Long deptId,@Param("date") String date,@Param("dateString") String dateString,@Param("types")List<Integer> types);
List<EventTrackDeptNumVo> queryDeptByType(@Param("date") String date, @Param("types")List<Integer> types); List<EventTrackDeptNumVo> queryDeptByType(@Param("date") String date,@Param("dateString") String dateString, @Param("types")List<Integer> types);
} }
...@@ -26,10 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -26,10 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.Date; import java.util.*;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/** /**
* com.yizhi.site.application.service.impl * com.yizhi.site.application.service.impl
...@@ -107,31 +104,56 @@ public class EventTrackServiceImpl extends ServiceImpl<EventTrackMapper, EventTr ...@@ -107,31 +104,56 @@ public class EventTrackServiceImpl extends ServiceImpl<EventTrackMapper, EventTr
@Override @Override
public DayNumVo getNumByType(String date,List<Integer> types) { public DayNumVo getNumByType(String date,List<Integer> types) {
if(ObjectUtils.isEmpty(date)){ if(ObjectUtils.isEmpty(date)){
date = DateUtil.toDay(new Date()); date = "3";
} }
return this.baseMapper.getNumByType(date,types); String dateString =getDateString(date);
return this.baseMapper.getNumByType(date,dateString,types);
} }
@Override @Override
public List<EventTrackTypeNumVo> queryNumByType(String date,List<Integer> types) { public List<EventTrackTypeNumVo> queryNumByType(String date,List<Integer> types) {
if(ObjectUtils.isEmpty(date)){ if(ObjectUtils.isEmpty(date)){
date = DateUtil.toDay(new Date()); date = "3";
} }
return this.baseMapper.queryNumByType(null,date,types); String dateString =getDateString(date);
return this.baseMapper.queryNumByType(null,date,dateString,types);
} }
@Override @Override
public List<EventTrackDeptNumVo> queryDeptByType(String date, List<Integer> types) { public List<EventTrackDeptNumVo> queryDeptByType(String date, List<Integer> types) {
if(ObjectUtils.isEmpty(date)){ if(ObjectUtils.isEmpty(date)){
date = DateUtil.toDay(new Date()); date = "3";
} }
List<EventTrackDeptNumVo> eventTrackDeptNumVoList = this.baseMapper.queryDeptByType(date,types); String dateString =getDateString(date);
List<EventTrackDeptNumVo> eventTrackDeptNumVoList = this.baseMapper.queryDeptByType(date,dateString,types);
if(CollUtil.isNotEmpty(eventTrackDeptNumVoList)){ if(CollUtil.isNotEmpty(eventTrackDeptNumVoList)){
String finalDate = date; String finalDate = date;
eventTrackDeptNumVoList.stream().forEach(eventTrackDeptNumVo -> { eventTrackDeptNumVoList.stream().forEach(eventTrackDeptNumVo -> {
eventTrackDeptNumVo.setEventTrackTypeNumVoList(this.baseMapper.queryNumByType(eventTrackDeptNumVo.getDeptId(),finalDate,types)); eventTrackDeptNumVo.setEventTrackTypeNumVoList(this.baseMapper.queryNumByType(eventTrackDeptNumVo.getDeptId(),finalDate, dateString,types));
}); });
} }
return eventTrackDeptNumVoList; return eventTrackDeptNumVoList;
} }
public String getDateString(String date) {
String dateString = DateUtil.toDay(new Date());
String[] dateArrays = dateString.split("-");
if(Objects.equals(date,"1")){
dateString = dateArrays[0];
}
if(Objects.equals(date,"2")){
dateString = dateArrays[0]+"-"+dateArrays[1];
}
if(Objects.equals(date,"4")){
Calendar calendar = Calendar.getInstance();
int week = calendar.get(Calendar.WEEK_OF_YEAR);
if(week==1){
dateString = String.valueOf(Integer.valueOf(dateArrays[0])-1);
}else{
dateString = dateArrays[0];
}
}
return dateString;
}
} }
...@@ -8,17 +8,29 @@ ...@@ -8,17 +8,29 @@
from( from(
select select
case when e.type = 1 and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{date} then 1 else 0 end as loginNum, case when e.type = 1 and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{date} then 1 else 0 end as loginNum,
case when e.type = 1 and DATE_SUB(DATE_FORMAT(e.create_time, '%Y-%m-%d'), INTERVAL -1 DAY) = #{date} then 1 else 0 end as loginPreNum, case when e.type = 1 and DATE_SUB(DATE_FORMAT(e.create_time, '%Y-%m-%d'), INTERVAL 1 DAY) = #{date} then 1 else 0 end as loginPreNum,
case when e.type not in(1,3,4,5,11,12,13) and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{date} then 1 else 0 end as readNum, case when e.type not in(1,3,4,5,11,12,13) and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{date} then 1 else 0 end as readNum,
case when e.type not in(1,3,4,5,11,12,13) and DATE_SUB(DATE_FORMAT(e.create_time, '%Y-%m-%d'), INTERVAL -1 DAY) = #{date} then 1 else 0 end as readPreNum, case when e.type not in(1,3,4,5,11,12,13) and DATE_SUB(DATE_FORMAT(e.create_time, '%Y-%m-%d'), INTERVAL 1 DAY) = #{date} then 1 else 0 end as readPreNum,
case when e.type = 11 and e.type = 12 and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{date} then 1 else 0 end as admireNum, case when e.type = 11 and e.type = 12 and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{date} then 1 else 0 end as admireNum,
case when e.type = 11 and e.type = 12 and DATE_SUB(DATE_FORMAT(e.create_time, '%Y-%m-%d'), INTERVAL -1 DAY) = #{date} then 1 else 0 end as admirePreNum case when e.type = 11 and e.type = 12 and DATE_SUB(DATE_FORMAT(e.create_time, '%Y-%m-%d'), INTERVAL 1 DAY) = #{date} then 1 else 0 end as admirePreNum
from event_track e where e.deleted =0) a from event_track e where e.deleted =0) a
</select> </select>
<select id="queryNumByType" resultType="com.yizhi.site.application.vo.site.EventTrackTypeNumVo"> <select id="queryNumByType" resultType="com.yizhi.site.application.vo.site.EventTrackTypeNumVo">
select select
e.type,e.sub_type as subType,count(1) as num from event_track e e.type,e.sub_type as subType,count(1) as num from event_track e
where e.deleted =0 and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{date} where e.deleted =0
<if test="date==4">
and WEEK(e.create_time) = WEEK(now()) and DATE_FORMAT(e.create_time, '%Y') = DATE_FORMAT(now(), '%Y')
</if>
<if test="date==3">
and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{dateString}
</if>
<if test="date==2">
and DATE_FORMAT(e.create_time, '%Y-%m') = #{dateString}
</if>
<if test="date==1">
and DATE_FORMAT(e.create_time, '%Y') = #{dateString}
</if>
<if test="types!=null and types.size()>0"> <if test="types!=null and types.size()>0">
AND e.type IN AND e.type IN
<foreach collection="types" item="item" open="(" separator="," close=")"> <foreach collection="types" item="item" open="(" separator="," close=")">
...@@ -34,7 +46,19 @@ ...@@ -34,7 +46,19 @@
<select id="queryDeptByType" resultType="com.yizhi.site.application.vo.site.EventTrackDeptNumVo"> <select id="queryDeptByType" resultType="com.yizhi.site.application.vo.site.EventTrackDeptNumVo">
select select
e.dept_id as deptId,e.dept_name as deptName,count(1) as num from event_track e e.dept_id as deptId,e.dept_name as deptName,count(1) as num from event_track e
where e.deleted =0 and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{date} where e.deleted =0
<if test="date==4">
and WEEK(e.create_time) = WEEK(now()) and DATE_FORMAT(e.create_time, '%Y') = DATE_FORMAT(now(), '%Y')
</if>
<if test="date==3">
and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{dateString}
</if>
<if test="date==2">
and DATE_FORMAT(e.create_time, '%Y-%m') = #{dateString}
</if>
<if test="date==1">
and DATE_FORMAT(e.create_time, '%Y') = #{dateString}
</if>
<if test="types!=null and types.size()>0"> <if test="types!=null and types.size()>0">
AND e.type IN AND e.type IN
<foreach collection="types" item="item" open="(" separator="," close=")"> <foreach collection="types" item="item" open="(" separator="," close=")">
...@@ -47,8 +71,34 @@ ...@@ -47,8 +71,34 @@
select ifnull(sum(num),0) as num,ifnull(sum(preNum),0) as preNum select ifnull(sum(num),0) as num,ifnull(sum(preNum),0) as preNum
from( from(
select select
case when e.type = 1 and DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{date} then 1 else 0 end as num, case when e.type = 1 and
case when e.type = 1 and DATE_SUB(DATE_FORMAT(e.create_time, '%Y-%m-%d'), INTERVAL -1 DAY) = #{date} then 1 else <if test="date==4">
WEEK(e.create_time) = WEEK(now()) and DATE_FORMAT(e.create_time, '%Y') = DATE_FORMAT(now(), '%Y')
</if>
<if test="date==3">
DATE_FORMAT(e.create_time, '%Y-%m-%d') = #{dateString}
</if>
<if test="date==2">
DATE_FORMAT(e.create_time, '%Y-%m') = #{dateString}
</if>
<if test="date==1">
DATE_FORMAT(e.create_time, '%Y') = #{dateString}
</if>
then 1 else 0 end as num,
case when e.type = 1 and
<if test="date==4">
WEEK(e.create_time) = WEEK(DATE_SUB(DATE_FORMAT(now(), '%Y-%m-%d'), INTERVAL 7 DAY)) and DATE_FORMAT(e.create_time, '%Y') = #{dateString}
</if>
<if test="date==3">
DATE_SUB(DATE_FORMAT(e.create_time, '%Y-%m-%d'), INTERVAL 1 DAY) = #{dateString}
</if>
<if test="date==2">
DATE_FORMAT(DATE_SUB(DATE_FORMAT(now(), '%Y-%m-%d'), INTERVAL 1 MONTH),'%Y-%m') = #{dateString}
</if>
<if test="date==1">
DATE_FORMAT(DATE_SUB(DATE_FORMAT(now(), '%Y-%m-%d'), INTERVAL 1 YEAR),'%Y') = #{dateString}
</if>
then 1 else
0 end as preNum from event_track e 0 end as preNum from event_track e
where e.deleted =0 where e.deleted =0
<if test="types!=null and types.size()>0"> <if test="types!=null and types.size()>0">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment