Browse Source

这是一次拉取

lihuilin/hotfix-20250810160509-余额地区传参
lihuilin 2 weeks ago
parent
commit
042617044d
  1. 53
      pom.xml
  2. 4
      src/main/java/com/example/demo/Export/ExportService.java
  3. 44
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  4. 2
      src/main/java/com/example/demo/Util/BaseDES2.java
  5. 5
      src/main/java/com/example/demo/config/AppConfig.java
  6. 2
      src/main/java/com/example/demo/config/Mysql4DataSourceConfig.java
  7. 12
      src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
  8. 15
      src/main/java/com/example/demo/controller/bean/BeanRechargeController.java
  9. 34
      src/main/java/com/example/demo/controller/coin/ExportController.java
  10. 28
      src/main/java/com/example/demo/controller/coin/GoldDetailController.java
  11. 4
      src/main/java/com/example/demo/controller/coin/WorkbenchController.java
  12. 2
      src/main/java/com/example/demo/domain/DTO/ArticleDTO.java
  13. 37
      src/main/java/com/example/demo/domain/DTO/BeanRechargeDTO.java
  14. 36
      src/main/java/com/example/demo/domain/DTO/OnlineDTO.java
  15. 26
      src/main/java/com/example/demo/domain/vo/bean/BeanConsume.java
  16. 58
      src/main/java/com/example/demo/domain/vo/bean/BeanOnlineRechargeInfo.java
  17. 10
      src/main/java/com/example/demo/domain/vo/bean/BeanRechargeInfo.java
  18. 58
      src/main/java/com/example/demo/domain/vo/bean/BeanSystemRechargeInfo.java
  19. 3
      src/main/java/com/example/demo/domain/vo/coin/Page.java
  20. 5
      src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper2.java
  21. 2
      src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java
  22. 3
      src/main/java/com/example/demo/mapper/coin/MarketMapper.java
  23. 36
      src/main/java/com/example/demo/mapper/coin/StatisticsMapper.java
  24. 6
      src/main/java/com/example/demo/mapper/pay/BeanRechargeMapper3.java
  25. 9
      src/main/java/com/example/demo/service/bean/BeanConsumeService.java
  26. 11
      src/main/java/com/example/demo/service/bean/BeanRechargeService.java
  27. 4
      src/main/java/com/example/demo/service/coin/ExportExcelService.java
  28. 3
      src/main/java/com/example/demo/service/coin/MarketService.java
  29. 35
      src/main/java/com/example/demo/service/listen/BeanListener.java
  30. 34
      src/main/java/com/example/demo/service/listen/OnLineListener.java
  31. 76
      src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java
  32. 87
      src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java
  33. 29
      src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java
  34. 14
      src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java
  35. 14
      src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java
  36. 13
      src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java
  37. 35
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  38. 4
      src/main/java/com/example/demo/serviceImpl/coin/GeneralServiceImpl.java
  39. 10
      src/main/java/com/example/demo/serviceImpl/coin/MarketServiceImpl.java
  40. 4
      src/main/java/com/example/demo/serviceImpl/coin/PermissionServiceImpl.java
  41. 12
      src/main/java/com/example/demo/serviceImpl/coin/RechargeServiceImpl.java
  42. 11
      src/main/java/com/example/demo/serviceImpl/coin/RefundServiceImpl.java
  43. 7
      src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java
  44. 12
      src/main/resources/application-dev.yml
  45. 3
      src/main/resources/application-prod.yml
  46. 20
      src/main/resources/application-test.yml
  47. 5
      src/main/resources/application.yml
  48. 2
      src/main/resources/jindouMapper/BeanRechargeMapper2.xml
  49. 26
      src/main/resources/mapper/AuditMapper.xml
  50. 20
      src/main/resources/mapper/ConsumeMapper.xml
  51. 2
      src/main/resources/mapper/GeneralMapper.xml
  52. 22
      src/main/resources/mapper/MarketMapper.xml
  53. 2
      src/main/resources/mapper/PermissionMapper.xml
  54. 24
      src/main/resources/mapper/RechargeMapper.xml
  55. 19
      src/main/resources/mapper/RefundMapper.xml
  56. 4
      src/main/resources/mapper/RoleMapper.xml
  57. 248
      src/main/resources/mapper/StatisticsMapper.xml
  58. 2
      src/main/resources/mapper/WorkBenchMapper.xml
  59. 2
      src/main/resources/paymapper/BeanRechargeMapper3.xml

53
pom.xml

@ -120,23 +120,6 @@
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.2</version> <!-- 版本号可根据实际情况调整 -->
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt-api</artifactId>-->
<!-- <version>0.11.5</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt-impl</artifactId>-->
<!-- <version>0.11.5</version>-->
<!-- <scope>runtime</scope>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt-jackson</artifactId> &lt;!&ndash; 或 jjwt-gson &ndash;&gt;-->
<!-- <version>0.11.5</version>-->
<!-- <scope>runtime</scope>-->
<!-- </dependency>-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
@ -177,7 +160,43 @@
</dependency>
</dependencies>
<!--配置多环境打包-->
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<properties>
<!--自定义的属性-->
<spring.profiles.active>dev</spring.profiles.active>
</properties>
<activation>
<!--如果不指定,则默认使用dev开发环境配置-->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 测试环境-->
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>pro</spring.profiles.active>
</properties>
</profile>
</profiles>
<build>
<finalName>${project.name}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>

4
src/main/java/com/example/demo/Export/ExportService.java

@ -24,4 +24,8 @@ public interface ExportService {
Result addExportFan(FanDTO dto);
//金豆文章导出
Result addExportArticle(ArticleDTO dto);
Result addExportBean(BeanRechargeDTO dto);
Result addExportOnline(OnlineDTO dto);
}

44
src/main/java/com/example/demo/Export/ExportServiceImpl.java

@ -109,6 +109,16 @@ public class ExportServiceImpl implements ExportService {
fanDTO.setUrl("");
fanDTO.setFileName(generateFileName("铁粉明细", adminName));
fanDTO.setDataNum(0);
} else if (dto instanceof BeanRechargeDTO beanRechargeDTO){
beanRechargeDTO.setAccount(Integer.valueOf(account));
beanRechargeDTO.setUrl("");
beanRechargeDTO.setFileName(generateFileName("金豆充值明细", adminName));
beanRechargeDTO.setDataNum(0);
} else if(dto instanceof OnlineDTO onlineDTO){
onlineDTO.setAccount(Integer.valueOf(account));
onlineDTO.setUrl("");
onlineDTO.setFileName(generateFileName("在线明细", adminName));
onlineDTO.setDataNum(0);
}
}
@ -176,6 +186,26 @@ public class ExportServiceImpl implements ExportService {
articleDTO.getFileName(),
articleDTO.getDataNum()
);
} else if (dto instanceof BeanRechargeDTO beanRechargeDTO){
goldDetailMapper.insertExportRecord(
idHolder,
account,
beanRechargeDTO.getType(),
beanRechargeDTO.getState(),
beanRechargeDTO.getUrl(),
beanRechargeDTO.getFileName(),
beanRechargeDTO.getDataNum()
);
} else if (dto instanceof OnlineDTO onlineDTO){
goldDetailMapper.insertExportRecord(
idHolder,
account,
onlineDTO.getType(),
onlineDTO.getState(),
onlineDTO.getUrl(),
onlineDTO.getFileName(),
onlineDTO.getDataNum()
);
}
}
@ -200,6 +230,10 @@ public class ExportServiceImpl implements ExportService {
requestData.put(requestDataKey, fanDTO.getBeanConsumeFan());
} else if (dto instanceof ArticleDTO articleDTO) {
requestData.put(requestDataKey, articleDTO.getBeanConsumeArticle());
} else if (dto instanceof BeanRechargeDTO beanRechargeDTO){
requestData.put(requestDataKey, beanRechargeDTO.getBeanRechargeInfo());
} else if (dto instanceof OnlineDTO onlineDTO){
requestData.put(requestDataKey, onlineDTO.getBeanRechargeInfo());
}
exportData.put("requestData", requestData);
@ -245,4 +279,14 @@ public class ExportServiceImpl implements ExportService {
public Result addExportArticle(ArticleDTO dto) {
return addExport(dto, "文章明细", "article:queue:export_queue", "beanConsumeArticle");
}
@Override
public Result addExportBean(BeanRechargeDTO dto) {
return addExport(dto, "金豆明细", "bean:queue:export_queue", "beanRechargeInfo");
}
@Override
public Result addExportOnline(OnlineDTO dto) {
return addExport(dto, "在线明细", "online:queue:export_queue", "beanRechargeInfo");
}
}

2
src/main/java/com/example/demo/Util/BaseDES2.java

