Browse Source

Merge branch 'milestone-20250727-金币重构三期' into sunjiabei/feature-20250725135225-金币三期

# Conflicts:
#	src/main/java/com/example/demo/domain/vo/bean/BeanPage.java
huangqizheng/feature-20250731164458-地区部分修改以及导出的封装
sunjiabei 3 weeks ago
parent
commit
b9956c2db9
  1. 56
      src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
  2. 23
      src/main/java/com/example/demo/domain/vo/bean/BeanConsumeGold.java
  3. 7
      src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java
  4. 1
      src/main/java/com/example/demo/domain/vo/bean/BeanPage.java
  5. 14
      src/main/java/com/example/demo/mapper/bean/BeanConsumeMapper.java
  6. 11
      src/main/java/com/example/demo/service/bean/BeanConsumeService.java
  7. 29
      src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java
  8. 112
      src/main/resources/jindouMapper/BeanConsumeMapper.xml

56
src/main/java/com/example/demo/controller/bean/BeanConsumeController.java

@ -1,13 +1,25 @@
package com.example.demo.controller.bean;
import com.example.demo.Util.JWTUtil;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.bean.BeanConsumeGold;
import com.example.demo.domain.vo.bean.BeanConsumeLive;
import com.example.demo.domain.vo.bean.BeanPage;
import com.example.demo.domain.vo.coin.Gold;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.RechargeAudit;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.bean.BeanConsumeService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.util.Arrays;
import java.util.List;
/**
@ -27,7 +39,7 @@ public class BeanConsumeController {
@Autowired
private BeanConsumeService beanConsumeService;
//获取用户分布信息
//获取消费用户分部信息
@PostMapping("/getDept")
public Result getDept(){
@ -35,9 +47,45 @@ public class BeanConsumeController {
return Result.success(deptList);
}
@PostMapping("/selectBy")
//筛选查询直播消费记录
@PostMapping("/selectLiveBy")
public Result selectBy(@RequestBody BeanPage beanPage){
return null;
}
try {
if (ObjectUtils.isEmpty(beanPage.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(beanPage.getPageSize())) {
return Result.error("页大小为空!");
} else {
//解token权限
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
if (admin != null) {
// List<String> list = Arrays.asList(admin.getMarkets().split(","));
// beanPage.XXXX.setMarkets(list);
}
else{
return Result.error("角色为空");
}
return Result.success(beanConsumeService.selectLiveBy(beanPage.getPageNum(), beanPage.getPageSize(), beanPage.getBeanConsumeLive()));
}
} catch (Exception e) {
e.printStackTrace();
return Result.error("请检查筛选数据的格式");
}}
//消费合计数
@PostMapping("sumConsumeGold")
public BeanConsumeGold sumConsumeGold(@RequestBody BeanPage beanPage) throws Exception {
//解token权限
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
if (admin != null) {
//List<String> list = Arrays.asList(admin.getMarkets().split(","));
//.setMarkets(list);
}
return beanConsumeService.sumConsumeGold( beanPage);
}
}

23
src/main/java/com/example/demo/domain/vo/bean/BeanConsumeGold.java

@ -0,0 +1,23 @@
package com.example.demo.domain.vo.bean;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: gold-java
* @ClassName BeanConsumeGold
* @description:
* @author: Ethan
* @create: 202507-30 16:12
* @Version 1.0
**/
@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class BeanConsumeGold {
private static final long serialVersionUID = 1L;
private Integer permanentBean ; //付费金豆
private Integer freeBean ; //免费金豆
private Integer totalNum; //总条数
}

7
src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java

@ -23,7 +23,7 @@ public class BeanConsumeLive {
private static final long serialVersionUID = 1L;
private String name; //姓名
private Integer jwcode; //精网号
private List<String> dept; //地区/分部
private String dept; //地区/分部
//类型 直播 1. 发礼物2. 发红包3. 发福袋4. 付费直播5. 加入粉丝团6. 发弹幕
//文章 1. 打赏2. 付费
private String type; //类型
@ -32,7 +32,8 @@ public class BeanConsumeLive {
private String channel; //频道名称截取content
private String liveName; //直播间名称
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date time; // 消费时间 时间戳转化
private Date consumeTime; // 消费时间 时间戳转化
private Integer payType; //支付方式直播12345铁粉7文章8
private String sortField; //排序字段
private String sortOrder; //排序顺序
}

1
src/main/java/com/example/demo/domain/vo/bean/BeanPage.java

@ -22,4 +22,5 @@ public class BeanPage {
private BeanConsumeLive beanConsumeLive;
private BeanRechargeInfo beanRechargeInfo;
private BeanConsumeGold beanConsumeGold;
}

14
src/main/java/com/example/demo/mapper/bean/BeanConsumeMapper.java

@ -1,6 +1,10 @@
package com.example.demo.mapper.bean;
import com.example.demo.domain.vo.bean.BeanConsumeGold;
import com.example.demo.domain.vo.bean.BeanConsumeLive;
import com.example.demo.domain.vo.coin.RechargeAudit;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -14,5 +18,15 @@ import java.util.List;
**/
@Mapper
public interface BeanConsumeMapper {
//获取消费用户分部
List<String> getDept();
//筛选查询直播消费
List<BeanConsumeLive> selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive);
//查询消费订单金额
List<BeanConsumeGold> selectConsumeGoldsBy(@Param("pageNum") Integer pageNum,
@Param("pageSize") Integer pageSize,
@Param("beanConsumeGold") BeanConsumeGold beanConsumeGold);
BeanConsumeGold selectSumLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive);
}

11
src/main/java/com/example/demo/service/bean/BeanConsumeService.java

@ -1,5 +1,10 @@
package com.example.demo.service.bean;
import com.example.demo.domain.vo.bean.BeanConsumeGold;
import com.example.demo.domain.vo.bean.BeanConsumeLive;
import com.example.demo.domain.vo.bean.BeanPage;
import com.example.demo.domain.vo.coin.Gold;
import java.util.List;
/**
@ -12,6 +17,10 @@ import java.util.List;
**/
public interface BeanConsumeService {
//获取用户分部
//获取消费用户分部
List<String> getDept();
//筛选查询消费
Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive);
//消费金币合计数
BeanConsumeGold sumConsumeGold(BeanPage beanPage);
}

29
src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java

@ -1,7 +1,15 @@
package com.example.demo.serviceImpl.bean;
import com.example.demo.domain.vo.bean.BeanConsumeGold;
import com.example.demo.domain.vo.bean.BeanConsumeLive;
import com.example.demo.domain.vo.bean.BeanPage;
import com.example.demo.domain.vo.coin.Gold;
import com.example.demo.domain.vo.coin.RechargeAudit;
import com.example.demo.domain.vo.coin.RechargeUser;
import com.example.demo.mapper.bean.BeanConsumeMapper;
import com.example.demo.service.bean.BeanConsumeService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -20,9 +28,30 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
@Autowired
private BeanConsumeMapper BeanConsumeMapper;
//获取消费用户分部
@Override
public List<String> getDept() {
List<String> deptList = BeanConsumeMapper.getDept();
return deptList;
}
//筛选查询直播消费
@Override
public Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive) {
PageHelper.startPage(pageNum, pageSize);
List<BeanConsumeLive> beanConsumeLives = BeanConsumeMapper.selectLiveBy(beanConsumeLive);
return new PageInfo<>(beanConsumeLives);
}
@Override
public BeanConsumeGold sumConsumeGold(BeanPage beanPage) {
BeanConsumeGold gold = new BeanConsumeGold();
BeanConsumeLive beanConsumeLive = beanPage.getBeanConsumeLive();
//直播消费合计
BeanConsumeGold BeanConsumeGolds = BeanConsumeMapper.selectSumLiveBy( beanConsumeLive);
gold.setTotalNum(BeanConsumeGolds.getTotalNum());
gold.setPermanentBean(BeanConsumeGolds.getPermanentBean());
gold.setFreeBean(BeanConsumeGolds.getFreeBean());
return gold;
}
}

112
src/main/resources/jindouMapper/BeanConsumeMapper.xml

