Browse Source

自定义时间查询 访问量

Administrator 2 years ago
parent
commit
82d73f482b

+ 3 - 0
mhotel/src/com/happy/Model/UserVisits.java

@@ -15,6 +15,9 @@ public class UserVisits extends HashMap {
     private String type; // 数据类型
     private String remark; // 备注
 
+//    private String day;
+//    private String visitNumber;
+
     public int getId() {
         return id;
     }

+ 5 - 5
mhotel/src/com/happy/Until/DateUtil.java

@@ -392,10 +392,10 @@ public class DateUtil
     public static boolean isDateStr(String str, boolean hasDay) {
 
         boolean convertSuccess = true;
-        // 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
-        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
+        // 指定日期格式为四位年/两位月份/两位日期,注意yyyy-MM-dd区分大小写;
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         if (!hasDay) {
-            format = new SimpleDateFormat("yyyy/MM");
+            format = new SimpleDateFormat("yyyy-MM");
         }
         try {
             // 设置lenient为false.
@@ -404,9 +404,9 @@ public class DateUtil
             format.parse(str);
         } catch (ParseException e) {
             try {
-                SimpleDateFormat formatt = new SimpleDateFormat("yyyy-MM-dd");
+                SimpleDateFormat formatt = new SimpleDateFormat("yyyy/MM/dd");
                 if (!hasDay) {
-                    formatt = new SimpleDateFormat("yyyy-MM");
+                    formatt = new SimpleDateFormat("yyyy/MM");
                 }
                 formatt.setLenient(false);
                 Date tempDate = formatt.parse(str);

+ 95 - 0
mhotel/src/com/happy/Until/Enum/VisitsEnum.java

@@ -0,0 +1,95 @@
+package com.happy.Until.Enum;
+
+import com.happy.Until.Func;
+
+/**
+ * 访问量
+ *     //1.今日 2.本月 3.本年 4.自定义时间
+ */
+public enum VisitsEnum {
+
+    今日(1,"今日"),本周(2,"本周"),本月(3,"本月"),
+    自定义(4,"自定义"),状态异常(0,"状态异常");
+
+    private int key;
+    private String value;
+
+    VisitsEnum(int key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    /**
+     * 遍历枚举类
+     * @param key
+     * @return
+     */
+    public static VisitsEnum getEunmBykey(int key) {
+        try {
+            for (VisitsEnum type : VisitsEnum.values()) {
+                if (Func.parseInt(type.getKey()) == key) {
+                    return type;
+                }
+            }
+        } catch (Exception e) {
+            return 状态异常;
+        }
+        return 状态异常;
+    }
+
+    /**
+     * 遍历枚举类
+     * @param key
+     * @return
+     */
+    public static String getValueBykey(int key) {
+        try {
+            for (VisitsEnum type : VisitsEnum.values()) {
+                if (Func.parseInt(type.getKey()) == key) {
+                    return type.getValue();
+                }
+            }
+        } catch (Exception e) {
+            return 状态异常.getValue();
+        }
+        return 状态异常.getValue();
+    }
+
+    /**
+     * 遍历枚举类
+     * @param value
+     * @return
+     */
+    public static int getKeyByValue(String value) {
+        try {
+            if (Func.checkNull(value))
+                return 状态异常.getKey();
+
+            for (VisitsEnum type : VisitsEnum.values()) {
+                if (value.equals(Func.parseStr(type.getValue()))) {
+                    return type.getKey();
+                }
+            }
+        } catch (Exception e) {
+            return 状态异常.getKey();
+        }
+        return 状态异常.getKey();
+    }
+
+
+    public int getKey() {
+        return key;
+    }
+
+    public void setKey(int key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 84 - 2
mhotel/src/com/happy/action/IDCAction.java

@@ -1,6 +1,9 @@
 package com.happy.action;
 
 import com.happy.Model.UserVisits;
+import com.happy.Until.DateUtil;
+import com.happy.Until.Enum.VisitsEnum;
+import com.happy.Until.Func;
 import com.happy.Until.ResUtil;
 import com.happy.dao.UserVisitsDao;
 import com.happy.dto.IDCBookStatusEto;
@@ -12,18 +15,24 @@ import com.opensymphony.xwork2.ActionSupport;
 import net.sf.json.JSONObject;
 import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.interceptor.ServletRequestAware;
+import org.omg.CORBA.PUBLIC_MEMBER;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.List;
 
+import static com.happy.Until.Enum.VisitsEnum.今日;
+
 public class IDCAction extends ActionSupport implements ServletRequestAware {
 
     private HttpServletRequest request;
     public HttpServletResponse response;
 
-    public Integer type;//1.今日 2.本月 3.本年
+    public Integer type;//1.今日 2.本月 3.本年 4.自定义时间
+    public String startTime; // 开始时间
+    public String endTime;  // 结束时间
 
     @Resource
     private IDCService idcService;
@@ -173,12 +182,13 @@ public class IDCAction extends ActionSupport implements ServletRequestAware {
 
     /**
      * 访问量,今日访问量
+     * 返回数据
      * todayCount,  今日访问量
      * yesterdayCount,  昨日访问量
      *  compare  相对比
      * @return
      */
-    public String userVisits()
+    public String visitsToday()
     {
         JSONObject resultJson = new JSONObject();
         UserVisits info = userVisitsDao.queryTodayUserVisits();
@@ -196,5 +206,77 @@ public class IDCAction extends ActionSupport implements ServletRequestAware {
         return null;
     }
 
+    /**
+     * 访问量趋势 今日、本周、本月
+     * @return
+     */
+    public String visitsDiyQuery(){
+        JSONObject resultJson = new JSONObject();
+        List list = new ArrayList();
+        try {
+            switch (VisitsEnum.getEunmBykey(type)){
+                case 今日:
+                    list = getTodayInfo();
+                    break;
+                case 本周:
+                    list = getWeekInfo();
+                    break;
+                case 本月:
+                    list = getMonthInfo();
+                    break;
+                case 自定义:
+                    list = getDiyInfo(startTime, endTime);
+                    break;
+                case 状态异常:
+                    break;
+            }
+            resultJson.put("message", "查询成功");
+            resultJson.put("code", 200);
+            resultJson.put("data", list);
+            ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
+            return null;
+        } catch (Exception e) {
+            resultJson.put("message", e.getMessage());
+            resultJson.put("code", 400);
+            resultJson.put("data", list);
+            ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
+            return null;
+        }
+    }
+
+    // 自定义时间查询
+    private List getDiyInfo(String startTime,String endTime) throws Exception
+    {
+        if (!(DateUtil.isDateStr(startTime,true) && DateUtil.isDateStr(endTime,true)))
+            throw new RuntimeException("请输入正确的时间");
+
+        if (DateUtil.getDayDiff(startTime,endTime) > 31)
+            throw new RuntimeException("查询天数仅31天之内");
+
+
+        return userVisitsDao.queryVisitsByDiyTime(startTime,endTime);
+    }
+
+    // 今日
+    private List getTodayInfo()
+    {
+        String sql = " DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'), INTERVAL seq DAY) = DATE_FORMAT(NOW(),'%Y-%m-%d') ";
+        return userVisitsDao.queryVisitsBySql(sql);
+    }
+    // 本周
+    private List getWeekInfo()
+    {
+        String sql = "DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'), INTERVAL seq DAY) >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) \n" +
+                "AND DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'), INTERVAL seq DAY) <= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE())-6 DAY)";
+        return userVisitsDao.queryVisitsBySql(sql);
+    }
+    // 本月
+    private List getMonthInfo()
+    {
+        String sql = "DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'), INTERVAL seq DAY) >= DATE_ADD(CURDATE(),interval -day(CURDATE())+1 day)\n" +
+                "AND DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'), INTERVAL seq DAY) <= LAST_DAY(CURDATE())";
+        return userVisitsDao.queryVisitsBySql(sql);
+    }
+
 
 }

+ 16 - 0
mhotel/src/com/happy/dao/UserVisitsDao.java

@@ -23,4 +23,20 @@ public interface UserVisitsDao {
 
 
     public UserVisits queryTodayUserVisits();
+
+    /**
+     * 查询访问量:本日,本周,本月
+     * @param sql
+     * @return
+     */
+    List queryVisitsBySql(String sql);
+
+
+    /**
+     * 自定义时间查询访问量
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List queryVisitsByDiyTime(String startTime, String endTime);
 }

+ 55 - 0
mhotel/src/com/happy/dao/impl/UserVisitsDaoImpl.java

@@ -85,5 +85,60 @@ public class UserVisitsDaoImpl implements UserVisitsDao {
         return info;
     }
 
+    @Override
+    public List queryVisitsBySql(String sql)
+    {
+        String sqlQuery = "select a.day,IFNULL(b.visitNumber,0) visitNumber from (  " +
+                " SELECT DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'), INTERVAL seq DAY) AS day  " +
+                "  FROM (  " +
+                "      SELECT -1 seq UNION ALL SELECT -2 UNION ALL SELECT -3 UNION ALL SELECT -4 UNION ALL  " +
+                "      SELECT -5 UNION ALL SELECT -6 UNION ALL SELECT -7 UNION ALL SELECT -8 UNION ALL SELECT -9 UNION ALL SELECT -10 UNION ALL  " +
+                "      SELECT -11 UNION ALL SELECT -12 UNION ALL SELECT -13 UNION ALL SELECT -14 UNION ALL SELECT -15 UNION ALL SELECT -16 UNION ALL  " +
+                "      SELECT -17 UNION ALL SELECT -18 UNION ALL SELECT -19 UNION ALL SELECT -20 UNION ALL SELECT -21 UNION ALL SELECT -22 UNION ALL  " +
+                "      SELECT -23 UNION ALL SELECT -24 UNION ALL SELECT -25 UNION ALL SELECT -26 UNION ALL SELECT -27 UNION ALL SELECT -28 UNION ALL  " +
+                "      SELECT -29 UNION ALL SELECT -30 UNION ALL  " +
+                "      SELECT 0  UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL  " +
+                "      SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL  " +
+                "      SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL  " +
+                "      SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL  " +
+                "      SELECT 23 UNION ALL SELECT 24 UNION ALL SELECT 25 UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL SELECT 28 UNION ALL  " +
+                "      SELECT 29 UNION ALL SELECT 30  " +
+                "  ) t   where " +
+                sql       +
+                " ) a   "  +
+                " left join (select DATE_FORMAT(create_time,'%Y-%m-%d') day,count(1) visitNumber from user_visits group by DATE_FORMAT(create_time,'%Y-%m-%d')) b on a.day=b.day\n " +
+                " ORDER BY day ";
+
+        return namedParameterJdbcTemplate.queryForList(sqlQuery,new MapSqlParameterSource());
+    }
+
+
+    @Override
+    public List queryVisitsByDiyTime(String startTime, String endTime)
+    {
+        String sqlQuery = "select a.day,IFNULL(b.visitNumber,0) visitNumber from (  " +
+                " SELECT DATE_ADD(DATE_FORMAT('"+startTime+"','%Y-%m-%d'), INTERVAL seq DAY) AS day  " +
+                "  FROM (  " +
+                "      SELECT -1 seq UNION ALL SELECT -2 UNION ALL SELECT -3 UNION ALL SELECT -4 UNION ALL  " +
+                "      SELECT -5 UNION ALL SELECT -6 UNION ALL SELECT -7 UNION ALL SELECT -8 UNION ALL SELECT -9 UNION ALL SELECT -10 UNION ALL  " +
+                "      SELECT -11 UNION ALL SELECT -12 UNION ALL SELECT -13 UNION ALL SELECT -14 UNION ALL SELECT -15 UNION ALL SELECT -16 UNION ALL  " +
+                "      SELECT -17 UNION ALL SELECT -18 UNION ALL SELECT -19 UNION ALL SELECT -20 UNION ALL SELECT -21 UNION ALL SELECT -22 UNION ALL  " +
+                "      SELECT -23 UNION ALL SELECT -24 UNION ALL SELECT -25 UNION ALL SELECT -26 UNION ALL SELECT -27 UNION ALL SELECT -28 UNION ALL  " +
+                "      SELECT -29 UNION ALL SELECT -30 UNION ALL  " +
+                "      SELECT 0  UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL  " +
+                "      SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL  " +
+                "      SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL  " +
+                "      SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL  " +
+                "      SELECT 23 UNION ALL SELECT 24 UNION ALL SELECT 25 UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL SELECT 28 UNION ALL  " +
+                "      SELECT 29 UNION ALL SELECT 30  " +
+                "  ) t   where " +
+                "                DATE_ADD(DATE_FORMAT('"+startTime+"','%Y-%m-%d'), INTERVAL seq DAY) >= DATE_FORMAT('"+ startTime +"','%Y-%m-%d')"+
+                "               AND DATE_ADD(DATE_FORMAT('"+startTime+"','%Y-%m-%d'), INTERVAL seq DAY) <= DATE_FORMAT('"+ endTime +"','%Y-%m-%d')"+
+                " ) a   "  +
+                " left join (select DATE_FORMAT(create_time,'%Y-%m-%d') day,count(1) visitNumber from user_visits group by DATE_FORMAT(create_time,'%Y-%m-%d')) b on a.day=b.day  " +
+                " ORDER BY day ";
+
+        return namedParameterJdbcTemplate.queryForList(sqlQuery,new MapSqlParameterSource());
+    }
 
 }