@ -91,7 +91,7 @@ public class BaseDES2 {
public static void main(String args[]) {
try {
BaseDES2 d = new BaseDES2();
String encryptedText = d.encrypt("30003761");
String encryptedText = d.encrypt("90035176");
System.out.println("加密结果:" + encryptedText);
} catch (Exception e) {
e.printStackTrace();

5
src/main/java/com/example/demo/config/AppConfig.java

@ -2,6 +2,7 @@ package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
@Configuration
@ -9,6 +10,8 @@ public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
return restTemplate;
}
}

2
src/main/java/com/example/demo/config/Mysql4DataSourceConfig.java

@ -36,7 +36,7 @@ public class Mysql4DataSourceConfig {
@Qualifier("globalConfiguration4") org.apache.ibatis.session.Configuration globalConfiguration4) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:payMapper/*.xml"));
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:paymapper/*.xml"));
sessionFactory.setConfiguration(globalConfiguration4);
return sessionFactory.getObject();
}

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

@ -1,6 +1,8 @@
package com.example.demo.controller.bean;
import com.example.demo.domain.vo.bean.BeanConsume;
import com.example.demo.domain.vo.bean.BeanConsumeGold;
import com.example.demo.domain.vo.bean.BeanRecharge;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.bean.BeanConsumeService;
@ -45,6 +47,16 @@ public class BeanConsumeController {
return Result.success(deptList);
}
//减少金豆
@PostMapping("/reduce")
public Result reduce(@RequestBody BeanConsume consume) {
try {
return beanConsumeService.reduce(consume);
} catch (Exception e) {
return Result.error("减少失败");
}
}
//筛选查询直播消费记录
@PostMapping("/selectLiveBy")
public Result selectLiveBy(@RequestBody Page page){

15
src/main/java/com/example/demo/controller/bean/BeanRechargeController.java

@ -1,7 +1,8 @@
package com.example.demo.controller.bean;
import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
import com.example.demo.domain.vo.bean.BeanRecharge;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.bean.BeanSystemRechargeInfo;
import com.example.demo.domain.vo.bean.GoldBean;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
@ -53,7 +54,7 @@ public class BeanRechargeController {
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
} else {
return Result.success(beanRechargeService.selectBySystem(page.getPageNum(), page.getPageSize(), page.getBeanRechargeInfo()));
return Result.success(beanRechargeService.selectBySystem(page.getPageNum(), page.getPageSize(), page.getBeanSystemRechargeInfo()));
}
} catch (Exception e) {
e.printStackTrace();
@ -64,9 +65,9 @@ public class BeanRechargeController {
//系统金豆统计
@PostMapping("/statsSystemBean")
public Result statsSystemBean(@RequestBody BeanRechargeInfo beanRechargeInfo) {
public Result statsSystemBean(@RequestBody BeanSystemRechargeInfo beanSystemRechargeInfo) {
try {
GoldBean goldBean = beanRechargeService.statsSystemBean(beanRechargeInfo);
GoldBean goldBean = beanRechargeService.statsSystemBean(beanSystemRechargeInfo);
return Result.success(goldBean);
} catch (Exception e) {
return Result.error("请检查数据的格式");
@ -90,7 +91,7 @@ public class BeanRechargeController {
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
} else {
return Result.success(beanRechargeService.selectByOnline(page.getPageNum(), page.getPageSize(), page.getBeanRechargeInfo()));
return Result.success(beanRechargeService.selectByOnline(page.getPageNum(), page.getPageSize(), page.getBeanOnlineRechargeInfo()));
}
} catch (Exception e) {
e.printStackTrace();
@ -101,9 +102,9 @@ public class BeanRechargeController {
//线上金豆统计
@PostMapping("/statsOnlineBean")
public Result statsOnlineBean(@RequestBody BeanRechargeInfo beanRechargeInfo) {
public Result statsOnlineBean(@RequestBody BeanOnlineRechargeInfo beanOnlineRechargeInfo) {
try {
GoldBean goldBean = beanRechargeService.statsOnlineBean(beanRechargeInfo);
GoldBean goldBean = beanRechargeService.statsOnlineBean(beanOnlineRechargeInfo);
return Result.success(goldBean);
} catch (Exception e) {
return Result.error("请检查数据的格式");

34
src/main/java/com/example/demo/controller/coin/ExportController.java

@ -149,4 +149,38 @@ public class ExportController {
redisLockUtil.unlock(lockKey, requestId);
}
}
@PostMapping("/exportBean")
public Result export(@Valid @RequestBody BeanRechargeDTO dto){
String lockKey = "export:lock:" + dto.getToken();
String requestId = UUID.randomUUID().toString();
long expireTime = 5000;
try {
// 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
throw new BusinessException("操作太频繁,请稍后重试");
}
// 执行业务逻辑
return exportService.addExportBean(dto);
} finally {
// 释放锁
redisLockUtil.unlock(lockKey, requestId);
}
}
@PostMapping("/exportol")
public Result exportol(@Valid @RequestBody OnlineDTO dto) throws Exception {
String lockKey = "export:lock:" + dto.getToken();
String requestId = UUID.randomUUID().toString();
long expireTime = 5000;
try {
// 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
throw new BusinessException("操作太频繁,请稍后重试");
}
// 执行业务逻辑
return exportService.addExportOnline(dto);
} finally {
// 释放锁
redisLockUtil.unlock(lockKey, requestId);
}
}
}

28
src/main/java/com/example/demo/controller/coin/GoldDetailController.java

@ -11,6 +11,7 @@ import com.example.demo.domain.vo.coin.GoldDetail;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.GoldDetailService;
import com.example.demo.service.coin.MarketService;
import com.example.demo.serviceImpl.coin.AiEmotionServiceImpl;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
@ -42,13 +43,16 @@ import java.util.UUID;
@Slf4j
@CrossOrigin
public class GoldDetailController {
private final GoldDetailService goldDetailService;
@Autowired
private GoldDetailService goldDetailService;
@Autowired
private RedisLockUtil redisLockUtil;
@Autowired
private AiEmotionServiceImpl aiEmotionServiceImpl;
@Autowired
MarketService marketService;
@PostMapping("/getGoldDetail")
public Result getGoldDetail(@RequestBody Page page) throws Exception {
@ -65,8 +69,9 @@ public class GoldDetailController {
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));;
if(!markets.contains("1")) {
page.getGoldDetail().setMarkets(markets);
if(!markets.contains("总部")&&!markets.contains("研发部")) {
page.getGoldDetail().setMarkets(marketService.getMarketIds(markets));
}
}
return Result.success(goldDetailService.getGoldDetail(page.getPageNum(), page.getPageSize(), page.getGoldDetail()));
@ -82,9 +87,10 @@ public class GoldDetailController {
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
if(!markets.contains("1")) {
page.getGoldDetail().setMarkets(markets);
}
if(!markets.contains("总部")&&!markets.contains("研发部")) {
page.getGoldDetail().setMarkets(marketService.getMarketIds(markets));
}
}
return Result.success(goldDetailService.sumGold(pageNum,pageSize,goldDetail));
}
@ -96,8 +102,9 @@ public class GoldDetailController {
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
if(!markets.contains("1")) {
user.setMarkets(markets);
if(!markets.contains("总部")&&!markets.contains("研发部")) {
user.setMarkets(marketService.getMarketIds(markets));
}
}
return Result.success(goldDetailService.GoldTotal(user));
@ -117,8 +124,9 @@ public class GoldDetailController {
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
if(!markets.contains("1")) {
page.getUser().setMarkets(markets);
if(!markets.contains("总部")&&!markets.contains("研发部")) {
page.getUser().setMarkets(marketService.getMarketIds(markets));
}
}
return Result.success(goldDetailService.getGold(page.getPageNum(), page.getPageSize(), page.getUser()));

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);

2
src/main/java/com/example/demo/domain/DTO/ArticleDTO.java

@ -23,7 +23,7 @@ public class ArticleDTO {
private Integer sort = 0;
private String field = "";
private Integer account;
private Integer type = 7; //类型
private Integer type = 8; //类型
private Integer state = 0; //状态
private String text = ""; //关键词搜索
private Integer dataNum = 0;

37
src/main/java/com/example/demo/domain/DTO/BeanRechargeDTO.java

@ -0,0 +1,37 @@
package com.example.demo.domain.DTO;
import com.example.demo.domain.vo.bean.BeanConsumeArticle;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: GOLD
* @ClassName BeanRechargeDTO
* @description:
* @author: huangqizhen
* @create: 202508-03 09:26
* @Version 1.0
**/
@Data
@NoArgsConstructor
public class BeanRechargeDTO {
private String token;
private String url = "";
private String fileName = "";
private Integer sort = 0;
private String field = "";
private Integer account;
private Integer type = 9; //类型
private Integer state = 0; //状态
private String text = ""; //关键词搜索
private Integer dataNum = 0;
private String deptid = "";
@NotNull(message = "page不能为空")
private Integer page = 1;
@NotNull(message = "pageSize不能为空")
private Integer pageSize = 20;
private BeanRechargeInfo beanRechargeInfo;
}

36
src/main/java/com/example/demo/domain/DTO/OnlineDTO.java

@ -0,0 +1,36 @@
package com.example.demo.domain.DTO;
import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: GOLD
* @ClassName OnlineDTO
* @description:
* @author: huangqizhen
* @create: 202508-03 11:51
* @Version 1.0
**/
@Data
@NoArgsConstructor
public class OnlineDTO {
private String token;
private String url = "";
private String fileName = "";
private Integer sort = 0;
private String field = "";
private Integer account;
private Integer type = 10; //类型
private Integer state = 0; //状态
private String text = ""; //关键词搜索
private Integer dataNum = 0;
private String deptid = "";
@NotNull(message = "page不能为空")
private Integer page = 1;
@NotNull(message = "pageSize不能为空")
private Integer pageSize = 20;
private BeanOnlineRechargeInfo beanRechargeInfo;
}

26
src/main/java/com/example/demo/domain/vo/bean/BeanConsume.java

@ -0,0 +1,26 @@
package com.example.demo.domain.vo.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: gold-java
* @ClassName BeanConsume
* @description:
* @author: Ethan
* @create: 202508-02 11:32
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BeanConsume {
private Integer id;//id
private String jwcode; // 精网号
private Integer freeBean; // 免费豆
private Integer permanentBean; // 永久豆
private String remark; //备注
private Integer money; // 金额
private String adminName; // 管理员名称
}

58
src/main/java/com/example/demo/domain/vo/bean/BeanOnlineRechargeInfo.java

@ -0,0 +1,58 @@
package com.example.demo.domain.vo.bean;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
/**
* @program: gold-java
* @ClassName BeanRecharge
* @description:
* @author: Double
* @create: 202507-30 15:11
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BeanOnlineRechargeInfo {
private Long id;//id
@ExcelProperty("精网号")
private Integer jwcode; // 精网号
@ExcelProperty("客户姓名")
private String name; // 姓名
@ExcelProperty("所属地区")
private String market; // 所属地区
@ExcelProperty("金额")
private Double money; // 金额
@ExcelProperty("数量")
private Integer num; // 数量
@ExcelProperty("订单号")
private String orderNo; // 订单号
@ExcelProperty("充值平台 PC:1 手机:2")
private String platform; // 充值平台
@ExcelProperty("充值时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date rechargeTime; // 充值时间
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date startTime; // 开始时间
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date endTime; // 结束时间
@ExcelIgnore
private List<String> markets; // 地区列表
@ExcelIgnore
private String sortField; //排序字段
@ExcelIgnore
private String sortOrder; //排序顺序
}

10
src/main/java/com/example/demo/domain/vo/bean/BeanRechargeInfo.java

@ -1,5 +1,6 @@
package com.example.demo.domain.vo.bean;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
@ -41,18 +42,21 @@ public class BeanRechargeInfo {
private Integer num; // 数量
@ExcelProperty("订单号")
private String orderNo; // 订单号
@ExcelProperty("备注")
private String remark; //备注
@ExcelProperty("充值平台")
@ExcelProperty("充值平台 PC:1 手机:2")
private String platform; // 充值平台
@ExcelProperty("充值时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date rechargeTime; // 充值时间
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date startTime; // 开始时间
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date endTime; // 结束时间
@ExcelIgnore
private List<String> markets; // 地区列表
@ExcelIgnore
private String sortField; //排序字段
@ExcelIgnore
private String sortOrder; //排序顺序
}

58
src/main/java/com/example/demo/domain/vo/bean/BeanSystemRechargeInfo.java

@ -0,0 +1,58 @@
package com.example.demo.domain.vo.bean;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
/**
* @program: gold-java
* @ClassName BeanRecharge
* @description:
* @author: Double
* @create: 202507-30 15:11
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BeanSystemRechargeInfo {
private Long id;//id
@ExcelProperty("精网号")
private Integer jwcode; // 精网号
@ExcelProperty("客户姓名")
private String name; // 姓名
@ExcelProperty("所属地区")
private String market; // 所属地区
@ExcelProperty("免费金豆")
private Integer freeBean; // 免费豆
@ExcelProperty("永久金豆")
private Integer permanentBean; // 永久豆
@ExcelProperty("金额")
private Double money; // 金额
@ExcelProperty("备注")
private String remark; //备注
@ExcelProperty("充值时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date rechargeTime; // 充值时间
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date startTime; // 开始时间
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date endTime; // 结束时间
@ExcelIgnore
private List<String> markets; // 地区列表
@ExcelIgnore
private String sortField; //排序字段
@ExcelIgnore
private String sortOrder; //排序顺序
}

3
src/main/java/com/example/demo/domain/vo/coin/Page.java

@ -34,7 +34,8 @@ public class Page {
private BeanConsumeLive beanConsumeLive; //直播金豆消费
private BeanConsumeFan beanConsumeFan; //铁粉金豆消费
private BeanConsumeArticle beanConsumeArticle; //文章金豆消费
private BeanRechargeInfo beanRechargeInfo; //金豆充值信息
private BeanSystemRechargeInfo beanSystemRechargeInfo; //金豆充值信息
private BeanOnlineRechargeInfo beanOnlineRechargeInfo; //金豆充值信息
private BeanConsumeGold beanConsumeGold; //金豆消费合计数
private BeanUser beanUser; //客户金豆余额明细
private BeanUserCard beanUserCard; //客户金豆卡片

5
src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper2.java

@ -1,7 +1,8 @@
package com.example.demo.mapper.bean;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.bean.BeanSystemRechargeInfo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -18,7 +19,7 @@ import java.util.List;
@Mapper
public interface BeanRechargeMapper2 {
List<BeanRechargeInfo> selectBySystem(BeanRechargeInfo beanRechargeInfo);
List<BeanSystemRechargeInfo> selectBySystem(BeanSystemRechargeInfo beanSystemRechargeInfo);
List<String> systemMarket();
}

2
src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java

@ -23,7 +23,7 @@ public interface BeanUserMapper {
List<BeanUser> selectUserBy(@Param("beanUser") BeanUser beanUser);
//查询用户卡片
BeanUserCard userCard(@Param("jwcode")String jwcode, @Param("markets")List<String> markets);
BeanUserCard userCard(@Param("jwcode")String jwcode);
//查询客户金豆余额合计
BeanUserCard SumUserBy(@Param("beanUser")BeanUser beanUser);
//查询客户分部

3
src/main/java/com/example/demo/mapper/coin/MarketMapper.java

@ -6,4 +6,7 @@ import java.util.List;
public interface MarketMapper {
List<Market> getMarket();
//获取市场id
List<String> getMarketIds(List<String> list);
}

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);

6
src/main/java/com/example/demo/mapper/pay/BeanRechargeMapper3.java

@ -1,7 +1,7 @@
package com.example.demo.mapper.pay;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -18,7 +18,7 @@ import java.util.List;
@Mapper
public interface BeanRechargeMapper3 {
List<BeanRechargeInfo> selectByOnline(BeanRechargeInfo beanRechargeInfo);
List<BeanOnlineRechargeInfo> selectByOnline(BeanOnlineRechargeInfo beanOnlineRechargeInfo);
List<String> systemMarket();
List<String> onlineMarket();
}

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

@ -3,6 +3,7 @@ package com.example.demo.service.bean;
import com.example.demo.domain.vo.bean.*;
import com.example.demo.domain.vo.coin.Gold;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import java.util.List;
@ -18,6 +19,10 @@ import java.util.List;
public interface BeanConsumeService {
//获取消费用户的分部
List<String> getDept();
//获取直播客户地区
List<String> getLiveDept();
//减少金豆
Result reduce(BeanConsume consume);
//筛选查询直播消费
Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive);
//筛选查询铁粉消费
@ -31,6 +36,6 @@ public interface BeanConsumeService {
//获取直播频道
List<String> getLiveChannel();
//获取直播客户地区
List<String> getLiveDept();
}

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

@ -1,7 +1,8 @@
package com.example.demo.service.bean;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
import com.example.demo.domain.vo.bean.BeanSystemRechargeInfo;
import com.example.demo.domain.vo.bean.GoldBean;
import com.example.demo.domain.vo.coin.RefundUser;
import com.example.demo.domain.vo.coin.Result;
@ -25,16 +26,16 @@ public interface BeanRechargeService {
Result add(BeanRecharge recharge);
//系统充值
PageInfo<BeanRechargeInfo> selectBySystem(Integer pageNum, Integer pageSize, BeanRechargeInfo beanRechargeInfo);
PageInfo<BeanSystemRechargeInfo> selectBySystem(Integer pageNum, Integer pageSize, BeanSystemRechargeInfo beanRechargeInfo);
//系统金豆统计
GoldBean statsSystemBean(BeanRechargeInfo beanRechargeInfo);
GoldBean statsSystemBean(BeanSystemRechargeInfo beanRechargeInfo);
//线上充值
PageInfo<BeanRechargeInfo> selectByOnline(Integer pageNum, Integer pageSize, BeanRechargeInfo beanRechargeInfo);
PageInfo<BeanOnlineRechargeInfo> selectByOnline(Integer pageNum, Integer pageSize, BeanOnlineRechargeInfo beanRechargeInfo);
//线上金豆统计
GoldBean statsOnlineBean(BeanRechargeInfo beanRechargeInfo);
GoldBean statsOnlineBean(BeanOnlineRechargeInfo beanRechargeInfo);
//获取系统充值地区
List<String> systemMarket();

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

@ -27,7 +27,11 @@ public interface ExportExcelService {
Exception FanExcel(String message) throws Exception;
Exception ArticleExcel(String message) throws Exception;
List<Export> getExcel(Export export);
Exception BeanExcel(String message) throws Exception;
@Transactional
Exception exportExcelGeneric(String message, String exportType, Function<Page, Result> dataFetcher) throws Exception;
Exception OnlineExcel(String message) throws Exception;
}

3
src/main/java/com/example/demo/service/coin/MarketService.java

@ -14,4 +14,7 @@ import java.util.List;
**/
public interface MarketService {
List<Market> selectMarket();
//获取市场id
List<String> getMarketIds(List<String> list);
}

35
src/main/java/com/example/demo/service/listen/BeanListener.java

@ -0,0 +1,35 @@
package com.example.demo.service.listen;
import com.example.demo.Export.ExportService;
import com.example.demo.Util.RedisUtil;
import com.example.demo.service.coin.ExportExcelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @program: GOLD
* @ClassName BeanListener
* @description:
* @author: huangqizhen
* @create: 202508-03 11:14
* @Version 1.0
**/
@Component
public class BeanListener extends BaseMessageListener<String>{
@Autowired
private ExportExcelService exportExcelService;
protected BeanListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil,"bean:queue:export_queue");
}
@Override
protected void handleMessage(String message) {
validateMessage( message);
try {
Thread.sleep(5000);
exportExcelService.BeanExcel(message);
} catch (Exception e) {
handleException(e, message);
}
}
}

