Browse Source

铁粉消费合计数

huangqizheng/feature-20250731164458-地区部分修改以及导出的封装
lijianlin 2 weeks ago
parent
commit
6607411bb7
  1. 23
      src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
  2. 38
      src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java
  3. 2
      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. 7
      src/main/java/com/example/demo/mapper/bean/BeanConsumeMapper.java
  6. 8
      src/main/java/com/example/demo/service/bean/BeanConsumeService.java
  7. 10
      src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java
  8. 85
      src/main/resources/jindouMapper/BeanConsumeMapper.xml

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

@ -49,7 +49,7 @@ public class BeanConsumeController {
//筛选查询直播消费记录 //筛选查询直播消费记录
@PostMapping("/selectLiveBy") @PostMapping("/selectLiveBy")
public Result selectBy(@RequestBody BeanPage beanPage){
public Result selectLiveBy(@RequestBody BeanPage beanPage){
try { try {
if (ObjectUtils.isEmpty(beanPage.getPageNum())) { if (ObjectUtils.isEmpty(beanPage.getPageNum())) {
return Result.error("页码数为空!"); return Result.error("页码数为空!");
@ -62,8 +62,27 @@ public class BeanConsumeController {
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return Result.error("请检查筛选数据的格式");
return Result.error(e.toString());
}} }}
//筛选查询直播消费记录
@PostMapping("/selectFanBy")
public Result selectFanBy(@RequestBody BeanPage beanPage){
try {
if (ObjectUtils.isEmpty(beanPage.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(beanPage.getPageSize())) {
return Result.error("页大小为空!");
} else {
return Result.success(beanConsumeService.selectFanBy(beanPage.getPageNum(), beanPage.getPageSize(), beanPage.getBeanConsumeFan()));
}
} catch (Exception e) {
e.printStackTrace();
return Result.error(e.toString());
}}
//消费合计数 //消费合计数
@PostMapping("sumConsumeGold") @PostMapping("sumConsumeGold")
public BeanConsumeGold sumConsumeGold(@RequestBody BeanPage beanPage) { public BeanConsumeGold sumConsumeGold(@RequestBody BeanPage beanPage) {

38
src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java

@ -0,0 +1,38 @@
package com.example.demo.domain.vo.bean;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @program: gold-java
* @ClassName BeanConsumeFan
* @description:
* @author: Ethan
* @create: 202507-31 11:30
* @Version 1.0
**/
@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class BeanConsumeFan {
private static final long serialVersionUID = 1L;
private String name; //姓名
private Integer jwcode; //精网号
private String dept; //地区/分部
private String beanNum; //金豆数量
private String channel; //频道名称source_name
private String type; //类型source_type 单月连续包月
private Integer payType; //支付方式直播12345铁粉7文章8
private String sortField; //排序字段
private String sortOrder; //排序顺序
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date consumeTime; // 消费时间 时间戳转化
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date startTime; // 开始时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date endTime; // 结束时间
}

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

@ -29,7 +29,7 @@ public class BeanConsumeLive {
private String type; //类型 private String type; //类型
private String gift; //礼物名称 private String gift; //礼物名称
private String beanNum; //金豆数量 private String beanNum; //金豆数量
private String channel; //频道名称截取content
private String liveChannel; //频道名称截取content
private String liveName; //直播间名称 private String liveName; //直播间名称
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date consumeTime; // 消费时间 时间戳转化 private Date consumeTime; // 消费时间 时间戳转化

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

@ -21,6 +21,7 @@ public class BeanPage {
private Integer pageSize; //每页大小 private Integer pageSize; //每页大小
private Integer payType; //支付方式直播12345铁粉7文章8 private Integer payType; //支付方式直播12345铁粉7文章8
private BeanConsumeLive beanConsumeLive; //直播金豆消费 private BeanConsumeLive beanConsumeLive; //直播金豆消费
private BeanConsumeFan beanConsumeFan; //铁粉金豆消费
private BeanRechargeInfo beanRechargeInfo; //金豆充值信息 private BeanRechargeInfo beanRechargeInfo; //金豆充值信息
private BeanConsumeGold beanConsumeGold; //金豆消费合计数 private BeanConsumeGold beanConsumeGold; //金豆消费合计数
} }

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

@ -1,5 +1,6 @@
package com.example.demo.mapper.bean; package com.example.demo.mapper.bean;
import com.example.demo.domain.vo.bean.BeanConsumeFan;
import com.example.demo.domain.vo.bean.BeanConsumeGold; import com.example.demo.domain.vo.bean.BeanConsumeGold;
import com.example.demo.domain.vo.bean.BeanConsumeLive; import com.example.demo.domain.vo.bean.BeanConsumeLive;
import com.example.demo.domain.vo.bean.BeanPage; import com.example.demo.domain.vo.bean.BeanPage;
@ -23,14 +24,16 @@ public interface BeanConsumeMapper {
List<String> getDept(); List<String> getDept();
//筛选查询直播消费 //筛选查询直播消费
List<BeanConsumeLive> selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive); List<BeanConsumeLive> selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive);
//筛选查询铁粉消费
List<BeanConsumeFan> selectFanBy(@Param("beanConsumeFan") BeanConsumeFan beanConsumeFan);
//查询金豆直播消费金额 //查询金豆直播消费金额
BeanConsumeGold selectSumLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive); BeanConsumeGold selectSumLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive);
//查询金豆铁粉消费金额 //查询金豆铁粉消费金额
// BeanConsumeGold selectSumFansBy(BeanPage beanPage);
BeanConsumeGold selectSumFansBy(@Param("beanConsumeFan") BeanConsumeFan beanConsumeFan);
//查询直播礼物 //查询直播礼物
List<String> getLiveGift(); List<String> getLiveGift();
//查询直播全部频道 //查询直播全部频道
List<String> getLiveChannel(); List<String> getLiveChannel();
} }

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

@ -1,5 +1,6 @@
package com.example.demo.service.bean; package com.example.demo.service.bean;
import com.example.demo.domain.vo.bean.BeanConsumeFan;
import com.example.demo.domain.vo.bean.BeanConsumeGold; import com.example.demo.domain.vo.bean.BeanConsumeGold;
import com.example.demo.domain.vo.bean.BeanConsumeLive; import com.example.demo.domain.vo.bean.BeanConsumeLive;
import com.example.demo.domain.vo.bean.BeanPage; import com.example.demo.domain.vo.bean.BeanPage;
@ -19,12 +20,15 @@ import java.util.List;
public interface BeanConsumeService { public interface BeanConsumeService {
//获取消费用户的分部 //获取消费用户的分部
List<String> getDept(); List<String> getDept();
//筛选查询消费
//筛选查询直播消费
Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive); Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive);
//筛选查询铁粉消费
Object selectFanBy(Integer pageNum, Integer pageSize, BeanConsumeFan beanConsumeFan);
//消费金币合计数 //消费金币合计数
BeanConsumeGold sumConsumeGold(BeanPage beanPage); BeanConsumeGold sumConsumeGold(BeanPage beanPage);
//查询直播礼物 //查询直播礼物
List<String> getLiveGift(); List<String> getLiveGift();
//获取直播频道
List<String> getLiveChannel(); List<String> getLiveChannel();
} }

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

