src/main/java/cc/mrbird/febs/mall/mapper/ChatUserMapper.java
@@ -10,6 +10,7 @@ import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.Date; import java.util.List; public interface ChatUserMapper extends BaseMapper<ChatUser> { @@ -61,4 +62,10 @@ void updateNicknameById(@Param("userId")Long userId, @Param("nickName")String i); List<ChatUser> selectListByIsRobot(@Param("isRobot")int i); BigDecimal selectTotalAmount(); BigDecimal selectTotalType(@Param("type")int i,@Param("dateType") String type, @Param("date") Date date); List<ChatUser> selectUserList(@Param("isRobot")int i,@Param("dateType") String type, @Param("date") Date date); } src/main/java/cc/mrbird/febs/system/controller/LoginController.java
@@ -10,7 +10,9 @@ import cc.mrbird.febs.common.service.ValidateCodeService; import cc.mrbird.febs.common.utils.Md5Util; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.mall.entity.ChatUser; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.mapper.ChatUserMapper; import cc.mrbird.febs.mall.mapper.MallAchieveRecordMapper; import cc.mrbird.febs.mall.mapper.MallMemberMapper; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; @@ -18,7 +20,9 @@ import cc.mrbird.febs.monitor.service.ILoginLogService; import cc.mrbird.febs.system.entity.User; import cc.mrbird.febs.system.service.IUserService; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.RequiredArgsConstructor; import org.apache.shiro.authc.UsernamePasswordToken; @@ -33,6 +37,9 @@ import javax.servlet.http.HttpSession; import javax.validation.constraints.NotBlank; import java.io.IOException; import java.math.BigDecimal; import java.text.NumberFormat; import java.text.ParseException; import java.util.*; /** @@ -49,6 +56,7 @@ private final MallMemberMapper mallMemberMapper; private final MallOrderInfoMapper mallOrderInfoMapper; private final MallAchieveRecordMapper mallAchieveRecordMapper; private final ChatUserMapper chatUserMapper; private final RedisUtils redisUtils; @PostMapping("login") @@ -97,9 +105,45 @@ param.setUsername(username); List<Map<String, Object>> lastSevenUserVisitCount = this.loginLogService.findLastSevenDaysVisitCount(param); data.put("lastSevenUserVisitCount", lastSevenUserVisitCount); data.put("totalAmount", NumberUtil.decimalFormatMoney(chatUserMapper.selectTotalAmount().doubleValue())); List<ChatUser> chatUsers = chatUserMapper.selectUserList(0,null,null); List<ChatUser> chatRobots = chatUserMapper.selectUserList(1,null,null); data.put("totalUser", (CollUtil.isEmpty(chatUsers) ? 0:chatUsers.size()) +"-"+(CollUtil.isEmpty(chatRobots) ? 0:chatRobots.size())); data.put("totalSystemPay", NumberUtil.decimalFormatMoney(chatUserMapper.selectTotalType(6,null,null).doubleValue())); data.put("totalIncome", NumberUtil.decimalFormatMoney(chatUserMapper.selectTotalType(8,null,null).doubleValue())); data.put("todaySystemPay", NumberUtil.decimalFormatMoney(chatUserMapper.selectTotalType(6,"D",DateUtil.date()).doubleValue())); data.put("todayIncome", NumberUtil.decimalFormatMoney(chatUserMapper.selectTotalType(8,"D",DateUtil.date()).doubleValue())); List<ChatUser> chatUsersToday = chatUserMapper.selectUserList(0,"D",DateUtil.date()); List<ChatUser> chatRobotsToday = chatUserMapper.selectUserList(1,"D",DateUtil.date()); data.put("todayUser", (CollUtil.isEmpty(chatUsersToday) ? 0:chatUsersToday.size()) +"-"+(CollUtil.isEmpty(chatRobotsToday) ? 0:chatRobotsToday.size())); return new FebsResponse().success().data(data); } public static BigDecimal formatCurrency(BigDecimal amount) { // 设置本地化格式为当前默认地区 Locale locale = Locale.getDefault(); // 创建一个货币格式化对象 NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(locale); // 将 BigDecimal 格式化为货币格式的字符串 String formattedAmount = currencyFormat.format(amount); // 将格式化的字符串转换回 BigDecimal 对象 BigDecimal formattedBigDecimal = null; try { formattedBigDecimal = new BigDecimal(currencyFormat.parse(formattedAmount).doubleValue()); } catch (ParseException e) { e.printStackTrace(); } // 返回格式化后的 BigDecimal 对象 return formattedBigDecimal; } @GetMapping("images/captcha") @Limit(key = "get_captcha", period = 60, count = 10, name = "获取验证码", prefix = "limit") public void captcha(HttpServletRequest request, HttpServletResponse response) throws IOException, FebsException { src/main/resources/mapper/modules/ChatUserMapper.xml
@@ -286,5 +286,36 @@ where is_robot = #{isRobot} </select> <select id="selectTotalAmount" resultType="java.math.BigDecimal"> select IFNULL(sum(IFNULL(total_amount,0)),0) from chat_wallet where type = 'USDT' </select> <select id="selectTotalType" resultType="java.math.BigDecimal"> select IFNULL(sum(IFNULL(amount,0)),0) from chat_amount_flow where type = #{type} <if test='dateType == "D"'> and date_format(create_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d'); </if> <if test='dateType == "M"'> and date_format(create_time, '%Y-%m') = date_format(#{date}, '%Y-%m'); </if> </select> <select id="selectUserList" resultType="cc.mrbird.febs.mall.entity.ChatUser"> select a.* from chat_user a where is_robot = #{isRobot} <if test='dateType == "D"'> and date_format(create_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d'); </if> <if test='dateType == "M"'> and date_format(create_time, '%Y-%m') = date_format(#{date}, '%Y-%m'); </if> </select> </mapper> src/main/resources/templates/febs/views/index.html
@@ -132,6 +132,85 @@ </div> </div> </div> <div class="layui-card-body layui-anim layui-anim-fadein"> <div class="layui-row"> <div class="m-title">系统总览</div> <div class="layui-row layui-col-space15"> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">账户总余额</p> <p class="num"><span id="totalAmount"></span></p> </div> </div> </div> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">账户总拨付</p> <p class="num"><span id="totalSystemPay"></span></p> </div> </div> </div> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">总注册人数(真实用户-机器人)</p> <p class="num"><span id="totalUser"></span></p> </div> </div> </div> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">总收益(扣除等级收益之后)</p> <p class="num"><span id="totalIncome"></span></p> </div> </div> </div> </div> </div> </div> <div class="layui-card-body layui-anim layui-anim-fadein"> <div class="layui-row"> <div class="m-title">今日数据</div> <div class="layui-row layui-col-space15"> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">今日注册(真实用户-机器人)</p> <p class="num"><span id="todayUser"></span></p> </div> </div> </div> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">今日拨付</p> <p class="num"><span id="todaySystemPay"></span></p> </div> </div> </div> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> <p class="name">今日收益(扣除等级收益之后)</p> <p class="num"><span id="todayIncome"></span></p> </div> </div> </div> <div class="layui-col-md3"> <div class="layui-panel"> <div class="box"> </div> </div> </div> </div> </div> </div> </div> </div> </div> @@ -167,6 +246,16 @@ .find('#user-role').text(currentUser.roleName ? currentUser.roleName : '暂无角色').end() .find('#last-login-time').text(currentUser.lastLoginTime ? currentUser.lastLoginTime : '第一次访问系统').end() .find('#welcome-message').html(welcomeMessage).end() .find('#totalAmount').text(data.totalAmount).end() .find('#totalSystemPay').text(data.totalSystemPay).end() .find('#totalUser').text(data.totalUser).end() .find('#totalIncome').text(data.totalIncome).end() .find('#todaySystemPay').text(data.todaySystemPay).end() .find('#todayIncome').text(data.todayIncome).end() .find('#todayUser').text(data.todayUser).end() .find('#user-avatar').attr('src', ctx + "febs/images/avatar/" + currentUser.avatar); var currentTime = new Date().getTime();