diff --git a/pom.xml b/pom.xml
index 0948cd6..66e00de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -120,23 +120,6 @@
dynamic-datasource-spring-boot-starter
3.5.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
io.jsonwebtoken
jjwt
@@ -177,7 +160,43 @@
+
+
+
+
+ dev
+
+
+ dev
+
+
+
+ true
+
+
+
+
+ test
+
+ test
+
+
+
+
+ prod
+
+ pro
+
+
+
+ ${project.name}
+
+
+ src/main/resources
+ true
+
+
org.apache.maven.plugins
diff --git a/src/main/java/com/example/demo/Export/ExportService.java b/src/main/java/com/example/demo/Export/ExportService.java
index 6e77ea5..f0b2475 100644
--- a/src/main/java/com/example/demo/Export/ExportService.java
+++ b/src/main/java/com/example/demo/Export/ExportService.java
@@ -24,4 +24,8 @@ public interface ExportService {
Result addExportFan(FanDTO dto);
//金豆文章导出
Result addExportArticle(ArticleDTO dto);
+
+ Result addExportBean(BeanRechargeDTO dto);
+
+ Result addExportOnline(OnlineDTO dto);
}
diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java
index 5af6232..44717c9 100644
--- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java
+++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java
@@ -109,6 +109,16 @@ public class ExportServiceImpl implements ExportService {
fanDTO.setUrl("");
fanDTO.setFileName(generateFileName("铁粉明细", adminName));
fanDTO.setDataNum(0);
+ } else if (dto instanceof BeanRechargeDTO beanRechargeDTO){
+ beanRechargeDTO.setAccount(Integer.valueOf(account));
+ beanRechargeDTO.setUrl("");
+ beanRechargeDTO.setFileName(generateFileName("金豆充值明细", adminName));
+ beanRechargeDTO.setDataNum(0);
+ } else if(dto instanceof OnlineDTO onlineDTO){
+ onlineDTO.setAccount(Integer.valueOf(account));
+ onlineDTO.setUrl("");
+ onlineDTO.setFileName(generateFileName("在线明细", adminName));
+ onlineDTO.setDataNum(0);
}
}
@@ -176,6 +186,26 @@ public class ExportServiceImpl implements ExportService {
articleDTO.getFileName(),
articleDTO.getDataNum()
);
+ } else if (dto instanceof BeanRechargeDTO beanRechargeDTO){
+ goldDetailMapper.insertExportRecord(
+ idHolder,
+ account,
+ beanRechargeDTO.getType(),
+ beanRechargeDTO.getState(),
+ beanRechargeDTO.getUrl(),
+ beanRechargeDTO.getFileName(),
+ beanRechargeDTO.getDataNum()
+ );
+ } else if (dto instanceof OnlineDTO onlineDTO){
+ goldDetailMapper.insertExportRecord(
+ idHolder,
+ account,
+ onlineDTO.getType(),
+ onlineDTO.getState(),
+ onlineDTO.getUrl(),
+ onlineDTO.getFileName(),
+ onlineDTO.getDataNum()
+ );
}
}
@@ -200,6 +230,10 @@ public class ExportServiceImpl implements ExportService {
requestData.put(requestDataKey, fanDTO.getBeanConsumeFan());
} else if (dto instanceof ArticleDTO articleDTO) {
requestData.put(requestDataKey, articleDTO.getBeanConsumeArticle());
+ } else if (dto instanceof BeanRechargeDTO beanRechargeDTO){
+ requestData.put(requestDataKey, beanRechargeDTO.getBeanRechargeInfo());
+ } else if (dto instanceof OnlineDTO onlineDTO){
+ requestData.put(requestDataKey, onlineDTO.getBeanRechargeInfo());
}
exportData.put("requestData", requestData);
@@ -245,4 +279,14 @@ public class ExportServiceImpl implements ExportService {
public Result addExportArticle(ArticleDTO dto) {
return addExport(dto, "文章明细", "article:queue:export_queue", "beanConsumeArticle");
}
+
+ @Override
+ public Result addExportBean(BeanRechargeDTO dto) {
+ return addExport(dto, "金豆明细", "bean:queue:export_queue", "beanRechargeInfo");
+ }
+
+ @Override
+ public Result addExportOnline(OnlineDTO dto) {
+ return addExport(dto, "在线明细", "online:queue:export_queue", "beanRechargeInfo");
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/Util/BaseDES2.java b/src/main/java/com/example/demo/Util/BaseDES2.java
index c877377..2020806 100644
--- a/src/main/java/com/example/demo/Util/BaseDES2.java
+++ b/src/main/java/com/example/demo/Util/BaseDES2.java
@@ -91,7 +91,7 @@ public class BaseDES2 {
public static void main(String args[]) {
try {
BaseDES2 d = new BaseDES2();
- String encryptedText = d.encrypt("30003761");
+ String encryptedText = d.encrypt("90035176");
System.out.println("加密结果:" + encryptedText);
} catch (Exception e) {
e.printStackTrace();
diff --git a/src/main/java/com/example/demo/config/AppConfig.java b/src/main/java/com/example/demo/config/AppConfig.java
index c40f7fd..a50aa5b 100644
--- a/src/main/java/com/example/demo/config/AppConfig.java
+++ b/src/main/java/com/example/demo/config/AppConfig.java
@@ -2,6 +2,7 @@ package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
@Configuration
@@ -9,6 +10,8 @@ public class AppConfig {
@Bean
public RestTemplate restTemplate() {
- return new RestTemplate();
+ RestTemplate restTemplate = new RestTemplate();
+ restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
+ return restTemplate;
}
}
diff --git a/src/main/java/com/example/demo/config/Mysql4DataSourceConfig.java b/src/main/java/com/example/demo/config/Mysql4DataSourceConfig.java
index 9ba65a8..32bf6b8 100644
--- a/src/main/java/com/example/demo/config/Mysql4DataSourceConfig.java
+++ b/src/main/java/com/example/demo/config/Mysql4DataSourceConfig.java
@@ -36,7 +36,7 @@ public class Mysql4DataSourceConfig {
@Qualifier("globalConfiguration4") org.apache.ibatis.session.Configuration globalConfiguration4) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
- sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:payMapper/*.xml"));
+ sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:paymapper/*.xml"));
sessionFactory.setConfiguration(globalConfiguration4);
return sessionFactory.getObject();
}
diff --git a/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java b/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
index 1711016..5234ccb 100644
--- a/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
+++ b/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
@@ -1,6 +1,8 @@
package com.example.demo.controller.bean;
+import com.example.demo.domain.vo.bean.BeanConsume;
import com.example.demo.domain.vo.bean.BeanConsumeGold;
+import com.example.demo.domain.vo.bean.BeanRecharge;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.bean.BeanConsumeService;
@@ -45,6 +47,16 @@ public class BeanConsumeController {
return Result.success(deptList);
}
+
+ //减少金豆
+ @PostMapping("/reduce")
+ public Result reduce(@RequestBody BeanConsume consume) {
+ try {
+ return beanConsumeService.reduce(consume);
+ } catch (Exception e) {
+ return Result.error("减少失败");
+ }
+ }
//筛选查询直播消费记录
@PostMapping("/selectLiveBy")
public Result selectLiveBy(@RequestBody Page page){
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 47194af..c254645 100644
--- a/src/main/java/com/example/demo/controller/bean/BeanRechargeController.java
+++ b/src/main/java/com/example/demo/controller/bean/BeanRechargeController.java
@@ -1,7 +1,8 @@
package com.example.demo.controller.bean;
+import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
import com.example.demo.domain.vo.bean.BeanRecharge;
-import com.example.demo.domain.vo.bean.BeanRechargeInfo;
+import com.example.demo.domain.vo.bean.BeanSystemRechargeInfo;
import com.example.demo.domain.vo.bean.GoldBean;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
@@ -53,7 +54,7 @@ public class BeanRechargeController {
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
} else {
- return Result.success(beanRechargeService.selectBySystem(page.getPageNum(), page.getPageSize(), page.getBeanRechargeInfo()));
+ return Result.success(beanRechargeService.selectBySystem(page.getPageNum(), page.getPageSize(), page.getBeanSystemRechargeInfo()));
}
} catch (Exception e) {
e.printStackTrace();
@@ -64,9 +65,9 @@ public class BeanRechargeController {
//系统金豆统计
@PostMapping("/statsSystemBean")
- public Result statsSystemBean(@RequestBody BeanRechargeInfo beanRechargeInfo) {
+ public Result statsSystemBean(@RequestBody BeanSystemRechargeInfo beanSystemRechargeInfo) {
try {
- GoldBean goldBean = beanRechargeService.statsSystemBean(beanRechargeInfo);
+ GoldBean goldBean = beanRechargeService.statsSystemBean(beanSystemRechargeInfo);
return Result.success(goldBean);
} catch (Exception e) {
return Result.error("请检查数据的格式");
@@ -90,7 +91,7 @@ public class BeanRechargeController {
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
} else {
- return Result.success(beanRechargeService.selectByOnline(page.getPageNum(), page.getPageSize(), page.getBeanRechargeInfo()));
+ return Result.success(beanRechargeService.selectByOnline(page.getPageNum(), page.getPageSize(), page.getBeanOnlineRechargeInfo()));
}
} catch (Exception e) {
e.printStackTrace();
@@ -101,9 +102,9 @@ public class BeanRechargeController {
//线上金豆统计
@PostMapping("/statsOnlineBean")
- public Result statsOnlineBean(@RequestBody BeanRechargeInfo beanRechargeInfo) {
+ public Result statsOnlineBean(@RequestBody BeanOnlineRechargeInfo beanOnlineRechargeInfo) {
try {
- GoldBean goldBean = beanRechargeService.statsOnlineBean(beanRechargeInfo);
+ GoldBean goldBean = beanRechargeService.statsOnlineBean(beanOnlineRechargeInfo);
return Result.success(goldBean);
} catch (Exception e) {
return Result.error("请检查数据的格式");
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 c3b85bc..a425c2a 100644
--- a/src/main/java/com/example/demo/controller/coin/ExportController.java
+++ b/src/main/java/com/example/demo/controller/coin/ExportController.java
@@ -149,4 +149,38 @@ public class ExportController {
redisLockUtil.unlock(lockKey, requestId);
}
}
+ @PostMapping("/exportBean")
+ public Result export(@Valid @RequestBody BeanRechargeDTO dto){
+ String lockKey = "export:lock:" + dto.getToken();
+ String requestId = UUID.randomUUID().toString();
+ long expireTime = 5000;
+ try {
+ // 尝试获取锁
+ if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
+ throw new BusinessException("操作太频繁,请稍后重试");
+ }
+ // 执行业务逻辑
+ return exportService.addExportBean(dto);
+ } finally {
+ // 释放锁
+ redisLockUtil.unlock(lockKey, requestId);
+ }
+ }
+ @PostMapping("/exportol")
+ public Result exportol(@Valid @RequestBody OnlineDTO dto) throws Exception {
+ String lockKey = "export:lock:" + dto.getToken();
+ String requestId = UUID.randomUUID().toString();
+ long expireTime = 5000;
+ try {
+ // 尝试获取锁
+ if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
+ throw new BusinessException("操作太频繁,请稍后重试");
+ }
+ // 执行业务逻辑
+ return exportService.addExportOnline(dto);
+ } finally {
+ // 释放锁
+ redisLockUtil.unlock(lockKey, requestId);
+ }
+ }
}
\ 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 f890b29..8c155aa 100644
--- a/src/main/java/com/example/demo/controller/coin/GoldDetailController.java
+++ b/src/main/java/com/example/demo/controller/coin/GoldDetailController.java
@@ -11,6 +11,7 @@ import com.example.demo.domain.vo.coin.GoldDetail;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.GoldDetailService;
+import com.example.demo.service.coin.MarketService;
import com.example.demo.serviceImpl.coin.AiEmotionServiceImpl;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
@@ -42,13 +43,16 @@ import java.util.UUID;
@Slf4j
@CrossOrigin
public class GoldDetailController {
- private final GoldDetailService goldDetailService;
+ @Autowired
+ private GoldDetailService goldDetailService;
@Autowired
private RedisLockUtil redisLockUtil;
@Autowired
private AiEmotionServiceImpl aiEmotionServiceImpl;
+ @Autowired
+ MarketService marketService;
@PostMapping("/getGoldDetail")
public Result getGoldDetail(@RequestBody Page page) throws Exception {
@@ -65,8 +69,9 @@ public class GoldDetailController {
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));;
- if(!markets.contains("1")) {
- page.getGoldDetail().setMarkets(markets);
+ if(!markets.contains("总部")&&!markets.contains("研发部")) {
+
+ page.getGoldDetail().setMarkets(marketService.getMarketIds(markets));
}
}
return Result.success(goldDetailService.getGoldDetail(page.getPageNum(), page.getPageSize(), page.getGoldDetail()));
@@ -82,9 +87,10 @@ public class GoldDetailController {
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
- if(!markets.contains("1")) {
- page.getGoldDetail().setMarkets(markets);
- }
+ if(!markets.contains("总部")&&!markets.contains("研发部")) {
+
+ page.getGoldDetail().setMarkets(marketService.getMarketIds(markets));
+ }
}
return Result.success(goldDetailService.sumGold(pageNum,pageSize,goldDetail));
}
@@ -96,8 +102,9 @@ public class GoldDetailController {
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
- if(!markets.contains("1")) {
- user.setMarkets(markets);
+ if(!markets.contains("总部")&&!markets.contains("研发部")) {
+
+ user.setMarkets(marketService.getMarketIds(markets));
}
}
return Result.success(goldDetailService.GoldTotal(user));
@@ -117,8 +124,9 @@ public class GoldDetailController {
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
- if(!markets.contains("1")) {
- page.getUser().setMarkets(markets);
+ if(!markets.contains("总部")&&!markets.contains("研发部")) {
+
+ page.getUser().setMarkets(marketService.getMarketIds(markets));
}
}
return Result.success(goldDetailService.getGold(page.getPageNum(), page.getPageSize(), page.getUser()));
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 7e5d3da..2f6e514 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("1")) {
+ if (markets != null && markets.contains("总部")||markets.contains("研发部")) {
result = workbenchService.getCardCache(markets);//走缓存,拿全部市场的缓存数据
} else {
result = workbenchService.getCard(markets);//不走缓存,计算卡片属性
@@ -71,7 +71,7 @@ public class WorkbenchController {
@PostMapping("getGraph")
public ResponseEntity graph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin) {
String account = admin.getAccount();
- List markets = generalService.getAdminMarket(account);
+ List markets = workbenchService.getAdminMarket(account);
workbench.setMarkets(markets);
diff --git a/src/main/java/com/example/demo/domain/DTO/ArticleDTO.java b/src/main/java/com/example/demo/domain/DTO/ArticleDTO.java
index c5853e0..c9dc8da 100644
--- a/src/main/java/com/example/demo/domain/DTO/ArticleDTO.java
+++ b/src/main/java/com/example/demo/domain/DTO/ArticleDTO.java
@@ -23,7 +23,7 @@ public class ArticleDTO {
private Integer sort = 0;
private String field = "";
private Integer account;
- private Integer type = 7; //类型
+ private Integer type = 8; //类型
private Integer state = 0; //状态
private String text = ""; //关键词搜索
private Integer dataNum = 0;
diff --git a/src/main/java/com/example/demo/domain/DTO/BeanRechargeDTO.java b/src/main/java/com/example/demo/domain/DTO/BeanRechargeDTO.java
new file mode 100644
index 0000000..99a0ae7
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/DTO/BeanRechargeDTO.java
@@ -0,0 +1,37 @@
+package com.example.demo.domain.DTO;
+
+import com.example.demo.domain.vo.bean.BeanConsumeArticle;
+import com.example.demo.domain.vo.bean.BeanRechargeInfo;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: GOLD
+ * @ClassName BeanRechargeDTO
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−08-03 09:26
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+public class BeanRechargeDTO {
+ private String token;
+ private String url = "";
+ private String fileName = "";
+ private Integer sort = 0;
+ private String field = "";
+ private Integer account;
+ private Integer type = 9; //类型
+ private Integer state = 0; //状态
+ private String text = ""; //关键词搜索
+ private Integer dataNum = 0;
+ private String deptid = "";
+
+ @NotNull(message = "page不能为空")
+ private Integer page = 1;
+ @NotNull(message = "pageSize不能为空")
+ private Integer pageSize = 20;
+ private BeanRechargeInfo beanRechargeInfo;
+}
diff --git a/src/main/java/com/example/demo/domain/DTO/OnlineDTO.java b/src/main/java/com/example/demo/domain/DTO/OnlineDTO.java
new file mode 100644
index 0000000..3247e86
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/DTO/OnlineDTO.java
@@ -0,0 +1,36 @@
+package com.example.demo.domain.DTO;
+
+import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: GOLD
+ * @ClassName OnlineDTO
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−08-03 11:51
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+public class OnlineDTO {
+ private String token;
+ private String url = "";
+ private String fileName = "";
+ private Integer sort = 0;
+ private String field = "";
+ private Integer account;
+ private Integer type = 10; //类型
+ private Integer state = 0; //状态
+ private String text = ""; //关键词搜索
+ private Integer dataNum = 0;
+ private String deptid = "";
+
+ @NotNull(message = "page不能为空")
+ private Integer page = 1;
+ @NotNull(message = "pageSize不能为空")
+ private Integer pageSize = 20;
+ private BeanOnlineRechargeInfo beanRechargeInfo;
+}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsume.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsume.java
new file mode 100644
index 0000000..2ae8f76
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsume.java
@@ -0,0 +1,26 @@
+package com.example.demo.domain.vo.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanConsume
+ * @description:
+ * @author: Ethan
+ * @create: 2025−08-02 11:32
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BeanConsume {
+ private Integer id;//id
+ private String jwcode; // 精网号
+ private Integer freeBean; // 免费豆
+ private Integer permanentBean; // 永久豆
+ private String remark; //备注
+ private Integer money; // 金额
+ private String adminName; // 管理员名称
+}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanOnlineRechargeInfo.java b/src/main/java/com/example/demo/domain/vo/bean/BeanOnlineRechargeInfo.java
new file mode 100644
index 0000000..ff03497
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanOnlineRechargeInfo.java
@@ -0,0 +1,58 @@
+package com.example.demo.domain.vo.bean;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanRecharge
+ * @description:
+ * @author: Double
+ * @create: 2025−07-30 15:11
+ * @Version 1.0
+ **/
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BeanOnlineRechargeInfo {
+
+
+ private Long id;//id
+ @ExcelProperty("精网号")
+ private Integer jwcode; // 精网号
+ @ExcelProperty("客户姓名")
+ private String name; // 姓名
+ @ExcelProperty("所属地区")
+ private String market; // 所属地区
+ @ExcelProperty("金额")
+ private Double money; // 金额
+ @ExcelProperty("数量")
+ private Integer num; // 数量
+ @ExcelProperty("订单号")
+ private String orderNo; // 订单号
+ @ExcelProperty("充值平台 PC:1 手机:2")
+ private String platform; // 充值平台
+ @ExcelProperty("充值时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date rechargeTime; // 充值时间
+ @ExcelIgnore
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date startTime; // 开始时间
+ @ExcelIgnore
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date endTime; // 结束时间
+ @ExcelIgnore
+ private List markets; // 地区列表
+ @ExcelIgnore
+ private String sortField; //排序字段
+ @ExcelIgnore
+ private String sortOrder; //排序顺序
+}
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
index 6dc7101..3dd0e65 100644
--- a/src/main/java/com/example/demo/domain/vo/bean/BeanRechargeInfo.java
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanRechargeInfo.java
@@ -1,5 +1,6 @@
package com.example.demo.domain.vo.bean;
+import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
@@ -41,18 +42,21 @@ public class BeanRechargeInfo {
private Integer num; // 数量
@ExcelProperty("订单号")
private String orderNo; // 订单号
- @ExcelProperty("备注")
- private String remark; //备注
- @ExcelProperty("充值平台")
+ @ExcelProperty("充值平台 PC:1 手机:2")
private String platform; // 充值平台
@ExcelProperty("充值时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date rechargeTime; // 充值时间
+ @ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date startTime; // 开始时间
+ @ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date endTime; // 结束时间
+ @ExcelIgnore
private List markets; // 地区列表
+ @ExcelIgnore
private String sortField; //排序字段
+ @ExcelIgnore
private String sortOrder; //排序顺序
}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanSystemRechargeInfo.java b/src/main/java/com/example/demo/domain/vo/bean/BeanSystemRechargeInfo.java
new file mode 100644
index 0000000..c76346d
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanSystemRechargeInfo.java
@@ -0,0 +1,58 @@
+package com.example.demo.domain.vo.bean;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName BeanRecharge
+ * @description:
+ * @author: Double
+ * @create: 2025−07-30 15:11
+ * @Version 1.0
+ **/
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BeanSystemRechargeInfo {
+
+
+ private Long id;//id
+ @ExcelProperty("精网号")
+ private Integer jwcode; // 精网号
+ @ExcelProperty("客户姓名")
+ private String name; // 姓名
+ @ExcelProperty("所属地区")
+ private String market; // 所属地区
+ @ExcelProperty("免费金豆")
+ private Integer freeBean; // 免费豆
+ @ExcelProperty("永久金豆")
+ private Integer permanentBean; // 永久豆
+ @ExcelProperty("金额")
+ private Double money; // 金额
+ @ExcelProperty("备注")
+ private String remark; //备注
+ @ExcelProperty("充值时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date rechargeTime; // 充值时间
+ @ExcelIgnore
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date startTime; // 开始时间
+ @ExcelIgnore
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date endTime; // 结束时间
+ @ExcelIgnore
+ private List markets; // 地区列表
+ @ExcelIgnore
+ private String sortField; //排序字段
+ @ExcelIgnore
+ private String sortOrder; //排序顺序
+}
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 428ff9a..7f727a1 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
@@ -34,7 +34,8 @@ public class Page {
private BeanConsumeLive beanConsumeLive; //直播金豆消费
private BeanConsumeFan beanConsumeFan; //铁粉金豆消费
private BeanConsumeArticle beanConsumeArticle; //文章金豆消费
- private BeanRechargeInfo beanRechargeInfo; //金豆充值信息
+ private BeanSystemRechargeInfo beanSystemRechargeInfo; //金豆充值信息
+ private BeanOnlineRechargeInfo beanOnlineRechargeInfo; //金豆充值信息
private BeanConsumeGold beanConsumeGold; //金豆消费合计数
private BeanUser beanUser; //客户金豆余额明细
private BeanUserCard beanUserCard; //客户金豆卡片
diff --git a/src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper2.java b/src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper2.java
index f61556e..8efcef8 100644
--- a/src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper2.java
+++ b/src/main/java/com/example/demo/mapper/bean/BeanRechargeMapper2.java
@@ -1,7 +1,8 @@
package com.example.demo.mapper.bean;
-import com.example.demo.domain.vo.bean.BeanRechargeInfo;
+
+import com.example.demo.domain.vo.bean.BeanSystemRechargeInfo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@@ -18,7 +19,7 @@ import java.util.List;
@Mapper
public interface BeanRechargeMapper2 {
- List selectBySystem(BeanRechargeInfo beanRechargeInfo);
+ List selectBySystem(BeanSystemRechargeInfo beanSystemRechargeInfo);
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 66694c2..4ea43b2 100644
--- a/src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java
+++ b/src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java
@@ -23,7 +23,7 @@ public interface BeanUserMapper {
List selectUserBy(@Param("beanUser") BeanUser beanUser);
//查询用户卡片
- BeanUserCard userCard(@Param("jwcode")String jwcode, @Param("markets")List markets);
+ BeanUserCard userCard(@Param("jwcode")String jwcode);
//查询客户金豆余额合计
BeanUserCard SumUserBy(@Param("beanUser")BeanUser beanUser);
//查询客户分部
diff --git a/src/main/java/com/example/demo/mapper/coin/MarketMapper.java b/src/main/java/com/example/demo/mapper/coin/MarketMapper.java
index a043938..6377f7a 100644
--- a/src/main/java/com/example/demo/mapper/coin/MarketMapper.java
+++ b/src/main/java/com/example/demo/mapper/coin/MarketMapper.java
@@ -6,4 +6,7 @@ import java.util.List;
public interface MarketMapper {
List getMarket();
+
+ //获取市场id
+ List getMarketIds(List list);
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/mapper/coin/StatisticsMapper.java b/src/main/java/com/example/demo/mapper/coin/StatisticsMapper.java
index e8747d5..875f7c4 100644
--- a/src/main/java/com/example/demo/mapper/coin/StatisticsMapper.java
+++ b/src/main/java/com/example/demo/mapper/coin/StatisticsMapper.java
@@ -24,49 +24,17 @@ public interface StatisticsMapper {
//批量查询
List selectByMarketsAndDate(@Param("markets") List markets, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
- //根据地区、审核状态、起止时间查询订单表数据
- List findByMarketAndAuditStatus(@Param("market") String market,
- @Param("auditStatusList") List auditStatusList,
- @Param("startTime") Date startTime,
- @Param("endTime") Date endTime);
- //获取某地区当前永久金币余量
- Integer sumCurrentPermanentGold(@Param("market") String market);
- //获取某地区当前六月免费金币余量
- Integer sumCurrentFreeJune(@Param("market") String market);
- //获取某地区当前永久金币余量
- Integer sumCurrentFreeDecember(@Param("market") String market);
- //获取某地区当前永久金币余量
- Integer sumCurrentTaskGold(@Param("market") String market);
+
//计算该天充值人数
Integer countRechargeNum(
@Param("market") String market,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
- //计算该天首充人数
- Integer countFirstRecharge(
- @Param("market") String market,
- @Param("startTime") Date startTime,
- @Param("endTime") Date endTime);
- //新增part1统计数据
- void insertPart1(Statistics statistics);
- //更新part1统计数据
- void updatePart1(Statistics statistics);
- //新增part2统计数据
- void insertPart2(Statistics statistics);
- //更新part2统计数据
- void updatePart2(Statistics statistics);
- //新增年度统计数据
- void insertYear(Statistics statistics);
- //更新年度统计数据
- void updateYear(Statistics statistics);
+
//获取某地区某时间所在日期的数据(仅一条)
Statistics selectByMarketAndDate(@Param("market") String market,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
- //获取某地区某时间段的统计数据(仅一条)
- Statistics selectSumByMarketAndDate(@Param("market") String market,
- @Param("startDate") Date startDate,
- @Param("endDate") Date endDate);
// 一次查 所有地区 Part1(余量)
List listPart1All(@Param("today") LocalDate today);
diff --git a/src/main/java/com/example/demo/mapper/pay/BeanRechargeMapper3.java b/src/main/java/com/example/demo/mapper/pay/BeanRechargeMapper3.java
index 8f32789..9038f66 100644
--- a/src/main/java/com/example/demo/mapper/pay/BeanRechargeMapper3.java
+++ b/src/main/java/com/example/demo/mapper/pay/BeanRechargeMapper3.java
@@ -1,7 +1,7 @@
package com.example.demo.mapper.pay;
-import com.example.demo.domain.vo.bean.BeanRechargeInfo;
+import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@@ -18,7 +18,7 @@ import java.util.List;
@Mapper
public interface BeanRechargeMapper3 {
- List selectByOnline(BeanRechargeInfo beanRechargeInfo);
+ List selectByOnline(BeanOnlineRechargeInfo beanOnlineRechargeInfo);
- List systemMarket();
+ List onlineMarket();
}
\ 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
index 62f0138..3b4711c 100644
--- a/src/main/java/com/example/demo/service/bean/BeanConsumeService.java
+++ b/src/main/java/com/example/demo/service/bean/BeanConsumeService.java
@@ -3,6 +3,7 @@ package com.example.demo.service.bean;
import com.example.demo.domain.vo.bean.*;
import com.example.demo.domain.vo.coin.Gold;
import com.example.demo.domain.vo.coin.Page;
+import com.example.demo.domain.vo.coin.Result;
import java.util.List;
@@ -18,6 +19,10 @@ import java.util.List;
public interface BeanConsumeService {
//获取消费用户的分部
List getDept();
+ //获取直播客户地区
+ List getLiveDept();
+ //减少金豆
+ Result reduce(BeanConsume consume);
//筛选查询直播消费
Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive);
//筛选查询铁粉消费
@@ -31,6 +36,6 @@ public interface BeanConsumeService {
//获取直播频道
List getLiveChannel();
- //获取直播客户地区
- List getLiveDept();
+
+
}
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 fd41a35..66f8ad6 100644
--- a/src/main/java/com/example/demo/service/bean/BeanRechargeService.java
+++ b/src/main/java/com/example/demo/service/bean/BeanRechargeService.java
@@ -1,7 +1,8 @@
package com.example.demo.service.bean;
-import com.example.demo.domain.vo.bean.BeanRechargeInfo;
+import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
+import com.example.demo.domain.vo.bean.BeanSystemRechargeInfo;
import com.example.demo.domain.vo.bean.GoldBean;
import com.example.demo.domain.vo.coin.RefundUser;
import com.example.demo.domain.vo.coin.Result;
@@ -25,16 +26,16 @@ public interface BeanRechargeService {
Result add(BeanRecharge recharge);
//系统充值
- PageInfo selectBySystem(Integer pageNum, Integer pageSize, BeanRechargeInfo beanRechargeInfo);
+ PageInfo selectBySystem(Integer pageNum, Integer pageSize, BeanSystemRechargeInfo beanRechargeInfo);
//系统金豆统计
- GoldBean statsSystemBean(BeanRechargeInfo beanRechargeInfo);
+ GoldBean statsSystemBean(BeanSystemRechargeInfo beanRechargeInfo);
//线上充值
- PageInfo selectByOnline(Integer pageNum, Integer pageSize, BeanRechargeInfo beanRechargeInfo);
+ PageInfo selectByOnline(Integer pageNum, Integer pageSize, BeanOnlineRechargeInfo beanRechargeInfo);
//线上金豆统计
- GoldBean statsOnlineBean(BeanRechargeInfo beanRechargeInfo);
+ GoldBean statsOnlineBean(BeanOnlineRechargeInfo beanRechargeInfo);
//获取系统充值地区
List systemMarket();
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 5957dde..c0d316b 100644
--- a/src/main/java/com/example/demo/service/coin/ExportExcelService.java
+++ b/src/main/java/com/example/demo/service/coin/ExportExcelService.java
@@ -27,7 +27,11 @@ public interface ExportExcelService {
Exception FanExcel(String message) throws Exception;
Exception ArticleExcel(String message) throws Exception;
List getExcel(Export export);
+ Exception BeanExcel(String message) throws Exception;
@Transactional
Exception exportExcelGeneric(String message, String exportType, Function dataFetcher) throws Exception;
+
+
+ Exception OnlineExcel(String message) throws Exception;
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/service/coin/MarketService.java b/src/main/java/com/example/demo/service/coin/MarketService.java
index 54de093..43437ee 100644
--- a/src/main/java/com/example/demo/service/coin/MarketService.java
+++ b/src/main/java/com/example/demo/service/coin/MarketService.java
@@ -14,4 +14,7 @@ import java.util.List;
**/
public interface MarketService {
List selectMarket();
+
+ //获取市场id
+ List getMarketIds(List list);
}
diff --git a/src/main/java/com/example/demo/service/listen/BeanListener.java b/src/main/java/com/example/demo/service/listen/BeanListener.java
new file mode 100644
index 0000000..d9ae7e6
--- /dev/null
+++ b/src/main/java/com/example/demo/service/listen/BeanListener.java
@@ -0,0 +1,35 @@
+package com.example.demo.service.listen;
+
+import com.example.demo.Export.ExportService;
+import com.example.demo.Util.RedisUtil;
+import com.example.demo.service.coin.ExportExcelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @program: GOLD
+ * @ClassName BeanListener
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−08-03 11:14
+ * @Version 1.0
+ **/
+@Component
+public class BeanListener extends BaseMessageListener{
+ @Autowired
+ private ExportExcelService exportExcelService;
+ protected BeanListener(RedisUtil redisQueueUtil) {
+ super(redisQueueUtil,"bean:queue:export_queue");
+ }
+
+ @Override
+ protected void handleMessage(String message) {
+ validateMessage( message);
+ try {
+ Thread.sleep(5000);
+ exportExcelService.BeanExcel(message);
+ } catch (Exception e) {
+ handleException(e, message);
+ }
+ }
+}
diff --git a/src/main/java/com/example/demo/service/listen/OnLineListener.java b/src/main/java/com/example/demo/service/listen/OnLineListener.java
new file mode 100644
index 0000000..e3f5484
--- /dev/null
+++ b/src/main/java/com/example/demo/service/listen/OnLineListener.java
@@ -0,0 +1,34 @@
+package com.example.demo.service.listen;
+
+import com.example.demo.Util.RedisUtil;
+import com.example.demo.service.coin.ExportExcelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @program: GOLD
+ * @ClassName OnLineListener
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−08-03 11:58
+ * @Version 1.0
+ **/
+@Component
+public class OnLineListener extends BaseMessageListener {
+ @Autowired
+ public ExportExcelService exportExcelService;
+ protected OnLineListener(RedisUtil redisQueueUtil) {
+ super(redisQueueUtil, "online:queue:export_queue");
+ }
+
+ @Override
+ protected void handleMessage(String message) {
+ validateMessage( message);
+ try {
+ Thread.sleep(5000);
+ exportExcelService.OnlineExcel(message);
+ } catch (Exception e) {
+ handleException(e, message);
+ }
+ }
+}
diff --git a/src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java
index 40d84c5..21625a7 100644
--- a/src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java
@@ -1,5 +1,6 @@
package com.example.demo.serviceImpl.bean;
+import com.example.demo.Util.BaseDES2;
import com.example.demo.domain.vo.bean.BeanAuditInfo;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.bean.GoldBean;
@@ -11,13 +12,22 @@ import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+
+import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
/**
@@ -41,7 +51,7 @@ public class BeanAuditServiceImpl implements BeanAuditService {
// 2. 构建接口URL及参数
- @Value("${file.upload.url}")
+ @Value("${bean.url}")
String apiUrl;
//查找审核信息
@@ -57,36 +67,50 @@ public class BeanAuditServiceImpl implements BeanAuditService {
public Result updateStatus1(BeanAuditInfo info) {
BeanAuditInfo beanAuditInfo = beanAuditMapper.selectById(info.getId());
String jwcode = beanAuditInfo.getJwcode().toString();
- String op = "recharge"; // 操作类型(根据实际业务定义,例如"recharge"表示充值)
+// String jwcode = "2e35cadd48a15cc4cd834d35e38faa71";
+ try {
+ BaseDES2 d = new BaseDES2();
+ jwcode = d.encrypt(jwcode);
+ } catch (Exception e) {
+ return Result.error("加密失败");
+ }
String content = beanAuditInfo.getRemark(); // 备注作为content参数
String orderNo = UUID.randomUUID().toString().replace("-", ""); // 生成唯一订单号(去除横线)
- UriComponentsBuilder urlBuilder1 = UriComponentsBuilder.fromHttpUrl(apiUrl)
- .queryParam("jwcode", jwcode)
- .queryParam("op", op)
- .queryParam("gold", beanAuditInfo.getFreeBean())
- .queryParam("content", content);
-
- UriComponentsBuilder urlBuilder2 = UriComponentsBuilder.fromHttpUrl(apiUrl)
- .queryParam("jwcode", jwcode)
- .queryParam("op", op)
- .queryParam("gold", beanAuditInfo.getPermanentBean())
- .queryParam("content", content)
- .queryParam("order_no", orderNo);
- // 3. 发送GET请求
- ResponseEntity response1 = restTemplate.getForEntity(urlBuilder1.toUriString(), String.class);
-
- // 4. 处理响应结果
- if (!response1.getStatusCode().is2xxSuccessful()) {
- return Result.error("免费远程接口调用失败,状态码:" + response1.getStatusCodeValue());
- }
- // 3. 发送GET请求
- ResponseEntity response2 = restTemplate.getForEntity(urlBuilder2.toUriString(), String.class);
+ // 1. 创建请求参数对象(使用Map或自定义实体类)
+ Map params = new HashMap<>();
+ params.put("jwcode", jwcode);
+ params.put("gold_buy", beanAuditInfo.getPermanentBean().toString());
+ params.put("gold_free", beanAuditInfo.getFreeBean().toString());
+ params.put("content", content);
+ params.put("order_no", orderNo);
+
+// 2. 构建请求头,指定Content-Type为JSON
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON); // 关键:设置为JSON格式
- // 4. 处理响应结果
- if (!response2.getStatusCode().is2xxSuccessful()) {
- return Result.error("付费远程接口调用失败,状态码:" + response2.getStatusCodeValue());
+// 3. 构建请求实体(参数+头信息)
+ HttpEntity