Browse Source

工作台地区优化

huangqizheng/feature-20250805200446-配置修改及充值导出修改
lijianlin 2 weeks ago
parent
commit
c22acffb44
  1. 4
      src/main/java/com/example/demo/controller/coin/WorkbenchController.java
  2. 36
      src/main/java/com/example/demo/mapper/coin/StatisticsMapper.java
  3. 2
      src/main/java/com/example/demo/serviceImpl/coin/GeneralServiceImpl.java
  4. 7
      src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java
  5. 194
      src/main/resources/mapper/StatisticsMapper.xml
  6. 2
      src/main/resources/mapper/WorkBenchMapper.xml

4
src/main/java/com/example/demo/controller/coin/WorkbenchController.java

@ -57,7 +57,7 @@ public class WorkbenchController {
List<String> markets = workbenchService.getAdminMarket(account);
WorkbenchCard result;
//判断是否是总部
if (markets != null && markets.contains("1")) {
if (markets != null && markets.contains("总部")||markets.contains("研发部")) {
result = workbenchService.getCardCache(markets);//走缓存拿全部市场的缓存数据
} else {
result = workbenchService.getCard(markets);//不走缓存计算卡片属性
@ -71,7 +71,7 @@ public class WorkbenchController {
@PostMapping("getGraph")
public ResponseEntity<WorkbenchCard> graph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin) {
String account = admin.getAccount();
List<String> markets = generalService.getAdminMarket(account);
List<String> markets = workbenchService.getAdminMarket(account);
workbench.setMarkets(markets);

36
src/main/java/com/example/demo/mapper/coin/StatisticsMapper.java

@ -24,49 +24,17 @@ public interface StatisticsMapper {
//批量查询
List<Statistics> selectByMarketsAndDate(@Param("markets") List<String> markets, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
//根据地区审核状态起止时间查询订单表数据
List<UserGoldRecord> findByMarketAndAuditStatus(@Param("market") String market,
@Param("auditStatusList") List<Integer> auditStatusList,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
//获取某地区当前永久金币余量
Integer sumCurrentPermanentGold(@Param("market") String market);
//获取某地区当前六月免费金币余量
Integer sumCurrentFreeJune(@Param("market") String market);
//获取某地区当前永久金币余量
Integer sumCurrentFreeDecember(@Param("market") String market);
//获取某地区当前永久金币余量
Integer sumCurrentTaskGold(@Param("market") String market);
//计算该天充值人数
Integer countRechargeNum(
@Param("market") String market,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
//计算该天首充人数
Integer countFirstRecharge(
@Param("market") String market,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
//新增part1统计数据
void insertPart1(Statistics statistics);
//更新part1统计数据
void updatePart1(Statistics statistics);
//新增part2统计数据
void insertPart2(Statistics statistics);
//更新part2统计数据
void updatePart2(Statistics statistics);
//新增年度统计数据
void insertYear(Statistics statistics);
//更新年度统计数据
void updateYear(Statistics statistics);
//获取某地区某时间所在日期的数据仅一条
Statistics selectByMarketAndDate(@Param("market") String market,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
//获取某地区某时间段的统计数据仅一条
Statistics selectSumByMarketAndDate(@Param("market") String market,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
// 一次查 所有地区 Part1余量
List<Statistics> listPart1All(@Param("today") LocalDate today);

2
src/main/java/com/example/demo/serviceImpl/coin/GeneralServiceImpl.java

@ -130,7 +130,7 @@ public class GeneralServiceImpl implements GeneralService {
}
List<String> list = Arrays.asList(market.split(","));
//判断是否是总部
if (list != null && list.contains("1")) {
if (list != null && list.contains("总部")||list.contains("研发部")) {
List<String> allMarkets = getMarket(); // 获取所有地区
allMarkets.remove("1"); // 先移除可能存在的总部
allMarkets.add(0, "1"); // 将总部添加到列表第一位

7
src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java

@ -60,10 +60,10 @@ public class WorkbenchServiceImpl implements WorkbenchService {
}
List<String> list = Arrays.asList(market.split(","));
//判断是否是总部
if (list != null && list.contains("1")) {
if (list != null && list.contains("总部")||market.equals("研发部")) {
List<String> allMarkets = workBenchMapper.getMarket(); // 获取所有地区
allMarkets.remove("1"); // 先移除可能存在的总部
allMarkets.add(0, "1"); // 将总部添加到列表第一位
allMarkets.remove("总部"); // 先移除可能存在的总部
allMarkets.add(0, "总部"); // 将总部添加到列表第一位
list = allMarkets; // 更新list
}
return list;
@ -130,6 +130,7 @@ public class WorkbenchServiceImpl implements WorkbenchService {
//没缓存获取新数据并存入缓存
try {
//获取新的工作台数据
markets = workBenchMapper.getMarket();
WorkbenchCard freshData = getCard(markets);
//存入缓存一小时后过期与统计表更新时间对应
redisTemplate.opsForValue().set(CACHE_KEY, freshData, 1, java.util.concurrent.TimeUnit.HOURS);

194
src/main/resources/mapper/StatisticsMapper.xml

@ -1,60 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.coin.StatisticsMapper">
<!--新增part2统计数据-->
<insert id="insertPart2">
INSERT INTO statistics (
market, current_datetime,
recharge, money,
consume_permanent, consume_free_june,
consume_free_december, consume_task,
refund_permanent, refund_free_june,
refund_free_december,refund_task,
recharge_num, first_recharge
) VALUES (
#{market}, #{currentDatetime},
#{recharge}, #{money},
#{consumePermanent}, #{consumeFreeJune},
#{consumeFreeDecember}, #{consumeTask},
#{refundPermanent}, #{refundFreeJune},
#{refundFreeDecember}, #{refundTask},
#{rechargeNum}, #{firstRecharge}
)
</insert>
<!--新增part1统计数据-->
<insert id="insertPart1">
INSERT INTO statistics (
market, current_datetime,
current_gold, daily_change,
current_permanent, current_free_june,
current_free_december, current_task
) VALUES (
#{market}, #{currentDatetime},
#{currentGold}, #{dailyChange},
#{currentPermanent}, #{currentFreeJune},
#{currentFreeDecember}, #{currentTask}
)
</insert>
<!--新增年度统计-->
<insert id="insertYear">
INSERT INTO statistics (
market, current_datetime,
yearly_recharge,
yearly_money,
yearly_consume,
yearly_refund,
yearly_recharge_num
) VALUES (
#{market}, #{currentDatetime},
#{yearlyRecharge},#{yearlyMoney},
#{yearlyConsume},#{yearlyRefund},
#{yearlyRechargeNum}
)
</insert>
<insert id="batchInsertPart1">
<foreach collection="list" item="s" separator=";">
INSERT INTO statistics (
@ -136,66 +83,7 @@
yearly_recharge_num = VALUES(yearly_recharge_num)
</foreach>
</insert>
<!--更新part2统计数据-->
<update id="updatePart2" parameterType="map">
UPDATE statistics
SET
recharge = #{recharge},
money = #{money},
consume_permanent = #{consumePermanent},
consume_free_june = #{consumeFreeJune},
consume_free_december = #{consumeFreeDecember},
consume_task = #{consumeTask},
refund_permanent = #{refundPermanent},
refund_free_june = #{refundFreeJune},
refund_free_december = #{refundFreeDecember},
refund_task = #{refundTask},
recharge_num = #{rechargeNum},
first_recharge = #{firstRecharge}
<if test="updateTime != null">
,update_time = #{updateTime}
</if>
WHERE market = #{market} and current_datetime = #{currentDatetime}
</update>
<!--更新part1统计数据-->
<update id="updatePart1" parameterType="map">
update statistics
SET
current_gold = #{currentGold},
daily_change = #{dailyChange},
current_permanent = #{currentPermanent},
current_free_june = #{currentFreeJune},
current_free_december = #{currentFreeDecember},
current_task = #{currentTask}
WHERE market = #{market} and current_datetime = #{currentDatetime}
</update>
<!--更新年度统计数据-->
<update id="updateYear" parameterType="map">
update statistics
SET
yearly_recharge=#{yearlyRecharge},
yearly_money=#{yearlyMoney},
yearly_consume=#{yearlyConsume},
yearly_refund=#{yearlyRefund},
yearly_recharge_num=#{yearlyRechargeNum}
WHERE market = #{market} and current_datetime = #{currentDatetime}
</update>
<!--根据地区、审核状态、起止时间查询订单表数据-->
<select id="findByMarketAndAuditStatus"
resultType="com.example.demo.domain.entity.UserGoldRecord">
SELECT u.market, ugr.*
FROM user_gold_record ugr
INNER JOIN user u ON ugr.jwcode = u.jwcode
WHERE u.market = #{market}
AND ugr.audit_status IN
<foreach item="status" collection="auditStatusList" open="(" separator="," close=")">
#{status}
</foreach>
and ugr.flag=1
AND ugr.create_time BETWEEN #{startTime} AND #{endTime}
</select>
<!-- 计算该天充值人数-->
<select id="countRechargeNum" resultType="java.lang.Integer">
SELECT COUNT(DISTINCT ugr.jwcode)
@ -206,17 +94,7 @@
AND ugr.audit_status IN (1,3)
AND ugr.audit_time BETWEEN #{startTime} AND #{endTime}
</select>
<!--计算该天首充人数-->
<select id="countFirstRecharge" resultType="java.lang.Integer">
SELECT COUNT(DISTINCT ugr.jwcode)
FROM user_gold_record ugr
INNER JOIN user u ON ugr.jwcode = u.jwcode
WHERE u.market = #{market}
AND ugr.type=0
AND ugr.audit_status IN (1,3)
AND ugr.audit_time BETWEEN #{startTime} AND #{endTime}
AND u.first_recharge = #{startTime}
</select>
<!--获取某地区某时间所在日期的数据(仅一条)-->
<select id="selectByMarketAndDate" resultType="com.example.demo.domain.entity.Statistics">
SELECT *
@ -225,39 +103,6 @@
AND current_datetime BETWEEN #{startDate} AND #{endDate}
</select>
<select id="sumCurrentPermanentGold" resultType="java.lang.Integer">
SELECT COALESCE(SUM(current_permanent_gold), 0)
FROM user
WHERE user.market = #{market}
</select>
<select id="sumCurrentFreeJune" resultType="java.lang.Integer">
SELECT COALESCE(SUM(u.current_free_june),0)
FROM user as u
WHERE u.market = #{market}
</select>
<select id="sumCurrentFreeDecember" resultType="java.lang.Integer">
SELECT COALESCE(SUM(u.current_free_december),0)
FROM user as u
WHERE u.market = #{market}
</select>
<select id="sumCurrentTaskGold" resultType="java.lang.Integer">
SELECT COALESCE(SUM(u.current_task_gold),0)
FROM user as u
WHERE u.market = #{market}
</select>
<select id="selectSumByMarketAndDate" resultType="com.example.demo.domain.entity.Statistics">
select sum(s.recharge) as recharge,
sum(s.money) as money,
sum(s.consume_permanent) as consume_permanent,
sum(s.consume_free_june) as consume_free_june,
sum(s.consume_free_december) as consume_free_december,
sum(s.consume_task) as consume_task,
sum(s.recharge_num) as recharge_num
from statistics as s
WHERE market = #{market}
AND current_datetime >= #{startDate}
AND current_datetime &lt;= #{endDate}
</select>
<select id="selectByMarketsAndDate" resultType="com.example.demo.domain.entity.Statistics">
SELECT * FROM statistics
WHERE market IN
@ -268,7 +113,7 @@
</select>
<select id="listPart1All" resultType="com.example.demo.domain.entity.Statistics">
SELECT
market,
m.name as market,
#{today} AS current_datetime,
COALESCE(SUM(current_permanent_gold),0) +
COALESCE(SUM(current_free_june),0) +
@ -295,12 +140,14 @@
), 0
) AS daily_change
FROM user u
left join market m on u.market=m.id
where m.name IS NOT NULL
GROUP BY market
</select>
<select id="listPart2All" resultType="com.example.demo.domain.entity.Statistics">
SELECT
u.market,
#{today} AS current_datetime,
m.name as market,
'2025-08-04' AS current_datetime,
COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold+ugr.free_june+ugr.free_december+ugr.task_gold END),0) AS recharge,
COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold END),0) AS money,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.permanent_gold END),0) AS consume_permanent,
@ -316,26 +163,30 @@
AND u.first_recharge BETWEEN #{start} AND #{end} THEN ugr.jwcode END) AS first_recharge
FROM user_gold_record ugr
JOIN user u ON ugr.jwcode = u.jwcode
left join market m on u.market=m.id
WHERE ugr.audit_status IN (1,3)
AND ugr.flag = 1
AND ugr.create_time BETWEEN #{start} AND #{end}
AND m.name IS NOT NULL
GROUP BY u.market
</select>
<select id="listYearAll" resultType="com.example.demo.domain.entity.Statistics">
SELECT market,
COALESCE(SUM(recharge),0) AS yearly_recharge,
SELECT m.name as market,
COALESCE(SUM(s.recharge),0) AS yearly_recharge,
#{today} AS current_datetime,
COALESCE(SUM(money),0) AS yearly_money,
COALESCE(SUM(consume_permanent+consume_free_june+consume_free_december+consume_task),0) AS yearly_consume,
COALESCE(SUM(refund_permanent+refund_free_june+refund_free_december+refund_task),0) AS yearly_refund,
COALESCE(SUM(recharge_num),0) AS yearly_recharge_num
FROM statistics
WHERE current_datetime BETWEEN #{yearStart} AND #{end}
COALESCE(SUM(s.money),0) AS yearly_money,
COALESCE(SUM(s.consume_permanent+s.consume_free_june+s.consume_free_december+s.consume_task),0) AS yearly_consume,
COALESCE(SUM(s.refund_permanent+s.refund_free_june+s.refund_free_december+s.refund_task),0) AS yearly_refund,
COALESCE(SUM(s.recharge_num),0) AS yearly_recharge_num
FROM statistics s
left join market m on s.market=m.id
WHERE current_datetime BETWEEN #{yearStart} AND #{end} AND m.name IS NOT NULL
GROUP BY market
</select>
<select id="listPart2RangeAll" resultType="com.example.demo.domain.entity.Statistics">
SELECT
u.market,
m.name as market,
DATE(ugr.create_time) AS current_datetime, -- 只保留日期
COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold+ugr.free_june+ugr.free_december+ugr.task_gold END),0) AS recharge,
COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold END),0) AS money,
@ -363,11 +214,12 @@
) d
JOIN user_gold_record ugr
ON ugr.create_time between d.date_start AND d.date_end
JOIN user u
ON ugr.jwcode = u.jwcode
JOIN user u ON ugr.jwcode = u.jwcode
left join market m on u.market=m.id
WHERE ugr.audit_status IN (1,3)
AND ugr.flag = 1
GROUP BY u.market, d.create_date
AND m.name IS NOT NULL
GROUP BY m.name, d.create_date
</select>

2
src/main/resources/mapper/WorkBenchMapper.xml

@ -132,6 +132,6 @@
</select>
<!--获取全部用户角色-->
<select id="getMarket" resultType="java.lang.String">
select DISTINCT market from user
select DISTINCT name from market where type=2
</select>
</mapper>
Loading…
Cancel
Save