@ -1,5 +1,6 @@
package com.example.demo.serviceImpl.bean; package com.example.demo.serviceImpl.bean;
import com.example.demo.domain.vo.bean.BeanConsumeFan;
import com.example.demo.domain.vo.bean.BeanConsumeGold; import com.example.demo.domain.vo.bean.BeanConsumeGold;
import com.example.demo.domain.vo.bean.BeanConsumeLive; import com.example.demo.domain.vo.bean.BeanConsumeLive;
import com.example.demo.domain.vo.bean.BeanPage; import com.example.demo.domain.vo.bean.BeanPage;
@ -41,6 +42,13 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
List<BeanConsumeLive> beanConsumeLives = BeanConsumeMapper.selectLiveBy(beanConsumeLive); List<BeanConsumeLive> beanConsumeLives = BeanConsumeMapper.selectLiveBy(beanConsumeLive);
return new PageInfo<>(beanConsumeLives); return new PageInfo<>(beanConsumeLives);
} }
//筛选查询铁粉消费
@Override
public Object selectFanBy(Integer pageNum, Integer pageSize, BeanConsumeFan beanConsumeFan) {
PageHelper.startPage(pageNum, pageSize);
List<BeanConsumeFan> beanConsumeFans = BeanConsumeMapper.selectFanBy(beanConsumeFan);
return new PageInfo<>(beanConsumeFans);
}
@Override @Override
public BeanConsumeGold sumConsumeGold(BeanPage beanPage) { public BeanConsumeGold sumConsumeGold(BeanPage beanPage) {
@ -51,7 +59,7 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
gold = BeanConsumeMapper.selectSumLiveBy(beanPage.getBeanConsumeLive()); gold = BeanConsumeMapper.selectSumLiveBy(beanPage.getBeanConsumeLive());
}else if (payType==7) { }else if (payType==7) {
//充值消费合计 //充值消费合计
// gold = BeanConsumeMapper.selectSumFansBy(beanPage);
gold = BeanConsumeMapper.selectSumFansBy(beanPage.getBeanConsumeFan());
} }
return gold; return gold;

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