34
src/main/java/com/example/demo/service/listen/OnLineListener.java

@ -0,0 +1,34 @@
package com.example.demo.service.listen;
import com.example.demo.Util.RedisUtil;
import com.example.demo.service.coin.ExportExcelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @program: GOLD
* @ClassName OnLineListener
* @description:
* @author: huangqizhen
* @create: 202508-03 11:58
* @Version 1.0
**/
@Component
public class OnLineListener extends BaseMessageListener<String> {
@Autowired
public ExportExcelService exportExcelService;
protected OnLineListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil, "online:queue:export_queue");
}
@Override
protected void handleMessage(String message) {
validateMessage( message);
try {
Thread.sleep(5000);
exportExcelService.OnlineExcel(message);
} catch (Exception e) {
handleException(e, message);
}
}
}

76
src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java

@ -1,5 +1,6 @@
package com.example.demo.serviceImpl.bean;
import com.example.demo.Util.BaseDES2;
import com.example.demo.domain.vo.bean.BeanAuditInfo;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.bean.GoldBean;
@ -11,13 +12,22 @@ import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
@ -41,7 +51,7 @@ public class BeanAuditServiceImpl implements BeanAuditService {
// 2. 构建接口URL及参数
@Value("${file.upload.url}")
@Value("${bean.url}")
String apiUrl;
//查找审核信息
@ -57,36 +67,50 @@ public class BeanAuditServiceImpl implements BeanAuditService {
public Result updateStatus1(BeanAuditInfo info) {
BeanAuditInfo beanAuditInfo = beanAuditMapper.selectById(info.getId());
String jwcode = beanAuditInfo.getJwcode().toString();
String op = "recharge"; // 操作类型根据实际业务定义例如"recharge"表示充值
// String jwcode = "2e35cadd48a15cc4cd834d35e38faa71";
try {
BaseDES2 d = new BaseDES2();
jwcode = d.encrypt(jwcode);
} catch (Exception e) {
return Result.error("加密失败");
}
String content = beanAuditInfo.getRemark(); // 备注作为content参数
String orderNo = UUID.randomUUID().toString().replace("-", ""); // 生成唯一订单号去除横线
UriComponentsBuilder urlBuilder1 = UriComponentsBuilder.fromHttpUrl(apiUrl)
.queryParam("jwcode", jwcode)
.queryParam("op", op)
.queryParam("gold", beanAuditInfo.getFreeBean())
.queryParam("content", content);
UriComponentsBuilder urlBuilder2 = UriComponentsBuilder.fromHttpUrl(apiUrl)
.queryParam("jwcode", jwcode)
.queryParam("op", op)
.queryParam("gold", beanAuditInfo.getPermanentBean())
.queryParam("content", content)
.queryParam("order_no", orderNo);
// 3. 发送GET请求
ResponseEntity<String> response1 = restTemplate.getForEntity(urlBuilder1.toUriString(), String.class);
// 4. 处理响应结果
if (!response1.getStatusCode().is2xxSuccessful()) {
return Result.error("免费远程接口调用失败,状态码:" + response1.getStatusCodeValue());
}
// 3. 发送GET请求
ResponseEntity<String> response2 = restTemplate.getForEntity(urlBuilder2.toUriString(), String.class);
// 1. 创建请求参数对象使用Map或自定义实体类
Map<String, String> params = new HashMap<>();
params.put("jwcode", jwcode);
params.put("gold_buy", beanAuditInfo.getPermanentBean().toString());
params.put("gold_free", beanAuditInfo.getFreeBean().toString());
params.put("content", content);
params.put("order_no", orderNo);
// 2. 构建请求头指定Content-Type为JSON
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON); // 关键设置为JSON格式
// 4. 处理响应结果
if (!response2.getStatusCode().is2xxSuccessful()) {
return Result.error("付费远程接口调用失败,状态码:" + response2.getStatusCodeValue());
// 3. 构建请求实体参数+头信息
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(params, headers);
try {
// 4. 发送POST请求
ResponseEntity<String> response = restTemplate.postForEntity(
apiUrl,
requestEntity,
String.class
);
System.out.println("请求参数:" + params);
System.out.println("响应状态码:" + response.getStatusCodeValue());
System.out.println("响应内容:" + response.getBody());
if (!response.getStatusCode().is2xxSuccessful()) {
return Result.error("远程接口接口调用失败,状态码:" + response.getStatusCodeValue() + ",响应:" + response.getBody());
}
} catch (RestClientException e) {
e.printStackTrace();
return Result.error("请求发送失败:" + e.getMessage());
}
beanAuditMapper.updateStatus1(info);
return Result.success();

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

@ -1,19 +1,21 @@
package com.example.demo.serviceImpl.bean;
import com.example.demo.domain.vo.bean.*;
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.RechargeUser;
import com.example.demo.domain.vo.coin.*;
import com.example.demo.mapper.bean.BeanConsumeMapper;
import com.example.demo.mapper.coin.UserMapper;
import com.example.demo.mapper.live.LiveMapper;
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.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.List;
import java.util.UUID;
/**
* @program: gold-java
@ -29,6 +31,11 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
private BeanConsumeMapper beanConsumeMapper;
@Autowired
private LiveMapper liveMapper;
@Autowired
private UserMapper userMapper;
@Autowired
private RestTemplate restTemplate;
//获取消费用户分部
@Override
@ -36,6 +43,72 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
List<String> deptList = beanConsumeMapper.getDept();
return deptList;
}
//获取直播消费客户分部
@Override
public List<String> getLiveDept() {
List<String> liveDeptList = liveMapper.getDept();
return liveDeptList;
}
//减少金豆
@Override
public Result reduce(BeanConsume consume) {
try {
// 验证精网号是否有效
if (consume.getJwcode() == null || consume.getJwcode().isEmpty()) {
return Result.error("精网号不能为空");
}
// 验证免费豆和永久豆是否为非负数
if (consume.getFreeBean() < 0 || consume.getPermanentBean() < 0) {
return Result.error("免费豆和永久豆不能为负数");
}
// 验证免费豆和永久豆是否为非负数
if (consume.getFreeBean() > 999999 || consume.getPermanentBean() > 999999) {
return Result.error("免费豆和永久豆不能超过999999");
}
// 验证免费豆和永久豆是否均为0
if (consume.getFreeBean() == 0 && consume.getPermanentBean() == 0) {
return Result.error("免费豆和永久豆不能同时为0");
}
// 验证备注是否为空
if (consume.getRemark() == null || consume.getRemark().toString().isEmpty()) {
return Result.error("备注不能为空");
}
if(consume.getAdminName() == null || consume.getAdminName().toString().isEmpty()){
return Result.error("管理员名称不能为空");
}
GoldUser goldUser = userMapper.selectUser(consume.getJwcode().toString());
if(goldUser==null){
return Result.error("用户不存在");
}
// String jwcode = consume.getJwcode();
String jwcode = "2e35cadd48a15cc4cd834d35e38faa71";
String op = "cost"; // 操作类型根据实际业务定义例如"recharge"表示充值
String content = consume.getRemark(); // 备注作为content参数
String orderNo = UUID.randomUUID().toString().replace("-", ""); // 生成唯一订单号去除横线
// 2. 构建接口URL及参数
String apiUrl = "http://39.101.133.168:8828/mock/61/hljw/api/user/gold";
UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(apiUrl)
.queryParam("jwcode", jwcode)
.queryParam("op", op)
.queryParam("gold", consume.getPermanentBean())
.queryParam("content", content)
.queryParam("order_no", orderNo);
// 3. 发送GET请求
ResponseEntity<String> response = restTemplate.getForEntity(urlBuilder.toUriString(), String.class);
// 4. 处理响应结果
if (!response.getStatusCode().is2xxSuccessful()) {
return Result.error("远程接口调用失败,状态码:" + response.getStatusCodeValue());
}
return Result.success("减少成功");
} catch (Exception e) {
return Result.error("系统异常:" + e.getMessage());
}
}
//筛选查询直播消费
@Override
public Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive) {
@ -87,9 +160,5 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
return liveMapper.getLiveChannel();
}
@Override
public List<String> getLiveDept() {
List<String> liveDeptList = liveMapper.getDept();
return liveDeptList;
}
}

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

@ -1,7 +1,8 @@
package com.example.demo.serviceImpl.bean;
import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
import com.example.demo.domain.vo.bean.BeanRecharge;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.bean.BeanSystemRechargeInfo;
import com.example.demo.domain.vo.bean.GoldBean;
import com.example.demo.domain.vo.coin.Gold;
import com.example.demo.domain.vo.coin.GoldUser;
@ -115,17 +116,17 @@ public class BeanRechargeServiceImpl implements BeanRechargeService {
//系统充值明细
@Override
public PageInfo<BeanRechargeInfo> selectBySystem(Integer pageNum, Integer pageSize, BeanRechargeInfo beanRechargeInfo){
public PageInfo<BeanSystemRechargeInfo> selectBySystem(Integer pageNum, Integer pageSize, BeanSystemRechargeInfo beanSystemRechargeInfo){
PageHelper.startPage(pageNum, pageSize);
List<BeanRechargeInfo> beanRechargeInfos = beanRechargeMapper2.selectBySystem(beanRechargeInfo);
return new PageInfo<>(beanRechargeInfos);
List<BeanSystemRechargeInfo> beanSystemRechargeInfos = beanRechargeMapper2.selectBySystem(beanSystemRechargeInfo);
return new PageInfo<>(beanSystemRechargeInfos);
}
//统计系统金豆记录
@Override
public GoldBean statsSystemBean(BeanRechargeInfo beanRechargeInfo) {
public GoldBean statsSystemBean(BeanSystemRechargeInfo beanSystemRechargeInfo) {
GoldBean gold = new GoldBean();
List<BeanRechargeInfo> beanRechargeInfos = beanRechargeMapper2.selectBySystem(beanRechargeInfo);
List<BeanSystemRechargeInfo> beanSystemRechargeInfos = beanRechargeMapper2.selectBySystem(beanSystemRechargeInfo);
// 初始化累加器
int permanentGoldSum = 0;
@ -133,7 +134,7 @@ public class BeanRechargeServiceImpl implements BeanRechargeService {
Double moneySum = 0.0;
// 遍历充值记录并累加金币
for (BeanRechargeInfo info : beanRechargeInfos) {
for (BeanSystemRechargeInfo info : beanSystemRechargeInfos) {
// 累加永久金币
if (info.getPermanentBean() != null) {
permanentGoldSum += info.getPermanentBean();
@ -169,24 +170,24 @@ public class BeanRechargeServiceImpl implements BeanRechargeService {
//线上充值明细
@Override
public PageInfo<BeanRechargeInfo> selectByOnline(Integer pageNum, Integer pageSize, BeanRechargeInfo beanRechargeInfo){
public PageInfo<BeanOnlineRechargeInfo> selectByOnline(Integer pageNum, Integer pageSize, BeanOnlineRechargeInfo beanOnlineRechargeInfo){
PageHelper.startPage(pageNum, pageSize);
List<BeanRechargeInfo> beanRechargeInfos = beanRechargeMapper3.selectByOnline(beanRechargeInfo);
return new PageInfo<>(beanRechargeInfos);
List<BeanOnlineRechargeInfo> beanOnlineRechargeInfos = beanRechargeMapper3.selectByOnline(beanOnlineRechargeInfo);
return new PageInfo<>(beanOnlineRechargeInfos);
}
//统计线上金豆记录
@Override
public GoldBean statsOnlineBean(BeanRechargeInfo beanRechargeInfo) {
public GoldBean statsOnlineBean(BeanOnlineRechargeInfo beanOnlineRechargeInfo) {
GoldBean gold = new GoldBean();
List<BeanRechargeInfo> beanRechargeInfos = beanRechargeMapper3.selectByOnline(beanRechargeInfo);
List<BeanOnlineRechargeInfo> beanOnlineRechargeInfos = beanRechargeMapper3.selectByOnline(beanOnlineRechargeInfo);
// 初始化累加器
int countSum = 0;
Double moneySum = 0.0;
// 遍历充值记录并累加金币
for (BeanRechargeInfo info : beanRechargeInfos) {
for (BeanOnlineRechargeInfo info : beanOnlineRechargeInfos) {
// 累加数量
if (info.getNum() != null) {
countSum += info.getNum();
@ -207,7 +208,7 @@ public class BeanRechargeServiceImpl implements BeanRechargeService {
@Override
public List<String> onlineMarket() {
List<String> list = beanRechargeMapper3.systemMarket();
List<String> list = beanRechargeMapper3.onlineMarket();
// 使用 Java 8 Stream API 过滤 null 和空字符串
List<String> filteredList = list.stream()
.filter(Objects::nonNull) // 过滤掉 null

14
src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java

@ -40,17 +40,9 @@ public class BeanUserServiceImpl implements BeanUserService {
public Result userCard(String jwcode) {
//解token权限
try {
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(","));
BeanUserCard user = beanUserMapper.userCard(jwcode,list);
return Result.success(user);
}
else{
return Result.error("登录用户为空");
}
BeanUserCard user = beanUserMapper.userCard(jwcode);
return Result.success(user);
} catch (Exception e) {
e.printStackTrace();
return Result.error("用户查找不到");

14
src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java

@ -8,6 +8,7 @@ import com.example.demo.domain.vo.coin.GoldUser;
import com.example.demo.domain.vo.coin.RechargeAudit;
import com.example.demo.domain.vo.coin.RefundAudit;
import com.example.demo.mapper.coin.AuditMapper;
import com.example.demo.mapper.coin.MarketMapper;
import com.example.demo.mapper.coin.UserMapper;
import com.example.demo.service.coin.AdminService;
import com.example.demo.service.coin.AuditService;
@ -40,6 +41,8 @@ public class AuditServiceImpl implements AuditService {
private AdminService adminService;
@Autowired
private GeneralService generalService;
@Autowired
private MarketMapper marketMapper;
/*
审核订单并修改用户余额等
*/
@ -138,6 +141,8 @@ public class AuditServiceImpl implements AuditService {
@Override
public PageInfo<RechargeAudit> selectRechargeBy(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit) {
List<String> markets = marketMapper.getMarketIds(rechargeAudit.getMarkets());
rechargeAudit.setMarkets(markets);
PageHelper.startPage(pageNum, pageSize);
List<RechargeAudit> rechargeAudits = auditMapper.selectRechargeBy(pageNum, pageSize, rechargeAudit);
// rechargeAudit.setFreeGold(rechargeAudit.getFreeJune()+rechargeAudit.getFreeDecember());
@ -150,7 +155,8 @@ public class AuditServiceImpl implements AuditService {
public PageInfo<RefundAudit> selectRefundBy(Integer pageNum, Integer pageSize, RefundAudit refundAudit) {
List<String> markets = marketMapper.getMarketIds(refundAudit.getMarkets());
refundAudit.setMarkets(markets);
PageHelper.startPage(pageNum, pageSize);
List<RefundAudit> refundAudits = auditMapper.selectRefundBy(pageNum, pageSize, refundAudit);
@ -165,6 +171,9 @@ public class AuditServiceImpl implements AuditService {
Gold gold = new Gold();
//获取充值审核订单列表
List<String> markets = marketMapper.getMarketIds(rechargeAudit.getMarkets());
rechargeAudit.setMarkets(markets);
List<RechargeAudit> rechargeAudits = auditMapper.selectRechargeBy(1, 500000, rechargeAudit);
// 初始化累加器
int totalNum=0;
@ -198,6 +207,9 @@ public class AuditServiceImpl implements AuditService {
public Gold sumRefundGold(Integer pageNum, Integer pageSize, RefundAudit refundAudit) {
Gold gold = new Gold();
//获取充值审核订单列表
List<String> markets = marketMapper.getMarketIds(refundAudit.getMarkets());
refundAudit.setMarkets(markets);
List<RefundAudit> refundAudits = auditMapper.selectRefundBy(1, 500000, refundAudit);
// 初始化累加器
int totalNum=0;

13
src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java

@ -8,8 +8,10 @@ import com.example.demo.domain.vo.coin.Gold;
import com.example.demo.domain.vo.coin.GoldUser;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.mapper.coin.ConsumeMapper;
import com.example.demo.mapper.coin.MarketMapper;
import com.example.demo.mapper.coin.UserMapper;
import com.example.demo.service.coin.ConsumeService;
import com.example.demo.service.coin.MarketService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
@ -41,10 +43,15 @@ public class ConsumeServiceImpl implements ConsumeService {
@Autowired
private UserMapper userMapper;
@Autowired
private MarketMapper marketMapper;
//消耗明细
@Override
public PageInfo<ConsumeUser> selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser){
//获取市场id
List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets());
consumeUser.setMarkets(markets);
PageHelper.startPage(pageNum, pageSize);
List<ConsumeUser> consumeUsers = consumeMapper.selectAll(consumeUser);
return new PageInfo<>(consumeUsers);
@ -53,6 +60,9 @@ public class ConsumeServiceImpl implements ConsumeService {
//消耗金币统计
@Override
public Gold statsGold(ConsumeUser consumeUser) {
//获取市场id
List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets());
consumeUser.setMarkets(markets);
Gold gold = new Gold();
List<ConsumeUser> consumeUsers = consumeMapper.selectBy(consumeUser);
@ -88,6 +98,9 @@ public class ConsumeServiceImpl implements ConsumeService {
//消耗明细筛选
@Override
public PageInfo<ConsumeUser> selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) {
//获取市场id
List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets());
consumeUser.setMarkets(markets);
PageHelper.startPage(pageNum, pageSize);
List<ConsumeUser> consumeUsers = consumeMapper.selectBy(consumeUser);
return new PageInfo<>(consumeUsers);

35
src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

@ -7,6 +7,7 @@ import com.alibaba.excel.write.metadata.WriteSheet;
import com.example.demo.Util.ExcelUploadUtil;
import com.example.demo.Util.JWTUtil;
import com.example.demo.controller.bean.BeanConsumeController;
import com.example.demo.controller.bean.BeanRechargeController;
import com.example.demo.controller.coin.ConsumeController;
import com.example.demo.controller.coin.GoldDetailController;
import com.example.demo.controller.coin.RechargeController;
@ -15,9 +16,7 @@ import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.Export;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.export.Goldmingxi;
import com.example.demo.domain.vo.bean.BeanConsumeArticle;
import com.example.demo.domain.vo.bean.BeanConsumeFan;
import com.example.demo.domain.vo.bean.BeanConsumeLive;
import com.example.demo.domain.vo.bean.*;
import com.example.demo.domain.vo.coin.*;
@ -73,6 +72,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
@Autowired
private BeanConsumeController beanConsumeController;
@Autowired
private BeanRechargeController beanRechargeController;
@Autowired
private AuthenticationManager authenticationManager;
// 每页查询的数据量
private static final int PAGE_SIZE = 1000;
@ -172,6 +173,26 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
});
}
@Override
public Exception BeanExcel(String message) throws Exception {
return exportExcelGeneric(message, "beanUser", page -> {
try {
return beanRechargeController.selectBySystem(page);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
@Override
public Exception OnlineExcel(String message) throws Exception {
return exportExcelGeneric(message, "onlineUser", page -> {
try {
return beanRechargeController.selectByOnline(page);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
@Override
public List<Export> getExcel(Export export) {
@ -360,6 +381,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
return null;
}
private Class<?> getExportClass(String exportType) {
switch (exportType) {
case "goldDetail":
@ -378,6 +403,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
return BeanConsumeFan.class;
case "articleUser":
return BeanConsumeArticle.class;
case "beanUser":
return BeanSystemRechargeInfo.class;
case "onlineUser":
return BeanOnlineRechargeInfo.class;
default:
throw new IllegalArgumentException("不支持的导出类型: " + exportType);
}

4
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"); // 将总部添加到列表第一位
@ -181,7 +181,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=getAllRoleMarket();//总部有所有地区的权限
}
return list;

10
src/main/java/com/example/demo/serviceImpl/coin/MarketServiceImpl.java

@ -15,6 +15,7 @@ import java.util.stream.Collectors;
public class MarketServiceImpl implements MarketService {
@Autowired
private MarketMapper marketMapper;
@Override
public List<Market> selectMarket() {
List<Market> markets = marketMapper.getMarket();
@ -22,10 +23,11 @@ public class MarketServiceImpl implements MarketService {
// 2. 构建树形结构根节点parentId=1
return buildTree(markets, -1);
}
private List<Market> buildTree(List<Market> markets, Integer parentId) {
// 过滤出当前父节点的子菜单
List<Market> children = markets.stream()
.filter(menu -> Objects.equals(menu.getParentId(), parentId))
.filter(menu -> Objects.equals(menu.getParentId(), parentId))
.collect(Collectors.toList());
// 过滤出当前父节点的子菜单同时过滤掉id为9的权限
// List<MenuVo> children = allMenus.stream()
@ -39,4 +41,10 @@ public class MarketServiceImpl implements MarketService {
return children;
}
@Override
public List<String> getMarketIds(List<String> list) {
return marketMapper.getMarketIds(list);
}
}

4
src/main/java/com/example/demo/serviceImpl/coin/PermissionServiceImpl.java

@ -8,6 +8,7 @@ import com.example.demo.domain.vo.coin.Password;
import com.example.demo.domain.vo.coin.Permission;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.mapper.coin.AdminMapper;
import com.example.demo.mapper.coin.MarketMapper;
import com.example.demo.mapper.coin.PermissionMapper;
import com.example.demo.service.coin.PermissionService;
import com.github.pagehelper.PageHelper;
@ -37,6 +38,8 @@ public class PermissionServiceImpl implements PermissionService {
private PermissionMapper permissionMapper;
@Autowired
private AdminMapper adminMapper;
@Autowired
private MarketMapper marketMapper;
@Override
public List<String> getposition(String token) {
@ -50,6 +53,7 @@ public class PermissionServiceImpl implements PermissionService {
@Override
public PageInfo<Permission> getpermission(Integer pageNum, Integer pageSize, Permission permission) {
PageHelper.startPage(pageNum, pageSize);
List<Permission> list = permissionMapper.getPermission(permission);
for (Permission item : list) {

12
src/main/java/com/example/demo/serviceImpl/coin/RechargeServiceImpl.java

@ -1,8 +1,10 @@
package com.example.demo.serviceImpl.coin;
import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.mapper.coin.MarketMapper;
import com.example.demo.mapper.coin.RechargeMapper;
import com.example.demo.mapper.coin.UserMapper;
import com.example.demo.service.coin.MarketService;
import com.example.demo.service.coin.RechargeService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@ -34,11 +36,17 @@ public class RechargeServiceImpl implements RechargeService {
@Autowired
private UserMapper userMapper;
@Autowired
private MarketMapper marketMapper;
//查询所有充值
@Override
public PageInfo<RechargeUser> selectAll(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) throws Exception{
//获取市场id
List<String> markets = marketMapper.getMarketIds(rechargeUser.getMarkets());
rechargeUser.setMarkets(markets);
PageHelper.startPage(pageNum, pageSize);
List<RechargeUser> rechargeUsers = rechargeMapper.selectAll(rechargeUser);
return new PageInfo<>(rechargeUsers);
@ -47,6 +55,8 @@ public class RechargeServiceImpl implements RechargeService {
//查询筛选充值
@Override
public PageInfo<RechargeUser> selectBy(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) throws Exception{
List<String> markets = marketMapper.getMarketIds(rechargeUser.getMarkets());
rechargeUser.setMarkets(markets);
PageHelper.startPage(pageNum, pageSize);
List<RechargeUser> rechargeUsers = rechargeMapper.selectBy(rechargeUser);
return new PageInfo<>(rechargeUsers);
@ -55,6 +65,8 @@ public class RechargeServiceImpl implements RechargeService {
//统计金币记录
@Override
public Gold statsGold(RechargeUser rechargeUser) {
List<String> markets = marketMapper.getMarketIds(rechargeUser.getMarkets());
rechargeUser.setMarkets(markets);
Gold gold = new Gold();
List<RechargeUser> rechargeUsers = rechargeMapper.selectBy(rechargeUser);

11
src/main/java/com/example/demo/serviceImpl/coin/RefundServiceImpl.java

@ -2,8 +2,10 @@ package com.example.demo.serviceImpl.coin;
import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.mapper.coin.ConsumeMapper;
import com.example.demo.mapper.coin.MarketMapper;
import com.example.demo.mapper.coin.RefundMapper;
import com.example.demo.mapper.coin.UserMapper;
import com.example.demo.service.coin.MarketService;
import com.example.demo.service.coin.RefundService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@ -40,9 +42,14 @@ public class RefundServiceImpl implements RefundService {
private UserMapper userMapper;
@Autowired
private MarketMapper marketMapper;
//查找全部退款
@Override
public PageInfo<RefundUser> selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception{
List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets());
refundUser.setMarkets(markets);
PageHelper.startPage(pageNum, pageSize);
List<RefundUser> refundUsers = refundMapper.selectAll(refundUser);
return new PageInfo<>(refundUsers);
@ -51,6 +58,8 @@ public class RefundServiceImpl implements RefundService {
//统计退款金额
@Override
public Gold statsGold(RefundUser refundUser) {
List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets());
refundUser.setMarkets(markets);
Gold gold = new Gold();
List<RefundUser> refundUsers = refundMapper.selectBy(refundUser);
@ -86,6 +95,8 @@ public class RefundServiceImpl implements RefundService {
//查找筛选退款
@Override
public PageInfo<RefundUser> selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser)throws Exception {
List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets());
refundUser.setMarkets(markets);
PageHelper.startPage(pageNum, pageSize);
List<RefundUser> refundUsers = refundMapper.selectBy(refundUser);
return new PageInfo<>(refundUsers);

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);

12
src/main/resources/application-dev.yml

@ -12,9 +12,9 @@ spring:
pool-name: mysql1HikariCP
maximum-pool-size: 10
sqlserver1:
jdbc-url: jdbc:sqlserver://52.76.43.43:1433;databaseName=hwhcGold;encrypt=true;sslProtocol=TLSv1;trustServerCertificate=true;
username: hwhc_gold_query
password: hwhc_gold_query4564jkj
jdbc-url: jdbc:sqlserver://54.255.120.171:1433;databaseName=hwhcGold;encrypt=true;sslProtocol=TLSv1;trustServerCertificate=true;
username: newkst_test
password: ahsjdh#$gas6545
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
application:
@ -51,9 +51,11 @@ file:
feishu:
webhook:
url: https://open.feishu.cn/open-apis/bot/v2/hook/384c78aa-8df1-498b-9c47-04e890ed9877
bean:
# url: http://api.homilychart.com/hljwgo/api/wallet/recharge
url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge
server:
port: 8081
port: 10704
logging:
level:

3
src/main/resources/application-prod.yml

@ -54,7 +54,8 @@ feishu:
url: https://open.feishu.cn/open-apis/bot/v2/hook/1a515b19-b64f-46b7-9486-35842b9539fe
bean:
url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold
# url: http://api.homilychart.com/hljwgo/api/wallet/recharge
url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge
server:
port: 10704

20
src/main/resources/application-test.yml

@ -12,9 +12,9 @@ spring:
pool-name: mysql1HikariCP
maximum-pool-size: 10
sqlserver1:
jdbc-url: jdbc:sqlserver://52.76.43.43:1433;databaseName=hwhcGold;encrypt=true;sslProtocol=TLSv1;trustServerCertificate=true;
username: hwhc_gold_query
password: hwhc_gold_query4564jkj
jdbc-url: jdbc:sqlserver://54.255.120.171:1433;databaseName=hwhcGold;encrypt=true;sslProtocol=TLSv1;trustServerCertificate=true;
username: newkst_test
password: ahsjdh#$gas6545
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
application:
@ -34,10 +34,10 @@ spring:
data:
redis:
database: 1
host: localhost
port: 6379
password: 123456
database: 0
host: 18.143.76.3
port: 10703
password: Ngc0FYUTA6h3wC5J
lettuce:
pool:
@ -45,17 +45,15 @@ spring:
max-wait: -1
max-idle: 5
file:
upload:
url: http://39.101.133.168:8828/hljw/api/aws/upload
feishu:
webhook:
url: https://open.feishu.cn/open-apis/bot/v2/hook/384c78aa-8df1-498b-9c47-04e890ed9877
bean:
url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold
# url: http://api.homilychart.com/hljwgo/api/wallet/recharge
url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge
server:
port: 8081

5
src/main/resources/application.yml

@ -1,6 +1,6 @@
spring:
profiles:
active: dev
active: @spring.profiles.active@
jackson:
deserialization:
fail-on-unknown-properties: false
@ -103,7 +103,8 @@ file:
upload:
url: http://39.101.133.168:8828/hljw/api/aws/upload
bean:
url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold
# url: http://api.homilychart.com/hljwgo/api/wallet/recharge
url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge
server:
port: 8081

2
src/main/resources/jindouMapper/BeanRechargeMapper2.xml

@ -1,7 +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.bean.BeanRechargeMapper2">
<select id="selectBySystem" resultType="com.example.demo.domain.vo.bean.BeanRechargeInfo">
<select id="selectBySystem" resultType="com.example.demo.domain.vo.bean.BeanSystemRechargeInfo">
SELECT f.id AS id,
m.jwcode AS jwcode,
m.nickname AS name,

26
src/main/resources/mapper/AuditMapper.xml

@ -47,13 +47,14 @@
SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
u.name as name,
u.market as market,
m.name as market,
a1.admin_name as adminName,
a2.admin_name as auditName
FROM user_gold_record as ugr
LEFT JOIN user u ON ugr.jwcode = u.jwcode
LEFT JOIN admin a1 ON ugr.admin_id = a1.id
LEFT JOIN admin a2 ON ugr.audit_id = a2.id
left join market m ON u.market = m.id
<where>
<if test="rechargeAudit.jwcode != null and rechargeAudit.jwcode != ''">
AND ugr.jwcode = #{rechargeAudit.jwcode}
@ -61,10 +62,11 @@
<if test="rechargeAudit.activity != null and rechargeAudit.activity != ''">
AND ugr.activity = #{rechargeAudit.activity}
</if>
<if test="rechargeAudit.markets != null and rechargeAudit.markets.size() > 0 and '1' not in rechargeAudit.markets">
<!-- 判断 market 是否不为总部且 markets 不为空 -->
<if test="rechargeAudit.markets != null and rechargeAudit.markets.size() > 0 and '9999' not in rechargeAudit.markets and '9' not in rechargeAudit.markets">
AND (
<foreach collection="rechargeAudit.markets" item="market" separator=" OR ">
u.market LIKE CONCAT('%', #{market}, '%')
<foreach collection="rechargeAudit.markets" item="market" open="" close="" separator=" OR ">
u.market = #{market}
</foreach>
)
</if>
@ -75,7 +77,7 @@
AND ugr.rate_id = #{rechargeAudit.rateId}
</if>-->
<if test="rechargeAudit.market != null and rechargeAudit.market != ''">
AND u.market = #{rechargeAudit.market}
AND m.name = #{rechargeAudit.market}
</if>
<if test="rechargeAudit.startTime != null and rechargeAudit.endTime != null ">
AND ugr.pay_time between #{rechargeAudit.startTime} and #{rechargeAudit.endTime}
@ -101,13 +103,14 @@
SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
u.name as name,
u.market as market,
m.name as market,
a1.admin_name as adminName,
a2.admin_name as auditName
FROM user_gold_record as ugr
LEFT JOIN user u ON ugr.jwcode = u.jwcode
LEFT JOIN admin a1 ON ugr.admin_id = a1.id
LEFT JOIN admin a2 ON ugr.audit_id = a2.id
left join market m ON u.market = m.id
<where>
<if test="refundAudit.jwcode != null">
@ -119,13 +122,12 @@
<if test="refundAudit.goodsName != null and refundAudit.goodsName != ''">
AND ugr.goods_name = #{refundAudit.goodsName}
</if>
<if test="refundAudit.market != null and refundAudit.market != ''">
AND u.market = #{refundAudit.market}
</if>
<if test="refundAudit.markets != null and refundAudit.markets.size() > 0 and '1' not in refundAudit.markets">
<!-- 判断 market 是否不为总部且 markets 不为空 -->
<if test="refundAudit.markets != null and refundAudit.markets.size() > 0 and '9999' not in refundAudit.markets and '9' not in refundAudit.markets">
AND (
<foreach collection="refundAudit.markets" item="market" separator=" OR ">
u.market LIKE CONCAT('%', #{market}, '%')
<foreach collection="refundAudit.markets" item="market" open="" close="" separator=" OR ">
u.market = #{market}
</foreach>
)
</if>

20
src/main/resources/mapper/ConsumeMapper.xml

@ -6,7 +6,7 @@
<select id="selectAll" resultType="com.example.demo.domain.vo.coin.ConsumeUser">
SELECT u.name AS name,
ugr.jwcode AS jwcode,
u.market AS market,
m.name as market,
ugr.goods_name AS goodsName,
ugr.pay_platform AS payPlatform,
ugr.sum_gold AS sumGold,
@ -21,13 +21,14 @@
user u ON u.jwcode = ugr.jwcode
left JOIN
admin a ON ugr.admin_id = a.id
left join market m ON u.market = m.id
<where>
ugr.type = 1 AND ugr.flag = 1
<!-- 判断 market 是否不为总部且 markets 不为空 -->
<if test="markets != null and markets.size() > 0 and '1' not in markets">
<if test="markets != null and markets.size() > 0 and '9999' not in markets and '9' not in markets">
AND (
<foreach collection="markets" item="market" open="" close="" separator=" OR ">
u.market LIKE CONCAT('%', #{market}, '%')
u.market = #{market}
</foreach>
)
</if>
@ -75,7 +76,7 @@
<select id="selectBy" resultType="com.example.demo.domain.vo.coin.ConsumeUser">
SELECT u.name AS name,
ugr.jwcode AS jwcode,
u.market AS market,
m.name as market,
ugr.goods_name AS goodsName,
ugr.pay_platform AS payPlatform,
ugr.sum_gold AS sumGold,
@ -90,13 +91,16 @@
user u ON u.jwcode = ugr.jwcode
left JOIN
admin a ON ugr.admin_id = a.id
left join market m ON u.market = m.id
<where>
ugr.type = 1 AND ugr.flag = 1
<if test="markets != null and markets.size > 0 and !(markets.size() == 1 and markets[0] == '')">
AND u.market IN
<foreach collection="markets" item="market" open="(" separator="," close=")">
#{market}
<if test="markets != null and markets.size() > 0 and '9999' not in markets and '9' not in markets">
AND (
<foreach collection="markets" item="market" open="" close="" separator=" OR ">
u.market = #{market}
</foreach>
)
</if>
<if test="jwcode != null and jwcode != ''">
AND ugr.jwcode = #{jwcode}

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

@ -27,6 +27,6 @@
where id = #{roleId}
</select>
<select id="getAllRoleMarket" resultType="java.lang.String">
select DISTINCT market from role
select DISTINCT name from market where type=2
</select>
</mapper>

22
src/main/resources/mapper/MarketMapper.xml

@ -4,4 +4,26 @@
<select id="getMarket" resultType="com.example.demo.domain.entity.Market">
select * from market
</select>
<!-- 根据名称列表查询对应的市场ID及其子市场ID -->
<select id="getMarketIds" parameterType="java.util.List" resultType="java.lang.String">
SELECT id
FROM market
WHERE
-- 匹配名称的市场ID
name IN
<foreach collection="list" item="name" open="(" separator="," close=")">
#{name}
</foreach>
OR
-- 父ID是上述市场ID的子市场
parent_id IN (
SELECT id
FROM market
WHERE name IN
<foreach collection="list" item="name" open="(" separator="," close=")">
#{name}
</foreach>
)
</select>
</mapper>

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

@ -84,7 +84,7 @@
<if test="postiton!=null and postiton.length>0">
and admin.postiton=#{postiton}
</if>
<if test="markets != null and markets.size() > 0 and '1' not in markets">
<if test="markets != null and markets.size() > 0 and '总部' not in markets and '研发部' not in markets">
AND (
<foreach collection="markets" item="market" open="" close="" separator=" OR ">
admin.market LIKE CONCAT('%', #{market}, '%')

24
src/main/resources/mapper/RechargeMapper.xml

@ -7,7 +7,7 @@
SELECT
u.name AS name,
ugr.jwcode AS jwcode,
u.market AS market,
m.name as market,
ugr.activity AS activity,
ugr.rate_id AS rateId,
r.rate_name AS rateName,
@ -24,15 +24,17 @@
left JOIN user u ON u.jwcode = ugr.jwcode
left JOIN admin a ON ugr.admin_id = a.id
left JOIN rate r ON ugr.rate_id = r.id
left join market m ON u.market = m.id
<where>
ugr.type = 0 AND ugr.audit_status IN (1,3)
AND ugr.flag = 1
<if test="markets!= null and markets.size > 0">
AND user.market IN
<foreach collection="markets" item="markets" open="(" separator="," close=")">
#{markets}
<if test="markets != null and markets.size() > 0 and '9999' not in markets and '9' not in markets">
AND (
<foreach collection="markets" item="market" open="" close="" separator=" OR ">
u.market = #{market}
</foreach>
)
</if>
</where>
<trim prefix="ORDER BY" suffixOverrides=",">
@ -75,7 +77,7 @@
SELECT
u.name AS name,
ugr.jwcode AS jwcode,
u.market AS market,
m.name as market,
ugr.activity AS activity,
ugr.rate_id AS rateId,
r.rate_name AS rateName,
@ -92,15 +94,17 @@
left JOIN user u ON u.jwcode = ugr.jwcode
left JOIN admin a ON ugr.admin_id = a.id
left JOIN rate r ON ugr.rate_id = r.id
left join market m ON u.market = m.id
<where>
ugr.type = 0 AND ugr.audit_status IN (1,3)
AND ugr.flag = 1
<!-- 判断 market 是否不为总部且 markets 不为空 -->
<if test="markets != null and markets.size > 0 and !(markets.size() == 1 and markets[0] == '')">
AND u.market IN
<foreach collection="markets" item="market" open="(" separator="," close=")">
#{market}
<if test="markets != null and markets.size() > 0 and '9999' not in markets and '9' not in markets">
AND (
<foreach collection="markets" item="market" open="" close="" separator=" OR ">
u.market = #{market}
</foreach>
)
</if>
<if test="jwcode != null and jwcode != ''">
AND ugr.jwcode = #{jwcode}

19
src/main/resources/mapper/RefundMapper.xml

@ -6,7 +6,7 @@
<select id="selectAll" resultType="com.example.demo.domain.vo.coin.RefundUser">
SELECT u.name AS name,
ugr.jwcode AS jwcode,
u.market AS market,
m.name as market,
ugr.order_code AS orderCode,
ugr.goods_name AS goodsName,
ugr.refund_model AS refundModel,
@ -23,13 +23,14 @@
user u ON u.jwcode = ugr.jwcode
left JOIN
admin a ON ugr.admin_id = a.id
left join market m ON u.market = m.id
<where>
ugr.type = 2 AND ugr.audit_status IN (1,3) AND ugr.flag = 1
<!-- 判断 market 是否不为总部且 markets 不为空 -->
<if test="markets != null and markets.size() > 0 and '1' not in markets">
<if test="markets != null and markets.size() > 0 and '9999' not in markets and '9' not in markets">
AND (
<foreach collection="markets" item="market" open="" close="" separator=" OR ">
u.market LIKE CONCAT('%', #{market}, '%')
u.market = #{market}
</foreach>
)
</if>
@ -76,7 +77,7 @@
<select id="selectBy" resultType="com.example.demo.domain.vo.coin.RefundUser">
SELECT u.name AS name,
ugr.jwcode AS jwcode,
u.market AS market,
m.name as market,
ugr.order_code AS orderCode,
ugr.goods_name AS goodsName,
ugr.refund_model AS refundModel,
@ -93,13 +94,15 @@
user u ON u.jwcode = ugr.jwcode
left JOIN
admin a ON ugr.admin_id = a.id
left join market m ON u.market = m.id
<where>
ugr.type = 2 AND ugr.audit_status IN (1,3) AND ugr.flag = 1
<if test="markets != null and markets.size > 0 and !(markets.size() == 1 and markets[0] == '')">
AND u.market IN
<foreach collection="markets" item="market" open="(" separator="," close=")">
#{market}
<if test="markets != null and markets.size() > 0 and '9999' not in markets and '9' not in markets">
AND (
<foreach collection="markets" item="market" open="" close="" separator=" OR ">
u.market = #{market}
</foreach>
)
</if>
<if test="jwcode != null and jwcode != ''">
AND ugr.jwcode = #{jwcode}

4
src/main/resources/mapper/RoleMapper.xml

@ -37,7 +37,7 @@
SELECT id,role_name FROM role
<where>
<!-- 判断 market 是否不为总部且 markets 不为空 -->
<if test="markets != null and markets.size() > 0 and '1' not in markets">
<if test="markets != null and markets.size() > 0 and '总部' not in markets and '研发部' not in markets">
AND market IN
<foreach collection="markets" item="market" open="(" close=")" separator=",">
#{market}
@ -91,7 +91,7 @@
r.market LIKE CONCAT('%', #{market}, '%')
</if>
<!-- 判断 market 是否不为总部且 markets 不为空 -->
<if test="markets != null and markets.size() > 0 and '1' not in markets">
<if test="markets != null and markets.size() > 0 and '总部' not in markets and '研发部' not in markets">
AND r.market IN
<foreach collection="markets" item="market" open="(" close=")" separator=",">
#{market}

248
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,
@ -313,61 +160,66 @@
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.task_gold END),0) AS refund_task,
COUNT(DISTINCT CASE WHEN ugr.type=0 THEN ugr.jwcode END) AS recharge_num,
COUNT(DISTINCT CASE WHEN ugr.type=0
AND u.first_recharge BETWEEN #{start} AND #{end} THEN ugr.jwcode END) AS first_recharge
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,
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,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.permanent_gold END),0) AS consume_permanent,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.free_june END),0) AS consume_free_june,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.free_december END),0) AS consume_free_december,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.task_gold END),0) AS consume_task,
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.permanent_gold END),0) AS refund_permanent,
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_june END),0) AS refund_free_june,
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_december END),0) AS refund_free_december,
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.task_gold END),0) AS refund_task,
COUNT(DISTINCT CASE WHEN ugr.type=0 THEN ugr.jwcode END) AS recharge_num,
COUNT(DISTINCT CASE WHEN ugr.type=0
AND u.first_recharge BETWEEN d.date_start AND d.date_end THEN ugr.jwcode END) AS first_recharge
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,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.permanent_gold END),0) AS consume_permanent,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.free_june END),0) AS consume_free_june,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.free_december END),0) AS consume_free_december,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.task_gold END),0) AS consume_task,
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.permanent_gold END),0) AS refund_permanent,
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_june END),0) AS refund_free_june,
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_december END),0) AS refund_free_december,
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.task_gold END),0) AS refund_task,
COUNT(DISTINCT CASE WHEN ugr.type=0 THEN ugr.jwcode END) AS recharge_num,
COUNT(DISTINCT CASE WHEN ugr.type=0
AND u.first_recharge BETWEEN d.date_start AND d.date_end THEN ugr.jwcode END) AS first_recharge
FROM
-- 生成 7 天日期序列
(
SELECT DATE_SUB(CURDATE(), INTERVAL seq DAY) AS create_date,
DATE_SUB(CURDATE(), INTERVAL seq DAY) AS date_start,
-- 生成 7 天日期序列
(
SELECT DATE_SUB(CURDATE(), INTERVAL seq DAY) AS create_date,
DATE_SUB(CURDATE(), INTERVAL seq DAY) AS date_start,
TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL seq DAY), '23:59:59') AS date_end
FROM (
SELECT 0 AS seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL
SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
) AS days
) d
JOIN user_gold_record ugr
FROM (
SELECT 0 AS seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL
SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
) AS days
) 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
WHERE ugr.audit_status IN (1,3)
AND ugr.flag = 1
GROUP BY u.market, d.create_date
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 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>

2
src/main/resources/paymapper/BeanRechargeMapper3.xml

@ -1,7 +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.pay.BeanRechargeMapper3">
<select id="selectByOnline" resultType="com.example.demo.domain.vo.bean.BeanRechargeInfo">
<select id="selectByOnline" resultType="com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo">
SELECT g.id AS id,
g.jwcode AS jwcode,
m.name AS name,

Loading…
Cancel
Save