Explorar o código

首页用户统计

guomengjiao hai 4 meses
pai
achega
b7c3a4cdf6

+ 67 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/IndexController.java

@@ -11,6 +11,7 @@ import com.ruoyi.common.core.domain.R;
 import com.ruoyi.onlineorder.service.IOnlineOrderService;
 import com.ruoyi.onlineorder.service.IOnlineOrderService;
 import com.ruoyi.shop.withdrawal.service.IWithdrawalService;
 import com.ruoyi.shop.withdrawal.service.IWithdrawalService;
 import com.ruoyi.subsidy.service.ISubsidyQueueService;
 import com.ruoyi.subsidy.service.ISubsidyQueueService;
+import com.ruoyi.user.domain.vo.UserStatisticsVo;
 import com.ruoyi.user.service.IUserService;
 import com.ruoyi.user.service.IUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
@@ -79,6 +80,7 @@ public class IndexController extends BaseController {
         map.put("queueCount", iSubsidyQueueService.validQueueCount(businessId,false));
         map.put("queueCount", iSubsidyQueueService.validQueueCount(businessId,false));
         //活跃用户
         //活跃用户
         map.put("activeUser", userService.activeUserCount(businessId));
         map.put("activeUser", userService.activeUserCount(businessId));
+        map.put("totalUser", userService.queryUserCount(businessId, null, null));
         return R.ok( map);
         return R.ok( map);
     }
     }
 
 
@@ -128,6 +130,71 @@ public class IndexController extends BaseController {
         return R.ok( businessDayBillVos);
         return R.ok( businessDayBillVos);
     }
     }
 
 
+    @ApiOperation("平台用户总览")
+    @GetMapping("/platform-user-overview")
+    public R<Map<String, Object>> userOverview() {
+        HashMap<String, Object> map = new HashMap<>();
+        //总数
+        map.put("totalUser", userService.queryUserCount(null, null, null));
+        Date date = new Date();
+        //今日
+        map.put("todayUser", userService.queryUserCount(null, DateUtil.beginOfDay(date), DateUtil.endOfDay(date)));
+        //昨日
+        map.put("yesterdayUser", userService.queryUserCount(null, DateUtil.beginOfDay(DateUtil.offsetDay(date, -1)), DateUtil.endOfDay(DateUtil.offsetDay(date, -1))));
+        //本月
+        map.put("monthUser", userService.queryUserCount(null, DateUtil.beginOfMonth(date), DateUtil.endOfMonth(date)));
+        return R.ok(map);
+    }
+
+    @ApiOperation("平台用户本周统计图")
+    @GetMapping("/platform-user-week-statistics")
+    public R<List<UserStatisticsVo>> platformUserWeekStatistics() {
+        Date date = new Date();
+        List<UserStatisticsVo> userStatisticsVos = userService.queryUserStatisticsList(null, DateUtil.beginOfWeek(date), DateUtil.endOfWeek(date));
+        userStatisticsVos.forEach(UserStatisticsVo::loadWeekValue);
+        return R.ok(userStatisticsVos);
+    }
 
 
+    @ApiOperation("平台用户本年统计图")
+    @GetMapping("/platform-user-year-statistics")
+    public R<List<UserStatisticsVo>> platformUserYearStatistics() {
+        Date date = new Date();
+        List<UserStatisticsVo> userStatisticsVos = userService.queryUserYearStatisticsList(null, DateUtil.beginOfYear(date), DateUtil.endOfYear(date));
+        return R.ok(userStatisticsVos);
+    }
+
+    @ApiOperation("商家用户本周统计图")
+    @GetMapping("/business-user-week-statistics")
+    public R<List<UserStatisticsVo>> businessUserWeekStatistics() {
+        Date date = new Date();
+        List<UserStatisticsVo> userStatisticsVos = userService.queryUserStatisticsList(getBusinessId(true), DateUtil.beginOfWeek(date), DateUtil.endOfWeek(date));
+        userStatisticsVos.forEach(UserStatisticsVo::loadWeekValue);
+        return R.ok(userStatisticsVos);
+    }
+
+    @ApiOperation("商家用户本年统计图")
+    @GetMapping("/business-user-year-statistics")
+    public R<List<UserStatisticsVo>> businessUserYearStatistics() {
+        Date date = new Date();
+        List<UserStatisticsVo> userStatisticsVos = userService.queryUserYearStatisticsList(getBusinessId(true), DateUtil.beginOfYear(date), DateUtil.endOfYear(date));
+        return R.ok(userStatisticsVos);
+    }
+
+    @ApiOperation("商家用户总览")
+    @GetMapping("/business-user-overview")
+    public R<Map<String, Object>> businessUserOverview() {
+        HashMap<String, Object> map = new HashMap<>();
+        Long businessId = getBusinessId(true);
+        //总数
+        map.put("totalUser", userService.queryUserCount(businessId, null, null));
+        Date date = new Date();
+        //今日
+        map.put("todayUser", userService.queryUserCount(businessId, DateUtil.beginOfDay(date), DateUtil.endOfDay(date)));
+        //昨日
+        map.put("yesterdayUser", userService.queryUserCount(businessId, DateUtil.beginOfDay(DateUtil.offsetDay(date, -1)), DateUtil.endOfDay(DateUtil.offsetDay(date, -1))));
+        //本月
+        map.put("monthUser", userService.queryUserCount(businessId, DateUtil.beginOfMonth(date), DateUtil.endOfMonth(date)));
+        return R.ok(map);
+    }
 
 
 }
 }