@ -27,7 +27,7 @@
WHEN LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0 WHEN LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
THEN SUBSTRING_INDEX(SUBSTRING(content, LOCATE('直播间', content) + CHAR_LENGTH('直播间')), '送礼物', 1) THEN SUBSTRING_INDEX(SUBSTRING(content, LOCATE('直播间', content) + CHAR_LENGTH('直播间')), '送礼物', 1)
ELSE NULL ELSE NULL
END AS channel,
END AS liveChannel,
fyr.source_name AS liveName, fyr.source_name AS liveName,
FROM_UNIXTIME(fyr.time, '%Y-%m-%d %H:%i:%s') AS consumeTime, FROM_UNIXTIME(fyr.time, '%Y-%m-%d %H:%i:%s') AS consumeTime,
fyr.pay_type AS payType fyr.pay_type AS payType
@ -54,8 +54,8 @@
<if test="beanConsumeLive.gift != null and beanConsumeLive.gift != ''"> <if test="beanConsumeLive.gift != null and beanConsumeLive.gift != ''">
AND t.gift = #{beanConsumeLive.gift} AND t.gift = #{beanConsumeLive.gift}
</if> </if>
<if test="beanConsumeLive.channel != null and beanConsumeLive.channel != ''">
AND t.channel= #{beanConsumeLive.channel}
<if test="beanConsumeLive.liveChannel != null and beanConsumeLive.liveChannel != ''">
AND t.liveChannel= #{beanConsumeLive.liveChannel}
</if> </if>
<if test="beanConsumeLive.liveName != null and beanConsumeLive.liveName != ''"> <if test="beanConsumeLive.liveName != null and beanConsumeLive.liveName != ''">
AND t.liveName LIKE CONCAT('%', #{beanConsumeLive.liveName}, '%') AND t.liveName LIKE CONCAT('%', #{beanConsumeLive.liveName}, '%')
@ -105,12 +105,12 @@
ELSE NULL ELSE NULL
END = #{beanConsumeLive.gift} END = #{beanConsumeLive.gift}
</if> </if>
<if test="beanConsumeLive.channel != null and beanConsumeLive.channel != ''">
<if test="beanConsumeLive.liveChannel != null and beanConsumeLive.liveChannel != ''">
AND CASE AND CASE
WHEN LOCATE('直播间', fyr.content) > 0 AND LOCATE('送礼物', fyr.content) > 0 WHEN LOCATE('直播间', fyr.content) > 0 AND LOCATE('送礼物', fyr.content) > 0
THEN SUBSTRING_INDEX(SUBSTRING(fyr.content, LOCATE('直播间', fyr.content) + CHAR_LENGTH('直播间')), '送礼物', 1) THEN SUBSTRING_INDEX(SUBSTRING(fyr.content, LOCATE('直播间', fyr.content) + CHAR_LENGTH('直播间')), '送礼物', 1)
ELSE NULL ELSE NULL
END = #{beanConsumeLive.channel}
END = #{beanConsumeLive.liveChannel}
</if> </if>
<if test="beanConsumeLive.startTime != null and beanConsumeLive.endTime != null"> <if test="beanConsumeLive.startTime != null and beanConsumeLive.endTime != null">
AND fyr.time BETWEEN UNIX_TIMESTAMP(#{beanConsumeLive.startTime}) AND fyr.time BETWEEN UNIX_TIMESTAMP(#{beanConsumeLive.startTime})
@ -122,6 +122,78 @@
</where> </where>
) AS t ) AS t
</select> </select>
<select id="selectFanBy" resultType="com.example.demo.domain.vo.bean.BeanConsumeFan">
SELECT fm.nickname AS name,
fm.jwcode,
fm.dept,
fyr.money AS beanNum,
fyr.source_name AS channel,
fyr.source_type AS type,
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 (7)
<if test="beanConsumeFan.jwcode != null and beanConsumeFan.jwcode != ''">
AND fm.jwcode = #{beanConsumeFan.jwcode}
</if>
<if test="beanConsumeFan.dept != null and beanConsumeFan.dept != ''">
AND fm.dept = #{beanConsumeFan.dept}
</if>
<if test="beanConsumeFan.channel != null and beanConsumeFan.channel != ''">
AND fyr.source_name =#{beanConsumeFan.channel}
</if>
<if test="beanConsumeFan.startTime != null and beanConsumeFan.endTime != null">
AND fyr.time BETWEEN UNIX_TIMESTAMP(#{beanConsumeFan.startTime})
AND UNIX_TIMESTAMP(#{beanConsumeFan.endTime})
</if>
</where>
<choose>
<when test="beanConsumeFan.sortField != null and beanConsumeFan.sortField != '' and beanConsumeFan.sortOrder != null and beanConsumeFan.sortOrder != ''">
ORDER BY ${beanConsumeFan.sortField} ${beanConsumeFan.sortOrder}
</when>
<otherwise>
ORDER BY consumeTime DESC
</otherwise>
</choose>
</select>
<!--铁粉消耗合计数-->
<select id="selectSumFansBy" 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 = 7
<if test="beanConsumeFan.jwcode != null and beanConsumeFan.jwcode != ''">
AND fm.jwcode = #{beanConsumeFan.jwcode}
</if>
<if test="beanConsumeFan.dept != null and beanConsumeFan.dept != ''">
AND fm.dept = #{beanConsumeFan.dept}
</if>
<if test="beanConsumeFan.channel != null and beanConsumeFan.channel != ''">
AND fyr.source_name = #{beanConsumeFan.channel}
</if>
<if test="beanConsumeFan.startTime != null and beanConsumeFan.endTime != null">
AND fyr.time BETWEEN UNIX_TIMESTAMP(#{beanConsumeFan.startTime})
AND UNIX_TIMESTAMP(#{beanConsumeFan.endTime})
</if>
</where>
) AS t
</select>
<select id="getLiveGift" resultType="java.lang.String"> <select id="getLiveGift" resultType="java.lang.String">
SELECT DISTINCT SELECT DISTINCT
CASE CASE
@ -139,10 +211,11 @@
WHEN LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0 WHEN LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
THEN SUBSTRING_INDEX(SUBSTRING(content, LOCATE('直播间', content) + CHAR_LENGTH('直播间')), '送礼物', 1) THEN SUBSTRING_INDEX(SUBSTRING(content, LOCATE('直播间', content) + CHAR_LENGTH('直播间')), '送礼物', 1)
ELSE NULL ELSE NULL
END AS channel
END AS liveChannel
FROM fx_yaoqing_records FROM fx_yaoqing_records
WHERE LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0 WHERE LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
AND content IS NOT NULL AND pay_type in (1,2,3,4,5) AND content IS NOT NULL AND pay_type in (1,2,3,4,5)
</select> </select>
</mapper> </mapper>
Loading…
Cancel
Save