Bladeren bron

微信好友数据图表

xwh 4 jaren geleden
bovenliggende
commit
4c48ad02c9

+ 61 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/statistics/MonthlyCustomersController.java

@@ -1,7 +1,9 @@
 package com.kmall.admin.controller.statistics;
 
+import com.kmall.admin.entity.WechatFollowersEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.service.statistics.MonthlyCustomersService;
+import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.utils.R;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -165,4 +167,63 @@ public class MonthlyCustomersController {
 
 
 
+    @RequestMapping("/queryMonthlyWechatFollowers")
+    public R queryMonthlyWechatFollowers(@RequestParam("startMonth") String startMonth, @RequestParam("endMonth") String endMonth) {
+        List<String> dateList = new ArrayList<>();
+        Map<String, Object> returnMap = new HashMap<>();
+        try {
+            calculateDifferentMonth(dateList, startMonth, endMonth);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+
+        try {
+            String merchSn = null;
+            SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
+            if(!"1".equals(sysUser.getRoleType())){
+                merchSn = sysUser.getMerchSn();
+            }
+
+
+            Map<String,Object> map = monthlyCustomersService.queryMonthlyWechatFollowers(startMonth,endMonth,merchSn);
+
+            returnMap.put("dateList", dateList);
+            returnMap.putAll(map);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error(e.getMessage());
+        }
+
+
+        return R.ok(returnMap);
+    }
+
+
+
+    @RequestMapping("/addWechatFollowers")
+    public R addWechatFollowers( @RequestParam("wechatFollowers") Integer wechatFollowers) {
+
+        try {
+            String merchSn = null;
+            SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
+            if(!"1".equals(sysUser.getRoleType())){
+                merchSn = sysUser.getMerchSn();
+            }
+            WechatFollowersEntity wechatFollowersEntity = new WechatFollowersEntity();
+            wechatFollowersEntity.setCreaterSn(ShiroUtils.getUserId().toString());
+            wechatFollowersEntity.setCreateTime(new Date());
+            wechatFollowersEntity.setWechatFollowers(wechatFollowers);
+            wechatFollowersEntity.setMerchSn(merchSn);
+
+            monthlyCustomersService.addWechatFollowers(wechatFollowersEntity);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error(e.getMessage());
+        }
+
+
+        return R.ok("添加成功");
+    }
+
+
 }

+ 20 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/statistics/WechatFollowersDao.java

@@ -0,0 +1,20 @@
+package com.kmall.admin.dao.statistics;
+
+
+import com.kmall.admin.entity.WechatFollowersEntity;
+import com.kmall.manager.dao.BaseDao;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2020-09-03 11:39:37
+ */
+public interface WechatFollowersDao extends BaseDao<WechatFollowersEntity> {
+
+    List<WechatFollowersEntity> queryMonthlyWechatFollowers(@Param("startMonth") String startMonth,@Param("endMonth") String endMonth,@Param("merchSn") String merchSn);
+}

+ 165 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/WechatFollowersEntity.java

@@ -0,0 +1,165 @@
+package com.kmall.admin.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 实体
+ * 表名 mall_wechat_followers
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2020-09-03 11:39:37
+ */
+public class WechatFollowersEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Integer id;
+    /**
+     * 商户编号
+     */
+    private String merchSn;
+    /**
+     * 微信好友数
+     */
+    private Integer wechatFollowers;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+
+
+    private String yearAndMonth;
+
+    public String getYearAndMonth() {
+        return yearAndMonth;
+    }
+
+    public void setYearAndMonth(String yearAndMonth) {
+        this.yearAndMonth = yearAndMonth;
+    }
+
+    /**
+     * 设置:主键
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取:主键
+     */
+    public Integer getId() {
+        return id;
+    }
+    /**
+     * 设置:商户编号
+     */
+    public void setMerchSn(String merchSn) {
+        this.merchSn = merchSn;
+    }
+
+    /**
+     * 获取:商户编号
+     */
+    public String getMerchSn() {
+        return merchSn;
+    }
+    /**
+     * 设置:微信好友数
+     */
+    public void setWechatFollowers(Integer wechatFollowers) {
+        this.wechatFollowers = wechatFollowers;
+    }
+
+    /**
+     * 获取:微信好友数
+     */
+    public Integer getWechatFollowers() {
+        return wechatFollowers;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 30 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/statistics/MonthlyCustomersServiceImpl.java

@@ -1,10 +1,13 @@
 package com.kmall.admin.service.impl.statistics;
 
 import com.kmall.admin.dao.statistics.MonthlyCustomersDao;
+import com.kmall.admin.dao.statistics.WechatFollowersDao;
 import com.kmall.admin.entity.MonthlySalesGrowthEntity;
+import com.kmall.admin.entity.WechatFollowersEntity;
 import com.kmall.admin.service.statistics.MonthlyCustomersService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -21,6 +24,8 @@ public class MonthlyCustomersServiceImpl implements MonthlyCustomersService {
 
     @Autowired
     private MonthlyCustomersDao monthlyCustomersDao;
+    @Autowired
+    private WechatFollowersDao wechatFollowersDao;
 
     @Override
     public Map<String, Object> queryMonthlyCustomers(String startMonth, String endMonth, String merchSn) {
@@ -124,4 +129,29 @@ public class MonthlyCustomersServiceImpl implements MonthlyCustomersService {
 
         return map;
     }
+
+    @Override
+    public Map<String, Object> queryMonthlyWechatFollowers(String startMonth, String endMonth, String merchSn) {
+        List<WechatFollowersEntity> wechatFollowersEntityList = wechatFollowersDao.queryMonthlyWechatFollowers(startMonth, endMonth, merchSn);
+
+        Map<String,Object> map = new HashMap<>();
+        // 查询每月微信好友数
+        List<Integer> wechatFollowersList = new ArrayList<>();
+
+        // 按照实体类的日期进行升序排序
+        wechatFollowersEntityList = wechatFollowersEntityList.stream().sorted(Comparator.comparing(WechatFollowersEntity::getYearAndMonth)).collect(Collectors.toList());
+        for (WechatFollowersEntity wechatFollowersEntity : wechatFollowersEntityList) {
+            Integer wechatFollowers = wechatFollowersEntity.getWechatFollowers();
+            wechatFollowersList.add(wechatFollowers);
+        }
+        map.put("wechatFollowersList",wechatFollowersList);
+
+        return map;
+    }
+
+    @Override
+    @Transactional
+    public void addWechatFollowers(WechatFollowersEntity wechatFollowersEntity) {
+        wechatFollowersDao.save(wechatFollowersEntity);
+    }
 }

+ 6 - 0
kmall-admin/src/main/java/com/kmall/admin/service/statistics/MonthlyCustomersService.java

@@ -1,5 +1,7 @@
 package com.kmall.admin.service.statistics;
 
+import com.kmall.admin.entity.WechatFollowersEntity;
+
 import java.util.Map;
 
 /**
@@ -16,4 +18,8 @@ public interface MonthlyCustomersService {
     Map<String, Object> top10ByBrandAndSupplier(String startDate, String endDate);
 
     Map<String, Object> queryWeeklyCustomers(String startWeek, String endWeek, String merchSn);
+
+    Map<String, Object> queryMonthlyWechatFollowers(String startMonth, String endMonth, String merchSn);
+
+    void addWechatFollowers(WechatFollowersEntity wechatFollowersEntity);
 }

+ 128 - 0
kmall-admin/src/main/resources/mybatis/mapper/statistics/WechatFollowersDao.xml

@@ -0,0 +1,128 @@
+<?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.kmall.admin.dao.statistics.WechatFollowersDao">
+
+    <resultMap type="com.kmall.admin.entity.WechatFollowersEntity" id="wechatFollowersMap">
+        <result property="id" column="id"/>
+        <result property="merchSn" column="merch_sn"/>
+        <result property="wechatFollowers" column="wechat_followers"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.WechatFollowersEntity">
+		select
+			`id`,
+			`merch_sn`,
+			`wechat_followers`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from mall_wechat_followers
+		where id = #{id}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.WechatFollowersEntity">
+		select
+    		`id`,
+    		`merch_sn`,
+    		`wechat_followers`,
+    		`creater_sn`,
+    		`create_time`,
+    		`moder_sn`,
+    		`mod_time`,
+    		`tstm`
+		from mall_wechat_followers
+		WHERE 1=1
+		<if test="name != null and name.trim() != ''">
+			AND name LIKE concat('%',#{name},'%')
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+	
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mall_wechat_followers
+		WHERE 1=1
+        <if test="name != null and name.trim() != ''">
+            AND name LIKE concat('%',#{name},'%')
+        </if>
+	</select>
+	<select id="queryMonthlyWechatFollowers" resultType="com.kmall.admin.entity.WechatFollowersEntity">
+		SELECT
+		sum(mwf.wechat_followers) wechatFollowers,
+		DATE_FORMAT(mwf.create_time,'%Y-%m') as yearAndMonth
+		FROM
+		mall_wechat_followers mwf
+		<where>
+			 DATE_FORMAT(mwf.create_time,'%Y-%m')  &gt;= #{startMonth}
+			AND DATE_FORMAT(mwf.create_time,'%Y-%m') &lt;= #{endMonth}
+			<if test="merchSn != null">
+				and m.merch_sn = #{merchSn}
+			</if>
+		</where>
+		group by DATE_FORMAT(mwf.create_time,'%Y-%m')
+	</select>
+
+	<insert id="save" parameterType="com.kmall.admin.entity.WechatFollowersEntity">
+		insert into mall_wechat_followers(
+			`id`,
+			`merch_sn`,
+			`wechat_followers`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{id},
+			#{merchSn},
+			#{wechatFollowers},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+	 
+	<update id="update" parameterType="com.kmall.admin.entity.WechatFollowersEntity">
+		update mall_wechat_followers 
+		<set>
+			<if test="merchSn != null">`merch_sn` = #{merchSn}, </if>
+			<if test="wechatFollowers != null">`wechat_followers` = #{wechatFollowers}, </if>
+			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
+			<if test="createTime != null">`create_time` = #{createTime}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where id = #{id}
+	</update>
+	
+	<delete id="delete">
+		delete from mall_wechat_followers where id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from mall_wechat_followers where id in 
+		<foreach item="id" collection="array" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</delete>
+
+</mapper>

+ 60 - 0
kmall-admin/src/main/webapp/WEB-INF/page/sale/wechatFollowersGrowth.html

@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Wechat Followers Growth</title>
+    #parse("sys/header.html")
+    <style>
+        .coldiv {
+            background-color: #f8f8f9;
+        }
+
+        body {
+            color: #515a6e;
+        }
+
+        #refreshTime, #storeId, #categoryId {
+            width: 100px;
+        }
+
+        #merchSn {
+            width: 300px;
+        }
+
+        i {
+            font-size: 20px;
+        }
+
+        input {
+            border: 1px #dcdee2 solid;
+            border-radius: 5px;
+            outline-color: #5cadff;
+        }
+    </style>
+    <script src="${rc.contextPath}/js/sale/echarts.js"></script>
+
+</head>
+<body>
+<!--<div id="rrapp" v-cloak>-->
+<header class="main-header">
+    <div class="container-fluid  coldiv">
+        <span>添加微信好友数据:</span> <input type="number" name="wechatFollowers" id="wechatFollowers" />&nbsp;(每日添加,可追加)
+        <input type="button" name="addButton" value="添加数据" onclick="addWechatFollowers()" />
+        <div class="row" style="border:0;margin-bottom:10px">
+            <span>日期:</span>
+            <input type="month" name="startMonth" id="startMonth"/>&nbsp;
+            <input type="month" name="endMonth" id="endMonth" />&nbsp;
+            <input type="button" name="queryButton" value="查询" onclick="queryMonthly()" />
+        </div>
+    </div>
+</header>
+<div class="row">
+    <div class="col-md-12  col-sm-12  col-xs-12 charts6">
+        <div id="main4" style="height: 200px;"></div>
+    </div>
+</div>
+
+<!--</div>-->
+<script src="${rc.contextPath}/js/sale/wechatFollowersGrowth.js"></script>
+</body>
+</html>

+ 125 - 0
kmall-admin/src/main/webapp/js/sale/wechatFollowersGrowth.js

@@ -0,0 +1,125 @@
+$(function () {
+
+});
+var myChart;
+// 基于准备好的dom,初始化echarts实例
+var dChart = echarts.init(document.getElementById('main4'));
+// 指定图表的配置项和数据
+function weChatFun(dateList, wechatFollowersList) {
+    dChart.setOption({
+        tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+                type: 'shadow',
+                crossStyle: {
+                    color: '#999'
+                }
+            }
+        },
+        grid: {
+            show: false,
+            left: '3%',
+            right: '4%',
+            bottom: '10%'
+        },
+        xAxis: {
+            // splitLine: {     show: false   },
+            type: 'category',
+            data: dateList,
+            axisPointer: {
+                type: 'shadow'
+            },
+            // 改变x轴颜色
+            axisLine: {
+                lineStyle: {
+                    color: '#00a2e2',
+                    width: 1, // 这里是为了突出显示加上的
+                }
+            },
+            axisTick: {
+                show: true,
+                interval: 0
+            },
+        },
+        // 设置两个y轴,左边显示数量,右边显示概率
+        yAxis: {
+            splitLine: {     show: false   },
+            type: 'value',
+            name: '好友数量',
+            // max: 10000,
+            // min: 0,
+            // show: true,
+            // interval: 1000,
+            // 改变y轴颜色
+            axisLine: {
+                lineStyle: {
+                    color: '#00a2e2',
+                    width: 1, // 这里是为了突出显示加上的
+                }
+            },
+        },
+        // 每个设备分数量、概率2个指标,只要让他们的name一致,即可通过,legeng进行统一的切换
+        series: [{
+            //折线
+            name: 'WechatFollowers',
+            type: 'line',
+            symbol: 'circle', // 折线点设置为实心点
+            symbolSize: 6, // 折线点的大小
+            yAxisIndex: 0, // 这里要设置哪个y轴,默认是最左边的是0,然后1,2顺序来。
+            data: wechatFollowersList,
+            symbolSize: 10,
+            itemStyle: {
+                normal: {
+                    color: "#DDA0DD"
+                }
+            }
+        }
+
+        ]
+
+    });
+}
+
+function queryMonthly(){
+    var startMonth = document.getElementById("startMonth").value;
+    var endMonth = document.getElementById("endMonth").value;
+
+    var param = {
+        startMonth:startMonth,
+        endMonth:endMonth
+    };
+    console.log(param);
+    // 折线图
+    $.ajax({
+        url: "../monthly/queryMonthlyWechatFollowers",
+        data: param,
+        contentType:"application/x-www-form-urlencoded",
+        type: 'POST',
+        success: function(data) {
+            console.log(data)
+            weChatFun(data.dateList, data.wechatFollowersList);
+
+        },
+    });
+
+}
+
+function addWechatFollowers(){
+    var wechatFollowers = document.getElementById("wechatFollowers").value;
+
+    var param = {
+        wechatFollowers:wechatFollowers
+    };
+    console.log(param);
+    // 折线图
+    $.ajax({
+        url: "../monthly/addWechatFollowers",
+        data: param,
+        contentType:"application/x-www-form-urlencoded",
+        type: 'POST',
+        success: function(data) {
+            alert(data.msg)
+        },
+    });
+
+}