+ 8 - 12
ruoyi-api/src/main/java/com/ruoyi/api/controller/business/ApiBusinessDayBillController.java

@@ -1,6 +1,5 @@
 package com.ruoyi.api.controller.business;
 package com.ruoyi.api.controller.business;
 
 
-import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.ruoyi.api.controller.common.AbstractApiController;
 import com.ruoyi.api.controller.common.AbstractApiController;
@@ -8,29 +7,27 @@ import com.ruoyi.businessDayBill.domain.bo.BusinessDayBillBo;
 import com.ruoyi.businessDayBill.domain.bo.BusinessDayBillCountBo;
 import com.ruoyi.businessDayBill.domain.bo.BusinessDayBillCountBo;
 import com.ruoyi.businessDayBill.domain.vo.BusinessDayBillVo;
 import com.ruoyi.businessDayBill.domain.vo.BusinessDayBillVo;
 import com.ruoyi.businessDayBill.service.IBusinessDayBillService;
 import com.ruoyi.businessDayBill.service.IBusinessDayBillService;
-import com.ruoyi.common.annotation.Log;
-import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.domain.PageQuery;
 import com.ruoyi.common.core.domain.PageQuery;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.core.validate.AddGroup;
-import com.ruoyi.common.core.validate.EditGroup;
 import com.ruoyi.common.core.validate.QueryGroup;
 import com.ruoyi.common.core.validate.QueryGroup;
-import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.MathUtils;
 import com.ruoyi.common.utils.MathUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * 商家日账单Controller
  * 商家日账单Controller
