diff --git a/pom.xml b/pom.xml
index b3b2b4d..0948cd6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -115,6 +115,11 @@
3.0.4
test
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ 3.5.2
+
diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java
index 4118dbf..c10b006 100644
--- a/src/main/java/com/example/demo/DemoApplication.java
+++ b/src/main/java/com/example/demo/DemoApplication.java
@@ -7,7 +7,9 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling // 启用调度功能
-@MapperScan(basePackages = "com.example.demo.mapper", sqlSessionTemplateRef = "mysql1SqlSessionTemplate")
+@MapperScan(basePackages = "com.example.demo.mapper.coin", sqlSessionTemplateRef = "mysql1SqlSessionTemplate")
+@MapperScan(basePackages = "com.example.demo.mapper.bean", sqlSessionTemplateRef = "mysql2SqlSessionTemplate")
+@MapperScan(basePackages = "com.example.demo.mapper.pay", sqlSessionTemplateRef = "mysql3SqlSessionTemplate")
public class DemoApplication {
public static void main(String[] args) {
diff --git a/src/main/java/com/example/demo/Export/ExportService.java b/src/main/java/com/example/demo/Export/ExportService.java
index 6598c9b..6fc145c 100644
--- a/src/main/java/com/example/demo/Export/ExportService.java
+++ b/src/main/java/com/example/demo/Export/ExportService.java
@@ -1,9 +1,6 @@
package com.example.demo.Export;
-import com.example.demo.domain.DTO.ConsumeDTO;
-import com.example.demo.domain.DTO.GoldDetailDTO;
-import com.example.demo.domain.DTO.RechargeDTO;
-import com.example.demo.domain.DTO.RefundDTO;
+import com.example.demo.domain.DTO.*;
import com.example.demo.domain.vo.coin.Result;
/**
@@ -21,5 +18,7 @@ public interface ExportService {
Result addExportRefund(RefundDTO dto);
//消费导出
Result addExportConsume(ConsumeDTO dto);
+ //金豆直播导出
+ Result addExportLive(LiveDTO dto);
}
diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java
index adf13eb..b89460b 100644
--- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java
+++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java
@@ -2,6 +2,7 @@ package com.example.demo.Export;
import com.example.demo.Util.JWTUtil;
import com.example.demo.domain.DTO.ConsumeDTO;
+import com.example.demo.domain.DTO.LiveDTO;
import com.example.demo.domain.DTO.RechargeDTO;
import com.example.demo.domain.DTO.RefundDTO;
import com.example.demo.domain.entity.Admin;
@@ -32,7 +33,7 @@ import java.util.Map;
* @Version 1.0
**/
@Service
-public class ExportServiceImpl implements ExportService{
+public class ExportServiceImpl implements ExportService {
@Autowired
private GoldDetailMapper goldDetailMapper;
@Autowired
@@ -40,174 +41,172 @@ public class ExportServiceImpl implements ExportService{
@Autowired
private AdminService adminService;
- @Override
- public Result addExportRecharge(RechargeDTO dto) {
- // 获取操作者 jwcode
- HttpServletRequest request=((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+ /**
+ * 通用导出逻辑
+ *
+ * @param dto 数据传输对象 (RechargeDTO, RefundDTO, ConsumeDTO)
+ * @param exportType 导出类型 ("充值明细", "退款明细", "消耗明细")
+ * @param queueName Redis 队列名称
+ * @param requestData 请求数据字段名 ("rechargeUser", "refundUser", "consumeUser","liveUser")
+ * @return Result
+ */
+ private Result addExport(Object dto, String exportType, String queueName, String requestData) {
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token");
+
try {
- UserDetails token1= JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
- dto.setAccount(Integer.valueOf(token1.getUsername()));
- } catch (Exception e) {
- throw new RuntimeException(e.getMessage());
- }
- String admin = adminService.getName(String.valueOf(dto.getAccount()));
- // 生成文件名
- String fileName = String.format("%s_%s_%s.xlsx",
- "充值明细",
- admin,
- LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
-// System.out.println(fileName);
- dto.setUrl("");
- dto.setFileName(fileName);
- dto.setDataNum(0);
+ // 获取操作者信息
+ Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
+ Integer account = Integer.valueOf(admin.getAccount());
+ String adminName = admin.getAdminName();
+
+ // 设置 DTO 的通用字段
+ setCommonFields(dto, account, adminName);
- try{
- // 调用方式
+ // 插入导出记录并获取主键
GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder();
- goldDetailMapper.insertExportRecord(
- idHolder, // 用于接收主键
- dto.getAccount(),
- dto.getType(),
- dto.getState(),
- dto.getUrl(),
- dto.getFileName(),
- dto.getDataNum()
- );
- // 获取主键
+ insertExportRecord(dto, idHolder, account);
Long recordId = idHolder.getId();
- // 2. 构造完整的 JSON 数据(包含所有请求参数)
- Map exportData = new HashMap<>();
- exportData.put("recordId", recordId);
- // 添加 token 到 exportData
- exportData.put("token", token);
-
- // 手动构造请求数据(避免 toString() 只返回部分字段)
- Map requestData = new HashMap<>();
- requestData.put("rechargeUser", dto.getRechargeUser());
- exportData.put("requestData", requestData);
-
- // 3. 发送到 Redis 消息队列
+
+ // 构造完整的 JSON 数据
+ Map exportData = constructExportData(recordId, token, dto, requestData);
+
+ // 发送到 Redis 消息队列
String jsonData = new ObjectMapper().writeValueAsString(exportData);
- redisUtil.sendMessage("recharge:queue:export_queue", jsonData);
- }catch (Exception e){
+ redisUtil.sendMessage(queueName, jsonData);
+
+ } catch (Exception e) {
e.printStackTrace();
throw new SystemException("导出数据异常,请稍后重试", e);
}
+
return Result.success();
}
- @Override
- public Result addExportRefund(RefundDTO dto) {
- // 获取操作者 jwcode
- HttpServletRequest request=((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
- String token = request.getHeader("token");
- try {
- UserDetails token1= JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
- dto.setAccount(Integer.valueOf(token1.getUsername()));
- } catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ /**
+ * 设置 DTO 的通用字段
+ */
+ private void setCommonFields(Object dto, Integer account,String adminName) throws Exception {
+ if (dto instanceof RechargeDTO rechargeDTO) {
+ rechargeDTO.setAccount(Integer.valueOf(account));
+ rechargeDTO.setUrl("");
+ rechargeDTO.setFileName(generateFileName("充值明细", adminName));
+ rechargeDTO.setDataNum(0);
+ } else if (dto instanceof RefundDTO refundDTO) {
+ refundDTO.setAccount(Integer.valueOf(account));
+ refundDTO.setUrl("");
+ refundDTO.setFileName(generateFileName("退款明细", adminName));
+ refundDTO.setDataNum(0);
+ } else if (dto instanceof ConsumeDTO consumeDTO) {
+ consumeDTO.setAccount(Integer.valueOf(account));
+ consumeDTO.setUrl("");
+ consumeDTO.setFileName(generateFileName("消耗明细", adminName));
+ consumeDTO.setDataNum(0);
+ } else if (dto instanceof LiveDTO liveDTO) {
+ liveDTO.setAccount(Integer.valueOf(account));
+ liveDTO.setUrl("");
+ liveDTO.setFileName(generateFileName("直播明细", adminName));
+ liveDTO.setDataNum(0);
}
- String admin = adminService.getName(String.valueOf(dto.getAccount()));
- // 生成文件名
- String fileName = String.format("%s_%s_%s.xlsx",
- "退款明细",
- admin,
- LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
- System.out.println(fileName);
- dto.setUrl("");
- dto.setFileName(fileName);
- dto.setDataNum(0);
+ }
- try{
- // 调用方式
- GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder();
+ /**
+ * 插入导出记录
+ */
+ private void insertExportRecord(Object dto, GoldDetailMapper.ExportRecordIdHolder idHolder, Integer account) throws Exception {
+ if (dto instanceof RechargeDTO rechargeDTO) {
goldDetailMapper.insertExportRecord(
- idHolder, // 用于接收主键
- dto.getAccount(),
- dto.getType(),
- dto.getState(),
- dto.getUrl(),
- dto.getFileName(),
- dto.getDataNum()
+ idHolder,
+ account,
+ rechargeDTO.getType(),
+ rechargeDTO.getState(),
+ rechargeDTO.getUrl(),
+ rechargeDTO.getFileName(),
+ rechargeDTO.getDataNum()
+ );
+ } else if (dto instanceof RefundDTO refundDTO) {
+ goldDetailMapper.insertExportRecord(
+ idHolder,
+ account,
+ refundDTO.getType(),
+ refundDTO.getState(),
+ refundDTO.getUrl(),
+ refundDTO.getFileName(),
+ refundDTO.getDataNum()
+ );
+ } else if (dto instanceof ConsumeDTO consumeDTO) {
+ goldDetailMapper.insertExportRecord(
+ idHolder,
+ account,
+ consumeDTO.getType(),
+ consumeDTO.getState(),
+ consumeDTO.getUrl(),
+ consumeDTO.getFileName(),
+ consumeDTO.getDataNum()
+ );
+ } else if(dto instanceof LiveDTO liveDTO){
+ goldDetailMapper.insertExportRecord(
+ idHolder,
+ account,
+ liveDTO.getType(),
+ liveDTO.getState(),
+ liveDTO.getUrl(),
+ liveDTO.getFileName(),
+ liveDTO.getDataNum()
);
- // 获取主键
- Long recordId = idHolder.getId();
- // 2. 构造完整的 JSON 数据(包含所有请求参数)
- Map exportData = new HashMap<>();
- exportData.put("recordId", recordId);
- // 添加 token 到 exportData
- exportData.put("token", token);
-
- // 手动构造请求数据(避免 toString() 只返回部分字段)
- Map requestData = new HashMap<>();
- requestData.put("refundUser", dto.getRefundUser());
- exportData.put("requestData", requestData);
-
- // 3. 发送到 Redis 消息队列
- String jsonData = new ObjectMapper().writeValueAsString(exportData);
- redisUtil.sendMessage("refund:queue:export_queue", jsonData);
- }catch (Exception e){
- e.printStackTrace();
- throw new SystemException("导出数据异常,请稍后重试", e);
}
- return Result.success();
}
- @Override
- public Result addExportConsume(ConsumeDTO dto) {
- // 获取操作者 jwcode
- HttpServletRequest request=((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
- String token = request.getHeader("token");
- try {
- UserDetails token1= JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
- dto.setAccount(Integer.valueOf(token1.getUsername()));
- } catch (Exception e) {
- throw new RuntimeException(e.getMessage());
+ /**
+ * 构造导出数据
+ */
+ private Map constructExportData(Long recordId, String token, Object dto, String requestDataKey) throws Exception {
+ Map exportData = new HashMap<>();
+ exportData.put("recordId", recordId);
+ exportData.put("token", token);
+
+ Map requestData = new HashMap<>();
+ if (dto instanceof RechargeDTO rechargeDTO) {
+ requestData.put(requestDataKey, rechargeDTO.getRechargeUser());
+ } else if (dto instanceof RefundDTO refundDTO) {
+ requestData.put(requestDataKey, refundDTO.getRefundUser());
+ } else if (dto instanceof ConsumeDTO consumeDTO) {
+ requestData.put(requestDataKey, consumeDTO.getConsumeUser());
+ } else if(dto instanceof LiveDTO liveDTO){
+ requestData.put(requestDataKey, liveDTO.getBeanConsumeLive());
}
- String admin = adminService.getName(String.valueOf(dto.getAccount()));
- // 生成文件名
- String fileName = String.format("%s_%s_%s.xlsx",
- "消耗明细",
- admin,
+ exportData.put("requestData", requestData);
+
+ return exportData;
+ }
+
+ /**
+ * 生成文件名
+ */
+ private String generateFileName(String exportType, String adminName) {
+ return String.format("%s_%s_%s.xlsx",
+ exportType,
+ adminName,
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
- System.out.println(fileName);
- dto.setUrl("");
- dto.setFileName(fileName);
- dto.setDataNum(0);
+ }
- try{
- // 调用方式
- GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder();
- goldDetailMapper.insertExportRecord(
- idHolder, // 用于接收主键
- dto.getAccount(),
- dto.getType(),
- dto.getState(),
- dto.getUrl(),
- dto.getFileName(),
- dto.getDataNum()
- );
- // 获取主键
- Long recordId = idHolder.getId();
- // 2. 构造完整的 JSON 数据(包含所有请求参数)
- Map exportData = new HashMap<>();
- exportData.put("recordId", recordId);
- // 添加 token 到 exportData
- exportData.put("token", token);
-
- // 手动构造请求数据(避免 toString() 只返回部分字段)
- Map requestData = new HashMap<>();
- requestData.put("consumeUser", dto.getConsumeUser());
- exportData.put("requestData", requestData);
-
- // 3. 发送到 Redis 消息队列
- String jsonData = new ObjectMapper().writeValueAsString(exportData);
- redisUtil.sendMessage("consume:queue:export_queue", jsonData);
- }catch (Exception e){
- e.printStackTrace();
- throw new SystemException("导出数据异常,请稍后重试", e);
- }
- return Result.success();
+ @Override
+ public Result addExportRecharge(RechargeDTO dto) {
+ return addExport(dto, "充值明细", "recharge:queue:export_queue", "rechargeUser");
+ }
+
+ @Override
+ public Result addExportRefund(RefundDTO dto) {
+ return addExport(dto, "退款明细", "refund:queue:export_queue", "refundUser");
+ }
+
+ @Override
+ public Result addExportConsume(ConsumeDTO dto) {
+ return addExport(dto, "消耗明细", "consume:queue:export_queue", "consumeUser");
+ }
+
+ @Override
+ public Result addExportLive(LiveDTO dto) {
+ return addExport(dto, "直播明细", "live:queue:export_queue", "beanConsumeLive");
}
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/config/Mysql2DataSourceConfig.java b/src/main/java/com/example/demo/config/Mysql2DataSourceConfig.java
index 225424b..1693570 100644
--- a/src/main/java/com/example/demo/config/Mysql2DataSourceConfig.java
+++ b/src/main/java/com/example/demo/config/Mysql2DataSourceConfig.java
@@ -17,10 +17,7 @@ import javax.sql.DataSource;
@Slf4j
@Configuration
-@MapperScan(
- basePackages = "com.example.demo.mapper.bean", // 扫描coin包
- sqlSessionTemplateRef = "mysql2SqlSessionTemplate"
-)
+
public class Mysql2DataSourceConfig {
@Bean(name = "mysql2DataSource")
diff --git a/src/main/java/com/example/demo/config/Mysql3DataSourceConfig.java b/src/main/java/com/example/demo/config/Mysql3DataSourceConfig.java
index 52577d3..d04f212 100644
--- a/src/main/java/com/example/demo/config/Mysql3DataSourceConfig.java
+++ b/src/main/java/com/example/demo/config/Mysql3DataSourceConfig.java
@@ -29,7 +29,7 @@ public class Mysql3DataSourceConfig {
@Qualifier("globalConfiguration3") org.apache.ibatis.session.Configuration globalConfiguration3) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
- sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:jindouMapper/*.xml"));
+ sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:paymapper/*.xml"));
sessionFactory.setConfiguration(globalConfiguration3);
return sessionFactory.getObject();
}
diff --git a/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java b/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
new file mode 100644
index 0000000..14164f1
--- /dev/null
+++ b/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
@@ -0,0 +1,110 @@
+package com.example.demo.controller.bean;
+
+import com.example.demo.domain.vo.bean.BeanConsumeGold;
+import com.example.demo.domain.vo.coin.Page;
+import com.example.demo.domain.vo.coin.Result;
+import com.example.demo.service.bean.BeanConsumeService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanConsumeController
+ * @description:
+ * @author: Ethan
+ * @create: 2025−07-30 11:30
+ * @Version 1.0
+ **/
+@RestController
+@RequestMapping("/beanConsume")
+@RequiredArgsConstructor
+@Slf4j
+@CrossOrigin
+public class BeanConsumeController {
+ @Autowired
+ private BeanConsumeService beanConsumeService;
+
+ //获取消费用户分部信息
+ @PostMapping("/getDept")
+ public Result getDept(){
+
+ List deptList = beanConsumeService.getDept();
+ return Result.success(deptList);
+ }
+
+ //筛选查询直播消费记录
+ @PostMapping("/selectLiveBy")
+ public Result selectLiveBy(@RequestBody Page page){
+ try {
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ } else {
+
+ return Result.success(beanConsumeService.selectLiveBy(page.getPageNum(), page.getPageSize(), page.getBeanConsumeLive()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ //返回堆栈信息
+ return Result.error(e.toString());
+ }}
+ //筛选查询铁粉消费记录
+ @PostMapping("/selectFanBy")
+ public Result selectFanBy(@RequestBody Page page){
+ try {
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ } else {
+
+ return Result.success(beanConsumeService.selectFanBy(page.getPageNum(), page.getPageSize(), page.getBeanConsumeFan()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return Result.error(e.toString());
+ }}
+
+ //筛选查询文章消费记录
+ @PostMapping("/selectArticleBy")
+ public Result selectArticleBy(@RequestBody Page page){
+ try {
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ } else {
+
+ return Result.success(beanConsumeService.selectArticleBy(page.getPageNum(), page.getPageSize(), page.getBeanConsumeArticle()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return Result.error(e.toString());
+ }}
+
+ //消费合计数
+ @PostMapping("sumConsumeGold")
+ public BeanConsumeGold sumConsumeGold(@RequestBody Page page) {
+
+ return beanConsumeService.sumConsumeGold( page);
+ }
+ //查询所有直播礼物
+ @PostMapping("/getLiveGift")
+ public Result getLiveGift(){
+ return Result.success(beanConsumeService.getLiveGift());
+ }
+ //查询所有直播频道
+ @PostMapping("/getLiveChannel")
+ public Result getLiveChannel(){
+ return Result.success(beanConsumeService.getLiveChannel());
+ }
+}
diff --git a/src/main/java/com/example/demo/controller/bean/BeanRechargeController.java b/src/main/java/com/example/demo/controller/bean/BeanRechargeController.java
index 1bd711e..dc5e00a 100644
--- a/src/main/java/com/example/demo/controller/bean/BeanRechargeController.java
+++ b/src/main/java/com/example/demo/controller/bean/BeanRechargeController.java
@@ -1,5 +1,17 @@
package com.example.demo.controller.bean;
+import com.example.demo.domain.vo.bean.BeanRecharge;
+import com.example.demo.domain.vo.bean.BeanRechargeInfo;
+import com.example.demo.domain.vo.bean.GoldBean;
+import com.example.demo.domain.vo.coin.Page;
+import com.example.demo.domain.vo.coin.Result;
+import com.example.demo.service.bean.BeanRechargeService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.*;
+
/**
* @program: gold-java
* @ClassName BeanRechrageController
@@ -9,5 +21,98 @@ package com.example.demo.controller.bean;
* @Version 1.0
**/
+@RestController
+@RequestMapping("/beanRecharge")
+@RequiredArgsConstructor
+@Slf4j
+@CrossOrigin
public class BeanRechargeController {
-}
+
+ @Autowired
+ private BeanRechargeService beanRechargeService;
+
+ //添加金豆
+ @PostMapping("/add")
+ public Result add(@RequestBody BeanRecharge recharge) {
+ try {
+ return beanRechargeService.add(recharge);
+ } catch (Exception e) {
+ return Result.error("添加失败");
+ }
+ }
+
+ //系统充值
+ @PostMapping("/selectBySystem")
+ public Result selectBySystem(@RequestBody Page page) {
+ try {
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ } else {
+ return Result.success(beanRechargeService.selectBySystem(page.getPageNum(), page.getPageSize(), page.getBeanRechargeInfo()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return Result.error("请检查筛选数据的格式");
+ }
+
+ }
+
+ //系统金豆统计
+ @PostMapping("/statsSystemBean")
+ public Result statsSystemBean(@RequestBody BeanRechargeInfo beanRechargeInfo) {
+ try {
+ GoldBean goldBean = beanRechargeService.statsSystemBean(beanRechargeInfo);
+ return Result.success(goldBean);
+ } catch (Exception e) {
+ return Result.error("请检查数据的格式");
+ }
+ }
+ //获取系统充值地区
+ @PostMapping("/systemMarket")
+ public Result systemMarket()
+ {
+ List list = beanRechargeService.systemMarket();
+ return Result.success(list);
+ }
+
+ //线上充值
+ @PostMapping("/selectByOnline")
+ public Result selectByOnline(@RequestBody Page page) {
+ try {
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ } else {
+ return Result.success(beanRechargeService.selectByOnline(page.getPageNum(), page.getPageSize(), page.getBeanRechargeInfo()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return Result.error("请检查筛选数据的格式");
+ }
+
+ }
+
+ //线上金豆统计
+ @PostMapping("/statsOnlineBean")
+ public Result statsOnlineBean(@RequestBody BeanRechargeInfo beanRechargeInfo) {
+ try {
+ GoldBean goldBean = beanRechargeService.statsOnlineBean(beanRechargeInfo);
+ return Result.success(goldBean);
+ } catch (Exception e) {
+ return Result.error("请检查数据的格式");
+ }
+ }
+
+ //获取线上充值地区
+ @PostMapping("/onlineMarket")
+ public Result onlineMarket()
+ {
+ List list = beanRechargeService.onlineMarket();
+ return Result.success(list);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/controller/bean/BeanUserController.java b/src/main/java/com/example/demo/controller/bean/BeanUserController.java
index 5fb72ba..097fb00 100644
--- a/src/main/java/com/example/demo/controller/bean/BeanUserController.java
+++ b/src/main/java/com/example/demo/controller/bean/BeanUserController.java
@@ -1,14 +1,19 @@
package com.example.demo.controller.bean;
import com.example.demo.domain.entity.User;
+import com.example.demo.domain.vo.bean.BeanUser;
import com.example.demo.domain.vo.bean.BeanUserCard;
+import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.bean.BeanUserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
/**
* @program: gold-java
* @ClassName BeanUserController
@@ -34,7 +39,41 @@ public class BeanUserController {
try {
return beanUserService.userCard(user.getJwcode().toString());
} catch (Exception e) {
- return Result.error("请检查输入精网号");
+ return Result.error("请检查输入精网号格式");
}
}
+ //客户金豆余额
+ @PostMapping("/userBean")
+ public Result userBean(@RequestBody Page page) {
+ try {
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ } else {
+
+ return Result.success(beanUserService.selectUserBy(page.getPageNum(), page.getPageSize(), page.getBeanUser()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return Result.error(e.toString());
+ }}
+ //客户金币余额合计数
+ @PostMapping("/userBeanSum")
+ public Result userBeanSum(@RequestBody Page page) {
+
+ return Result.success(beanUserService.sumUserGold(page));
+ }
+ //查询客户分部
+ @PostMapping("/getDept")
+ public Result getDept() {
+ List deptList = beanUserService.getDept();
+ return Result.success(deptList);
+ }
}
+
+
+
+
+
diff --git a/src/main/java/com/example/demo/controller/coin/ConsumeController.java b/src/main/java/com/example/demo/controller/coin/ConsumeController.java
index f89a901..e07de1d 100644
--- a/src/main/java/com/example/demo/controller/coin/ConsumeController.java
+++ b/src/main/java/com/example/demo/controller/coin/ConsumeController.java
@@ -10,6 +10,7 @@ import com.example.demo.service.coin.ConsumeService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
@@ -85,15 +86,15 @@ public class ConsumeController {
return Result.error("页大小为空!");
} else {
//解token权限
- 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 list = Arrays.asList(admin.getMarkets().split(","));
- page.getConsumeUser().setMarkets(list);
- }
- else{
- return Result.error("角色为空");
+ if(page.getConsumeUser().getMarkets()==null||page.getConsumeUser().getMarkets().isEmpty()) {
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+ String token = request.getHeader("token");
+ Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
+ List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
+
+ if(!markets.contains("1")) {
+ page.getConsumeUser().setMarkets(markets);
+ }
}
return Result.success(consumeService.selectBy(page.getPageNum(), page.getPageSize(), page.getConsumeUser()));
}
@@ -108,16 +109,15 @@ public class ConsumeController {
@PostMapping("/statsGold")
public Result statsGold(@RequestBody ConsumeUser consumeUser) {
try {
- //解token权限
- 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 list = Arrays.asList(admin.getMarkets().split(","));
- consumeUser.setMarkets(list);
- }
- else{
- return Result.error("角色为空");
+ if(consumeUser.getMarkets()==null||consumeUser.getMarkets().isEmpty()) {
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+ String token = request.getHeader("token");
+ Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
+ List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
+
+ if(!markets.contains("1")) {
+ consumeUser.setMarkets(markets);
+ }
}
Gold gold = consumeService.statsGold(consumeUser);
return Result.success(gold);
@@ -144,6 +144,25 @@ public class ConsumeController {
}
}
+ public Result select(@RequestBody Page page) {
+ try {
+ //页码校验
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ //页面大小校验
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ } else {
+
+ return Result.success(consumeService.selectBy(page.getPageNum(), page.getPageSize(), page.getConsumeUser()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return Result.error("请检查筛选数据的格式");
+ }
+
+ }
}
diff --git a/src/main/java/com/example/demo/controller/coin/ExportController.java b/src/main/java/com/example/demo/controller/coin/ExportController.java
index 17c8462..fdb397c 100644
--- a/src/main/java/com/example/demo/controller/coin/ExportController.java
+++ b/src/main/java/com/example/demo/controller/coin/ExportController.java
@@ -4,6 +4,7 @@ import com.example.demo.Util.BusinessException;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.RedisLockUtil;
import com.example.demo.domain.DTO.ConsumeDTO;
+import com.example.demo.domain.DTO.LiveDTO;
import com.example.demo.domain.DTO.RechargeDTO;
import com.example.demo.domain.DTO.RefundDTO;
import com.example.demo.domain.entity.Admin;
@@ -100,4 +101,21 @@ public class ExportController {
redisLockUtil.unlock(lockKey, requestId);
}
}
+ @PostMapping("/exportLive")
+ public Result export(@Valid @RequestBody LiveDTO 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.addExportLive(dto);
+ } finally {
+ // 释放锁
+ redisLockUtil.unlock(lockKey, requestId);
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/controller/coin/GoldDetailController.java b/src/main/java/com/example/demo/controller/coin/GoldDetailController.java
index e3ace4b..f890b29 100644
--- a/src/main/java/com/example/demo/controller/coin/GoldDetailController.java
+++ b/src/main/java/com/example/demo/controller/coin/GoldDetailController.java
@@ -65,7 +65,7 @@ public class GoldDetailController {
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));;
- if(!markets.contains("总部")) {
+ if(!markets.contains("1")) {
page.getGoldDetail().setMarkets(markets);
}
}
@@ -82,7 +82,7 @@ public class GoldDetailController {
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
- if(!markets.contains("总部")) {
+ if(!markets.contains("1")) {
page.getGoldDetail().setMarkets(markets);
}
}
@@ -96,7 +96,7 @@ public class GoldDetailController {
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
- if(!markets.contains("总部")) {
+ if(!markets.contains("1")) {
user.setMarkets(markets);
}
}
@@ -117,7 +117,7 @@ public class GoldDetailController {
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
- if(!markets.contains("总部")) {
+ if(!markets.contains("1")) {
page.getUser().setMarkets(markets);
}
}
diff --git a/src/main/java/com/example/demo/controller/coin/RechargeController.java b/src/main/java/com/example/demo/controller/coin/RechargeController.java
index 9552fb5..7fcbfa2 100644
--- a/src/main/java/com/example/demo/controller/coin/RechargeController.java
+++ b/src/main/java/com/example/demo/controller/coin/RechargeController.java
@@ -7,6 +7,7 @@ import com.example.demo.service.coin.RechargeService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
@@ -78,15 +79,14 @@ public class RechargeController {
return Result.error("页大小为空!");
} else {
//解token权限
- 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 list = Arrays.asList(admin.getMarkets().split(","));
- page.getRechargeUser().setMarkets(list);
- }
- else{
- return Result.error("角色为空");
+ if(page.getRechargeUser().getMarkets()==null||page.getRechargeUser().getMarkets().isEmpty()){
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+ String token = request.getHeader("token");
+ Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
+ List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));;
+ if(!markets.contains("1")) {
+ page.getRechargeUser().setMarkets(markets);
+ }
}
return Result.success(rechargeService.selectBy(page.getPageNum(), page.getPageSize(), page.getRechargeUser()));
}
@@ -101,15 +101,14 @@ public class RechargeController {
public Result statsGold(@RequestBody RechargeUser rechargeUser) {
try {
//解token权限
- 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 list = Arrays.asList(admin.getMarkets().split(","));
- rechargeUser.setMarkets(list);
- }
- else{
- return Result.error("角色为空");
+ if(rechargeUser.getMarkets()==null||rechargeUser.getMarkets().isEmpty()){
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+ String token = request.getHeader("token");
+ Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
+ List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));;
+ if(!markets.contains("1")) {
+ rechargeUser.setMarkets(markets);
+ }
}
Gold gold = rechargeService.statsGold(rechargeUser);
return Result.success(gold);
@@ -129,5 +128,21 @@ public class RechargeController {
}
+ public Result selcet(@RequestBody Page page) {
+ try {
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ } else {
+ //解token权限
+ return Result.success(rechargeService.selectBy(page.getPageNum(), page.getPageSize(), page.getRechargeUser()));
+ }
+ } catch (Exception e) {
+ return Result.error("请检查筛选数据的格式");
+ }
+
+ }
}
diff --git a/src/main/java/com/example/demo/controller/coin/RefundController.java b/src/main/java/com/example/demo/controller/coin/RefundController.java
index e730265..ef1f6ba 100644
--- a/src/main/java/com/example/demo/controller/coin/RefundController.java
+++ b/src/main/java/com/example/demo/controller/coin/RefundController.java
@@ -6,6 +6,7 @@ import com.example.demo.service.coin.RefundService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
@@ -73,14 +74,15 @@ public class RefundController {
return Result.error("页大小为空!");
} else {
//解token权限
- 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 list = Arrays.asList(admin.getMarkets().split(","));
- page.getRefundUser().setMarkets(list);
- } else {
- return Result.error("角色为空");
+ if(page.getRefundUser().getMarkets()==null||page.getRefundUser().getMarkets().isEmpty()) {
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+ String token = request.getHeader("token");
+ Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
+ List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
+
+ if(!markets.contains("1")) {
+ page.getRefundUser().setMarkets(markets);
+ }
}
return Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser()));
}
@@ -95,15 +97,15 @@ public class RefundController {
public Result statsGold(@RequestBody RefundUser refundUser) {
try {
//解token权限
- 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 list = Arrays.asList(admin.getMarkets().split(","));
- refundUser.setMarkets(list);
- }
- else{
- return Result.error("角色为空");
+ if(refundUser.getMarkets()==null||refundUser.getMarkets().isEmpty()) {
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+ String token = request.getHeader("token");
+ Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
+ List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
+
+ if(!markets.contains("1")) {
+ refundUser.setMarkets(markets);
+ }
}
Gold gold = refundService.statsGold(refundUser);
return Result.success(gold);
@@ -135,4 +137,20 @@ public class RefundController {
return Result.error("请检查数据的格式");
}
}
+ public Result selcet(@RequestBody Page page) {
+ try {
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ } else {
+
+ return Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser()));
+ }
+ } catch (Exception e) {
+ return Result.error("请检查筛选数据的格式");
+ }
+
+ }
}
diff --git a/src/main/java/com/example/demo/controller/coin/WorkbenchController.java b/src/main/java/com/example/demo/controller/coin/WorkbenchController.java
index 8029bce..7e5d3da 100644
--- a/src/main/java/com/example/demo/controller/coin/WorkbenchController.java
+++ b/src/main/java/com/example/demo/controller/coin/WorkbenchController.java
@@ -57,7 +57,7 @@ public class WorkbenchController {
List markets = workbenchService.getAdminMarket(account);
WorkbenchCard result;
//判断是否是总部
- if (markets != null && markets.contains("总部")) {
+ if (markets != null && markets.contains("1")) {
result = workbenchService.getCardCache(markets);//走缓存,拿全部市场的缓存数据
} else {
result = workbenchService.getCard(markets);//不走缓存,计算卡片属性
diff --git a/src/main/java/com/example/demo/domain/DTO/LiveDTO.java b/src/main/java/com/example/demo/domain/DTO/LiveDTO.java
new file mode 100644
index 0000000..180aded
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/DTO/LiveDTO.java
@@ -0,0 +1,37 @@
+package com.example.demo.domain.DTO;
+
+import com.example.demo.domain.vo.bean.BeanConsumeLive;
+import com.example.demo.domain.vo.coin.ConsumeUser;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: GOLD
+ * @ClassName LiveDTO
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−07-31 17:28
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+public class LiveDTO {
+ private String token;
+ private String url = "";
+ private String fileName = "";
+ private Integer sort = 0;
+ private String field = "";
+ private Integer account;
+ private Integer type = 6; //类型
+ 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 BeanConsumeLive beanConsumeLive;
+}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java
new file mode 100644
index 0000000..01a33d1
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java
@@ -0,0 +1,41 @@
+package com.example.demo.domain.vo.bean;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanConsumeArticle
+ * @description:
+ * @author: Ethan
+ * @create: 2025−07-31 17:05
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class BeanConsumeArticle {
+ private static final long serialVersionUID = 1L;
+ private String name; //姓名
+ private Integer jwcode; //精网号
+ private String dept; //地区/分部
+ private String type; //类型source_type 9、10打赏,11付费
+ private Integer payMode; // 0 打赏 1 付费 2 其他
+ private String beanNum; //金豆数量
+ private Integer articleId; //文章/视频ID
+ private String articleName; //文章/视频标题(source_name)
+ private String author; //作者
+ private String payType; //支付类型 1-5:直播 7铁粉 8文章
+ private String sortField; //排序字段
+ private String sortOrder; //排序顺序
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date consumeTime; // 付费时间 (时间戳转化)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date startTime; // 开始时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date endTime; // 结束时间
+}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java
new file mode 100644
index 0000000..636a00c
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java
@@ -0,0 +1,38 @@
+package com.example.demo.domain.vo.bean;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanConsumeFan
+ * @description:
+ * @author: Ethan
+ * @create: 2025−07-31 11:30
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class BeanConsumeFan {
+ private static final long serialVersionUID = 1L;
+ private String name; //姓名
+ private Integer jwcode; //精网号
+ private String dept; //地区/分部
+ private String beanNum; //金豆数量
+ private String channel; //频道名称(source_name)
+ private String type; //类型source_type 单月,连续包月
+ private Integer payType; //支付方式(直播:12345,铁粉:7,文章:8)
+ private String sortField; //排序字段
+ private String sortOrder; //排序顺序
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date consumeTime; // 消费时间 (时间戳转化)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date startTime; // 开始时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date endTime; // 结束时间
+}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeGold.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeGold.java
new file mode 100644
index 0000000..2e9f885
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeGold.java
@@ -0,0 +1,23 @@
+package com.example.demo.domain.vo.bean;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanConsumeGold
+ * @description:
+ * @author: Ethan
+ * @create: 2025−07-30 16:12
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class BeanConsumeGold {
+ private static final long serialVersionUID = 1L;
+ private Integer permanentBean ; //付费金豆
+ private Integer freeBean ; //免费金豆
+ private Integer totalNum; //总条数
+}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java
new file mode 100644
index 0000000..9dc736f
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java
@@ -0,0 +1,43 @@
+package com.example.demo.domain.vo.bean;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanConsume
+ * @description:
+ * @author: Ethan
+ * @create: 2025−07-30 10:41
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class BeanConsumeLive {
+ private static final long serialVersionUID = 1L;
+ private String name; //姓名
+ private Integer jwcode; //精网号
+ private String dept; //地区/分部
+ //类型 直播: 1. 发礼物2. 发红包3. 发福袋4. 付费直播5. 加入粉丝团6. 发弹幕
+ //文章: 1. 打赏2. 付费
+ private String type; //类型
+ private String gift; //礼物名称
+ private String beanNum; //金豆数量
+ private String liveChannel; //频道名称(截取content)
+ private String liveName; //直播间名称
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date consumeTime; // 消费时间 (时间戳转化)
+ private Integer payType; //支付方式(直播:12345,铁粉:7,文章:8)
+ private String sortField; //排序字段
+ private String sortOrder; //排序顺序
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date startTime; // 开始时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date endTime; // 结束时间
+}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanRecharge.java b/src/main/java/com/example/demo/domain/vo/bean/BeanRecharge.java
index ef9c6de..88a5709 100644
--- a/src/main/java/com/example/demo/domain/vo/bean/BeanRecharge.java
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanRecharge.java
@@ -1,5 +1,9 @@
package com.example.demo.domain.vo.bean;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
/**
* @program: gold-java
* @ClassName BeanRecharge
@@ -9,5 +13,15 @@ package com.example.demo.domain.vo.bean;
* @Version 1.0
**/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
public class BeanRecharge {
+ private Integer id;//id
+ private Integer jwcode; // 精网号
+ private Integer freeBean; // 免费豆
+ private Integer permanentBean; // 永久豆
+ private String remark; //备注
+ private Integer money; // 金额
+ private String adminName; // 管理员名称
}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanRechargeInfo.java b/src/main/java/com/example/demo/domain/vo/bean/BeanRechargeInfo.java
new file mode 100644
index 0000000..ddd5372
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanRechargeInfo.java
@@ -0,0 +1,47 @@
+package com.example.demo.domain.vo.bean;
+
+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: 2025−07-30 15:11
+ * @Version 1.0
+ **/
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BeanRechargeInfo {
+
+ private Long id;//id
+ private Integer jwcode; // 精网号
+ private String name; // 姓名
+ private String market; // 所属地区
+ private Integer freeBean; // 免费豆
+ private Integer permanentBean; // 永久豆
+ private Double money; // 金额
+ private Integer num; // 数量
+ private Double amount; // 金额
+ private String orderNo; // 订单号
+ private String remark; //备注
+ private String platform; // 充值平台
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date rechargeTime; // 充值时间
+ private Integer time;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date startTime; // 开始时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date endTime; // 结束时间
+ private List markets; // 地区列表
+ private String sortField; //排序字段
+ private String sortOrder; //排序顺序
+}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanUser.java b/src/main/java/com/example/demo/domain/vo/bean/BeanUser.java
new file mode 100644
index 0000000..65fd39a
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanUser.java
@@ -0,0 +1,28 @@
+package com.example.demo.domain.vo.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanUser
+ * @description:
+ * @author: Ethan
+ * @create: 2025−08-01 10:40
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BeanUser {
+ private String name; //姓名
+ private Integer jwcode; //精网号
+ private String dept; //分部
+ private Integer beanNum; //金豆数量
+ private Integer buyBean; //付费金豆
+ private Integer freeBean; //免费金豆
+ private Integer totalCostBean; //历史消费
+ private String sortField; //排序字段
+ private String sortOrder; //排序顺序
+}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanUserCard.java b/src/main/java/com/example/demo/domain/vo/bean/BeanUserCard.java
index 8787d19..7a5597f 100644
--- a/src/main/java/com/example/demo/domain/vo/bean/BeanUserCard.java
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanUserCard.java
@@ -22,7 +22,8 @@ public class BeanUserCard {
private String name; // 客户姓名
private Integer jwcode; // 精网号
private String market; // 所属地区
+ private Integer sumBean; // 所有金豆
private Integer freeBean; // 免费豆
private Integer permanentBean; // 永久豆
- private Integer consumeNum; // 消费次数
+ private Integer consumeSum; // 消费金额
}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/GoldBean.java b/src/main/java/com/example/demo/domain/vo/bean/GoldBean.java
new file mode 100644
index 0000000..4ec287a
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/bean/GoldBean.java
@@ -0,0 +1,24 @@
+package com.example.demo.domain.vo.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: gold-java
+ * @ClassName GoldBean
+ * @description:
+ * @author: Double
+ * @create: 2025−07-31 13:10
+ * @Version 1.0
+ **/
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class GoldBean {
+ private Integer freeBean; // 免费豆
+ private Integer permanentBean; // 永久豆
+ private Double money; // 金额
+ private Integer beanNum; // 豆数量
+}
diff --git a/src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java b/src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java
index d00c03a..31cae1f 100644
--- a/src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java
+++ b/src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java
@@ -68,6 +68,6 @@ public class ConsumeUser implements Serializable {
private String sortField; //排序字段
@ExcelIgnore
private String sortOrder; //排序顺序
-
+ @ExcelIgnore
private List markets; // 地区列表
}
diff --git a/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java b/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java
index 668167f..5f5af0e 100644
--- a/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java
+++ b/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java
@@ -57,7 +57,7 @@ public class GoldDetail {
private String sortField; //排序字段
@ExcelIgnore
private String sortOrder; //排序顺序
- @ExcelIgnore
+ @ExcelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date auditTime;
@ExcelIgnore
diff --git a/src/main/java/com/example/demo/domain/vo/coin/Page.java b/src/main/java/com/example/demo/domain/vo/coin/Page.java
index d06d6bb..d763a14 100644
--- a/src/main/java/com/example/demo/domain/vo/coin/Page.java
+++ b/src/main/java/com/example/demo/domain/vo/coin/Page.java
@@ -1,6 +1,7 @@
package com.example.demo.domain.vo.coin;
import com.example.demo.domain.entity.User;
+import com.example.demo.domain.vo.bean.*;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -29,4 +30,12 @@ public class Page {
private RefundAudit refundAudit;
private RechargeUser rechargeUser;
private RoleVo roleVo;
+ private Integer payType; //支付方式(直播:12345,铁粉:7,文章:8)
+ private BeanConsumeLive beanConsumeLive; //直播金豆消费
+ private BeanConsumeFan beanConsumeFan; //铁粉金豆消费
+ private BeanConsumeArticle beanConsumeArticle; //文章金豆消费
+ private BeanRechargeInfo beanRechargeInfo; //金豆充值信息
+ private BeanConsumeGold beanConsumeGold; //金豆消费合计数
+ private BeanUser beanUser; //客户金豆余额明细
+ private BeanUserCard beanUserCard; //客户金豆卡片
}
diff --git a/src/main/java/com/example/demo/domain/vo/coin/RechargeUser.java b/src/main/java/com/example/demo/domain/vo/coin/RechargeUser.java
index 60f12d8..fb540a2 100644
--- a/src/main/java/com/example/demo/domain/vo/coin/RechargeUser.java
+++ b/src/main/java/com/example/demo/domain/vo/coin/RechargeUser.java
@@ -25,64 +25,64 @@ public class RechargeUser {
private static final long serialVersionUID = 1L;
-// @ExcelProperty("客户姓名")
+ @ExcelProperty("客户姓名")
private String name; // 客户姓名
-// @ExcelProperty("精网号")
+ @ExcelProperty("精网号")
private Integer jwcode; // 精网号
-// @ExcelProperty("所属地区")
+ @ExcelProperty("所属地区")
private String market; // 所属地区
-// @ExcelProperty("活动名称")
+ @ExcelProperty("活动名称")
private String activity; // 活动名称
-// @ExcelProperty("汇率ID")
+ @ExcelProperty("汇率ID")
private Integer rateId; // 汇率ID
-// @ExcelProperty("汇率名称")
+ @ExcelProperty("汇率名称")
private String rateName; // 汇率名称
-// @ExcelProperty("金额[分]")
+ @ExcelProperty("金额[分]")
private Integer money; // 金额[分]
-// @ExcelProperty("永久金币")
+ @ExcelProperty("永久金币")
private Integer permanentGold; // 永久金币
-// @ExcelProperty("免费金币")
+ @ExcelProperty("免费金币")
private Integer freeGold; // 免费金币
-// @ExcelProperty("支付方式")
+ @ExcelProperty("支付方式")
private String payModel; // 支付方式
-// @ExcelProperty("支付平台")
+ @ExcelProperty("支付平台")
private String payPlatform; // 支付平台
-// @ExcelProperty("支付凭证")
+ @ExcelProperty("支付凭证")
private String voucher; // 支付凭证
-// @ExcelProperty("备注")
+ @ExcelProperty("备注")
private String remark; // 备注
-// @ExcelProperty("提交人Id")
+ @ExcelProperty("提交人Id")
private Integer adminId; // 提交人Id
-// @ExcelProperty("提交人姓名")
+ @ExcelProperty("提交人姓名")
private String adminName; // 提交人姓名
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
-// @ExcelProperty("创建时间")
+ @ExcelProperty("创建时间")
private Date payTime; // 创建时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
-// @ExcelIgnore
+ @ExcelIgnore
private Date startTime; // 开始时间
-// @ExcelIgnore
+ @ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date endTime; // 结束时间
-// @ExcelIgnore
+ @ExcelIgnore
private String sortField; //排序字段
-// @ExcelIgnore
+ @ExcelIgnore
private String sortOrder; //排序顺序
-
+ @ExcelIgnore
private List markets; // 地区列表
}
diff --git a/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java b/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java
index 3575ae3..548e784 100644
--- a/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java
+++ b/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java
@@ -68,6 +68,6 @@ public class RefundUser {
private String sortField; //排序字段
@ExcelIgnore
private String sortOrder; //排序顺序
-
+ @ExcelIgnore
private List markets; // 地区列表
}
diff --git a/src/main/java/com/example/demo/mapper/bean/BeanConsumeMapper.java b/src/main/java/com/example/demo/mapper/bean/BeanConsumeMapper.java
new file mode 100644
index 0000000..701e48e
--- /dev/null
+++ b/src/main/java/com/example/demo/mapper/bean/BeanConsumeMapper.java
@@ -0,0 +1,40 @@
+package com.example.demo.mapper.bean;
+
+import com.example.demo.domain.vo.bean.*;
+import com.example.demo.domain.vo.coin.RechargeAudit;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanConsumeMapper.xml
+ * @description:
+ * @author: Ethan
+ * @create: 2025−07-30 11:56
+ * @Version 1.0
+ **/
+@Mapper
+public interface BeanConsumeMapper {
+ //获取消费用户分部
+ List getDept();
+ //筛选查询直播消费
+ List selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive);
+ //筛选查询铁粉消费
+ List selectFanBy(@Param("beanConsumeFan") BeanConsumeFan beanConsumeFan);
+ //筛选查询文章消费
+ List selectArticleBy(@Param("beanConsumeArticle") BeanConsumeArticle beanConsumeArticle);
+ //查询金豆直播消费金额
+ BeanConsumeGold selectSumLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive);
+ //查询金豆铁粉消费金额
+ BeanConsumeGold selectSumFansBy(@Param("beanConsumeFan") BeanConsumeFan beanConsumeFan);
+ //查询金豆文章消费金额
+ BeanConsumeGold selectSumArticleBy(@Param("beanConsumeArticle") BeanConsumeArticle beanConsumeArticle);
+ //查询直播礼物
+ List getLiveGift();
+ //查询直播全部频道
+ List getLiveChannel();
+
+}
+
diff --git a/src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper.java b/src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper.java
deleted file mode 100644
index aebf03b..0000000
--- a/src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.example.demo.mapper.bean;
-
-
-/**
- * @program: gold-java
- * @ClassName BeanRechargeMapper
- * @description:
- * @author: Double
- * @create: 2025−07-29 16:46
- * @Version 1.0
- **/
-
-public interface BeanRechargeMapper {
-}
diff --git a/src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper2.java b/src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper2.java
new file mode 100644
index 0000000..f61556e
--- /dev/null
+++ b/src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper2.java
@@ -0,0 +1,24 @@
+package com.example.demo.mapper.bean;
+
+
+import com.example.demo.domain.vo.bean.BeanRechargeInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanRechargeMapper
+ * @description:
+ * @author: Double
+ * @create: 2025−07-30 15:43
+ * @Version 1.0
+ **/
+
+@Mapper
+public interface BeanRechargeMapper2 {
+
+ List selectBySystem(BeanRechargeInfo beanRechargeInfo);
+
+ List systemMarket();
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java b/src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java
index 3ff34ef..66694c2 100644
--- a/src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java
+++ b/src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java
@@ -1,6 +1,7 @@
package com.example.demo.mapper.bean;
+import com.example.demo.domain.vo.bean.BeanUser;
import com.example.demo.domain.vo.bean.BeanUserCard;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -18,6 +19,13 @@ import java.util.List;
@Mapper
public interface BeanUserMapper {
+ //查询客户金豆余额
+ List selectUserBy(@Param("beanUser") BeanUser beanUser);
+
//查询用户卡片
BeanUserCard userCard(@Param("jwcode")String jwcode, @Param("markets")List markets);
+ //查询客户金豆余额合计
+ BeanUserCard SumUserBy(@Param("beanUser")BeanUser beanUser);
+ //查询客户分部
+ List getDept();
}
diff --git a/src/main/java/com/example/demo/mapper/coin/BeanRechargeMapper1.java b/src/main/java/com/example/demo/mapper/coin/BeanRechargeMapper1.java
new file mode 100644
index 0000000..f71216e
--- /dev/null
+++ b/src/main/java/com/example/demo/mapper/coin/BeanRechargeMapper1.java
@@ -0,0 +1,20 @@
+package com.example.demo.mapper.coin;
+
+
+import com.example.demo.domain.vo.bean.BeanRecharge;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanRechargeMapper
+ * @description:
+ * @author: Double
+ * @create: 2025−07-30 15:43
+ * @Version 1.0
+ **/
+
+@Mapper
+public interface BeanRechargeMapper1 {
+
+ int add(BeanRecharge recharge);
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/mapper/coin/PermissionMapper.java b/src/main/java/com/example/demo/mapper/coin/PermissionMapper.java
index 58a8e7a..92cf1d5 100644
--- a/src/main/java/com/example/demo/mapper/coin/PermissionMapper.java
+++ b/src/main/java/com/example/demo/mapper/coin/PermissionMapper.java
@@ -3,7 +3,6 @@ package com.example.demo.mapper.coin;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.AdminRole;
import com.example.demo.domain.entity.Role;
-import com.example.demo.domain.vo.coin.AdminVo;
import com.example.demo.domain.vo.coin.Permission;
import org.apache.ibatis.annotations.Mapper;
@@ -30,4 +29,16 @@ public interface PermissionMapper {
// Integer deleteAdminRole(Integer id);
Integer updateAdminRole(AdminRole adminRole);
Integer updateAdmin(Admin admin);
+
+ /**
+ * @program: gold-java
+ * @ClassName BeanConsumeMapper.xml
+ * @description:
+ * @author: Ethan
+ * @create: 2025−07-30 11:55
+ * @Version 1.0
+ **/
+
+ interface BeanConsumeMapper {
+ }
}
diff --git a/src/main/java/com/example/demo/mapper/pay/BeanRechargeMapper3.java b/src/main/java/com/example/demo/mapper/pay/BeanRechargeMapper3.java
new file mode 100644
index 0000000..8f32789
--- /dev/null
+++ b/src/main/java/com/example/demo/mapper/pay/BeanRechargeMapper3.java
@@ -0,0 +1,24 @@
+package com.example.demo.mapper.pay;
+
+
+import com.example.demo.domain.vo.bean.BeanRechargeInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanRechargeMapper
+ * @description:
+ * @author: Double
+ * @create: 2025−07-30 15:43
+ * @Version 1.0
+ **/
+
+@Mapper
+public interface BeanRechargeMapper3 {
+
+ List selectByOnline(BeanRechargeInfo beanRechargeInfo);
+
+ List systemMarket();
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/service/bean/BeanConsumeService.java b/src/main/java/com/example/demo/service/bean/BeanConsumeService.java
new file mode 100644
index 0000000..4982d03
--- /dev/null
+++ b/src/main/java/com/example/demo/service/bean/BeanConsumeService.java
@@ -0,0 +1,35 @@
+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 java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanConsumeService
+ * @description:
+ * @author: Ethan
+ * @create: 2025−07-30 11:53
+ * @Version 1.0
+ **/
+
+public interface BeanConsumeService {
+ //获取消费用户的分部
+ List getDept();
+ //筛选查询直播消费
+ Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive);
+ //筛选查询铁粉消费
+ Object selectFanBy(Integer pageNum, Integer pageSize, BeanConsumeFan beanConsumeFan);
+ //筛选查询文章消费
+ Object selectArticleBy(Integer pageNum, Integer pageSize, BeanConsumeArticle beanConsumeArticle);
+ //消费金币合计数
+ BeanConsumeGold sumConsumeGold(Page page);
+ //查询直播礼物
+ List getLiveGift();
+ //获取直播频道
+ List getLiveChannel();
+
+
+}
diff --git a/src/main/java/com/example/demo/service/bean/BeanRechargeService.java b/src/main/java/com/example/demo/service/bean/BeanRechargeService.java
index 87b1e20..fd41a35 100644
--- a/src/main/java/com/example/demo/service/bean/BeanRechargeService.java
+++ b/src/main/java/com/example/demo/service/bean/BeanRechargeService.java
@@ -1,6 +1,15 @@
package com.example.demo.service.bean;
+import com.example.demo.domain.vo.bean.BeanRechargeInfo;
+import com.example.demo.domain.vo.bean.GoldBean;
+import com.example.demo.domain.vo.coin.RefundUser;
+import com.example.demo.domain.vo.coin.Result;
+import com.example.demo.domain.vo.bean.BeanRecharge;
+import com.github.pagehelper.PageInfo;
+
+import java.util.List;
+
/**
* @program: gold-java
* @ClassName BeanRechargeService
@@ -11,4 +20,25 @@ package com.example.demo.service.bean;
**/
public interface BeanRechargeService {
-}
+
+ //线上充值
+ Result add(BeanRecharge recharge);
+
+ //系统充值
+ PageInfo selectBySystem(Integer pageNum, Integer pageSize, BeanRechargeInfo beanRechargeInfo);
+
+ //系统金豆统计
+ GoldBean statsSystemBean(BeanRechargeInfo beanRechargeInfo);
+
+ //线上充值
+ PageInfo selectByOnline(Integer pageNum, Integer pageSize, BeanRechargeInfo beanRechargeInfo);
+
+ //线上金豆统计
+ GoldBean statsOnlineBean(BeanRechargeInfo beanRechargeInfo);
+
+ //获取系统充值地区
+ List systemMarket();
+
+ //获取线上充值地区
+ List onlineMarket();
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/service/bean/BeanUserService.java b/src/main/java/com/example/demo/service/bean/BeanUserService.java
index e50db56..5dcbc47 100644
--- a/src/main/java/com/example/demo/service/bean/BeanUserService.java
+++ b/src/main/java/com/example/demo/service/bean/BeanUserService.java
@@ -2,9 +2,13 @@ package com.example.demo.service.bean;
+import com.example.demo.domain.vo.bean.BeanUser;
import com.example.demo.domain.vo.bean.BeanUserCard;
+import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
+import java.util.List;
+
/**
* @program: gold-java
* @ClassName BeanUserService
@@ -17,4 +21,11 @@ import com.example.demo.domain.vo.coin.Result;
public interface BeanUserService {
//查询用户卡片
Result userCard(String jwcode);
+ //查询客户金豆余额
+ Object selectUserBy(Integer pageNum, Integer pageSize, BeanUser beanUser);
+ //客户金豆余额合计数
+ BeanUserCard sumUserGold(Page page);
+
+ //客户 部门
+ List getDept();
}
diff --git a/src/main/java/com/example/demo/service/coin/ExportExcelService.java b/src/main/java/com/example/demo/service/coin/ExportExcelService.java
index 3001598..583c880 100644
--- a/src/main/java/com/example/demo/service/coin/ExportExcelService.java
+++ b/src/main/java/com/example/demo/service/coin/ExportExcelService.java
@@ -1,8 +1,12 @@
package com.example.demo.service.coin;
import com.example.demo.domain.entity.Export;
+import com.example.demo.domain.vo.coin.Page;
+import com.example.demo.domain.vo.coin.Result;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
+import java.util.function.Function;
/**
* @program: GOLD
@@ -18,5 +22,10 @@ public interface ExportExcelService {
Exception rechargeExcel(String message) throws Exception;
Exception consumeExcel(String message) throws Exception;
Exception refundExcel(String message) throws Exception;
+
+ Exception LiveExcel(String message) throws Exception;
List getExcel(Export export);
+
+ @Transactional
+ Exception exportExcelGeneric(String message, String exportType, Function dataFetcher) throws Exception;
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/service/listen/AiEmotionExportListener.java b/src/main/java/com/example/demo/service/listen/AiEmotionExportListener.java
deleted file mode 100644
index 2fe592c..0000000
--- a/src/main/java/com/example/demo/service/listen/AiEmotionExportListener.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.example.demo.service.listen;
-
-import cn.hutool.core.util.StrUtil;
-
-
-import com.example.demo.Util.ExecutionContextUtil;
-import com.example.demo.Util.FeiShuAlertUtil;
-import com.example.demo.Util.RedisUtil;
-import com.example.demo.domain.vo.coin.ExecutionContext;
-import com.example.demo.service.coin.ExportExcelService;
-import com.example.demo.service.queue.AbstractMessageListener;
-
-
-
-
-
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import static java.lang.Thread.sleep;
-
-
-@Component
-public class AiEmotionExportListener extends AbstractMessageListener {
-
-
- //注入ExportExcelService
- @Autowired
- private ExportExcelService exportExcelService;
-
- @Autowired
- public AiEmotionExportListener(
- RedisUtil redisQueueUtil
-
- ) {
- super(redisQueueUtil, "hwgold:queue:export_queue");
- System.out.println("监听器已启动,队列: ");
- }
-
- @Override
- protected void handleMessage(String message) {
- if (StrUtil.isBlank(message)) {
- System.err.println("redis消息队列数据为空" + message);
- }
- try {
- Thread.sleep(5000);
- exportExcelService.handleExcelExportData(message);
- } catch (Exception e) {
- logError(e, message);
- throw new RuntimeException("Failed to process HWGOLD export: " + e.getMessage(), e);
- }
-
-
- }
-
- private void logError(Exception e, String message) {
- System.err.println("Export data listener exception: " + e.getMessage());
- e.printStackTrace();
- try {
- ExecutionContext context = ExecutionContextUtil.getExecutionContext();
- String cause = "";
- if (e.getCause() != null) {
- cause = e.getCause().getMessage();
- }
- FeiShuAlertUtil.sendAlertMessage(
- context,
- e.getStackTrace()[0].getFileName(),
- e.getStackTrace()[0].getLineNumber(),
- "HWGOLD Export Error: " + e.getMessage() + " 底层错误: " + cause ,
- "Failed message: " + message
- );
- } catch (Exception alertEx) {
- System.err.println("Failed to send Feishu alert: " + alertEx.getMessage());
- }
- }
-
- @Override
- protected void handleError(Exception e, String message) {
- System.err.println("处理消息失败: " + message);
- e.printStackTrace();
- }
-
-}
diff --git a/src/main/java/com/example/demo/service/listen/BaseMessageListener.java b/src/main/java/com/example/demo/service/listen/BaseMessageListener.java
new file mode 100644
index 0000000..5244884
--- /dev/null
+++ b/src/main/java/com/example/demo/service/listen/BaseMessageListener.java
@@ -0,0 +1,67 @@
+package com.example.demo.service.listen;
+
+import cn.hutool.core.util.StrUtil;
+import com.example.demo.Util.ExecutionContextUtil;
+import com.example.demo.Util.FeiShuAlertUtil;
+import com.example.demo.Util.RedisUtil;
+import com.example.demo.domain.vo.coin.ExecutionContext;
+import com.example.demo.service.queue.AbstractMessageListener;
+
+public abstract class BaseMessageListener extends AbstractMessageListener {
+
+ protected BaseMessageListener(RedisUtil redisQueueUtil, String queueName) {
+ super(redisQueueUtil, queueName);
+ System.out.println("监听器已启动,队列: " + queueName);
+ }
+
+ @Override
+ protected void handleError(Exception e, T message) {
+ handleException(e, message.toString()); // 统一异常处理
+ }
+
+ /**
+ * 验证消息是否为空
+ */
+ protected void validateMessage(T message) {
+ if (message == null || (message instanceof String && StrUtil.isBlank((String) message))) {
+ throw new IllegalArgumentException("Redis消息队列数据为空: " + message);
+ }
+ }
+
+ /**
+ * 统一异常处理
+ */
+ protected void handleException(Exception e, String message) {
+ logError(e, message); // 记录错误日志
+ sendAlert(e, message); // 发送告警通知
+ throw new RuntimeException("Failed to process message: " + e.getMessage(), e);
+ }
+
+ /**
+ * 记录错误日志
+ */
+ protected void logError(Exception e, String message) {
+ System.err.println("Message listener exception: " + e.getMessage());
+ e.printStackTrace();
+ }
+
+ /**
+ * 发送告警通知
+ */
+ protected void sendAlert(Exception e, String message) {
+ try {
+ ExecutionContext context = ExecutionContextUtil.getExecutionContext();
+ String cause = e.getCause() != null ? e.getCause().getMessage() : "";
+ FeiShuAlertUtil.sendAlertMessage(
+ context,
+ e.getStackTrace()[0].getFileName(),
+ e.getStackTrace()[0].getLineNumber(),
+ "Message Listener Error: " + e.getMessage() + " 底层错误: " + cause,
+ "Failed message: " + message
+ );
+ } catch (Exception alertEx) {
+ System.err.println("Failed to send Feishu alert: " + alertEx.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/example/demo/service/listen/ConsumeListener.java b/src/main/java/com/example/demo/service/listen/ConsumeListener.java
index bcf76b1..0c70347 100644
--- a/src/main/java/com/example/demo/service/listen/ConsumeListener.java
+++ b/src/main/java/com/example/demo/service/listen/ConsumeListener.java
@@ -19,62 +19,28 @@ import org.springframework.stereotype.Component;
* @Version 1.0
**/
@Component
-public class ConsumeListener extends AbstractMessageListener {
+public class ConsumeListener extends BaseMessageListener {
//注入ExportExcelService
@Autowired
private ExportExcelService exportService;
@Autowired
- public ConsumeListener(
- RedisUtil redisQueueUtil
-
- ) {
+ public ConsumeListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil, "consume:queue:export_queue");
- System.out.println("监听器已启动,队列: ");
}
@Override
protected void handleMessage(String message) {
- if (StrUtil.isBlank(message)) {
- System.err.println("redis消息队列数据为空" + message);
- }
+ validateMessage( message);
try {
Thread.sleep(5000);
exportService.consumeExcel(message);
} catch (Exception e) {
- logError(e, message);
- throw new RuntimeException("Failed to process HWGOLD export: " + e.getMessage(), e);
+ handleException(e, message);
}
}
- private void logError(Exception e, String message) {
- System.err.println("Export data listener exception: " + e.getMessage());
- e.printStackTrace();
- try {
- ExecutionContext context = ExecutionContextUtil.getExecutionContext();
- String cause = "";
- if (e.getCause() != null) {
- cause = e.getCause().getMessage();
- }
- FeiShuAlertUtil.sendAlertMessage(
- context,
- e.getStackTrace()[0].getFileName(),
- e.getStackTrace()[0].getLineNumber(),
- "HWGOLD Export Error: " + e.getMessage() + " 底层错误: " + cause ,
- "Failed message: " + message
- );
- } catch (Exception alertEx) {
- System.err.println("Failed to send Feishu alert: " + alertEx.getMessage());
- }
- }
-
- @Override
- protected void handleError(Exception e, String message) {
- System.err.println("处理消息失败: " + message);
- e.printStackTrace();
- }
-
}
diff --git a/src/main/java/com/example/demo/service/listen/GoldDetailListener.java b/src/main/java/com/example/demo/service/listen/GoldDetailListener.java
new file mode 100644
index 0000000..fd9662e
--- /dev/null
+++ b/src/main/java/com/example/demo/service/listen/GoldDetailListener.java
@@ -0,0 +1,50 @@
+package com.example.demo.service.listen;
+
+import cn.hutool.core.util.StrUtil;
+
+
+import com.example.demo.Util.ExecutionContextUtil;
+import com.example.demo.Util.FeiShuAlertUtil;
+import com.example.demo.Util.RedisUtil;
+import com.example.demo.domain.vo.coin.ExecutionContext;
+import com.example.demo.service.coin.ExportExcelService;
+import com.example.demo.service.queue.AbstractMessageListener;
+
+
+
+
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import static java.lang.Thread.sleep;
+
+
+@Component
+public class GoldDetailListener extends BaseMessageListener {
+
+
+ //注入ExportExcelService
+ @Autowired
+ private ExportExcelService exportExcelService;
+
+ @Autowired
+ public GoldDetailListener(RedisUtil redisQueueUtil) {
+ super(redisQueueUtil, "hwgold:queue:export_queue");
+ }
+
+ @Override
+ protected void handleMessage(String message) {
+ validateMessage( message);
+ try {
+ Thread.sleep(5000);
+ exportExcelService.handleExcelExportData(message);
+ } catch (Exception e) {
+ handleException(e, message);
+ }
+
+
+ }
+
+}
diff --git a/src/main/java/com/example/demo/service/listen/GoldListener.java b/src/main/java/com/example/demo/service/listen/GoldListener.java
index e454fa2..edf7b8b 100644
--- a/src/main/java/com/example/demo/service/listen/GoldListener.java
+++ b/src/main/java/com/example/demo/service/listen/GoldListener.java
@@ -20,62 +20,27 @@ import org.springframework.stereotype.Component;
* @Version 1.0
**/
@Component
-public class GoldListener extends AbstractMessageListener {
+public class GoldListener extends BaseMessageListener {
//注入ExportExcelService
@Autowired
private ExportExcelService exportExcelService;
@Autowired
- public GoldListener(
- RedisUtil redisQueueUtil
-
- ) {
+ public GoldListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil, "gold:queue:export_queue");
- System.out.println("监听器已启动,队列: ");
}
@Override
protected void handleMessage(String message) {
- if (StrUtil.isBlank(message)) {
- System.err.println("redis消息队列数据为空" + message);
- }
+ validateMessage( message);
try {
Thread.sleep(5000);
exportExcelService.handleExcel(message);
} catch (Exception e) {
- logError(e, message);
- throw new RuntimeException("Failed to process HWGOLD export: " + e.getMessage(), e);
+ handleException(e, message);
}
-
}
- private void logError(Exception e, String message) {
- System.err.println("Export data listener exception: " + e.getMessage());
- e.printStackTrace();
- try {
- ExecutionContext context = ExecutionContextUtil.getExecutionContext();
- String cause = "";
- if (e.getCause() != null) {
- cause = e.getCause().getMessage();
- }
- FeiShuAlertUtil.sendAlertMessage(
- context,
- e.getStackTrace()[0].getFileName(),
- e.getStackTrace()[0].getLineNumber(),
- "HWGOLD Export Error: " + e.getMessage() + " 底层错误: " + cause ,
- "Failed message: " + message
- );
- } catch (Exception alertEx) {
- System.err.println("Failed to send Feishu alert: " + alertEx.getMessage());
- }
}
- @Override
- protected void handleError(Exception e, String message) {
- System.err.println("处理消息失败: " + message);
- e.printStackTrace();
- }
-
-}
-
diff --git a/src/main/java/com/example/demo/service/listen/LiveListener.java b/src/main/java/com/example/demo/service/listen/LiveListener.java
new file mode 100644
index 0000000..bf9f863
--- /dev/null
+++ b/src/main/java/com/example/demo/service/listen/LiveListener.java
@@ -0,0 +1,38 @@
+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 LiveListener
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−07-31 17:53
+ * @Version 1.0
+ **/
+@Component
+public class LiveListener extends BaseMessageListener{
+
+ @Autowired
+ private ExportExcelService exportExcelService;
+
+ @Autowired
+ public LiveListener(RedisUtil redisQueueUtil) {
+ super(redisQueueUtil, "live:queue:export_queue");
+ }
+
+ @Override
+ protected void handleMessage(String message) {
+ validateMessage( message);
+ try {
+ Thread.sleep(5000);
+ exportExcelService.LiveExcel(message);
+ } catch (Exception e) {
+ handleException(e, message);
+ }
+ }
+
+ }
diff --git a/src/main/java/com/example/demo/service/listen/RechargeListener.java b/src/main/java/com/example/demo/service/listen/RechargeListener.java
index 79f961f..e0dfb1d 100644
--- a/src/main/java/com/example/demo/service/listen/RechargeListener.java
+++ b/src/main/java/com/example/demo/service/listen/RechargeListener.java
@@ -1,80 +1,32 @@
package com.example.demo.service.listen;
-import cn.hutool.core.util.StrUtil;
-import com.example.demo.Util.ExecutionContextUtil;
-import com.example.demo.Util.FeiShuAlertUtil;
import com.example.demo.Util.RedisUtil;
-import com.example.demo.domain.vo.coin.ExecutionContext;
import com.example.demo.service.coin.ExportExcelService;
-import com.example.demo.service.queue.AbstractMessageListener;
+import com.example.demo.service.listen.BaseMessageListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-/**
- * @program: GOLD
- * @ClassName RechargeListener
- * @description:
- * @author: huangqizhen
- * @create: 2025−07-01 15:46
- * @Version 1.0
- **/
+import static org.ehcache.core.exceptions.StorePassThroughException.handleException;
+
@Component
-public class RechargeListener extends AbstractMessageListener {
- //注入ExportExcelService
+public class RechargeListener extends BaseMessageListener {
+
@Autowired
private ExportExcelService exportService;
@Autowired
- public RechargeListener(
- RedisUtil redisQueueUtil
-
- ) {
+ public RechargeListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil, "recharge:queue:export_queue");
- System.out.println("监听器已启动,队列: ");
}
@Override
protected void handleMessage(String message) {
- if (StrUtil.isBlank(message)) {
- System.err.println("redis消息队列数据为空" + message);
- }
+ validateMessage(message); // 验证消息
try {
- Thread.sleep(5000);
+ Thread.sleep(5000); // 模拟延迟处理
exportService.rechargeExcel(message);
} catch (Exception e) {
- logError(e, message);
- throw new RuntimeException("Failed to process HWGOLD export: " + e.getMessage(), e);
+ handleException(e, message); // 统一异常处理
}
-
-
}
-
- private void logError(Exception e, String message) {
- System.err.println("Export data listener exception: " + e.getMessage());
- e.printStackTrace();
- try {
- ExecutionContext context = ExecutionContextUtil.getExecutionContext();
- String cause = "";
- if (e.getCause() != null) {
- cause = e.getCause().getMessage();
- }
- FeiShuAlertUtil.sendAlertMessage(
- context,
- e.getStackTrace()[0].getFileName(),
- e.getStackTrace()[0].getLineNumber(),
- "HWGOLD Export Error: " + e.getMessage() + " 底层错误: " + cause ,
- "Failed message: " + message
- );
- } catch (Exception alertEx) {
- System.err.println("Failed to send Feishu alert: " + alertEx.getMessage());
- }
- }
-
- @Override
- protected void handleError(Exception e, String message) {
- System.err.println("处理消息失败: " + message);
- e.printStackTrace();
- }
-
-}
-
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/service/listen/RefundListener.java b/src/main/java/com/example/demo/service/listen/RefundListener.java
index 791ab30..fc48600 100644
--- a/src/main/java/com/example/demo/service/listen/RefundListener.java
+++ b/src/main/java/com/example/demo/service/listen/RefundListener.java
@@ -19,62 +19,26 @@ import org.springframework.stereotype.Component;
* @Version 1.0
**/
@Component
-public class RefundListener extends AbstractMessageListener {
+public class RefundListener extends BaseMessageListener {
//注入ExportExcelService
@Autowired
private ExportExcelService exportExcelService;
@Autowired
- public RefundListener(
- RedisUtil redisQueueUtil
-
- ) {
+ public RefundListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil, "refund:queue:export_queue");
- System.out.println("监听器已启动,队列: ");
}
@Override
protected void handleMessage(String message) {
- if (StrUtil.isBlank(message)) {
- System.err.println("redis消息队列数据为空" + message);
- }
+ validateMessage( message);
try {
Thread.sleep(5000);
exportExcelService.refundExcel(message);
} catch (Exception e) {
- logError(e, message);
- throw new RuntimeException("Failed to process HWGOLD export: " + e.getMessage(), e);
+ handleException(e, message);
}
}
-
- private void logError(Exception e, String message) {
- System.err.println("Export data listener exception: " + e.getMessage());
- e.printStackTrace();
- try {
- ExecutionContext context = ExecutionContextUtil.getExecutionContext();
- String cause = "";
- if (e.getCause() != null) {
- cause = e.getCause().getMessage();
- }
- FeiShuAlertUtil.sendAlertMessage(
- context,
- e.getStackTrace()[0].getFileName(),
- e.getStackTrace()[0].getLineNumber(),
- "HWGOLD Export Error: " + e.getMessage() + " 底层错误: " + cause ,
- "Failed message: " + message
- );
- } catch (Exception alertEx) {
- System.err.println("Failed to send Feishu alert: " + alertEx.getMessage());
- }
- }
-
- @Override
- protected void handleError(Exception e, String message) {
- System.err.println("处理消息失败: " + message);
- e.printStackTrace();
- }
-
}
-
diff --git a/src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java
new file mode 100644
index 0000000..8bcc656
--- /dev/null
+++ b/src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java
@@ -0,0 +1,86 @@
+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.mapper.bean.BeanConsumeMapper;
+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.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanConsumeServiceImpl
+ * @description:
+ * @author: Ethan
+ * @create: 2025−07-30 11:53
+ * @Version 1.0
+ **/
+@Service
+public class BeanConsumeServiceImpl implements BeanConsumeService {
+ @Autowired
+ private BeanConsumeMapper BeanConsumeMapper;
+
+ //获取消费用户分部
+ @Override
+ public List getDept() {
+ List deptList = BeanConsumeMapper.getDept();
+ return deptList;
+ }
+ //筛选查询直播消费
+ @Override
+ public Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive) {
+ PageHelper.startPage(pageNum, pageSize);
+ List beanConsumeLives = BeanConsumeMapper.selectLiveBy(beanConsumeLive);
+ return new PageInfo<>(beanConsumeLives);
+ }
+ //筛选查询铁粉消费
+ @Override
+ public Object selectFanBy(Integer pageNum, Integer pageSize, BeanConsumeFan beanConsumeFan) {
+ PageHelper.startPage(pageNum, pageSize);
+ List beanConsumeFans = BeanConsumeMapper.selectFanBy(beanConsumeFan);
+ return new PageInfo<>(beanConsumeFans);
+ }
+ //筛选查询文章消费
+ @Override
+ public Object selectArticleBy(Integer pageNum, Integer pageSize, BeanConsumeArticle beanConsumeArticle) {
+ PageHelper.startPage(pageNum, pageSize);
+ List beanConsumeArticles = BeanConsumeMapper.selectArticleBy(beanConsumeArticle);
+ return new PageInfo<>(beanConsumeArticles);
+ }
+
+ @Override
+ public BeanConsumeGold sumConsumeGold(Page page) {
+ BeanConsumeGold gold = new BeanConsumeGold();
+ Integer payType = page.getPayType();
+ if (payType==1) {
+ //直播消费合计
+ gold = BeanConsumeMapper.selectSumLiveBy(page.getBeanConsumeLive());
+ }else if (payType==7) {
+ //充值消费合计
+ gold = BeanConsumeMapper.selectSumFansBy(page.getBeanConsumeFan());
+ }else if (payType==8) {
+ //文章消费合计
+ gold = BeanConsumeMapper.selectSumArticleBy(page.getBeanConsumeArticle());
+ }
+
+ return gold;
+ }
+ //查询直播礼物
+ @Override
+ public List getLiveGift() {
+
+ return BeanConsumeMapper.getLiveGift();
+ }
+ //查询直播全部频道
+ @Override
+ public List getLiveChannel() {
+ return BeanConsumeMapper.getLiveChannel();
+ }
+}
diff --git a/src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java
index e055363..5b31ab8 100644
--- a/src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java
@@ -1,6 +1,28 @@
package com.example.demo.serviceImpl.bean;
+import com.example.demo.domain.vo.bean.BeanRecharge;
+import com.example.demo.domain.vo.bean.BeanRechargeInfo;
+import com.example.demo.domain.vo.bean.GoldBean;
+import com.example.demo.domain.vo.coin.Gold;
+import com.example.demo.domain.vo.coin.RechargeUser;
+import com.example.demo.domain.vo.coin.Result;
+import com.example.demo.mapper.bean.BeanRechargeMapper2;
+import com.example.demo.mapper.coin.BeanRechargeMapper1;
+import com.example.demo.mapper.pay.BeanRechargeMapper3;
+import com.example.demo.service.bean.BeanRechargeService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import lombok.RequiredArgsConstructor;
+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.Objects;
+import java.util.UUID;
+import java.util.stream.Collectors;
/**
* @program: gold-java
@@ -10,7 +32,180 @@ import org.springframework.stereotype.Service;
* @create: 2025−07-29 16:47
* @Version 1.0
**/
-
@Service
-public class BeanRechargeServiceImpl {
-}
+@RequiredArgsConstructor
+public class BeanRechargeServiceImpl implements BeanRechargeService {
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+ @Autowired
+ private BeanRechargeMapper2 beanRechargeMapper2;
+
+ @Autowired
+ private BeanRechargeMapper1 beanRechargeMapper1;
+
+ @Autowired
+ private BeanRechargeMapper3 beanRechargeMapper3;
+
+
+ //新增金豆
+ @Override
+ public Result add(BeanRecharge recharge) {
+ try {
+ // 验证精网号是否有效
+ if (recharge.getJwcode() == null || recharge.getJwcode().toString().isEmpty()) {
+ return Result.error("精网号不能为空");
+ }
+
+ // 验证免费豆和永久豆是否为非负数
+ if (recharge.getFreeBean() < 0 || recharge.getPermanentBean() < 0) {
+ return Result.error("免费豆和永久豆不能为负数");
+ }
+ // 验证免费豆和永久豆是否为非负数
+ if (recharge.getFreeBean() > 999999 || recharge.getPermanentBean() > 999999) {
+ return Result.error("免费豆和永久豆不能超过999999");
+ }
+ // 验证免费豆和永久豆是否均为0
+ if (recharge.getFreeBean() == 0 && recharge.getPermanentBean() == 0) {
+ return Result.error("免费豆和永久豆不能同时为0");
+ }
+ // 验证备注是否为空
+ if (recharge.getRemark() == null || recharge.getRemark().toString().isEmpty()) {
+ return Result.error("备注不能为空");
+ }
+ if(recharge.getAdminName() == null || recharge.getAdminName().toString().isEmpty()){
+ return Result.error("管理员名称不能为空");
+ }
+ beanRechargeMapper1.add(recharge);
+// String jwcode = recharge.getJwcode().toString();
+// String op = "recharge"; // 操作类型(根据实际业务定义,例如"recharge"表示充值)
+// String content = recharge.getRemark(); // 备注作为content参数
+// String orderNo = UUID.randomUUID().toString().replace("-", ""); // 生成唯一订单号(去除横线)
+//
+// // 2. 构建接口URL及参数
+// String apiUrl = "http://47.92.148.30:3003/mock/61/hljw/api/user/gold";
+// UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(apiUrl)
+// .queryParam("jwcode", jwcode)
+// .queryParam("op", op)
+// .queryParam("gold", recharge.getPermanentBean())
+// .queryParam("content", content)
+// .queryParam("order_no", orderNo);
+//
+// // 3. 发送GET请求
+// ResponseEntity 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 PageInfo selectBySystem(Integer pageNum, Integer pageSize, BeanRechargeInfo beanRechargeInfo){
+ PageHelper.startPage(pageNum, pageSize);
+ List beanRechargeInfos = beanRechargeMapper2.selectBySystem(beanRechargeInfo);
+ return new PageInfo<>(beanRechargeInfos);
+ }
+
+ //统计系统金豆记录
+ @Override
+ public GoldBean statsSystemBean(BeanRechargeInfo beanRechargeInfo) {
+ GoldBean gold = new GoldBean();
+ List beanRechargeInfos = beanRechargeMapper2.selectBySystem(beanRechargeInfo);
+
+ // 初始化累加器
+ int permanentGoldSum = 0;
+ int freeGoldSum = 0;
+ Double moneySum = 0.0;
+
+ // 遍历充值记录并累加金币
+ for (BeanRechargeInfo info : beanRechargeInfos) {
+ // 累加永久金币
+ if (info.getPermanentBean() != null) {
+ permanentGoldSum += info.getPermanentBean();
+ }
+ // 累加免费金币
+ if (info.getFreeBean() != null) {
+ freeGoldSum += info.getFreeBean();
+ }
+ // 累加金额
+ if (info.getMoney() != null) {
+ moneySum += info.getMoney();
+ }
+ }
+
+ // 将累加结果设置到Gold对象
+ gold.setPermanentBean(permanentGoldSum);
+ gold.setFreeBean(freeGoldSum);
+ gold.setMoney(moneySum);
+ gold.setBeanNum(permanentGoldSum+freeGoldSum);
+ return gold;
+ }
+
+ @Override
+ public List systemMarket() {
+ List list = beanRechargeMapper2.systemMarket();
+ // 使用 Java 8 的 Stream API 过滤 null 和空字符串
+ List filteredList = list.stream()
+ .filter(Objects::nonNull) // 过滤掉 null 值
+ .filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
+ .collect(Collectors.toList());
+ return filteredList;
+ }
+
+ //线上充值明细
+ @Override
+ public PageInfo selectByOnline(Integer pageNum, Integer pageSize, BeanRechargeInfo beanRechargeInfo){
+ PageHelper.startPage(pageNum, pageSize);
+ List beanRechargeInfos = beanRechargeMapper3.selectByOnline(beanRechargeInfo);
+ return new PageInfo<>(beanRechargeInfos);
+ }
+
+ //统计线上金豆记录
+ @Override
+ public GoldBean statsOnlineBean(BeanRechargeInfo beanRechargeInfo) {
+ GoldBean gold = new GoldBean();
+ List beanRechargeInfos = beanRechargeMapper3.selectByOnline(beanRechargeInfo);
+
+ // 初始化累加器
+ int countSum = 0;
+ Double moneySum = 0.0;
+
+ // 遍历充值记录并累加金币
+ for (BeanRechargeInfo info : beanRechargeInfos) {
+ // 累加数量
+ if (info.getNum() != null) {
+ countSum += info.getNum();
+ }
+ // 累加金额
+ if (info.getMoney() != null) {
+ moneySum += info.getMoney();
+ }
+ }
+
+ // 将累加结果设置到Gold对象
+ gold.setBeanNum(countSum);
+ gold.setMoney(moneySum);
+ return gold;
+ }
+
+
+
+ @Override
+ public List onlineMarket() {
+ List list = beanRechargeMapper3.systemMarket();
+ // 使用 Java 8 的 Stream API 过滤 null 和空字符串
+ List filteredList = list.stream()
+ .filter(Objects::nonNull) // 过滤掉 null 值
+ .filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
+ .collect(Collectors.toList());
+ return filteredList;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java
index ca21b09..415963a 100644
--- a/src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java
@@ -2,10 +2,15 @@ package com.example.demo.serviceImpl.bean;
import com.example.demo.Util.JWTUtil;
import com.example.demo.domain.entity.Admin;
+import com.example.demo.domain.vo.bean.BeanConsumeArticle;
+import com.example.demo.domain.vo.bean.BeanUser;
import com.example.demo.domain.vo.bean.BeanUserCard;
+import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.mapper.bean.BeanUserMapper;
import com.example.demo.service.bean.BeanUserService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -51,4 +56,21 @@ public class BeanUserServiceImpl implements BeanUserService {
return Result.error("用户查找不到");
}
}
+ //查询客户金豆余额
+ @Override
+ public Object selectUserBy(Integer pageNum, Integer pageSize, BeanUser beanUser) {
+ PageHelper.startPage(pageNum, pageSize);
+ List beanUsers = beanUserMapper.selectUserBy(beanUser);
+ return new PageInfo<>(beanUsers);
+ }
+ //客户金豆余额合计数
+ @Override
+ public BeanUserCard sumUserGold(Page page) {
+ return beanUserMapper.SumUserBy(page.getBeanUser());
+ }
+
+ @Override
+ public List getDept() {
+ return beanUserMapper.getDept();
+ }
}
diff --git a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
index b2895f1..06233fe 100644
--- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
@@ -6,6 +6,7 @@ import com.alibaba.excel.ExcelWriter;
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.coin.ConsumeController;
import com.example.demo.controller.coin.GoldDetailController;
import com.example.demo.controller.coin.RechargeController;
@@ -14,6 +15,8 @@ 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.BeanConsumeLive;
+import com.example.demo.domain.vo.bean.BeanPage;
import com.example.demo.domain.vo.coin.*;
import com.example.demo.mapper.coin.ExportMapper;
@@ -42,6 +45,7 @@ import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
+import java.util.function.Function;
@Service
@@ -65,6 +69,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
@Autowired
private ConsumeController consumeController;
@Autowired
+ private BeanConsumeController beanConsumeController;
+ @Autowired
private AuthenticationManager authenticationManager;
// 每页查询的数据量
private static final int PAGE_SIZE = 1000;
@@ -73,924 +79,110 @@ public class ExportExcelServiceImpl implements ExportExcelService {
- @Transactional
- @Override
- public Exception handleExcelExportData(String message) throws Exception {
- System.out.println("明细导出excel数据开始执行:" + message);
- long sTime = System.currentTimeMillis();
- Long recordId = null;
- String fileName = null;
- File tempFile = null;
- OutputStream outputStream = null;
- ExcelWriter excelWriter = null;
-
-
- try {
- // 1. 解析JSON任务
- JsonNode rootNode = objectMapper.readTree(message);
- // 2. 获取基本参数
- recordId = rootNode.path("recordId").asLong();
- JsonNode requestDataNode = rootNode.path("requestData");
- JsonNode token = requestDataNode.path("token");
- String tokenValue = token.asText();
- JsonNode goldDetailNode = requestDataNode.path("goldDetail");
- GoldDetail goldDetail = objectMapper.treeToValue(goldDetailNode, GoldDetail.class);
-
- // 3. 验证导出记录
- AiEmotionExportRecordVO record = validateExportRecord(recordId);
- if (record == null) return null;
- //4. 更新状态为处理中
- aiEmotionService.updateStatus(recordId, 1, "", "", 0);
- // 5. 准备Excel文件
- fileName = record.getFileName();
- // 初始化临时文件(保存到本地临时目录)
- tempFile = File.createTempFile("export_", ".xlsx");
- outputStream = new FileOutputStream(tempFile); // 使用文件输出流
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- // 从JSON中提取单个值
-
- Date startTime = null;
- if (goldDetailNode.has("startTime") && goldDetailNode.get("startTime") != null) {
- String startTimeStr = goldDetailNode.get("startTime").asText();
- if (!"null".equalsIgnoreCase(startTimeStr) && !startTimeStr.trim().isEmpty()) {
- try {
- startTime = dateFormat.parse(startTimeStr);
- } catch (ParseException e) {
- System.err.println("无法解析 startTime: " + startTimeStr);
- e.printStackTrace();
- }
- }
- }
-
- // 解析 endTime
- Date endTime = null;
-
- if (goldDetailNode.has("endTime") && goldDetailNode.get("endTime") != null) {
- String endTimeStr = goldDetailNode.get("endTime").asText();
- if (!"null".equalsIgnoreCase(endTimeStr) && !endTimeStr.trim().isEmpty()) {
- try {
- endTime = dateFormat.parse(endTimeStr);
- } catch (ParseException e) {
- System.err.println("无法解析 endTime: " + endTimeStr);
- e.printStackTrace();
- }
- }
- }
-
- try {
- // 6. 初始化Excel写入器(指向本地文件流)
- excelWriter = EasyExcel.write(outputStream, GoldDetail.class).build();
- WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
- // 7. 分页查询并写入数据
- Page page = new Page();
- page.setGoldDetail(goldDetail);
- if(goldDetail.getMarkets()==null||goldDetail.getMarkets().isEmpty()){
- Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(tokenValue), Admin.class);
- List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
- if(!markets.contains("总部")) {
- page.getGoldDetail().setMarkets(markets);
- }
- }
- page.setPageNum(1);
- page.setPageSize(5000);
- Integer totalCount = 0;
-
- boolean hasMore = true;
- while (hasMore) {
- Result pageResult = goldDetailController.ExcelGoldDetail(page);
- Integer code = pageResult.getCode();
- Object data = pageResult.getData();
-
- if (code == 200) {
- // 判断 data 是否是 PageInfo 类型
- if (!(data instanceof PageInfo>)) {
- log.error("返回数据类型错误,期望 PageInfo,实际为:{}", data.getClass());
- hasMore = false;
- continue;
- }
-
- @SuppressWarnings("unchecked")
- PageInfo pageInfo = (PageInfo) data;
-
- Long total = (long) pageInfo.getTotal(); // 转换为 long
- List list = pageInfo.getList();
-
- if (list == null || list.isEmpty()) {
- hasMore = false;
- } else {
- // 写入 Excel 数据
- excelWriter.write(list, writeSheet);
-
- page.setPageNum(page.getPageNum() + 1);
- totalCount += list.size();
- log.info("导出进度 recordId: {}, 已处理: {}条", recordId, totalCount);
-
- hasMore = totalCount < total;
- }
- } else {
- hasMore = false;
- log.error("获取数据失败,状态码: {}", code);
- }
- }
- // 7. 完成Excel写入(所有数据写入后关闭写入器)
- if (excelWriter != null) {
- excelWriter.finish();
- }
- if (outputStream != null) {
- outputStream.flush(); // 确保所有数据写入
- outputStream.close(); // 关闭文件流
- }
- // 检查文件是否存在且不为空
- if (tempFile != null && tempFile.exists() && tempFile.length() > 0) {
- // 8. 上传到OSS(读取本地临时文件)
- // 获取接口的基础 URL
- String uploadUrl = this.uploadUrl;
- try {
- // 1. 创建上传工具实例
- ExcelUploadUtil uploadUtil = new ExcelUploadUtil(uploadUrl);
-
- // 2. 准备要上传的文件
- File excelFile = new File(tempFile.toURI());
- try {
- // 3. 执行上传
- String result = uploadUtil.uploadExcel(excelFile, "export/excel/");
- // 1. 解析JSON任务
-// JsonNode uploadResult = objectMapper.readTree(result);
-// System.out.println(uploadResult+"11111111111111111111111");
-// long code = uploadResult.path("code").asLong();
-// String url = String.valueOf(uploadResult.path("data"));
-// url = url.replace("\"", "");
-// if (code == 1) {
-// // 3. 验证导出记录decodecode
-// aiEmotionService.updateStatus(recordId, 2, url, "", totalCount);
-// } else {
-// //更新失败
-// aiEmotionService.updateStatus(recordId, 3, "", url, 0);
-// }
- JsonNode uploadResult = objectMapper.readTree(result);
- long code = uploadResult.path("code").asLong();
-
- String fileUrl = "";
- JsonNode dataNode = uploadResult.path("data");
- if (dataNode.isObject()) {
- fileUrl = dataNode.path("url").asText();
- } else if (dataNode.isTextual()) {
- fileUrl = dataNode.asText(); // 如果 data 是直接字符串 URL
- }
-
- log.info("解析到的URL: {}", fileUrl);
-
- if (code == 200 && !fileUrl.isEmpty()) {
- aiEmotionService.updateStatus(recordId, 2, fileUrl, "", totalCount);
- } else {
- aiEmotionService.updateStatus(recordId, 3, "", "上传成功但URL为空或解析失败", 0);
- }
- } catch (Exception e) {
- //更新失败
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- throw new Exception("文件上传云端失败1", e);
- }
- } catch (Exception e) {
- log.error("上传文件失败 recordId: {}, 文件名: {}", recordId, fileName, e);
- //更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- throw new Exception("文件上传云端失败2", e);
- }
- } else {
- throw new Exception("导出的Excel文件不存在或为空");
- }
-
- } catch (Exception e) {
- System.out.println("导出异常" + e.getMessage());
- log.error("导出任务处理失败 recordId: {}", recordId, e);
- // 更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- throw new Exception("导出异常", e);
- } finally {
- // 确保资源被关闭
- try {
- if (excelWriter != null) {
- excelWriter.finish();
- }
- if (outputStream != null) {
- outputStream.close();
- }
- } catch (Exception e) {
- log.error("关闭资源失败", e);
- throw new Exception("excel文件关闭资源失败", e);
- }
- }
- } catch (Exception e) {
- log.error("导出任务处理失败 recordId: {}", recordId, e);
- // 更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- System.out.println("<导出失败>" + e.getMessage());
- throw new Exception("导出任务处理失败", e);
- } finally {
- // 清理临时文件
- if (tempFile != null && tempFile.exists()) {
- try {
- if (tempFile.delete()) {
- log.info("临时文件已删除: {}", tempFile.getAbsolutePath());
- } else {
- log.warn("无法删除临时文件: {}", tempFile.getAbsolutePath());
- }
- } catch (Exception e) {
- log.error("删除临时文件失败", e.getMessage());
- throw new Exception("删除临时文件失败", e);
- }
- }
- long eTime = System.currentTimeMillis();
- log.info("导出任务完成,耗时: {}毫秒", (eTime - sTime));
- }
- return null;
- }
-
-
-
- @Transactional
- @Override
- public Exception handleExcel(String message) throws Exception {
- System.out.println("明细导出excel数据开始执行:" + message);
- long stTime = System.currentTimeMillis();
- Long recordId = null;
- String fileName = null;
- File tempFile = null;
- OutputStream outputStream = null;
- ExcelWriter excelWriter = null;
-
- try {
- // 1. 解析JSON任务
- JsonNode rootNode = objectMapper.readTree(message);
- // 2. 获取基本参数
- recordId = rootNode.path("recordId").asLong();
- JsonNode requestDataNode = rootNode.path("requestData");
- JsonNode token = requestDataNode.path("token");
- String tokenValue = token.asText();
- JsonNode userNode = requestDataNode.path("user");
- User user = objectMapper.treeToValue(userNode, User.class);
- // 3. 验证导出记录
- AiEmotionExportRecordVO record = validateExportRecord(recordId);
- if (record == null) return null;
- //4. 更新状态为处理中
- aiEmotionService.updateStatus(recordId, 1, "", "", 0);
- // 5. 准备Excel文件
- fileName = record.getFileName();
- // 初始化临时文件(保存到本地临时目录)
- tempFile = File.createTempFile("export_", ".xlsx");
- outputStream = new FileOutputStream(tempFile); // 使用文件输出流
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- // 从JSON中提取单个值
-// String text = requestDataNode.has("text") ? requestDataNode.get("text").asText() : null;
-// Integer sort = requestDataNode.has("sort") ? requestDataNode.get("sort").asInt() : null;
-// String field = requestDataNode.has("field") ? requestDataNode.get("field").asText() : null;
-// String deptId = requestDataNode.has("deptId") ? requestDataNode.get("deptId").asText() : null;
-
- Date startTime = null;
- if (userNode.has("startTime") && userNode.get("startTime") != null) {
- String startTimeStr = userNode.get("startTime").asText();
- if (!"null".equalsIgnoreCase(startTimeStr) && !startTimeStr.trim().isEmpty()) {
- try {
- startTime = dateFormat.parse(startTimeStr);
- } catch (ParseException e) {
- System.err.println("无法解析 startTime: " + startTimeStr);
- e.printStackTrace();
- }
- }
- }
-
- // 解析 endTime
- Date endTime = null;
-
- if (userNode.has("endTime") && userNode.get("endTime") != null) {
- String endTimeStr = userNode.get("endTime").asText();
- if (!"null".equalsIgnoreCase(endTimeStr) && !endTimeStr.trim().isEmpty()) {
- try {
- endTime = dateFormat.parse(endTimeStr);
- } catch (ParseException e) {
- System.err.println("无法解析 endTime: " + endTimeStr);
- e.printStackTrace();
- }
- }
- }
-
- try {
- // 6. 初始化Excel写入器(指向本地文件流)
- excelWriter = EasyExcel.write(outputStream, User.class).build();
- WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
- // 7. 分页查询并写入数据
- Page page = new Page();
- page.setUser(user);
- if(user.getMarkets()==null||user.getMarkets().isEmpty()){
- Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(tokenValue), Admin.class);
- List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
- if(!markets.contains("总部")) {
- page.getUser().setMarkets(markets);
- }
- }
- page.setPageNum(1);
- page.setPageSize(5000);
- Integer totalCount = 0;
- boolean hasMore = true;
- while (hasMore) {
- Result pageResult = goldDetailController.ExcelGold(page);
- Integer code = pageResult.getCode();
- Object data = pageResult.getData();
-
- if (code == 200) {
- // 判断 data 是否是 PageInfo 类型
- if (!(data instanceof PageInfo>)) {
- log.error("返回数据类型错误,期望 PageInfo,实际为:{}", data.getClass());
- hasMore = false;
- continue;
- }
-
- @SuppressWarnings("unchecked")
- PageInfo pageInfo = (PageInfo) data;
-
- Long total = (long) pageInfo.getTotal(); // 转换为 long
- List list = pageInfo.getList();
-
- if (list == null || list.isEmpty()) {
- hasMore = false;
- } else {
- // 写入 Excel 数据
- excelWriter.write(list, writeSheet);
-
- page.setPageNum(page.getPageNum() + 1);
- totalCount += list.size();
- log.info("导出进度 recordId: {}, 已处理: {}条", recordId, totalCount);
-
- hasMore = totalCount < total;
- }
- } else {
- hasMore = false;
- log.error("获取数据失败,状态码: {}", code);
- }
- }
- // 7. 完成Excel写入(所有数据写入后关闭写入器)
- if (excelWriter != null) {
- excelWriter.finish();
- }
- if (outputStream != null) {
- outputStream.flush(); // 确保所有数据写入
- outputStream.close(); // 关闭文件流
- }
- // 检查文件是否存在且不为空
- if (tempFile != null && tempFile.exists() && tempFile.length() > 0) {
- // 8. 上传到OSS(读取本地临时文件)
- // 获取接口的基础 URL
- String uploadUrl = this.uploadUrl;
- try {
- // 1. 创建上传工具实例
- ExcelUploadUtil uploadUtil = new ExcelUploadUtil(uploadUrl);
-
- // 2. 准备要上传的文件
- File excelFile = new File(tempFile.toURI());
- try {
- // 3. 执行上传
- String result = uploadUtil.uploadExcel(excelFile, "export/excel/");
- // 1. 解析JSON任务
-// JsonNode uploadResult = objectMapper.readTree(result);
-// System.out.println(uploadResult+"11111111111111111111111");
-// long code = uploadResult.path("code").asLong();
-// String url = String.valueOf(uploadResult.path("data"));
-// url = url.replace("\"", "");
-// if (code == 1) {
-// // 3. 验证导出记录decodecode
-// aiEmotionService.updateStatus(recordId, 2, url, "", totalCount);
-// } else {
-// //更新失败
-// aiEmotionService.updateStatus(recordId, 3, "", url, 0);
-// }
- JsonNode uploadResult = objectMapper.readTree(result);
- long code = uploadResult.path("code").asLong();
-
- String fileUrl = "";
- JsonNode dataNode = uploadResult.path("data");
- if (dataNode.isObject()) {
- fileUrl = dataNode.path("url").asText();
- } else if (dataNode.isTextual()) {
- fileUrl = dataNode.asText(); // 如果 data 是直接字符串 URL
- }
-
- log.info("解析到的URL: {}", fileUrl);
-
- if (code == 200 && !fileUrl.isEmpty()) {
- aiEmotionService.updateStatus(recordId, 2, fileUrl, "", totalCount);
- } else {
- aiEmotionService.updateStatus(recordId, 3, "", "上传成功但URL为空或解析失败", 0);
- }
- } catch (Exception e) {
- //更新失败
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- throw new Exception("文件上传云端失败1", e);
- }
- } catch (Exception e) {
- log.error("上传文件失败 recordId: {}, 文件名: {}", recordId, fileName, e);
- //更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- throw new Exception("文件上传云端失败2", e);
- }
- } else {
- throw new Exception("导出的Excel文件不存在或为空");
- }
-
- } catch (Exception e) {
- System.out.println("导出异常" + e.getMessage());
- log.error("导出任务处理失败 recordId: {}", recordId, e);
- // 更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- throw new Exception("导出异常", e);
- } finally {
- // 确保资源被关闭
- try {
- if (excelWriter != null) {
- excelWriter.finish();
- }
- if (outputStream != null) {
- outputStream.close();
- }
- } catch (Exception e) {
- log.error("关闭资源失败", e);
- throw new Exception("excel文件关闭资源失败", e);
- }
- }
- } catch (Exception e) {
- log.error("导出任务处理失败 recordId: {}", recordId, e);
- // 更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- System.out.println("<导出失败>" + e.getMessage());
- throw new Exception("导出任务处理失败", e);
- } finally {
- // 清理临时文件
- if (tempFile != null && tempFile.exists()) {
- try {
- if (tempFile.delete()) {
- log.info("临时文件已删除: {}", tempFile.getAbsolutePath());
- } else {
- log.warn("无法删除临时文件: {}", tempFile.getAbsolutePath());
- }
- } catch (Exception e) {
- log.error("删除临时文件失败", e.getMessage());
- throw new Exception("删除临时文件失败", e);
- }
- }
- long eTime = System.currentTimeMillis();
- log.info("导出任务完成,耗时: {}毫秒", (eTime - stTime));
- }
- return null;
- }
-
- @Transactional
- @Override
- public Exception rechargeExcel(String message) throws Exception {
- System.out.println("明细导出excel数据开始执行:" + message);
- long startTime = System.currentTimeMillis();
- Long recordId = null;
- String fileName = null;
- String token = null;
- File tempFile = null;
- OutputStream outputStream = null;
- ExcelWriter excelWriter = null;
-
- try {
- // 1. 解析JSON任务
- JsonNode rootNode = objectMapper.readTree(message);
- // 2. 获取基本参数
- recordId = rootNode.path("recordId").asLong();
- token = rootNode.path("token").asText();
- JsonNode requestDataNode = rootNode.path("requestData");
- JsonNode rechargeNode = requestDataNode.path("rechargeUser");
- RechargeUser rechargeUser = objectMapper.treeToValue(rechargeNode, RechargeUser.class);
- // 3. 验证导出记录
- AiEmotionExportRecordVO record = validateExportRecord(recordId);
- if (record == null) return null;
- //4. 更新状态为处理中
- aiEmotionService.updateStatus(recordId, 1, "", "", 0);
- // 5. 准备Excel文件
- fileName = record.getFileName();
- // 初始化临时文件(保存到本地临时目录)
- tempFile = File.createTempFile("export_", ".xlsx");
- outputStream = new FileOutputStream(tempFile); // 使用文件输出流
- // 从JSON中提取单个值
-// String text = requestDataNode.has("text") ? requestDataNode.get("text").asText() : null;
-// Integer sort = requestDataNode.has("sort") ? requestDataNode.get("sort").asInt() : null;
-// String field = requestDataNode.has("field") ? requestDataNode.get("field").asText() : null;
-// String deptId = requestDataNode.has("deptId") ? requestDataNode.get("deptId").asText() : null;
-
- try {
- // 6. 初始化Excel写入器(指向本地文件流)
- try {
- excelWriter = EasyExcel.write(outputStream, RechargeUser.class).build();
- } catch (Exception e) {
- log.error("Excel 写入器初始化失败", e);
- throw new RuntimeException("Excel 写入器初始化失败", e);
- }
- WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
- // 7. 分页查询并写入数据
- Page page = new Page();
- page.setPageNum(1);
- page.setPageSize(5000);
- Integer totalCount = 0;
- page.setRechargeUser(rechargeUser);
- boolean hasMore = true;
- while (hasMore) {
- try {
- Authentication authentication = JWTUtil.getAuthenticationFromToken(token, Admin.class);
- if (authentication != null) {
- System.out.println("Authentication: " + authentication);
- SecurityContextHolder.getContext().setAuthentication(authentication); // 存储认证信息
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- Result pageResult = rechargeController.selcetBy(page);
- Integer code = pageResult.getCode();
- Object data = pageResult.getData();
-
- if (code == 200) {
- // 判断 data 是否是 PageInfo 类型
- if (!(data instanceof PageInfo>)) {
- log.error("返回数据类型错误,期望 PageInfo,实际为:{}", data.getClass());
- hasMore = false;
- continue;
- }
-
- @SuppressWarnings("unchecked")
- PageInfo pageInfo = (PageInfo) data;
-
- Long total = (long) pageInfo.getTotal(); // 转换为 long
- List list = pageInfo.getList();
-
- if (list == null || list.isEmpty()) {
- hasMore = false;
- } else {
- // 写入 Excel 数据
- excelWriter.write(list, writeSheet);
-
- page.setPageNum(page.getPageNum() + 1);
- totalCount += list.size();
- log.info("导出进度 recordId: {}, 已处理: {}条", recordId, totalCount);
-
- hasMore = totalCount < total;
- }
- } else {
- hasMore = false;
- log.error("获取数据失败,状态码: {}", code);
- }
- }
- // 7. 完成Excel写入(所有数据写入后关闭写入器)
- if (excelWriter != null) {
- excelWriter.finish();
- }
- if (outputStream != null) {
- outputStream.flush(); // 确保所有数据写入
- outputStream.close(); // 关闭文件流
- }
- // 检查文件是否存在且不为空
- if (tempFile != null && tempFile.exists() && tempFile.length() > 0) {
- // 8. 上传到OSS(读取本地临时文件)
- // 获取接口的基础 URL
- String uploadUrl = this.uploadUrl;
- try {
- // 1. 创建上传工具实例
- ExcelUploadUtil uploadUtil = new ExcelUploadUtil(uploadUrl);
-
- // 2. 准备要上传的文件
- File excelFile = new File(tempFile.toURI());
- try {
- // 3. 执行上传
- String result = uploadUtil.uploadExcel(excelFile, "export/excel/");
- // 1. 解析JSON任务
-// JsonNode uploadResult = objectMapper.readTree(result);
-// System.out.println(uploadResult+"11111111111111111111111");
-// long code = uploadResult.path("code").asLong();
-// String url = String.valueOf(uploadResult.path("data"));
-// url = url.replace("\"", "");
-// if (code == 1) {
-// // 3. 验证导出记录decodecode
-// aiEmotionService.updateStatus(recordId, 2, url, "", totalCount);
-// } else {
-// //更新失败
-// aiEmotionService.updateStatus(recordId, 3, "", url, 0);
-// }
- JsonNode uploadResult = objectMapper.readTree(result);
- long code = uploadResult.path("code").asLong();
-
- String fileUrl = "";
- JsonNode dataNode = uploadResult.path("data");
- if (dataNode.isObject()) {
- fileUrl = dataNode.path("url").asText();
- } else if (dataNode.isTextual()) {
- fileUrl = dataNode.asText(); // 如果 data 是直接字符串 URL
- }
-
- log.info("解析到的URL: {}", fileUrl);
-
- if (code == 200 && !fileUrl.isEmpty()) {
- aiEmotionService.updateStatus(recordId, 2, fileUrl, "", totalCount);
- } else {
- aiEmotionService.updateStatus(recordId, 3, "", "上传成功但URL为空或解析失败", 0);
- }
- } catch (Exception e) {
- //更新失败
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- throw new Exception("文件上传云端失败1", e);
- }
- } catch (Exception e) {
- log.error("上传文件失败 recordId: {}, 文件名: {}", recordId, fileName, e);
- //更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- throw new Exception("文件上传云端失败2", e);
- }
- } else {
- throw new Exception("导出的Excel文件不存在或为空");
- }
-
- } catch (Exception e) {
- System.out.println("导出异常" + e.getMessage());
- log.error("导出任务处理失败 recordId: {}", recordId, e);
- // 更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- throw new Exception("导出异常", e);
- } finally {
- // 确保资源被关闭
- try {
- if (excelWriter != null) {
- excelWriter.finish();
- }
- if (outputStream != null) {
- outputStream.close();
- }
- } catch (Exception e) {
- log.error("关闭资源失败", e);
- throw new Exception("excel文件关闭资源失败", e);
- }
- }
- } catch (Exception e) {
- log.error("导出任务处理失败 recordId: {}", recordId, e);
- // 更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- System.out.println("<导出失败>" + e.getMessage());
- throw new Exception("导出任务处理失败", e);
- } finally {
- // 清理临时文件
- if (tempFile != null && tempFile.exists()) {
- try {
- if (tempFile.delete()) {
- log.info("临时文件已删除: {}", tempFile.getAbsolutePath());
- } else {
- log.warn("无法删除临时文件: {}", tempFile.getAbsolutePath());
- }
- } catch (Exception e) {
- log.error("删除临时文件失败", e.getMessage());
- throw new Exception("删除临时文件失败", e);
- }
+ @Transactional
+ @Override
+ public Exception handleExcelExportData(String message) throws Exception {
+ return exportExcelGeneric(message, "goldDetail", page -> {
+ try {
+ return goldDetailController.ExcelGoldDetail(page);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
- long endTime = System.currentTimeMillis();
- log.info("导出任务完成,耗时: {}毫秒", (endTime - startTime));
- }
- return null;
+ });
}
@Transactional
@Override
- public Exception consumeExcel(String message) throws Exception {
- System.out.println("明细导出excel数据开始执行:" + message);
- long startTime = System.currentTimeMillis();
- Long recordId = null;
- String fileName = null;
- File tempFile = null;
- String token = null;
- OutputStream outputStream = null;
- ExcelWriter excelWriter = null;
-
- try {
- // 1. 解析JSON任务
- JsonNode rootNode = objectMapper.readTree(message);
- // 2. 获取基本参数
- recordId = rootNode.path("recordId").asLong();
- JsonNode requestDataNode = rootNode.path("requestData");
- token = rootNode.path("token").asText();
- JsonNode consumeUserNode = requestDataNode.path("consumeUser");
- ConsumeUser consumeUser = objectMapper.treeToValue(consumeUserNode, ConsumeUser.class);
- // 3. 验证导出记录
- AiEmotionExportRecordVO record = validateExportRecord(recordId);
- if (record == null) return null;
- //4. 更新状态为处理中
- aiEmotionService.updateStatus(recordId, 1, "", "", 0);
- // 5. 准备Excel文件
- fileName = record.getFileName();
- log.info("到这了---------------------------------------------");
- // 初始化临时文件(保存到本地临时目录)
- tempFile = File.createTempFile("export_", ".xlsx");
- outputStream = new FileOutputStream(tempFile); // 使用文件输出流
- // 从JSON中提取单个值
-
-
+ public Exception handleExcel(String message) throws Exception {
+ return exportExcelGeneric(message, "user", page -> {
try {
- // 6. 初始化Excel写入器(指向本地文件流)
- excelWriter = EasyExcel.write(outputStream, ConsumeUser.class).build();
- WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
- // 7. 分页查询并写入数据
- Page page = new Page();
- page.setPageNum(1);
- page.setPageSize(5000);
- page.setConsumeUser(consumeUser);
- Integer totalCount = 0;
- boolean hasMore = true;
- while (hasMore) {
- try {
- Authentication authentication = JWTUtil.getAuthenticationFromToken(token, Admin.class);
- if (authentication != null) {
- System.out.println("Authentication: " + authentication);
- SecurityContextHolder.getContext().setAuthentication(authentication); // 存储认证信息
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- Result pageResult = consumeController.selectBy(page);
- Integer code = pageResult.getCode();
- Object data = pageResult.getData();
-
- if (code == 200) {
- // 判断 data 是否是 PageInfo 类型
- if (!(data instanceof PageInfo>)) {
- log.error("返回数据类型错误,期望 PageInfo,实际为:{}", data.getClass());
- hasMore = false;
- continue;
- }
-
- @SuppressWarnings("unchecked")
- PageInfo pageInfo = (PageInfo) data;
-
- Long total = (long) pageInfo.getTotal(); // 转换为 long
- List list = pageInfo.getList();
+ return goldDetailController.ExcelGold(page);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
- if (list == null || list.isEmpty()) {
- hasMore = false;
- } else {
- // 写入 Excel 数据
- excelWriter.write(list, writeSheet);
+ @Transactional
+ @Override
+ public Exception rechargeExcel(String message) throws Exception {
+ return exportExcelGeneric(message, "rechargeUser", page -> {
+ try {
+ return rechargeController.selcet(page);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+ @Transactional
+ @Override
+ public Exception consumeExcel(String message) throws Exception {
+ return exportExcelGeneric(message, "consumeUser", page -> {
+ try {
+ return consumeController.select(page);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
- page.setPageNum(page.getPageNum() + 1);
- totalCount += list.size();
- log.info("导出进度 recordId: {}, 已处理: {}条", recordId, totalCount);
+ @Transactional
+ @Override
+ public Exception refundExcel(String message) throws Exception {
+ return exportExcelGeneric(message, "refundUser", page -> {
+ try {
+ return refundController.selcet(page);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
- hasMore = totalCount < total;
- }
- } else {
- hasMore = false;
- log.error("获取数据失败,状态码: {}", code);
- }
- }
- // 7. 完成Excel写入(所有数据写入后关闭写入器)
- if (excelWriter != null) {
- excelWriter.finish();
- }
- if (outputStream != null) {
- outputStream.flush(); // 确保所有数据写入
- outputStream.close(); // 关闭文件流
- }
- // 检查文件是否存在且不为空
- if (tempFile != null && tempFile.exists() && tempFile.length() > 0) {
- // 8. 上传到OSS(读取本地临时文件)
- // 获取接口的基础 URL
- String uploadUrl = this.uploadUrl;
- try {
- // 1. 创建上传工具实例
- ExcelUploadUtil uploadUtil = new ExcelUploadUtil(uploadUrl);
+ @Override
+ public Exception LiveExcel(String message) throws Exception {
+ return exportExcelGeneric(message, "liveUser", page -> {
+ try {
+ return beanConsumeController.selectLiveBy(page);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
- // 2. 准备要上传的文件
- File excelFile = new File(tempFile.toURI());
- try {
- // 3. 执行上传
- String result = uploadUtil.uploadExcel(excelFile, "export/excel/");
- // 1. 解析JSON任务
-// JsonNode uploadResult = objectMapper.readTree(result);
-// System.out.println(uploadResult+"11111111111111111111111");
-// long code = uploadResult.path("code").asLong();
-// String url = String.valueOf(uploadResult.path("data"));
-// url = url.replace("\"", "");
-// if (code == 1) {
-// // 3. 验证导出记录decodecode
-// aiEmotionService.updateStatus(recordId, 2, url, "", totalCount);
-// } else {
-// //更新失败
-// aiEmotionService.updateStatus(recordId, 3, "", url, 0);
-// }
- JsonNode uploadResult = objectMapper.readTree(result);
- long code = uploadResult.path("code").asLong();
+ @Override
+ public List getExcel(Export export) {
+ List list = exportMapper.getExportRecord(export.getAccount(),export.getType());
+ System.out.println(list+"-------------------------------");
+ return list;
+ }
- String fileUrl = "";
- JsonNode dataNode = uploadResult.path("data");
- if (dataNode.isObject()) {
- fileUrl = dataNode.path("url").asText();
- } else if (dataNode.isTextual()) {
- fileUrl = dataNode.asText(); // 如果 data 是直接字符串 URL
- }
- log.info("解析到的URL: {}", fileUrl);
- if (code == 200 && !fileUrl.isEmpty()) {
- aiEmotionService.updateStatus(recordId, 2, fileUrl, "", totalCount);
- } else {
- aiEmotionService.updateStatus(recordId, 3, "", "上传成功但URL为空或解析失败", 0);
- }
- } catch (Exception e) {
- //更新失败
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- throw new Exception("文件上传云端失败1", e);
- }
- } catch (Exception e) {
- log.error("上传文件失败 recordId: {}, 文件名: {}", recordId, fileName, e);
- //更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- throw new Exception("文件上传云端失败2", e);
- }
- } else {
- throw new Exception("导出的Excel文件不存在或为空");
- }
+ /**
+ * 验证导出记录
+ */
+ private AiEmotionExportRecordVO validateExportRecord(Long recordId) throws Exception {
+ AiEmotionExportRecordVO record = aiEmotionService.getRecordById(recordId);
+ AbstractLog log = null;
+ if (record == null) {
+ log.error("导出记录不存在 recordId: {}", recordId);
+ return null;
+ }
- } catch (Exception e) {
- System.out.println("导出异常" + e.getMessage());
- log.error("导出任务处理失败 recordId: {}", recordId, e);
- // 更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- throw new Exception("导出异常", e);
- } finally {
- // 确保资源被关闭
- try {
- if (excelWriter != null) {
- excelWriter.finish();
- }
- if (outputStream != null) {
- outputStream.close();
- }
- } catch (Exception e) {
- log.error("关闭资源失败", e);
- throw new Exception("excel文件关闭资源失败", e);
- }
- }
- } catch (Exception e) {
- log.error("导出任务处理失败 recordId: {}", recordId, e);
- // 更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- System.out.println("<导出失败>" + e.getMessage());
- throw new Exception("导出任务处理失败", e);
- } finally {
- // 清理临时文件
- if (tempFile != null && tempFile.exists()) {
- try {
- if (tempFile.delete()) {
- log.info("临时文件已删除: {}", tempFile.getAbsolutePath());
- } else {
- log.warn("无法删除临时文件: {}", tempFile.getAbsolutePath());
- }
- } catch (Exception e) {
- log.error("删除临时文件失败", e.getMessage());
- throw new Exception("删除临时文件失败", e);
- }
- }
- long endTime = System.currentTimeMillis();
- log.info("导出任务完成,耗时: {}毫秒", (endTime - startTime));
+ // 检查是否已经处理过
+ if (record.getState() != 0) {
+ log.warn("导出记录已处理 recordId: {}, status: {}", recordId, record.getState());
+ return null;
}
- return null;
+ return record;
}
@Transactional
@Override
- public Exception refundExcel(String message) throws Exception {
+ public Exception exportExcelGeneric(String message, String exportType, Function dataFetcher) throws Exception {
System.out.println("明细导出excel数据开始执行:" + message);
long startTime = System.currentTimeMillis();
Long recordId = null;
- String fileName = null;
- String token = null;
File tempFile = null;
OutputStream outputStream = null;
ExcelWriter excelWriter = null;
@@ -998,51 +190,41 @@ public class ExportExcelServiceImpl implements ExportExcelService {
try {
// 1. 解析JSON任务
JsonNode rootNode = objectMapper.readTree(message);
- // 2. 获取基本参数
recordId = rootNode.path("recordId").asLong();
- token = rootNode.path("token").asText();
JsonNode requestDataNode = rootNode.path("requestData");
- JsonNode refundUserNode = requestDataNode.path("refundUser");
- RefundUser refundUser = objectMapper.treeToValue(refundUserNode, RefundUser.class);
- // 3. 验证导出记录
+ String tokenValue = requestDataNode.path("token").asText();
+
+ // 2. 验证导出记录
AiEmotionExportRecordVO record = validateExportRecord(recordId);
if (record == null) return null;
- //4. 更新状态为处理中
+
+ // 3. 更新状态为处理中
aiEmotionService.updateStatus(recordId, 1, "", "", 0);
- // 5. 准备Excel文件
- fileName = record.getFileName();
- // 初始化临时文件(保存到本地临时目录)
+
+ // 4. 准备Excel文件
+ String fileName = record.getFileName();
tempFile = File.createTempFile("export_", ".xlsx");
- outputStream = new FileOutputStream(tempFile); // 使用文件输出流
- // 从JSON中提取单个值
+ outputStream = new FileOutputStream(tempFile);
try {
- // 6. 初始化Excel写入器(指向本地文件流)
- excelWriter = EasyExcel.write(outputStream, RefundUser.class).build();
+ // 5. 初始化Excel写入器
+ Class> clazz = getExportClass(exportType); // 动态获取导出类
+ excelWriter = EasyExcel.write(outputStream, clazz).build();
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
- // 7. 分页查询并写入数据
+
+ // 6. 分页查询并写入数据
Page page = new Page();
page.setPageNum(1);
- page.setPageSize(5000);
- page.setRefundUser(refundUser);
+ page.setPageSize(PAGE_SIZE);
Integer totalCount = 0;
boolean hasMore = true;
+
while (hasMore) {
- try {
- Authentication authentication = JWTUtil.getAuthenticationFromToken(token, Admin.class);
- if (authentication != null) {
- System.out.println("Authentication: " + authentication);
- SecurityContextHolder.getContext().setAuthentication(authentication); // 存储认证信息
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- Result pageResult = refundController.selcetBy(page);
+ Result pageResult = dataFetcher.apply(page);
Integer code = pageResult.getCode();
Object data = pageResult.getData();
if (code == 200) {
- // 判断 data 是否是 PageInfo 类型
if (!(data instanceof PageInfo>)) {
log.error("返回数据类型错误,期望 PageInfo,实际为:{}", data.getClass());
hasMore = false;
@@ -1050,21 +232,17 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
@SuppressWarnings("unchecked")
- PageInfo pageInfo = (PageInfo) data;
-
- Long total = (long) pageInfo.getTotal(); // 转换为 long
- List list = pageInfo.getList();
+ PageInfo> pageInfo = (PageInfo>) data;
+ Long total = pageInfo.getTotal();
+ List> list = pageInfo.getList();
if (list == null || list.isEmpty()) {
hasMore = false;
} else {
- // 写入 Excel 数据
excelWriter.write(list, writeSheet);
-
page.setPageNum(page.getPageNum() + 1);
totalCount += list.size();
log.info("导出进度 recordId: {}, 已处理: {}条", recordId, totalCount);
-
hasMore = totalCount < total;
}
} else {
@@ -1072,80 +250,49 @@ public class ExportExcelServiceImpl implements ExportExcelService {
log.error("获取数据失败,状态码: {}", code);
}
}
- // 7. 完成Excel写入(所有数据写入后关闭写入器)
+
+ // 7. 完成Excel写入
if (excelWriter != null) {
excelWriter.finish();
}
if (outputStream != null) {
- outputStream.flush(); // 确保所有数据写入
- outputStream.close(); // 关闭文件流
+ outputStream.flush();
+ outputStream.close();
}
- // 检查文件是否存在且不为空
+
+ // 8. 检查文件是否存在且不为空
if (tempFile != null && tempFile.exists() && tempFile.length() > 0) {
- // 8. 上传到OSS(读取本地临时文件)
- // 获取接口的基础 URL
- String uploadUrl = this.uploadUrl;
+ // 9. 上传到OSS
try {
- // 1. 创建上传工具实例
ExcelUploadUtil uploadUtil = new ExcelUploadUtil(uploadUrl);
-
- // 2. 准备要上传的文件
File excelFile = new File(tempFile.toURI());
- try {
- // 3. 执行上传
- String result = uploadUtil.uploadExcel(excelFile, "export/excel/");
- // 1. 解析JSON任务
-// JsonNode uploadResult = objectMapper.readTree(result);
-// System.out.println(uploadResult+"11111111111111111111111");
-// long code = uploadResult.path("code").asLong();
-// String url = String.valueOf(uploadResult.path("data"));
-// url = url.replace("\"", "");
-// if (code == 1) {
-// // 3. 验证导出记录decodecode
-// aiEmotionService.updateStatus(recordId, 2, url, "", totalCount);
-// } else {
-// //更新失败
-// aiEmotionService.updateStatus(recordId, 3, "", url, 0);
-// }
- JsonNode uploadResult = objectMapper.readTree(result);
- long code = uploadResult.path("code").asLong();
+ String result = uploadUtil.uploadExcel(excelFile, "export/excel/");
- String fileUrl = "";
- JsonNode dataNode = uploadResult.path("data");
- if (dataNode.isObject()) {
- fileUrl = dataNode.path("url").asText();
- } else if (dataNode.isTextual()) {
- fileUrl = dataNode.asText(); // 如果 data 是直接字符串 URL
- }
+ JsonNode uploadResult = objectMapper.readTree(result);
+ long code = uploadResult.path("code").asLong();
+ String fileUrl = "";
+ JsonNode dataNode = uploadResult.path("data");
- log.info("解析到的URL: {}", fileUrl);
+ if (dataNode.isObject()) {
+ fileUrl = dataNode.path("url").asText();
+ } else if (dataNode.isTextual()) {
+ fileUrl = dataNode.asText();
+ }
- if (code == 200 && !fileUrl.isEmpty()) {
- aiEmotionService.updateStatus(recordId, 2, fileUrl, "", totalCount);
- } else {
- aiEmotionService.updateStatus(recordId, 3, "", "上传成功但URL为空或解析失败", 0);
- }
- } catch (Exception e) {
- //更新失败
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- throw new Exception("文件上传云端失败1", e);
+ if (code == 200 && !fileUrl.isEmpty()) {
+ aiEmotionService.updateStatus(recordId, 2, fileUrl, "", totalCount);
+ } else {
+ aiEmotionService.updateStatus(recordId, 3, "", "上传成功但URL为空或解析失败", 0);
}
} catch (Exception e) {
- log.error("上传文件失败 recordId: {}, 文件名: {}", recordId, fileName, e);
- //更新状态为失败
- if (recordId != null) {
- aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
- }
- throw new Exception("文件上传云端失败2", e);
+ aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
+ throw new Exception("文件上传云端失败", e);
}
} else {
throw new Exception("导出的Excel文件不存在或为空");
}
-
} catch (Exception e) {
- System.out.println("导出异常" + e.getMessage());
log.error("导出任务处理失败 recordId: {}", recordId, e);
- // 更新状态为失败
if (recordId != null) {
aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
}
@@ -1166,11 +313,9 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
} catch (Exception e) {
log.error("导出任务处理失败 recordId: {}", recordId, e);
- // 更新状态为失败
if (recordId != null) {
aiEmotionService.updateStatus(recordId, 3, "", StringUtils.substring(e.getMessage(), 0, 500), 0);
}
- System.out.println("<导出失败>" + e.getMessage());
throw new Exception("导出任务处理失败", e);
} finally {
// 清理临时文件
@@ -1191,113 +336,22 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
return null;
}
-
-
- @Override
- public List getExcel(Export export) {
- List list = exportMapper.getExportRecord(export.getAccount(),export.getType());
- System.out.println(list+"-------------------------------");
- return list;
- }
-
-
- /**
- * 验证导出记录
- */
- private AiEmotionExportRecordVO validateExportRecord(Long recordId) throws Exception {
- AiEmotionExportRecordVO record = aiEmotionService.getRecordById(recordId);
- AbstractLog log = null;
- if (record == null) {
- log.error("导出记录不存在 recordId: {}", recordId);
- return null;
- }
-
- // 检查是否已经处理过
- if (record.getState() != 0) {
- log.warn("导出记录已处理 recordId: {}, status: {}", recordId, record.getState());
- return null;
- }
- return record;
- }
-
- /**
- * 初始化excel文件
- * @param os
- * @param exportType
- * @return
- */
- private ExcelWriter initExcelWriter(OutputStream os, String exportType) {
- switch (exportType) {
- case "user":
- return EasyExcel.write(os, Goldmingxi.class)
- .inMemory(Boolean.TRUE)
- .build();
- default:
- throw new IllegalArgumentException("不支持的导出类型: " + exportType);
- }
- }
- /**
- * 初始化excel文件
- * @param os
- * @param exportType
- * @return
- */
- private ExcelWriter ExcelWriter(OutputStream os, String exportType) {
- switch (exportType) {
- case "user":
- return EasyExcel.write(os, User.class)
- .inMemory(Boolean.TRUE)
- .build();
- default:
- throw new IllegalArgumentException("不支持的导出类型: " + exportType);
- }
- }
- /**
- * 初始化excel文件
- * @param os
- * @param exportType
- * @return
- */
- private ExcelWriter RechargeExcelWriter(OutputStream os, String exportType) {
- switch (exportType) {
- case "user":
- return EasyExcel.write(os, RechargeUser.class)
- .inMemory(Boolean.TRUE)
- .build();
- default:
- throw new IllegalArgumentException("不支持的导出类型: " + exportType);
- }
- }
- /**
- * 初始化excel文件
- * @param os
- * @param exportType
- * @return
- */
- private ExcelWriter ConExcelWriter(OutputStream os, String exportType) {
- switch (exportType) {
- case "user":
- return EasyExcel.write(os, ConsumeUser.class)
- .inMemory(Boolean.TRUE)
- .build();
- default:
- throw new IllegalArgumentException("不支持的导出类型: " + exportType);
- }
- }/**
- * 初始化excel文件
- * @param os
- * @param exportType
- * @return
- */
- private ExcelWriter RefundExcelWriter(OutputStream os, String exportType) {
+ private Class> getExportClass(String exportType) {
switch (exportType) {
+ case "goldDetail":
+ return GoldDetail.class;
case "user":
- return EasyExcel.write(os, RefundUser.class)
- .inMemory(Boolean.TRUE)
- .build();
+ return User.class;
+ case "rechargeUser":
+ return RechargeUser.class;
+ case "consumeUser":
+ return ConsumeUser.class;
+ case "refundUser":
+ return RefundUser.class;
+ case "liveUser":
+ return BeanConsumeLive.class;
default:
throw new IllegalArgumentException("不支持的导出类型: " + exportType);
}
}
-
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/serviceImpl/coin/GeneralServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/GeneralServiceImpl.java
index 25ea11f..b827a95 100644
--- a/src/main/java/com/example/demo/serviceImpl/coin/GeneralServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/coin/GeneralServiceImpl.java
@@ -130,10 +130,10 @@ public class GeneralServiceImpl implements GeneralService {
}
List list = Arrays.asList(market.split(","));
//判断是否是总部
- if (list != null && list.contains("总部")) {
+ if (list != null && list.contains("1")) {
List allMarkets = getMarket(); // 获取所有地区
- allMarkets.remove("总部"); // 先移除可能存在的总部
- allMarkets.add(0, "总部"); // 将总部添加到列表第一位
+ allMarkets.remove("1"); // 先移除可能存在的总部
+ allMarkets.add(0, "1"); // 将总部添加到列表第一位
list = allMarkets; // 更新list
}
return list;
@@ -156,7 +156,7 @@ public class GeneralServiceImpl implements GeneralService {
}
List list = Arrays.asList(market.split(","));
//判断是否是总部
- if (list != null && list.contains("总部")) {
+ if (list != null && list.contains("1")) {
list=getMarket();//总部有所有地区的权限
}
return list;
@@ -181,7 +181,7 @@ public class GeneralServiceImpl implements GeneralService {
}
List list = Arrays.asList(market.split(","));
//判断是否是总部
- if (list != null && list.contains("总部")) {
+ if (list != null && list.contains("1")) {
list=getAllRoleMarket();//总部有所有地区的权限
}
return list;
diff --git a/src/main/java/com/example/demo/serviceImpl/coin/MarketServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/MarketServiceImpl.java
index f0c9424..31d028c 100644
--- a/src/main/java/com/example/demo/serviceImpl/coin/MarketServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/coin/MarketServiceImpl.java
@@ -20,7 +20,7 @@ public class MarketServiceImpl implements MarketService {
List markets = marketMapper.getMarket();
// 2. 构建树形结构(根节点parentId=1)
- return buildTree(markets, 1);
+ return buildTree(markets, -1);
}
private List buildTree(List markets, Integer parentId) {
// 过滤出当前父节点的子菜单
diff --git a/src/main/java/com/example/demo/serviceImpl/coin/PermissionServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/PermissionServiceImpl.java
index 8931a28..aaa66ec 100644
--- a/src/main/java/com/example/demo/serviceImpl/coin/PermissionServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/coin/PermissionServiceImpl.java
@@ -75,7 +75,7 @@ public class PermissionServiceImpl implements PermissionService {
if (ObjectUtils.isEmpty(admin.getMarket())) {
throw new Exception("地区为空!");
}
- if (admin.getMarket().contains("总部") && admin.getMarket().size() > 1) {
+ if (admin.getMarket().contains("1") && admin.getMarket().size() > 1) {
throw new Exception("总部不可与其他地区共存");
}
if (ObjectUtils.isEmpty(admin.getPostiton())) {
@@ -148,7 +148,7 @@ public class PermissionServiceImpl implements PermissionService {
if (ObjectUtils.isEmpty(adminVo.getMarket())) {
throw new Exception("地区为空!");
}
- if (adminVo.getMarket().contains("总部") && adminVo.getMarket().size() > 1) {
+ if (adminVo.getMarket().contains("1") && adminVo.getMarket().size() > 1) {
throw new Exception("总部不可与其他地区共存");
}
// 校验职位是否为空(管理员职位为必填项)
diff --git a/src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java
index a123b13..f9d8c7b 100644
--- a/src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java
@@ -60,10 +60,10 @@ public class WorkbenchServiceImpl implements WorkbenchService {
}
List list = Arrays.asList(market.split(","));
//判断是否是总部
- if (list != null && list.contains("总部")) {
+ if (list != null && list.contains("1")) {
List allMarkets = workBenchMapper.getMarket(); // 获取所有地区
- allMarkets.remove("总部"); // 先移除可能存在的总部
- allMarkets.add(0, "总部"); // 将总部添加到列表第一位
+ allMarkets.remove("1"); // 先移除可能存在的总部
+ allMarkets.add(0, "1"); // 将总部添加到列表第一位
list = allMarkets; // 更新list
}
return list;
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 9e0b8a1..041d0b5 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -53,7 +53,7 @@ feishu:
url: https://open.feishu.cn/open-apis/bot/v2/hook/384c78aa-8df1-498b-9c47-04e890ed9877
server:
- port: 8081
+ port: 10704
logging:
level:
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 612d4bd..482564f 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -35,9 +35,9 @@ spring:
data:
redis:
database: 1
- host: 18.143.76.3
- port: 10703
- password: Ngc0FYUTA6h3wC5J
+ host: localhost
+ port: 6379
+ password: 123456
lettuce:
pool:
@@ -56,7 +56,7 @@ feishu:
server:
- port: 10704
+ port: 8081
logging:
level:
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 4031b8d..e7061c3 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
profiles:
- active: dev
+ active: test
jackson:
deserialization:
fail-on-unknown-properties: false
@@ -28,7 +28,7 @@ spring:
password: 4hHmzxZH4rF4c5xr
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
- pool-name: mysql2HikariCP
+ pool-name: mysql3HikariCP
maximum-pool-size: 10
sqlserver1:
jdbc-url: jdbc:sqlserver://52.76.43.43:1433;databaseName=hwhcGold;encrypt=true;sslProtocol=TLSv1;trustServerCertificate=true;
@@ -69,10 +69,10 @@ mybatis:
configuration:
mysql1:
map-underscore-to-camel-case: true
-# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
sqlserver1:
map-underscore-to-camel-case: true
-# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mysql2:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
diff --git a/src/main/resources/jindouMapper/BeanConsumeMapper.xml b/src/main/resources/jindouMapper/BeanConsumeMapper.xml
new file mode 100644
index 0000000..ce304e5
--- /dev/null
+++ b/src/main/resources/jindouMapper/BeanConsumeMapper.xml
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/jindouMapper/BeanRechargeMapper.xml b/src/main/resources/jindouMapper/BeanRechargeMapper.xml
deleted file mode 100644
index 7f1b697..0000000
--- a/src/main/resources/jindouMapper/BeanRechargeMapper.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/jindouMapper/BeanRechargeMapper2.xml b/src/main/resources/jindouMapper/BeanRechargeMapper2.xml
new file mode 100644
index 0000000..14ab855
--- /dev/null
+++ b/src/main/resources/jindouMapper/BeanRechargeMapper2.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/jindouMapper/BeanUser.xml b/src/main/resources/jindouMapper/BeanUser.xml
index 5de856a..1055283 100644
--- a/src/main/resources/jindouMapper/BeanUser.xml
+++ b/src/main/resources/jindouMapper/BeanUser.xml
@@ -8,16 +8,84 @@
SELECT
m.nickname AS name,
m.jwcode AS jwcode,
- m.loc_market AS market,
+ m.dept AS market,
y.jinbi_free AS freeBean,
- y.jinbi_buy AS permanentBean
+ y.jinbi_buy AS permanentBean,
+ y.jinbi_cost_total AS consumeSum
FROM
fx_member m
- INNER JOIN
+ LEFT JOIN
fx_yaoqing y ON m.id = y.uid
m.jwcode = #{jwcode}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/AuditMapper.xml b/src/main/resources/mapper/AuditMapper.xml
index 7ab53f9..2e5bb5e 100644
--- a/src/main/resources/mapper/AuditMapper.xml
+++ b/src/main/resources/mapper/AuditMapper.xml
@@ -61,7 +61,7 @@
AND ugr.activity = #{rechargeAudit.activity}
-
+
AND (
u.market LIKE CONCAT('%', #{market}, '%')
@@ -122,7 +122,7 @@
AND u.market = #{refundAudit.market}
-
+
AND (
u.market LIKE CONCAT('%', #{market}, '%')
diff --git a/src/main/resources/mapper/BeanRechargeMapper1.xml b/src/main/resources/mapper/BeanRechargeMapper1.xml
new file mode 100644
index 0000000..8fd108d
--- /dev/null
+++ b/src/main/resources/mapper/BeanRechargeMapper1.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ INSERT INTO audit
+
+ jwcode,
+ buy_jd,
+ free_jd,
+ type,
+ admin_name,
+ remark,
+ audit_status
+
+ VALUES
+
+ #{jwcode},
+ #{permanentBean},
+ #{freeBean},
+ 0,
+ #{adminName},
+ #{remark},
+ 0
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/ConsumeMapper.xml b/src/main/resources/mapper/ConsumeMapper.xml
index 79f0bda..38d429b 100644
--- a/src/main/resources/mapper/ConsumeMapper.xml
+++ b/src/main/resources/mapper/ConsumeMapper.xml
@@ -24,7 +24,7 @@
ugr.type = 1 AND ugr.flag = 1
-
+
AND (
u.market LIKE CONCAT('%', #{market}, '%')
@@ -92,12 +92,11 @@
admin a ON ugr.admin_id = a.id
ugr.type = 1 AND ugr.flag = 1
-
- AND (
-
- u.market LIKE CONCAT('%', #{market}, '%')
+
+ AND u.market IN
+
+ #{market}
- )
AND ugr.jwcode = #{jwcode}
diff --git a/src/main/resources/mapper/PermissionMapper.xml b/src/main/resources/mapper/PermissionMapper.xml
index 3740d89..eded8b8 100644
--- a/src/main/resources/mapper/PermissionMapper.xml
+++ b/src/main/resources/mapper/PermissionMapper.xml
@@ -84,7 +84,7 @@
and admin.postiton=#{postiton}
-
+
AND (
admin.market LIKE CONCAT('%', #{market}, '%')
diff --git a/src/main/resources/mapper/RechargeMapper.xml b/src/main/resources/mapper/RechargeMapper.xml
index 08d3527..5ee4e84 100644
--- a/src/main/resources/mapper/RechargeMapper.xml
+++ b/src/main/resources/mapper/RechargeMapper.xml
@@ -27,13 +27,12 @@
ugr.type = 0 AND ugr.audit_status IN (1,3)
AND ugr.flag = 1
-
-
- AND (
-
- u.market LIKE CONCAT('%', #{market}, '%')
+
+
+ AND user.market IN
+
+ #{markets}
- )
@@ -97,12 +96,11 @@
ugr.type = 0 AND ugr.audit_status IN (1,3)
AND ugr.flag = 1
-
- AND (
-
- u.market LIKE CONCAT('%', #{market}, '%')
+
+ AND u.market IN
+
+ #{market}
- )
AND ugr.jwcode = #{jwcode}
diff --git a/src/main/resources/mapper/RefundMapper.xml b/src/main/resources/mapper/RefundMapper.xml
index eae9331..1c12cf7 100644
--- a/src/main/resources/mapper/RefundMapper.xml
+++ b/src/main/resources/mapper/RefundMapper.xml
@@ -26,7 +26,7 @@
ugr.type = 2 AND ugr.audit_status IN (1,3) AND ugr.flag = 1
-
+
AND (
u.market LIKE CONCAT('%', #{market}, '%')
@@ -95,12 +95,11 @@
admin a ON ugr.admin_id = a.id
ugr.type = 2 AND ugr.audit_status IN (1,3) AND ugr.flag = 1
-
- AND (
-
- u.market LIKE CONCAT('%', #{market}, '%')
+
+ AND u.market IN
+
+ #{market}
- )
AND ugr.jwcode = #{jwcode}
diff --git a/src/main/resources/mapper/RoleMapper.xml b/src/main/resources/mapper/RoleMapper.xml
index c176265..125c3be 100644
--- a/src/main/resources/mapper/RoleMapper.xml
+++ b/src/main/resources/mapper/RoleMapper.xml
@@ -37,7 +37,7 @@
SELECT id,role_name FROM role
-
+
AND market IN
#{market}
@@ -91,7 +91,7 @@
r.market LIKE CONCAT('%', #{market}, '%')
-
+
AND r.market IN
#{market}
diff --git a/src/main/resources/mapper/UrlMapper.xml b/src/main/resources/mapper/UrlMapper.xml
deleted file mode 100644
index 714c781..0000000
--- a/src/main/resources/mapper/UrlMapper.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index 11478d8..c288009 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -57,7 +57,7 @@
jwcode = #{jwcode}
-
+
AND (
market LIKE CONCAT('%', #{market}, '%')
diff --git a/src/main/resources/paymapper/BeanRechargeMapper3.xml b/src/main/resources/paymapper/BeanRechargeMapper3.xml
new file mode 100644
index 0000000..1078b2b
--- /dev/null
+++ b/src/main/resources/paymapper/BeanRechargeMapper3.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
\ No newline at end of file