You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
5.7 KiB

  1. package com.example.demo.serviceImpl.coin;
  2. import com.example.demo.domain.vo.coin.RechargeActivity;
  3. import com.example.demo.mapper.coin.RechargeActivityCenterMapper;
  4. import com.example.demo.service.coin.RechargeActivityCenterService;
  5. import com.github.pagehelper.PageHelper;
  6. import com.github.pagehelper.PageInfo;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Service;
  9. import java.time.LocalDateTime;
  10. import java.util.Date;
  11. import java.util.List;
  12. import java.util.Objects;
  13. import java.util.regex.Pattern;
  14. /**
  15. * @program: gold-java
  16. * @ClassName RechargeActivityCenterServiceImpl
  17. * @description: 充值活动中心服务实现类
  18. * @author: Double
  19. * @create: 202510-28 14:40
  20. * @Version 1.0
  21. **/
  22. @Service
  23. public class RechargeActivityCenterServiceImpl implements RechargeActivityCenterService {
  24. @Autowired
  25. private RechargeActivityCenterMapper rechargeActivityCenterMapper;
  26. private static final String ACTIVITY_NAME_REGEX = "^[\\u4e00-\\u9fa5a-zA-Z0-9,。!?、;:\"'()《》【】——~,.:;!'()\\[\\]-_&+=]{1,100}$";
  27. private static final Pattern ACTIVITY_NAME_PATTERN = Pattern.compile(ACTIVITY_NAME_REGEX);
  28. // 根据ID查询活动
  29. @Override
  30. public PageInfo<RechargeActivity> queryActivity(Integer pageNum, Integer pageSize, RechargeActivity activity) {
  31. updateStatus();
  32. PageHelper.startPage(pageNum, pageSize);
  33. List<RechargeActivity> activityList = rechargeActivityCenterMapper.queryActivity(activity);
  34. return new PageInfo<>(activityList);
  35. }
  36. // 新增活动
  37. @Override
  38. public void addActivity(RechargeActivity activity) {
  39. if (activity.getActivityName().length() > 100) {
  40. throw new IllegalArgumentException("活动名称不能超过100个字符");
  41. }
  42. RechargeActivity activityByName = rechargeActivityCenterMapper.queryActivityByName(activity);
  43. if (activityByName != null) {
  44. throw new IllegalArgumentException("活动名称已存在");
  45. }
  46. // 3. 字符格式校验
  47. if (!ACTIVITY_NAME_PATTERN.matcher(activity.getActivityName()).matches()) {
  48. throw new IllegalArgumentException("活动名称仅允许包含汉字、英文字母、数字及常见标点符号(中英文标点:,。!?、;:\"'()《》【】——~,.:;!'()[]-_&+=)");
  49. }
  50. Date startTime = activity.getStartTime();
  51. Date endTime = activity.getEndTime();
  52. //获取当前系统时间(本地时间,与活动时间时区保持一致)
  53. Date now = new Date();
  54. //时间范围判断,设置对应状态
  55. if (now.before(startTime)) {
  56. // 当前时间 < 开始时间 → 未开始(状态0)
  57. activity.setStatus("0");
  58. } else if (now.after(endTime)) {
  59. // 当前时间 > 结束时间 → 已结束(状态2)
  60. activity.setStatus("2");
  61. } else {
  62. // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1)
  63. activity.setStatus("1");
  64. }
  65. rechargeActivityCenterMapper.addActivity(activity);
  66. }
  67. // 更新活动
  68. @Override
  69. public void updateActivity(RechargeActivity activity) {
  70. Date startTime = activity.getStartTime();
  71. Date endTime = activity.getEndTime();
  72. //获取当前系统时间(本地时间,与活动时间时区保持一致)
  73. Date now = new Date();
  74. //时间范围判断,设置对应状态
  75. if (now.before(startTime)) {
  76. // 当前时间 < 开始时间 → 未开始(状态0)
  77. activity.setStatus("0");
  78. } else if (now.after(endTime)) {
  79. // 当前时间 > 结束时间 → 已结束(状态2)
  80. activity.setStatus("2");
  81. } else {
  82. // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1)
  83. activity.setStatus("1");
  84. }
  85. rechargeActivityCenterMapper.updateActivity(activity);
  86. if(Objects.equals(activity.getBusinessBelong(), "客户归属地")){
  87. rechargeActivityCenterMapper.updateActivityArea(activity);
  88. }
  89. }
  90. @Override
  91. public void updateStatus() {
  92. // 查询所有活动
  93. List<RechargeActivity> activityList = rechargeActivityCenterMapper.listActivities();
  94. if (activityList == null || activityList.isEmpty()) {
  95. return;
  96. }
  97. Date now = new Date();
  98. // 遍历所有活动,更新状态
  99. for (RechargeActivity activity : activityList) {
  100. Date startTime = activity.getStartTime();
  101. Date endTime = activity.getEndTime();
  102. // 跳过时间为空的活动
  103. if (startTime == null || endTime == null) {
  104. continue;
  105. }
  106. String newStatus;
  107. // 时间范围判断,设置对应状态
  108. if (now.before(startTime)) {
  109. // 当前时间 < 开始时间 → 未开始(状态0)
  110. newStatus = "0";
  111. } else if (now.after(endTime)) {
  112. // 当前时间 > 结束时间 → 已结束(状态2)
  113. newStatus = "2";
  114. } else {
  115. // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1)
  116. newStatus = "1";
  117. }
  118. // 只有当状态发生变化时才更新
  119. if (!newStatus.equals(activity.getStatus())) {
  120. activity.setStatus(newStatus);
  121. rechargeActivityCenterMapper.updateActivity(activity);
  122. }
  123. }
  124. }
  125. // 删除活动
  126. @Override
  127. public void deleteActivity(RechargeActivity activity) {
  128. rechargeActivityCenterMapper.deleteActivity(activity);
  129. }
  130. }