Browse Source

Merge branch 'refs/heads/huangqizheng/feature-20251104113536-现金管理二期退款修改' into milestone-20251016-现金管理

# Conflicts:
#	src/main/java/com/example/demo/mapper/coin/AuditMapper.java
#	src/main/resources/mapper/AuditMapper.xml
milestone-20251016-现金管理
huangqizhen 2 weeks ago
parent
commit
fd4be9386d
  1. 15
      pom.xml
  2. 4
      src/main/java/com/example/demo/Export/ExportService.java
  3. 44
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  4. 46
      src/main/java/com/example/demo/config/AppConfig.java
  5. 13
      src/main/java/com/example/demo/controller/cash/CashCollectionController.java
  6. 101
      src/main/java/com/example/demo/controller/cash/CashRefundController.java
  7. 38
      src/main/java/com/example/demo/controller/coin/ExportController.java
  8. 192
      src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java
  9. 17
      src/main/java/com/example/demo/controller/coin/RoleController.java
  10. 39
      src/main/java/com/example/demo/domain/DTO/CashDTO.java
  11. 36
      src/main/java/com/example/demo/domain/DTO/FinanceDTO.java
  12. 1
      src/main/java/com/example/demo/domain/entity/CashRecord.java
  13. 35
      src/main/java/com/example/demo/domain/entity/RechargeActivity.java
  14. 1
      src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java
  15. 2
      src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java
  16. 2
      src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java
  17. 2
      src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java
  18. 1
      src/main/java/com/example/demo/domain/vo/bean/BeanUser.java
  19. 1
      src/main/java/com/example/demo/domain/vo/cash/CashCollection.java
  20. 248
      src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java
  21. 203
      src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java
  22. 24
      src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java
  23. 13
      src/main/java/com/example/demo/domain/vo/coin/IdName.java
  24. 3
      src/main/java/com/example/demo/domain/vo/coin/Page.java
  25. 65
      src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java
  26. 2
      src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java
  27. 2
      src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java
  28. 1
      src/main/java/com/example/demo/domain/vo/coin/RoleVo.java
  29. 9
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  30. 15
      src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java
  31. 5
      src/main/java/com/example/demo/mapper/coin/AuditMapper.java
  32. 5
      src/main/java/com/example/demo/mapper/coin/MarketMapper.java
  33. 35
      src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java
  34. 2
      src/main/java/com/example/demo/mapper/live/LiveMapper.java
  35. 5
      src/main/java/com/example/demo/service/cash/CashCollectionService.java
  36. 14
      src/main/java/com/example/demo/service/cash/RefundService.java
  37. 4
      src/main/java/com/example/demo/service/coin/ExportExcelService.java
  38. 34
      src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java
  39. 2
      src/main/java/com/example/demo/service/coin/RoleService.java
  40. 36
      src/main/java/com/example/demo/service/listen/CashListener.java
  41. 36
      src/main/java/com/example/demo/service/listen/FinanceListener.java
  42. 36
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  43. 297
      src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
  44. 45
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  45. 134
      src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java
  46. 18
      src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java
  47. 58
      src/main/resources/cashMapper/CashCollectionMapper.xml
  48. 354
      src/main/resources/cashMapper/CashRefundMapper.xml
  49. 12
      src/main/resources/jindouMapper/BeanConsumeMapper.xml
  50. 8
      src/main/resources/jindouMapper/BeanUser.xml
  51. 15
      src/main/resources/liveMapper/LiveMapper.xml
  52. 72
      src/main/resources/mapper/AuditMapper.xml
  53. 3
      src/main/resources/mapper/BeanAuditMapper.xml
  54. 9
      src/main/resources/mapper/MarketMapper.xml
  55. 110
      src/main/resources/mapper/RechargeActivityCenterMapper.xml
  56. 16
      src/main/resources/mapper/RoleMapper.xml

15
pom.xml

@ -166,6 +166,21 @@
<artifactId>jaxb-api</artifactId> <artifactId>jaxb-api</artifactId>
<version>2.3.1</version> <version>2.3.1</version>
</dependency> </dependency>
<dependency>
<groupId>com.stripe</groupId>
<artifactId>stripe-java</artifactId>
<version>30.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
</dependencies> </dependencies>
<!--配置多环境打包--> <!--配置多环境打包-->

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

@ -28,4 +28,8 @@ public interface ExportService {
Result addExportBean(BeanRechargeDTO dto); Result addExportBean(BeanRechargeDTO dto);
Result addExportOnline(OnlineDTO dto); Result addExportOnline(OnlineDTO dto);
//现金负责人退款导出
Result addExportFinance(FinanceDTO dto);
Result addExportCash(CashDTO dto);
} }

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

@ -124,6 +124,16 @@ public class ExportServiceImpl implements ExportService {
articleDTO.setUrl(""); articleDTO.setUrl("");
articleDTO.setFileName(generateFileName("文章明细", adminName)); articleDTO.setFileName(generateFileName("文章明细", adminName));
articleDTO.setDataNum(0); 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.getFileName(),
onlineDTO.getDataNum() 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()); requestData.put(requestDataKey, beanRechargeDTO.getBeanSystemRechargeInfo());
} else if (dto instanceof OnlineDTO onlineDTO){ } else if (dto instanceof OnlineDTO onlineDTO){
requestData.put(requestDataKey, onlineDTO.getBeanOnlineRechargeInfo()); 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); exportData.put("requestData", requestData);
@ -294,4 +328,14 @@ public class ExportServiceImpl implements ExportService {
public Result addExportOnline(OnlineDTO dto) { public Result addExportOnline(OnlineDTO dto) {
return addExport(dto, "在线明细", "online:queue:export_queue", "beanOnlineRechargeInfo"); 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");
}
} }

46
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.Bean;
import org.springframework.context.annotation.Configuration; 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.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import javax.net.ssl.*;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
@Configuration @Configuration
public class AppConfig { public class AppConfig {
@Bean @Bean
public RestTemplate restTemplate() {
public RestTemplate restTemplate() throws NoSuchAlgorithmException, KeyManagementException {
RestTemplate restTemplate = new RestTemplate(); RestTemplate restTemplate = new RestTemplate();
// 配置SSL支持
restTemplate.setRequestFactory(createSSLRequestFactory());
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
return restTemplate; 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;
}
}

13
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.Util.JWTUtil;
import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.CashRecord; 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.entity.User;
import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.Page;
@ -52,7 +53,7 @@ public class CashCollectionController {
@PostMapping("/getActivityList") @PostMapping("/getActivityList")
public Result getActivityList() public Result getActivityList()
{ {
List<String> list = cashCollectionService.getActivityList();
List<RechargeActivity> list = cashCollectionService.getActivityList();
return Result.success(list); return Result.success(list);
} }
//新增收款订单 //新增收款订单
@ -127,6 +128,14 @@ public class CashCollectionController {
}catch (Exception e){ }catch (Exception e){
return Result.error(e.getMessage()); 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());
}
} }
} }

101
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.Util.JWTUtil;
import com.example.demo.domain.entity.Admin; 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.CashRecordDone;
import com.example.demo.domain.vo.cash.CashRecordRefund;
import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.RechargeUser; import com.example.demo.domain.vo.coin.RechargeUser;
import com.example.demo.domain.vo.coin.Result; import com.example.demo.domain.vo.coin.Result;
@ -44,6 +46,10 @@ public class CashRefundController {
@Autowired @Autowired
MarketService marketService; MarketService marketService;
/**
* 当地财务负责人退款记录
*/
@PostMapping("/select") @PostMapping("/select")
public Result select(@RequestBody Page page) throws Exception { public Result select(@RequestBody Page page) throws Exception {
// 获取当前请求对象 // 获取当前请求对象
@ -64,37 +70,87 @@ public class CashRefundController {
} }
// 获取传入的市场列表 // 获取传入的市场列表
List<String> requestedMarkets = page.getCashRecordDone() != null ? page.getCashRecordDone().getMarkets() : null;
List<String> requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null;
// 权限校验逻辑 // 权限校验逻辑
if (markets.contains("9") || markets.contains("9999")) { if (markets.contains("9") || markets.contains("9999")) {
// 特权市场9 9999跳过权限校验直接放行传入的 markets // 特权市场9 9999跳过权限校验直接放行传入的 markets
// 如果业务需要也可以在这里做空值处理 // 如果业务需要也可以在这里做空值处理
if (page.getCashRecordDone() != null) {
if (page.getCashRecordDTO() != null) {
// 保持 requestedMarkets 不变原样接受 // 保持 requestedMarkets 不变原样接受
// 可选如果 requestedMarkets null可设为默认值或保持 null // 可选如果 requestedMarkets null可设为默认值或保持 null
} }
} else { } else {
// 普通用户必须校验权限 // 普通用户必须校验权限
if (requestedMarkets == null || requestedMarkets.isEmpty()) { if (requestedMarkets == null || requestedMarkets.isEmpty()) {
page.getCashRecordDone().setMarkets(markets);
page.getCashRecordDTO().setMarkets(markets);
} }
if (!markets.containsAll(requestedMarkets)) { if (!markets.containsAll(requestedMarkets)) {
return Result.error("无权限!请求的市场不在授权范围内。"); return Result.error("无权限!请求的市场不在授权范围内。");
} }
// 校验通过保持 requestedMarkets 不变 // 校验通过保持 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") @PostMapping("/add")
public Result add(@RequestBody CashRecordDone cashRecordDone) throws Exception {
public Result add(@RequestBody CashRecordRefund cashRecordRefund) throws Exception {
try { try {
return Result.success(refundService.add(cashRecordDone));
return Result.success(refundService.add(cashRecordRefund));
} catch (Exception e) { } catch (Exception e) {
return Result.error(e.getMessage()); 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<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
List<String> markets = marketService.getMarketIds(userMarkets);
// 校验分页参数
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
}
// 获取传入的市场列表
List<String> 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") @PostMapping("/selecta")
public Result selecta(@RequestBody Page page) { public Result selecta(@RequestBody Page page) {
@ -107,9 +163,9 @@ public class CashRefundController {
return Result.error("页大小为空!"); return Result.error("页大小为空!");
} }
// 获取传入的市场列表 // 获取传入的市场列表
List<String> requestedMarkets = page.getCashRecordDone() != null ? page.getCashRecordDone().getMarkets() : null;
List<String> 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") @PostMapping("/update")
public Result update(@RequestBody CashRecordDone cashRecordDone)throws Exception { 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("测试消息");
}
} }

38
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.DTO.*;
import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.Export; 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.domain.vo.coin.Result;
import com.example.demo.service.coin.ExportExcelService; import com.example.demo.service.coin.ExportExcelService;
import com.example.demo.service.coin.GoldDetailService; import com.example.demo.service.coin.GoldDetailService;
@ -195,4 +196,41 @@ public class ExportController {
redisLockUtil.unlock(lockKey, requestId); 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);
}
}
} }

192
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: 202511-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());
}
}
}

17
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<RoleVo> list=roleService.selectSubRole(id);
return Result.success(list);
}
} }

39
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: 202511-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;
}

36
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: 202511-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;
}

1
src/main/java/com/example/demo/domain/entity/CashRecord.java

@ -35,6 +35,7 @@ public class CashRecord implements Serializable {
private String bankCode; // 银行流水订单号 private String bankCode; // 银行流水订单号
private String goodsName; // 商品名称 private String goodsName; // 商品名称
private Integer goodNum; // 产品数量 private Integer goodNum; // 产品数量
private String NumUnit; // 数量单位 //
private Integer permanentGold; // 永久金币数量 private Integer permanentGold; // 永久金币数量
private Integer freeGold; // 免费金币数量 private Integer freeGold; // 免费金币数量

35
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: 202511-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; // 更新日期到秒
}

1
src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java

@ -46,4 +46,5 @@ public class BeanAuditInfo {
private Date auditEndTime; // 结束时间 private Date auditEndTime; // 结束时间
private String sortField; // 排序字段 private String sortField; // 排序字段
private String sortOrder; // 排序顺序 private String sortOrder; // 排序顺序
private String flag; // 员工数据
} }

2
src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java

@ -34,6 +34,8 @@ public class BeanConsumeArticle {
private String type; //类型source_type 910打赏11付费 private String type; //类型source_type 910打赏11付费
@ExcelIgnore @ExcelIgnore
private Integer payMode; // 0 打赏 1 付费 2 其他 private Integer payMode; // 0 打赏 1 付费 2 其他
@ExcelIgnore
private Integer flag;
@ExcelProperty("金豆总数") @ExcelProperty("金豆总数")
private String beanNum; //金豆数量 private String beanNum; //金豆数量
@ExcelProperty("付费金豆数") @ExcelProperty("付费金豆数")

2
src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java

@ -44,6 +44,8 @@ public class BeanConsumeFan {
@ExcelIgnore @ExcelIgnore
private Integer payType; //支付方式直播12345铁粉7文章8 private Integer payType; //支付方式直播12345铁粉7文章8
@ExcelIgnore @ExcelIgnore
private Integer flag; //是否包含员工
@ExcelIgnore
private String sortField; //排序字段 private String sortField; //排序字段
@ExcelIgnore @ExcelIgnore
private String sortOrder; //排序顺序 private String sortOrder; //排序顺序

2
src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java

@ -36,6 +36,8 @@ public class BeanConsumeLive {
//文章 1. 打赏2. 付费 //文章 1. 打赏2. 付费
//@ExcelProperty("类型" ) //@ExcelProperty("类型" )
@ExcelIgnore @ExcelIgnore
private Integer flag;
@ExcelIgnore
private String type; //类型 private String type; //类型
@ExcelProperty("礼物") @ExcelProperty("礼物")
private String gift; //礼物名称 private String gift; //礼物名称

1
src/main/java/com/example/demo/domain/vo/bean/BeanUser.java

@ -20,6 +20,7 @@ public class BeanUser {
private String name; //姓名 private String name; //姓名
private Integer jwcode; //精网号 private Integer jwcode; //精网号
private String dept; //分部 private String dept; //分部
private String flag; //是否包含员工
private Integer beanNum; //金豆数量 private Integer beanNum; //金豆数量
private Integer buyBean; //付费金豆 private Integer buyBean; //付费金豆
private Integer freeBean; //免费金豆 private Integer freeBean; //免费金豆

1
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 bankCode; // 银行流水订单号
private String goodsName; // 商品名称 private String goodsName; // 商品名称
private Integer goodNum; // 商品数量 private Integer goodNum; // 商品数量
private String numUnit; //数量单位 //
private Integer permanentGold; // 永久金币数量 private Integer permanentGold; // 永久金币数量
private Integer freeGold; // 免费金币数量 private Integer freeGold; // 免费金币数量
//金额信息 //金额信息

248
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: 202511-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<String> goodsNames;// 商品名称
@ExcelIgnore
private List<String> 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手动撤回待编辑提交
3link线上财务复核待填手续费
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<Integer> 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; // 结束时间
}

203
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手动撤回待编辑提交
3link线上财务复核待填手续费
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<Integer> 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;
}

24
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: 202511-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;
}

13
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;
}

3
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.entity.User;
import com.example.demo.domain.vo.bean.*; import com.example.demo.domain.vo.bean.*;
import com.example.demo.domain.vo.cash.CashCollection; 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 com.example.demo.domain.vo.cash.CashRecordDone;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -44,5 +45,7 @@ public class Page {
private HistoryRecord historyRecord; //历史记录 private HistoryRecord historyRecord; //历史记录
private CashCollection cashCollection; //现金收款 private CashCollection cashCollection; //现金收款
private CashRecordDone cashRecordDone; private CashRecordDone cashRecordDone;
private RechargeActivity rechargeActivity; //充值活动
private CashRecordDTO cashRecordDTO;
} }

65
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: 202510-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; // 活动时间
}

2
src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java

@ -55,7 +55,7 @@ public class RechargeAudit {
private String auditName; //审核人姓名 private String auditName; //审核人姓名
private Byte type; //类型 private Byte type; //类型
private String rejectReason; //驳回理由 private String rejectReason; //驳回理由
// private Integer flag; //是否为员工号 0员工号 1非员工号
private Integer flag; //是否为员工号 0员工号 1非员工号
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private String payTime; //支付时间 private String payTime; //支付时间

2
src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java

@ -51,7 +51,7 @@ public class RefundAudit {
private String auditName; //审核人姓名 private String auditName; //审核人姓名
private String rejectReason; //驳回理由 private String rejectReason; //驳回理由
private Byte type; //类型 private Byte type; //类型
// private Integer flag; //是否为员工号 0-员工号 1-非员工号
private Integer flag; //是否为员工号 0-员工号 1-非员工号
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")

1
src/main/java/com/example/demo/domain/vo/coin/RoleVo.java

@ -34,6 +34,7 @@ public class RoleVo implements Serializable {
private String fatherMarket;//父级角色市场 private String fatherMarket;//父级角色市场
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; // 创建时间 private Date createTime; // 创建时间
private String channel;//所属渠道
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime; // 更新时间 private Date updateTime; // 更新时间

9
src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java

@ -1,12 +1,16 @@
package com.example.demo.mapper.cash; 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.CashRecord;
import com.example.demo.domain.entity.GOrder; import com.example.demo.domain.entity.GOrder;
import com.example.demo.domain.entity.RechargeActivity;
import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.cash.CashCollection;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @program: gold-java * @program: gold-java
@ -45,10 +49,13 @@ public interface CashCollectionMapper {
//根据精网号获取市场名 //根据精网号获取市场名
String getMarketNameByJwcode(Integer jwcode); String getMarketNameByJwcode(Integer jwcode);
//获取收款活动列表 //获取收款活动列表
List<String> getActivityList();
List<RechargeActivity> getActivityList(@Param("now")LocalDateTime now);
//查找未同步的订单 //查找未同步的订单
List<GOrder>getUnSync(@Param("size")int size); List<GOrder>getUnSync(@Param("size")int size);
//给同步过去的gOrder设置同步状态 //给同步过去的gOrder设置同步状态
int markSynced(@Param("orderId") Integer orderId); int markSynced(@Param("orderId") Integer orderId);
//根据id查询收款订单
CashCollection selectById(Integer id);
List<CashCollection> selectBatchIds(Set<Integer> relatedIds);
} }

15
src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java

@ -1,11 +1,12 @@
package com.example.demo.mapper.cash; 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 com.example.demo.domain.vo.coin.RefundUser;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @program: GOLD * @program: GOLD
@ -17,9 +18,9 @@ import java.util.List;
**/ **/
@Mapper @Mapper
public interface CashRefundMapper { public interface CashRefundMapper {
List<CashRecordDone> select(CashRecordDone cashRecordDone);
List<CashRecordDTO> select(CashRecordDTO cashRecordDTO);
int update(CashRecordDone cashRecordDone); int update(CashRecordDone cashRecordDone);
int insert(CashRecordDone cashRecordDone);
int insert(CashRecordRefund cashRecordRefund);
int withdraw(Integer id); int withdraw(Integer id);
int review(CashRecordDone cashRecordDone); int review(CashRecordDone cashRecordDone);
@ -29,4 +30,10 @@ public interface CashRefundMapper {
int updateStatus(CashRecordDone cashRecordDone); int updateStatus(CashRecordDone cashRecordDone);
void addAudit(CashRecordDone cashRecordDone); void addAudit(CashRecordDone cashRecordDone);
void updateAudit(CashRecordDone cashRecordDone); void updateAudit(CashRecordDone cashRecordDone);
List<CashRecordDTO> financeSelect(CashRecordDTO cashRecordDTO);
//获取各阶段审核人
LhlAudit getAudit(Integer id);
List<CashRecordDTO> exSelect(CashRecordDTO cashRecordDTO);
List<LhlAudit> getAuditBatch(Set<Integer> auditIds);
} }

5
src/main/java/com/example/demo/mapper/coin/AuditMapper.java

@ -1,5 +1,7 @@
package com.example.demo.mapper.coin; 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.User;
import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.domain.vo.coin.RechargeAudit; 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.Date;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @program: gold-java * @program: gold-java
@ -46,6 +49,8 @@ public interface AuditMapper {
String getName(Integer auditId); String getName(Integer auditId);
//更新首充日期 //更新首充日期
void updateFirstRecharge(Integer jwcode); void updateFirstRecharge(Integer jwcode);
List<Admin> getNamesByIds(Set<Integer> submitterIds);
//添加错误订单 //添加错误订单
void addErrorRecord(UserGoldRecord order); void addErrorRecord(UserGoldRecord order);
} }

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

@ -1,8 +1,11 @@
package com.example.demo.mapper.coin; package com.example.demo.mapper.coin;
import cn.hutool.core.lang.Opt;
import com.example.demo.domain.entity.Market; import com.example.demo.domain.entity.Market;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Set;
public interface MarketMapper { public interface MarketMapper {
List<Market> getMarket(); List<Market> getMarket();
@ -14,4 +17,6 @@ public interface MarketMapper {
Market getMarketIdDao(String country); Market getMarketIdDao(String country);
Market getMarketIdBytype(String market); Market getMarketIdBytype(String market);
String getMarketById(String market);
List<Market> getMarketByIds(@Param("marketIds") Set<Integer> marketIds);
} }

35
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: 202510-28 14:42
* @Version 1.0
**/
@Mapper
public interface RechargeActivityCenterMapper {
// 查询所有活动用于批量更新状态
List<RechargeActivity> listActivities();
// 根据ID查询活动
List<RechargeActivity> queryActivity(RechargeActivity activity);
// 新增活动
void addActivity(RechargeActivity activity);
// 更新活动
void updateActivity(RechargeActivity activity);
// 删除活动
void deleteActivity(RechargeActivity activity);
}

2
src/main/java/com/example/demo/mapper/live/LiveMapper.java

@ -21,6 +21,8 @@ public interface LiveMapper {
List<BeanConsumeLive> selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive); List<BeanConsumeLive> selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive);
//获取直播礼物列表 //获取直播礼物列表
List<String> getLiveGift(); List<String> getLiveGift();
//获取频道列表
List<String> getChannel();
//获取直播频道列表 //获取直播频道列表
List<String> getLiveChannel(); List<String> getLiveChannel();
//计算直播消费金豆合计数 //计算直播消费金豆合计数

5
src/main/java/com/example/demo/service/cash/CashCollectionService.java

@ -1,6 +1,7 @@
package com.example.demo.service.cash; package com.example.demo.service.cash;
import com.example.demo.domain.entity.CashRecord; 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.entity.User;
import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.coin.Result; import com.example.demo.domain.vo.coin.Result;
@ -31,7 +32,9 @@ public interface CashCollectionService {
//根据精网号获取姓名和地区 //根据精网号获取姓名和地区
User getNameAndMarket(Integer jwcode); User getNameAndMarket(Integer jwcode);
//获取活动列表 //获取活动列表
List<String> getActivityList();
List<RechargeActivity> getActivityList();
//同步g_order订单到cash_record表 //同步g_order订单到cash_record表
Object syncToCashRecord(); Object syncToCashRecord();
//根据id查询收款订单
CashCollection selectById(CashCollection cashCollection);
} }

14
src/main/java/com/example/demo/service/cash/RefundService.java

@ -1,6 +1,9 @@
package com.example.demo.service.cash; 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.CashRecordDone;
import com.example.demo.domain.vo.cash.CashRecordRefund;
import com.example.demo.domain.vo.coin.Page;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
/** /**
@ -12,10 +15,10 @@ import com.github.pagehelper.PageInfo;
* @Version 1.0 * @Version 1.0
**/ **/
public interface RefundService { public interface RefundService {
//多条件查询
PageInfo<CashRecordDone> select(Integer pageNum, Integer pageSize, CashRecordDone cashRecordDone);
//多条件查询(qi'yong)
PageInfo<CashRecordDTO> 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; int update(CashRecordDone cashRecordDone) throws Exception;
// //
@ -28,4 +31,9 @@ public interface RefundService {
int updateStatus(CashRecordDone cashRecordDone); int updateStatus(CashRecordDone cashRecordDone);
int finalreview(CashRecordDone cashRecordDone); int finalreview(CashRecordDone cashRecordDone);
PageInfo<CashRecordDTO> financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
PageInfo<CashRecordDTO> exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
//新增线上退款记录
void addOnline(CashRecordRefund cashRecordRefund);
} }

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

@ -34,4 +34,8 @@ public interface ExportExcelService {
Exception OnlineExcel(String message) throws Exception; Exception OnlineExcel(String message) throws Exception;
//负责人退款导出
Exception FinanceExcel(String message) throws Exception;
Exception CashExcel(String message) throws Exception;
} }

34
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: 202510-28 14:40
* @Version 1.0
**/
public interface RechargeActivityCenterService {
// 根据ID查询活动
PageInfo<RechargeActivity> queryActivity(Integer pageNum, Integer pageSize, RechargeActivity activity);
// 新增活动
void addActivity(RechargeActivity activity);
// 更新活动
void updateActivity(RechargeActivity activity);
// 更新状态
void updateStatus();
// 删除活动
void deleteActivity(RechargeActivity activity);
}

2
src/main/java/com/example/demo/service/coin/RoleService.java

@ -19,6 +19,8 @@ import java.util.List;
public interface RoleService { public interface RoleService {
//查询频道
List<String> getChannel();
//新增角色 //新增角色
Result addRole(RoleVo roleVo); Result addRole(RoleVo roleVo);
//新增角色二期替补 //新增角色二期替补

36
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: 202511-09 09:42
* @Version 1.0
**/
@Component
public class CashListener extends BaseMessageListener<String> {
@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);
}
}
}

