4 Commits

Author SHA1 Message Date
lv123 193fffb37a 12.17 工作台中间部分优化 5 months ago
lv123 267c946097 Merge remote-tracking branch 'origin/dev' into dev 5 months ago
lv123 367ba4a94d 12.17 工作台中间部分优化 5 months ago
lv123 0c9074795c 12.16 工作台中间部分全部完成 5 months ago
  1. 23
      src/main/java/com/example/demo/controller/StatisticsController.java
  2. 8
      src/main/java/com/example/demo/domain/entity/Detail.java
  3. 17
      src/main/java/com/example/demo/domain/vo/SumCoin.java
  4. 25
      src/main/java/com/example/demo/domain/vo/UserConsumeCoin.java
  5. 243
      src/main/java/com/example/demo/mapper/StatisticsMapper.java
  6. 9
      src/main/java/com/example/demo/mapper/UserMapper.java
  7. 31
      src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java
  8. 132
      src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java
  9. 100
      src/main/java/com/example/demo/serviceImpl/UserServiceImpl.java
  10. 2
      src/main/java/com/example/demo/sevice/UserSevice.java

23
src/main/java/com/example/demo/controller/StatisticsController.java

@ -1,10 +1,9 @@
package com.example.demo.controller;
import com.example.demo.domain.vo.Meium;
import com.example.demo.domain.vo.Result;
import com.example.demo.domain.vo.Statistics;
import com.example.demo.domain.vo.UserVo;
import com.example.demo.domain.vo.*;
import com.example.demo.mapper.StatisticsMapper;
import com.example.demo.serviceImpl.StatisticsServiceImpl;
import com.example.demo.serviceImpl.UserServiceImpl;
import com.example.demo.sevice.StatisticsService;
import lombok.RequiredArgsConstructor;
@ -14,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.Date;
@RestController
@ -26,6 +26,10 @@ public class StatisticsController {
private final StatisticsService statisticsService;
@Autowired
UserServiceImpl userService;
@Autowired
private StatisticsMapper statisticsMapper;
@Autowired
private StatisticsServiceImpl statisticsServiceImpl;
@PostMapping("/a")
@ -96,4 +100,15 @@ public class StatisticsController {
return Result.success(statisticsService.getMediu());
}
@PostMapping("/getMediuConsumeCoin2")
public Result getMediuConsumeCoin2(@RequestBody SumCoin sumCoin){
System.out.println(sumCoin.getSearchStartTime()+" -------------searchStartTime----");
return Result.success(statisticsMapper.getMediuConsumeCoin2(sumCoin));
}
@PostMapping("/getCoinTime")
public Result getCoinTime(@RequestBody SumCoin sumcoin){
System.out.println(sumcoin.getSearchStartTime()+" -------------searchStartTime----");
return Result.success(statisticsServiceImpl.getCoinTime(sumcoin));
}
}

8
src/main/java/com/example/demo/domain/entity/Detail.java

@ -61,4 +61,12 @@ public class Detail implements Serializable {
private BigDecimal allCoin;
private String token;
private BigDecimal free6;
private BigDecimal free12;
private BigDecimal allGold;
}

17
src/main/java/com/example/demo/domain/vo/SumCoin.java

