Browse Source

10-11-工作台单个地区图表

lihuilin1015备份
lijianlin 2 months ago
parent
commit
1aee68f4db
  1. 15
      src/main/java/com/example/demo/controller/coin/WorkbenchController.java
  2. 24
      src/main/java/com/example/demo/domain/vo/coin/WorkbenchDayStatistics.java
  3. 23
      src/main/java/com/example/demo/domain/vo/coin/WorkbenchMonthStatistics.java
  4. 12
      src/main/java/com/example/demo/mapper/coin/WorkBenchMapper.java
  5. 4
      src/main/java/com/example/demo/service/coin/WorkbenchService.java
  6. 40
      src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java
  7. 28
      src/main/resources/mapper/WorkBenchMapper.xml

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

@ -49,7 +49,7 @@ public class WorkbenchController {
获取各地区工作台卡片的数据 获取各地区工作台卡片的数据
*/ */
@Log("获取工作台卡片数据") @Log("获取工作台卡片数据")
@PostMapping("getCard")
@PostMapping("/getCard")
public ResponseEntity<WorkbenchCard> card1(@RequestBody WorkbenchCard workbench) throws Exception{ public ResponseEntity<WorkbenchCard> card1(@RequestBody WorkbenchCard workbench) throws Exception{
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token"); String token = request.getHeader("token");
@ -71,7 +71,7 @@ public class WorkbenchController {
获取各地区工作台图表的数据 获取各地区工作台图表的数据
*/ */
@Log("获取工作台图表数据") @Log("获取工作台图表数据")
@PostMapping("getGraph")
@PostMapping("/getGraph")
public ResponseEntity<WorkbenchCard> graph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin) { public ResponseEntity<WorkbenchCard> graph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin) {
String account = admin.getAccount(); String account = admin.getAccount();
List<String> markets = workbenchService.getAdminMarket(account); List<String> markets = workbenchService.getAdminMarket(account);
@ -81,5 +81,16 @@ public class WorkbenchController {
WorkbenchCard result =workbenchService.getGraph(workbench.getStartDate(),workbench.getEndDate(),workbench.getMarkets()); WorkbenchCard result =workbenchService.getGraph(workbench.getStartDate(),workbench.getEndDate(),workbench.getMarkets());
return ResponseEntity.ok(result); return ResponseEntity.ok(result);
} }
//单个地区工作台图表
@Log("获取单个地区工作台图表数据")
@PostMapping("/getSingleGraph")
public ResponseEntity<WorkbenchCard> singleGraph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin) {
String account = admin.getAccount();
List<String> markets = workbenchService.getAdminMarket(account);
workbench.setMarkets(markets);
WorkbenchCard result =workbenchService.getSingleGraph(workbench.getStartDate(),workbench.getEndDate(),workbench.getMarkets());
return ResponseEntity.ok(result);
}
} }

24
src/main/java/com/example/demo/domain/vo/coin/WorkbenchDayStatistics.java

@ -0,0 +1,24 @@
package com.example.demo.domain.vo.coin;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @program: gold-java
* @ClassName WorkbenchDayStatistics
* @description:
* @author: Ethan
* @create: 202510-10 09:46
* @Version 1.0
**/
@Data
public class WorkbenchDayStatistics {
private Date statDate;
private BigDecimal dayRechargePermanent;
private BigDecimal dayRechargeFree;
private BigDecimal dayConsumePermanent;
private BigDecimal dayConsumeFree;
private BigDecimal dayConsumeTask;
}

23
src/main/java/com/example/demo/domain/vo/coin/WorkbenchMonthStatistics.java

@ -0,0 +1,23 @@
package com.example.demo.domain.vo.coin;
import lombok.Data;
import java.math.BigDecimal;
/**
* @program: gold-java
* @ClassName WorkbenchMonthStatistics
* @description:
* @author: Ethan
* @create: 202510-10 09:46
* @Version 1.0
**/
@Data
public class WorkbenchMonthStatistics {
private String month;
private BigDecimal monthRechargePermanent;
private BigDecimal monthRechargeFree;
private BigDecimal monthConsumePermanent;
private BigDecimal monthConsumeFree;
private BigDecimal monthConsumeTask;
}

12
src/main/java/com/example/demo/mapper/coin/WorkBenchMapper.java

@ -1,10 +1,10 @@
package com.example.demo.mapper.coin; package com.example.demo.mapper.coin;
import com.example.demo.domain.vo.coin.WorkbenchCard;
import com.example.demo.domain.vo.coin.WorkbenchFullStatistics;
import com.example.demo.domain.vo.coin.*;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -45,4 +45,12 @@ public interface WorkBenchMapper {
List<WorkbenchFullStatistics> getFullStatisticsByMarketAndDate1( @Param("markets") List<String> markets, List<WorkbenchFullStatistics> getFullStatisticsByMarketAndDate1( @Param("markets") List<String> markets,
@Param("startDate") Date startDate, @Param("startDate") Date startDate,
@Param("endDate") Date endDate); @Param("endDate") Date endDate);
//获取单个地区图表数据40天以内按天
List<WorkbenchMarketGraph> getDayStatistics(@Param("market") String market,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
//获取单个地区图表数据40天以上按月首尾截断
List<WorkbenchMarketGraph> getMonthStatistics(@Param("market") String market,
@Param("startDate") LocalDate startDate,
@Param("endDate") LocalDate endDate);
} }

4
src/main/java/com/example/demo/service/coin/WorkbenchService.java