36
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: 202511-06 21:35
* @Version 1.0
**/
@Component
public class FinanceListener extends BaseMessageListener<String>{
@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);
}
}
}

36
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.CashRecord;
import com.example.demo.domain.entity.GOrder; 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.entity.User;
import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.coin.Result; import com.example.demo.domain.vo.coin.Result;
@ -64,6 +65,9 @@ public class CashCollectionServiceImpl implements CashCollectionService {
if (!cashCollection.getGoodsName().equals("金币充值")){ if (!cashCollection.getGoodsName().equals("金币充值")){
if( cashCollection.getGoodNum()== 0 ){ if( cashCollection.getGoodNum()== 0 ){
throw new IllegalArgumentException("产品数量不能为空");} throw new IllegalArgumentException("产品数量不能为空");}
if(cashCollection.getNumUnit()== null){
throw new IllegalArgumentException("数量单位不能为空");
}
} }
if(cashCollection.getPaymentCurrency()== null){ if(cashCollection.getPaymentCurrency()== null){
throw new IllegalArgumentException("支付币种不能为空"); throw new IllegalArgumentException("支付币种不能为空");
@ -80,12 +84,6 @@ public class CashCollectionServiceImpl implements CashCollectionService {
if(cashCollection.getPayTime()== null){ if(cashCollection.getPayTime()== null){
throw new IllegalArgumentException("付款时间不能为空"); throw new IllegalArgumentException("付款时间不能为空");
} }
if (cashCollection.getVoucher()== null){
throw new IllegalArgumentException("转账凭证不能为空");
}
if (cashCollection.getRemark()==null){
throw new IllegalArgumentException("备注不能为空");
}
//生成订单号后半部分 //生成订单号后半部分
String orderNumber = UUID.randomUUID().toString().replaceAll("-", ""); String orderNumber = UUID.randomUUID().toString().replaceAll("-", "");
CashRecord cashRecord = new CashRecord(); CashRecord cashRecord = new CashRecord();
@ -96,6 +94,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
cashRecord.setActivity(cashCollection.getActivity()); // 活动 cashRecord.setActivity(cashCollection.getActivity()); // 活动
cashRecord.setGoodsName(cashCollection.getGoodsName()); //商品名称 cashRecord.setGoodsName(cashCollection.getGoodsName()); //商品名称
cashRecord.setGoodNum(cashCollection.getGoodNum()); //商品数量 cashRecord.setGoodNum(cashCollection.getGoodNum()); //商品数量
cashRecord.setNumUnit(cashCollection.getNumUnit()); //数量单位
cashRecord.setPermanentGold(cashCollection.getPermanentGold()); //永久金币 cashRecord.setPermanentGold(cashCollection.getPermanentGold()); //永久金币
cashRecord.setFreeGold(cashCollection.getFreeGold()); //免费金币 cashRecord.setFreeGold(cashCollection.getFreeGold()); //免费金币
cashRecord.setPaymentCurrency(cashCollection.getPaymentCurrency()); //付款币种 cashRecord.setPaymentCurrency(cashCollection.getPaymentCurrency()); //付款币种
@ -153,10 +152,14 @@ public class CashCollectionServiceImpl implements CashCollectionService {
if (cashRecord.getGoodsName().equals("金币充值")){ if (cashRecord.getGoodsName().equals("金币充值")){
if( cashRecord.getPermanentGold()== 0 && cashRecord.getFreeGold()== 0){ if( cashRecord.getPermanentGold()== 0 && cashRecord.getFreeGold()== 0){
throw new IllegalArgumentException("金币数量不能为空");} throw new IllegalArgumentException("金币数量不能为空");}
} }
if (!cashRecord.getGoodsName().equals("金币充值")){ if (!cashRecord.getGoodsName().equals("金币充值")){
if( cashRecord.getGoodNum()== 0 ){ if( cashRecord.getGoodNum()== 0 ){
throw new IllegalArgumentException("产品数量不能为空");} throw new IllegalArgumentException("产品数量不能为空");}
if(cashRecord.getNumUnit()== null){
throw new IllegalArgumentException("数量单位不能为空");
}
} }
if(cashRecord.getPaymentCurrency()== null){ if(cashRecord.getPaymentCurrency()== null){
throw new IllegalArgumentException("支付币种不能为空"); throw new IllegalArgumentException("支付币种不能为空");
@ -173,12 +176,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
if(cashRecord.getPayTime()== null){ if(cashRecord.getPayTime()== null){
throw new IllegalArgumentException("付款时间不能为空"); throw new IllegalArgumentException("付款时间不能为空");
} }
if (cashRecord.getVoucher()== null){
throw new IllegalArgumentException("转账凭证不能为空");
}
if (cashRecord.getRemark()==null){
throw new IllegalArgumentException("备注不能为空");
}
CashRecord status=cashCollectionMapper.selectByOrderCode(cashRecord.getOrderCode()); CashRecord status=cashCollectionMapper.selectByOrderCode(cashRecord.getOrderCode());
if (!status.getStatus().equals(5)){ if (!status.getStatus().equals(5)){
throw new IllegalArgumentException("只允许编辑已撤回订单"); throw new IllegalArgumentException("只允许编辑已撤回订单");
@ -253,8 +251,9 @@ public class CashCollectionServiceImpl implements CashCollectionService {
} }
//获取收款活动列表 //获取收款活动列表
@Override @Override
public List<String> getActivityList() {
return cashCollectionMapper.getActivityList();
public List<RechargeActivity> getActivityList() {
LocalDateTime now = LocalDateTime.now();
return cashCollectionMapper.getActivityList(now);
} }
//同步g_order订单到cash_record表 //同步g_order订单到cash_record表
@Override @Override
@ -318,4 +317,11 @@ public class CashCollectionServiceImpl implements CashCollectionService {
break; // 最后一批 break; // 最后一批
} }
}return "同步完毕"; }return "同步完毕";
}}
}
@Override
public CashCollection selectById(CashCollection cashCollection) {
return cashCollectionMapper.selectById(cashCollection.getId());
}
}

297
src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java

@ -1,10 +1,15 @@
package com.example.demo.serviceImpl.cash; 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.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.User;
import com.example.demo.domain.entity.UserGoldRecord; 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.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.cash.CashRefundMapper;
import com.example.demo.mapper.coin.AuditMapper; import com.example.demo.mapper.coin.AuditMapper;
import com.example.demo.mapper.coin.MarketMapper; import com.example.demo.mapper.coin.MarketMapper;
@ -16,10 +21,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate; 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; import static org.apache.commons.lang3.StringUtils.substring;
@ -43,50 +49,130 @@ public class CashRefundServiceImpl implements RefundService {
private AuditMapper auditMapper; private AuditMapper auditMapper;
@Autowired @Autowired
private MarketMapper marketMapper; private MarketMapper marketMapper;
@Autowired
private CashCollectionMapper cashCollectionMapper;
@Autowired
private AuditController auditController;
@Override @Override
public PageInfo<CashRecordDone> select(Integer pageNum, Integer pageSize, CashRecordDone cashRecordDone) {
public PageInfo<CashRecordDTO> select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) {
PageHelper.startPage(pageNum, pageSize); PageHelper.startPage(pageNum, pageSize);
// System.out.println(goldDetail.getMarkets());
List<CashRecordDone> list = cashRefundMapper.select(cashRecordDone);
List<CashRecordDTO> list = cashRefundMapper.select(cashRecordDTO);
if (list.isEmpty()) {
return new PageInfo<>(list); return new PageInfo<>(list);
} }
@Override
public int add(CashRecordDone cashRecordDone) throws Exception {
if(cashRecordDone.getHandlingCharge()== null){
throw new Exception("未输入手续费") ;
// 批量收集ID
Set<Integer> relatedIds = new HashSet<>();
Set<Integer> marketIds = new HashSet<>();
Set<Integer> submitterIds = new HashSet<>();
Set<Integer> 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<Integer, CashCollection> cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds)
.stream().collect(Collectors.toMap(CashCollection::getId, Function.identity()));
Map<Integer, String> marketNameMap = marketMapper.getMarketByIds(marketIds)
.stream().collect(Collectors.toMap(Market::getId, Market::getName));
Map<Integer, String> submitterNameMap = auditMapper.getNamesByIds(submitterIds)
.stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName));
Map<Integer, LhlAudit> 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);
} }
if(cashRecordDone.getJwcode()==null){
throw new Exception("未输入精网号") ;
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());
} }
if(cashRecordDone.getPaymentAmount()== null){
throw new Exception("未输入付款金额") ;
});
return new PageInfo<>(list);
} }
if(cashRecordDone.getPaymentCurrency()== 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.getRefundModel()== null){
if (item.getFreeGold() != null) {
item.setFreeGold(item.getFreeGold().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
}
}
@Override
public int add(CashRecordRefund cashRecordRefund) throws Exception {
if(cashRecordRefund.getJwcode()==null){
throw new Exception("未输入精网号") ;
}
if(cashRecordRefund.getRefundModel()== null){
throw new Exception("请填充退款类型") ; throw new Exception("请填充退款类型") ;
} }
if(cashRecordDone.getRefundReason()== null){
if(cashRecordRefund.getRefundReason()== null){
throw new Exception("请填写退款理由") ; throw new Exception("请填写退款理由") ;
} }
CashRecordDone cashRecordDonetwo = new CashRecordDone(); CashRecordDone cashRecordDonetwo = new CashRecordDone();
cashRecordDonetwo.setAreaServise(cashRecordDone.getAreaServise());
cashRecordDonetwo.setAreaServise(cashRecordRefund.getAreaServise());
cashRefundMapper.addAudit(cashRecordDonetwo); 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(); CashRecordDone cashRecordDone1 = new CashRecordDone();
cashRecordDone1.setId(cashRecordDone.getId());
cashRecordDone1.setId(cashRecordRefund.getId());
cashRecordDone1.setStatus(6); cashRecordDone1.setStatus(6);
if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null) if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null)
return cashRefundMapper.updateStatus(cashRecordDone1); return cashRefundMapper.updateStatus(cashRecordDone1);
@ -226,4 +312,155 @@ CashRecordDone cashRecordDone1 = new CashRecordDone();
int result = cashRefundMapper.review(cashRecordDone); int result = cashRefundMapper.review(cashRecordDone);
return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode(); return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode();
} }
@Override
public PageInfo<CashRecordDTO> financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) {
PageHelper.startPage(pageNum, pageSize);
// System.out.println(goldDetail.getMarkets());
List<CashRecordDTO> list = cashRefundMapper.financeSelect(cashRecordDTO);
if (list.isEmpty()) {
return new PageInfo<>(list);
}
// 批量收集ID
Set<Integer> relatedIds = new HashSet<>();
Set<Integer> marketIds = new HashSet<>();
Set<Integer> submitterIds = new HashSet<>();
Set<Integer> 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<Integer, CashCollection> cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds)
.stream().collect(Collectors.toMap(CashCollection::getId, Function.identity()));
Map<Integer, String> marketNameMap = marketMapper.getMarketByIds(marketIds)
.stream().collect(Collectors.toMap(Market::getId, Market::getName));
Map<Integer, String> submitterNameMap = auditMapper.getNamesByIds(submitterIds)
.stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName));
Map<Integer, LhlAudit> 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<CashRecordDTO> exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) {
PageHelper.startPage(pageNum, pageSize);
// System.out.println(goldDetail.getMarkets());
List<CashRecordDTO> list = cashRefundMapper.exSelect(cashRecordDTO);
if (list.isEmpty()) {
return new PageInfo<>(list);
}
// 批量收集ID
Set<Integer> relatedIds = new HashSet<>();
Set<Integer> marketIds = new HashSet<>();
Set<Integer> submitterIds = new HashSet<>();
Set<Integer> 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<Integer, CashCollection> cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds)
.stream().collect(Collectors.toMap(CashCollection::getId, Function.identity()));
Map<Integer, String> marketNameMap = marketMapper.getMarketByIds(marketIds)
.stream().collect(Collectors.toMap(Market::getId, Market::getName));
Map<Integer, String> submitterNameMap = auditMapper.getNamesByIds(submitterIds)
.stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName));
Map<Integer, LhlAudit> 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("提交失败") ;
}
} }