@ -2,8 +2,116 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.bean.BeanConsumeMapper">
<!--获取消费用户分部-->
<select id="getDept" resultType="java.lang.String">
select distinct dept from fx_member
select distinct fm.dept
from fx_member fm
inner join fx_yaoqing_records fyr on fyr.uid = fm.id
where fm.dept is not null and fm.dept != ''
</select>
<!--筛选查询直播消费-->
<select id="selectLiveBy" resultType="com.example.demo.domain.vo.bean.BeanConsumeLive">
SELECT *
FROM (
SELECT fm.nickname AS name,
fm.jwcode,
fm.dept,
fyr.source_type AS type,
CASE
WHEN LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
THEN SUBSTRING(content, LOCATE('送礼物', content) + CHAR_LENGTH('送礼物'))
ELSE NULL
END AS gift,
fyr.money AS beanNum,
CASE
WHEN LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
THEN SUBSTRING_INDEX(SUBSTRING(content, LOCATE('直播间', content) + CHAR_LENGTH('直播间')), '送礼物', 1)
ELSE NULL
END AS channel,
fyr.source_name AS liveName,
FROM_UNIXTIME(fyr.time, '%Y-%m-%d %H:%i:%s') AS consumeTime,
fyr.pay_type AS payType
FROM fx_member fm
INNER JOIN fx_yaoqing_records fyr ON fyr.uid = fm.id
<where>
fyr.pay_type IN (1,2,3,4,5)
<if test="beanConsumeLive.jwcode != null and beanConsumeLive.jwcode != ''">
AND fm.jwcode = #{beanConsumeLive.jwcode}
</if>
<if test="beanConsumeLive.dept != null and beanConsumeLive.dept != ''">
AND fm.dept = #{beanConsumeLive.dept}
</if>
<if test="beanConsumeLive.type != null and beanConsumeLive.type != ''">
AND fyr.source_type = #{beanConsumeLive.type}
</if>
<if test="beanConsumeLive.consumeTime != null and beanConsumeLive.consumeTime != null">
AND consumeTime BETWEEN #{beanConsumeLive.startTime} AND #{beanConsumeLive.endTime}
</if>
</where>
) AS t
<where>
<if test="beanConsumeLive.gift != null and beanConsumeLive.gift != ''">
AND t.gift = #{beanConsumeLive.gift}
</if>
<if test="beanConsumeLive.channel != null and beanConsumeLive.channel != ''">
AND t.channel = #{beanConsumeLive.channel}
</if>
</where>
<choose>
<when test="beanConsumeLive.sortField != null and beanConsumeLive.sortField != '' and beanConsumeLive.sortOrder != null and beanConsumeLive.sortOrder != ''">
ORDER BY t.${beanConsumeLive.sortField} ${beanConsumeLive.sortOrder}
</when>
<otherwise>
ORDER BY t.consumeTime DESC
</otherwise>
</choose>
</select>
<!--获取金豆消费订单金额-->
<select id="selectConsumeGoldsBy" resultType="com.example.demo.domain.vo.bean.BeanConsumeGold">
</select>
<select id="selectSumLiveBy" resultType="com.example.demo.domain.vo.bean.BeanConsumeGold">
SELECT
IFNULL(SUM(t.money_buy), 0) AS permanentBean,
IFNULL(SUM(t.money_free), 0) AS freeBean,
COUNT(*) AS totalNum
FROM (
SELECT
fyr.money_buy,
fyr.money_free,
fyr.time
FROM fx_member fm
INNER JOIN fx_yaoqing_records fyr ON fyr.uid = fm.id
<where>
fyr.pay_type IN (1,2,3,4,5)
<if test="beanConsumeLive.jwcode != null and beanConsumeLive.jwcode != ''">
AND fm.jwcode = #{beanConsumeLive.jwcode}
</if>
<if test="beanConsumeLive.dept != null and beanConsumeLive.dept != ''">
AND fm.dept = #{beanConsumeLive.dept}
</if>
<if test="beanConsumeLive.type != null and beanConsumeLive.type != ''">
AND fyr.source_type = #{beanConsumeLive.type}
</if>
<if test="beanConsumeLive.gift != null and beanConsumeLive.gift != ''">
AND CASE
WHEN LOCATE('直播间', fyr.content) > 0 AND LOCATE('送礼物', fyr.content) > 0
THEN SUBSTRING(fyr.content, LOCATE('送礼物', fyr.content) + CHAR_LENGTH('送礼物'))
ELSE NULL
END = #{beanConsumeLive.gift}
</if>
<if test="beanConsumeLive.channel != null and beanConsumeLive.channel != ''">
AND CASE
WHEN LOCATE('直播间', fyr.content) > 0 AND LOCATE('送礼物', fyr.content) > 0
THEN SUBSTRING_INDEX(SUBSTRING(fyr.content, LOCATE('直播间', fyr.content) + CHAR_LENGTH('直播间')), '送礼物', 1)
ELSE NULL
END = #{beanConsumeLive.channel}
</if>
<if test="beanConsumeLive.consumeTime != null and beanConsumeLive.consumeTime != null">
AND consumeTime BETWEEN #{beanConsumeLive.startTime} AND #{beanConsumeLive.endTime}
</if>
</where>
) AS t
</select>
</mapper>
Loading…
Cancel
Save