@@ -64,7 +61,6 @@ public class ApiBusinessDayBillController extends AbstractApiController {
      * 导出商家日账单列表
      * 导出商家日账单列表
      */
      */
     @ApiOperation("导出商家日账单列表")
     @ApiOperation("导出商家日账单列表")
-    @Log(title = "商家日账单", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     @PostMapping("/export")
     public void export(@Validated BusinessDayBillBo bo, HttpServletResponse response) {
     public void export(@Validated BusinessDayBillBo bo, HttpServletResponse response) {
         if (ObjectUtil.isNull(bo.getBusinessId())) {
         if (ObjectUtil.isNull(bo.getBusinessId())) {

+ 2 - 1
ruoyi-shop/src/main/java/com/ruoyi/shop/business/domain/bo/UserBusinessVerifierIntegralBo.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Date;
@@ -22,7 +23,7 @@ public class UserBusinessVerifierIntegralBo implements Serializable {
      * 变动积分
      * 变动积分
      */
      */
     @ApiModelProperty("变动积分")
     @ApiModelProperty("变动积分")
-    @NotBlank(message = "变动积分不能为空")
+    @NotNull(message = "变动积分不能为空")
     private BigDecimal integral;
     private BigDecimal integral;
     /**
     /**
      * 业务备注 可不传
      * 业务备注 可不传

+ 1 - 1
ruoyi-shop/src/main/java/com/ruoyi/shop/business/service/impl/UserBusinessRoleServiceImpl.java

@@ -480,7 +480,7 @@ public class UserBusinessRoleServiceImpl implements IUserBusinessRoleService {
                 vo.setUserMobile(user.getMobile());
                 vo.setUserMobile(user.getMobile());
                 vo.setHeadPhoto(user.getHeadPhoto());
                 vo.setHeadPhoto(user.getHeadPhoto());
             }
             }
-            vo.setVerifierName(sysUserService.selectNameById(vo.getVerifierId()));
+            vo.setVerifierName(userService.queryNameById(vo.getVerifierId()));
             return vo;
             return vo;
         }).collect(Collectors.toList());
         }).collect(Collectors.toList());
     }
     }

+ 2 - 0
ruoyi-shop/src/main/java/com/ruoyi/shop/withdrawal/mapper/WithdrawalMapper.java

@@ -26,4 +26,6 @@ public interface WithdrawalMapper extends BaseMapperPlus<WithdrawalMapper, Withd
     List<WithdrawalVo> selectWithdrawaList(@Param("bo") WithdrawalBo bo);
     List<WithdrawalVo> selectWithdrawaList(@Param("bo") WithdrawalBo bo);
 
 
     WithdrawalVo statistics(@Param("bo") WithdrawalBo bo);
     WithdrawalVo statistics(@Param("bo") WithdrawalBo bo);
+
+    BigDecimal auditingWithdrawalAmount(@Param("auditStatus") Integer auditStatus);
 }
 }

+ 1 - 1
ruoyi-shop/src/main/java/com/ruoyi/shop/withdrawal/service/impl/WithdrawalServiceImpl.java

@@ -352,7 +352,7 @@ public class WithdrawalServiceImpl implements IWithdrawalService {
 
 
     @Override
     @Override
     public BigDecimal auditingWithdrawalAmount() {
     public BigDecimal auditingWithdrawalAmount() {
-        return null;
+        return baseMapper.auditingWithdrawalAmount(AuditStatus.WAIT_AUDIT.getCode());
     }
     }
 
 
     private String alipayFundTrans(String withdrawalNo, BigDecimal amount, String title, String identity) {
     private String alipayFundTrans(String withdrawalNo, BigDecimal amount, String title, String identity) {

+ 4 - 0
ruoyi-shop/src/main/resources/mapper/withdrawal/WithdrawalMapper.xml

@@ -48,6 +48,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="where"/>
         <include refid="where"/>
     </select>
     </select>
 
 
+    <select id="auditingWithdrawalAmount" resultType="java.math.BigDecimal">
+        select sum(amount) from tb_withdrawal where audit_status = #{auditStatus}
+    </select>
+
     <sql id="query">
     <sql id="query">
         select w.*,
         select w.*,
                CASE
                CASE

+ 12 - 0
ruoyi-user/src/main/java/com/ruoyi/user/domain/vo/UserStatisticsVo.java

@@ -1,5 +1,7 @@
 package com.ruoyi.user.domain.vo;
 package com.ruoyi.user.domain.vo;
 
 
+import cn.hutool.core.date.DateUtil;
+import com.ruoyi.common.utils.DateUtils;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -35,4 +37,14 @@ public class UserStatisticsVo {
     @ApiModelProperty("注册用户数")
     @ApiModelProperty("注册用户数")
     private Integer userSum;
     private Integer userSum;
 
 
+    @ApiModelProperty(value = "周几")
+    private Integer weekValue;
+
+    public void loadWeekValue() {
+        if(createDay != null)
+        {
+            //把日期转换成星期几
+            weekValue = DateUtil.dayOfWeek(DateUtils.parseDate(createDay));
+        }
+    }
 }
 }

+ 7 - 1
ruoyi-user/src/main/java/com/ruoyi/user/mapper/UserMapper.java

@@ -17,7 +17,13 @@ import java.util.List;
  */
  */
 public interface UserMapper extends BaseMapperPlus<UserMapper, User, UserVo> {
 public interface UserMapper extends BaseMapperPlus<UserMapper, User, UserVo> {
 
 
-    List<UserStatisticsVo> selectUserRegister(@Param("start") String start, @Param("end") String                                                end);
+    List<UserStatisticsVo> selectUserRegister(@Param("start") String start, @Param("end") String end);
 
 
     Long activeUserCount(@Param("businessId") Long businessId, @Param("start") Date start);
     Long activeUserCount(@Param("businessId") Long businessId, @Param("start") Date start);
+
+    Long queryUserCount(@Param("businessId") Long businessId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    List<UserStatisticsVo> queryUserStatisticsList(@Param("businessId") Long businessId, @Param("start") String start, @Param("end") String end);
+
+    List<UserStatisticsVo> queryUserYearStatisticsList(@Param("businessId") Long businessId, @Param("start") String start, @Param("end") String end);
 }
 }

+ 9 - 0
ruoyi-user/src/main/java/com/ruoyi/user/service/IUserService.java

@@ -10,6 +10,7 @@ import com.ruoyi.weixin.domain.WxUserDto;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -182,4 +183,12 @@ public interface IUserService {
     String getPhoneByCode(String encryptedData);
     String getPhoneByCode(String encryptedData);
 
 
     Long activeUserCount(Long businessId);
     Long activeUserCount(Long businessId);
+
+    Long queryUserCount(Long businessId, Date startTime, Date endTime);
+
+    List<UserStatisticsVo> queryUserStatisticsList(Long businessId, Date startTime, Date endTime);
+
+    List<UserStatisticsVo> queryUserYearStatisticsList(Long businessId, Date startTime, Date endTime);
+
+    String queryNameById(Long userId);
 }
 }

+ 67 - 0
ruoyi-user/src/main/java/com/ruoyi/user/service/impl/UserServiceImpl.java

@@ -701,6 +701,73 @@ public class UserServiceImpl implements IUserService {
         return baseMapper.activeUserCount(businessId, start);
         return baseMapper.activeUserCount(businessId, start);
     }
     }
 
 
+    @Override
+    public Long queryUserCount(Long businessId, Date startTime, Date endTime) {
+        return baseMapper.queryUserCount(businessId, startTime, endTime);
+    }
+
+    @Override
+    public List<UserStatisticsVo> queryUserStatisticsList(Long businessId, Date startTime, Date endTime) {
+        // 往前查询最近七日
+        Date endDay = new Date();
+        DateTime startDay = DateUtil.offsetDay(endDay, -7);
+
+        String start = DateUtil.format(startDay, "yyyy-MM-dd");
+        String end = DateUtil.format(endDay, "yyyy-MM-dd");
+        List<UserStatisticsVo> list = this.baseMapper.queryUserStatisticsList(businessId, start, end);
+
+        // 七天的日期
+        List<UserStatisticsVo> dataList = this.completionDate(start, end);
+        for (UserStatisticsVo vo : dataList) {
+            String createDay = vo.getCreateDay();
+            Optional<UserStatisticsVo> first = list.stream().filter(e -> e.getCreateDay().equals(createDay)).findFirst();
+            if(first.isPresent()){
+                UserStatisticsVo userVo = first.get();
+                vo.setUserSum(userVo.getUserSum());
+            }
+        }
+        return dataList;
+    }
+
+    @Override
+    public List<UserStatisticsVo> queryUserYearStatisticsList(Long businessId, Date startTime, Date endTime) {
+        // 获取本年第一天和最后一天
+        Date now = new Date();
+        DateTime yearStart = DateUtil.beginOfYear(now);
+        DateTime yearEnd = DateUtil.endOfYear(now);
+
+        String start = DateUtil.format(yearStart, "yyyy-MM-dd");
+        String end = DateUtil.format(yearEnd, "yyyy-MM-dd");
+
+        // 调用mapper方法查询本年用户统计数据
+        List<UserStatisticsVo> list = this.baseMapper.queryUserYearStatisticsList(businessId, start, end);
+
+        // 生成12个月份的数据
+        List<UserStatisticsVo> dataList = new ArrayList<>();
+        for (int i = 1; i <= 12; i++) {
+            String month = String.format("%s-%02d", DateUtil.format(now, "yyyy"), i);
+            UserStatisticsVo build = UserStatisticsVo.builder()
+                .createDay(i + "月")
+                .userSum(Constants.NUM_ZERO)
+                .build();
+            Optional<UserStatisticsVo> first = list.stream()
+                .filter(e -> e.getCreateDay().equals(month))
+                .findFirst();
+            if (first.isPresent()) {
+                UserStatisticsVo userVo = first.get();
+                build.setUserSum(userVo.getUserSum());
+            }
+            dataList.add(build);
+        }
+        return dataList;
+    }
+
+    @Override
+    public String queryNameById(Long userId) {
+        User user = baseMapper.selectOne(new LambdaQueryWrapper<User>().select(User::getNickname).eq(User::getId, userId));
+        return ObjectUtil.isNotNull(user) ? user.getNickname() : "";
+    }
+
     private String generateUniqueMemberCode(Long userId) {
     private String generateUniqueMemberCode(Long userId) {
         //生成唯一码 用户不会重复 6-8位
         //生成唯一码 用户不会重复 6-8位
         String userIdPart = String.valueOf(userId);
         String userIdPart = String.valueOf(userId);

+ 57 - 1
ruoyi-user/src/main/resources/mapper/user/UserMapper.xml

@@ -29,7 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
     </select>
 
 
     <select id="activeUserCount" resultType="java.lang.Long">
     <select id="activeUserCount" resultType="java.lang.Long">
-        select count(1) from tb_user u
+        select count(u.id) from tb_user u
         <if test="businessId != null">
         <if test="businessId != null">
             join tb_user_business_role ub on u.id = ub.user_id
             join tb_user_business_role ub on u.id = ub.user_id
         </if>
         </if>
@@ -39,4 +39,60 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         </if>
     </select>
     </select>
 
 
+    <select id="queryUserCount" resultType="java.lang.Long">
+        select count(u.id) from tb_user u
+        <if test="businessId != null">
+            join tb_user_business_role ub on u.id = ub.user_id
+        </if>
+        <where>
+            <if test="businessId != null">
+                and ub.business_id = #{businessId}
+            </if>
+            <if test="startTime != null">
+                and u.create_time &gt;= #{startTime}
+            </if>
+            <if test="endTime != null">
+                and u.create_time &lt;= #{endTime}
+            </if>
+        </where>
+    </select>
+
+    <select id="queryUserStatisticsList" resultType="com.ruoyi.user.domain.vo.UserStatisticsVo">
+        select u.create_day, count(u.id) userSum from tb_user u
+        <if test="businessId != null">
+            join tb_user_business_role ub on u.id = ub.user_id
+        </if>
+        <where>
+            <if test="businessId != null">
+                and ub.business_id = #{businessId}
+            </if>
+            <if test="start != null">
+                and u.create_day &gt;= #{start}
+            </if>
+            <if test="end != null">
+                and u.create_day &lt;= #{end}
+            </if>
+        </where>
+        group by u.create_day
+    </select>
+
+    <select id="queryUserYearStatisticsList" resultType="com.ruoyi.user.domain.vo.UserStatisticsVo">
+        select DATE_FORMAT(u.create_day, '%Y-%m') createDay, count(u.id) userSum from tb_user u
+        <if test="businessId != null">
+            join tb_user_business_role ub on u.id = ub.user_id
+        </if>
+        <where>
+            <if test="businessId != null">
+                and ub.business_id = #{businessId}
+            </if>
+            <if test="start != null">
+                and u.create_day &gt;= #{start}
+            </if>
+            <if test="end != null">
+                and u.create_day &lt;= #{end}
+            </if>
+        </where>
+        group by createDay
+    </select>
+
 </mapper>
 </mapper>