45
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.Util.JWTUtil;
import com.example.demo.controller.bean.BeanConsumeController; import com.example.demo.controller.bean.BeanConsumeController;
import com.example.demo.controller.bean.BeanRechargeController; 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.ConsumeController;
import com.example.demo.controller.coin.GoldDetailController; import com.example.demo.controller.coin.GoldDetailController;
import com.example.demo.controller.coin.RechargeController; 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.export.Goldmingxi;
import com.example.demo.domain.vo.bean.*; 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.domain.vo.coin.*;
import com.example.demo.mapper.cash.CashRefundMapper;
import com.example.demo.mapper.coin.ExportMapper; 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.service.coin.ExportExcelService;
import com.example.demo.serviceImpl.cash.CashRefundServiceImpl;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@ -32,6 +38,7 @@ import com.example.demo.service.coin.AiEmotionService;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.Finance;
import org.apache.xmlbeans.impl.xb.xsdschema.Attribute; import org.apache.xmlbeans.impl.xb.xsdschema.Attribute;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -76,6 +83,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
private BeanRechargeController beanRechargeController; private BeanRechargeController beanRechargeController;
@Autowired @Autowired
private AuthenticationManager authenticationManager; private AuthenticationManager authenticationManager;
@Autowired
private CashRefundController cashRefundController;
// 每页查询的数据量 // 每页查询的数据量
private static final int PAGE_SIZE = 5000; private static final int PAGE_SIZE = 5000;
@Autowired @Autowired
@ -261,6 +270,38 @@ public class ExportExcelServiceImpl implements ExportExcelService {
} }
@Override @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<Export> getExcel(Export export) { public List<Export> getExcel(Export export) {
List<Export> list = exportMapper.getExportRecord(export.getAccount(),export.getType()); List<Export> list = exportMapper.getExportRecord(export.getAccount(),export.getType());
System.out.println(list+"-------------------------------"); System.out.println(list+"-------------------------------");
@ -497,6 +538,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
return BeanSystemRechargeInfo.class; return BeanSystemRechargeInfo.class;
case "onlineUser": case "onlineUser":
return BeanOnlineRechargeInfo.class; return BeanOnlineRechargeInfo.class;
case "financeUser":
return CashRecordDTO.class;
case "cashUser":
return CashCollection.class;
default: default:
throw new IllegalArgumentException("不支持的导出类型: " + exportType); throw new IllegalArgumentException("不支持的导出类型: " + exportType);
} }

134
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: 202510-28 14:40
* @Version 1.0
**/
@Service
public class RechargeActivityCenterServiceImpl implements RechargeActivityCenterService {
@Autowired
private RechargeActivityCenterMapper rechargeActivityCenterMapper;
// 根据ID查询活动
@Override
public PageInfo<RechargeActivity> queryActivity(Integer pageNum, Integer pageSize, RechargeActivity activity) {
updateStatus();
PageHelper.startPage(pageNum, pageSize);
List<RechargeActivity> 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<RechargeActivity> 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);
}
}