@ -1,9 +1,14 @@
package com.example.demo.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@Data
@NoArgsConstructor
@ -51,8 +56,14 @@ public class SumCoin {
private BigDecimal yearSumFreeCoin;
//全年累计消耗金币数--下面 消耗任务金币
private BigDecimal yearSumTaskCoin;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date searchStartTime;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date searchEndTime;
private String updateType;
//中间-11个月 每月充值金币
private BigDecimal rechargeSumCoin;
//中间-11个月 每月免费金币
@ -60,6 +71,8 @@ public class SumCoin {
//中间-11个月 每月任务金币
private BigDecimal taskSumCoin;
private String month;
private String dayofweek;
private String day;
private Integer jwcode;

25
src/main/java/com/example/demo/domain/vo/UserConsumeCoin.java

@ -0,0 +1,25 @@
package com.example.demo.domain.vo;
import com.example.demo.domain.entity.Detail;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
@Data
@NoArgsConstructor
public class UserConsumeCoin {
private String jwcode;
private BigDecimal free6;
private BigDecimal free12;
private BigDecimal rechargeSumCoin;
//中间-11个月 每月免费金币
private BigDecimal freeSumCoin;
//中间-11个月 每月任务金币
private BigDecimal taskSumCoin;
private BigDecimal allGold;
//
}

243
src/main/java/com/example/demo/mapper/StatisticsMapper.java

@ -186,6 +186,8 @@ public interface StatisticsMapper {
// "ORDER BY DATE_FORMAT(create_time, '%Y-%m') DESC "})
// List<SumCoin> getMediuPayCoin();
// 本年 ---充值
@Select({
"SELECT m.month,",
" COALESCE(SUM(d.recharge_coin), 0) AS rechargeSumCoin,",
@ -196,7 +198,7 @@ public interface StatisticsMapper {
" FROM (",
" SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3",
" UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7",
" UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10",
" UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11",
" ) AS numbers",
") AS m",
"LEFT JOIN detail d ON DATE_FORMAT(d.create_time, '%Y-%m') = m.month AND d.update_type = '充值'",
@ -205,6 +207,7 @@ public interface StatisticsMapper {
})
List<SumCoin> getMediuPayCoin();
//本年--消费
@Select({
"SELECT m.month,",
" COALESCE(SUM(d.recharge_coin), 0) AS rechargeSumCoin,",
@ -215,7 +218,7 @@ public interface StatisticsMapper {
" FROM (",
" SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3",
" UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7",
" UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10",
" UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11",
" ) AS numbers",
") AS m",
"LEFT JOIN detail d ON DATE_FORMAT(d.create_time, '%Y-%m') = m.month AND d.update_type = '消费'",
@ -223,6 +226,183 @@ public interface StatisticsMapper {
"ORDER BY m.month DESC"
})
List<SumCoin> getMediuConsumeCoin();
// 本月 ---充值
// @Select({
// "SELECT DATE(d.create_time) as day,",
// " COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.recharge_coin ELSE 0 END), 0) AS rechargeSumCoin,",
// " COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.free_coin ELSE 0 END), 0) AS freeSumCoin,",
// " COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.task_coin ELSE 0 END), 0) AS taskSumCoin",
// "FROM detail d",
// "WHERE d.update_type = '充值'",
// " AND DATE(d.create_time) BETWEEN DATE(#{searchStartTime}) AND DATE(#{searchEndTime})",
// "GROUP BY DATE(d.create_time)",
// "ORDER BY DATE(d.create_time)"
// })
// List<SumCoin> getMediuPayCoinyue(@Param("searchStartTime") Date searchStartTime, @Param("searchEndTime") Date searchEndTime);
@Select({
"SELECT m.day,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.recharge_coin ELSE 0 END), 0) AS rechargeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.free_coin ELSE 0 END), 0) AS freeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.task_coin ELSE 0 END), 0) AS taskSumCoin",
"FROM (",
" SELECT DATE_ADD(#{searchStartTime}, INTERVAL n DAY) AS day",
" FROM (",
" SELECT a.N + b.N * 10 AS n",
" FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a,",
" (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b",
" ) numbers",
" WHERE DATE_ADD(#{searchStartTime}, INTERVAL n DAY) <= #{searchEndTime}",
") m",
"LEFT JOIN detail d ON DATE(d.create_time) = m.day AND d.update_type = '充值'",
"GROUP BY m.day",
"ORDER BY m.day"
})
List<SumCoin> getMediuPayCoinyue(@Param("searchStartTime") Date searchStartTime, @Param("searchEndTime") Date searchEndTime);
@Select({
"SELECT m.day,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.recharge_coin ELSE 0 END), 0) AS rechargeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.free_coin ELSE 0 END), 0) AS freeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.task_coin ELSE 0 END), 0) AS taskSumCoin",
"FROM (",
" SELECT DATE_ADD(#{searchStartTime}, INTERVAL n DAY) AS day",
" FROM (",
" SELECT a.N + b.N * 10 AS n",
" FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a,",
" (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b",
" ) numbers",
" WHERE DATE_ADD(#{searchStartTime}, INTERVAL n DAY) <= #{searchEndTime}",
") m",
"LEFT JOIN detail d ON DATE(d.create_time) = m.day AND d.update_type = '消费'",
"GROUP BY m.day",
"ORDER BY m.day"
})
List<SumCoin> getMediuCounsumeCoinyue(@Param("searchStartTime") Date searchStartTime, @Param("searchEndTime") Date searchEndTime);
//本周--充值
@Select({
"SELECT",
" CASE DAYOFWEEK(m.day)",
" WHEN 2 THEN '星期一'",
" WHEN 3 THEN '星期二'",
" WHEN 4 THEN '星期三'",
" WHEN 5 THEN '星期四'",
" WHEN 6 THEN '星期五'",
" WHEN 7 THEN '星期六'",
" WHEN 1 THEN '星期天'",
" END AS dayofweek,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.recharge_coin ELSE 0 END), 0) AS rechargeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.free_coin ELSE 0 END), 0) AS freeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.task_coin ELSE 0 END), 0) AS taskSumCoin",
"FROM (",
" SELECT DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) + INTERVAL n DAY AS day",
" FROM (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) numbers",
") m",
"LEFT JOIN detail d ON DATE(d.create_time) = m.day AND d.update_type = '充值'",
"GROUP BY m.day",
"ORDER BY m.day"
})
List<SumCoin> getMediuPayCoinweek();
//本周--消费
@Select({
"SELECT",
" CASE DAYOFWEEK(m.day)",
" WHEN 2 THEN '星期一'",
" WHEN 3 THEN '星期二'",
" WHEN 4 THEN '星期三'",
" WHEN 5 THEN '星期四'",
" WHEN 6 THEN '星期五'",
" WHEN 7 THEN '星期六'",
" WHEN 1 THEN '星期天'",
" END AS dayofweek,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.recharge_coin ELSE 0 END), 0) AS rechargeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.free_coin ELSE 0 END), 0) AS freeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.task_coin ELSE 0 END), 0) AS taskSumCoin",
"FROM (",
" SELECT DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) + INTERVAL n DAY AS day",
" FROM (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) numbers",
") m",
"LEFT JOIN detail d ON DATE(d.create_time) = m.day AND d.update_type = '消费'",
"GROUP BY m.day",
"ORDER BY m.day"
})
List<SumCoin> getMediuConsumeCoinweek();
//今天--消费充值
@Select({
"SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS day,",
" NOW() AS currentTimestamp,",
" SUM(recharge_coin) AS rechargeSumCoin,",
" SUM(free_coin) AS freeSumCoin,",
" SUM(task_coin) AS taskSumCoin",
"FROM `detail`",
"WHERE DATE(create_time) = CURDATE() AND update_type = '充值'"
})
List<SumCoin> getMediuPayCoinday();
@Select({
"SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS day,",
" NOW() AS currentTimestamp,",
" SUM(recharge_coin) AS rechargeSumCoin,",
" SUM(free_coin) AS freeSumCoin,",
" SUM(task_coin) AS taskSumCoin",
"FROM `detail`",
"WHERE DATE(create_time) = CURDATE() AND update_type = '消费'"
})
List<SumCoin> getMediuConsumeCoinday();
//给定时间段--消费充值
@Select({
"SELECT m.day,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.recharge_coin ELSE 0 END), 0) AS rechargeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.free_coin ELSE 0 END), 0) AS freeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.task_coin ELSE 0 END), 0) AS taskSumCoin",
"FROM (",
" SELECT DATE_ADD(#{searchStartTime}, INTERVAL n DAY) AS day",
" FROM (",
" SELECT a.N + b.N * 10 AS n",
" FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a,",
" (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b",
" ) numbers",
" WHERE DATE_ADD(#{searchStartTime}, INTERVAL n DAY) <= #{searchEndTime}",
") m",
"LEFT JOIN detail d ON DATE(d.create_time) = m.day AND d.update_type = '充值'",
"GROUP BY m.day",
"ORDER BY m.day"
})
List<SumCoin> getMediuPayCoin1(SumCoin sumCoin);
@Select({
"SELECT m.day,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.recharge_coin ELSE 0 END), 0) AS rechargeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.free_coin ELSE 0 END), 0) AS freeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.task_coin ELSE 0 END), 0) AS taskSumCoin",
"FROM (",
" SELECT DATE_ADD(#{searchStartTime}, INTERVAL n DAY) AS day",
" FROM (",
" SELECT a.N + b.N * 10 AS n",
" FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a,",
" (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b",
" ) numbers",
" WHERE DATE_ADD(#{searchStartTime}, INTERVAL n DAY) <= #{searchEndTime}",
") m",
"LEFT JOIN detail d ON DATE(d.create_time) = m.day AND d.update_type = '消费'",
"GROUP BY m.day",
"ORDER BY m.day"
})
List<SumCoin> getMediuConsumeCoin2(SumCoin sumCoin);
@Select({"SELECT today.jwcode," ,
"today.rechargeSumCoin AS todayRecharge," ,
@ -268,47 +448,26 @@ public interface StatisticsMapper {
@Select({
"SELECT m.month,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.recharge_coin ELSE 0 END), 0) AS rechargeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.free_coin ELSE 0 END), 0) AS freeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '充值' THEN d.task_coin ELSE 0 END), 0) AS taskSumCoin",
"FROM (",
" SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL n MONTH), '%Y-%m') AS month",
" FROM (",
" SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3",
" UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7",
" UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10",
" ) AS numbers",
") AS m",
"LEFT JOIN detail d ON DATE_FORMAT(d.create_time, '%Y-%m') = m.month",
"<if test='searchStartTime != null and searchEndTime != null'>",
"and detail.create_time between #{searchStartTime} and #{searchEndTime}",
"</if>",
"GROUP BY m.month",
"ORDER BY m.month DESC"
})
List<SumCoin> getMediu();
@Select({
"SELECT m.month,",
"SELECT m.week,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.recharge_coin ELSE 0 END), 0) AS xrechargeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.free_coin ELSE 0 END), 0) AS xfreeSumCoin,",
" COALESCE(SUM(CASE WHEN d.update_type = '消费' THEN d.task_coin ELSE 0 END), 0) AS xtaskSumCoin",
"FROM (",
" SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL n MONTH), '%Y-%m') AS month",
" SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL n WEEK), '%Y-%u') AS week",
" FROM (",
" SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3",
" UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7",
" UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10",
" UNION ALL SELECT 4 UNION ALL SELECT 5",
" ) AS numbers",
") AS m",
"LEFT JOIN detail d ON DATE_FORMAT(d.create_time, '%Y-%m') = m.month",
"LEFT JOIN detail d ON DATE_FORMAT(d.create_time, '%Y-%u') = m.week",
"<if test='searchStartTime != null and searchEndTime != null'>",
"and detail.create_time between #{searchStartTime} and #{searchEndTime}",
"AND d.create_time BETWEEN #{searchStartTime} AND #{searchEndTime}",
"</if>",
"GROUP BY m.month",
"ORDER BY m.month DESC"
"GROUP BY m.week",
"ORDER BY m.week DESC"
})
List<SumCoin> getMediu2();
@ -326,7 +485,7 @@ public interface StatisticsMapper {
"FROM detail d",
"right JOIN admin ad ON ad.admin_id = d.admin_id",
"<if test='searchStartTime != null and searchEndTime != null'>",
"and d.create_time between #{searchStartTime} and #{searchEndTime}",
"AND DATE(d.create_time) BETWEEN DATE(#{searchStartTime}) AND DATE(#{searchEndTime})",
"</if>",
"GROUP BY ad.area, ad.store",
"order by freeSumCoin desc",
@ -346,7 +505,7 @@ public interface StatisticsMapper {
"FROM detail d",
"right JOIN admin ad ON ad.admin_id = d.admin_id",
"<if test='searchStartTime != null and searchEndTime != null'>",
"and d.create_time between #{searchStartTime} and #{searchEndTime}",
"AND DATE(d.create_time) BETWEEN DATE(#{searchStartTime}) AND DATE(#{searchEndTime})",
"</if>",
"GROUP BY ad.area, ad.store",
"order by rechargeSumCoin desc",
@ -366,7 +525,7 @@ public interface StatisticsMapper {
"FROM detail d",
"right JOIN admin ad ON ad.admin_id = d.admin_id",
"<if test='searchStartTime != null and searchEndTime != null'>",
"and d.create_time between #{searchStartTime} and #{searchEndTime}",
"AND DATE(d.create_time) BETWEEN DATE(#{searchStartTime}) AND DATE(#{searchEndTime})",
"</if>",
"GROUP BY ad.area, ad.store",
"order by taskSumCoin desc",
@ -386,7 +545,7 @@ public interface StatisticsMapper {
"FROM detail d",
"right JOIN admin ad ON ad.admin_id = d.admin_id",
"<if test='searchStartTime != null and searchEndTime != null'>",
"and d.create_time between #{searchStartTime} and #{searchEndTime}",
"AND DATE(d.create_time) BETWEEN DATE(#{searchStartTime}) AND DATE(#{searchEndTime})",
"</if>",
"GROUP BY ad.area, ad.store",
"order by totalRechargeSum desc",
@ -406,7 +565,7 @@ public interface StatisticsMapper {
"FROM detail d",
"right JOIN admin ad ON ad.admin_id = d.admin_id",
"<if test='searchStartTime != null and searchEndTime != null'>",
"and d.create_time between #{searchStartTime} and #{searchEndTime}",
"AND DATE(d.create_time) BETWEEN DATE(#{searchStartTime}) AND DATE(#{searchEndTime})",
"</if>",
"GROUP BY ad.area, ad.store",
"order by freeSumCoin asc",
@ -426,7 +585,7 @@ public interface StatisticsMapper {
"FROM detail d",
"right JOIN admin ad ON ad.admin_id = d.admin_id",
"<if test='searchStartTime != null and searchEndTime != null'>",
"and d.create_time between #{searchStartTime} and #{searchEndTime}",
"AND DATE(d.create_time) BETWEEN DATE(#{searchStartTime}) AND DATE(#{searchEndTime})",
"</if>",
"GROUP BY ad.area, ad.store",
"order by rechargeSumCoin asc",
@ -446,7 +605,7 @@ public interface StatisticsMapper {
"FROM detail d",
"right JOIN admin ad ON ad.admin_id = d.admin_id",
"<if test='searchStartTime != null and searchEndTime != null'>",
"and d.create_time between #{searchStartTime} and #{searchEndTime}",
"AND DATE(d.create_time) BETWEEN DATE(#{searchStartTime}) AND DATE(#{searchEndTime})",
"</if>",
"GROUP BY ad.area, ad.store",
"order by taskSumCoin asc",
@ -458,7 +617,7 @@ public interface StatisticsMapper {
"SELECT ad.area,",
" ad.store,",
" SUM(CASE WHEN d.update_type = '消费' THEN d.recharge_coin ELSE 0 END) AS rechargeSumCoin,",
" SUM(CASE WHEN d.update_type = '消费' THEN d.free_coin ELSE 0 END) AS freeSumCoin,",
" SUM(CASE WHEN d.update_type sddfergrfdfbdgrhyrrhtgetre dfdtgEGTwqcdefwerbtgrytyrh = '消费' THEN d.free_coin ELSE 0 END) AS freeSumCoin,",
" SUM(CASE WHEN d.update_type = '消费' THEN d.task_coin ELSE 0 END) AS taskSumCoin,",
" (SUM(CASE WHEN d.update_type = '消费' THEN d.recharge_coin ELSE 0 END) +",
" SUM(CASE WHEN d.update_type = '消费' THEN d.free_coin ELSE 0 END) +",
@ -466,11 +625,13 @@ public interface StatisticsMapper {
"FROM detail d",
"right JOIN admin ad ON ad.admin_id = d.admin_id",
"<if test='searchStartTime != null and searchEndTime != null'>",
"and d.create_time between #{searchStartTime} and #{searchEndTime}",
"AND DATE(d.create_time) BETWEEN DATE(#{searchStartTime}) AND DATE(#{searchEndTime})",
"</if>",
"GROUP BY ad.area, ad.store",
"order by totalRechargeSum asc",
"</script>"
})
List<Meium> getPay(@Param("searchStartTime") Date searchStartTime, @Param("searchEndTime") Date searchEndTime);
}
}

9
src/main/java/com/example/demo/mapper/UserMapper.java

@ -67,6 +67,10 @@ public interface UserMapper {
"select * from user where name=#{name}"
})
User selectByName(String name);
@Select({
"select * from user where jwcode=#{jwcode}"
})
User selectByJwcode(String jwcode);
@Update({
"<script>",
@ -82,10 +86,7 @@ public interface UserMapper {
})
int update(User user);
@Select({
"select * from user where jwcode=#{jwcode}"
})
User selectByJwcode(String jwcode);// //去掉免费金币先去6个月再去12月
// //去掉免费金币先去6个月再去12月
// @Update({
// "<script>",
// "update user",

31
src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java

@ -35,13 +35,13 @@ public class ConsumeServiceImpl implements ConsumeService {
@Autowired
ConsumeMapper consumeMapper;
private final UserMapper userMapper;
private final UserServiceImpl userService;
@CacheEvict(value = "consume", allEntries = true)
@Override
//新增消费记录
public int insert(Detail detail) throws Exception {
BigDecimal paidGold1 =detail.getFreeCoin();
BigDecimal freeGold1 =detail.getRechargeCoin();
BigDecimal paidGold1 =detail.getRechargeCoin();
BigDecimal freeGold1 =detail.getFreeCoin();
BigDecimal taskGold1 =detail.getTaskCoin();
String jwcode = detail.getJwcode();
User user = userMapper.get(jwcode);
@ -86,11 +86,26 @@ public class ConsumeServiceImpl implements ConsumeService {
//消费完成后需要将用户的三币从user表中去掉
//消费记录添加完成
// if(result==1){
// userMapper.updateFreecoin(detail.getFreeCoin());
// userMapper.updateRechargeCoin(detail.getRechargeCoin());
// userMapper.updateTaskCoin(detail.getTaskCoin());
// }
if(result==1){
userService.updateFreecoin(detail);
// BigDecimal paidGold1 =detail.getRechargeCoin();
// BigDecimal freeGold1 =detail.getFreeCoin();
// BigDecimal taskGold1 =detail.getTaskCoin();
BigDecimal newbuyjb = user.getBuyJb().subtract(paidGold1);
user.setBuyJb(newbuyjb);
BigDecimal newtask = user.getCoreJb().subtract(taskGold1);
user.setCoreJb(newtask);
System.out.println(user.getFree6()+"-------1---");
System.out.println(user.getFree12()+"-------2---");
System.out.println(user.getFree6()+"----------");
System.out.println(user.getFree6()+"-------1---");
// 更新用户对象以反映新的余额
result = userMapper.update(user);
}
return result;

132
src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java

@ -1,6 +1,9 @@
package com.example.demo.serviceImpl;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import com.example.demo.Util.CheckIfNullUtil;
import com.example.demo.domain.vo.Meium;
import com.example.demo.domain.vo.Statistics;
@ -14,8 +17,12 @@ import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.List;
@RequiredArgsConstructor
@ -129,7 +136,7 @@ public class StatisticsServiceImpl implements StatisticsService {
@Override
@Override
public List<Meium> getMee( Meium meium) {
@ -162,8 +169,127 @@ public class StatisticsServiceImpl implements StatisticsService {
@Override
public List<SumCoin> getMediu() {
return statisticsMapper.getMediu();
return List.of();
}
// public List<SumCoin> getCoinTime( SumCoin sumcoin) {
//
// System.out.println(sumcoin+"-------sumcoin----");
// Date searchStartTime=sumcoin.getSearchStartTime();
// Date searchEndTime=sumcoin.getSearchEndTime();
// String updateType=sumcoin.getUpdateType();
//
//// //提供开始时间与结束时间
////// if(searchStartTime!=null && searchEndTime!=null){
//// //计算两个时间点之间的差值
//// long daysBetween = ChronoUnit.DAYS.between(searchStartTime, searchEndTime);
//
//// 提供开始时间与结束时间
//
//
// // 使用 Calendar 清除时间和时区的影响
// Calendar startCal = Calendar.getInstance();
// startCal.setTime(searchStartTime);
// startCal.set(Calendar.HOUR_OF_DAY, 0);
// startCal.set(Calendar.MINUTE, 0);
// startCal.set(Calendar.SECOND, 0);
// startCal.set(Calendar.MILLISECOND, 0);
//
// Calendar endCal = Calendar.getInstance();
// endCal.setTime(searchEndTime);
// endCal.set(Calendar.HOUR_OF_DAY, 0);
// endCal.set(Calendar.MINUTE, 0);
// endCal.set(Calendar.SECOND, 0);
// endCal.set(Calendar.MILLISECOND, 0);
//
// // 计算两个时间点之间的天数差异
// long diffInMillies = endCal.getTimeInMillis() - startCal.getTimeInMillis();
// long daysBetween = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
//
//
// //
// if(daysBetween>100 || searchStartTime==null & searchEndTime==null){
// if("消费".equals(updateType)){
// return statisticsMapper.getMediuConsumeCoin();
// }else if("充值".equals(updateType)){
// return statisticsMapper.getMediuPayCoin();
// }
//
// }else {
// if ("消费".equals(updateType)) {
// return statisticsMapper.getMediuCounsumeCoinyue(searchStartTime,searchEndTime);
// } else if ("充值".equals(updateType)) {
// return statisticsMapper.getMediuPayCoinyue(searchStartTime,searchEndTime);
// }
// }
//
//
//
//
//
//
// return null;
//
// }
public List<SumCoin> getCoinTime(SumCoin sumcoin) {
System.out.println(sumcoin + "-------sumcoin----");
Date searchStartTime = sumcoin.getSearchStartTime();
Date searchEndTime = sumcoin.getSearchEndTime();
String updateType = sumcoin.getUpdateType();
// 如果开始时间和结束时间都为空则直接返回默认统计结果
if (searchStartTime == null && searchEndTime == null) {
if ("消费".equals(updateType)) {
return statisticsMapper.getMediuConsumeCoin();
} else if ("充值".equals(updateType)) {
return statisticsMapper.getMediuPayCoin();
}
return null; // 或者抛出异常取决于业务需求
}
// 如果只有其中一个时间为null则可能需要处理或抛出异常这里假设不允许这种情况
if (searchStartTime == null || searchEndTime == null) {
throw new IllegalArgumentException("开始时间和结束时间必须同时为空或不为空");
}
// 使用 Calendar 清除时间和时区的影响
Calendar startCal = Calendar.getInstance();
startCal.setTime(searchStartTime);
startCal.set(Calendar.HOUR_OF_DAY, 0);
startCal.set(Calendar.MINUTE, 0);
startCal.set(Calendar.SECOND, 0);
startCal.set(Calendar.MILLISECOND, 0);
Calendar endCal = Calendar.getInstance();
endCal.setTime(searchEndTime);
endCal.set(Calendar.HOUR_OF_DAY, 0);
endCal.set(Calendar.MINUTE, 0);
endCal.set(Calendar.SECOND, 0);
endCal.set(Calendar.MILLISECOND, 0);
// 计算两个时间点之间的天数差异
long diffInMillies = endCal.getTimeInMillis() - startCal.getTimeInMillis();
long daysBetween = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
// 根据条件选择查询方法
if (daysBetween > 100) {
if ("消费".equals(updateType)) {
return statisticsMapper.getMediuConsumeCoin();
} else if ("充值".equals(updateType)) {
return statisticsMapper.getMediuPayCoin();
}
} else {
if ("消费".equals(updateType)) {
return statisticsMapper.getMediuCounsumeCoinyue(searchStartTime, searchEndTime);
} else if ("充值".equals(updateType)) {
return statisticsMapper.getMediuPayCoinyue(searchStartTime, searchEndTime);
}
}
// 如果没有匹配的updateType返回null或抛出异常取决于业务需求
return null;
}
}

100
src/main/java/com/example/demo/serviceImpl/UserServiceImpl.java

@ -1,19 +1,23 @@
package com.example.demo.serviceImpl;
import com.example.demo.domain.entity.Detail;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.UserConsumeCoin;
import com.example.demo.domain.vo.UserVo;
import com.example.demo.mapper.UserMapper;
import com.example.demo.sevice.UserSevice;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import org.apache.ibatis.annotations.Param;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.math.BigDecimal;
import java.util.List;
@Transactional
@Service
@ -36,4 +40,100 @@ public class UserServiceImpl implements UserSevice {
List<User> list= userMapper.selectAll(user);
return new PageInfo<>(list);
}
//设置免费金币
// public User updateFreecoin(Detail userConsumeCoin) {
//
// String jwcode = userConsumeCoin.getJwcode();
// User user = userMapper.get(jwcode);
//
// //前端三币之和allGold
// BigDecimal allGold = userConsumeCoin.getAllGold();
// //数据表
// BigDecimal sum = user.getFree6().add(user.getFree12()).add(user.getCoreJb()).add(user.getBuyJb());
// //前端提供免费金币任务充值金币
// BigDecimal freeSumCoin = userConsumeCoin.getFreeCoin().abs();
//// BigDecimal rechargeSumCoin = userConsumeCoin.getRechargeSumCoin();
//// BigDecimal taskSumCoin = userConsumeCoin.getTaskSumCoin();
// System.out.println(freeSumCoin+"---------freecoin");
// if(allGold.compareTo(sum)<=0 ){
// if (freeSumCoin == null) {
// // 根据业务需求处理 null
// System.out.println("000000000000000000");
// return null; // 或者抛出异常或者设置默认行为
// }else{
//// 如果返回 -1则调用 compareTo BigDecimal 小于参数
//// 如果返回 0则两者相等
//// 如果返回 1则调用 compareTo BigDecimal 大于参数
// if(user.getFree6().compareTo(freeSumCoin)==1){
// //rechargeSumCoin小直接减
// BigDecimal newFree6 = user.getFree6().subtract(freeSumCoin);
// System.out.println(newFree6+"_____newFree61---");
// System.out.println(user.getFree6()+"_____newFree6---");
// System.out.println(user.getFree12()+"_____newFree12---");
// user.setFree6(newFree6);
// System.out.println("1111111111111");
// return user;
// }else if(user.getFree6().compareTo(freeSumCoin)==-1){
// BigDecimal subtract = freeSumCoin.subtract(user.getFree6());//还差多少免费金币
// BigDecimal subtract1 = user.getFree12().subtract(subtract);
// user.setFree12(subtract1);
// user.setFree6(BigDecimal.ZERO);
// System.out.println(user.getFree6()+"_____newFree6---");
// System.out.println(user.getFree12()+"_____newFree12---");
// System.out.println("22222222222222222");
// return user;
// }else if(user.getFree6().compareTo(freeSumCoin)==0){
// user.setFree6(BigDecimal.ZERO);
// System.out.println(user.getFree6()+"_____newFree6---");
// System.out.println(user.getFree12()+"_____newFree12---");
// System.out.println("33333333333333333333");
// return user;
// }
//
// }
//
//
// }
// System.out.println("金币数不够,请前去去充值");
//
// return null;
//
// }
public User updateFreecoin(Detail userConsumeCoin) {
// 获取用户消费的免费金币并取绝对值确保为正数
BigDecimal newfree = userConsumeCoin.getFreeCoin().abs();
String jwcode = userConsumeCoin.getJwcode();
User user = userMapper.get(jwcode);
BigDecimal free6 = user.getFree6();
BigDecimal free12 = user.getFree12();
// 先尝试从 free6 中扣除
if (free6.compareTo(newfree) >= 0) {
// free6 足够支付新消费的免费金币
free6 = free6.subtract(newfree);
user.setFree6(free6);
System.out.println("只花了free6 ");
} else {
// free6 不足以支付需要从 free12 中扣除剩余部分
BigDecimal remaining = newfree.subtract(free6);
free6 = BigDecimal.ZERO;
free12 = free12.subtract(remaining);
user.setFree6(free6);
user.setFree12(free12);
System.out.println("花了free6 和free12.");
}
// 更新用户对象以反映新的余额
int result = userMapper.update(user);
if (result != 1) {
throw new RuntimeException("无法实现用户表金币更新");
}
return user;
}
}

2
src/main/java/com/example/demo/sevice/UserSevice.java

@ -2,8 +2,10 @@ package com.example.demo.sevice;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.UserConsumeCoin;
import com.example.demo.domain.vo.UserVo;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;

Loading…
Cancel
Save