diff --git a/pom.xml b/pom.xml
index 1eef049..a329465 100644
--- a/pom.xml
+++ b/pom.xml
@@ -166,6 +166,21 @@
jaxb-api
2.3.1
+
+ com.stripe
+ stripe-java
+ 30.0.0
+
+
+ org.apache.httpcomponents.client5
+ httpclient5
+ 5.3.1
+
+
+ com.alibaba
+ fastjson
+ 1.2.83
+
diff --git a/src/main/java/com/example/demo/Export/ExportService.java b/src/main/java/com/example/demo/Export/ExportService.java
index f0b2475..f190b38 100644
--- a/src/main/java/com/example/demo/Export/ExportService.java
+++ b/src/main/java/com/example/demo/Export/ExportService.java
@@ -28,4 +28,8 @@ public interface ExportService {
Result addExportBean(BeanRechargeDTO dto);
Result addExportOnline(OnlineDTO dto);
+ //现金负责人退款导出
+ Result addExportFinance(FinanceDTO dto);
+
+ Result addExportCash(CashDTO dto);
}
diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java
index d4eb27c..e86d041 100644
--- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java
+++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java
@@ -124,6 +124,16 @@ public class ExportServiceImpl implements ExportService {
articleDTO.setUrl("");
articleDTO.setFileName(generateFileName("文章明细", adminName));
articleDTO.setDataNum(0);
+ } else if(dto instanceof FinanceDTO financeDTO){
+ financeDTO.setAccount(Integer.valueOf(account));
+ financeDTO.setUrl("");
+ financeDTO.setFileName(generateFileName("现金退款明细", adminName));
+ financeDTO.setDataNum(0);
+ } else if(dto instanceof CashDTO cashDTO){
+ cashDTO.setAccount(Integer.valueOf(account));
+ cashDTO.setUrl("");
+ cashDTO.setFileName(generateFileName("现金收款明细", adminName));
+ cashDTO.setDataNum(0);
}
}
@@ -211,6 +221,26 @@ public class ExportServiceImpl implements ExportService {
onlineDTO.getFileName(),
onlineDTO.getDataNum()
);
+ }else if (dto instanceof FinanceDTO financeDTO){
+ goldDetailMapper.insertExportRecord(
+ idHolder,
+ account,
+ financeDTO.getType(),
+ financeDTO.getState(),
+ financeDTO.getUrl(),
+ financeDTO.getFileName(),
+ financeDTO.getDataNum()
+ );
+ }else if (dto instanceof CashDTO cashDTO){
+ goldDetailMapper.insertExportRecord(
+ idHolder,
+ account,
+ cashDTO.getType(),
+ cashDTO.getState(),
+ cashDTO.getUrl(),
+ cashDTO.getFileName(),
+ cashDTO.getDataNum()
+ );
}
}
@@ -239,6 +269,10 @@ public class ExportServiceImpl implements ExportService {
requestData.put(requestDataKey, beanRechargeDTO.getBeanSystemRechargeInfo());
} else if (dto instanceof OnlineDTO onlineDTO){
requestData.put(requestDataKey, onlineDTO.getBeanOnlineRechargeInfo());
+ }else if(dto instanceof FinanceDTO financeDTO){
+ requestData.put(requestDataKey, financeDTO.getCashRecordDTO());
+ }else if (dto instanceof CashDTO cashDTO){
+ requestData.put(requestDataKey, cashDTO.getCashCollection());
}
exportData.put("requestData", requestData);
@@ -294,4 +328,14 @@ public class ExportServiceImpl implements ExportService {
public Result addExportOnline(OnlineDTO dto) {
return addExport(dto, "在线明细", "online:queue:export_queue", "beanOnlineRechargeInfo");
}
+
+ @Override
+ public Result addExportFinance(FinanceDTO dto) {
+ return addExport(dto, "现金退款明细", "finance:queue:export_queue", "cashRecordDTO");
+ }
+
+ @Override
+ public Result addExportCash(CashDTO dto) {
+ return addExport(dto, "现金收款明细", "cash:queue:export_queue", "cashCollection");
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/config/AppConfig.java b/src/main/java/com/example/demo/config/AppConfig.java
index a50aa5b..3c2f690 100644
--- a/src/main/java/com/example/demo/config/AppConfig.java
+++ b/src/main/java/com/example/demo/config/AppConfig.java
@@ -2,16 +2,60 @@ package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
+import javax.net.ssl.*;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+
@Configuration
public class AppConfig {
@Bean
- public RestTemplate restTemplate() {
+ public RestTemplate restTemplate() throws NoSuchAlgorithmException, KeyManagementException {
RestTemplate restTemplate = new RestTemplate();
+
+ // 配置SSL支持
+ restTemplate.setRequestFactory(createSSLRequestFactory());
+
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
return restTemplate;
}
+
+ /**
+ * 创建支持SSL的HTTP请求工厂
+ */
+ private ClientHttpRequestFactory createSSLRequestFactory() throws NoSuchAlgorithmException, KeyManagementException {
+ TrustManager[] trustAllCerts = new TrustManager[]{
+ new X509TrustManager() {
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[0];
+ }
+ public void checkClientTrusted(X509Certificate[] certs, String authType) {
+ }
+ public void checkServerTrusted(X509Certificate[] certs, String authType) {
+ }
+ }
+ };
+
+ SSLContext sslContext = SSLContext.getInstance("TLS");
+ sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+
+ HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
+
+ // 创建主机名验证器,信任所有主机
+ HostnameVerifier allHostsValid = (hostname, session) -> true;
+ HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
+
+ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+ factory.setConnectTimeout(30000); // 30秒连接超时
+ factory.setReadTimeout(60000); // 60秒读取超时
+
+ return factory;
+ }
}
+
diff --git a/src/main/java/com/example/demo/controller/cash/CashCollectionController.java b/src/main/java/com/example/demo/controller/cash/CashCollectionController.java
index 34f80b8..4930f4a 100644
--- a/src/main/java/com/example/demo/controller/cash/CashCollectionController.java
+++ b/src/main/java/com/example/demo/controller/cash/CashCollectionController.java
@@ -3,6 +3,7 @@ package com.example.demo.controller.cash;
import com.example.demo.Util.JWTUtil;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.CashRecord;
+import com.example.demo.domain.entity.RechargeActivity;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.coin.Page;
@@ -52,7 +53,7 @@ public class CashCollectionController {
@PostMapping("/getActivityList")
public Result getActivityList()
{
- List list = cashCollectionService.getActivityList();
+ List list = cashCollectionService.getActivityList();
return Result.success(list);
}
//新增收款订单
@@ -127,6 +128,14 @@ public class CashCollectionController {
}catch (Exception e){
return Result.error(e.getMessage());
}
-
+ }
+ //根据id查询收款订单
+ @PostMapping("/selectById")
+ public Result selectById(@RequestBody CashCollection cashCollection) {
+ try {
+ return Result.success(cashCollectionService.selectById(cashCollection));
+ }catch (Exception e){
+ return Result.error(e.getMessage());
+ }
}
}
diff --git a/src/main/java/com/example/demo/controller/cash/CashRefundController.java b/src/main/java/com/example/demo/controller/cash/CashRefundController.java
index e8d459c..bced193 100644
--- a/src/main/java/com/example/demo/controller/cash/CashRefundController.java
+++ b/src/main/java/com/example/demo/controller/cash/CashRefundController.java
@@ -3,7 +3,9 @@ package com.example.demo.controller.cash;
import com.example.demo.Util.JWTUtil;
import com.example.demo.domain.entity.Admin;
+import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.cash.CashRecordDone;
+import com.example.demo.domain.vo.cash.CashRecordRefund;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.RechargeUser;
import com.example.demo.domain.vo.coin.Result;
@@ -44,6 +46,10 @@ public class CashRefundController {
@Autowired
MarketService marketService;
+
+/**
+ * 当地财务负责人退款记录
+ */
@PostMapping("/select")
public Result select(@RequestBody Page page) throws Exception {
// 获取当前请求对象
@@ -64,37 +70,87 @@ public class CashRefundController {
}
// 获取传入的市场列表
- List requestedMarkets = page.getCashRecordDone() != null ? page.getCashRecordDone().getMarkets() : null;
+ List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null;
// 权限校验逻辑
if (markets.contains("9") || markets.contains("9999")) {
// 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets
// 如果业务需要,也可以在这里做空值处理
- if (page.getCashRecordDone() != null) {
+ if (page.getCashRecordDTO() != null) {
// 保持 requestedMarkets 不变,原样接受
// 可选:如果 requestedMarkets 为 null,可设为默认值或保持 null
}
} else {
// 普通用户:必须校验权限
if (requestedMarkets == null || requestedMarkets.isEmpty()) {
- page.getCashRecordDone().setMarkets(markets);
+ page.getCashRecordDTO().setMarkets(markets);
}
if (!markets.containsAll(requestedMarkets)) {
return Result.error("无权限!请求的市场不在授权范围内。");
}
// 校验通过,保持 requestedMarkets 不变
}
- return Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDone()));
+ return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO()));
}
+ /**
+ * 添加退款现金记录
+ */
@PostMapping("/add")
- public Result add(@RequestBody CashRecordDone cashRecordDone) throws Exception {
+ public Result add(@RequestBody CashRecordRefund cashRecordRefund) throws Exception {
try {
- return Result.success(refundService.add(cashRecordDone));
+ return Result.success(refundService.add(cashRecordRefund));
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
+ /**
+ * 执行人查看退款现金记录
+ */
+ @PostMapping("/exSelect")
+ public Result executor(@RequestBody Page page) throws Exception {
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+ String token = request.getHeader("token");
+
+// 解析 token 获取用户信息
+ Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
+ List userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
+ List markets = marketService.getMarketIds(userMarkets);
+
+// 校验分页参数
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ }
+
+// 获取传入的市场列表
+ List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null;
+
+// 权限校验逻辑
+ if (markets.contains("9") || markets.contains("9999")) {
+ // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets
+ // 如果业务需要,也可以在这里做空值处理
+ if (page.getCashRecordDTO() != null) {
+ // 保持 requestedMarkets 不变,原样接受
+ // 可选:如果 requestedMarkets 为 null,可设为默认值或保持 null
+ }
+ } else {
+ // 普通用户:必须校验权限
+ if (requestedMarkets == null || requestedMarkets.isEmpty()) {
+ page.getCashRecordDTO().setMarkets(markets);
+ }
+ if (!markets.containsAll(requestedMarkets)) {
+ return Result.error("无权限!请求的市场不在授权范围内。");
+ }
+ // 校验通过,保持 requestedMarkets 不变
+ }
+ return Result.success(refundService.exSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO()));
+ }
+ /**
+ * 查询客服提交现金记录
+ */
@PostMapping("/selecta")
public Result selecta(@RequestBody Page page) {
@@ -107,9 +163,9 @@ public class CashRefundController {
return Result.error("页大小为空!");
}
// 获取传入的市场列表
- List requestedMarkets = page.getCashRecordDone() != null ? page.getCashRecordDone().getMarkets() : null;
+ List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null;
- return Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDone()));
+ return Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO()));
}
@PostMapping("/update")
public Result update(@RequestBody CashRecordDone cashRecordDone)throws Exception {
@@ -152,4 +208,33 @@ public class CashRefundController {
}
}
+ /**
+ * 新增线上退款订单
+ */
+ @PostMapping("/addOnline")
+ public Result addOnline(@RequestBody CashRecordRefund cashRecordRefund){
+ try {
+ return Result.success(refundService.add(cashRecordRefund));
+ } catch (Exception e) {
+ return Result.error(e.getMessage());
+ }
+ }
+
+ @PostMapping("/export")
+ public Result export(@RequestBody Page page) throws Exception {
+
+// 校验分页参数
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ }
+
+ return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO()));
+ }
+ @PostMapping("/ceshi")
+ public Result ceshi() {
+ return Result.success("测试消息");
+ }
}
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 d6e120f..07b9eca 100644
--- a/src/main/java/com/example/demo/controller/coin/ExportController.java
+++ b/src/main/java/com/example/demo/controller/coin/ExportController.java
@@ -6,6 +6,7 @@ import com.example.demo.Util.RedisLockUtil;
import com.example.demo.domain.DTO.*;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.Export;
+import com.example.demo.domain.DTO.CashDTO;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.ExportExcelService;
import com.example.demo.service.coin.GoldDetailService;
@@ -195,4 +196,41 @@ public class ExportController {
redisLockUtil.unlock(lockKey, requestId);
}
}
+ /**
+ * 负责人退款导出
+ */
+ @PostMapping("/exportFinance")
+ public Result exportFinance(@Valid @RequestBody FinanceDTO 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.addExportFinance(dto);
+ } finally {
+ // 释放锁
+ redisLockUtil.unlock(lockKey, requestId);
+ }
+ }
+ @PostMapping("/exportCash")
+ public Result exportCash(@Valid @RequestBody CashDTO 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.addExportCash(dto);
+ }finally {
+ // 释放锁
+ redisLockUtil.unlock(lockKey, requestId);
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java b/src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java
new file mode 100644
index 0000000..2d42566
--- /dev/null
+++ b/src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java
@@ -0,0 +1,192 @@
+package com.example.demo.controller.coin;
+
+import com.example.demo.config.interfac.Log;
+import com.example.demo.domain.vo.coin.Page;
+import com.example.demo.domain.vo.coin.RechargeActivity;
+import com.example.demo.domain.vo.coin.Result;
+import com.example.demo.service.coin.RechargeActivityCenterService;
+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 RechargeActivityCenterController
+ * @description: 充值活动中心管理
+ * @author: Double
+ * @create: 2025−11-04 14:23
+ * @Version 1.0
+ **/
+
+@RestController
+@RequestMapping("/admin/coin/rechargeActivityCenter")
+@RequiredArgsConstructor
+@Slf4j
+@CrossOrigin
+public class RechargeActivityCenterController {
+
+ @Autowired
+ private RechargeActivityCenterService rechargeActivityCenterService;
+
+
+ /**
+ * 导出用户权限数据
+ *
+ * @param page 导出请求参数)
+ * @return 导出结果(成功返回活动信息,失败返回错误信息)
+ * @throws NullPointerException 当参数为空时抛出(如activity为null、关键属性为null)
+ * @throws IllegalArgumentException 当参数无效时抛出(如活动ID非法、参数格式错误)
+ */
+ @Log("条件查询充值活动")
+ @PostMapping("/queryActivity")
+ public Result queryActivity(@RequestBody Page page) {
+ try {
+ //校验参数
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ }
+ if (page.getRechargeActivity() == null) {
+ return Result.error("查询失败:活动信息不能为空");
+ }
+ return Result.success(rechargeActivityCenterService.queryActivity(page.getPageNum(), page.getPageSize(),page.getRechargeActivity()));
+ } catch (NullPointerException e) {
+ log.error("查询活动失败:空指针异常", e);
+ return Result.error("查询失败:数据为空");
+ } catch (IllegalArgumentException e) {
+ log.error("查询活动失败:参数异常", e);
+ return Result.error("查询失败:" + e.getMessage());
+ }
+ }
+
+ /**
+ * 新增充值活动
+ *
+ * @param activity 充值活动请求参数(包含活动名称、活动规则等信息)
+ * @return 新增结果(成功返回提示信息,失败返回错误原因)
+ * @throws NullPointerException 当请求参数为空时抛出(如activity为null、活动名称等关键属性为null)
+ * @throws IllegalArgumentException 当请求参数无效时抛出(如活动名称为空字符串、参数格式不符合要求等)
+ */
+ @Log("新增充值活动")
+ @PostMapping("/addActivity")
+ public Result addActivity(@RequestBody RechargeActivity activity) {
+ try {
+ if (activity == null) {
+ return Result.error("添加失败:活动信息不能为空");
+ }
+ if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) {
+ return Result.error("添加失败:活动名称不能为空");
+ }
+ if (activity.getBusinessBelong() == null || activity.getBusinessBelong().trim().isEmpty()) {
+ return Result.error("添加失败:业绩归属地不能为空");
+ }else if (activity.getBusinessBelong().equals("活动归属地")) {
+ if (activity.getArea() == null || activity.getArea().trim().isEmpty()) {
+ return Result.error("添加失败:地区不能为空");
+ }
+ }
+ if (activity.getStartTime() == null) {
+ return Result.error("添加失败:活动开始时间不能为空");
+ }
+ if (activity.getEndTime() == null) {
+ return Result.error("添加失败:活动结束时间不能为空");
+ }
+ if (activity.getEndTime().before(activity.getStartTime())) {
+ return Result.error("添加失败:活动结束时间必须晚于活动开始时间");
+ }
+ if (activity.getCreator() == null || activity.getCreator().trim().isEmpty()) {
+ return Result.error("添加失败:添加人不能为空");
+ }
+ rechargeActivityCenterService.addActivity(activity);
+ return Result.success("添加活动成功");
+ } catch (NullPointerException e) {
+ log.error("添加活动失败:空指针异常", e);
+ return Result.error("添加失败:数据为空");
+ } catch (IllegalArgumentException e) {
+ log.error("添加活动失败:参数异常", e);
+ return Result.error("添加失败:" + e.getMessage());
+ }
+ }
+
+ /**
+ * 更新充值活动
+ *
+ * @param activity 充值活动更新参数(包含活动ID、待更新的活动名称等信息)
+ * @return 更新结果(成功返回提示信息,失败返回错误原因)
+ * @throws NullPointerException 当请求参数为空时抛出(如activity为null、活动ID、活动名称等关键属性为null)
+ * @throws IllegalArgumentException 当请求参数无效时抛出(如活动名称为空字符串、活动ID格式错误等)
+ */
+ @Log("更新充值活动")
+ @PostMapping("/updateActivity")
+ public Result updateActivity(@RequestBody RechargeActivity activity) {
+ try {
+ if (activity == null) {
+ return Result.error("添加失败:活动信息不能为空");
+ }
+ if (activity.getId() == null) {
+ return Result.error("添加失败:活动ID不能为空");
+ }
+ if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) {
+ return Result.error("添加失败:活动名称不能为空");
+ }
+ if (activity.getBusinessBelong() == null || activity.getBusinessBelong().trim().isEmpty()) {
+ return Result.error("添加失败:业绩归属地不能为空");
+ }else if (activity.getBusinessBelong().equals("活动归属地")) {
+ if (activity.getArea() == null || activity.getArea().trim().isEmpty()) {
+ return Result.error("添加失败:地区不能为空");
+ }
+ }
+ if (activity.getStartTime() == null) {
+ return Result.error("添加失败:活动开始时间不能为空");
+ }
+ if (activity.getEndTime() == null) {
+ return Result.error("添加失败:活动结束时间不能为空");
+ }
+ if (activity.getEndTime().before(activity.getStartTime())) {
+ return Result.error("添加失败:活动结束时间必须晚于活动开始时间");
+ }
+ if (activity.getCreator() == null || activity.getCreator().trim().isEmpty()) {
+ return Result.error("添加失败:添加人不能为空");
+ }
+ rechargeActivityCenterService.updateActivity(activity);
+ return Result.success("更新活动成功");
+ } catch (NullPointerException e) {
+ log.error("更新活动失败:空指针异常", e);
+ return Result.error("更新失败:数据为空");
+ } catch (IllegalArgumentException e) {
+ log.error("更新活动失败:参数异常", e);
+ return Result.error("更新失败:" + e.getMessage());
+ }
+ }
+
+ /**
+ * 删除充值活动
+ *
+ * @param activity 待删除的充值活动ID
+ * @return 删除结果(成功返回提示信息,失败返回错误原因)
+ * @throws NullPointerException 当活动ID为空时抛出(如id为null)
+ * @throws IllegalArgumentException 当活动ID无效时抛出(如id为负数、非整数格式等不符合业务要求的情况)
+ */
+ @Log("删除充值活动")
+ @PostMapping("/deleteActivity")
+ public Result deleteActivity(@RequestBody RechargeActivity activity) {
+ try {
+ if (activity.getId() == null) {
+ return Result.error("删除失败:活动ID不能为空");
+ }
+ rechargeActivityCenterService.deleteActivity(activity);
+ return Result.success("删除活动成功");
+ } catch (NullPointerException e) {
+ log.error("删除活动失败:空指针异常", e);
+ return Result.error("删除失败:数据为空");
+ } catch (IllegalArgumentException e) {
+ log.error("删除活动失败:参数异常", e);
+ return Result.error("删除失败:" + e.getMessage());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/controller/coin/RoleController.java b/src/main/java/com/example/demo/controller/coin/RoleController.java
index 36e3786..89f220e 100644
--- a/src/main/java/com/example/demo/controller/coin/RoleController.java
+++ b/src/main/java/com/example/demo/controller/coin/RoleController.java
@@ -115,4 +115,21 @@ public class RoleController {
}
}
+
+ //查询所有直播渠道
+ @PostMapping("/getChannel")
+ public Result getChannel(){
+ return Result.success(roleService.getChannel());
+ }
+
+
+ @Log("获取频道列表")
+ @PostMapping("/selectChannel")
+ public Result selectChannel(@RequestBody RoleVo roleVo) {
+ Integer id = roleVo.getId();
+ List list=roleService.selectSubRole(id);
+ return Result.success(list);
+ }
+
+
}
diff --git a/src/main/java/com/example/demo/domain/DTO/CashDTO.java b/src/main/java/com/example/demo/domain/DTO/CashDTO.java
new file mode 100644
index 0000000..09aeea1
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/DTO/CashDTO.java
@@ -0,0 +1,39 @@
+package com.example.demo.domain.DTO;
+
+import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
+import com.example.demo.domain.vo.cash.CashCollection;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: GOLD
+ * @ClassName CashDTO
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−11-09 09:26
+ * @Version 1.0
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CashDTO {
+ private String token;
+ private String url = "";
+ private String fileName = "";
+ private Integer sort = 0;
+ private String field = "";
+ private Integer account;
+ private Integer type = 13; //类型
+ 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 CashCollection cashCollection;
+}
diff --git a/src/main/java/com/example/demo/domain/DTO/FinanceDTO.java b/src/main/java/com/example/demo/domain/DTO/FinanceDTO.java
new file mode 100644
index 0000000..d98283a
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/DTO/FinanceDTO.java
@@ -0,0 +1,36 @@
+package com.example.demo.domain.DTO;
+
+import com.example.demo.domain.vo.cash.CashRecordDTO;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: GOLD
+ * @ClassName FinanceDTO
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−11-06 21:22
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+public class FinanceDTO {
+ private String token;
+ private String url = "";
+ private String fileName = "";
+ private Integer sort = 0;
+ private String field = "";
+ private Integer account;
+ private Integer type = 12; //类型
+ private Integer state = 0; //状态
+ private String text = ""; //关键词搜索
+ private Integer dataNum = 0;
+ private String deptid = "";
+ private CashRecordDTO cashRecordDTO;
+
+ @NotNull(message = "page不能为空")
+ private Integer page = 1;
+ @NotNull(message = "pageSize不能为空")
+ private Integer pageSize = 5000;
+}
diff --git a/src/main/java/com/example/demo/domain/entity/CashRecord.java b/src/main/java/com/example/demo/domain/entity/CashRecord.java
index 958f5bb..d570bea 100644
--- a/src/main/java/com/example/demo/domain/entity/CashRecord.java
+++ b/src/main/java/com/example/demo/domain/entity/CashRecord.java
@@ -35,6 +35,7 @@ public class CashRecord implements Serializable {
private String bankCode; // 银行流水订单号
private String goodsName; // 商品名称
private Integer goodNum; // 产品数量
+ private String NumUnit; // 数量单位 个/月/年
private Integer permanentGold; // 永久金币数量
private Integer freeGold; // 免费金币数量
diff --git a/src/main/java/com/example/demo/domain/entity/RechargeActivity.java b/src/main/java/com/example/demo/domain/entity/RechargeActivity.java
new file mode 100644
index 0000000..32e76b7
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/entity/RechargeActivity.java
@@ -0,0 +1,35 @@
+package com.example.demo.domain.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * @program: gold-java
+ * @ClassName RechargeActivity
+ * @description:
+ * @author: Ethan
+ * @create: 2025−11-04 11:48
+ * @Version 1.0
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class RechargeActivity {
+ private Integer id; //活动id
+ private String activityName; //活动名称
+ private String businessBelong; //业绩归属地
+ private Integer status; //状态 0未开始 1进行中 2已结束(不是实时更新的,仅展示,不要拿这个做校验)
+ private Integer creator; //添加人
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private LocalDateTime startTime; // 开始时间(到秒)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private LocalDateTime endTime; // 结束时间(到秒)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private LocalDateTime createTime; // 创建日期(到秒)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private LocalDateTime updateTime; // 更新日期(到秒)
+}
diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java b/src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java
index bed1057..d3d123d 100644
--- a/src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java
@@ -46,4 +46,5 @@ public class BeanAuditInfo {
private Date auditEndTime; // 结束时间
private String sortField; // 排序字段
private String sortOrder; // 排序顺序
+ private String flag; // 员工数据
}
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
index 4a64ff6..6936047 100644
--- a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java
@@ -34,6 +34,8 @@ public class BeanConsumeArticle {
private String type; //类型source_type 9、10打赏,11付费
@ExcelIgnore
private Integer payMode; // 0 打赏 1 付费 2 其他
+ @ExcelIgnore
+ private Integer flag;
@ExcelProperty("金豆总数")
private String beanNum; //金豆数量
@ExcelProperty("付费金豆数")
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
index 5dd5be6..8ca5277 100644
--- a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java
@@ -44,6 +44,8 @@ public class BeanConsumeFan {
@ExcelIgnore
private Integer payType; //支付方式(直播:12345,铁粉:7,文章:8)
@ExcelIgnore
+ private Integer flag; //是否包含员工
+ @ExcelIgnore
private String sortField; //排序字段
@ExcelIgnore
private String sortOrder; //排序顺序
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
index 177d7b9..f39d893 100644
--- a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java
@@ -36,6 +36,8 @@ public class BeanConsumeLive {
//文章: 1. 打赏2. 付费
//@ExcelProperty("类型" )
@ExcelIgnore
+ private Integer flag;
+ @ExcelIgnore
private String type; //类型
@ExcelProperty("礼物")
private String gift; //礼物名称
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
index 3230e04..725ea1b 100644
--- a/src/main/java/com/example/demo/domain/vo/bean/BeanUser.java
+++ b/src/main/java/com/example/demo/domain/vo/bean/BeanUser.java
@@ -20,6 +20,7 @@ public class BeanUser {
private String name; //姓名
private Integer jwcode; //精网号
private String dept; //分部
+ private String flag; //是否包含员工
private Integer beanNum; //金豆数量
private Integer buyBean; //付费金豆
private Integer freeBean; //免费金豆
diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java b/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java
index bfdccd3..b25d472 100644
--- a/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java
+++ b/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java
@@ -36,6 +36,7 @@ public class CashCollection implements Serializable {
private String bankCode; // 银行流水订单号
private String goodsName; // 商品名称
private Integer goodNum; // 商品数量
+ private String numUnit; //数量单位 个/月/年
private Integer permanentGold; // 永久金币数量
private Integer freeGold; // 免费金币数量
//金额信息
diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java
new file mode 100644
index 0000000..6f46211
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java
@@ -0,0 +1,248 @@
+package com.example.demo.domain.vo.cash;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @program: GOLD
+ * @ClassName CashRecordDTO
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−11-04 17:03
+ * @Version 1.0
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CashRecordDTO{
+ private String activity;// 活动
+ private String goodsName;// 商品名称
+ private Integer goodsNum;// 商品数量
+ private String numUnit;// 商品单位
+ private BigDecimal gold;//永久金币
+ private BigDecimal free;//免费金币
+ private String paymentCurrency;// 支付币种
+ private BigDecimal paymentAmount;// 支付金额
+ private String receivedCurrency;// 收款币种
+ private BigDecimal receivedAmount;// 收款金额
+ private BigDecimal handlingCharge;// 手续费
+ private String payBankCode;// 付款银行
+ private String payType;// 支付方式
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private LocalDateTime payTime;// 付款时间
+ private String receivedMarket;// 收款地区
+ private String payVoucher;// 支付凭证
+ private String payRemark;// 支付备注
+ //提交人
+ private String paySubmitter;
+ //提交人
+ private String Submitter;
+ //审核人
+ private String audit;
+ //到账日期
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private LocalDateTime receivedTime;
+ @ExcelIgnore
+ private List goodsNames;// 商品名称
+ @ExcelIgnore
+ private List markets;// 地区
+
+
+ /**
+ * 序号
+ */
+ private Integer id;
+
+ /**
+ * 精网号
+ */
+ private Integer jwcode;
+
+ /**
+ * 姓名
+ */
+ private String userName;
+ private String name;
+
+ /**
+ * 所属地区
+ */
+ private Integer market;
+
+ /**
+ * 金币订单号
+ */
+ private String orderCode;
+
+ /**
+ * 银行流水订单号
+ */
+ private String bankCode;
+
+ /**
+ * 永久金币
+ */
+ private BigDecimal permanentGold;
+
+ /**
+ * 免费金币
+ */
+ private BigDecimal freeGold;
+
+ /**
+ * 审核人id
+ */
+ @ExcelIgnore
+ private Integer auditId;
+
+ /**
+ * 订单状态(1位代表收款,2位代表退款)
+ 0:线下财务待审核;1:线下财务审核通过待填手续费;2线下财务审核驳回;5:手动撤回待编辑提交
+ 3:link线上财务复核待填手续费
+ 4:收款流程全部结束
+ 6:退款
+ ---------------------------------------------
+ 10:地区财务待审核;11:地区财务手动撤回待编辑提交12:地区财务驳回;
+ 20:地区负责人待审核;22:地区负责人驳回;
+ 30:总部财务待审核;32:总部财务驳回;
+ 40:执行人待处理;41:执行人已处理,退款结束
+ */
+ private Integer status;
+
+ /**
+ * 提交人id
+ */
+ @ExcelIgnore
+ private Integer submitterId;
+
+ /**
+ * 提交人地区
+ */
+ private String submitterMarket;
+
+ /**
+ * 转账凭证
+ */
+ private String voucher;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 驳回理由
+ */
+ private String rejectReason;
+
+ /**
+ * 退款备注(理由),客服填写
+ */
+ private String refundReason;
+
+ /**
+ * 退款方式(0全额/1部分)
+ */
+ private Integer refundModel;
+
+ /**
+ * 退款执行人OA号
+ */
+ private Integer executor;
+
+ /**
+ * 退款途径
+ */
+ private String refundChannels;
+
+ /**
+ * 退款日期(到天)
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date refundTime;
+
+ /**
+ * 退款备注(执行人填写)
+ */
+ private String refundRemark;
+
+ /**
+ * 退款截图
+ */
+ private String refundVoucher;
+
+ /**
+ * 创建时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date createTime;
+
+ /**
+ * 更新时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date updateTime;
+
+ /**
+ * 审核时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date auditTime;
+
+ /**
+ * 退款币种
+ */
+ private String refundCurrency;
+
+ /**
+ * 退款金额
+ */
+ private String refundAmount;
+
+ /**
+ * 关联收款id
+ */
+ @ExcelIgnore
+ private Integer relatedId;
+ @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; // 结束时间
+ private String submitterName;
+ private String auditName;
+ private String executorName;
+ private String marketName;
+ @ExcelIgnore
+ private List statuses;
+ @ExcelIgnore
+ private String processInstanceId; // 流程实例ID
+ @ExcelIgnore
+ private String currentTaskId; // 当前任务ID
+
+ private String areaServise;
+ private String areaFinance;
+ private String areaCharge;
+ private String headFinance;
+ @ExcelIgnore
+ private String sortField;
+ @ExcelIgnore
+ private String sortOrder;
+
+ @ExcelIgnore
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date sTime; // 开始时间
+ @ExcelIgnore
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date eTime; // 结束时间
+
+}
diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java
new file mode 100644
index 0000000..7e4f6bf
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java
@@ -0,0 +1,203 @@
+package com.example.demo.domain.vo.cash;
+
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *
+ * @TableName cash_record_refund
+ */
+@Data
+@NoArgsConstructor
+public class CashRecordRefund {
+ /**
+ * 序号
+ */
+ private Integer id;
+
+ /**
+ * 精网号
+ */
+ private Integer jwcode;
+
+ /**
+ * 姓名
+ */
+ private String userName;
+ private String name;
+
+ /**
+ * 所属地区
+ */
+ private String market;
+
+ /**
+ * 金币订单号
+ */
+ private String orderCode;
+
+ /**
+ * 银行流水订单号
+ */
+ private String bankCode;
+
+ /**
+ * 永久金币
+ */
+ private Integer permanentGold;
+
+ /**
+ * 免费金币
+ */
+ private Integer freeGold;
+
+ /**
+ * 审核人id
+ */
+ private Integer auditId;
+
+ /**
+ * 订单状态(1位代表收款,2位代表退款)
+0:线下财务待审核;1:线下财务审核通过待填手续费;2线下财务审核驳回;5:手动撤回待编辑提交
+3:link线上财务复核待填手续费
+4:收款流程全部结束
+6:退款
+---------------------------------------------
+10:地区财务待审核;11:地区财务手动撤回待编辑提交12:地区财务驳回;
+20:地区负责人待审核;22:地区负责人驳回;
+30:总部财务待审核;32:总部财务驳回;
+40:执行人待处理;41:执行人已处理,退款结束
+ */
+ private Integer status;
+
+ /**
+ * 提交人id
+ */
+ private Integer submitterId;
+
+ /**
+ * 提交人地区
+ */
+ private String submitterMarket;
+
+ /**
+ * 转账凭证
+ */
+ private String voucher;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 驳回理由
+ */
+ private String rejectReason;
+
+ /**
+ * 退款备注(理由),客服填写
+ */
+ private String refundReason;
+
+ /**
+ * 退款方式(0全额/1部分)
+ */
+ private Integer refundModel;
+
+ /**
+ * 退款执行人OA号
+ */
+ private Integer executor;
+
+ /**
+ * 退款途径
+ */
+ private String refundChannels;
+
+ /**
+ * 退款日期(到天)
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date refundTime;
+
+ /**
+ * 退款备注(执行人填写)
+ */
+ private String refundRemark;
+
+ /**
+ * 退款截图
+ */
+ private String refundVoucher;
+
+ /**
+ * 创建时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date createTime;
+
+ /**
+ * 更新时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date updateTime;
+
+ /**
+ * 审核时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date auditTime;
+
+ /**
+ * 退款币种
+ */
+ private String refundCurrency;
+
+ /**
+ * 退款金额
+ */
+ private String refundAmount;
+
+ /**
+ * 关联收款id
+ */
+ private Integer relatedId;
+ @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; // 结束时间
+ private String submitterName;
+ private String auditName;
+ private String executorName;
+ private String marketName;
+ private List statuses;
+
+ private String processInstanceId; // 流程实例ID
+ private String currentTaskId; // 当前任务ID
+
+ private String areaServise;
+ private String areaFinance;
+ private String areaCharge;
+ private String headFinance;
+ private String sortField;
+ private String sortOrder;
+ @ExcelIgnore
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date sTime; // 开始时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date eTime; // 结束时间
+ private Integer partRefundGold;
+ private Integer partRefundFree;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java b/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java
new file mode 100644
index 0000000..d2a66e5
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java
@@ -0,0 +1,24 @@
+package com.example.demo.domain.vo.cash;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: GOLD
+ * @ClassName LhlAudit
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−11-05 16:45
+ * @Version 1.0
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LhlAudit {
+ private Integer id;
+ private String areaServise;//
+ private String areaFinance;
+ private String areaCharge;
+ private String headFinace;
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/domain/vo/coin/IdName.java b/src/main/java/com/example/demo/domain/vo/coin/IdName.java
new file mode 100644
index 0000000..fa550d3
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/coin/IdName.java
@@ -0,0 +1,13 @@
+package com.example.demo.domain.vo.coin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class IdName {
+ private Integer id;
+ private String name;
+}
\ No newline at end of file
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 ec84775..840b1c2 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
@@ -3,6 +3,7 @@ package com.example.demo.domain.vo.coin;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.bean.*;
import com.example.demo.domain.vo.cash.CashCollection;
+import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.cash.CashRecordDone;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -44,5 +45,7 @@ public class Page {
private HistoryRecord historyRecord; //历史记录
private CashCollection cashCollection; //现金收款
private CashRecordDone cashRecordDone;
+ private RechargeActivity rechargeActivity; //充值活动
+ private CashRecordDTO cashRecordDTO;
}
diff --git a/src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java b/src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java
new file mode 100644
index 0000000..97a2ae3
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java
@@ -0,0 +1,65 @@
+package com.example.demo.domain.vo.coin;
+
+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;
+
+/**
+ * @program: gold-java
+ * @ClassName RechargeActivity
+ * @description: 充值活动信息VO类
+ * @author: Double
+ * @create: 2025−10-28 15:00
+ * @Version 1.0
+ **/
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class RechargeActivity {
+
+ @ExcelProperty("活动ID")
+ private Integer id; // 活动唯一标识
+
+ @ExcelProperty("活动名称")
+ private String activityName; // 活动名称
+
+ @ExcelProperty("业绩归属地")
+ private String businessBelong; // 业绩归属地
+
+ private String area; // 地区
+
+ @ExcelProperty("地区")
+ private String areaName; // 地区名
+
+ @ExcelProperty("活动开始时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date startTime; // 活动开始时间
+
+ @ExcelProperty("活动结束时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date endTime; // 活动结束时间
+
+ @ExcelProperty("活动状态")
+ private String status; // 活动状态(进行中、已结束、未开始)
+
+ private String creator; // 添加人
+
+ @ExcelProperty("添加人")
+ private String creatorName; // 添加人名字
+
+ @ExcelProperty("创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date createTime; // 创建时间
+
+ @ExcelProperty("更新时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date updateTime; // 更新时间
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date activityTime; // 活动时间
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java b/src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java
index 7483312..3c009db 100644
--- a/src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java
+++ b/src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java
@@ -55,7 +55,7 @@ public class RechargeAudit {
private String auditName; //审核人姓名
private Byte type; //类型
private String rejectReason; //驳回理由
- // private Integer flag; //是否为员工号 0员工号 1非员工号
+ private Integer flag; //是否为员工号 0员工号 1非员工号
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private String payTime; //支付时间
diff --git a/src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java b/src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java
index 658c8d4..1d04c13 100644
--- a/src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java
+++ b/src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java
@@ -51,7 +51,7 @@ public class RefundAudit {
private String auditName; //审核人姓名
private String rejectReason; //驳回理由
private Byte type; //类型
- // private Integer flag; //是否为员工号 0-员工号 1-非员工号
+ private Integer flag; //是否为员工号 0-员工号 1-非员工号
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
diff --git a/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java b/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java
index d0f29c7..984c8e2 100644
--- a/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java
+++ b/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java
@@ -34,6 +34,7 @@ public class RoleVo implements Serializable {
private String fatherMarket;//父级角色市场
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; // 创建时间
+ private String channel;//所属渠道
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime; // 更新时间
diff --git a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
index 7c598fb..139c995 100644
--- a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
+++ b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
@@ -1,12 +1,16 @@
package com.example.demo.mapper.cash;
+import cn.hutool.core.lang.Opt;
import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.entity.GOrder;
+import com.example.demo.domain.entity.RechargeActivity;
import com.example.demo.domain.vo.cash.CashCollection;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import java.time.LocalDateTime;
import java.util.List;
+import java.util.Set;
/**
* @program: gold-java
@@ -45,10 +49,13 @@ public interface CashCollectionMapper {
//根据精网号获取市场名
String getMarketNameByJwcode(Integer jwcode);
//获取收款活动列表
- List getActivityList();
+ List getActivityList(@Param("now")LocalDateTime now);
//查找未同步的订单
ListgetUnSync(@Param("size")int size);
//给同步过去的gOrder设置同步状态
int markSynced(@Param("orderId") Integer orderId);
+ //根据id查询收款订单
+ CashCollection selectById(Integer id);
+ List selectBatchIds(Set relatedIds);
}
diff --git a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java
index 70cffe4..ee5fa3a 100644
--- a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java
+++ b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java
@@ -1,11 +1,12 @@
package com.example.demo.mapper.cash;
-import com.example.demo.domain.vo.cash.CashCollection;
-import com.example.demo.domain.vo.cash.CashRecordDone;
+import cn.hutool.core.lang.Opt;
+import com.example.demo.domain.vo.cash.*;
import com.example.demo.domain.vo.coin.RefundUser;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
+import java.util.Set;
/**
* @program: GOLD
@@ -17,9 +18,9 @@ import java.util.List;
**/
@Mapper
public interface CashRefundMapper {
- List select(CashRecordDone cashRecordDone);
+ List select(CashRecordDTO cashRecordDTO);
int update(CashRecordDone cashRecordDone);
- int insert(CashRecordDone cashRecordDone);
+ int insert(CashRecordRefund cashRecordRefund);
int withdraw(Integer id);
int review(CashRecordDone cashRecordDone);
@@ -29,4 +30,10 @@ public interface CashRefundMapper {
int updateStatus(CashRecordDone cashRecordDone);
void addAudit(CashRecordDone cashRecordDone);
void updateAudit(CashRecordDone cashRecordDone);
-}
+ List financeSelect(CashRecordDTO cashRecordDTO);
+ //获取各阶段审核人
+ LhlAudit getAudit(Integer id);
+ List exSelect(CashRecordDTO cashRecordDTO);
+
+ List getAuditBatch(Set auditIds);
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/mapper/coin/AuditMapper.java b/src/main/java/com/example/demo/mapper/coin/AuditMapper.java
index f6a07d1..97ded8f 100644
--- a/src/main/java/com/example/demo/mapper/coin/AuditMapper.java
+++ b/src/main/java/com/example/demo/mapper/coin/AuditMapper.java
@@ -1,5 +1,7 @@
package com.example.demo.mapper.coin;
+import cn.hutool.core.lang.Opt;
+import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.domain.vo.coin.RechargeAudit;
@@ -9,6 +11,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
+import java.util.Set;
/**
* @program: gold-java
@@ -46,6 +49,8 @@ public interface AuditMapper {
String getName(Integer auditId);
//更新首充日期
void updateFirstRecharge(Integer jwcode);
+
+ List getNamesByIds(Set submitterIds);
//添加错误订单
void addErrorRecord(UserGoldRecord order);
}
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 9102db8..99adcd3 100644
--- a/src/main/java/com/example/demo/mapper/coin/MarketMapper.java
+++ b/src/main/java/com/example/demo/mapper/coin/MarketMapper.java
@@ -1,8 +1,11 @@
package com.example.demo.mapper.coin;
+import cn.hutool.core.lang.Opt;
import com.example.demo.domain.entity.Market;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
+import java.util.Set;
public interface MarketMapper {
List getMarket();
@@ -14,4 +17,6 @@ public interface MarketMapper {
Market getMarketIdDao(String country);
Market getMarketIdBytype(String market);
+ String getMarketById(String market);
+ List getMarketByIds(@Param("marketIds") Set marketIds);
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java b/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java
new file mode 100644
index 0000000..27e527e
--- /dev/null
+++ b/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java
@@ -0,0 +1,35 @@
+package com.example.demo.mapper.coin;
+
+import com.example.demo.domain.vo.coin.RechargeActivity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName RechargeActivityCenterMapper
+ * @description: 充值活动中心Mapper接口
+ * @author: Double
+ * @create: 2025−10-28 14:42
+ * @Version 1.0
+ **/
+
+@Mapper
+public interface RechargeActivityCenterMapper {
+
+ // 查询所有活动(用于批量更新状态)
+ List listActivities();
+
+ // 根据ID查询活动
+ List queryActivity(RechargeActivity activity);
+
+ // 新增活动
+ void addActivity(RechargeActivity activity);
+
+ // 更新活动
+ void updateActivity(RechargeActivity activity);
+
+ // 删除活动
+ void deleteActivity(RechargeActivity activity);
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/mapper/live/LiveMapper.java b/src/main/java/com/example/demo/mapper/live/LiveMapper.java
index 223b64e..5715096 100644
--- a/src/main/java/com/example/demo/mapper/live/LiveMapper.java
+++ b/src/main/java/com/example/demo/mapper/live/LiveMapper.java
@@ -21,6 +21,8 @@ public interface LiveMapper {
List selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive);
//获取直播礼物列表
List getLiveGift();
+ //获取频道列表
+ List getChannel();
//获取直播频道列表
List getLiveChannel();
//计算直播消费金豆合计数
diff --git a/src/main/java/com/example/demo/service/cash/CashCollectionService.java b/src/main/java/com/example/demo/service/cash/CashCollectionService.java
index 1401499..81a1226 100644
--- a/src/main/java/com/example/demo/service/cash/CashCollectionService.java
+++ b/src/main/java/com/example/demo/service/cash/CashCollectionService.java
@@ -1,6 +1,7 @@
package com.example.demo.service.cash;
import com.example.demo.domain.entity.CashRecord;
+import com.example.demo.domain.entity.RechargeActivity;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.coin.Result;
@@ -31,7 +32,9 @@ public interface CashCollectionService {
//根据精网号获取姓名和地区
User getNameAndMarket(Integer jwcode);
//获取活动列表
- List getActivityList();
+ List getActivityList();
//同步g_order订单到cash_record表
Object syncToCashRecord();
+ //根据id查询收款订单
+ CashCollection selectById(CashCollection cashCollection);
}
diff --git a/src/main/java/com/example/demo/service/cash/RefundService.java b/src/main/java/com/example/demo/service/cash/RefundService.java
index 3612678..389b237 100644
--- a/src/main/java/com/example/demo/service/cash/RefundService.java
+++ b/src/main/java/com/example/demo/service/cash/RefundService.java
@@ -1,6 +1,9 @@
package com.example.demo.service.cash;
+import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.cash.CashRecordDone;
+import com.example.demo.domain.vo.cash.CashRecordRefund;
+import com.example.demo.domain.vo.coin.Page;
import com.github.pagehelper.PageInfo;
/**
@@ -12,10 +15,10 @@ import com.github.pagehelper.PageInfo;
* @Version 1.0
**/
public interface RefundService {
- //多条件查询
- PageInfo select(Integer pageNum, Integer pageSize, CashRecordDone cashRecordDone);
+ //多条件查询(qi'yong)
+ PageInfo select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
//添加
- int add(CashRecordDone cashRecordDone) throws Exception;
+ int add(CashRecordRefund cashRecordRefund) throws Exception;
//修改
int update(CashRecordDone cashRecordDone) throws Exception;
//
@@ -28,4 +31,9 @@ public interface RefundService {
int updateStatus(CashRecordDone cashRecordDone);
int finalreview(CashRecordDone cashRecordDone);
+ PageInfo financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
+
+ PageInfo exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
+ //新增线上退款记录
+ void addOnline(CashRecordRefund cashRecordRefund);
}
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 c0d316b..c65b87e 100644
--- a/src/main/java/com/example/demo/service/coin/ExportExcelService.java
+++ b/src/main/java/com/example/demo/service/coin/ExportExcelService.java
@@ -34,4 +34,8 @@ public interface ExportExcelService {
Exception OnlineExcel(String message) throws Exception;
+ //负责人退款导出
+ Exception FinanceExcel(String message) throws Exception;
+
+ Exception CashExcel(String message) throws Exception;
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java b/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java
new file mode 100644
index 0000000..5e97a88
--- /dev/null
+++ b/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java
@@ -0,0 +1,34 @@
+package com.example.demo.service.coin;
+
+import com.example.demo.domain.vo.coin.RechargeActivity;
+import com.github.pagehelper.PageInfo;
+
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName RechargeActivityCenterService
+ * @description: 充值活动中心服务接口
+ * @author: Double
+ * @create: 2025−10-28 14:40
+ * @Version 1.0
+ **/
+
+public interface RechargeActivityCenterService {
+
+
+ // 根据ID查询活动
+ PageInfo queryActivity(Integer pageNum, Integer pageSize, RechargeActivity activity);
+
+ // 新增活动
+ void addActivity(RechargeActivity activity);
+
+ // 更新活动
+ void updateActivity(RechargeActivity activity);
+
+ // 更新状态
+ void updateStatus();
+
+ // 删除活动
+ void deleteActivity(RechargeActivity activity);
+}
diff --git a/src/main/java/com/example/demo/service/coin/RoleService.java b/src/main/java/com/example/demo/service/coin/RoleService.java
index c47e595..268cdef 100644
--- a/src/main/java/com/example/demo/service/coin/RoleService.java
+++ b/src/main/java/com/example/demo/service/coin/RoleService.java
@@ -19,6 +19,8 @@ import java.util.List;
public interface RoleService {
+ //查询频道
+ List getChannel();
//新增角色
Result addRole(RoleVo roleVo);
//新增角色二期替补
diff --git a/src/main/java/com/example/demo/service/listen/CashListener.java b/src/main/java/com/example/demo/service/listen/CashListener.java
new file mode 100644
index 0000000..16cdfbc
--- /dev/null
+++ b/src/main/java/com/example/demo/service/listen/CashListener.java
@@ -0,0 +1,36 @@
+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 CashListener
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−11-09 09:42
+ * @Version 1.0
+ **/
+@Component
+public class CashListener extends BaseMessageListener {
+ @Autowired
+ private ExportExcelService exportExcelService;
+
+ protected CashListener(RedisUtil redisQueueUtil) {
+ super(redisQueueUtil, "cash:queue:export_queue");
+ }
+
+ @Override
+ protected void handleMessage(String message) {
+ validateMessage( message);
+ try {
+ Thread.sleep(5000);
+ exportExcelService.CashExcel(message);
+ } catch (Exception e) {
+ handleException(e, message);
+
+ }
+ }
+}
diff --git a/src/main/java/com/example/demo/service/listen/FinanceListener.java b/src/main/java/com/example/demo/service/listen/FinanceListener.java
new file mode 100644
index 0000000..b72b110
--- /dev/null
+++ b/src/main/java/com/example/demo/service/listen/FinanceListener.java
@@ -0,0 +1,36 @@
+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 FinanceListener
+ * @description:
+ * @author: huangqizhen
+ * @create: 2025−11-06 21:35
+ * @Version 1.0
+ **/
+@Component
+public class FinanceListener extends BaseMessageListener{
+ @Autowired
+ private ExportExcelService exportExcelService;
+
+ @Autowired
+ public FinanceListener(RedisUtil redisQueueUtil) {
+ super(redisQueueUtil, "finance:queue:export_queue");
+ }
+
+ @Override
+ protected void handleMessage(String message) {
+ validateMessage( message);
+ try {
+ Thread.sleep(5000);
+ exportExcelService.FinanceExcel(message);
+ } catch (Exception e) {
+ handleException(e, message);
+ }
+ }
+}
diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
index 5ab58b9..3f83e6c 100644
--- a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
@@ -2,6 +2,7 @@ package com.example.demo.serviceImpl.cash;
import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.entity.GOrder;
+import com.example.demo.domain.entity.RechargeActivity;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.coin.Result;
@@ -64,6 +65,9 @@ public class CashCollectionServiceImpl implements CashCollectionService {
if (!cashCollection.getGoodsName().equals("金币充值")){
if( cashCollection.getGoodNum()== 0 ){
throw new IllegalArgumentException("产品数量不能为空");}
+ if(cashCollection.getNumUnit()== null){
+ throw new IllegalArgumentException("数量单位不能为空");
+ }
}
if(cashCollection.getPaymentCurrency()== null){
throw new IllegalArgumentException("支付币种不能为空");
@@ -80,12 +84,6 @@ public class CashCollectionServiceImpl implements CashCollectionService {
if(cashCollection.getPayTime()== null){
throw new IllegalArgumentException("付款时间不能为空");
}
- if (cashCollection.getVoucher()== null){
- throw new IllegalArgumentException("转账凭证不能为空");
- }
- if (cashCollection.getRemark()==null){
- throw new IllegalArgumentException("备注不能为空");
- }
//生成订单号后半部分
String orderNumber = UUID.randomUUID().toString().replaceAll("-", "");
CashRecord cashRecord = new CashRecord();
@@ -96,6 +94,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
cashRecord.setActivity(cashCollection.getActivity()); // 活动
cashRecord.setGoodsName(cashCollection.getGoodsName()); //商品名称
cashRecord.setGoodNum(cashCollection.getGoodNum()); //商品数量
+ cashRecord.setNumUnit(cashCollection.getNumUnit()); //数量单位
cashRecord.setPermanentGold(cashCollection.getPermanentGold()); //永久金币
cashRecord.setFreeGold(cashCollection.getFreeGold()); //免费金币
cashRecord.setPaymentCurrency(cashCollection.getPaymentCurrency()); //付款币种
@@ -153,10 +152,14 @@ public class CashCollectionServiceImpl implements CashCollectionService {
if (cashRecord.getGoodsName().equals("金币充值")){
if( cashRecord.getPermanentGold()== 0 && cashRecord.getFreeGold()== 0){
throw new IllegalArgumentException("金币数量不能为空");}
+
}
if (!cashRecord.getGoodsName().equals("金币充值")){
if( cashRecord.getGoodNum()== 0 ){
throw new IllegalArgumentException("产品数量不能为空");}
+ if(cashRecord.getNumUnit()== null){
+ throw new IllegalArgumentException("数量单位不能为空");
+ }
}
if(cashRecord.getPaymentCurrency()== null){
throw new IllegalArgumentException("支付币种不能为空");
@@ -173,12 +176,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
if(cashRecord.getPayTime()== null){
throw new IllegalArgumentException("付款时间不能为空");
}
- if (cashRecord.getVoucher()== null){
- throw new IllegalArgumentException("转账凭证不能为空");
- }
- if (cashRecord.getRemark()==null){
- throw new IllegalArgumentException("备注不能为空");
- }
+
CashRecord status=cashCollectionMapper.selectByOrderCode(cashRecord.getOrderCode());
if (!status.getStatus().equals(5)){
throw new IllegalArgumentException("只允许编辑已撤回订单");
@@ -253,8 +251,9 @@ public class CashCollectionServiceImpl implements CashCollectionService {
}
//获取收款活动列表
@Override
- public List getActivityList() {
- return cashCollectionMapper.getActivityList();
+ public List getActivityList() {
+ LocalDateTime now = LocalDateTime.now();
+ return cashCollectionMapper.getActivityList(now);
}
//同步g_order订单到cash_record表
@Override
@@ -318,4 +317,11 @@ public class CashCollectionServiceImpl implements CashCollectionService {
break; // 最后一批
}
}return "同步完毕";
- }}
+ }
+
+ @Override
+ public CashCollection selectById(CashCollection cashCollection) {
+
+ return cashCollectionMapper.selectById(cashCollection.getId());
+ }
+}
diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
index 53ea1ee..5d9b9f4 100644
--- a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
@@ -1,10 +1,15 @@
package com.example.demo.serviceImpl.cash;
-
+import com.example.demo.domain.entity.Admin;
+import com.example.demo.Util.BusinessException;
import com.example.demo.Util.GoldTistV2;
+import com.example.demo.controller.coin.AuditController;
+import com.example.demo.domain.entity.Market;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.entity.UserGoldRecord;
-import com.example.demo.domain.vo.cash.CashRecordDone;
+import com.example.demo.domain.vo.cash.*;
import com.example.demo.domain.vo.coin.Result;
+import com.example.demo.exception.SystemException;
+import com.example.demo.mapper.cash.CashCollectionMapper;
import com.example.demo.mapper.cash.CashRefundMapper;
import com.example.demo.mapper.coin.AuditMapper;
import com.example.demo.mapper.coin.MarketMapper;
@@ -16,10 +21,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.time.LocalDate;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
import static org.apache.commons.lang3.StringUtils.substring;
@@ -43,50 +49,130 @@ public class CashRefundServiceImpl implements RefundService {
private AuditMapper auditMapper;
@Autowired
private MarketMapper marketMapper;
+ @Autowired
+ private CashCollectionMapper cashCollectionMapper;
+ @Autowired
+ private AuditController auditController;
+
@Override
- public PageInfo select(Integer pageNum, Integer pageSize, CashRecordDone cashRecordDone) {
+ public PageInfo select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) {
PageHelper.startPage(pageNum, pageSize);
-// System.out.println(goldDetail.getMarkets());
- List list = cashRefundMapper.select(cashRecordDone);
+ List list = cashRefundMapper.select(cashRecordDTO);
+
+ if (list.isEmpty()) {
+ return new PageInfo<>(list);
+ }
+
+ // 批量收集ID
+ Set relatedIds = new HashSet<>();
+ Set marketIds = new HashSet<>();
+ Set submitterIds = new HashSet<>();
+ Set auditIds = new HashSet<>();
+
+ list.forEach(item -> {
+ if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId());
+ if (item.getMarket() != null) marketIds.add(item.getMarket());
+ if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId());
+ if (item.getAuditId() != null) auditIds.add(item.getAuditId());
+ });
+
+ // 批量查询
+ Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds)
+ .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity()));
+
+ Map marketNameMap = marketMapper.getMarketByIds(marketIds)
+ .stream().collect(Collectors.toMap(Market::getId, Market::getName));
+
+ Map submitterNameMap = auditMapper.getNamesByIds(submitterIds)
+ .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName));
+
+ Map auditMap = cashRefundMapper.getAuditBatch(auditIds)
+ .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity()));
+
+ // 处理数据
+ list.forEach(item -> {
+ CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId());
+ if (cashCollection != null) {
+ processCashCollection(item, cashCollection);
+ }
+
+ String marketName = marketNameMap.get(item.getMarket());
+ String submitter = submitterNameMap.get(item.getSubmitterId());
+ LhlAudit lhlAudit = auditMap.get(item.getAuditId());
+
+ item.setMarketName(marketName != null ? marketName : "");
+ item.setSubmitter(submitter != null ? submitter : "");
+
+ if (lhlAudit != null) {
+ item.setAreaServise(lhlAudit.getAreaServise());
+ item.setAreaFinance(lhlAudit.getAreaFinance());
+ item.setAreaCharge(lhlAudit.getAreaCharge());
+ item.setHeadFinance(lhlAudit.getHeadFinace());
+ }
+ });
+
return new PageInfo<>(list);
}
- @Override
- public int add(CashRecordDone cashRecordDone) throws Exception {
- if(cashRecordDone.getHandlingCharge()== null){
- throw new Exception("未输入手续费") ;
- }
- if(cashRecordDone.getJwcode()==null){
- throw new Exception("未输入精网号") ;
+ private void processCashCollection(CashRecordDTO item, CashCollection cashCollection) {
+ // 设置默认值
+ Integer freeGold = cashCollection.getFreeGold() != null ? cashCollection.getFreeGold() : 0;
+ Integer permanentGold = cashCollection.getPermanentGold() != null ? cashCollection.getPermanentGold() : 0;
+
+ BigDecimal free = new BigDecimal(freeGold).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
+ BigDecimal permanent = new BigDecimal(permanentGold).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
+
+ item.setGold(permanent);
+ item.setFree(free);
+ item.setActivity(cashCollection.getActivity());
+ item.setPaymentCurrency(cashCollection.getPaymentCurrency());
+ item.setPaymentAmount(cashCollection.getPaymentAmount());
+ item.setReceivedCurrency(cashCollection.getReceivedCurrency());
+ item.setReceivedAmount(cashCollection.getReceivedAmount());
+ item.setPayType(cashCollection.getPayType());
+ item.setPayTime(cashCollection.getPayTime());
+ item.setPayBankCode(cashCollection.getBankCode());
+ item.setPaySubmitter(cashCollection.getSubmitterName());
+ item.setAudit(cashCollection.getAuditName());
+ item.setReceivedTime(cashCollection.getReceivedTime());
+ item.setPayVoucher(cashCollection.getVoucher());
+ item.setPayRemark(cashCollection.getRemark());
+ item.setHandlingCharge(cashCollection.getHandlingCharge());
+
+ // 处理金币金额
+ if (item.getPermanentGold() != null) {
+ item.setPermanentGold(item.getPermanentGold().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
}
- if(cashRecordDone.getPaymentAmount()== null){
- throw new Exception("未输入付款金额") ;
+ if (item.getFreeGold() != null) {
+ item.setFreeGold(item.getFreeGold().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
}
- if(cashRecordDone.getPaymentCurrency()== null){
- throw new Exception("未输入付款币种") ;
+ }
+
+ @Override
+ public int add(CashRecordRefund cashRecordRefund) throws Exception {
+ if(cashRecordRefund.getJwcode()==null){
+ throw new Exception("未输入精网号") ;
}
- if(cashRecordDone.getRefundModel()== null){
+ if(cashRecordRefund.getRefundModel()== null){
throw new Exception("请填充退款类型") ;
}
- if(cashRecordDone.getRefundReason()== null){
+ if(cashRecordRefund.getRefundReason()== null){
throw new Exception("请填写退款理由") ;
}
CashRecordDone cashRecordDonetwo = new CashRecordDone();
- cashRecordDonetwo.setAreaServise(cashRecordDone.getAreaServise());
+ cashRecordDonetwo.setAreaServise(cashRecordRefund.getAreaServise());
cashRefundMapper.addAudit(cashRecordDonetwo);
- cashRecordDone.setAuditId(cashRecordDonetwo.getId());
+ cashRecordRefund.setAuditId(cashRecordDonetwo.getId());
- cashRecordDone.setOrderType(2);
- cashRecordDone.setStatus(10);
+ cashRecordRefund.setStatus(10);
//生成订单号后半部分
- String orderNumber = cashRecordDone.getOrderCode();
+ String orderNumber = cashRecordRefund.getOrderCode();
//构建订单信息
- cashRecordDone.setOrderCode("TK" + orderNumber); //订单号
- cashRecordDone.setMarket(marketMapper.getMarketId(cashRecordDone.getMarket()));
- cashRecordDone.setReceivedMarket(marketMapper.getMarketId(cashRecordDone.getReceivedMarket()));
- cashRefundMapper.insert(cashRecordDone);
+ cashRecordRefund.setOrderCode("TK" + orderNumber); //订单号
+ cashRecordRefund.setMarket(String.valueOf(Integer.valueOf(marketMapper.getMarketId(cashRecordRefund.getMarket()))));
+ cashRefundMapper.insert(cashRecordRefund);
CashRecordDone cashRecordDone1 = new CashRecordDone();
- cashRecordDone1.setId(cashRecordDone.getId());
+ cashRecordDone1.setId(cashRecordRefund.getId());
cashRecordDone1.setStatus(6);
if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null)
return cashRefundMapper.updateStatus(cashRecordDone1);
@@ -226,4 +312,155 @@ CashRecordDone cashRecordDone1 = new CashRecordDone();
int result = cashRefundMapper.review(cashRecordDone);
return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode();
}
+
+ @Override
+ public PageInfo financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) {
+ PageHelper.startPage(pageNum, pageSize);
+// System.out.println(goldDetail.getMarkets());
+ List list = cashRefundMapper.financeSelect(cashRecordDTO);
+ if (list.isEmpty()) {
+ return new PageInfo<>(list);
+ }
+
+ // 批量收集ID
+ Set relatedIds = new HashSet<>();
+ Set marketIds = new HashSet<>();
+ Set submitterIds = new HashSet<>();
+ Set auditIds = new HashSet<>();
+
+ list.forEach(item -> {
+ if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId());
+ if (item.getMarket() != null) marketIds.add(item.getMarket());
+ if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId());
+ if (item.getAuditId() != null) auditIds.add(item.getAuditId());
+ });
+
+ // 批量查询
+ Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds)
+ .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity()));
+
+ Map marketNameMap = marketMapper.getMarketByIds(marketIds)
+ .stream().collect(Collectors.toMap(Market::getId, Market::getName));
+
+ Map submitterNameMap = auditMapper.getNamesByIds(submitterIds)
+ .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName));
+
+ Map auditMap = cashRefundMapper.getAuditBatch(auditIds)
+ .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity()));
+
+ // 处理数据
+ list.forEach(item -> {
+ CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId());
+ if (cashCollection != null) {
+ processCashCollection(item, cashCollection);
+ }
+
+ String marketName = marketNameMap.get(item.getMarket());
+ String submitter = submitterNameMap.get(item.getSubmitterId());
+ LhlAudit lhlAudit = auditMap.get(item.getAuditId());
+
+ item.setMarketName(marketName != null ? marketName : "");
+ item.setSubmitter(submitter != null ? submitter : "");
+
+ if (lhlAudit != null) {
+ item.setAreaServise(lhlAudit.getAreaServise());
+ item.setAreaFinance(lhlAudit.getAreaFinance());
+ item.setAreaCharge(lhlAudit.getAreaCharge());
+ item.setHeadFinance(lhlAudit.getHeadFinace());
+ }
+ });
+
+ return new PageInfo<>(list);
+ }
+
+ @Override
+ public PageInfo exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) {
+ PageHelper.startPage(pageNum, pageSize);
+// System.out.println(goldDetail.getMarkets());
+ List list = cashRefundMapper.exSelect(cashRecordDTO);
+ if (list.isEmpty()) {
+ return new PageInfo<>(list);
+ }
+
+ // 批量收集ID
+ Set relatedIds = new HashSet<>();
+ Set marketIds = new HashSet<>();
+ Set submitterIds = new HashSet<>();
+ Set auditIds = new HashSet<>();
+
+ list.forEach(item -> {
+ if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId());
+ if (item.getMarket() != null) marketIds.add(item.getMarket());
+ if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId());
+ if (item.getAuditId() != null) auditIds.add(item.getAuditId());
+ });
+
+ // 批量查询
+ Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds)
+ .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity()));
+
+ Map marketNameMap = marketMapper.getMarketByIds(marketIds)
+ .stream().collect(Collectors.toMap(Market::getId, Market::getName));
+
+ Map submitterNameMap = auditMapper.getNamesByIds(submitterIds)
+ .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName));
+
+ Map auditMap = cashRefundMapper.getAuditBatch(auditIds)
+ .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity()));
+
+ // 处理数据
+ list.forEach(item -> {
+ CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId());
+ if (cashCollection != null) {
+ processCashCollection(item, cashCollection);
+ }
+
+ String marketName = marketNameMap.get(item.getMarket());
+ String submitter = submitterNameMap.get(item.getSubmitterId());
+ LhlAudit lhlAudit = auditMap.get(item.getAuditId());
+
+ item.setMarketName(marketName != null ? marketName : "");
+ item.setSubmitter(submitter != null ? submitter : "");
+
+ if (lhlAudit != null) {
+ item.setAreaServise(lhlAudit.getAreaServise());
+ item.setAreaFinance(lhlAudit.getAreaFinance());
+ item.setAreaCharge(lhlAudit.getAreaCharge());
+ item.setHeadFinance(lhlAudit.getHeadFinace());
+ }
+ });
+
+ return new PageInfo<>(list);
+ }
+
+ @Override
+ public void addOnline(CashRecordRefund cashRecordRefund) {
+ if(cashRecordRefund.getJwcode()==null){
+ throw new BusinessException("未输入精网号") ;
+ }
+ if(cashRecordRefund.getRefundModel()== null){
+ throw new BusinessException("请填充退款类型") ;
+ }
+ if(cashRecordRefund.getRefundReason()== null){
+ throw new BusinessException("请填写退款理由") ;
+ }
+ CashRecordDone cashRecordDonetwo = new CashRecordDone();
+ cashRecordDonetwo.setAreaServise(cashRecordRefund.getAreaServise());
+ cashRefundMapper.addAudit(cashRecordDonetwo);
+ cashRecordRefund.setAuditId(cashRecordDonetwo.getId());
+
+ cashRecordRefund.setStatus(20);
+ //生成订单号后半部分
+ String orderNumber = cashRecordRefund.getOrderCode();
+ //构建订单信息
+ cashRecordRefund.setOrderCode("TK" + orderNumber); //订单号
+ cashRecordRefund.setMarket(String.valueOf(Integer.valueOf(marketMapper.getMarketId(cashRecordRefund.getMarket()))));
+ cashRefundMapper.insert(cashRecordRefund);
+ CashRecordDone cashRecordDone1 = new CashRecordDone();
+ cashRecordDone1.setId(cashRecordRefund.getId());
+ cashRecordDone1.setStatus(6);
+ if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null)
+ cashRefundMapper.updateStatus(cashRecordDone1);
+ else throw new SystemException("提交失败") ;
+ }
}
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 862ec37..0b4b6d0 100644
--- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
@@ -8,6 +8,7 @@ import com.example.demo.Util.ExcelUploadUtil;
import com.example.demo.Util.JWTUtil;
import com.example.demo.controller.bean.BeanConsumeController;
import com.example.demo.controller.bean.BeanRechargeController;
+import com.example.demo.controller.cash.CashRefundController;
import com.example.demo.controller.coin.ConsumeController;
import com.example.demo.controller.coin.GoldDetailController;
import com.example.demo.controller.coin.RechargeController;
@@ -18,10 +19,15 @@ import com.example.demo.domain.entity.User;
import com.example.demo.domain.export.Goldmingxi;
import com.example.demo.domain.vo.bean.*;
+import com.example.demo.domain.vo.cash.CashCollection;
+import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.coin.*;
+import com.example.demo.mapper.cash.CashRefundMapper;
import com.example.demo.mapper.coin.ExportMapper;
+import com.example.demo.service.cash.RefundService;
import com.example.demo.service.coin.ExportExcelService;
+import com.example.demo.serviceImpl.cash.CashRefundServiceImpl;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -32,6 +38,7 @@ import com.example.demo.service.coin.AiEmotionService;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.formula.functions.Finance;
import org.apache.xmlbeans.impl.xb.xsdschema.Attribute;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -76,6 +83,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
private BeanRechargeController beanRechargeController;
@Autowired
private AuthenticationManager authenticationManager;
+ @Autowired
+ private CashRefundController cashRefundController;
// 每页查询的数据量
private static final int PAGE_SIZE = 5000;
@Autowired
@@ -261,6 +270,38 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
@Override
+ public Exception FinanceExcel(String message) throws Exception {
+ return exportExcelGeneric(message, "financeUser", page -> {
+ try {
+ JsonNode rootNode = objectMapper.readTree(message);
+ JsonNode requestDataNode = rootNode.path("requestData");
+ JsonNode beanRechargeNode = requestDataNode.path("cashRecordDTO");
+ CashRecordDTO cashRecordDTO = objectMapper.treeToValue(beanRechargeNode, CashRecordDTO.class);
+ page.setCashRecordDTO(cashRecordDTO);
+ return cashRefundController.export(page);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+
+ @Override
+ public Exception CashExcel(String message) throws Exception {
+ return exportExcelGeneric(message, "cashUser", page -> {
+ try {
+ JsonNode rootNode = objectMapper.readTree(message);
+ JsonNode requestDataNode = rootNode.path("requestData");
+ JsonNode beanRechargeNode = requestDataNode.path("cashCollection");
+ CashCollection cashCollection = objectMapper.treeToValue(beanRechargeNode, CashCollection.class);
+ page.setCashCollection(cashCollection);
+ return cashRefundController.export(page);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+
+ @Override
public List getExcel(Export export) {
List list = exportMapper.getExportRecord(export.getAccount(),export.getType());
System.out.println(list+"-------------------------------");
@@ -497,6 +538,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
return BeanSystemRechargeInfo.class;
case "onlineUser":
return BeanOnlineRechargeInfo.class;
+ case "financeUser":
+ return CashRecordDTO.class;
+ case "cashUser":
+ return CashCollection.class;
default:
throw new IllegalArgumentException("不支持的导出类型: " + exportType);
}
diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java
new file mode 100644
index 0000000..2281e38
--- /dev/null
+++ b/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java
@@ -0,0 +1,134 @@
+package com.example.demo.serviceImpl.coin;
+
+import com.example.demo.domain.vo.coin.RechargeActivity;
+import com.example.demo.mapper.coin.RechargeActivityCenterMapper;
+import com.example.demo.service.coin.RechargeActivityCenterService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @program: gold-java
+ * @ClassName RechargeActivityCenterServiceImpl
+ * @description: 充值活动中心服务实现类
+ * @author: Double
+ * @create: 2025−10-28 14:40
+ * @Version 1.0
+ **/
+
+@Service
+public class RechargeActivityCenterServiceImpl implements RechargeActivityCenterService {
+
+ @Autowired
+ private RechargeActivityCenterMapper rechargeActivityCenterMapper;
+
+
+ // 根据ID查询活动
+ @Override
+ public PageInfo queryActivity(Integer pageNum, Integer pageSize, RechargeActivity activity) {
+ updateStatus();
+ PageHelper.startPage(pageNum, pageSize);
+ List activityList = rechargeActivityCenterMapper.queryActivity(activity);
+ return new PageInfo<>(activityList);
+ }
+
+ // 新增活动
+ @Override
+ public void addActivity(RechargeActivity activity) {
+ Date startTime = activity.getStartTime();
+ Date endTime = activity.getEndTime();
+
+ //获取当前系统时间(本地时间,与活动时间时区保持一致)
+ Date now = new Date();
+
+ //时间范围判断,设置对应状态
+ if (now.before(startTime)) {
+ // 当前时间 < 开始时间 → 未开始(状态0)
+ activity.setStatus("0");
+ } else if (now.after(endTime)) {
+ // 当前时间 > 结束时间 → 已结束(状态2)
+ activity.setStatus("2");
+ } else {
+ // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1)
+ activity.setStatus("1");
+ }
+ rechargeActivityCenterMapper.addActivity(activity);
+ }
+
+ // 更新活动
+ @Override
+ public void updateActivity(RechargeActivity activity) {
+ Date startTime = activity.getStartTime();
+ Date endTime = activity.getEndTime();
+
+ //获取当前系统时间(本地时间,与活动时间时区保持一致)
+ Date now = new Date();
+
+ //时间范围判断,设置对应状态
+ if (now.before(startTime)) {
+ // 当前时间 < 开始时间 → 未开始(状态0)
+ activity.setStatus("0");
+ } else if (now.after(endTime)) {
+ // 当前时间 > 结束时间 → 已结束(状态2)
+ activity.setStatus("2");
+ } else {
+ // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1)
+ activity.setStatus("1");
+ }
+ rechargeActivityCenterMapper.updateActivity(activity);
+ }
+
+ @Override
+ public void updateStatus() {
+ // 查询所有活动
+ List activityList = rechargeActivityCenterMapper.listActivities();
+
+ if (activityList == null || activityList.isEmpty()) {
+ return;
+ }
+
+ Date now = new Date();
+
+ // 遍历所有活动,更新状态
+ for (RechargeActivity activity : activityList) {
+ Date startTime = activity.getStartTime();
+ Date endTime = activity.getEndTime();
+
+ // 跳过时间为空的活动
+ if (startTime == null || endTime == null) {
+ continue;
+ }
+
+ String newStatus;
+
+ // 时间范围判断,设置对应状态
+ if (now.before(startTime)) {
+ // 当前时间 < 开始时间 → 未开始(状态0)
+ newStatus = "0";
+ } else if (now.after(endTime)) {
+ // 当前时间 > 结束时间 → 已结束(状态2)
+ newStatus = "2";
+ } else {
+ // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1)
+ newStatus = "1";
+ }
+
+ // 只有当状态发生变化时才更新
+ if (!newStatus.equals(activity.getStatus())) {
+ activity.setStatus(newStatus);
+ rechargeActivityCenterMapper.updateActivity(activity);
+ }
+ }
+ }
+
+ // 删除活动
+ @Override
+ public void deleteActivity(RechargeActivity activity) {
+ rechargeActivityCenterMapper.deleteActivity(activity);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java
index 5478854..d2ca389 100644
--- a/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java
@@ -9,6 +9,7 @@ import com.example.demo.domain.vo.coin.Result;
import com.example.demo.domain.vo.coin.RoleVo;
import com.example.demo.mapper.coin.MenuMapper;
import com.example.demo.mapper.coin.RoleMapper;
+import com.example.demo.mapper.live.LiveMapper;
import com.example.demo.service.coin.MenuService;
import com.example.demo.service.coin.RoleService;
import com.github.pagehelper.PageHelper;
@@ -40,6 +41,16 @@ public class RoleServiceImpl implements RoleService {
private MenuService menuService;
@Autowired
private MenuMapper menuMapper;
+ @Autowired
+ private LiveMapper liveMapper;
+
+
+
+ //查询直播礼物
+ @Override
+ public List getChannel() {
+ return liveMapper.getChannel();
+ }
//新增角色
@Override
@@ -62,13 +73,12 @@ public class RoleServiceImpl implements RoleService {
if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) {
return Result.error("权限为空");
}
- if (roleVo.getMarket() == null || roleVo.getMarket().isEmpty()) {
- return Result.error("所属市场为空");
- }
+
+
if (roleVo.getFatherId() == null || roleVo.getFatherId() != 2) {
for (Integer menuId : roleVo.getMenuIds()) {
- if (menuId == 11) {
+ if (menuId == 128) {
return Result.error("上级角色非管理员用户不能赋予权限管理");
}
}
diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml
index 144833f..ce94b08 100644
--- a/src/main/resources/cashMapper/CashCollectionMapper.xml
+++ b/src/main/resources/cashMapper/CashCollectionMapper.xml
@@ -7,12 +7,12 @@
useGeneratedKeys="true" keyProperty="id">
insert into
cash_record(order_type,jwcode,name,market,activity,
- order_code,goods_name,good_num,permanent_gold,free_gold,
+ order_code,goods_name,good_num,num_unit,permanent_gold,free_gold,
payment_currency,payment_amount,received_market,
pay_type,pay_time,status,submitter_id,submitter_market,
voucher,remark)
values(#{orderType},#{jwcode},#{name},#{market},#{activity},
- #{orderCode},#{goodsName},#{goodNum},#{permanentGold},#{freeGold},#{paymentCurrency},
+ #{orderCode},#{goodsName},#{goodNum},#{NumUnit},#{permanentGold},#{freeGold},#{paymentCurrency},
#{paymentAmount},#{receivedMarket},#{payType},#{payTime},
#{status},#{submitterId},#{submitterMarket},#{voucher},#{remark})
@@ -43,6 +43,10 @@
activity = #{cashRecord.activity},
goods_name = #{cashRecord.goodsName},
good_num = #{cashRecord.goodNum},
+ num_unit = #{cashRecord.NumUnit},
+ permanent_gold = #{cashRecord.permanentGold},
+ free_gold = #{cashRecord.freeGold},
+ Num_unit = #{cashRecord.NumUnit},
payment_currency = #{cashRecord.paymentCurrency},
payment_amount = #{cashRecord.paymentAmount},
received_market = #{cashRecord.receivedMarket},
@@ -114,8 +118,9 @@
- SELECT id,role_name FROM role
+ SELECT id,role_name,market,channel FROM role
@@ -44,7 +49,7 @@
- SELECT id,role_name FROM role
+ SELECT id,role_name,market,channel FROM role
father_id = #{id}
@@ -54,8 +59,8 @@
INSERT INTO role
- (role_name,father_id, market)
- VALUES (#{roleName}, #{fatherId}, #{market})
+ (role_name,father_id, market,channel)
+ VALUES (#{roleName}, #{fatherId}, #{market},#{channel})
@@ -75,6 +80,7 @@
r.market AS market,
r.create_time AS createTime,
r.update_time AS updateTime,
+ r.channel AS channel,
-- 通过自连接查询父角色名称
father.role_name AS fatherName
FROM role r