18
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.domain.vo.coin.RoleVo;
import com.example.demo.mapper.coin.MenuMapper; import com.example.demo.mapper.coin.MenuMapper;
import com.example.demo.mapper.coin.RoleMapper; 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.MenuService;
import com.example.demo.service.coin.RoleService; import com.example.demo.service.coin.RoleService;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
@ -40,6 +41,16 @@ public class RoleServiceImpl implements RoleService {
private MenuService menuService; private MenuService menuService;
@Autowired @Autowired
private MenuMapper menuMapper; private MenuMapper menuMapper;
@Autowired
private LiveMapper liveMapper;
//查询直播礼物
@Override
public List<String> getChannel() {
return liveMapper.getChannel();
}
//新增角色 //新增角色
@Override @Override
@ -62,13 +73,12 @@ public class RoleServiceImpl implements RoleService {
if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) { if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) {
return Result.error("权限为空"); return Result.error("权限为空");
} }
if (roleVo.getMarket() == null || roleVo.getMarket().isEmpty()) {
return Result.error("所属市场为空");
}
if (roleVo.getFatherId() == null || roleVo.getFatherId() != 2) { if (roleVo.getFatherId() == null || roleVo.getFatherId() != 2) {
for (Integer menuId : roleVo.getMenuIds()) { for (Integer menuId : roleVo.getMenuIds()) {
if (menuId == 11) {
if (menuId == 128) {
return Result.error("上级角色非管理员用户不能赋予权限管理"); return Result.error("上级角色非管理员用户不能赋予权限管理");
} }
} }

58
src/main/resources/cashMapper/CashCollectionMapper.xml

@ -7,12 +7,12 @@
useGeneratedKeys="true" keyProperty="id"> useGeneratedKeys="true" keyProperty="id">
insert into insert into
cash_record(order_type,jwcode,name,market,activity, 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, payment_currency,payment_amount,received_market,
pay_type,pay_time,status,submitter_id,submitter_market, pay_type,pay_time,status,submitter_id,submitter_market,
voucher,remark) voucher,remark)
values(#{orderType},#{jwcode},#{name},#{market},#{activity}, values(#{orderType},#{jwcode},#{name},#{market},#{activity},
#{orderCode},#{goodsName},#{goodNum},#{permanentGold},#{freeGold},#{paymentCurrency},
#{orderCode},#{goodsName},#{goodNum},#{NumUnit},#{permanentGold},#{freeGold},#{paymentCurrency},
#{paymentAmount},#{receivedMarket},#{payType},#{payTime}, #{paymentAmount},#{receivedMarket},#{payType},#{payTime},
#{status},#{submitterId},#{submitterMarket},#{voucher},#{remark}) #{status},#{submitterId},#{submitterMarket},#{voucher},#{remark})
</insert> </insert>
@ -43,6 +43,10 @@
activity = #{cashRecord.activity}, activity = #{cashRecord.activity},
goods_name = #{cashRecord.goodsName}, goods_name = #{cashRecord.goodsName},
good_num = #{cashRecord.goodNum}, 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_currency = #{cashRecord.paymentCurrency},
payment_amount = #{cashRecord.paymentAmount}, payment_amount = #{cashRecord.paymentAmount},
received_market = #{cashRecord.receivedMarket}, received_market = #{cashRecord.receivedMarket},
@ -114,8 +118,9 @@
<select id="selectCollection1" resultType="com.example.demo.domain.vo.cash.CashCollection"> <select id="selectCollection1" resultType="com.example.demo.domain.vo.cash.CashCollection">
select cr.order_type, cr.id,cr.jwcode,cr.name,cr.market, select cr.order_type, cr.id,cr.jwcode,cr.name,cr.market,
m1.name as marketName, m1.name as marketName,
cr.activity,cr.order_code,cr.bank_code,
ra.activity_name as activity,cr.order_code,cr.bank_code,
cr.goods_name,cr.good_num, cr.goods_name,cr.good_num,
cr.num_unit,
cr.permanent_gold/100 as permanentGold,cr.free_gold/100 as freeGold,cr.payment_amount/100 as paymentAmount, cr.permanent_gold/100 as permanentGold,cr.free_gold/100 as freeGold,cr.payment_amount/100 as paymentAmount,
r1.rate_name as paymentCurrency, r1.rate_name as paymentCurrency,
r2.rate_name as receivedCurrency, r2.rate_name as receivedCurrency,
@ -133,6 +138,7 @@
left join market m2 on m2.id = cr.received_market left join market m2 on m2.id = cr.received_market
left join rate r1 on r1.id = cr.payment_currency left join rate r1 on r1.id = cr.payment_currency
left join rate r2 on r2.id = cr.received_currency left join rate r2 on r2.id = cr.received_currency
left join recharge_activity ra on ra.id = cr.activity
<where> <where>
1 = 1 1 = 1
<if test="cashCollection.market != null and cashCollection.market != ''"> <if test="cashCollection.market != null and cashCollection.market != ''">
@ -207,10 +213,13 @@
</choose> </choose>
</select> </select>
<select id="selectAuditByOrderCode" resultType="com.example.demo.domain.entity.CashRecord"> <select id="selectAuditByOrderCode" resultType="com.example.demo.domain.entity.CashRecord">
select id, status,jwcode,name,market,activity,
order_code,bank_code,goods_name,good_num,permanent_gold,free_gold,
payment_currency,payment_amount,pay_type,pay_time,status,submitter_id,
voucher,remark from cash_record where order_code=#{orderCode}
select cash_record.id,jwcode,name,market,ra.activity_name as activity,
order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold,
payment_currency,payment_amount,pay_type,pay_time,cash_record.status,submitter_id,
voucher,remark
from cash_record
left join recharge_activity ra on ra.id = cash_record.activity
where order_code=#{orderCode}
</select> </select>
<!--根据精网号获取姓名--> <!--根据精网号获取姓名-->
<select id="getNameByJwcode" resultType="java.lang.String"> <select id="getNameByJwcode" resultType="java.lang.String">
@ -219,8 +228,10 @@
<select id="getMarketNameByJwcode" resultType="java.lang.String"> <select id="getMarketNameByJwcode" resultType="java.lang.String">
select m.name from user u left join market m on u.market=m.id select m.name from user u left join market m on u.market=m.id
where u.jwcode=#{jwcode}</select> where u.jwcode=#{jwcode}</select>
<select id="getActivityList" resultType="java.lang.String">
select distinct activity from cash_record
<select id="getActivityList" resultType="com.example.demo.domain.entity.RechargeActivity">
select id,activity_name,business_belong,status
from recharge_activity
where #{now} between start_time and end_time
</select> </select>
<!--查找未同步的订单--> <!--查找未同步的订单-->
<select id="getUnSync" resultType="com.example.demo.domain.entity.GOrder"> <select id="getUnSync" resultType="com.example.demo.domain.entity.GOrder">
@ -231,4 +242,33 @@
where is_synced=0 and state=1 and type='gold_coin' and pay_style in(3,5,6,7,9) where is_synced=0 and state=1 and type='gold_coin' and pay_style in(3,5,6,7,9)
limit #{size} limit #{size}
</select> </select>
<select id="selectById" resultType="com.example.demo.domain.vo.cash.CashCollection">
select cr.id,cr.jwcode,cr.name,cr.market,
cr.order_code,cr.bank_code,cr.goods_name,cr.good_num,cr.num_unit,cr.permanent_gold,cr.free_gold,
cr.payment_currency,cr.payment_amount,cr.received_currency,cr.received_amount,cr.handling_charge,
cr.pay_type,cr.received_market,cr.pay_time,cr.received_time,cr.audit_id,cr.status,cr.submitter_id,
cr.submitter_market,cr.voucher,cr.remark,cr.audit_time,a1.admin_name as submitterName,
a2.admin_name as auditName,ra.activity_name as activity
from cash_record cr
left join admin a1 on cr.submitter_id = a1.id
left join admin a2 on cr.audit_id = a2.id
left join recharge_activity ra on ra.id = cr.activity
where cr.id=#{id}
</select>
<select id="selectBatchIds" resultType="com.example.demo.domain.vo.cash.CashCollection">
select cr.id,cr.jwcode,cr.name,cr.market,
cr.order_code,cr.bank_code,cr.goods_name,cr.good_num,cr.num_unit,cr.permanent_gold,cr.free_gold,
cr.payment_currency,cr.payment_amount,cr.received_currency,cr.received_amount,cr.handling_charge,
cr.pay_type,cr.received_market,cr.pay_time,cr.received_time,cr.audit_id,cr.status,cr.submitter_id,
cr.submitter_market,cr.voucher,cr.remark,cr.audit_time,a1.admin_name as submitterName,
a2.admin_name as auditName,ra.activity_name as activity
from cash_record_collection cr
left join admin a1 on cr.submitter_id = a1.id
left join admin a2 on cr.audit_id = a2.id
left join recharge_activity ra on ra.id = cr.activity
where cr.id IN
<foreach collection="relatedIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper> </mapper>

354
src/main/resources/cashMapper/CashRefundMapper.xml

@ -2,30 +2,19 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.cash.CashRefundMapper"> <mapper namespace="com.example.demo.mapper.cash.CashRefundMapper">
<insert id="insert"> <insert id="insert">
INSERT INTO cash_record (
order_type,
INSERT INTO cash_record_refund (
jwcode, jwcode,
name, name,
market, market,
activity,
order_code, order_code,
bank_code, bank_code,
goods_name,
good_num,
audit_id,
payment_currency,
payment_amount,
received_currency,
received_amount,
handling_charge,
received_market,
pay_type,
pay_time,
received_time,
status,
permanent_gold,
free_gold,
submitter_id, submitter_id,
submitter_market,
voucher, voucher,
remark, remark,
reject_reason,
refund_reason, refund_reason,
refund_model, refund_model,
executor, executor,
@ -33,32 +22,24 @@
refund_time, refund_time,
refund_remark, refund_remark,
refund_voucher, refund_voucher,
permanent_gold,
free_gold
refund_currency,
refund_amount,
related_id,
audit_id,
status
) VALUES ( ) VALUES (
#{orderType},
#{jwcode}, #{jwcode},
#{name}, #{name},
#{market}, #{market},
#{activity},
#{orderCode}, #{orderCode},
#{bankCode}, #{bankCode},
#{goodsName},
#{goodNum},
#{auditId},
#{paymentCurrency},
#{paymentAmount},
#{receivedCurrency},
#{receivedAmount},
#{handlingCharge},
#{receivedMarket},
#{payType},
#{payTime},
#{receivedTime},
#{status},
#{partRefundGold},
#{partRefundFree},
#{submitterId}, #{submitterId},
#{submitterMarket},
#{voucher}, #{voucher},
#{remark}, #{remark},
#{rejectReason},
#{refundReason}, #{refundReason},
#{refundModel}, #{refundModel},
#{executor}, #{executor},
@ -66,8 +47,11 @@
#{refundTime}, #{refundTime},
#{refundRemark}, #{refundRemark},
#{refundVoucher}, #{refundVoucher},
#{permanentGold},
#{freeGold}
#{refundCurrency},
#{refundAmount},
#{id},
#{auditId},
#{status}
); );
</insert> </insert>
<insert id="addAudit" parameterType="com.example.demo.domain.vo.cash.CashRecordDone" useGeneratedKeys="true" keyProperty="id"> <insert id="addAudit" parameterType="com.example.demo.domain.vo.cash.CashRecordDone" useGeneratedKeys="true" keyProperty="id">
@ -89,7 +73,7 @@
</insert> </insert>
<update id="update"> <update id="update">
update cash_record
update cash_record_refund
set set
status = 10, status = 10,
refund_model = #{refundModel}, refund_model = #{refundModel},
@ -97,15 +81,15 @@
where id = #{id} where id = #{id}
</update> </update>
<update id="withdraw"> <update id="withdraw">
update cash_record set status = 11
where order_type =2 and id = #{id}
update cash_record_refund set status = 11
where id = #{id}
</update> </update>
<update id="review"> <update id="review">
update cash_record set status = #{status},executor = #{executor},reject_reason = #{rejectReason}
where order_type =2 and id = #{id}
update cash_record_refund set status = #{status},executor = #{executor},reject_reason = #{rejectReason}
where id = #{id}
</update> </update>
<update id="executor"> <update id="executor">
update cash_record set refund_currency = #{refundCurrency},
update cash_record_refund set refund_currency = #{refundCurrency},
refund_amount = #{refundAmount}, refund_amount = #{refundAmount},
refund_channels = #{refundChannels}, refund_channels = #{refundChannels},
refund_time = #{refundTime}, refund_time = #{refundTime},
@ -113,10 +97,10 @@
refund_voucher = #{refundVoucher}, refund_voucher = #{refundVoucher},
status = #{status}, status = #{status},
executor = #{executor} executor = #{executor}
where order_type =2 and id = #{id}
where id = #{id}
</update> </update>
<update id="updateStatus"> <update id="updateStatus">
update cash_record
update cash_record_collection
set status = #{status} set status = #{status}
<where> <where>
<if test="id != null"> <if test="id != null">
@ -147,118 +131,241 @@
</update> </update>
<select id="select" resultType="com.example.demo.domain.vo.cash.CashRecordDone">
<select id="select" resultType="com.example.demo.domain.vo.cash.CashRecordDTO">
select select
cr.id,
cr.order_type,
cr.jwcode,
cr.name,
cr.market,
cr.activity,
cr.order_code,
cr.bank_code,
cr.goods_name,
cr.good_num,
cr.payment_currency,
Round((payment_amount) / 100.0, 2) AS PaymentAmount,
cr.received_currency,
Round((received_amount) / 100.0, 2) AS receivedAmount,
Round((handling_charge) / 100.0, 2) AS handlingCharge,
cr.pay_type,
cr.received_market,
cr.pay_time,
cr.received_time,
cr.audit_id,
cr.status,
cr.submitter_id,
cr.voucher,
cr.refund_reason,
cr.refund_model,
cr.executor,
cr.refund_channels,
cr.refund_time,
cr.refund_remark,
cr.refund_voucher,
cr.remark,
cr.reject_reason,
cr.create_time,
cr.update_time,
cr.audit_time,
a1.admin_name as submitterName,
a3.admin_name as executorName,
a2.area_servise,
a2.area_finance,
a2.area_charge,
a2.head_finance,
cr.refund_currency,
cr.refund_amount,
Round((cr.permanent_gold) / 100.0, 2) AS permanentGold,
Round((cr.free_gold) / 100.0, 2) AS freeGold,
m.name as marketName
from cash_record cr
left join admin a1 on submitter_id = a1.id
left join lhl_audit a2 on cr.audit_id = a2.id
left join admin a3 on executor = a3.account
left join market m on m.id = cr.market
crr.id,
crr.jwcode,
crr.name,
crr.market,
crr.permanent_gold,
crr.free_gold,
crr.audit_id,
crr.status,
crr.submitter_id,
crr.submitter_market,
crr.executor,
crr.refund_channels,
crr.refund_time,
crr.create_time,
crr.update_time,
crr.audit_time,
crr.related_id,
la.area_servise,
la.area_finance,
la.area_charge,
la.head_finance,
crc.activity,
crc.goods_name,
crc.good_num as goodsNum,
crc.num_unit,
crc.pay_type,
crc.pay_time,
crc.voucher,
crc.remark,
crc.payment_currency,
crc.payment_amount
from cash_record_refund crr
left join lhl_audit la on la.id = crr.audit_id
left join cash_record_collection crc on crc.id = crr.related_id
<where> <where>
cr.order_type = 2
<if test="status != null"> <if test="status != null">
and cr.status = #{status}
</if>
<if test="orderCode != null">
and cr.order_code = #{orderCode}
and crr.status = #{status}
</if> </if>
<if test="name != null and name.length() > 0"> <if test="name != null and name.length() > 0">
and cr.name = #{name}
and crr.name = #{name}
</if> </if>
<if test="jwcode != null"> <if test="jwcode != null">
and cr.jwcode = #{jwcode}
and crr.jwcode = #{jwcode}
</if> </if>
<if test="markets!= null and markets.size > 0"> <if test="markets!= null and markets.size > 0">
AND cr.market IN
AND crr.market IN
<foreach collection="markets" item="markets" open="(" separator="," close=")"> <foreach collection="markets" item="markets" open="(" separator="," close=")">
#{markets} #{markets}
</foreach> </foreach>
</if> </if>
<if test="statuses!= null and statuses.size > 0"> <if test="statuses!= null and statuses.size > 0">
AND cr.status IN
AND crr.status IN
<foreach collection="statuses" item="statuses" open="(" separator="," close=")"> <foreach collection="statuses" item="statuses" open="(" separator="," close=")">
#{statuses} #{statuses}
</foreach> </foreach>
</if> </if>
<if test="paymentCurrency!= null and paymentCurrency.length() > 0"> <if test="paymentCurrency!= null and paymentCurrency.length() > 0">
AND cr.payment_currency LIKE CONCAT('%', #{paymentCurrency}, '%')
AND crc.payment_currency LIKE CONCAT('%', #{paymentCurrency}, '%')
</if> </if>
<if test="goodsNames!= null and goodsNames.size > 0"> <if test="goodsNames!= null and goodsNames.size > 0">
AND cr.goods_name IN
AND crc.goods_name IN
<foreach collection="goodsNames" item="goodsNames" open="(" separator="," close=")"> <foreach collection="goodsNames" item="goodsNames" open="(" separator="," close=")">
#{goodsNames} #{goodsNames}
</foreach> </foreach>
</if> </if>
<if test="payType != null and payType.length()>0"> <if test="payType != null and payType.length()>0">
and cr.pay_type = #{payType}
and crc.pay_type = #{payType}
</if> </if>
<if test="receivedMarket != null and receivedMarket.length()>0">
and cr.received_market = #{receivedMarket}
<if test="startTime != null and endTime != null">
and crc.`pay_time` BETWEEN #{startTime} AND #{endTime}
</if> </if>
<if test="refundModel != null and refundModel.length()>0">
and cr.refundModel = #{refundModel}
<if test=" submitterId!= null">
and crr.submitter_id = #{submitterId}
</if>
</where>
<choose>
<when test="sortField != null and sortField.length > 0 or sortOrder != null and sortOrder.length > 0">
ORDER BY ${sortField} ${sortOrder}
</when>
<otherwise>
ORDER BY crr.create_time DESC
</otherwise>
</choose>
</select>
<select id="financeSelect" resultType="com.example.demo.domain.vo.cash.CashRecordDTO">
select crr.id,
crr.jwcode,
crr.name,
crr.market,
crc.goods_name,
crc.good_num as goodsNum,
crc.num_unit,
crr.refund_model,
crr.submitter_id,
crr.refund_reason,
crr.remark,
crr.status,
crr.permanent_gold,
crr.free_gold,
crr.audit_id,
crr.related_id,
la.area_servise,
la.area_finance,
la.area_charge,
la.head_finance
from cash_record_refund crr
left join cash_record_collection crc on crc.id = crr.related_id
left join lhl_audit la on la.id = crr.audit_id
<where>
<if test="status != null">
and crr.status = #{status}
</if>
<if test="name != null and name.length() > 0">
and crr.name = #{name}
</if>
<if test="jwcode != null">
and crr.jwcode = #{jwcode}
</if>
<if test="markets!= null and markets.size > 0">
AND crr.market IN
<foreach collection="markets" item="markets" open="(" separator="," close=")">
#{markets}
</foreach>
</if>
<if test="statuses!= null and statuses.size > 0">
AND crr.status IN
<foreach collection="statuses" item="statuses" open="(" separator="," close=")">
#{statuses}
</foreach>
</if>
<if test="paymentCurrency!= null and paymentCurrency.length() > 0">
AND crc.payment_currency LIKE CONCAT('%', #{paymentCurrency}, '%')
</if>
<if test="goodsNames!= null and goodsNames.size > 0">
AND crc.goods_name IN
<foreach collection="goodsNames" item="goodsNames" open="(" separator="," close=")">
#{goodsNames}
</foreach>
</if>
<if test="payType != null and payType.length()>0">
and crc.pay_type = #{payType}
</if> </if>
<if test="startTime != null and endTime != null"> <if test="startTime != null and endTime != null">
and cr.`pay_time` BETWEEN #{startTime} AND #{endTime}
and crc.`pay_time` BETWEEN #{startTime} AND #{endTime}
</if> </if>
<if test=" submitterId!= null"> <if test=" submitterId!= null">
and cr.submitter_id = #{submitterId}
and crr.submitter_id = #{submitterId}
</if>
</where>
<choose>
<when test="sortField != null and sortField.length > 0 or sortOrder != null and sortOrder.length > 0">
ORDER BY ${sortField} ${sortOrder}
</when>
<otherwise>
ORDER BY crr.create_time DESC
</otherwise>
</choose>
</select>
<select id="getAudit" resultType="com.example.demo.domain.vo.cash.LhlAudit">
select la.id,
la.area_servise,
la.area_finance,
la.area_charge,
la.head_finance
from lhl_audit la
where la.id = #{id}
</select>
<select id="exSelect" resultType="com.example.demo.domain.vo.cash.CashRecordDTO">
select crr.id,
crr.jwcode,
crr.name,
crr.market,
crc.goods_name,
crc.good_num as goodsNum,
crc.num_unit,
crr.refund_model,
crr.refund_currency,
crr.refund_amount,
crr.refund_channels,
crr.voucher,
crr.refund_time,
crr.status,
crr.audit_id,
crr.related_id,
la.area_servise,
la.area_finance,
la.area_charge,
la.head_finance
from cash_record_refund crr
left join cash_record_collection crc on crc.id = crr.related_id
left join lhl_audit la on la.id = crr.audit_id
<where>
<if test="status != null">
and crr.status = #{status}
</if>
<if test="name != null and name.length() > 0">
and crr.name = #{name}
</if>
<if test="jwcode != null">
and crr.jwcode = #{jwcode}
</if>
<if test="markets!= null and markets.size > 0">
AND crr.market IN
<foreach collection="markets" item="markets" open="(" separator="," close=")">
#{markets}
</foreach>
</if>
<if test="statuses!= null and statuses.size > 0">
AND crr.status IN
<foreach collection="statuses" item="statuses" open="(" separator="," close=")">
#{statuses}
</foreach>
</if>
<if test="goodsNames!= null and goodsNames.size > 0">
AND crc.goods_name IN
<foreach collection="goodsNames" item="goodsNames" open="(" separator="," close=")">
#{goodsNames}
</foreach>
</if> </if>
<if test="refundCurrency != null and refundCurrency.length()>0">
and cr.refund_currency = #{refundCurrency}
<if test="refundCurrency != null and refundCurrency.size > 0">
AND crr.refund_currency = #{refundCurrency}
</if> </if>
<if test="refundChannels != null and refundChannels.length()>0"> <if test="refundChannels != null and refundChannels.length()>0">
and cr.refund_channels = #{refundChannels}
and crc.refund_channels = #{refundChannels}
</if> </if>
<if test="sTime != null and eTime != null">
and cr.`refund_time` BETWEEN #{sTime} AND #{eTime}
<if test="startTime != null and endTime != null">
and crc.`refund_time` BETWEEN #{startTime} AND #{endTime}
</if>
<if test=" submitterId!= null">
and crr.submitter_id = #{submitterId}
</if> </if>
</where> </where>
<choose> <choose>
@ -266,8 +373,17 @@
ORDER BY ${sortField} ${sortOrder} ORDER BY ${sortField} ${sortOrder}
</when> </when>
<otherwise> <otherwise>
ORDER BY create_time DESC
ORDER BY crr.create_time DESC
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
<select id="getAuditBatch" resultType="com.example.demo.domain.vo.cash.LhlAudit">
select * from lhl_audit
where id in
<foreach collection="auditIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper> </mapper>

12
src/main/resources/jindouMapper/BeanConsumeMapper.xml

@ -142,6 +142,9 @@
<if test="beanConsumeFan.jwcode != null and beanConsumeFan.jwcode != ''"> <if test="beanConsumeFan.jwcode != null and beanConsumeFan.jwcode != ''">
AND fm.jwcode = #{beanConsumeFan.jwcode} AND fm.jwcode = #{beanConsumeFan.jwcode}
</if> </if>
<if test="beanConsumeFan.flag !=0">
AND fm.employee = 0
</if>
<if test="beanConsumeFan.dept != null and beanConsumeFan.dept != ''"> <if test="beanConsumeFan.dept != null and beanConsumeFan.dept != ''">
AND fm.dept = #{beanConsumeFan.dept} AND fm.dept = #{beanConsumeFan.dept}
</if> </if>
@ -182,6 +185,9 @@
<if test="beanConsumeFan.jwcode != null and beanConsumeFan.jwcode != ''"> <if test="beanConsumeFan.jwcode != null and beanConsumeFan.jwcode != ''">
AND fm.jwcode = #{beanConsumeFan.jwcode} AND fm.jwcode = #{beanConsumeFan.jwcode}
</if> </if>
<if test="beanConsumeFan.flag !=0">
AND fm.employee = 0
</if>
<if test="beanConsumeFan.dept != null and beanConsumeFan.dept != ''"> <if test="beanConsumeFan.dept != null and beanConsumeFan.dept != ''">
AND fm.dept = #{beanConsumeFan.dept} AND fm.dept = #{beanConsumeFan.dept}
</if> </if>
@ -222,6 +228,9 @@
<if test="beanConsumeArticle.jwcode != null and beanConsumeArticle.jwcode != ''"> <if test="beanConsumeArticle.jwcode != null and beanConsumeArticle.jwcode != ''">
AND fm.jwcode = #{beanConsumeArticle.jwcode} AND fm.jwcode = #{beanConsumeArticle.jwcode}
</if> </if>
<if test="beanConsumeArticle.flag !=0">
AND fm.employee = 0
</if>
<if test="beanConsumeArticle.dept != null and beanConsumeArticle.dept != ''"> <if test="beanConsumeArticle.dept != null and beanConsumeArticle.dept != ''">
AND fm.dept = #{beanConsumeArticle.dept} AND fm.dept = #{beanConsumeArticle.dept}
</if> </if>
@ -283,6 +292,9 @@
<if test="beanConsumeArticle.jwcode != null and beanConsumeArticle.jwcode != ''"> <if test="beanConsumeArticle.jwcode != null and beanConsumeArticle.jwcode != ''">
AND fm.jwcode = #{beanConsumeArticle.jwcode} AND fm.jwcode = #{beanConsumeArticle.jwcode}
</if> </if>
<if test="beanConsumeArticle.flag !=0">
AND fm.employee = 0
</if>
<if test="beanConsumeArticle.dept != null and beanConsumeArticle.dept != ''"> <if test="beanConsumeArticle.dept != null and beanConsumeArticle.dept != ''">
AND fm.dept = #{beanConsumeArticle.dept} AND fm.dept = #{beanConsumeArticle.dept}
</if> </if>

8
src/main/resources/jindouMapper/BeanUser.xml

@ -33,13 +33,16 @@
FROM fx_member fm FROM fx_member fm
INNER JOIN fx_yaoqing fy ON fy.uid = fm.id INNER JOIN fx_yaoqing fy ON fy.uid = fm.id
<where> <where>
1=1
<if test="beanUser.jwcode != null and beanUser.jwcode != ''"> <if test="beanUser.jwcode != null and beanUser.jwcode != ''">
AND fm.jwcode = #{beanUser.jwcode} AND fm.jwcode = #{beanUser.jwcode}
</if> </if>
<if test="beanUser.flag !=0">
AND fm.employee = 0
</if>
<if test="beanUser.dept != null and beanUser.dept != ''"> <if test="beanUser.dept != null and beanUser.dept != ''">
AND fm.dept = #{beanUser.dept} AND fm.dept = #{beanUser.dept}
</if> </if>
</where> </where>
<choose> <choose>
@ -72,6 +75,9 @@
<if test="beanUser.jwcode != null and beanUser.jwcode != ''"> <if test="beanUser.jwcode != null and beanUser.jwcode != ''">
AND fm.jwcode = #{beanUser.jwcode} AND fm.jwcode = #{beanUser.jwcode}
</if> </if>
<if test="beanUser.flag !=0">
AND fm.employee = 0
</if>
<if test="beanUser.dept != null and beanUser.dept != ''"> <if test="beanUser.dept != null and beanUser.dept != ''">
AND fm.dept = #{beanUser.dept} AND fm.dept = #{beanUser.dept}
</if> </if>

15
src/main/resources/liveMapper/LiveMapper.xml

@ -22,9 +22,13 @@
LEFT JOIN live_pindao lp ON lp.pd_id = l.channel_id LEFT JOIN live_pindao lp ON lp.pd_id = l.channel_id
LEFT JOIN member_info mi ON mi.jwcode = lgg.jwcode LEFT JOIN member_info mi ON mi.jwcode = lgg.jwcode
<where> <where>
1=1
<if test="beanConsumeLive.jwcode != null and beanConsumeLive.jwcode != ''"> <if test="beanConsumeLive.jwcode != null and beanConsumeLive.jwcode != ''">
AND lgg.jwcode = #{beanConsumeLive.jwcode} AND lgg.jwcode = #{beanConsumeLive.jwcode}
</if> </if>
<if test="beanConsumeLive.flag!=0">/*是否看员工数据,live表1是员工,0是非员工,与金币表相反*/
AND mi.employee = 0
</if>
<if test="beanConsumeLive.dept != null and beanConsumeLive.dept != ''"> <if test="beanConsumeLive.dept != null and beanConsumeLive.dept != ''">
AND mi.deptName = #{beanConsumeLive.dept} AND mi.deptName = #{beanConsumeLive.dept}
</if> </if>
@ -59,6 +63,13 @@
<select id="getLiveGift" resultType="java.lang.String"> <select id="getLiveGift" resultType="java.lang.String">
select distinct name from live_gifts select distinct name from live_gifts
</select> </select>
<select id="getChannel" resultType="java.lang.String">
select distinct title
from live_pindao
where pd_id &lt; 999
and title is not null <!-- 可选:排除标题为空的记录 -->
and title != '' <!-- 可选:排除标题为空字符串的记录 -->
</select>
<!--获取直播频道列表--> <!--获取直播频道列表-->
<select id="getLiveChannel" resultType="java.lang.String"> <select id="getLiveChannel" resultType="java.lang.String">
select distinct title from live_pindao where title is not null and title != '' select distinct title from live_pindao where title is not null and title != ''
@ -77,6 +88,10 @@
<if test="beanConsumeLive.jwcode != null and beanConsumeLive.jwcode != ''"> <if test="beanConsumeLive.jwcode != null and beanConsumeLive.jwcode != ''">
AND lgg.jwcode = #{beanConsumeLive.jwcode} AND lgg.jwcode = #{beanConsumeLive.jwcode}
</if> </if>
<if test="beanConsumeLive.flag!=0">/*是否看员工数据,live表1是员工,0是非员工,与金币表相反*/
AND EXISTS (SELECT 1 FROM member_info mi
WHERE mi.jwcode = lgg.jwcode AND mi.employee = 0)
</if>
<if test="beanConsumeLive.startTime != null and beanConsumeLive.endTime != null"> <if test="beanConsumeLive.startTime != null and beanConsumeLive.endTime != null">
AND lgg.created_at BETWEEN #{beanConsumeLive.startTime} AND #{beanConsumeLive.endTime} AND lgg.created_at BETWEEN #{beanConsumeLive.startTime} AND #{beanConsumeLive.endTime}
</if> </if>

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

@ -22,43 +22,29 @@
order by create_time DESC order by create_time DESC
limit 1 limit 1
</update> </update>
<!--更新用户余额-->
<update id="updateUserGold"> <update id="updateUserGold">
update user update user
set sum_permanent_gold = sum_permanent_gold + COALESCE(#{sumPermanentGold},0),
sum_free_june = sum_free_june + COALESCE(#{sumFreeJune},0),
sum_free_december = sum_free_december + COALESCE(#{sumFreeDecember},0),
sum_task_gold = sum_task_gold + COALESCE(#{sumTaskGold},0),
current_permanent_gold = current_permanent_gold + COALESCE(#{currentPermanentGold},0),
current_free_june = current_free_june + COALESCE(#{currentFreeJune},0),
current_free_december = current_free_december + COALESCE(#{currentFreeDecember},0),
current_task_gold = current_task_gold + COALESCE(#{currentTaskGold},0),
recharge_num = recharge_num+COALESCE(#{rechargeNum},0)
<set>
<if test="currentPermanentGold != null">
current_permanent_gold = current_permanent_gold + #{currentPermanentGold},
</if>
<if test="currentFreeJune != null">
current_free_june = current_free_june + #{currentFreeJune},
</if>
<if test="currentFreeDecember != null">
current_free_december = current_free_december + #{currentFreeDecember},
</if>
<if test="currentTaskGold != null">
current_task_gold = current_task_gold + #{currentTaskGold},
</if>
</set>
where jwcode = #{jwcode} where jwcode = #{jwcode}
</update> </update>
<!--修改消费订单为已退款-->
<update id="updateOrderRefund"> <update id="updateOrderRefund">
update user_gold_record update user_gold_record
set is_refund = #{isRefund} set is_refund = #{isRefund}
where order_code = #{orderCode}
</update>
<update id="updateFirstRecharge">
update user
set first_recharge = NOW()
where jwcode = #{jwcode}
where order_code = #{orderCode} and type in (0,1)
</update> </update>
<!--根据订单号查未审核订单-->
<select id="selectOrderByOrderCode" resultType="com.example.demo.domain.entity.UserGoldRecord">
select * from user_gold_record
where order_code = #{orderCode} and audit_status = 0
and flag=1
ORDER BY create_time DESC
limit 1
</select>
<!--多条件查询充值审核订单-->
<select id="selectRechargeBy" resultType="com.example.demo.domain.vo.coin.RechargeAudit"> <select id="selectRechargeBy" resultType="com.example.demo.domain.vo.coin.RechargeAudit">
SELECT ugr.*, SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, (COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
@ -81,6 +67,9 @@
<if test="rechargeAudit.jwcode != null and rechargeAudit.jwcode != ''"> <if test="rechargeAudit.jwcode != null and rechargeAudit.jwcode != ''">
AND ugr.jwcode = #{rechargeAudit.jwcode} AND ugr.jwcode = #{rechargeAudit.jwcode}
</if> </if>
<if test="rechargeAudit.flag!=0">
AND u.flag = 1
</if>
<if test="rechargeAudit.activity != null and rechargeAudit.activity != ''"> <if test="rechargeAudit.activity != null and rechargeAudit.activity != ''">
AND ugr.activity = #{rechargeAudit.activity} AND ugr.activity = #{rechargeAudit.activity}
</if> </if>
@ -120,7 +109,6 @@
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
<!--多条件查询退款审核订单-->
<select id="selectRefundBy" resultType="com.example.demo.domain.vo.coin.RefundAudit"> <select id="selectRefundBy" resultType="com.example.demo.domain.vo.coin.RefundAudit">
SELECT ugr.*, SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, (COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
@ -143,6 +131,9 @@
<if test="refundAudit.jwcode != null"> <if test="refundAudit.jwcode != null">
AND ugr.jwcode = #{refundAudit.jwcode} AND ugr.jwcode = #{refundAudit.jwcode}
</if> </if>
<if test="refundAudit.flag!=0">
AND u.flag = 1
</if>
<if test="refundAudit.refundModel != null "> <if test="refundAudit.refundModel != null ">
AND ugr.refund_model = #{refundAudit.refundModel} AND ugr.refund_model = #{refundAudit.refundModel}
</if> </if>
@ -184,17 +175,20 @@
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
<!--根据订单号查订单-->
<select id="selectAllOrderByOrderCode" resultType="com.example.demo.domain.entity.UserGoldRecord">
select * from user_gold_record where order_code = #{orderCode} and flag=1
ORDER BY create_time DESC
limit 1
</select>
<select id="getAdminMarket" resultType="java.lang.String">
</select>
<select id="getName" resultType="java.lang.String"> <select id="getName" resultType="java.lang.String">
select admin_name from admin where id = #{auditId} select admin_name from admin where id = #{auditId}
</select> </select>
<select id="getNamesByIds" resultType="com.example.demo.domain.entity.Admin">
select id, admin_name from admin
where id in
<foreach collection="submitterIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<update id="updateFirstRecharge">
update user set first_recharge = now() where jwcode = #{jwcode} and first_recharge is null
</update>
</mapper> </mapper>

3
src/main/resources/mapper/BeanAuditMapper.xml

@ -20,6 +20,9 @@
LEFT JOIN market m ON u.market = m.id LEFT JOIN market m ON u.market = m.id
<where> <where>
a.audit_status = #{status} a.audit_status = #{status}
<if test="flag == 1">
AND u.flag = #{flag}
</if>
<if test="jwcode != null and jwcode != ''"> <if test="jwcode != null and jwcode != ''">
AND a.jwcode = #{jwcode} AND a.jwcode = #{jwcode}
</if> </if>

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

@ -35,4 +35,13 @@
<select id="getMarketIdBytype" resultType="com.example.demo.domain.entity.Market"> <select id="getMarketIdBytype" resultType="com.example.demo.domain.entity.Market">
select * from market where parent_id=#{parentId} select * from market where parent_id=#{parentId}
</select> </select>
<select id="getMarketById" resultType="java.lang.String">
select name from market where id=#{market}
</select>
<select id="getMarketByIds" resultType="com.example.demo.domain.entity.Market">
select id,name from market where id in
<foreach collection="marketIds" item="marketId" open="(" separator="," close=")">
#{marketId}
</foreach>
</select>
</mapper> </mapper>

110
src/main/resources/mapper/RechargeActivityCenterMapper.xml

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.coin.RechargeActivityCenterMapper">
<!-- 查询所有活动(用于批量更新状态) -->
<select id="listActivities" resultType="com.example.demo.domain.vo.coin.RechargeActivity">
SELECT
ra.id,
ra.start_time as startTime,
ra.end_time as endTime,
ra.status as status
FROM recharge_activity ra
WHERE ra.flag = 1
ORDER BY ra.update_time DESC
</select>
<!-- 查询活动 -->
<select id="queryActivity" resultType="com.example.demo.domain.vo.coin.RechargeActivity">
SELECT
ra.id,
ra.activity_name as activityName,
ra.business_belong as businessBelong,
ra.area,
m.name as areaName,
ra.start_time as startTime,
ra.end_time as endTime,
ra.status,
ra.creator,
a.admin_name as creatorName,
ra.create_time as createTime,
ra.update_time as updateTime
FROM recharge_activity ra
LEFT JOIN admin a on a.id = ra.creator
LEFT JOIN market m on m.id = ra.area
<where>
ra.flag = 1
<if test="activityName != null and activityName != ''">
AND ra.activity_name = #{activityName}
</if>
<if test="businessBelong != null and businessBelong != ''">
AND ra.business_belong = #{businessBelong}
</if>
<if test="endTime != null">
AND #{endTime} >= ra.end_time
</if>
<if test="startTime != null">
AND ra.start_time >= #{startTime}
</if>
<if test="area != null">
AND ra.area = #{area}
</if>
</where>
<trim prefix="ORDER BY" suffixOverrides=",">
ra.update_time DESC
</trim>
</select>
<!-- 新增活动 -->
<insert id="addActivity" parameterType="com.example.demo.domain.vo.coin.RechargeActivity">
INSERT INTO recharge_activity (
activity_name,
business_belong,
area,
start_time,
end_time,
status,
creator,
create_time
) VALUES (
#{activityName},
#{businessBelong},
#{area},
#{startTime},
#{endTime},
#{status},
#{creator},
NOW()
)
</insert>
<!-- 更新活动 -->
<update id="updateActivity" parameterType="com.example.demo.domain.vo.coin.RechargeActivity">
UPDATE recharge_activity
<set>
<if test="activityName != null">activity_name = #{activityName},</if>
<if test="businessBelong != null">business_belong = #{businessBelong},</if>
<if test="area != null">area = #{area},</if>
<if test="startTime != null">start_time = #{startTime},</if>
<if test="endTime != null">end_time = #{endTime},</if>
<if test="status != null">status = #{status},</if>
<if test="creator != null">creator = #{creator},</if>
update_time = NOW()
</set>
WHERE id = #{id}
</update>
<!-- 删除活动 -->
<!-- 删除活动 -->
<update id="deleteActivity" parameterType="com.example.demo.domain.vo.coin.RechargeActivity">
UPDATE recharge_activity
<set>
flag = 0,
update_time = NOW()
</set>
WHERE id = #{id}
</update>
</mapper>

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

@ -7,7 +7,12 @@
<if test="roleName != null"> <if test="roleName != null">
role_name = #{roleName}, role_name = #{roleName},
</if> </if>
<if test="market != null">
market = #{market},
</if>
<if test="channel != null">
channel = #{channel},
</if>
<if test="fatherId != null"> <if test="fatherId != null">
father_id = #{fatherId}, father_id = #{fatherId},
</if> </if>
@ -32,7 +37,7 @@
</select> </select>
<select id="selectAllRole" resultType="com.example.demo.domain.vo.coin.RoleVo"> <select id="selectAllRole" resultType="com.example.demo.domain.vo.coin.RoleVo">
SELECT id,role_name FROM role
SELECT id,role_name,market,channel FROM role
<where> <where>
<!-- 判断 market 是否不为总部且 markets 不为空 --> <!-- 判断 market 是否不为总部且 markets 不为空 -->
<if test="markets != null and markets.size() > 0 and '总部' not in markets and '研发部' not in markets"> <if test="markets != null and markets.size() > 0 and '总部' not in markets and '研发部' not in markets">
@ -44,7 +49,7 @@
</where> </where>
</select> </select>
<select id="selectByFatherId" resultType="com.example.demo.domain.vo.coin.RoleVo"> <select id="selectByFatherId" resultType="com.example.demo.domain.vo.coin.RoleVo">
SELECT id,role_name FROM role
SELECT id,role_name,market,channel FROM role
<where> <where>
father_id = #{id} father_id = #{id}
</where> </where>
@ -54,8 +59,8 @@
<!-- 插入角色信息 --> <!-- 插入角色信息 -->
<insert id="addRole" parameterType="com.example.demo.domain.vo.coin.RoleVo" useGeneratedKeys="true" keyProperty="id"> <insert id="addRole" parameterType="com.example.demo.domain.vo.coin.RoleVo" useGeneratedKeys="true" keyProperty="id">
INSERT INTO role INSERT INTO role
(role_name,father_id, market)
VALUES (#{roleName}, #{fatherId}, #{market})
(role_name,father_id, market,channel)
VALUES (#{roleName}, #{fatherId}, #{market},#{channel})
</insert> </insert>
<!-- 删除 role_menu 表中对应角色的数据 --> <!-- 删除 role_menu 表中对应角色的数据 -->
@ -75,6 +80,7 @@
r.market AS market, r.market AS market,
r.create_time AS createTime, r.create_time AS createTime,
r.update_time AS updateTime, r.update_time AS updateTime,
r.channel AS channel,
-- 通过自连接查询父角色名称 -- 通过自连接查询父角色名称
father.role_name AS fatherName father.role_name AS fatherName
FROM role r FROM role r

Loading…
Cancel
Save