@ -20,6 +20,8 @@ import java.util.List;
public interface WorkbenchService { public interface WorkbenchService {
//获取用户的地区权限列表 //获取用户的地区权限列表
List<String> getAdminMarket(String account) ; List<String> getAdminMarket(String account) ;
//获取用户的地区权限(字符串)
String getAdminMarket1(String account) ;
//获取不同地区的工作台统计卡片 //获取不同地区的工作台统计卡片
WorkbenchCard getCard(List<String> markets ); WorkbenchCard getCard(List<String> markets );
//缓存卡片数据 //缓存卡片数据
@ -41,4 +43,6 @@ public interface WorkbenchService {
Date addDays(Date date, int days); Date addDays(Date date, int days);
//获取传入时间所在周的第一天周一 //获取传入时间所在周的第一天周一
Date getStartOfWeek(Date date); Date getStartOfWeek(Date date);
//获取单一市场的工作台图表
WorkbenchCard getSingleGraph(Date startDate, Date endDate, List<String> markets);
} }

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

@ -1,10 +1,7 @@
package com.example.demo.serviceImpl.coin; package com.example.demo.serviceImpl.coin;
import com.example.demo.domain.entity.Statistics; import com.example.demo.domain.entity.Statistics;
import com.example.demo.domain.vo.coin.WorkbenchCard;
import com.example.demo.domain.vo.coin.WorkbenchFullStatistics;
import com.example.demo.domain.vo.coin.WorkbenchMarketCard;
import com.example.demo.domain.vo.coin.WorkbenchMarketGraph;
import com.example.demo.domain.vo.coin.*;
import com.example.demo.mapper.coin.StatisticsMapper; import com.example.demo.mapper.coin.StatisticsMapper;
import com.example.demo.mapper.coin.WorkBenchMapper; import com.example.demo.mapper.coin.WorkBenchMapper;
import com.example.demo.service.coin.WorkbenchService; import com.example.demo.service.coin.WorkbenchService;
@ -19,6 +16,7 @@ import java.time.DayOfWeek;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -75,6 +73,12 @@ public class WorkbenchServiceImpl implements WorkbenchService {
} }
} }
//获取用户地区权限字符串
@Override
public String getAdminMarket1(String account) {
return workBenchMapper.getAdminMarket( account);
}
@Override @Override
public WorkbenchCard getCard( List<String> markets) { public WorkbenchCard getCard( List<String> markets) {
@ -361,6 +365,34 @@ public class WorkbenchServiceImpl implements WorkbenchService {
.atStartOfDay(ZoneId.systemDefault()) .atStartOfDay(ZoneId.systemDefault())
.toInstant()); .toInstant());
} }
//获取单个地区工作台图表数据
@Override
public WorkbenchCard getSingleGraph(Date startDate, Date endDate, List<String> markets) {
if (markets == null || markets.size() != 1) {
throw new IllegalArgumentException("仅支持单地区");
}
//设置地区
String market = markets.get(0);
LocalDate start = startDate.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
LocalDate end = endDate.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
long days = ChronoUnit.DAYS.between(start, end) + 1;
// 判断是否需要按周或按月显示 大于40天按月反之按天
boolean byMonth = days > 40;
if (byMonth) {
List<WorkbenchMarketGraph> list = workBenchMapper.getMonthStatistics(market, start, end);
return new WorkbenchCard(new ArrayList<>(), list, markets, startDate, endDate, 0, 0, new Date());
} else {
List<WorkbenchMarketGraph> list = workBenchMapper.getDayStatistics(market, startDate, endDate);
return new WorkbenchCard(new ArrayList<>(), list, markets, startDate, endDate, 0, 0, new Date());
}
}
//获取最近的更新时间 //获取最近的更新时间
private Date findLatestUpdateTime(List<Statistics> statsList) { private Date findLatestUpdateTime(List<Statistics> statsList) {
// 使用流式处理来找到最新的 updateTime // 使用流式处理来找到最新的 updateTime

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

@ -136,4 +136,32 @@
<select id="getMarket" resultType="java.lang.String"> <select id="getMarket" resultType="java.lang.String">
select DISTINCT name from market where type=2 select DISTINCT name from market where type=2
</select> </select>
<!--40天内单个地区的图表数据 按天-->
<select id="getDayStatistics" resultType="com.example.demo.domain.vo.coin.WorkbenchMarketGraph">
select market,recharge as sumRechargePermanent,money as sumMoney,
(recharge - money) as sumRechargeFree,
consume_permanent as sumConsumePermanent,
sum(consume_free_june + consume_free_december) as sumConsumeFree,
consume_task as sumConsumeTask,
current_datetime
from statistics where market=#{market}
and current_datetime between #{startDate} and #{endDate}
order by current_datetime
</select>
<!--40天以上单个地区的图表数据 按月 首尾截断-->
<select id="getMonthStatistics" resultType="com.example.demo.domain.vo.coin.WorkbenchMarketGraph">
select DATE_FORMAT(current_datetime, '%Y-%m') as month,
market,
sum(recharge) as sumRechargePermanent,
sum(money) as sumMoney,
sum(recharge - money) as sumRechargeFree,
sum(consume_permanent) as sumConsumePermanent,
sum(consume_free_june + consume_free_december) as sumConsumeFree,
sum(consume_task) as sumConsumeTask
from statistics
where market = #{market}
and current_datetime between #{startDate} and #{endDate}
group by month
order by month
</select>
</mapper> </mapper>
Loading…
Cancel
Save