Compare commits
merge into: huangqizhen:master
huangqizhen:622
huangqizhen:feat0702/lhl
huangqizhen:huangqizheng/feature-20250626103451-权限页面
huangqizhen:huangqizheng/feature-20250628114355-权限接口完毕
huangqizhen:huangqizheng/feature-20250701172715-异步导出
huangqizhen:lijianlin/feature-20250623120104-工作台与审核
huangqizhen:master
huangqizhen:milestone-20250702-金币重构一期
huangqizhen:sunjiabei/feature-20250623130922-消费功能
huangqizhen:wangyetao/feature-20250628170337-汇率
huangqizhen:暂用(不合并)
pull from: huangqizhen:sunjiabei/feature-20250623130922-消费功能
huangqizhen:622
huangqizhen:feat0702/lhl
huangqizhen:huangqizheng/feature-20250626103451-权限页面
huangqizhen:huangqizheng/feature-20250628114355-权限接口完毕
huangqizhen:huangqizheng/feature-20250701172715-异步导出
huangqizhen:lijianlin/feature-20250623120104-工作台与审核
huangqizhen:master
huangqizhen:milestone-20250702-金币重构一期
huangqizhen:sunjiabei/feature-20250623130922-消费功能
huangqizhen:wangyetao/feature-20250628170337-汇率
huangqizhen:暂用(不合并)
42 Commits
master
...
sunjiabei/
79 changed files with 4489 additions and 102 deletions
-
15pom.xml
-
2src/main/java/com/example/demo/DemoApplication.java
-
31src/main/java/com/example/demo/Util/BusinessException.java
-
190src/main/java/com/example/demo/Util/RedisUtil.java
-
2src/main/java/com/example/demo/config/RedisConfig.java
-
42src/main/java/com/example/demo/controller/AuditController.java
-
103src/main/java/com/example/demo/controller/ConsumeController.java
-
12src/main/java/com/example/demo/controller/GeneralController.java
-
61src/main/java/com/example/demo/controller/GoldDetailController.java
-
66src/main/java/com/example/demo/controller/PermissionController.java
-
93src/main/java/com/example/demo/controller/RechargeController.java
-
101src/main/java/com/example/demo/controller/RefundController.java
-
28src/main/java/com/example/demo/controller/StatisticsController.java
-
41src/main/java/com/example/demo/controller/UserController.java
-
49src/main/java/com/example/demo/controller/WorkbenchController.java
-
1src/main/java/com/example/demo/domain/entity/Admin.java
-
33src/main/java/com/example/demo/domain/entity/Export.java
-
8src/main/java/com/example/demo/domain/entity/Statistics.java
-
3src/main/java/com/example/demo/domain/entity/User.java
-
18src/main/java/com/example/demo/domain/vo/AuditRequest.java
-
50src/main/java/com/example/demo/domain/vo/ConsumeUser.java
-
26src/main/java/com/example/demo/domain/vo/Gold.java
-
42src/main/java/com/example/demo/domain/vo/GoldDetail.java
-
41src/main/java/com/example/demo/domain/vo/GoldUser.java
-
30src/main/java/com/example/demo/domain/vo/Page.java
-
27src/main/java/com/example/demo/domain/vo/Permission.java
-
57src/main/java/com/example/demo/domain/vo/RechargeAudit.java
-
51src/main/java/com/example/demo/domain/vo/RechargeUser.java
-
55src/main/java/com/example/demo/domain/vo/RefundAudit.java
-
50src/main/java/com/example/demo/domain/vo/RefundUser.java
-
64src/main/java/com/example/demo/domain/vo/Result.java
-
17src/main/java/com/example/demo/domain/vo/TestRequest.java
-
25src/main/java/com/example/demo/domain/vo/Total.java
-
45src/main/java/com/example/demo/domain/vo/WorkbenchCard.java
-
65src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java
-
17src/main/java/com/example/demo/mapper/AdminMapper.java
-
25src/main/java/com/example/demo/mapper/AuditMapper.java
-
26src/main/java/com/example/demo/mapper/ConsumeMapper.java
-
2src/main/java/com/example/demo/mapper/GeneralMapper.java
-
25src/main/java/com/example/demo/mapper/GoldDetailMapper.java
-
31src/main/java/com/example/demo/mapper/PermissionMapper.java
-
27src/main/java/com/example/demo/mapper/RechargeMapper.java
-
32src/main/java/com/example/demo/mapper/RefundMapper.java
-
62src/main/java/com/example/demo/mapper/StatisticsMapper.java
-
25src/main/java/com/example/demo/mapper/UserMapper.java
-
23src/main/java/com/example/demo/mapper/WorkBenchMapper.java
-
6src/main/java/com/example/demo/security/TokenFilter.java
-
13src/main/java/com/example/demo/service/AuditService.java
-
28src/main/java/com/example/demo/service/ConsumeService.java
-
19src/main/java/com/example/demo/service/GeneralService.java
-
22src/main/java/com/example/demo/service/GoldDetailService.java
-
29src/main/java/com/example/demo/service/PermissionService.java
-
26src/main/java/com/example/demo/service/RechargeService.java
-
35src/main/java/com/example/demo/service/RefundService.java
-
22src/main/java/com/example/demo/service/StatisticsService.java
-
19src/main/java/com/example/demo/service/UserService.java
-
19src/main/java/com/example/demo/service/WorkbenchService.java
-
104src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java
-
169src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java
-
71src/main/java/com/example/demo/serviceImpl/GeneralServiceImpl.java
-
53src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java
-
115src/main/java/com/example/demo/serviceImpl/PermissionServiceImpl.java
-
131src/main/java/com/example/demo/serviceImpl/RechargeServiceImpl.java
-
167src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java
-
313src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java
-
38src/main/java/com/example/demo/serviceImpl/UserServiceImpl.java
-
212src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java
-
14src/main/resources/application.yml
-
9src/main/resources/mapper/AdminMapper.xml
-
103src/main/resources/mapper/AuditMapper.xml
-
174src/main/resources/mapper/ConsumeMapper.xml
-
6src/main/resources/mapper/GeneralMapper.xml
-
94src/main/resources/mapper/GoldDetailMapper.xml
-
73src/main/resources/mapper/PermissionMapper.xml
-
184src/main/resources/mapper/RechargeMapper.xml
-
202src/main/resources/mapper/RefundMapper.xml
-
144src/main/resources/mapper/StatisticsMapper.xml
-
52src/main/resources/mapper/UserMapper.xml
-
86src/main/resources/mapper/WorkBenchMapper.xml
@ -0,0 +1,31 @@ |
|||
package com.example.demo.Util; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName BusinessException |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-23 14:58 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
import lombok.Getter; |
|||
|
|||
/** |
|||
* 业务异常,可抛出到前端 |
|||
*/ |
|||
@Getter |
|||
public class BusinessException extends RuntimeException { |
|||
private int code; // 业务状态码 |
|||
// 使用默认状态码0的构造方法 |
|||
public BusinessException(String message) { |
|||
this(400, message); // 默认状态码400 |
|||
} |
|||
|
|||
// 指定状态码的构造方法 |
|||
public BusinessException(int code, String message) { |
|||
super(message); |
|||
this.code = code; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,190 @@ |
|||
/* |
|||
package com.example.demo.Util; |
|||
|
|||
import jakarta.annotation.PostConstruct; |
|||
import jakarta.annotation.Resource; |
|||
import org.springframework.data.redis.connection.RedisConnection; |
|||
import org.springframework.data.redis.core.RedisCallback; |
|||
import org.springframework.data.redis.core.RedisTemplate; |
|||
import org.springframework.data.redis.core.ZSetOperations; |
|||
import org.springframework.scheduling.annotation.Scheduled; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
|
|||
import java.util.Set; |
|||
import java.util.concurrent.*; |
|||
|
|||
@Component |
|||
public class RedisUtil { |
|||
|
|||
@Resource |
|||
private RedisTemplate<String, Object> redisTemplate; |
|||
|
|||
// 线程池用于处理延迟消息 |
|||
private ExecutorService delayMessageExecutor; |
|||
|
|||
// 延迟消息处理线程数 |
|||
private static final int DELAY_THREAD_POOL_SIZE = 4; |
|||
|
|||
// 延迟队列轮询间隔(毫秒) |
|||
private static final long DELAY_QUEUE_POLL_INTERVAL = 1000L; |
|||
|
|||
@PostConstruct |
|||
public void init() { |
|||
// 初始化线程池 |
|||
delayMessageExecutor = Executors.newFixedThreadPool(DELAY_THREAD_POOL_SIZE); |
|||
} |
|||
|
|||
*/ |
|||
/** |
|||
* 发送消息到队列 |
|||
* @param queueName 队列名称 |
|||
* @param message 消息内容 |
|||
*//* |
|||
|
|||
public void sendMessage(String queueName, Object message) { |
|||
redisTemplate.opsForList().rightPush(queueName, message); |
|||
} |
|||
|
|||
*/ |
|||
/** |
|||
* 阻塞获取消息(优化版,增加重试机制) |
|||
* @param queueName 队列名称 |
|||
* @param timeout 超时时间(秒) |
|||
* @return 消息内容 |
|||
*//* |
|||
|
|||
public Object blockingGetMessage(String queueName, long timeout) { |
|||
// 分段获取,避免长时间阻塞 |
|||
long endTime = System.currentTimeMillis() + timeout * 1000; |
|||
while (System.currentTimeMillis() < endTime) { |
|||
Object message = redisTemplate.opsForList().leftPop(queueName, 1, TimeUnit.SECONDS); |
|||
if (message != null) { |
|||
return message; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
*/ |
|||
/** |
|||
* 非阻塞获取消息 |
|||
* @param queueName 队列名称 |
|||
* @return 消息内容 |
|||
*//* |
|||
|
|||
public Object getMessage(String queueName) { |
|||
return redisTemplate.opsForList().leftPop(queueName); |
|||
} |
|||
|
|||
*/ |
|||
/** |
|||
* 获取队列长度 |
|||
* @param queueName 队列名称 |
|||
* @return 队列长度 |
|||
*//* |
|||
|
|||
public Long getQueueSize(String queueName) { |
|||
return redisTemplate.opsForList().size(queueName); |
|||
} |
|||
|
|||
*/ |
|||
/** |
|||
* 发送延迟消息(优化版) |
|||
* @param queueName 队列名称 |
|||
* @param message 消息内容 |
|||
* @param delay 延迟时间(秒) |
|||
*//* |
|||
|
|||
public void sendDelayMessage(String queueName, Object message, long delay) { |
|||
String delayQueueKey = getDelayQueueKey(queueName); |
|||
String messageId = generateMessageId(); |
|||
|
|||
redisTemplate.execute(new RedisCallback<Object>() { |
|||
@Override |
|||
public Object doInRedis(RedisConnection connection) { |
|||
connection.openPipeline(); |
|||
// 直接存储消息内容到ZSet的value中 |
|||
connection.zAdd( |
|||
delayQueueKey.getBytes(), |
|||
System.currentTimeMillis() + delay * 1000, |
|||
serializeMessage(messageId, message) |
|||
); |
|||
connection.closePipeline(); |
|||
return null; |
|||
} |
|||
}); |
|||
} |
|||
|
|||
*/ |
|||
/** |
|||
* 启动延迟消息处理任务 |
|||
*//* |
|||
|
|||
@Scheduled(fixedRate = DELAY_QUEUE_POLL_INTERVAL) |
|||
public void processDelayMessages() { |
|||
Set<String> delayQueues = redisTemplate.keys("delay:*"); |
|||
if (delayQueues != null) { |
|||
for (String delayQueue : delayQueues) { |
|||
delayMessageExecutor.execute(() -> { |
|||
String queueName = delayQueue.substring(6); // 去掉"delay:"前缀 |
|||
processSingleDelayQueue(queueName); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
|
|||
*/ |
|||
/** |
|||
* 处理单个延迟队列 |
|||
*//* |
|||
|
|||
private void processSingleDelayQueue(String queueName) { |
|||
String delayQueueKey = getDelayQueueKey(queueName); |
|||
long now = System.currentTimeMillis(); |
|||
|
|||
// 获取所有已到期的消息 |
|||
Set<ZSetOperations.TypedTuple<Object>> messages = redisTemplate.opsForZSet() |
|||
.rangeByScoreWithScores(delayQueueKey, 0, now); |
|||
|
|||
if (messages != null && !messages.isEmpty()) { |
|||
for (ZSetOperations.TypedTuple<Object> tuple : messages) { |
|||
Object messageWithId = tuple.getValue(); |
|||
if (messageWithId != null) { |
|||
// 反序列化消息 |
|||
Object message = deserializeMessage(messageWithId.toString()); |
|||
// 发送到实际队列 |
|||
sendMessage(queueName, message); |
|||
// 从延迟队列中移除 |
|||
redisTemplate.opsForZSet().remove(delayQueueKey, messageWithId); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 生成消息ID |
|||
private String generateMessageId() { |
|||
return java.util.UUID.randomUUID().toString(); |
|||
} |
|||
|
|||
// 获取延迟队列key |
|||
private String getDelayQueueKey(String queueName) { |
|||
return "delay:" + queueName; |
|||
} |
|||
|
|||
// 序列化消息(可根据实际需求实现) |
|||
private byte[] serializeMessage(String messageId, Object message) { |
|||
// 这里简单实现,实际项目中可以使用JSON序列化等 |
|||
return (messageId + ":" + message.toString()).getBytes(); |
|||
} |
|||
|
|||
// 反序列化消息(可根据实际需求实现) |
|||
private Object deserializeMessage(String serialized) { |
|||
// 简单实现,根据实际序列化方式调整 |
|||
int separatorIndex = serialized.indexOf(':'); |
|||
if (separatorIndex > 0) { |
|||
return serialized.substring(separatorIndex + 1); |
|||
} |
|||
return serialized; |
|||
} |
|||
}*/ |
@ -0,0 +1,103 @@ |
|||
package com.example.demo.controller; |
|||
|
|||
import com.example.demo.domain.entity.UserGoldRecord; |
|||
import com.example.demo.domain.vo.ConsumeUser; |
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.Page; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.example.demo.service.ConsumeService; |
|||
import jakarta.validation.Valid; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.util.ObjectUtils; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName ConsumeController |
|||
* @description:消费模块 |
|||
* @author: Double |
|||
* @create: 2025−06-23 13:06 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@RestController |
|||
@RequestMapping("/consume") |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
@CrossOrigin |
|||
public class ConsumeController { |
|||
|
|||
@Autowired |
|||
private ConsumeService consumeService; |
|||
|
|||
//消耗明细 |
|||
@PostMapping("/selectAll") |
|||
public Result selcetAll(@RequestBody Page page) { |
|||
try { |
|||
if (ObjectUtils.isEmpty(page.getPageNum())) { |
|||
return Result.error("页码数为空!"); |
|||
} |
|||
if (ObjectUtils.isEmpty(page.getPageSize())) { |
|||
return Result.error("页大小为空!"); |
|||
} else { |
|||
return Result.success(consumeService.selectAll(page.getPageNum(), page.getPageSize(),page.getConsumeUser())); |
|||
} |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
//消耗明细筛选 |
|||
@PostMapping("/selectBy") |
|||
public Result selcetBy(@RequestBody Page page) { |
|||
try { |
|||
if (ObjectUtils.isEmpty(page.getPageNum())) { |
|||
return Result.error("页码数为空!"); |
|||
} |
|||
if (ObjectUtils.isEmpty(page.getPageSize())) { |
|||
return Result.error("页大小为空!"); |
|||
} else { |
|||
return Result.success(consumeService.selectBy(page.getPageNum(), page.getPageSize(), page.getConsumeUser())); |
|||
} |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
|
|||
} |
|||
|
|||
//消耗金币统计 |
|||
@PostMapping("/statsGold") |
|||
public Result statsGold(@RequestBody ConsumeUser consumeUser) { |
|||
try { |
|||
Gold gold = consumeService.statsGold(consumeUser); |
|||
return Result.success(gold); |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
} |
|||
|
|||
//消耗金币增加 |
|||
@PostMapping("/add") |
|||
public Result add(@RequestBody ConsumeUser consumeUser) { |
|||
try { |
|||
return consumeService.add(consumeUser); |
|||
// if(consumeUser.getJwcode().equals(94226013)) |
|||
// { |
|||
// return consumeService.add(consumeUser); |
|||
// }else { |
|||
// return Result.error("不是测试的精网号,无法添加消费"); |
|||
// } |
|||
// |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,61 @@ |
|||
package com.example.demo.controller; |
|||
|
|||
import com.example.demo.domain.entity.User; |
|||
import com.example.demo.domain.vo.GoldDetail; |
|||
import com.example.demo.domain.vo.Page; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.example.demo.service.GoldDetailService; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.util.ObjectUtils; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName GoldDetailController |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-23 14:41 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@RestController |
|||
@RequestMapping("/goldDetail") |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
@CrossOrigin |
|||
public class GoldDetailController { |
|||
private final GoldDetailService goldDetailService; |
|||
@PostMapping("/getGoldDetail") |
|||
public Result getGoldDetail(@RequestBody Page page){ |
|||
|
|||
if(ObjectUtils.isEmpty(page.getPageNum())){ |
|||
return Result.error("页码数为空!"); |
|||
} |
|||
if(ObjectUtils.isEmpty(page.getPageSize())){ |
|||
return Result.error("页大小为空!"); |
|||
} |
|||
else{ |
|||
return Result.success(goldDetailService.getGoldDetail(page.getPageNum(), page.getPageSize(), page.getGoldDetail())); |
|||
} |
|||
} |
|||
@PostMapping("/getTotal") |
|||
public Result getTotal(@RequestBody GoldDetail goldDetail) { |
|||
return Result.success(goldDetailService.getTotal(goldDetail)); |
|||
} |
|||
@PostMapping("/goldTotal") |
|||
public Result GoldTotal(@RequestBody User user) { |
|||
return Result.success(goldDetailService.GoldTotal(user)); |
|||
} |
|||
@PostMapping("/getGold") |
|||
public Result getGold(@RequestBody Page page) { |
|||
System.out.println( page); |
|||
if(ObjectUtils.isEmpty(page.getPageNum())){ |
|||
return Result.error("页码数为空!"); |
|||
} |
|||
if(ObjectUtils.isEmpty(page.getPageSize())){ |
|||
return Result.error("页大小为空!"); |
|||
} |
|||
return Result.success(goldDetailService.getGold(page.getPageNum(), page.getPageSize(), page.getUser())); |
|||
} |
|||
} |
@ -0,0 +1,66 @@ |
|||
package com.example.demo.controller; |
|||
|
|||
import com.example.demo.domain.entity.Admin; |
|||
import com.example.demo.domain.entity.AdminRole; |
|||
import com.example.demo.domain.vo.Page; |
|||
import com.example.demo.domain.vo.Permission; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.example.demo.service.PermissionService; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import java.util.Arrays; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName PermissionController |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-26 13:22 |
|||
* @Version 1.0 |
|||
**/ |
|||
@RestController |
|||
@RequestMapping("/permission") |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
@CrossOrigin |
|||
public class PermissionController { |
|||
private final PermissionService permissionService; |
|||
@PostMapping("/getposition") |
|||
public Result getposition(@RequestBody String token){ |
|||
return Result.success(permissionService.getposition(token)); |
|||
} |
|||
@PostMapping("/getmarket") |
|||
public Result getmarket(@RequestBody String token){ |
|||
return Result.success(permissionService.getmarket(token)); |
|||
} |
|||
@PostMapping("/getPermission") |
|||
public Result getPermission(@RequestBody Page page){ |
|||
return Result.success(permissionService.getpermission(page.getPageNum(), page.getPageSize(), page.getPermission())); |
|||
} |
|||
@PostMapping("/addPermission") |
|||
public Result addPermission(@RequestBody Admin admin) throws Exception { |
|||
System.out.println( admin); |
|||
try { |
|||
return Result.success(permissionService.addpermission(admin)); |
|||
} |
|||
catch (Exception e) { |
|||
log.error(Arrays.toString(e.getStackTrace())); |
|||
return Result.error(e.getMessage()); |
|||
} |
|||
} |
|||
@PostMapping("/getRole") |
|||
public Result getRole(@RequestBody String token){ |
|||
return Result.success(permissionService.getRole(token)); |
|||
} |
|||
@PostMapping("/deleteAdmin") |
|||
public Result deleteAdmin(@RequestBody Admin admin){ |
|||
return Result.success(permissionService.deleteAdmin(admin.getId())); |
|||
} |
|||
@PostMapping("/updateAdminRole") |
|||
public Result updateAdminRole(@RequestBody AdminRole adminrole){ |
|||
return Result.success(permissionService.updateAdminRole(adminrole)); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,93 @@ |
|||
package com.example.demo.controller; |
|||
|
|||
import com.example.demo.domain.vo.*; |
|||
import com.example.demo.service.ConsumeService; |
|||
import com.example.demo.service.RechargeService; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.util.ObjectUtils; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RechargeController |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-29 13:01 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@RestController |
|||
@RequestMapping("/recharge") |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
@CrossOrigin |
|||
public class RechargeController { |
|||
|
|||
|
|||
@Autowired |
|||
private RechargeService rechargeService; |
|||
|
|||
//消耗明细 |
|||
@PostMapping("/selectAll") |
|||
public Result selcetAll(@RequestBody Page page) { |
|||
try { |
|||
if (ObjectUtils.isEmpty(page.getPageNum())) { |
|||
return Result.error("页码数为空!"); |
|||
} |
|||
if (ObjectUtils.isEmpty(page.getPageSize())) { |
|||
return Result.error("页大小为空!"); |
|||
} else { |
|||
return Result.success(rechargeService.selectAll(page.getPageNum(), page.getPageSize(),page.getRechargeUser())); |
|||
} |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
//消耗明细筛选 |
|||
@PostMapping("/selectBy") |
|||
public Result selcetBy(@RequestBody Page page) { |
|||
try { |
|||
if (ObjectUtils.isEmpty(page.getPageNum())) { |
|||
return Result.error("页码数为空!"); |
|||
} |
|||
if (ObjectUtils.isEmpty(page.getPageSize())) { |
|||
return Result.error("页大小为空!"); |
|||
} else { |
|||
return Result.success(rechargeService.selectBy(page.getPageNum(), page.getPageSize(), page.getRechargeUser())); |
|||
} |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
|
|||
} |
|||
|
|||
//消耗金币统计 |
|||
@PostMapping("/statsGold") |
|||
public Result statsGold(@RequestBody RechargeUser rechargeUser) { |
|||
try { |
|||
Gold gold = rechargeService.statsGold(rechargeUser); |
|||
return Result.success(gold); |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
} |
|||
|
|||
//充值金币增加 |
|||
@PostMapping("/add") |
|||
public Result add(@RequestBody RechargeUser rechargeUser) { |
|||
try { |
|||
return rechargeService.add(rechargeUser); |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,101 @@ |
|||
package com.example.demo.controller; |
|||
|
|||
import com.example.demo.domain.vo.*; |
|||
import com.example.demo.service.ConsumeService; |
|||
import com.example.demo.service.RefundService; |
|||
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 RefundMapper.xml |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-26 11:28 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@RestController |
|||
@RequestMapping("/refund") |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
@CrossOrigin |
|||
public class RefundController { |
|||
|
|||
@Autowired |
|||
private RefundService refundService; |
|||
|
|||
//退款明细 |
|||
@PostMapping("/selectAll") |
|||
public Result selcetAll(@RequestBody Page page) { |
|||
try { |
|||
if (ObjectUtils.isEmpty(page.getPageNum())) { |
|||
return Result.error("页码数为空!"); |
|||
} |
|||
if (ObjectUtils.isEmpty(page.getPageSize())) { |
|||
return Result.error("页大小为空!"); |
|||
} else { |
|||
return Result.success(refundService.selectAll(page.getPageNum(), page.getPageSize(), page.getRefundUser())); |
|||
} |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@PostMapping("/selectBy") |
|||
public Result selcetBy(@RequestBody Page page) { |
|||
try { |
|||
if (ObjectUtils.isEmpty(page.getPageNum())) { |
|||
return Result.error("页码数为空!"); |
|||
} |
|||
if (ObjectUtils.isEmpty(page.getPageSize())) { |
|||
return Result.error("页大小为空!"); |
|||
} else { |
|||
return Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser())); |
|||
} |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
|
|||
} |
|||
|
|||
@PostMapping("/statsGold") |
|||
public Result statsGold(@RequestBody RefundUser refundUser) { |
|||
try { |
|||
Gold gold = refundService.statsGold(refundUser); |
|||
return Result.success(gold); |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
} |
|||
|
|||
@PostMapping("/refundType") |
|||
public Result getRefundType() |
|||
{ |
|||
List<String> list = refundService.getRefundType(); |
|||
return Result.success(list); |
|||
} |
|||
|
|||
@PostMapping("/selectGoods") |
|||
public Result getSelectGoods(@RequestBody RefundUser refundUser) |
|||
{ |
|||
List<RefundUser> list = refundService.selectGoods(refundUser.getJwcode()); |
|||
return Result.success(list); |
|||
} |
|||
|
|||
//消耗金币增加 |
|||
@PostMapping("/add") |
|||
public Result add(@RequestBody RefundUser refundUser) { |
|||
try { |
|||
return refundService.add(refundUser); |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,41 @@ |
|||
package com.example.demo.controller; |
|||
|
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.GoldUser; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.example.demo.service.ConsumeService; |
|||
import com.example.demo.service.UserService; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName UserController |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-25 10:25 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@RestController |
|||
@RequestMapping("/user") |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
@CrossOrigin |
|||
public class UserController { |
|||
|
|||
@Autowired |
|||
private UserService userService; |
|||
|
|||
@PostMapping("/selectUser") |
|||
public Result selectUser(@RequestBody GoldUser user) { |
|||
try { |
|||
user = userService.selectUser(user.getJwcode().toString()); |
|||
return Result.success(user); |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,33 @@ |
|||
package com.example.demo.domain.entity; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName Export |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-24 16:17 |
|||
* @Version 1.0 |
|||
**/ |
|||
@Data |
|||
@NoArgsConstructor |
|||
public class Export { |
|||
private String token; |
|||
private Integer account; // 账号 |
|||
private String url; // 文件路径 |
|||
private String fileName; // 文件名 |
|||
private Byte type; // 类型 |
|||
private Byte state; // 状态 |
|||
private Integer dataNum; // 数据量 |
|||
private String reason; // 失败原因 |
|||
@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; // 更新时间 |
|||
} |
@ -0,0 +1,18 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class AuditRequest { |
|||
private String token; |
|||
private String orderCode; //订单号 |
|||
private Integer auditId; //审核人id |
|||
private Integer action; //操作 |
|||
private String rejectReason; //驳回理由 |
|||
|
|||
|
|||
} |
@ -0,0 +1,50 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import jakarta.validation.constraints.PositiveOrZero; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName Consume |
|||
* @description: 消费明细 |
|||
* @author: Double |
|||
* @create: 2025−06-23 11:53 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class ConsumeUser implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
private String name; // 客户姓名 |
|||
private Integer jwcode; // 精网号 |
|||
private String market; // 所属地区 |
|||
private String goodsName; // 商品名称 |
|||
private String payPlatform; // 消费平台 |
|||
private Integer sumGold; // 金币总数 |
|||
private Integer permanentGold; // 永久金币 |
|||
private Integer freeGold; // 免费金币 |
|||
private Integer taskGold; // 任务金币 |
|||
private String remark; // 备注 |
|||
private Integer adminId; //提交人Id |
|||
private String adminName; //提交人姓名 |
|||
|
|||
@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 startTime; // 开始时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date endTime; // 结束时间 |
|||
|
|||
private String sortField; //排序字段 |
|||
private String sortOrder; //排序顺序 |
|||
} |
@ -0,0 +1,26 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName Gold |
|||
* @description: 金币信息 |
|||
* @author: Double |
|||
* @create: 2025−06-23 15:53 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class Gold implements Serializable { |
|||
private static final long serialVersionUID = 1L; |
|||
private Integer permanentGolds; // 永久金币总数 |
|||
private Integer freeGolds; // 免费金币总数 |
|||
private Integer taskGolds; // 任务金币总数 |
|||
} |
@ -0,0 +1,42 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName GoldDetail |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-23 13:03 |
|||
* @Version 1.0 |
|||
**/ |
|||
@Data |
|||
@NoArgsConstructor |
|||
public class GoldDetail { |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
private String token; |
|||
private String name; // 名称 |
|||
private Integer jwcode; // 精网号 |
|||
private String market; // 所属地区 |
|||
private String payPlatform; // 支付平台 |
|||
private Integer type; // 类型 |
|||
private Integer sumGold; // 总金币 |
|||
private Integer permentGold; //永久金币 |
|||
private Integer freeJune; // 免费金币六月到期 |
|||
private Integer freeDecember; // 免费金币七月到期 |
|||
private Integer taskGold; // 任务金币 |
|||
private String adminName; //提交人 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date startTime; // 开始时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date endTime; // 结束时间 |
|||
private String sortField; //排序字段 |
|||
private String sortOrder; //排序顺序 |
|||
|
|||
} |
@ -0,0 +1,41 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName ConsumeUser |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-24 18:30 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class GoldUser { |
|||
private String name; // 客户姓名 |
|||
private Integer jwcode; // 精网号 |
|||
private String market; // 所属地区 |
|||
private Integer NowSumGold; // 当前金币总数 |
|||
private Integer NowPermanentGold; // 当前永久金币 |
|||
private Integer NowFreeGold; // 当前免费金币 |
|||
private Integer NowFreeJune; // 免费金币6月 |
|||
private Integer NowFreeDecember; // 免费金币12月 |
|||
private Integer NowTaskGold; // 当前任务金币 |
|||
private Integer historySumGold; // 历史金币总数 |
|||
private Integer historyPermanentGold; // 历史永久金币 |
|||
private Integer historyFreeGold; // 历史免费金币 |
|||
private Integer historyTaskGold; // 历史任务金币 |
|||
private Integer rechargeNum; // 充值次数 |
|||
private Integer consumeNum; // 消费次数 |
|||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai") |
|||
private Date firstRecharge; // 首充日期 |
|||
|
|||
} |
@ -0,0 +1,30 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import com.example.demo.domain.entity.User; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName Page |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-23 16:23 |
|||
* @Version 1.0 |
|||
**/ |
|||
@Data |
|||
@NoArgsConstructor |
|||
public class Page { |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
private Integer pageNum; |
|||
private Integer pageSize; |
|||
private GoldDetail goldDetail; |
|||
private ConsumeUser consumeUser; |
|||
private User user; |
|||
private RefundUser refundUser; |
|||
private Permission permission; |
|||
private RechargeAudit rechargeAudit; |
|||
private RefundAudit refundAudit; |
|||
private RechargeUser rechargeUser; |
|||
} |
@ -0,0 +1,27 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName Permission |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-26 10:54 |
|||
* @Version 1.0 |
|||
**/ |
|||
@Data |
|||
@NoArgsConstructor |
|||
public class Permission { |
|||
private String token; |
|||
private String id; |
|||
private String name; //姓名 |
|||
private String account; //账号 |
|||
private String market; //地区 |
|||
private String postiton; //职位 |
|||
private String roleName; //角色 |
|||
private String remark; //备注 |
|||
private Integer adminStatus; //状态 |
|||
private Integer roleId; //角色id |
|||
} |
@ -0,0 +1,57 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RechargeAudit |
|||
* @description: 充值审核 |
|||
* @author: Ethan |
|||
* @create: 2025−06-30 10:29 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class RechargeAudit { |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
private String name; // 客户姓名 |
|||
private Integer jwcode; // 精网号 |
|||
private String orderCode; // 订单号 |
|||
private String activity; // 活动名称 |
|||
private String market; // 所属地区 |
|||
private Byte refundType; // 退款类型 |
|||
private Integer sumGold; //充值金额 |
|||
private Integer permanentGold; // 永久金币 |
|||
private Integer freeGold; // 免费金币 |
|||
private Integer freeJune; // 6月免费金币 |
|||
private Integer freeDecember; // 12月免费金币 |
|||
private String remark; // 备注 |
|||
private String payModel; //支付方式 |
|||
private String voucher; //支付凭证 |
|||
private Integer adminId; //提交人Id |
|||
private String adminName; //提交人姓名 |
|||
private String auditStatus; //审核状态 |
|||
private Integer auditId; //审核人Id |
|||
private String auditName; //审核人姓名 |
|||
private Byte type; //类型 |
|||
private String rejectReason; //驳回理由 |
|||
|
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private String payTime; //支付时间 |
|||
@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 startTime; // 开始时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date endTime; // 结束时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date auditTime; // 审核时间 |
|||
} |
@ -0,0 +1,51 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName Recharge |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-29 13:18 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class RechargeUser { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
private String name; // 客户姓名 |
|||
private Integer jwcode; // 精网号 |
|||
private String market; // 所属地区 |
|||
private String activity; // 活动名称 |
|||
private Integer rateId; // 汇率ID |
|||
private String rateName; // 汇率名称 |
|||
private Integer money; // 金额[分] |
|||
private Integer permanentGold; // 永久金币 |
|||
private Integer freeGold; // 免费金币 |
|||
private String payModel; // 支付方式 |
|||
private String payPlatform; // 支付平台 |
|||
private String voucher; // 支付凭证 |
|||
private String remark; // 备注 |
|||
private Integer adminId; //提交人Id |
|||
private String adminName; //提交人姓名 |
|||
|
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date payTime; // 创建时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date startTime; // 开始时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date endTime; // 结束时间 |
|||
|
|||
private String sortField; //排序字段 |
|||
private String sortOrder; //排序顺序 |
|||
} |
@ -0,0 +1,55 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RechargeAudit |
|||
* @description: 退款审核 |
|||
* @author: Ethan |
|||
* @create: 2025−06-30 13:29 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class RefundAudit { |
|||
private static final long serialVersionUID = 1L; |
|||
private String name; // 客户姓名 |
|||
private Integer jwcode; // 精网号 |
|||
private String orderCode; // 订单号 |
|||
private String market; // 所属地区 |
|||
private Byte refundModel; // 退款方式-全额 部分 |
|||
private String goodsName; // 商品名称 |
|||
private Integer sumGold; // 退款金额 |
|||
private Integer permanentGold; // 永久金币 |
|||
private Integer freeGold; // 免费金币 |
|||
private Integer freeJune; // 6月免费金币 |
|||
private Integer freeDecember; // 12月免费金币 |
|||
private String remark; // 备注 |
|||
private String payModel; //支付方式 |
|||
private String voucher; //支付凭证 |
|||
private Integer adminId; //提交人Id |
|||
private String adminName; //提交人姓名 |
|||
private String auditStatus; //审核状态 |
|||
private Integer auditId; //审核人Id |
|||
private String auditName; //审核人姓名 |
|||
private String rejectReason; //驳回理由 |
|||
private Byte type; //类型 |
|||
|
|||
|
|||
@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 startTime; // 开始时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date endTime; // 结束时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date auditTime; // 审核时间 |
|||
} |
@ -0,0 +1,50 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RefundUser |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-26 11:29 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class RefundUser { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
private String orderCode; // 订单号 |
|||
private String name; // 客户姓名 |
|||
private Integer jwcode; // 精网号 |
|||
private String market; // 所属地区 |
|||
private String goodsName; // 商品名称 |
|||
private String refundType; // 退款类型 |
|||
private Byte refundModel; // 退款方式(0全部/1部分退款) |
|||
private Integer sumGold; // 金币总数 |
|||
private Integer permanentGold; // 永久金币 |
|||
private Integer freeGold; // 免费金币 |
|||
private Integer taskGold; // 任务金币 |
|||
private String remark; // 退款原因 |
|||
private Integer adminId; //提交人Id |
|||
private String adminName; //提交人姓名 |
|||
|
|||
@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 startTime; // 开始时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date endTime; // 结束时间 |
|||
|
|||
private String sortField; //排序字段 |
|||
private String sortOrder; //排序顺序 |
|||
} |
@ -0,0 +1,17 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.util.Date; |
|||
@Data |
|||
@NoArgsConstructor |
|||
public class TestRequest { |
|||
private String market; |
|||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") |
|||
private Date date; |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,25 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName Total |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-23 16:53 |
|||
* @Version 1.0 |
|||
**/ |
|||
@Data |
|||
@NoArgsConstructor |
|||
public class Total { |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
private String token; |
|||
private Integer Goldtotal; |
|||
private Integer permanentGold; |
|||
private Integer freeGold; |
|||
private Integer taskGold; |
|||
|
|||
} |
@ -0,0 +1,65 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName WorkbenchMarketCard |
|||
* @description: |
|||
* @author: Ethan |
|||
* @create: 2025−06-25 16:20 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class WorkbenchMarketCard implements Serializable { |
|||
|
|||
private String market;//地区 |
|||
// 卡片一:当前金币相关 |
|||
private Integer currentGold; // 当前金币余量 |
|||
private Integer dailyChange; // 余量较前一天的变化 |
|||
private Integer currentPermanent; // 永久金币余量 |
|||
private Integer currentFreeJune; // 六月到期免费金币余量 |
|||
private Integer currentFreeDecember; // 十二月到期免费金币余量 |
|||
private Integer currentTask; // 任务金币余量 |
|||
private Integer currentFree; // 免费金币余量(currentFreeJune + currentFreeDecember) |
|||
|
|||
// 卡片二:充值相关 |
|||
private Integer recharge; // 当日充值金币数 |
|||
private Integer money; // 当日金额(永久金币) |
|||
private Integer yearlyRecharge; // 全年累计充值金币数 |
|||
private Integer yearlyMoney; // 全年累计金额 |
|||
|
|||
// 卡片三:当日消费/退款/消耗相关 |
|||
private Integer consumePermanent; // 当日新增消费(永久) |
|||
private Integer consumeFreeJune; // 当日新增消费(六月免费) |
|||
private Integer consumeFreeDecember; // 当日新增消费(十二月免费) |
|||
private Integer consumeTask; // 当日新增消费(任务) |
|||
private Integer refundPermanent; // 当日新增退款(永久) |
|||
private Integer refundFreeJune; // 当日新增退款(六月免费) |
|||
private Integer refundFreeDecember; // 当日新增退款(十二月免费) |
|||
private Integer refundTask; // 当日新增退款(任务) |
|||
private Integer dailyReduce; // 当日总消耗 = consumePermanent + consumeFreeJune + consumeFreeDecember + consumeTask - (refundPermanent + refundFreeJune + refundFreeDecember + refundTask) |
|||
private Integer yearlyConsume; // 全年累计消费 |
|||
private Integer yearlyRefund; // 全年累计退款金币数 |
|||
private Integer yearlyReduce; // 全年累计消耗金币数 = yearlyConsume - yearlyRefund |
|||
|
|||
// 卡片四:人头数相关 |
|||
private Integer rechargeNum; // 当日充值人数 |
|||
private Integer firstRecharge; // 当日首充人数 |
|||
private Integer wow; // 周同比(%) |
|||
private Integer daily; // 日环比(%) |
|||
private Integer yearlyRechargeNum; // 全年累计充值人头数 |
|||
//图表 |
|||
private Integer SumRechargePermanent; //合计充值永久金币 |
|||
private Integer SumRechargeFree; //合计充值免费金币 |
|||
private Integer SumConsumePermanent; //合计消费永久金币 |
|||
private Integer SumConsumeFree; //合计消费免费金币 |
|||
private Integer SumConsumeTask; //合计消费任务金币 |
|||
} |
@ -0,0 +1,17 @@ |
|||
package com.example.demo.mapper; |
|||
|
|||
import com.example.demo.domain.entity.Admin; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName AdminMapper |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-27 17:21 |
|||
* @Version 1.0 |
|||
**/ |
|||
@Mapper |
|||
public interface AdminMapper { |
|||
Admin getAdmin(String account); |
|||
} |
@ -0,0 +1,26 @@ |
|||
package com.example.demo.mapper; |
|||
|
|||
import com.example.demo.domain.entity.UserGoldRecord; |
|||
import com.example.demo.domain.vo.ConsumeUser; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName ConsumeMapper |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-23 13:45 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Mapper |
|||
public interface ConsumeMapper { |
|||
|
|||
List<ConsumeUser> selectAll(ConsumeUser consumeUser); |
|||
|
|||
List<ConsumeUser> selectBy(ConsumeUser consumeUser); |
|||
|
|||
void add(UserGoldRecord userGoldRecord); |
|||
} |
@ -0,0 +1,25 @@ |
|||
package com.example.demo.mapper; |
|||
|
|||
import com.example.demo.domain.entity.User; |
|||
import com.example.demo.domain.vo.GoldDetail; |
|||
import com.example.demo.domain.vo.Total; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName GoldDetailMapper |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-23 13:47 |
|||
* @Version 1.0 |
|||
**/ |
|||
@Mapper |
|||
public interface GoldDetailMapper { |
|||
List<GoldDetail> getGoldDetail(GoldDetail goldDetail); |
|||
Total getTotal(GoldDetail goldDetail); |
|||
|
|||
List<User> getGold(User user); |
|||
Total GoldTotal(User user); |
|||
} |
@ -0,0 +1,31 @@ |
|||
package com.example.demo.mapper; |
|||
|
|||
import com.example.demo.domain.entity.Admin; |
|||
import com.example.demo.domain.entity.AdminRole; |
|||
import com.example.demo.domain.entity.Role; |
|||
import com.example.demo.domain.vo.Permission; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName PermissionMapper |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-26 11:25 |
|||
* @Version 1.0 |
|||
**/ |
|||
@Mapper |
|||
public interface PermissionMapper { |
|||
List<String> getposition(String token); |
|||
List<String> getmarket(String token); |
|||
List<Permission> getPermission(Permission permission); |
|||
Integer updatePermission(Admin admin); |
|||
Integer addPermission(Admin admin); |
|||
List<Role> getRole(String token); |
|||
Integer addadminRole(AdminRole adminRole); |
|||
Integer deleteAdmin(Integer id); |
|||
Integer deleteAdminRole(Integer id); |
|||
Integer updateAdminRole(AdminRole adminRole); |
|||
} |
@ -0,0 +1,27 @@ |
|||
package com.example.demo.mapper; |
|||
|
|||
|
|||
import com.example.demo.domain.entity.UserGoldRecord; |
|||
import com.example.demo.domain.vo.RechargeUser; |
|||
import com.example.demo.domain.vo.RefundUser; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RechargeMapper |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-29 13:41 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Mapper |
|||
public interface RechargeMapper { |
|||
List<RechargeUser> selectAll(RechargeUser rechargeUser); |
|||
|
|||
List<RechargeUser> selectBy(RechargeUser rechargeUser); |
|||
|
|||
void add(UserGoldRecord userGoldRecord); |
|||
} |
@ -0,0 +1,32 @@ |
|||
package com.example.demo.mapper; |
|||
|
|||
import com.example.demo.domain.entity.UserGoldRecord; |
|||
import com.example.demo.domain.vo.ConsumeUser; |
|||
import com.example.demo.domain.vo.RefundUser; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RefundMapper |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-27 11:31 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Mapper |
|||
public interface RefundMapper { |
|||
|
|||
List<RefundUser> selectAll(RefundUser refundUser); |
|||
|
|||
List<RefundUser> selectBy(RefundUser refundUser); |
|||
|
|||
void add(UserGoldRecord userGoldRecord); |
|||
|
|||
List<String> getRefundType(); |
|||
|
|||
List<RefundUser> selectGoods(Integer jwcode); |
|||
|
|||
} |
@ -0,0 +1,62 @@ |
|||
package com.example.demo.mapper; |
|||
|
|||
import com.example.demo.domain.entity.Statistics; |
|||
import com.example.demo.domain.entity.UserGoldRecord; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
import org.apache.ibatis.annotations.Param; |
|||
|
|||
import java.time.LocalDate; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName StatisticsMapper |
|||
* @description: |
|||
* @author: Ethan |
|||
* @create: 2025−06-23 14:08 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Mapper |
|||
public interface StatisticsMapper { |
|||
//根据地区、审核状态、起止时间查询订单表数据 |
|||
List<UserGoldRecord> findByMarketAndAuditStatus(@Param("market") String market, |
|||
@Param("auditStatusList") List<Integer> auditStatusList, |
|||
@Param("startTime") Date startTime, |
|||
@Param("endTime") Date endTime); |
|||
//获取某地区当前永久金币余量 |
|||
Integer sumCurrentPermanentGold(@Param("market") String market); |
|||
//获取某地区当前六月免费金币余量 |
|||
Integer sumCurrentFreeJune(@Param("market") String market); |
|||
//获取某地区当前永久金币余量 |
|||
Integer sumCurrentFreeDecember(@Param("market") String market); |
|||
//获取某地区当前永久金币余量 |
|||
Integer sumCurrentTaskGold(@Param("market") String market); |
|||
//计算该天充值人数 |
|||
Integer countRechargeNum( |
|||
@Param("market") String market, |
|||
@Param("startTime") Date startTime, |
|||
@Param("endTime") Date endTime); |
|||
//计算该天首充人数 |
|||
Integer countFirstRecharge( |
|||
@Param("market") String market, |
|||
@Param("startTime") Date startTime, |
|||
@Param("endTime") Date endTime); |
|||
//新增part1统计数据 |
|||
void insertPart1(Statistics statistics); |
|||
//更新part1统计数据 |
|||
void updatePart1(Statistics statistics); |
|||
//新增part2统计数据 |
|||
void insertPart2(Statistics statistics); |
|||
//更新part2统计数据 |
|||
void updatePart2(Statistics statistics); |
|||
//获取某地区某时间所在日期的数据(仅一条) |
|||
Statistics selectByMarketAndDate(@Param("market") String market, |
|||
@Param("startDate") Date startDate, |
|||
@Param("endDate") Date endDate); |
|||
//获取某地区某时间段的统计数据(仅一条) |
|||
Statistics selectSumByMarketAndDate(@Param("market") String market, |
|||
@Param("startDate") Date startDate, |
|||
@Param("endDate") Date endDate); |
|||
} |
@ -0,0 +1,25 @@ |
|||
package com.example.demo.mapper; |
|||
|
|||
import com.example.demo.domain.entity.User; |
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.GoldUser; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName UserMapper |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-25 10:40 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Mapper |
|||
public interface UserMapper { |
|||
|
|||
GoldUser selectUser(String jwcode); |
|||
|
|||
GoldUser selectGold(String jwcode); |
|||
|
|||
void updateGold(User user); |
|||
} |
@ -0,0 +1,28 @@ |
|||
package com.example.demo.service; |
|||
|
|||
|
|||
import com.example.demo.domain.entity.UserGoldRecord; |
|||
import com.example.demo.domain.vo.ConsumeUser; |
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.github.pagehelper.PageInfo; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName ConsumeService |
|||
* @description: 消费模块 |
|||
* @author: Double |
|||
* @create: 2025−06-23 13:58 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
public interface ConsumeService { |
|||
|
|||
PageInfo<ConsumeUser> selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser); |
|||
|
|||
Gold statsGold(ConsumeUser consumeUser); |
|||
|
|||
PageInfo<ConsumeUser> selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser); |
|||
|
|||
Result add(ConsumeUser consumeUser); |
|||
} |
@ -0,0 +1,22 @@ |
|||
package com.example.demo.service; |
|||
|
|||
import com.example.demo.domain.entity.User; |
|||
import com.example.demo.domain.vo.GoldDetail; |
|||
import com.example.demo.domain.vo.Total; |
|||
import com.github.pagehelper.PageInfo; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName GoldDetailService |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-23 11:59 |
|||
* @Version 1.0 |
|||
**/ |
|||
public interface GoldDetailService { |
|||
PageInfo<GoldDetail> getGoldDetail(Integer pageNum, Integer pageSize, GoldDetail goldDetail); |
|||
Total getTotal(GoldDetail goldDetail); |
|||
|
|||
PageInfo<User> getGold(Integer pageNum, Integer pageSize, User user); |
|||
Total GoldTotal(User user); |
|||
} |
@ -0,0 +1,29 @@ |
|||
package com.example.demo.service; |
|||
|
|||
import com.example.demo.domain.entity.Admin; |
|||
import com.example.demo.domain.entity.AdminRole; |
|||
import com.example.demo.domain.entity.Role; |
|||
import com.example.demo.domain.vo.Page; |
|||
import com.example.demo.domain.vo.Permission; |
|||
import com.github.pagehelper.PageInfo; |
|||
|
|||
import javax.swing.*; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName PermissionService |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-26 13:18 |
|||
* @Version 1.0 |
|||
**/ |
|||
public interface PermissionService { |
|||
List<String> getposition(String token); |
|||
List<String> getmarket(String token); |
|||
PageInfo<Permission> getpermission(Integer pageNum, Integer pageSize, Permission permission); |
|||
Integer addpermission(Admin admin) throws Exception; |
|||
List<Role> getRole(String token); |
|||
Integer deleteAdmin(Integer id); |
|||
Integer updateAdminRole(AdminRole adminRole); |
|||
} |
@ -0,0 +1,26 @@ |
|||
package com.example.demo.service; |
|||
|
|||
import com.example.demo.domain.vo.ConsumeUser; |
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.RechargeUser; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.github.pagehelper.PageInfo; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RechargeService |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-29 13:39 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
public interface RechargeService { |
|||
PageInfo<RechargeUser> selectAll(Integer pageNum, Integer pageSize, RechargeUser rechargeUser); |
|||
|
|||
Gold statsGold(RechargeUser rechargeUser); |
|||
|
|||
PageInfo<RechargeUser> selectBy(Integer pageNum, Integer pageSize, RechargeUser rechargeUser); |
|||
|
|||
Result add(RechargeUser rechargeUser); |
|||
} |
@ -0,0 +1,35 @@ |
|||
package com.example.demo.service; |
|||
|
|||
|
|||
import com.example.demo.domain.vo.ConsumeUser; |
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.RefundUser; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.github.pagehelper.PageInfo; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RefundService |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-27 11:50 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
public interface RefundService { |
|||
|
|||
PageInfo<RefundUser> selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser); |
|||
|
|||
Gold statsGold(RefundUser refundUser); |
|||
|
|||
PageInfo<RefundUser> selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser); |
|||
|
|||
Result add(RefundUser refundUser); |
|||
|
|||
//获取退款类型 |
|||
List<String> getRefundType(); |
|||
|
|||
List<RefundUser> selectGoods(Integer jwcode); |
|||
} |
@ -0,0 +1,19 @@ |
|||
package com.example.demo.service; |
|||
|
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.GoldUser; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName UserService |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-25 10:30 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
public interface UserService { |
|||
|
|||
GoldUser selectUser(String jwcode); |
|||
GoldUser selectgold(String jwcode); |
|||
} |
@ -0,0 +1,169 @@ |
|||
package com.example.demo.serviceImpl; |
|||
|
|||
import com.example.demo.Util.GoldTistV2; |
|||
import com.example.demo.domain.entity.User; |
|||
import com.example.demo.domain.entity.UserGoldRecord; |
|||
import com.example.demo.domain.vo.ConsumeUser; |
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.GoldUser; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.example.demo.mapper.ConsumeMapper; |
|||
import com.example.demo.mapper.UserMapper; |
|||
import com.example.demo.service.ConsumeService; |
|||
import com.github.pagehelper.PageHelper; |
|||
import com.github.pagehelper.PageInfo; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.math.BigDecimal; |
|||
import java.time.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.Random; |
|||
import java.util.concurrent.atomic.AtomicInteger; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName ConsumeServiceImpl |
|||
* @description: 消费模块 |
|||
* @author: Double |
|||
* @create: 2025−06-23 13:58 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Service |
|||
public class ConsumeServiceImpl implements ConsumeService { |
|||
|
|||
@Autowired |
|||
private ConsumeMapper consumeMapper; |
|||
|
|||
@Autowired |
|||
private UserMapper userMapper; |
|||
|
|||
//消耗明细 |
|||
@Override |
|||
public PageInfo<ConsumeUser> selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
List<ConsumeUser> consumeUsers = consumeMapper.selectAll(consumeUser); |
|||
return new PageInfo<>(consumeUsers); |
|||
} |
|||
|
|||
//消耗金币统计 |
|||
@Override |
|||
public Gold statsGold(ConsumeUser consumeUser) { |
|||
Gold gold = new Gold(); |
|||
List<ConsumeUser> consumeUsers = consumeMapper.selectBy(consumeUser); |
|||
|
|||
// 初始化累加器 |
|||
int permanentGoldSum = 0; |
|||
int freeGoldSum = 0; |
|||
int taskGoldSum = 0; |
|||
|
|||
// 遍历消费记录并累加金币 |
|||
for (ConsumeUser user : consumeUsers) { |
|||
// 累加永久金币 |
|||
if (user.getPermanentGold() != null) { |
|||
permanentGoldSum += user.getPermanentGold(); |
|||
} |
|||
// 累加免费金币 |
|||
if (user.getFreeGold() != null) { |
|||
freeGoldSum += user.getFreeGold(); |
|||
} |
|||
// 累加任务金币 |
|||
if (user.getTaskGold() != null) { |
|||
taskGoldSum += user.getTaskGold(); |
|||
} |
|||
} |
|||
|
|||
// 将累加结果设置到Gold对象 |
|||
gold.setPermanentGolds(permanentGoldSum); |
|||
gold.setFreeGolds(freeGoldSum); |
|||
gold.setTaskGolds(taskGoldSum); |
|||
|
|||
return gold; |
|||
} |
|||
|
|||
//消耗明细筛选 |
|||
@Override |
|||
public PageInfo<ConsumeUser> selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
List<ConsumeUser> consumeUsers = consumeMapper.selectBy(consumeUser); |
|||
return new PageInfo<>(consumeUsers); |
|||
} |
|||
|
|||
//新增消耗 |
|||
@Override |
|||
public Result add(ConsumeUser consumeUser) { |
|||
UserGoldRecord userGoldRecord = new UserGoldRecord(); |
|||
|
|||
// 获取当前时间戳部分 |
|||
String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); |
|||
|
|||
// 获取自增计数器部分(三位数,不足补零) |
|||
AtomicInteger atomicInteger = new AtomicInteger(0); |
|||
|
|||
int count = atomicInteger.getAndUpdate(c -> (c >= 999) ? 0 : c + 1); |
|||
String counterPart = String.format("%03d", count); |
|||
|
|||
|
|||
//订单号生成 |
|||
userGoldRecord.setOrderCode("XF" + timestampPart + counterPart); |
|||
userGoldRecord.setJwcode(consumeUser.getJwcode()); |
|||
userGoldRecord.setGoodsName(consumeUser.getGoodsName()); |
|||
userGoldRecord.setSumGold(consumeUser.getSumGold()); |
|||
userGoldRecord.setPermanentGold(consumeUser.getPermanentGold()); |
|||
// 获取当前月份(1-12) |
|||
int currentMonth = LocalDate.now().getMonthValue(); |
|||
GoldUser gold = userMapper.selectGold(consumeUser.getJwcode().toString()); |
|||
if (consumeUser.getFreeGold() > (gold.getNowFreeDecember() + gold.getNowFreeJune()) || consumeUser.getPermanentGold() > gold.getNowPermanentGold() |
|||
|| consumeUser.getTaskGold() > gold.getNowTaskGold()) { |
|||
return Result.error("金币数量不足"); |
|||
} |
|||
// 根据当前月份设置对应字段 |
|||
if (currentMonth >= 1 && currentMonth <= 6) { |
|||
// 1-6月:设置6月额度,12月保持默认值 |
|||
if (consumeUser.getFreeGold() > gold.getNowFreeJune()) { |
|||
userGoldRecord.setFreeJune(gold.getNowFreeJune()); |
|||
userGoldRecord.setFreeDecember(consumeUser.getFreeGold() - gold.getNowFreeJune()); |
|||
} else { |
|||
userGoldRecord.setFreeJune(consumeUser.getFreeGold()); |
|||
userGoldRecord.setFreeDecember(0); |
|||
} |
|||
} else { |
|||
// 7-12月:设置12月额度,6月保持默认值 |
|||
if (consumeUser.getFreeGold() > gold.getNowFreeDecember()) { |
|||
userGoldRecord.setFreeDecember(gold.getNowFreeDecember()); |
|||
userGoldRecord.setFreeJune(consumeUser.getFreeGold() - gold.getNowFreeDecember()); |
|||
} else { |
|||
userGoldRecord.setFreeDecember(consumeUser.getFreeGold()); |
|||
userGoldRecord.setFreeJune(0); |
|||
} |
|||
} |
|||
userGoldRecord.setTaskGold(consumeUser.getTaskGold()); |
|||
userGoldRecord.setRemark(consumeUser.getRemark()); |
|||
userGoldRecord.setType((byte) 1); |
|||
userGoldRecord.setIsRefund((byte) 0); |
|||
userGoldRecord.setPayPlatform("金币系统"); |
|||
userGoldRecord.setAdminId(consumeUser.getAdminId()); |
|||
userGoldRecord.setAuditStatus(1); |
|||
userGoldRecord.setCreateTime(new Date()); |
|||
userGoldRecord.setPayTime(new Date()); |
|||
consumeMapper.add(userGoldRecord); |
|||
User user = new User(); |
|||
user.setJwcode(userGoldRecord.getJwcode()); |
|||
user.setCurrentPermanentGold(gold.getNowPermanentGold() - consumeUser.getPermanentGold()); |
|||
user.setCurrentFreeJune(gold.getNowFreeJune() - userGoldRecord.getFreeJune()); |
|||
user.setCurrentFreeDecember(gold.getNowFreeDecember() - userGoldRecord.getFreeDecember()); |
|||
user.setCurrentTaskGold(gold.getNowTaskGold() - consumeUser.getTaskGold()); |
|||
user.setConsumeNum(gold.getConsumeNum() + 1); |
|||
user.setSumConsume(consumeUser.getPermanentGold() + consumeUser.getFreeGold() + consumeUser.getTaskGold()); |
|||
userMapper.updateGold(user); |
|||
//对接接口 |
|||
// GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65, |
|||
// (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) /100, |
|||
// userGoldRecord.getRemark(),((double) userGoldRecord.getPermanentGold() /100), userGoldRecord.getPayPlatform(), userGoldRecord.getGoodsName()); |
|||
return Result.success(); |
|||
} |
|||
} |
@ -0,0 +1,53 @@ |
|||
package com.example.demo.serviceImpl; |
|||
|
|||
import com.example.demo.domain.entity.User; |
|||
import com.example.demo.domain.vo.GoldDetail; |
|||
import com.example.demo.domain.vo.Total; |
|||
import com.example.demo.mapper.GoldDetailMapper; |
|||
import com.example.demo.service.GoldDetailService; |
|||
import com.github.pagehelper.PageHelper; |
|||
import com.github.pagehelper.PageInfo; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName GoldDetailServiceImpl |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-23 13:44 |
|||
* @Version 1.0 |
|||
**/ |
|||
@Service |
|||
public class GoldDetailServiceImpl implements GoldDetailService { |
|||
|
|||
@Autowired |
|||
private GoldDetailMapper goldDetailMapper; |
|||
@Override |
|||
public PageInfo<GoldDetail> getGoldDetail(Integer pageNum, Integer pageSize, GoldDetail goldDetail) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
List<GoldDetail> list= goldDetailMapper.getGoldDetail(goldDetail); |
|||
return new PageInfo<>(list); |
|||
} |
|||
|
|||
@Override |
|||
public Total getTotal(GoldDetail goldDetail) { |
|||
|
|||
return goldDetailMapper.getTotal(goldDetail); |
|||
} |
|||
|
|||
@Override |
|||
public PageInfo<User> getGold(Integer pageNum, Integer pageSize, User user) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
|
|||
List<User> list= goldDetailMapper.getGold(user); |
|||
return new PageInfo<>(list); |
|||
} |
|||
|
|||
@Override |
|||
public Total GoldTotal(User user) { |
|||
return goldDetailMapper.GoldTotal(user); |
|||
} |
|||
} |
@ -0,0 +1,115 @@ |
|||
package com.example.demo.serviceImpl; |
|||
|
|||
import com.example.demo.domain.entity.Admin; |
|||
import com.example.demo.domain.entity.AdminRole; |
|||
import com.example.demo.domain.entity.Role; |
|||
import com.example.demo.domain.entity.User; |
|||
import com.example.demo.domain.vo.Permission; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.example.demo.mapper.AdminMapper; |
|||
import com.example.demo.mapper.PermissionMapper; |
|||
import com.example.demo.service.PermissionService; |
|||
import com.github.pagehelper.PageHelper; |
|||
import com.github.pagehelper.PageInfo; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
import org.springframework.util.ObjectUtils; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: GOLD |
|||
* @ClassName PermissionServiceImpl |
|||
* @description: |
|||
* @author: huangqizhen |
|||
* @create: 2025−06-26 13:20 |
|||
* @Version 1.0 |
|||
**/ |
|||
@Service |
|||
public class PermissionServiceImpl implements PermissionService { |
|||
|
|||
@Autowired |
|||
private PermissionMapper permissionMapper; |
|||
@Autowired |
|||
private AdminMapper adminMapper; |
|||
@Override |
|||
public List<String> getposition(String token) { |
|||
return permissionMapper.getposition(token); |
|||
} |
|||
|
|||
@Override |
|||
public List<String> getmarket(String token) { |
|||
return permissionMapper.getmarket(token); |
|||
} |
|||
|
|||
@Override |
|||
public PageInfo<Permission> getpermission(Integer pageNum, Integer pageSize, Permission permission) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
List<Permission> list= permissionMapper.getPermission(permission); |
|||
return new PageInfo<>(list); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional |
|||
public Integer addpermission(Admin admin) throws Exception { |
|||
|
|||
if(!ObjectUtils.isEmpty(adminMapper.getAdmin(admin.getAccount()))){ |
|||
throw new Exception("账号已存在"); |
|||
} |
|||
if(ObjectUtils.isEmpty(admin.getAccount())){ |
|||
throw new Exception("账号为空!"); |
|||
} |
|||
if(ObjectUtils.isEmpty( admin.getMarket())){ |
|||
throw new Exception("地区为空!"); |
|||
} |
|||
if(ObjectUtils.isEmpty( admin.getPostiton())){ |
|||
throw new Exception("职位为空!"); |
|||
} |
|||
if (ObjectUtils.isEmpty( admin.getRoleId())){ |
|||
throw new Exception("权限类别为空!"); |
|||
} |
|||
if(ObjectUtils.isEmpty( admin.getAdminName())){ |
|||
throw new Exception("用户名为空!"); |
|||
} |
|||
if(ObjectUtils.isEmpty( admin.getMachineId())){ |
|||
throw new Exception("机器编号为空!"); |
|||
} |
|||
if (admin.getMachineId().contains(",")) { |
|||
throw new Exception("机器编号格式错误"); |
|||
} |
|||
else { |
|||
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); |
|||
admin.setPassword(passwordEncoder.encode(("123456"))); |
|||
permissionMapper.addPermission(admin); |
|||
AdminRole adminRole = new AdminRole(); |
|||
adminRole.setAdminId(admin.getId()); |
|||
adminRole.setRoleId(admin.getRoleId()); |
|||
return permissionMapper.addadminRole(adminRole); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public List<Role> getRole(String token) { |
|||
return permissionMapper.getRole(token); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional |
|||
public Integer deleteAdmin(Integer id) { |
|||
if (id == null){ |
|||
return -1; |
|||
} |
|||
|
|||
permissionMapper.deleteAdminRole(id); |
|||
return permissionMapper.deleteAdmin(id); |
|||
} |
|||
|
|||
@Override |
|||
public Integer updateAdminRole(AdminRole adminRole) { |
|||
return permissionMapper.updateAdminRole(adminRole); |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,131 @@ |
|||
package com.example.demo.serviceImpl; |
|||
|
|||
import com.example.demo.domain.entity.User; |
|||
import com.example.demo.domain.entity.UserGoldRecord; |
|||
import com.example.demo.domain.vo.*; |
|||
import com.example.demo.mapper.ConsumeMapper; |
|||
import com.example.demo.mapper.RechargeMapper; |
|||
import com.example.demo.mapper.UserMapper; |
|||
import com.example.demo.service.RechargeService; |
|||
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.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.concurrent.atomic.AtomicInteger; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RechrageServceImpl |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-29 13:40 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Service |
|||
public class RechargeServiceImpl implements RechargeService { |
|||
|
|||
@Autowired |
|||
private RechargeMapper rechargeMapper; |
|||
|
|||
@Autowired |
|||
private UserMapper userMapper; |
|||
|
|||
|
|||
@Override |
|||
public PageInfo<RechargeUser> selectAll(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
List<RechargeUser> rechargeUsers = rechargeMapper.selectAll(rechargeUser); |
|||
return new PageInfo<>(rechargeUsers); |
|||
} |
|||
|
|||
@Override |
|||
public PageInfo<RechargeUser> selectBy(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
List<RechargeUser> rechargeUsers = rechargeMapper.selectBy(rechargeUser); |
|||
return new PageInfo<>(rechargeUsers); |
|||
} |
|||
|
|||
@Override |
|||
public Gold statsGold(RechargeUser rechargeUser) { |
|||
Gold gold = new Gold(); |
|||
List<RechargeUser> rechargeUsers = rechargeMapper.selectBy(rechargeUser); |
|||
|
|||
// 初始化累加器 |
|||
int permanentGoldSum = 0; |
|||
int freeGoldSum = 0; |
|||
|
|||
// 遍历充值记录并累加金币 |
|||
for (RechargeUser user : rechargeUsers) { |
|||
// 累加永久金币 |
|||
if (user.getPermanentGold() != null) { |
|||
permanentGoldSum += user.getPermanentGold(); |
|||
} |
|||
// 累加免费金币 |
|||
if (user.getFreeGold() != null) { |
|||
freeGoldSum += user.getFreeGold(); |
|||
} |
|||
} |
|||
|
|||
// 将累加结果设置到Gold对象 |
|||
gold.setPermanentGolds(permanentGoldSum); |
|||
gold.setFreeGolds(freeGoldSum); |
|||
|
|||
return gold; |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public Result add(RechargeUser rechargeUser) { |
|||
UserGoldRecord userGoldRecord = new UserGoldRecord(); |
|||
|
|||
// 获取当前时间戳部分 |
|||
String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); |
|||
|
|||
// 获取自增计数器部分(三位数,不足补零) |
|||
AtomicInteger atomicInteger = new AtomicInteger(0); |
|||
|
|||
int count = atomicInteger.getAndUpdate(c -> (c >= 999) ? 0 : c + 1); |
|||
String counterPart = String.format("%03d", count); |
|||
|
|||
|
|||
//订单号生成 |
|||
userGoldRecord.setOrderCode("CZ" + timestampPart + counterPart); |
|||
userGoldRecord.setJwcode(rechargeUser.getJwcode()); |
|||
userGoldRecord.setActivity(rechargeUser.getActivity()); |
|||
userGoldRecord.setPermanentGold(rechargeUser.getPermanentGold()); |
|||
// 获取当前月份(1-12) |
|||
int currentMonth = LocalDate.now().getMonthValue(); |
|||
// 根据当前月份设置对应字段 |
|||
if (currentMonth >= 1 && currentMonth <= 6) { |
|||
// 1-6月:设置6月额度,12月保持默认值 |
|||
userGoldRecord.setFreeJune(0); |
|||
userGoldRecord.setFreeDecember(rechargeUser.getFreeGold()); |
|||
} else { |
|||
// 7-12月:设置12月额度,6月保持默认值 |
|||
userGoldRecord.setFreeJune(rechargeUser.getFreeGold()); |
|||
userGoldRecord.setFreeDecember(0); |
|||
} |
|||
userGoldRecord.setSumGold(rechargeUser.getFreeGold()+rechargeUser.getPermanentGold()); |
|||
userGoldRecord.setRateId(rechargeUser.getRateId()); |
|||
userGoldRecord.setMoney(rechargeUser.getMoney()); |
|||
userGoldRecord.setVoucher(rechargeUser.getVoucher()); |
|||
userGoldRecord.setPayPlatform("金币系统"); |
|||
userGoldRecord.setPayModel(rechargeUser.getPayModel()); |
|||
userGoldRecord.setPayTime(rechargeUser.getPayTime()); |
|||
userGoldRecord.setRemark(rechargeUser.getRemark()); |
|||
userGoldRecord.setAdminId(rechargeUser.getAdminId()); |
|||
userGoldRecord.setType((byte) 0); |
|||
userGoldRecord.setAuditStatus(0); |
|||
userGoldRecord.setCreateTime(new Date()); |
|||
|
|||
rechargeMapper.add(userGoldRecord); |
|||
return Result.success(); |
|||
} |
|||
} |
@ -0,0 +1,167 @@ |
|||
package com.example.demo.serviceImpl; |
|||
|
|||
import com.example.demo.domain.entity.UserGoldRecord; |
|||
import com.example.demo.domain.vo.ConsumeUser; |
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.RefundUser; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.example.demo.mapper.ConsumeMapper; |
|||
import com.example.demo.mapper.RefundMapper; |
|||
import com.example.demo.mapper.UserMapper; |
|||
import com.example.demo.service.RefundService; |
|||
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.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.ArrayList; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.concurrent.atomic.AtomicInteger; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RefundServiceImpl |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-27 11:50 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Service |
|||
public class RefundServiceImpl implements RefundService { |
|||
|
|||
@Autowired |
|||
private RefundMapper refundMapper; |
|||
|
|||
@Autowired |
|||
private UserMapper userMapper; |
|||
|
|||
@Override |
|||
public PageInfo<RefundUser> selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
List<RefundUser> refundUsers = refundMapper.selectAll(refundUser); |
|||
return new PageInfo<>(refundUsers); |
|||
} |
|||
|
|||
@Override |
|||
public Gold statsGold(RefundUser refundUser) { |
|||
Gold gold = new Gold(); |
|||
List<RefundUser> refundUsers = refundMapper.selectBy(refundUser); |
|||
|
|||
// 初始化累加器 |
|||
int permanentGoldSum = 0; |
|||
int freeGoldSum = 0; |
|||
int taskGoldSum = 0; |
|||
|
|||
// 遍历推开记录并累加金币 |
|||
for (RefundUser user : refundUsers) { |
|||
// 累加永久金币 |
|||
if (user.getPermanentGold() != null) { |
|||
permanentGoldSum += user.getPermanentGold(); |
|||
} |
|||
// 累加免费金币 |
|||
if (user.getFreeGold() != null) { |
|||
freeGoldSum += user.getFreeGold(); |
|||
} |
|||
// 累加任务金币 |
|||
if (user.getTaskGold() != null) { |
|||
taskGoldSum += user.getTaskGold(); |
|||
} |
|||
} |
|||
|
|||
// 将累加结果设置到Gold对象 |
|||
gold.setPermanentGolds(permanentGoldSum); |
|||
gold.setFreeGolds(freeGoldSum); |
|||
gold.setTaskGolds(taskGoldSum); |
|||
|
|||
return gold; |
|||
} |
|||
|
|||
@Override |
|||
public PageInfo<RefundUser> selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
List<RefundUser> refundUsers = refundMapper.selectBy(refundUser); |
|||
return new PageInfo<>(refundUsers); |
|||
} |
|||
|
|||
@Override |
|||
public Result add(RefundUser refundUser) { |
|||
UserGoldRecord userGoldRecord = new UserGoldRecord(); |
|||
String goodsNameWithOrder = refundUser.getGoodsName(); |
|||
//订单号生成 |
|||
if (goodsNameWithOrder != null && goodsNameWithOrder.contains("_")) { |
|||
String[] parts = goodsNameWithOrder.split("_", 2); |
|||
if (parts.length >= 2) { |
|||
// 提取订单号(保留原始前缀) |
|||
String orderCode = parts[0]; // XF202506281545524400006580 |
|||
|
|||
// 提取商品名(处理可能包含下划线的情况) |
|||
String goodsName = parts[1]; // 商品A |
|||
|
|||
// 设置属性(添加退款前缀) |
|||
userGoldRecord.setOrderCode("TK" + orderCode); // TKXF202506281545524400006580 |
|||
userGoldRecord.setGoodsName(goodsName); // 商品A |
|||
} |
|||
} |
|||
userGoldRecord.setJwcode(refundUser.getJwcode()); |
|||
userGoldRecord.setRefundType(refundUser.getRefundType()); |
|||
userGoldRecord.setRefundModel(refundUser.getRefundModel()); |
|||
userGoldRecord.setPermanentGold(refundUser.getPermanentGold()); |
|||
// 获取当前月份(1-12) |
|||
int currentMonth = LocalDate.now().getMonthValue(); |
|||
// 根据当前月份设置对应字段 |
|||
if (currentMonth >= 1 && currentMonth <= 6) { |
|||
// 1-6月:设置6月额度,12月保持默认值 |
|||
userGoldRecord.setFreeJune(0); |
|||
userGoldRecord.setFreeDecember(refundUser.getFreeGold()); |
|||
} else { |
|||
// 7-12月:设置12月额度,6月保持默认值 |
|||
userGoldRecord.setFreeJune(refundUser.getFreeGold()); |
|||
userGoldRecord.setFreeDecember(0); |
|||
} |
|||
userGoldRecord.setTaskGold(refundUser.getTaskGold()); |
|||
userGoldRecord.setSumGold(refundUser.getSumGold()); |
|||
userGoldRecord.setPayPlatform("金币系统"); |
|||
userGoldRecord.setRemark(refundUser.getRemark()); |
|||
userGoldRecord.setAdminId(refundUser.getAdminId()); |
|||
userGoldRecord.setType((byte) 2); |
|||
userGoldRecord.setAuditStatus(0); |
|||
userGoldRecord.setCreateTime(new Date()); |
|||
refundMapper.add(userGoldRecord); |
|||
return Result.success(); |
|||
} |
|||
|
|||
@Override |
|||
public List<String> getRefundType() { |
|||
List<String> list = refundMapper.getRefundType(); |
|||
return list; |
|||
} |
|||
|
|||
@Override |
|||
public List<RefundUser> selectGoods(Integer jwcode) { |
|||
List<RefundUser> refundUsers = refundMapper.selectGoods(jwcode); |
|||
List<RefundUser> list = new ArrayList<>(); |
|||
for (RefundUser record : refundUsers) { |
|||
if (record == null) { |
|||
continue; |
|||
} |
|||
|
|||
String orderCode = record.getOrderCode() != null ? record.getOrderCode() : "无订单号"; |
|||
String goodsName = record.getGoodsName() != null ? record.getGoodsName() : "无商品名"; |
|||
|
|||
// 拼接格式:订单号_商品名(例如:XF20250629_商品BC) |
|||
String combined = orderCode + "_" + goodsName; |
|||
RefundUser refundUser = new RefundUser(); |
|||
refundUser.setGoodsName(combined); |
|||
refundUser.setPermanentGold(record.getPermanentGold()); |
|||
refundUser.setFreeGold(record.getFreeGold()); |
|||
refundUser.setTaskGold(record.getTaskGold()); |
|||
list.add(refundUser); |
|||
} |
|||
return list; |
|||
} |
|||
} |
@ -0,0 +1,38 @@ |
|||
package com.example.demo.serviceImpl; |
|||
|
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.GoldUser; |
|||
import com.example.demo.mapper.ConsumeMapper; |
|||
import com.example.demo.mapper.UserMapper; |
|||
import com.example.demo.service.UserService; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName UserServiceImpl |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-25 10:32 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
|
|||
@Service |
|||
public class UserServiceImpl implements UserService { |
|||
|
|||
@Autowired |
|||
private UserMapper userMapper; |
|||
|
|||
@Override |
|||
public GoldUser selectUser(String jwcode) { |
|||
GoldUser user = userMapper.selectUser(jwcode); |
|||
return user; |
|||
} |
|||
|
|||
@Override |
|||
public GoldUser selectgold(String jwcode) { |
|||
GoldUser gold = userMapper.selectGold(jwcode); |
|||
return gold; |
|||
} |
|||
} |
@ -0,0 +1,9 @@ |
|||
<?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.AdminMapper"> |
|||
|
|||
<select id="getAdmin" resultType="com.example.demo.domain.entity.Admin"> |
|||
select * from admin |
|||
where account=#{account} |
|||
</select> |
|||
</mapper> |
@ -1,5 +1,108 @@ |
|||
<?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.AuditMapper"> |
|||
<!-- 修改订单审核人与审核状态--> |
|||
<update id="updateOrder"> |
|||
update user_gold_record |
|||
set audit_id = #{auditId}, |
|||
audit_status = #{auditStatus}, |
|||
reject_reason = #{rejectReason} |
|||
where order_code = #{orderCode} |
|||
</update> |
|||
<!--更新用户余额--> |
|||
<update id="updateUserGold"> |
|||
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) |
|||
where jwcode = #{jwcode} |
|||
</update> |
|||
<!--修改消费订单为已退款--> |
|||
<update id="updateOrderRefund"> |
|||
update user_gold_record |
|||
set is_refund = 1 |
|||
where order_code = #{orderCode} |
|||
</update> |
|||
<!--根据订单号查订单--> |
|||
|
|||
<select id="selectOrderByOrderCode" resultType="com.example.demo.domain.entity.UserGoldRecord"> |
|||
select * from user_gold_record where order_code = #{orderCode} |
|||
</select> |
|||
<!--多条件查询充值审核订单--> |
|||
<select id="selectRechargeBy" resultType="com.example.demo.domain.vo.RechargeAudit"> |
|||
SELECT ugr.*, |
|||
u.name as name, |
|||
u.market as market, |
|||
a1.admin_name as adminName, |
|||
a2.admin_name as auditName |
|||
FROM user_gold_record as ugr |
|||
LEFT JOIN user u ON ugr.jwcode = u.jwcode |
|||
LEFT JOIN admin a1 ON ugr.admin_id = a1.id |
|||
LEFT JOIN admin a2 ON ugr.audit_id = a2.id |
|||
|
|||
<where> |
|||
<if test="rechargeAudit.jwcode != null and rechargeAudit.jwcode != ''"> |
|||
AND ugr.jwcode = #{rechargeAudit.jwcode} |
|||
</if> |
|||
<if test="rechargeAudit.activity != null and rechargeAudit.activity != ''"> |
|||
AND ugr.activity = #{rechargeAudit.activity} |
|||
</if> |
|||
<if test="rechargeAudit.payModel != null and rechargeAudit.payModel != ''"> |
|||
AND ugr.payModel = #{rechargeAudit.payModel} |
|||
</if> |
|||
<if test="rechargeAudit.market != null and rechargeAudit.market != ''"> |
|||
AND u.market = #{rechargeAudit.market} |
|||
</if> |
|||
<if test="rechargeAudit.startTime != null and rechargeAudit.endTime != null "> |
|||
AND ugr.pay_time between #{rechargeAudit.startTime} and #{rechargeAudit.endTime} |
|||
</if> |
|||
|
|||
<if test="rechargeAudit.auditStatus != null and rechargeAudit.auditStatus != ''"> |
|||
AND ugr.audit_status = #{rechargeAudit.auditStatus} |
|||
</if> |
|||
AND ugr.type = 0 |
|||
|
|||
</where> |
|||
</select> |
|||
<!--多条件查询退款审核订单--> |
|||
<select id="selectRefundBy" resultType="com.example.demo.domain.vo.RefundAudit"> |
|||
SELECT ugr.*, |
|||
u.name as name, |
|||
u.market as market, |
|||
a1.admin_name as adminName, |
|||
a2.admin_name as auditName |
|||
FROM user_gold_record as ugr |
|||
LEFT JOIN user u ON ugr.jwcode = u.jwcode |
|||
LEFT JOIN admin a1 ON ugr.admin_id = a1.id |
|||
LEFT JOIN admin a2 ON ugr.audit_id = a2.id |
|||
|
|||
<where> |
|||
<if test="refundAudit.jwcode != null and refundAudit.jwcode != ''"> |
|||
AND ugr.jwcode = #{refundAudit.jwcode} |
|||
</if> |
|||
<if test="refundAudit.refundModel != null and refundAudit.refundModel != ''"> |
|||
AND ugr.refund_model = #{refundAudit.refundModel} |
|||
</if> |
|||
<if test="refundAudit.goodsName != null and refundAudit.goodsName != ''"> |
|||
AND ugr.goods_name = #{refundAudit.goodsName} |
|||
</if> |
|||
<if test="refundAudit.market != null and refundAudit.market != ''"> |
|||
AND u.market = #{refundAudit.market} |
|||
</if> |
|||
<if test="refundAudit.startTime != null and refundAudit.endTime != null "> |
|||
AND ugr.create_time between #{refundAudit.startTime} and #{refundAudit.endTime} |
|||
</if> |
|||
|
|||
<if test="refundAudit.auditStatus != null and refundAudit.auditStatus != ''"> |
|||
AND ugr.audit_status = #{refundAudit.auditStatus} |
|||
</if> |
|||
AND ugr.type = 2 |
|||
|
|||
</where> |
|||
</select> |
|||
</mapper> |
@ -0,0 +1,174 @@ |
|||
<?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.ConsumeMapper"> |
|||
|
|||
<!-- 查询所有消费记录 --> |
|||
<select id="selectAll" resultType="com.example.demo.domain.vo.ConsumeUser"> |
|||
SELECT u.name AS name, |
|||
u.jwcode AS jwcode, |
|||
u.market AS market, |
|||
ugr.goods_name AS goodsName, |
|||
ugr.pay_platform AS payPlatform, |
|||
ugr.sum_gold AS sumGold, |
|||
ugr.permanent_gold AS permanentGold, |
|||
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, |
|||
ugr.task_gold AS taskGold, |
|||
ugr.remark AS remark, |
|||
a.admin_name AS adminName, |
|||
ugr.create_time AS createTime |
|||
FROM user u |
|||
JOIN |
|||
user_gold_record ugr ON u.jwcode = ugr.jwcode |
|||
JOIN |
|||
admin a ON ugr.admin_id = a.id |
|||
WHERE ugr.type = 1 |
|||
<trim prefix="ORDER BY" suffixOverrides=","> |
|||
<choose> |
|||
<!-- 当指定排序字段时使用指定字段排序 --> |
|||
<when test="sortField != null and sortField != ''"> |
|||
<choose> |
|||
<!-- 对三种金币数量的排序处理 --> |
|||
<when test="sortField == 'taskGold'">ugr.task_gold</when> |
|||
<when test="sortField == 'permanentGold'">ugr.permanent_gold</when> |
|||
<when test="sortField == 'freeGold'">(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0))</when> |
|||
<!-- 对时间字段的排序处理 --> |
|||
<when test="sortField == 'createTime'">ugr.create_time</when> |
|||
<!-- 其他字段不支持排序,使用默认排序 --> |
|||
<otherwise>ugr.create_time</otherwise> |
|||
</choose> |
|||
|
|||
<!-- 排序方向处理 --> |
|||
<if test="sortOrder != null and sortOrder != ''"> |
|||
<choose> |
|||
<when test="sortOrder == 'ASC'">ASC</when> |
|||
<when test="sortOrder == 'DESC'">DESC</when> |
|||
<otherwise>DESC</otherwise> |
|||
</choose> |
|||
</if> |
|||
<if test="sortOrder == null or sortOrder == ''"> |
|||
DESC |
|||
</if> |
|||
</when> |
|||
|
|||
<!-- 未指定排序字段时,使用默认的时间降序排序 --> |
|||
<otherwise> |
|||
ugr.create_time DESC |
|||
</otherwise> |
|||
</choose> |
|||
</trim> |
|||
</select> |
|||
|
|||
<!-- 查询筛选后消费记录 --> |
|||
<select id="selectBy" resultType="com.example.demo.domain.vo.ConsumeUser"> |
|||
SELECT u.name AS name, |
|||
u.jwcode AS jwcode, |
|||
u.market AS market, |
|||
ugr.goods_name AS goodsName, |
|||
ugr.pay_platform AS payPlatform, |
|||
ugr.sum_gold AS sumGold, |
|||
ugr.permanent_gold AS permanentGold, |
|||
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, |
|||
ugr.task_gold AS taskGold, |
|||
ugr.remark AS remark, |
|||
a.admin_name AS adminName, |
|||
ugr.create_time AS createTime |
|||
FROM user u |
|||
JOIN |
|||
user_gold_record ugr ON u.jwcode = ugr.jwcode |
|||
JOIN |
|||
admin a ON ugr.admin_id = a.id |
|||
<where> |
|||
ugr.type = 1 |
|||
<if test="jwcode != null and jwcode != ''"> |
|||
AND ugr.jwcode = #{jwcode} |
|||
</if> |
|||
<if test="goodsName != null and goodsName != ''"> |
|||
AND ugr.goods_name = #{goodsName} |
|||
</if> |
|||
<if test="market != null and market != ''"> |
|||
AND u.market = #{market} |
|||
</if> |
|||
<if test="payPlatform != null and payPlatform != ''"> |
|||
AND ugr.pay_platform = #{payPlatform} |
|||
</if> |
|||
<if test="startTime != null and endTime != null"> |
|||
AND ugr.create_time BETWEEN #{startTime} AND #{endTime} |
|||
</if> |
|||
</where> |
|||
<trim prefix="ORDER BY" suffixOverrides=","> |
|||
<choose> |
|||
<!-- 当指定排序字段时使用指定字段排序 --> |
|||
<when test="sortField != null and sortField != ''"> |
|||
<choose> |
|||
<!-- 对三种金币数量的排序处理 --> |
|||
<when test="sortField == 'taskGold'">ugr.task_gold</when> |
|||
<when test="sortField == 'permanentGold'">ugr.permanent_gold</when> |
|||
<when test="sortField == 'freeGold'">(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0))</when> |
|||
<!-- 对时间字段的排序处理 --> |
|||
<when test="sortField == 'createTime'">ugr.create_time</when> |
|||
<!-- 其他字段不支持排序,使用默认排序 --> |
|||
<otherwise>ugr.create_time</otherwise> |
|||
</choose> |
|||
|
|||
<!-- 排序方向处理 --> |
|||
<if test="sortOrder != null and sortOrder != ''"> |
|||
<choose> |
|||
<when test="sortOrder == 'ASC'">ASC</when> |
|||
<when test="sortOrder == 'DESC'">DESC</when> |
|||
<otherwise>DESC</otherwise> |
|||
</choose> |
|||
</if> |
|||
<if test="sortOrder == null or sortOrder == ''"> |
|||
DESC |
|||
</if> |
|||
</when> |
|||
|
|||
<!-- 未指定排序字段时,使用默认的时间降序排序 --> |
|||
<otherwise> |
|||
ugr.create_time DESC |
|||
</otherwise> |
|||
</choose> |
|||
</trim> |
|||
</select> |
|||
|
|||
<insert id="add" parameterType="com.example.demo.domain.entity.UserGoldRecord" useGeneratedKeys="true" keyProperty="id"> |
|||
INSERT INTO user_gold_record |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
order_code, |
|||
jwcode, |
|||
sum_gold, |
|||
permanent_gold, |
|||
free_june, |
|||
free_december, |
|||
task_gold, |
|||
goods_name, |
|||
remark, |
|||
type, |
|||
pay_platform, |
|||
is_refund, |
|||
admin_id, |
|||
audit_status, |
|||
create_time, |
|||
pay_time |
|||
</trim> |
|||
VALUES |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
#{orderCode}, |
|||
#{jwcode}, |
|||
#{sumGold}, |
|||
#{permanentGold}, |
|||
#{freeJune}, |
|||
#{freeDecember}, |
|||
#{taskGold}, |
|||
#{goodsName}, |
|||
#{remark}, |
|||
#{type}, |
|||
#{payPlatform}, |
|||
#{isRefund}, |
|||
#{adminId}, |
|||
#{auditStatus}, |
|||
#{createTime}, |
|||
#{payTime} |
|||
</trim> |
|||
</insert> |
|||
</mapper> |
@ -0,0 +1,94 @@ |
|||
<?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.GoldDetailMapper"> |
|||
|
|||
<select id="getGoldDetail" resultType="com.example.demo.domain.vo.GoldDetail"> |
|||
select `user`.name, `user`.jwcode, `user`.market, `ugr`.pay_platform, `ugr`.type, `ugr`.sum_gold, `ugr`.permanent_gold, `ugr`.free_june, `ugr`.free_december, `ugr`.task_gold, `admin`.admin_name, `ugr`.audit_time |
|||
from user_gold_record ugr |
|||
left join `user` on `user`.jwcode = `ugr`.jwcode |
|||
left join `admin` on `admin`.id = `ugr`.admin_id |
|||
<where> |
|||
<if test="jwcode != null and jwcode.length > 0"> |
|||
and `ugr`.jwcode = #{jwcode} |
|||
</if> |
|||
<if test="payPlatform != null and payPlatform.length > 0"> |
|||
and `ugr`.pay_platform = #{payPlatform} |
|||
</if> |
|||
<if test="type != null and type.length > 0"> |
|||
and `ugr`.type = #{type} |
|||
</if> |
|||
<if test="market != null and market.length > 0"> |
|||
and `user`.market = #{market} |
|||
</if> |
|||
<if test="startTime != null and endTime != null"> |
|||
and ugr.`audit_time` BETWEEN #{startTime} AND #{endTime} |
|||
</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 audit_time DESC |
|||
</otherwise> |
|||
</choose> |
|||
|
|||
</select> |
|||
<select id="getTotal" resultType="com.example.demo.domain.vo.Total"> |
|||
select sum(sum_gold) as Goldtotal, sum(permanent_gold) as permanentGold, sum(free_june+free_december) as freeGold, sum(task_gold) as taskGold |
|||
from user_gold_record |
|||
<where> |
|||
<if test="jwcode != null and jwcode.length > 0"> |
|||
and `ugr`.jwcode = #{jwcode} |
|||
</if> |
|||
<if test="payPlatform != null and payPlatform.length > 0"> |
|||
and `ugr`.pay_platform = #{payPlatform} |
|||
</if> |
|||
<if test="type != null and type.length > 0"> |
|||
and `ugr`.type = #{type} |
|||
</if> |
|||
<if test="market != null and market.length > 0"> |
|||
and `user`.market = #{market} |
|||
</if> |
|||
<if test="startTime != null and endTime != null"> |
|||
and ugr.`audit_time` BETWEEN #{startTime} AND #{endTime} |
|||
</if> |
|||
</where> |
|||
|
|||
</select> |
|||
<select id="getGold" resultType="com.example.demo.domain.entity.User"> |
|||
select * from user |
|||
<where> |
|||
<if test="jwcode != null and jwcode.length > 0"> |
|||
and jwcode = #{jwcode} |
|||
</if> |
|||
<if test="market != null and market.length > 0"> |
|||
and market = #{market} |
|||
</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 create_time DESC |
|||
</otherwise> |
|||
</choose> |
|||
</select> |
|||
<select id="GoldTotal" resultType="com.example.demo.domain.vo.Total"> |
|||
select |
|||
sum(current_permanent_gold) as permanentGold, |
|||
sum(current_free_june + current_free_december) as freeGold, |
|||
sum(current_task_gold) as taskGold, |
|||
sum(current_permanent_gold) + sum(current_free_june + current_free_december) + sum(current_task_gold) as Goldtotal |
|||
from `user` |
|||
<where> |
|||
<if test="jwcode != null and jwcode.length > 0"> |
|||
and jwcode = #{jwcode} |
|||
</if> |
|||
<if test="market != null and market.length > 0"> |
|||
and market = #{market} |
|||
</if> |
|||
</where> |
|||
</select> |
|||
</mapper> |
@ -0,0 +1,73 @@ |
|||
<?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.PermissionMapper"> |
|||
<insert id="addPermission" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> |
|||
insert into admin(admin_name,machine_id,account,password,market,postiton,remark,admin_status) |
|||
values(#{adminName},#{machineId},#{account},#{password},#{market},#{postiton},#{remark},1) |
|||
</insert> |
|||
<insert id="addadminRole"> |
|||
insert into admin_role(admin_id,role_id) |
|||
values(#{adminId},#{roleId}) |
|||
</insert> |
|||
<update id="updatePermission"> |
|||
update admin |
|||
<set> |
|||
<if test="name!=null"> |
|||
admin_name=#{name}, |
|||
</if> |
|||
<if test="market!=null"> |
|||
market=#{market}, |
|||
</if> |
|||
<if test="postiton!=null"> |
|||
postiton=#{postiton}, |
|||
</if> |
|||
<if test="role!=null"> |
|||
roleId=#{role}, |
|||
</if> |
|||
</set> |
|||
where id= #{id} |
|||
</update> |
|||
<update id="updateAdminRole"> |
|||
update admin_role |
|||
<set> |
|||
<if test="roleId!=null"> |
|||
role_id= #{roleId}, |
|||
</if> |
|||
</set> |
|||
where admin_id= #{adminId} |
|||
</update> |
|||
<delete id="deleteAdmin"> |
|||
delete from admin where id=#{id} |
|||
</delete> |
|||
<delete id="deleteAdminRole"> |
|||
delete from admin_role where admin_id= #{id} |
|||
</delete> |
|||
<select id="getposition" resultType="java.lang.String"> |
|||
select distinct postiton from admin |
|||
</select> |
|||
<select id="getmarket" resultType="java.lang.String"> |
|||
select distinct market from admin |
|||
</select> |
|||
<select id="getPermission" resultType="com.example.demo.domain.vo.Permission"> |
|||
select admin.id,admin.admin_name,admin.account,admin.market,admin.postiton,admin.remark,admin.admin_status,role.role_name |
|||
from admin |
|||
left join admin_role on admin.id=admin_role.admin_id |
|||
left join role on admin_role.role_id=role.id |
|||
|
|||
<where> |
|||
<if test="account!=null and account.length>0"> |
|||
admin.account=#{account} |
|||
</if> |
|||
<if test="market!=null and market.length>0"> |
|||
admin.market=#{market} |
|||
</if> |
|||
<if test="postiton!=null and postiton.length>0"> |
|||
admin.postiton=#{postiton} |
|||
</if> |
|||
</where> |
|||
</select> |
|||
<select id="getRole" resultType="com.example.demo.domain.entity.Role"> |
|||
select * from role |
|||
</select> |
|||
|
|||
</mapper> |
@ -0,0 +1,184 @@ |
|||
<?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.RechargeMapper"> |
|||
|
|||
<!-- 查询所有充值记录 --> |
|||
<select id="selectAll" resultType="com.example.demo.domain.vo.RechargeUser"> |
|||
SELECT |
|||
u.name AS name, |
|||
u.jwcode AS jwcode, |
|||
u.market AS market, |
|||
ugr.activity AS activity, |
|||
ugr.rate_id AS rateId, |
|||
r.rate_name AS rateName, |
|||
ugr.money AS money, |
|||
ugr.permanent_gold AS permanentGold, |
|||
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, |
|||
ugr.pay_model AS payModel, |
|||
ugr.pay_platform AS payPlatform, |
|||
ugr.remark AS remark, |
|||
ugr.admin_id AS adminId, |
|||
a.admin_name AS adminName, |
|||
ugr.pay_time AS payTime |
|||
FROM user u |
|||
JOIN user_gold_record ugr ON u.jwcode = ugr.jwcode |
|||
JOIN admin a ON ugr.admin_id = a.id |
|||
JOIN rate r ON ugr.rate_id = r.id |
|||
WHERE ugr.type = 0 |
|||
|
|||
<trim prefix="ORDER BY" suffixOverrides=","> |
|||
<choose> |
|||
<!-- 当指定排序字段时使用指定字段排序 --> |
|||
<when test="sortField != null and sortField != ''"> |
|||
<choose> |
|||
<!-- 对金币数量的排序处理 --> |
|||
<when test="sortField == 'permanentGold'">ugr.permanent_gold</when> |
|||
<when test="sortField == 'freeGold'">(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0))</when> |
|||
<!-- 对时间字段的排序处理 --> |
|||
<when test="sortField == 'payTime'">ugr.pay_time</when> |
|||
<!-- 其他字段不支持排序,使用默认排序 --> |
|||
<otherwise>ugr.pay_time</otherwise> |
|||
</choose> |
|||
|
|||
<!-- 排序方向处理 --> |
|||
<if test="sortOrder != null and sortOrder != ''"> |
|||
<choose> |
|||
<when test="sortOrder == 'ASC'">ASC</when> |
|||
<when test="sortOrder == 'DESC'">DESC</when> |
|||
<otherwise>DESC</otherwise> |
|||
</choose> |
|||
</if> |
|||
<if test="sortOrder == null or sortOrder == ''"> |
|||
DESC |
|||
</if> |
|||
</when> |
|||
|
|||
<!-- 未指定排序字段时,使用默认的时间降序排序 --> |
|||
<otherwise> |
|||
ugr.pay_time DESC |
|||
</otherwise> |
|||
</choose> |
|||
</trim> |
|||
</select> |
|||
|
|||
<!-- 查询筛选后充值记录 --> |
|||
<select id="selectBy" resultType="com.example.demo.domain.vo.RechargeUser"> |
|||
SELECT |
|||
u.name AS name, |
|||
u.jwcode AS jwcode, |
|||
u.market AS market, |
|||
ugr.activity AS activity, |
|||
ugr.rate_id AS rateId, |
|||
r.rate_name AS rateName, |
|||
ugr.money AS money, |
|||
ugr.permanent_gold AS permanentGold, |
|||
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, |
|||
ugr.pay_model AS payModel, |
|||
ugr.pay_platform AS payPlatform, |
|||
ugr.remark AS remark, |
|||
ugr.admin_id AS adminId, |
|||
a.admin_name AS adminName, |
|||
ugr.pay_time AS payTime |
|||
FROM user u |
|||
JOIN user_gold_record ugr ON u.jwcode = ugr.jwcode |
|||
JOIN admin a ON ugr.admin_id = a.id |
|||
JOIN rate r ON ugr.rate_id = r.id |
|||
<where> |
|||
ugr.type = 0 |
|||
<if test="jwcode != null and jwcode != ''"> |
|||
AND ugr.jwcode = #{jwcode} |
|||
</if> |
|||
<if test="activity != null and activity != ''"> |
|||
AND ugr.activity = #{activity} |
|||
</if> |
|||
<if test="market != null and market != ''"> |
|||
AND u.market = #{market} |
|||
</if> |
|||
<if test="payPlatform != null and payPlatform != ''"> |
|||
AND ugr.pay_platform = #{payPlatform} |
|||
</if> |
|||
<if test="startTime != null and endTime != null"> |
|||
AND ugr.pay_time BETWEEN #{startTime} AND #{endTime} |
|||
</if> |
|||
</where> |
|||
<trim prefix="ORDER BY" suffixOverrides=","> |
|||
<choose> |
|||
<!-- 当指定排序字段时使用指定字段排序 --> |
|||
<when test="sortField != null and sortField != ''"> |
|||
<choose> |
|||
<!-- 对金币数量的排序处理 --> |
|||
<when test="sortField == 'permanentGold'">ugr.permanent_gold</when> |
|||
<when test="sortField == 'money'">ugr.money</when> |
|||
<when test="sortField == 'freeGold'">(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0))</when> |
|||
<!-- 对时间字段的排序处理 --> |
|||
<when test="sortField == 'payTime'">ugr.pay_time</when> |
|||
<!-- 其他字段不支持排序,使用默认排序 --> |
|||
<otherwise>ugr.pay_time</otherwise> |
|||
</choose> |
|||
|
|||
<!-- 排序方向处理 --> |
|||
<if test="sortOrder != null and sortOrder != ''"> |
|||
<choose> |
|||
<when test="sortOrder == 'ASC'">ASC</when> |
|||
<when test="sortOrder == 'DESC'">DESC</when> |
|||
<otherwise>DESC</otherwise> |
|||
</choose> |
|||
</if> |
|||
<if test="sortOrder == null or sortOrder == ''"> |
|||
DESC |
|||
</if> |
|||
</when> |
|||
|
|||
<!-- 未指定排序字段时,使用默认的时间降序排序 --> |
|||
<otherwise> |
|||
ugr.pay_time DESC |
|||
</otherwise> |
|||
</choose> |
|||
</trim> |
|||
</select> |
|||
|
|||
<insert id="add" parameterType="com.example.demo.domain.entity.UserGoldRecord" useGeneratedKeys="true" keyProperty="id"> |
|||
INSERT INTO user_gold_record |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
order_code, |
|||
jwcode, |
|||
activity, |
|||
sum_gold, |
|||
permanent_gold, |
|||
free_june, |
|||
free_december, |
|||
rate_id, |
|||
money, |
|||
voucher, |
|||
pay_platform, |
|||
pay_model, |
|||
pay_time, |
|||
remark, |
|||
admin_id, |
|||
type, |
|||
audit_status, |
|||
create_time |
|||
</trim> |
|||
VALUES |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
#{orderCode}, |
|||
#{jwcode}, |
|||
#{activity}, |
|||
#{sumGold}, |
|||
#{permanentGold}, |
|||
#{freeJune}, |
|||
#{freeDecember}, |
|||
#{rateId}, |
|||
#{money}, |
|||
#{voucher}, |
|||
#{payPlatform}, |
|||
#{payModel}, |
|||
#{payTime}, |
|||
#{remark}, |
|||
#{adminId}, |
|||
#{type}, |
|||
#{auditStatus}, |
|||
#{createTime} |
|||
</trim> |
|||
</insert> |
|||
</mapper> |
@ -0,0 +1,202 @@ |
|||
<?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.RefundMapper"> |
|||
|
|||
<!-- 查询所有退款记录 --> |
|||
<select id="selectAll" resultType="com.example.demo.domain.vo.RefundUser"> |
|||
SELECT u.name AS name, |
|||
u.jwcode AS jwcode, |
|||
u.market AS market, |
|||
ugr.order_code AS orderCode, |
|||
ugr.goods_name AS goodsName, |
|||
ugr.refund_model AS refundModel, |
|||
ugr.refund_type AS refundType, |
|||
ugr.sum_gold AS sumGold, |
|||
ugr.permanent_gold AS permanentGold, |
|||
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, |
|||
ugr.task_gold AS taskGold, |
|||
ugr.remark AS remark, |
|||
a.admin_name AS adminName, |
|||
ugr.create_time AS createTime |
|||
FROM user u |
|||
JOIN |
|||
user_gold_record ugr ON u.jwcode = ugr.jwcode |
|||
JOIN |
|||
admin a ON ugr.admin_id = a.id |
|||
WHERE ugr.type = 2 |
|||
<trim prefix="ORDER BY" suffixOverrides=","> |
|||
<choose> |
|||
<!-- 当指定排序字段时使用指定字段排序 --> |
|||
<when test="sortField != null and sortField != ''"> |
|||
<choose> |
|||
<!-- 对三种金币数量的排序处理 --> |
|||
<when test="sortField == 'taskGold'">ugr.task_gold</when> |
|||
<when test="sortField == 'permanentGold'">ugr.permanent_gold</when> |
|||
<when test="sortField == 'freeGold'">(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0))</when> |
|||
<!-- 对时间字段的排序处理 --> |
|||
<when test="sortField == 'createTime'">ugr.create_time</when> |
|||
<!-- 其他字段不支持排序,使用默认排序 --> |
|||
<otherwise>ugr.create_time</otherwise> |
|||
</choose> |
|||
|
|||
<!-- 排序方向处理 --> |
|||
<if test="sortOrder != null and sortOrder != ''"> |
|||
<choose> |
|||
<when test="sortOrder == 'ASC'">ASC</when> |
|||
<when test="sortOrder == 'DESC'">DESC</when> |
|||
<otherwise>DESC</otherwise> |
|||
</choose> |
|||
</if> |
|||
<if test="sortOrder == null or sortOrder == ''"> |
|||
DESC |
|||
</if> |
|||
</when> |
|||
|
|||
<!-- 未指定排序字段时,使用默认的时间降序排序 --> |
|||
<otherwise> |
|||
ugr.create_time DESC |
|||
</otherwise> |
|||
</choose> |
|||
</trim> |
|||
</select> |
|||
|
|||
<!-- 查询筛选后消费记录 --> |
|||
<select id="selectBy" resultType="com.example.demo.domain.vo.RefundUser"> |
|||
SELECT u.name AS name, |
|||
u.jwcode AS jwcode, |
|||
u.market AS market, |
|||
ugr.order_code AS orderCode, |
|||
ugr.goods_name AS goodsName, |
|||
ugr.refund_model AS refundModel, |
|||
ugr.refund_type AS refundType, |
|||
ugr.sum_gold AS sumGold, |
|||
ugr.permanent_gold AS permanentGold, |
|||
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, |
|||
ugr.task_gold AS taskGold, |
|||
ugr.remark AS remark, |
|||
a.admin_name AS adminName, |
|||
ugr.create_time AS createTime |
|||
FROM user u |
|||
JOIN |
|||
user_gold_record ugr ON u.jwcode = ugr.jwcode |
|||
JOIN |
|||
admin a ON ugr.admin_id = a.id |
|||
<where> |
|||
ugr.type = 2 |
|||
<if test="jwcode != null and jwcode != ''"> |
|||
AND ugr.jwcode = #{jwcode} |
|||
</if> |
|||
<if test="goodsName != null and goodsName != ''"> |
|||
AND ugr.goods_name = #{goodsName} |
|||
</if> |
|||
<if test="market != null and market != ''"> |
|||
AND u.market = #{market} |
|||
</if> |
|||
<if test="refundModel != null and refundModel != ''"> |
|||
AND ugr.refund_model = #{refundModel} |
|||
</if> |
|||
<if test="startTime != null and endTime != null"> |
|||
AND ugr.create_time BETWEEN #{startTime} AND #{endTime} |
|||
</if> |
|||
</where> |
|||
<trim prefix="ORDER BY" suffixOverrides=","> |
|||
<choose> |
|||
<!-- 当指定排序字段时使用指定字段排序 --> |
|||
<when test="sortField != null and sortField != ''"> |
|||
<choose> |
|||
<!-- 对三种金币数量的排序处理 --> |
|||
<when test="sortField == 'taskGold'">ugr.task_gold</when> |
|||
<when test="sortField == 'permanentGold'">ugr.permanent_gold</when> |
|||
<when test="sortField == 'freeGold'">(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0))</when> |
|||
<!-- 对时间字段的排序处理 --> |
|||
<when test="sortField == 'createTime'">ugr.create_time</when> |
|||
<!-- 其他字段不支持排序,使用默认排序 --> |
|||
<otherwise>ugr.create_time</otherwise> |
|||
</choose> |
|||
|
|||
<!-- 排序方向处理 --> |
|||
<if test="sortOrder != null and sortOrder != ''"> |
|||
<choose> |
|||
<when test="sortOrder == 'ASC'">ASC</when> |
|||
<when test="sortOrder == 'DESC'">DESC</when> |
|||
<otherwise>DESC</otherwise> |
|||
</choose> |
|||
</if> |
|||
<if test="sortOrder == null or sortOrder == ''"> |
|||
DESC |
|||
</if> |
|||
</when> |
|||
|
|||
<!-- 未指定排序字段时,使用默认的时间降序排序 --> |
|||
<otherwise> |
|||
ugr.create_time DESC |
|||
</otherwise> |
|||
</choose> |
|||
</trim> |
|||
</select> |
|||
|
|||
<insert id="add" parameterType="com.example.demo.domain.entity.UserGoldRecord" useGeneratedKeys="true" keyProperty="id"> |
|||
INSERT INTO user_gold_record |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
order_code, |
|||
jwcode, |
|||
refund_type, |
|||
refund_model, |
|||
sum_gold, |
|||
permanent_gold, |
|||
free_june, |
|||
free_december, |
|||
task_gold, |
|||
goods_name, |
|||
pay_platform, |
|||
remark, |
|||
type, |
|||
admin_id, |
|||
audit_status, |
|||
create_time |
|||
</trim> |
|||
VALUES |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
#{orderCode}, |
|||
#{jwcode}, |
|||
#{refundType}, |
|||
#{refundModel}, |
|||
#{sumGold}, |
|||
#{permanentGold}, |
|||
#{freeJune}, |
|||
#{freeDecember}, |
|||
#{taskGold}, |
|||
#{goodsName}, |
|||
#{payPlatform}, |
|||
#{remark}, |
|||
#{type}, |
|||
#{adminId}, |
|||
#{auditStatus}, |
|||
#{createTime} |
|||
</trim> |
|||
</insert> |
|||
|
|||
<select id="getRefundType" resultType="java.lang.String"> |
|||
select DISTINCT refund_Type from user_gold_record |
|||
</select> |
|||
|
|||
<select id="selectGoods" resultType="com.example.demo.domain.vo.RefundUser"> |
|||
SELECT |
|||
|
|||
ugr.goods_name AS goodsName, |
|||
ugr.order_code AS orderCode, |
|||
ugr.permanent_gold AS permanentGold, |
|||
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, |
|||
ugr.task_gold AS taskGold |
|||
FROM user_gold_record ugr |
|||
<where> |
|||
ugr.type = 1 |
|||
<if test="jwcode != null and jwcode != ''"> |
|||
AND ugr.jwcode = #{jwcode} |
|||
</if> |
|||
</where> |
|||
<trim prefix="ORDER BY" suffixOverrides=","> |
|||
ugr.create_time DESC |
|||
</trim> |
|||
</select> |
|||
</mapper> |
@ -0,0 +1,144 @@ |
|||
<?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.StatisticsMapper"> |
|||
<!--新增part2统计数据--> |
|||
<insert id="insertPart2"> |
|||
INSERT INTO statistics ( |
|||
market, current_datetime, |
|||
recharge, money, |
|||
consume_permanent, consume_free_june, |
|||
consume_free_december, consume_task, |
|||
refund_permanent, refund_free_june, |
|||
refund_free_december,refund_task, |
|||
recharge_num, first_recharge |
|||
) VALUES ( |
|||
#{market}, #{currentDatetime}, |
|||
#{recharge}, #{money}, |
|||
#{consumePermanent}, #{consumeFreeJune}, |
|||
#{consumeFreeDecember}, #{consumeTask}, |
|||
#{refundPermanent}, #{refundFreeJune}, |
|||
#{refundFreeDecember}, #{refundTask}, |
|||
#{rechargeNum}, #{firstRecharge} |
|||
) |
|||
</insert> |
|||
<!--新增part1统计数据--> |
|||
<insert id="insertPart1"> |
|||
INSERT INTO statistics ( |
|||
market, current_datetime, |
|||
current_gold, daily_change, |
|||
current_permanent, current_free_june, |
|||
current_free_december, current_task |
|||
|
|||
) VALUES ( |
|||
#{market}, #{currentDatetime}, |
|||
#{currentGold}, #{dailyChange}, |
|||
#{currentPermanent}, #{currentFreeJune}, |
|||
#{currentFreeDecember}, #{currentTask} |
|||
|
|||
) |
|||
</insert> |
|||
<!--更新part2统计数据--> |
|||
<update id="updatePart2" parameterType="map"> |
|||
UPDATE statistics |
|||
SET |
|||
recharge = #{recharge}, |
|||
money = #{money}, |
|||
consume_permanent = #{consumePermanent}, |
|||
consume_free_june = #{consumeFreeJune}, |
|||
consume_free_december = #{consumeFreeDecember}, |
|||
consume_task = #{consumeTask}, |
|||
refund_permanent = #{refundPermanent}, |
|||
refund_free_june = #{refundFreeJune}, |
|||
refund_free_december = #{refundFreeDecember}, |
|||
refund_task = #{refundTask}, |
|||
recharge_num = #{rechargeNum}, |
|||
first_recharge = #{firstRecharge} |
|||
WHERE market = #{market} and current_datetime = #{currentDatetime} |
|||
</update> |
|||
<!--更新part1统计数据--> |
|||
<update id="updatePart1" parameterType="map"> |
|||
update statistics |
|||
SET |
|||
current_gold = #{currentGold}, |
|||
daily_change = #{dailyChange}, |
|||
current_permanent = #{currentPermanent}, |
|||
current_free_june = #{currentFreeJune}, |
|||
current_free_december = #{currentFreeDecember}, |
|||
current_task = #{currentTask} |
|||
WHERE market = #{market} and current_datetime = #{currentDatetime} |
|||
</update> |
|||
<!--根据地区、审核状态、起止时间查询订单表数据--> |
|||
<select id="findByMarketAndAuditStatus" |
|||
resultType="com.example.demo.domain.entity.UserGoldRecord"> |
|||
SELECT u.market, ugr.* |
|||
FROM user_gold_record ugr |
|||
INNER JOIN user u ON ugr.jwcode = u.jwcode |
|||
WHERE u.market = #{market} |
|||
AND ugr.audit_status IN |
|||
<foreach item="status" collection="auditStatusList" open="(" separator="," close=")"> |
|||
#{status} |
|||
</foreach> |
|||
AND ugr.pay_time BETWEEN #{startTime} AND #{endTime} |
|||
</select> |
|||
<!-- 计算该天充值人数--> |
|||
<select id="countRechargeNum" resultType="java.lang.Integer"> |
|||
SELECT COUNT(DISTINCT ugr.jwcode) |
|||
FROM user_gold_record ugr |
|||
INNER JOIN user u ON ugr.jwcode = u.jwcode |
|||
WHERE u.market = #{market} |
|||
AND ugr.audit_status IN (1,3) |
|||
AND ugr.pay_time BETWEEN #{startTime} AND #{endTime} |
|||
</select> |
|||
<!--计算该天首充人数--> |
|||
<select id="countFirstRecharge" resultType="java.lang.Integer"> |
|||
SELECT COUNT(DISTINCT ugr.jwcode) |
|||
FROM user_gold_record ugr |
|||
INNER JOIN user u ON ugr.jwcode = u.jwcode |
|||
WHERE u.market = #{market} |
|||
AND ugr.audit_status = 1 |
|||
AND ugr.pay_time BETWEEN #{startTime} AND #{endTime} |
|||
AND u.first_recharge = #{startTime} |
|||
</select> |
|||
<select id="selectByMarketAndDate" resultType="com.example.demo.domain.entity.Statistics"> |
|||
SELECT * |
|||
FROM statistics |
|||
WHERE market = #{market} |
|||
AND current_datetime >= #{startDate} |
|||
AND current_datetime <= #{endDate} |
|||
LIMIT 1 |
|||
</select> |
|||
<select id="sumCurrentPermanentGold" resultType="java.lang.Integer"> |
|||
SELECT SUM(user.current_permanent_gold) |
|||
FROM user |
|||
WHERE user.market = #{market} |
|||
</select> |
|||
<select id="sumCurrentFreeJune" resultType="java.lang.Integer"> |
|||
SELECT SUM(u.current_free_june) |
|||
FROM user as u |
|||
WHERE u.market = #{market} |
|||
</select> |
|||
<select id="sumCurrentFreeDecember" resultType="java.lang.Integer"> |
|||
SELECT SUM(u.current_free_december) |
|||
FROM user as u |
|||
WHERE u.market = #{market} |
|||
</select> |
|||
<select id="sumCurrentTaskGold" resultType="java.lang.Integer"> |
|||
SELECT SUM(u.current_task_gold) |
|||
FROM user as u |
|||
WHERE u.market = #{market} |
|||
</select> |
|||
<select id="selectSumByMarketAndDate" resultType="com.example.demo.domain.entity.Statistics"> |
|||
select sum(s.recharge) as recharge, |
|||
sum(s.money) as money, |
|||
sum(s.consume_permanent) as consume_permanent, |
|||
sum(s.consume_free_june) as consume_free_june, |
|||
sum(s.consume_free_december) as consume_free_december, |
|||
sum(s.consume_task) as consume_task, |
|||
sum(s.recharge_num) as recharge_num |
|||
from statistics as s |
|||
WHERE market = #{market} |
|||
AND current_datetime >= #{startDate} |
|||
AND current_datetime <= #{endDate} |
|||
</select> |
|||
|
|||
</mapper> |
@ -0,0 +1,52 @@ |
|||
<?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.UserMapper"> |
|||
|
|||
<!-- 根据精网号查询用户信息 --> |
|||
<select id="selectUser" resultType="com.example.demo.domain.vo.GoldUser"> |
|||
SELECT |
|||
name AS "name", |
|||
jwcode AS "jwcode", |
|||
market AS "market", |
|||
(COALESCE(current_permanent_gold, 0) + COALESCE(current_free_june, 0) + COALESCE(current_free_december, 0) + COALESCE(current_task_gold, 0)) AS "nowSumGold", |
|||
current_permanent_gold AS "nowPermanentGold", |
|||
(COALESCE(current_free_june, 0) + COALESCE(current_free_december, 0)) AS "nowFreeGold", |
|||
current_task_gold AS "nowTaskGold", |
|||
(COALESCE(sum_permanent_gold, 0) + COALESCE(sum_free_june, 0) + COALESCE(sum_free_december, 0) + COALESCE(sum_task_gold, 0)) AS "historySumGold", |
|||
sum_permanent_gold AS "historyPermanentGold", |
|||
(COALESCE(sum_free_june, 0) + COALESCE(sum_free_december, 0)) AS "historyFreeGold", |
|||
sum_task_gold AS "historyTaskGold", |
|||
recharge_num AS "rechargeNum", |
|||
consume_num AS "consumeNum", |
|||
first_recharge AS "firstRecharge" |
|||
FROM user |
|||
WHERE jwcode = #{jwcode} |
|||
</select> |
|||
|
|||
<!-- 根据精网号查询金币余额 --> |
|||
<select id="selectGold" resultType="com.example.demo.domain.vo.GoldUser"> |
|||
SELECT |
|||
current_permanent_gold AS "NowPermanentGold", |
|||
(COALESCE(current_free_june, 0) + COALESCE(current_free_december, 0)) AS "NowFreeGold", |
|||
current_free_june AS "NowFreeJune", |
|||
current_free_december AS "NowFreeDecember", |
|||
current_task_gold AS "NowTaskGold", |
|||
consume_num AS "consumeNum" |
|||
FROM user |
|||
WHERE jwcode = #{jwcode} |
|||
</select> |
|||
|
|||
<!-- 根据精网号更新数据 --> |
|||
<update id="updateGold" parameterType="com.example.demo.domain.entity.User"> |
|||
UPDATE user |
|||
SET |
|||
current_permanent_gold = #{currentPermanentGold}, |
|||
current_free_june = #{currentFreeJune}, |
|||
current_free_december = #{currentFreeDecember}, |
|||
current_task_gold = #{currentTaskGold}, |
|||
consume_num = #{consumeNum}, |
|||
sum_consume = sum_consume + #{sumConsume}, |
|||
update_time = NOW() |
|||
WHERE jwcode = #{jwcode} |
|||
</update> |
|||
</mapper> |
@ -1,5 +1,91 @@ |
|||
<?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.WorkBenchMapper"> |
|||
<!--起止时间内的该地区充值金币数(永久+免费)若为空则默认0--> |
|||
<select id="sumRecharge" resultType="java.lang.Integer"> |
|||
select sum( |
|||
|
|||
COALESCE(recharge, 0) |
|||
) |
|||
from statistics |
|||
where market = #{market} |
|||
and current_datetime |
|||
between #{startDate} and #{endDate} |
|||
</select> |
|||
<!--起止时间内的该地区充值金额(永久金币数)--> |
|||
<select id="sumMoney" resultType="java.lang.Integer"> |
|||
SELECT SUM(money) |
|||
FROM statistics |
|||
WHERE market = #{market} |
|||
AND current_datetime BETWEEN #{startDate} and #{endDate} |
|||
</select> |
|||
<!-- 起止时间内该地区消费金币数(永久+免费+任务)--> |
|||
<select id="sumConsume" resultType="java.lang.Integer"> |
|||
SELECT SUM( |
|||
COALESCE(consume_permanent, 0) + |
|||
COALESCE(consume_free_june, 0) + |
|||
COALESCE(consume_free_december, 0) + |
|||
COALESCE(consume_task, 0) |
|||
) |
|||
FROM statistics |
|||
WHERE market = #{market} |
|||
AND current_datetime BETWEEN |
|||
#{startDate} and #{endDate} |
|||
</select> |
|||
<!--起止时间内的该地区退款金币数(永久+免费+任务)--> |
|||
<select id="sumRefund" resultType="java.lang.Integer"> |
|||
SELECT SUM( |
|||
COALESCE(refund_permanent, 0) + |
|||
COALESCE(refund_free_june, 0) + |
|||
COALESCE(refund_free_december, 0) + |
|||
COALESCE(refund_task, 0) |
|||
) |
|||
FROM statistics |
|||
WHERE market = #{market} |
|||
AND current_datetime BETWEEN |
|||
#{startDate} and #{endDate} |
|||
</select> |
|||
<!--起止时间内该地区充值人头数(根据精网号去重,老数据有多人共用一个精网号的问题)--> |
|||
<select id="countRechargeNum" resultType="java.lang.Integer"> |
|||
SELECT COUNT(DISTINCT ugr.jwcode) |
|||
FROM user_gold_record ugr |
|||
INNER JOIN user u ON ugr.jwcode = u.jwcode |
|||
WHERE u.market = #{market} |
|||
AND ugr.pay_time BETWEEN |
|||
#{startDate} and #{endDate} |
|||
AND ugr.audit_status IN (1,3) |
|||
|
|||
</select> |
|||
<!--给定时间范围内的该地区消费永久金币数--> |
|||
<select id="sumCPermanent" resultType="java.lang.Integer"> |
|||
SELECT SUM( |
|||
COALESCE(consume_permanent, 0) |
|||
) |
|||
FROM statistics |
|||
WHERE market = #{market} |
|||
AND current_datetime BETWEEN |
|||
#{startDate} and #{endDate} |
|||
</select> |
|||
<!--给定时间范围内的该地区消费免费金币数--> |
|||
<select id="sumCFree" resultType="java.lang.Integer"> |
|||
SELECT SUM( |
|||
COALESCE(refund_free_june, 0) + |
|||
COALESCE(refund_free_december, 0) |
|||
) |
|||
FROM statistics |
|||
WHERE market = #{market} |
|||
AND current_datetime BETWEEN |
|||
#{startDate} and #{endDate} |
|||
</select> |
|||
<!--给定时间范围内的该地区消费任务金币数--> |
|||
<select id="sumCTask" resultType="java.lang.Integer"> |
|||
SELECT SUM( |
|||
COALESCE(refund_task, 0) |
|||
) |
|||
FROM statistics |
|||
WHERE market = #{market} |
|||
AND current_datetime BETWEEN |
|||
#{startDate} and #{endDate} |
|||
</select> |
|||
|
|||
</mapper> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue