Browse Source
Merge branch 'refs/heads/huangqizheng/feature-20251104113536-现金管理二期退款修改' into milestone-20251016-现金管理
Merge branch 'refs/heads/huangqizheng/feature-20251104113536-现金管理二期退款修改' into milestone-20251016-现金管理
# Conflicts: # src/main/java/com/example/demo/mapper/coin/AuditMapper.java # src/main/resources/mapper/AuditMapper.xmlmilestone-20251016-现金管理
56 changed files with 2335 additions and 283 deletions
-
15pom.xml
-
4src/main/java/com/example/demo/Export/ExportService.java
-
44src/main/java/com/example/demo/Export/ExportServiceImpl.java
-
46src/main/java/com/example/demo/config/AppConfig.java
-
13src/main/java/com/example/demo/controller/cash/CashCollectionController.java
-
101src/main/java/com/example/demo/controller/cash/CashRefundController.java
-
38src/main/java/com/example/demo/controller/coin/ExportController.java
-
192src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java
-
17src/main/java/com/example/demo/controller/coin/RoleController.java
-
39src/main/java/com/example/demo/domain/DTO/CashDTO.java
-
36src/main/java/com/example/demo/domain/DTO/FinanceDTO.java
-
1src/main/java/com/example/demo/domain/entity/CashRecord.java
-
35src/main/java/com/example/demo/domain/entity/RechargeActivity.java
-
1src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java
-
2src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java
-
2src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java
-
2src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java
-
1src/main/java/com/example/demo/domain/vo/bean/BeanUser.java
-
1src/main/java/com/example/demo/domain/vo/cash/CashCollection.java
-
248src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java
-
203src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java
-
24src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java
-
13src/main/java/com/example/demo/domain/vo/coin/IdName.java
-
3src/main/java/com/example/demo/domain/vo/coin/Page.java
-
65src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java
-
2src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java
-
2src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java
-
1src/main/java/com/example/demo/domain/vo/coin/RoleVo.java
-
9src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
-
15src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java
-
5src/main/java/com/example/demo/mapper/coin/AuditMapper.java
-
5src/main/java/com/example/demo/mapper/coin/MarketMapper.java
-
35src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java
-
2src/main/java/com/example/demo/mapper/live/LiveMapper.java
-
5src/main/java/com/example/demo/service/cash/CashCollectionService.java
-
14src/main/java/com/example/demo/service/cash/RefundService.java
-
4src/main/java/com/example/demo/service/coin/ExportExcelService.java
-
34src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java
-
2src/main/java/com/example/demo/service/coin/RoleService.java
-
36src/main/java/com/example/demo/service/listen/CashListener.java
-
36src/main/java/com/example/demo/service/listen/FinanceListener.java
-
36src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
-
299src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
-
45src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
-
134src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java
-
18src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java
-
58src/main/resources/cashMapper/CashCollectionMapper.xml
-
426src/main/resources/cashMapper/CashRefundMapper.xml
-
12src/main/resources/jindouMapper/BeanConsumeMapper.xml
-
8src/main/resources/jindouMapper/BeanUser.xml
-
15src/main/resources/liveMapper/LiveMapper.xml
-
72src/main/resources/mapper/AuditMapper.xml
-
3src/main/resources/mapper/BeanAuditMapper.xml
-
9src/main/resources/mapper/MarketMapper.xml
-
110src/main/resources/mapper/RechargeActivityCenterMapper.xml
-
16src/main/resources/mapper/RoleMapper.xml
@ -0,0 +1,192 @@ |
|||||
|
package com.example.demo.controller.coin; |
||||
|
|
||||
|
import com.example.demo.config.interfac.Log; |
||||
|
import com.example.demo.domain.vo.coin.Page; |
||||
|
import com.example.demo.domain.vo.coin.RechargeActivity; |
||||
|
import com.example.demo.domain.vo.coin.Result; |
||||
|
import com.example.demo.service.coin.RechargeActivityCenterService; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.util.ObjectUtils; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @program: gold-java |
||||
|
* @ClassName RechargeActivityCenterController |
||||
|
* @description: 充值活动中心管理 |
||||
|
* @author: Double |
||||
|
* @create: 2025−11-04 14:23 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/admin/coin/rechargeActivityCenter") |
||||
|
@RequiredArgsConstructor |
||||
|
@Slf4j |
||||
|
@CrossOrigin |
||||
|
public class RechargeActivityCenterController { |
||||
|
|
||||
|
@Autowired |
||||
|
private RechargeActivityCenterService rechargeActivityCenterService; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 导出用户权限数据 |
||||
|
* |
||||
|
* @param page 导出请求参数) |
||||
|
* @return 导出结果(成功返回活动信息,失败返回错误信息) |
||||
|
* @throws NullPointerException 当参数为空时抛出(如activity为null、关键属性为null) |
||||
|
* @throws IllegalArgumentException 当参数无效时抛出(如活动ID非法、参数格式错误) |
||||
|
*/ |
||||
|
@Log("条件查询充值活动") |
||||
|
@PostMapping("/queryActivity") |
||||
|
public Result queryActivity(@RequestBody Page page) { |
||||
|
try { |
||||
|
//校验参数 |
||||
|
if (ObjectUtils.isEmpty(page.getPageNum())) { |
||||
|
return Result.error("页码数为空!"); |
||||
|
} |
||||
|
if (ObjectUtils.isEmpty(page.getPageSize())) { |
||||
|
return Result.error("页大小为空!"); |
||||
|
} |
||||
|
if (page.getRechargeActivity() == null) { |
||||
|
return Result.error("查询失败:活动信息不能为空"); |
||||
|
} |
||||
|
return Result.success(rechargeActivityCenterService.queryActivity(page.getPageNum(), page.getPageSize(),page.getRechargeActivity())); |
||||
|
} catch (NullPointerException e) { |
||||
|
log.error("查询活动失败:空指针异常", e); |
||||
|
return Result.error("查询失败:数据为空"); |
||||
|
} catch (IllegalArgumentException e) { |
||||
|
log.error("查询活动失败:参数异常", e); |
||||
|
return Result.error("查询失败:" + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增充值活动 |
||||
|
* |
||||
|
* @param activity 充值活动请求参数(包含活动名称、活动规则等信息) |
||||
|
* @return 新增结果(成功返回提示信息,失败返回错误原因) |
||||
|
* @throws NullPointerException 当请求参数为空时抛出(如activity为null、活动名称等关键属性为null) |
||||
|
* @throws IllegalArgumentException 当请求参数无效时抛出(如活动名称为空字符串、参数格式不符合要求等) |
||||
|
*/ |
||||
|
@Log("新增充值活动") |
||||
|
@PostMapping("/addActivity") |
||||
|
public Result addActivity(@RequestBody RechargeActivity activity) { |
||||
|
try { |
||||
|
if (activity == null) { |
||||
|
return Result.error("添加失败:活动信息不能为空"); |
||||
|
} |
||||
|
if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) { |
||||
|
return Result.error("添加失败:活动名称不能为空"); |
||||
|
} |
||||
|
if (activity.getBusinessBelong() == null || activity.getBusinessBelong().trim().isEmpty()) { |
||||
|
return Result.error("添加失败:业绩归属地不能为空"); |
||||
|
}else if (activity.getBusinessBelong().equals("活动归属地")) { |
||||
|
if (activity.getArea() == null || activity.getArea().trim().isEmpty()) { |
||||
|
return Result.error("添加失败:地区不能为空"); |
||||
|
} |
||||
|
} |
||||
|
if (activity.getStartTime() == null) { |
||||
|
return Result.error("添加失败:活动开始时间不能为空"); |
||||
|
} |
||||
|
if (activity.getEndTime() == null) { |
||||
|
return Result.error("添加失败:活动结束时间不能为空"); |
||||
|
} |
||||
|
if (activity.getEndTime().before(activity.getStartTime())) { |
||||
|
return Result.error("添加失败:活动结束时间必须晚于活动开始时间"); |
||||
|
} |
||||
|
if (activity.getCreator() == null || activity.getCreator().trim().isEmpty()) { |
||||
|
return Result.error("添加失败:添加人不能为空"); |
||||
|
} |
||||
|
rechargeActivityCenterService.addActivity(activity); |
||||
|
return Result.success("添加活动成功"); |
||||
|
} catch (NullPointerException e) { |
||||
|
log.error("添加活动失败:空指针异常", e); |
||||
|
return Result.error("添加失败:数据为空"); |
||||
|
} catch (IllegalArgumentException e) { |
||||
|
log.error("添加活动失败:参数异常", e); |
||||
|
return Result.error("添加失败:" + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 更新充值活动 |
||||
|
* |
||||
|
* @param activity 充值活动更新参数(包含活动ID、待更新的活动名称等信息) |
||||
|
* @return 更新结果(成功返回提示信息,失败返回错误原因) |
||||
|
* @throws NullPointerException 当请求参数为空时抛出(如activity为null、活动ID、活动名称等关键属性为null) |
||||
|
* @throws IllegalArgumentException 当请求参数无效时抛出(如活动名称为空字符串、活动ID格式错误等) |
||||
|
*/ |
||||
|
@Log("更新充值活动") |
||||
|
@PostMapping("/updateActivity") |
||||
|
public Result updateActivity(@RequestBody RechargeActivity activity) { |
||||
|
try { |
||||
|
if (activity == null) { |
||||
|
return Result.error("添加失败:活动信息不能为空"); |
||||
|
} |
||||
|
if (activity.getId() == null) { |
||||
|
return Result.error("添加失败:活动ID不能为空"); |
||||
|
} |
||||
|
if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) { |
||||
|
return Result.error("添加失败:活动名称不能为空"); |
||||
|
} |
||||
|
if (activity.getBusinessBelong() == null || activity.getBusinessBelong().trim().isEmpty()) { |
||||
|
return Result.error("添加失败:业绩归属地不能为空"); |
||||
|
}else if (activity.getBusinessBelong().equals("活动归属地")) { |
||||
|
if (activity.getArea() == null || activity.getArea().trim().isEmpty()) { |
||||
|
return Result.error("添加失败:地区不能为空"); |
||||
|
} |
||||
|
} |
||||
|
if (activity.getStartTime() == null) { |
||||
|
return Result.error("添加失败:活动开始时间不能为空"); |
||||
|
} |
||||
|
if (activity.getEndTime() == null) { |
||||
|
return Result.error("添加失败:活动结束时间不能为空"); |
||||
|
} |
||||
|
if (activity.getEndTime().before(activity.getStartTime())) { |
||||
|
return Result.error("添加失败:活动结束时间必须晚于活动开始时间"); |
||||
|
} |
||||
|
if (activity.getCreator() == null || activity.getCreator().trim().isEmpty()) { |
||||
|
return Result.error("添加失败:添加人不能为空"); |
||||
|
} |
||||
|
rechargeActivityCenterService.updateActivity(activity); |
||||
|
return Result.success("更新活动成功"); |
||||
|
} catch (NullPointerException e) { |
||||
|
log.error("更新活动失败:空指针异常", e); |
||||
|
return Result.error("更新失败:数据为空"); |
||||
|
} catch (IllegalArgumentException e) { |
||||
|
log.error("更新活动失败:参数异常", e); |
||||
|
return Result.error("更新失败:" + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除充值活动 |
||||
|
* |
||||
|
* @param activity 待删除的充值活动ID |
||||
|
* @return 删除结果(成功返回提示信息,失败返回错误原因) |
||||
|
* @throws NullPointerException 当活动ID为空时抛出(如id为null) |
||||
|
* @throws IllegalArgumentException 当活动ID无效时抛出(如id为负数、非整数格式等不符合业务要求的情况) |
||||
|
*/ |
||||
|
@Log("删除充值活动") |
||||
|
@PostMapping("/deleteActivity") |
||||
|
public Result deleteActivity(@RequestBody RechargeActivity activity) { |
||||
|
try { |
||||
|
if (activity.getId() == null) { |
||||
|
return Result.error("删除失败:活动ID不能为空"); |
||||
|
} |
||||
|
rechargeActivityCenterService.deleteActivity(activity); |
||||
|
return Result.success("删除活动成功"); |
||||
|
} catch (NullPointerException e) { |
||||
|
log.error("删除活动失败:空指针异常", e); |
||||
|
return Result.error("删除失败:数据为空"); |
||||
|
} catch (IllegalArgumentException e) { |
||||
|
log.error("删除活动失败:参数异常", e); |
||||
|
return Result.error("删除失败:" + e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,39 @@ |
|||||
|
package com.example.demo.domain.DTO; |
||||
|
|
||||
|
import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo; |
||||
|
import com.example.demo.domain.vo.cash.CashCollection; |
||||
|
import jakarta.validation.constraints.NotNull; |
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
/** |
||||
|
* @program: GOLD |
||||
|
* @ClassName CashDTO |
||||
|
* @description: |
||||
|
* @author: huangqizhen |
||||
|
* @create: 2025−11-09 09:26 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
@Data |
||||
|
@AllArgsConstructor |
||||
|
@NoArgsConstructor |
||||
|
public class CashDTO { |
||||
|
private String token; |
||||
|
private String url = ""; |
||||
|
private String fileName = ""; |
||||
|
private Integer sort = 0; |
||||
|
private String field = ""; |
||||
|
private Integer account; |
||||
|
private Integer type = 13; //类型 |
||||
|
private Integer state = 0; //状态 |
||||
|
private String text = ""; //关键词搜索 |
||||
|
private Integer dataNum = 0; |
||||
|
private String deptid = ""; |
||||
|
|
||||
|
@NotNull(message = "page不能为空") |
||||
|
private Integer page = 1; |
||||
|
@NotNull(message = "pageSize不能为空") |
||||
|
private Integer pageSize = 20; |
||||
|
private CashCollection cashCollection; |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
package com.example.demo.domain.DTO; |
||||
|
|
||||
|
import com.example.demo.domain.vo.cash.CashRecordDTO; |
||||
|
import jakarta.validation.constraints.NotNull; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
/** |
||||
|
* @program: GOLD |
||||
|
* @ClassName FinanceDTO |
||||
|
* @description: |
||||
|
* @author: huangqizhen |
||||
|
* @create: 2025−11-06 21:22 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
public class FinanceDTO { |
||||
|
private String token; |
||||
|
private String url = ""; |
||||
|
private String fileName = ""; |
||||
|
private Integer sort = 0; |
||||
|
private String field = ""; |
||||
|
private Integer account; |
||||
|
private Integer type = 12; //类型 |
||||
|
private Integer state = 0; //状态 |
||||
|
private String text = ""; //关键词搜索 |
||||
|
private Integer dataNum = 0; |
||||
|
private String deptid = ""; |
||||
|
private CashRecordDTO cashRecordDTO; |
||||
|
|
||||
|
@NotNull(message = "page不能为空") |
||||
|
private Integer page = 1; |
||||
|
@NotNull(message = "pageSize不能为空") |
||||
|
private Integer pageSize = 5000; |
||||
|
} |
||||
@ -0,0 +1,35 @@ |
|||||
|
package com.example.demo.domain.entity; |
||||
|
|
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
import java.time.LocalDateTime; |
||||
|
|
||||
|
/** |
||||
|
* @program: gold-java |
||||
|
* @ClassName RechargeActivity |
||||
|
* @description: |
||||
|
* @author: Ethan |
||||
|
* @create: 2025−11-04 11:48 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
public class RechargeActivity { |
||||
|
private Integer id; //活动id |
||||
|
private String activityName; //活动名称 |
||||
|
private String businessBelong; //业绩归属地 |
||||
|
private Integer status; //状态 0未开始 1进行中 2已结束(不是实时更新的,仅展示,不要拿这个做校验) |
||||
|
private Integer creator; //添加人 |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private LocalDateTime startTime; // 开始时间(到秒) |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private LocalDateTime endTime; // 结束时间(到秒) |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private LocalDateTime createTime; // 创建日期(到秒) |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private LocalDateTime updateTime; // 更新日期(到秒) |
||||
|
} |
||||
@ -0,0 +1,248 @@ |
|||||
|
package com.example.demo.domain.vo.cash; |
||||
|
|
||||
|
import com.alibaba.excel.annotation.ExcelIgnore; |
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @program: GOLD |
||||
|
* @ClassName CashRecordDTO |
||||
|
* @description: |
||||
|
* @author: huangqizhen |
||||
|
* @create: 2025−11-04 17:03 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
@Data |
||||
|
@AllArgsConstructor |
||||
|
@NoArgsConstructor |
||||
|
public class CashRecordDTO{ |
||||
|
private String activity;// 活动 |
||||
|
private String goodsName;// 商品名称 |
||||
|
private Integer goodsNum;// 商品数量 |
||||
|
private String numUnit;// 商品单位 |
||||
|
private BigDecimal gold;//永久金币 |
||||
|
private BigDecimal free;//免费金币 |
||||
|
private String paymentCurrency;// 支付币种 |
||||
|
private BigDecimal paymentAmount;// 支付金额 |
||||
|
private String receivedCurrency;// 收款币种 |
||||
|
private BigDecimal receivedAmount;// 收款金额 |
||||
|
private BigDecimal handlingCharge;// 手续费 |
||||
|
private String payBankCode;// 付款银行 |
||||
|
private String payType;// 支付方式 |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private LocalDateTime payTime;// 付款时间 |
||||
|
private String receivedMarket;// 收款地区 |
||||
|
private String payVoucher;// 支付凭证 |
||||
|
private String payRemark;// 支付备注 |
||||
|
//提交人 |
||||
|
private String paySubmitter; |
||||
|
//提交人 |
||||
|
private String Submitter; |
||||
|
//审核人 |
||||
|
private String audit; |
||||
|
//到账日期 |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private LocalDateTime receivedTime; |
||||
|
@ExcelIgnore |
||||
|
private List<String> goodsNames;// 商品名称 |
||||
|
@ExcelIgnore |
||||
|
private List<String> markets;// 地区 |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 序号 |
||||
|
*/ |
||||
|
private Integer id; |
||||
|
|
||||
|
/** |
||||
|
* 精网号 |
||||
|
*/ |
||||
|
private Integer jwcode; |
||||
|
|
||||
|
/** |
||||
|
* 姓名 |
||||
|
*/ |
||||
|
private String userName; |
||||
|
private String name; |
||||
|
|
||||
|
/** |
||||
|
* 所属地区 |
||||
|
*/ |
||||
|
private Integer market; |
||||
|
|
||||
|
/** |
||||
|
* 金币订单号 |
||||
|
*/ |
||||
|
private String orderCode; |
||||
|
|
||||
|
/** |
||||
|
* 银行流水订单号 |
||||
|
*/ |
||||
|
private String bankCode; |
||||
|
|
||||
|
/** |
||||
|
* 永久金币 |
||||
|
*/ |
||||
|
private BigDecimal permanentGold; |
||||
|
|
||||
|
/** |
||||
|
* 免费金币 |
||||
|
*/ |
||||
|
private BigDecimal freeGold; |
||||
|
|
||||
|
/** |
||||
|
* 审核人id |
||||
|
*/ |
||||
|
@ExcelIgnore |
||||
|
private Integer auditId; |
||||
|
|
||||
|
/** |
||||
|
* 订单状态(1位代表收款,2位代表退款) |
||||
|
0:线下财务待审核;1:线下财务审核通过待填手续费;2线下财务审核驳回;5:手动撤回待编辑提交 |
||||
|
3:link线上财务复核待填手续费 |
||||
|
4:收款流程全部结束 |
||||
|
6:退款 |
||||
|
--------------------------------------------- |
||||
|
10:地区财务待审核;11:地区财务手动撤回待编辑提交12:地区财务驳回; |
||||
|
20:地区负责人待审核;22:地区负责人驳回; |
||||
|
30:总部财务待审核;32:总部财务驳回; |
||||
|
40:执行人待处理;41:执行人已处理,退款结束 |
||||
|
*/ |
||||
|
private Integer status; |
||||
|
|
||||
|
/** |
||||
|
* 提交人id |
||||
|
*/ |
||||
|
@ExcelIgnore |
||||
|
private Integer submitterId; |
||||
|
|
||||
|
/** |
||||
|
* 提交人地区 |
||||
|
*/ |
||||
|
private String submitterMarket; |
||||
|
|
||||
|
/** |
||||
|
* 转账凭证 |
||||
|
*/ |
||||
|
private String voucher; |
||||
|
|
||||
|
/** |
||||
|
* 备注 |
||||
|
*/ |
||||
|
private String remark; |
||||
|
|
||||
|
/** |
||||
|
* 驳回理由 |
||||
|
*/ |
||||
|
private String rejectReason; |
||||
|
|
||||
|
/** |
||||
|
* 退款备注(理由),客服填写 |
||||
|
*/ |
||||
|
private String refundReason; |
||||
|
|
||||
|
/** |
||||
|
* 退款方式(0全额/1部分) |
||||
|
*/ |
||||
|
private Integer refundModel; |
||||
|
|
||||
|
/** |
||||
|
* 退款执行人OA号 |
||||
|
*/ |
||||
|
private Integer executor; |
||||
|
|
||||
|
/** |
||||
|
* 退款途径 |
||||
|
*/ |
||||
|
private String refundChannels; |
||||
|
|
||||
|
/** |
||||
|
* 退款日期(到天) |
||||
|
*/ |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date refundTime; |
||||
|
|
||||
|
/** |
||||
|
* 退款备注(执行人填写) |
||||
|
*/ |
||||
|
private String refundRemark; |
||||
|
|
||||
|
/** |
||||
|
* 退款截图 |
||||
|
*/ |
||||
|
private String refundVoucher; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date createTime; |
||||
|
|
||||
|
/** |
||||
|
* 更新时间 |
||||
|
*/ |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date updateTime; |
||||
|
|
||||
|
/** |
||||
|
* 审核时间 |
||||
|
*/ |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date auditTime; |
||||
|
|
||||
|
/** |
||||
|
* 退款币种 |
||||
|
*/ |
||||
|
private String refundCurrency; |
||||
|
|
||||
|
/** |
||||
|
* 退款金额 |
||||
|
*/ |
||||
|
private String refundAmount; |
||||
|
|
||||
|
/** |
||||
|
* 关联收款id |
||||
|
*/ |
||||
|
@ExcelIgnore |
||||
|
private Integer relatedId; |
||||
|
@ExcelIgnore |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date startTime; // 开始时间 |
||||
|
@ExcelIgnore |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date endTime; // 结束时间 |
||||
|
private String submitterName; |
||||
|
private String auditName; |
||||
|
private String executorName; |
||||
|
private String marketName; |
||||
|
@ExcelIgnore |
||||
|
private List<Integer> statuses; |
||||
|
@ExcelIgnore |
||||
|
private String processInstanceId; // 流程实例ID |
||||
|
@ExcelIgnore |
||||
|
private String currentTaskId; // 当前任务ID |
||||
|
|
||||
|
private String areaServise; |
||||
|
private String areaFinance; |
||||
|
private String areaCharge; |
||||
|
private String headFinance; |
||||
|
@ExcelIgnore |
||||
|
private String sortField; |
||||
|
@ExcelIgnore |
||||
|
private String sortOrder; |
||||
|
|
||||
|
@ExcelIgnore |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date sTime; // 开始时间 |
||||
|
@ExcelIgnore |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date eTime; // 结束时间 |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,203 @@ |
|||||
|
package com.example.demo.domain.vo.cash; |
||||
|
|
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
import com.alibaba.excel.annotation.ExcelIgnore; |
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
* @TableName cash_record_refund |
||||
|
*/ |
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
public class CashRecordRefund { |
||||
|
/** |
||||
|
* 序号 |
||||
|
*/ |
||||
|
private Integer id; |
||||
|
|
||||
|
/** |
||||
|
* 精网号 |
||||
|
*/ |
||||
|
private Integer jwcode; |
||||
|
|
||||
|
/** |
||||
|
* 姓名 |
||||
|
*/ |
||||
|
private String userName; |
||||
|
private String name; |
||||
|
|
||||
|
/** |
||||
|
* 所属地区 |
||||
|
*/ |
||||
|
private String market; |
||||
|
|
||||
|
/** |
||||
|
* 金币订单号 |
||||
|
*/ |
||||
|
private String orderCode; |
||||
|
|
||||
|
/** |
||||
|
* 银行流水订单号 |
||||
|
*/ |
||||
|
private String bankCode; |
||||
|
|
||||
|
/** |
||||
|
* 永久金币 |
||||
|
*/ |
||||
|
private Integer permanentGold; |
||||
|
|
||||
|
/** |
||||
|
* 免费金币 |
||||
|
*/ |
||||
|
private Integer freeGold; |
||||
|
|
||||
|
/** |
||||
|
* 审核人id |
||||
|
*/ |
||||
|
private Integer auditId; |
||||
|
|
||||
|
/** |
||||
|
* 订单状态(1位代表收款,2位代表退款) |
||||
|
0:线下财务待审核;1:线下财务审核通过待填手续费;2线下财务审核驳回;5:手动撤回待编辑提交 |
||||
|
3:link线上财务复核待填手续费 |
||||
|
4:收款流程全部结束 |
||||
|
6:退款 |
||||
|
--------------------------------------------- |
||||
|
10:地区财务待审核;11:地区财务手动撤回待编辑提交12:地区财务驳回; |
||||
|
20:地区负责人待审核;22:地区负责人驳回; |
||||
|
30:总部财务待审核;32:总部财务驳回; |
||||
|
40:执行人待处理;41:执行人已处理,退款结束 |
||||
|
*/ |
||||
|
private Integer status; |
||||
|
|
||||
|
/** |
||||
|
* 提交人id |
||||
|
*/ |
||||
|
private Integer submitterId; |
||||
|
|
||||
|
/** |
||||
|
* 提交人地区 |
||||
|
*/ |
||||
|
private String submitterMarket; |
||||
|
|
||||
|
/** |
||||
|
* 转账凭证 |
||||
|
*/ |
||||
|
private String voucher; |
||||
|
|
||||
|
/** |
||||
|
* 备注 |
||||
|
*/ |
||||
|
private String remark; |
||||
|
|
||||
|
/** |
||||
|
* 驳回理由 |
||||
|
*/ |
||||
|
private String rejectReason; |
||||
|
|
||||
|
/** |
||||
|
* 退款备注(理由),客服填写 |
||||
|
*/ |
||||
|
private String refundReason; |
||||
|
|
||||
|
/** |
||||
|
* 退款方式(0全额/1部分) |
||||
|
*/ |
||||
|
private Integer refundModel; |
||||
|
|
||||
|
/** |
||||
|
* 退款执行人OA号 |
||||
|
*/ |
||||
|
private Integer executor; |
||||
|
|
||||
|
/** |
||||
|
* 退款途径 |
||||
|
*/ |
||||
|
private String refundChannels; |
||||
|
|
||||
|
/** |
||||
|
* 退款日期(到天) |
||||
|
*/ |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date refundTime; |
||||
|
|
||||
|
/** |
||||
|
* 退款备注(执行人填写) |
||||
|
*/ |
||||
|
private String refundRemark; |
||||
|
|
||||
|
/** |
||||
|
* 退款截图 |
||||
|
*/ |
||||
|
private String refundVoucher; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date createTime; |
||||
|
|
||||
|
/** |
||||
|
* 更新时间 |
||||
|
*/ |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date updateTime; |
||||
|
|
||||
|
/** |
||||
|
* 审核时间 |
||||
|
*/ |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date auditTime; |
||||
|
|
||||
|
/** |
||||
|
* 退款币种 |
||||
|
*/ |
||||
|
private String refundCurrency; |
||||
|
|
||||
|
/** |
||||
|
* 退款金额 |
||||
|
*/ |
||||
|
private String refundAmount; |
||||
|
|
||||
|
/** |
||||
|
* 关联收款id |
||||
|
*/ |
||||
|
private Integer relatedId; |
||||
|
@ExcelIgnore |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date startTime; // 开始时间 |
||||
|
@ExcelIgnore |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date endTime; // 结束时间 |
||||
|
private String submitterName; |
||||
|
private String auditName; |
||||
|
private String executorName; |
||||
|
private String marketName; |
||||
|
private List<Integer> statuses; |
||||
|
|
||||
|
private String processInstanceId; // 流程实例ID |
||||
|
private String currentTaskId; // 当前任务ID |
||||
|
|
||||
|
private String areaServise; |
||||
|
private String areaFinance; |
||||
|
private String areaCharge; |
||||
|
private String headFinance; |
||||
|
private String sortField; |
||||
|
private String sortOrder; |
||||
|
@ExcelIgnore |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date sTime; // 开始时间 |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date eTime; // 结束时间 |
||||
|
private Integer partRefundGold; |
||||
|
private Integer partRefundFree; |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
package com.example.demo.domain.vo.cash; |
||||
|
|
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
/** |
||||
|
* @program: GOLD |
||||
|
* @ClassName LhlAudit |
||||
|
* @description: |
||||
|
* @author: huangqizhen |
||||
|
* @create: 2025−11-05 16:45 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
@Data |
||||
|
@AllArgsConstructor |
||||
|
@NoArgsConstructor |
||||
|
public class LhlAudit { |
||||
|
private Integer id; |
||||
|
private String areaServise;// |
||||
|
private String areaFinance; |
||||
|
private String areaCharge; |
||||
|
private String headFinace; |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
package com.example.demo.domain.vo.coin; |
||||
|
|
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
public class IdName { |
||||
|
private Integer id; |
||||
|
private String name; |
||||
|
} |
||||
@ -0,0 +1,65 @@ |
|||||
|
package com.example.demo.domain.vo.coin; |
||||
|
|
||||
|
import com.alibaba.excel.annotation.ExcelProperty; |
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
/** |
||||
|
* @program: gold-java |
||||
|
* @ClassName RechargeActivity |
||||
|
* @description: 充值活动信息VO类 |
||||
|
* @author: Double |
||||
|
* @create: 2025−10-28 15:00 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
public class RechargeActivity { |
||||
|
|
||||
|
@ExcelProperty("活动ID") |
||||
|
private Integer id; // 活动唯一标识 |
||||
|
|
||||
|
@ExcelProperty("活动名称") |
||||
|
private String activityName; // 活动名称 |
||||
|
|
||||
|
@ExcelProperty("业绩归属地") |
||||
|
private String businessBelong; // 业绩归属地 |
||||
|
|
||||
|
private String area; // 地区 |
||||
|
|
||||
|
@ExcelProperty("地区") |
||||
|
private String areaName; // 地区名 |
||||
|
|
||||
|
@ExcelProperty("活动开始时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date startTime; // 活动开始时间 |
||||
|
|
||||
|
@ExcelProperty("活动结束时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date endTime; // 活动结束时间 |
||||
|
|
||||
|
@ExcelProperty("活动状态") |
||||
|
private String status; // 活动状态(进行中、已结束、未开始) |
||||
|
|
||||
|
private String creator; // 添加人 |
||||
|
|
||||
|
@ExcelProperty("添加人") |
||||
|
private String creatorName; // 添加人名字 |
||||
|
|
||||
|
@ExcelProperty("创建时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date createTime; // 创建时间 |
||||
|
|
||||
|
@ExcelProperty("更新时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date updateTime; // 更新时间 |
||||
|
|
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
||||
|
private Date activityTime; // 活动时间 |
||||
|
} |
||||
@ -0,0 +1,35 @@ |
|||||
|
package com.example.demo.mapper.coin; |
||||
|
|
||||
|
import com.example.demo.domain.vo.coin.RechargeActivity; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @program: gold-java |
||||
|
* @ClassName RechargeActivityCenterMapper |
||||
|
* @description: 充值活动中心Mapper接口 |
||||
|
* @author: Double |
||||
|
* @create: 2025−10-28 14:42 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
|
||||
|
@Mapper |
||||
|
public interface RechargeActivityCenterMapper { |
||||
|
|
||||
|
// 查询所有活动(用于批量更新状态) |
||||
|
List<RechargeActivity> listActivities(); |
||||
|
|
||||
|
// 根据ID查询活动 |
||||
|
List<RechargeActivity> queryActivity(RechargeActivity activity); |
||||
|
|
||||
|
// 新增活动 |
||||
|
void addActivity(RechargeActivity activity); |
||||
|
|
||||
|
// 更新活动 |
||||
|
void updateActivity(RechargeActivity activity); |
||||
|
|
||||
|
// 删除活动 |
||||
|
void deleteActivity(RechargeActivity activity); |
||||
|
} |
||||
@ -0,0 +1,34 @@ |
|||||
|
package com.example.demo.service.coin; |
||||
|
|
||||
|
import com.example.demo.domain.vo.coin.RechargeActivity; |
||||
|
import com.github.pagehelper.PageInfo; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @program: gold-java |
||||
|
* @ClassName RechargeActivityCenterService |
||||
|
* @description: 充值活动中心服务接口 |
||||
|
* @author: Double |
||||
|
* @create: 2025−10-28 14:40 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
|
||||
|
public interface RechargeActivityCenterService { |
||||
|
|
||||
|
|
||||
|
// 根据ID查询活动 |
||||
|
PageInfo<RechargeActivity> queryActivity(Integer pageNum, Integer pageSize, RechargeActivity activity); |
||||
|
|
||||
|
// 新增活动 |
||||
|
void addActivity(RechargeActivity activity); |
||||
|
|
||||
|
// 更新活动 |
||||
|
void updateActivity(RechargeActivity activity); |
||||
|
|
||||
|
// 更新状态 |
||||
|
void updateStatus(); |
||||
|
|
||||
|
// 删除活动 |
||||
|
void deleteActivity(RechargeActivity activity); |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
package com.example.demo.service.listen; |
||||
|
|
||||
|
import com.example.demo.Util.RedisUtil; |
||||
|
import com.example.demo.service.coin.ExportExcelService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
/** |
||||
|
* @program: GOLD |
||||
|
* @ClassName CashListener |
||||
|
* @description: |
||||
|
* @author: huangqizhen |
||||
|
* @create: 2025−11-09 09:42 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
@Component |
||||
|
public class CashListener extends BaseMessageListener<String> { |
||||
|
@Autowired |
||||
|
private ExportExcelService exportExcelService; |
||||
|
|
||||
|
protected CashListener(RedisUtil redisQueueUtil) { |
||||
|
super(redisQueueUtil, "cash:queue:export_queue"); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void handleMessage(String message) { |
||||
|
validateMessage( message); |
||||
|
try { |
||||
|
Thread.sleep(5000); |
||||
|
exportExcelService.CashExcel(message); |
||||
|
} catch (Exception e) { |
||||
|
handleException(e, message); |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
package com.example.demo.service.listen; |
||||
|
|
||||
|
import com.example.demo.Util.RedisUtil; |
||||
|
import com.example.demo.service.coin.ExportExcelService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
/** |
||||
|
* @program: GOLD |
||||
|
* @ClassName FinanceListener |
||||
|
* @description: |
||||
|
* @author: huangqizhen |
||||
|
* @create: 2025−11-06 21:35 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
@Component |
||||
|
public class FinanceListener extends BaseMessageListener<String>{ |
||||
|
@Autowired |
||||
|
private ExportExcelService exportExcelService; |
||||
|
|
||||
|
@Autowired |
||||
|
public FinanceListener(RedisUtil redisQueueUtil) { |
||||
|
super(redisQueueUtil, "finance:queue:export_queue"); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void handleMessage(String message) { |
||||
|
validateMessage( message); |
||||
|
try { |
||||
|
Thread.sleep(5000); |
||||
|
exportExcelService.FinanceExcel(message); |
||||
|
} catch (Exception e) { |
||||
|
handleException(e, message); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,134 @@ |
|||||
|
package com.example.demo.serviceImpl.coin; |
||||
|
|
||||
|
import com.example.demo.domain.vo.coin.RechargeActivity; |
||||
|
import com.example.demo.mapper.coin.RechargeActivityCenterMapper; |
||||
|
import com.example.demo.service.coin.RechargeActivityCenterService; |
||||
|
import com.github.pagehelper.PageHelper; |
||||
|
import com.github.pagehelper.PageInfo; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.time.LocalDateTime; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @program: gold-java |
||||
|
* @ClassName RechargeActivityCenterServiceImpl |
||||
|
* @description: 充值活动中心服务实现类 |
||||
|
* @author: Double |
||||
|
* @create: 2025−10-28 14:40 |
||||
|
* @Version 1.0 |
||||
|
**/ |
||||
|
|
||||
|
@Service |
||||
|
public class RechargeActivityCenterServiceImpl implements RechargeActivityCenterService { |
||||
|
|
||||
|
@Autowired |
||||
|
private RechargeActivityCenterMapper rechargeActivityCenterMapper; |
||||
|
|
||||
|
|
||||
|
// 根据ID查询活动 |
||||
|
@Override |
||||
|
public PageInfo<RechargeActivity> queryActivity(Integer pageNum, Integer pageSize, RechargeActivity activity) { |
||||
|
updateStatus(); |
||||
|
PageHelper.startPage(pageNum, pageSize); |
||||
|
List<RechargeActivity> activityList = rechargeActivityCenterMapper.queryActivity(activity); |
||||
|
return new PageInfo<>(activityList); |
||||
|
} |
||||
|
|
||||
|
// 新增活动 |
||||
|
@Override |
||||
|
public void addActivity(RechargeActivity activity) { |
||||
|
Date startTime = activity.getStartTime(); |
||||
|
Date endTime = activity.getEndTime(); |
||||
|
|
||||
|
//获取当前系统时间(本地时间,与活动时间时区保持一致) |
||||
|
Date now = new Date(); |
||||
|
|
||||
|
//时间范围判断,设置对应状态 |
||||
|
if (now.before(startTime)) { |
||||
|
// 当前时间 < 开始时间 → 未开始(状态0) |
||||
|
activity.setStatus("0"); |
||||
|
} else if (now.after(endTime)) { |
||||
|
// 当前时间 > 结束时间 → 已结束(状态2) |
||||
|
activity.setStatus("2"); |
||||
|
} else { |
||||
|
// 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1) |
||||
|
activity.setStatus("1"); |
||||
|
} |
||||
|
rechargeActivityCenterMapper.addActivity(activity); |
||||
|
} |
||||
|
|
||||
|
// 更新活动 |
||||
|
@Override |
||||
|
public void updateActivity(RechargeActivity activity) { |
||||
|
Date startTime = activity.getStartTime(); |
||||
|
Date endTime = activity.getEndTime(); |
||||
|
|
||||
|
//获取当前系统时间(本地时间,与活动时间时区保持一致) |
||||
|
Date now = new Date(); |
||||
|
|
||||
|
//时间范围判断,设置对应状态 |
||||
|
if (now.before(startTime)) { |
||||
|
// 当前时间 < 开始时间 → 未开始(状态0) |
||||
|
activity.setStatus("0"); |
||||
|
} else if (now.after(endTime)) { |
||||
|
// 当前时间 > 结束时间 → 已结束(状态2) |
||||
|
activity.setStatus("2"); |
||||
|
} else { |
||||
|
// 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1) |
||||
|
activity.setStatus("1"); |
||||
|
} |
||||
|
rechargeActivityCenterMapper.updateActivity(activity); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void updateStatus() { |
||||
|
// 查询所有活动 |
||||
|
List<RechargeActivity> activityList = rechargeActivityCenterMapper.listActivities(); |
||||
|
|
||||
|
if (activityList == null || activityList.isEmpty()) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
Date now = new Date(); |
||||
|
|
||||
|
// 遍历所有活动,更新状态 |
||||
|
for (RechargeActivity activity : activityList) { |
||||
|
Date startTime = activity.getStartTime(); |
||||
|
Date endTime = activity.getEndTime(); |
||||
|
|
||||
|
// 跳过时间为空的活动 |
||||
|
if (startTime == null || endTime == null) { |
||||
|
continue; |
||||
|
} |
||||
|
|
||||
|
String newStatus; |
||||
|
|
||||
|
// 时间范围判断,设置对应状态 |
||||
|
if (now.before(startTime)) { |
||||
|
// 当前时间 < 开始时间 → 未开始(状态0) |
||||
|
newStatus = "0"; |
||||
|
} else if (now.after(endTime)) { |
||||
|
// 当前时间 > 结束时间 → 已结束(状态2) |
||||
|
newStatus = "2"; |
||||
|
} else { |
||||
|
// 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1) |
||||
|
newStatus = "1"; |
||||
|
} |
||||
|
|
||||
|
// 只有当状态发生变化时才更新 |
||||
|
if (!newStatus.equals(activity.getStatus())) { |
||||
|
activity.setStatus(newStatus); |
||||
|
rechargeActivityCenterMapper.updateActivity(activity); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 删除活动 |
||||
|
@Override |
||||
|
public void deleteActivity(RechargeActivity activity) { |
||||
|
rechargeActivityCenterMapper.deleteActivity(activity); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,110 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="com.example.demo.mapper.coin.RechargeActivityCenterMapper"> |
||||
|
|
||||
|
|
||||
|
<!-- 查询所有活动(用于批量更新状态) --> |
||||
|
<select id="listActivities" resultType="com.example.demo.domain.vo.coin.RechargeActivity"> |
||||
|
SELECT |
||||
|
ra.id, |
||||
|
ra.start_time as startTime, |
||||
|
ra.end_time as endTime, |
||||
|
ra.status as status |
||||
|
FROM recharge_activity ra |
||||
|
WHERE ra.flag = 1 |
||||
|
ORDER BY ra.update_time DESC |
||||
|
</select> |
||||
|
|
||||
|
<!-- 查询活动 --> |
||||
|
<select id="queryActivity" resultType="com.example.demo.domain.vo.coin.RechargeActivity"> |
||||
|
SELECT |
||||
|
ra.id, |
||||
|
ra.activity_name as activityName, |
||||
|
ra.business_belong as businessBelong, |
||||
|
ra.area, |
||||
|
m.name as areaName, |
||||
|
ra.start_time as startTime, |
||||
|
ra.end_time as endTime, |
||||
|
ra.status, |
||||
|
ra.creator, |
||||
|
a.admin_name as creatorName, |
||||
|
ra.create_time as createTime, |
||||
|
ra.update_time as updateTime |
||||
|
FROM recharge_activity ra |
||||
|
LEFT JOIN admin a on a.id = ra.creator |
||||
|
LEFT JOIN market m on m.id = ra.area |
||||
|
<where> |
||||
|
ra.flag = 1 |
||||
|
<if test="activityName != null and activityName != ''"> |
||||
|
AND ra.activity_name = #{activityName} |
||||
|
</if> |
||||
|
<if test="businessBelong != null and businessBelong != ''"> |
||||
|
AND ra.business_belong = #{businessBelong} |
||||
|
</if> |
||||
|
|
||||
|
<if test="endTime != null"> |
||||
|
AND #{endTime} >= ra.end_time |
||||
|
</if> |
||||
|
<if test="startTime != null"> |
||||
|
AND ra.start_time >= #{startTime} |
||||
|
</if> |
||||
|
<if test="area != null"> |
||||
|
AND ra.area = #{area} |
||||
|
</if> |
||||
|
</where> |
||||
|
<trim prefix="ORDER BY" suffixOverrides=","> |
||||
|
ra.update_time DESC |
||||
|
</trim> |
||||
|
</select> |
||||
|
|
||||
|
<!-- 新增活动 --> |
||||
|
<insert id="addActivity" parameterType="com.example.demo.domain.vo.coin.RechargeActivity"> |
||||
|
INSERT INTO recharge_activity ( |
||||
|
activity_name, |
||||
|
business_belong, |
||||
|
area, |
||||
|
start_time, |
||||
|
end_time, |
||||
|
status, |
||||
|
creator, |
||||
|
create_time |
||||
|
) VALUES ( |
||||
|
#{activityName}, |
||||
|
#{businessBelong}, |
||||
|
#{area}, |
||||
|
#{startTime}, |
||||
|
#{endTime}, |
||||
|
#{status}, |
||||
|
#{creator}, |
||||
|
NOW() |
||||
|
) |
||||
|
</insert> |
||||
|
|
||||
|
<!-- 更新活动 --> |
||||
|
<update id="updateActivity" parameterType="com.example.demo.domain.vo.coin.RechargeActivity"> |
||||
|
UPDATE recharge_activity |
||||
|
<set> |
||||
|
<if test="activityName != null">activity_name = #{activityName},</if> |
||||
|
<if test="businessBelong != null">business_belong = #{businessBelong},</if> |
||||
|
<if test="area != null">area = #{area},</if> |
||||
|
<if test="startTime != null">start_time = #{startTime},</if> |
||||
|
<if test="endTime != null">end_time = #{endTime},</if> |
||||
|
<if test="status != null">status = #{status},</if> |
||||
|
<if test="creator != null">creator = #{creator},</if> |
||||
|
update_time = NOW() |
||||
|
</set> |
||||
|
WHERE id = #{id} |
||||
|
</update> |
||||
|
|
||||
|
<!-- 删除活动 --> |
||||
|
<!-- 删除活动 --> |
||||
|
<update id="deleteActivity" parameterType="com.example.demo.domain.vo.coin.RechargeActivity"> |
||||
|
UPDATE recharge_activity |
||||
|
<set> |
||||
|
flag = 0, |
||||
|
update_time = NOW() |
||||
|
</set> |
||||
|
WHERE id = #{id} |
||||
|
</update> |
||||
|
|
||||
|
</mapper> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue