From 65aaaf39c821d7b1f1b6226f54e7301b3f26371f Mon Sep 17 00:00:00 2001 From: 77 <77@77.com> Date: Mon, 25 Mar 2024 22:48:10 +0800 Subject: [PATCH] init --- .../xq/controller/WxTransDataController.java | 84 +++++++++++ .../xq/controller/WxTransLogController.java | 70 +++++++++ .../controller/app/AccountAppController.java | 40 +++++- .../main/java/com/ruoyi/xq/domain/User.java | 3 + .../java/com/ruoyi/xq/domain/VipPrice.java | 2 + .../java/com/ruoyi/xq/domain/WxTransData.java | 71 +++++++++ .../java/com/ruoyi/xq/domain/WxTransLog.java | 52 +++++++ .../xq/dto/app/account/StarWxTransReq.java | 12 ++ .../dto/app/account/WxTransDataListAppVo.java | 41 ++++++ .../xq/dto/app/account/WxTransDataQuery.java | 16 +++ .../xq/dto/app/account/WxTransLogListVo.java | 28 ++++ .../xq/dto/app/account/WxTransLogQuery.java | 10 ++ .../com/ruoyi/xq/dto/app/pay/ConsumeResp.java | 2 + .../java/com/ruoyi/xq/enums/ErrorEnum.java | 3 +- .../enums/account/WxTransDataStatusEnum.java | 19 +++ .../xq/enums/account/WxTransLogCateEnum.java | 26 ++++ .../WxTransSourceEnum.java | 2 +- .../com/ruoyi/xq/manager/LoginManager.java | 6 +- .../java/com/ruoyi/xq/manager/PayManager.java | 29 ++++ .../com/ruoyi/xq/mapper/UserExtendMapper.java | 1 + .../ruoyi/xq/mapper/WxTransDataMapper.java | 19 +++ .../com/ruoyi/xq/mapper/WxTransLogMapper.java | 14 ++ .../ruoyi/xq/service/UserExtendService.java | 6 +- .../ruoyi/xq/service/WxTransDataService.java | 22 +++ .../ruoyi/xq/service/WxTransLogService.java | 24 ++++ .../ruoyi/xq/service/WxTransOrderService.java | 12 +- .../service/impl/UserExtendServiceImpl.java | 29 +++- .../xq/service/impl/VipOrderServiceImpl.java | 1 + .../service/impl/WxTransDataServiceImpl.java | 136 ++++++++++++++++++ .../service/impl/WxTransLogServiceImpl.java | 104 ++++++++++++++ .../service/impl/WxTransOrderServiceImpl.java | 55 ++++++- .../resources/mapper/xq/UserExtendMapper.xml | 5 + .../resources/mapper/xq/WxTransDataMapper.xml | 26 ++++ .../resources/mapper/xq/WxTransLogMapper.xml | 19 +++ 34 files changed, 966 insertions(+), 23 deletions(-) create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/controller/WxTransDataController.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/controller/WxTransLogController.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/domain/WxTransData.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/domain/WxTransLog.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/StarWxTransReq.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransDataListAppVo.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransDataQuery.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransLogListVo.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransLogQuery.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransDataStatusEnum.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransLogCateEnum.java rename ruoyi-xq/src/main/java/com/ruoyi/xq/enums/{wxtrans => account}/WxTransSourceEnum.java (89%) create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/WxTransDataMapper.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/WxTransLogMapper.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransDataService.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransLogService.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransDataServiceImpl.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransLogServiceImpl.java create mode 100644 ruoyi-xq/src/main/resources/mapper/xq/WxTransDataMapper.xml create mode 100644 ruoyi-xq/src/main/resources/mapper/xq/WxTransLogMapper.xml diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/WxTransDataController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/WxTransDataController.java new file mode 100644 index 0000000..f97762a --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/WxTransDataController.java @@ -0,0 +1,84 @@ +package com.ruoyi.xq.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.xq.domain.WxTransData; +import com.ruoyi.xq.service.WxTransDataService; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Arrays; + +/** + * 微信交换数据 + * + * @author 77 + * @date 2024-03-25 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/xq/wxTransData") +public class WxTransDataController extends BaseController { + + private final WxTransDataService wxTransDataService; + + /** + * 查询微信交换数据列表 + */ + @SaCheckPermission("xq:wxTransData:list") + @GetMapping("/list") + public TableDataInfo list(WxTransData bo, PageQuery pageQuery) { + Page page = wxTransDataService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + return TableDataInfo.build(page); + } + + /** + * 获取微信交换数据详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("xq:wxTransData:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(wxTransDataService.getById(id)); + } + + + /** + * 修改微信交换数据 + */ + @SaCheckPermission("xq:wxTransData:edit") + @Log(title = "微信交换数据", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WxTransData bo) { + return toAjax(wxTransDataService.updateById(bo)); + } + + /** + * 删除微信交换数据 + * + * @param ids 主键串 + */ + @SaCheckPermission("xq:wxTransData:remove") + @Log(title = "微信交换数据", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(wxTransDataService.removeBatchByIds(Arrays.asList(ids))); + } +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/WxTransLogController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/WxTransLogController.java new file mode 100644 index 0000000..1c721f2 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/WxTransLogController.java @@ -0,0 +1,70 @@ +package com.ruoyi.xq.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.xq.domain.WxTransLog; +import com.ruoyi.xq.service.WxTransLogService; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Arrays; + +/** + * 微信交换记录 + * + * @author 77 + * @date 2024-03-25 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/xq/wxTransLog") +public class WxTransLogController extends BaseController { + + private final WxTransLogService wxTransLogService; + + /** + * 查询微信交换记录列表 + */ + @SaCheckPermission("xq:wxTransLog:list") + @GetMapping("/list") + public TableDataInfo list(WxTransLog bo, PageQuery pageQuery) { + Page page = wxTransLogService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + return TableDataInfo.build(page); + } + + /** + * 获取微信交换记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("xq:wxTransLog:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(wxTransLogService.getById(id)); + } + + /** + * 删除微信交换记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("xq:wxTransLog:remove") + @Log(title = "微信交换记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(wxTransLogService.removeBatchByIds(Arrays.asList(ids))); + } +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AccountAppController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AccountAppController.java index 264e0b7..09ffa3b 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AccountAppController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AccountAppController.java @@ -9,16 +9,13 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.xq.domain.UserExtend; import com.ruoyi.xq.domain.WxTransOrder; -import com.ruoyi.xq.dto.app.account.AccountDetailVo; -import com.ruoyi.xq.dto.app.account.AccountInfoVO; +import com.ruoyi.xq.dto.app.account.*; import com.ruoyi.xq.dto.app.pay.OrderCreateVo; import com.ruoyi.xq.dto.app.wxtrans.GenWxTransOrderReq; import com.ruoyi.xq.dto.app.wxtrans.WxTransPriceAppVo; import com.ruoyi.xq.enums.common.SystemConfigEnum; import com.ruoyi.xq.manager.SystemConfigManager; -import com.ruoyi.xq.service.AccountChangeLogService; -import com.ruoyi.xq.service.UserExtendService; -import com.ruoyi.xq.service.WxTransOrderService; +import com.ruoyi.xq.service.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; @@ -38,6 +35,10 @@ public class AccountAppController { private WxTransOrderService wxTransOrderService; @Autowired private SystemConfigManager systemConfigManager; + @Autowired + private WxTransDataService wxTransDataService; + @Autowired + private WxTransLogService wxTransLogService; @GetMapping("/info") @Operation(summary = "当前用户信息的账户余额情况") @@ -74,7 +75,7 @@ public class AccountAppController { @Log(title = "生成微信交换订单", businessType = BusinessType.OTHER, isSaveDb = false) public R createWxTransOrder(@RequestBody GenWxTransOrderReq req){ Long userId = LoginHelper.getUserId(); - WxTransOrder vipOrder = wxTransOrderService.createVipOrder(userId, req.getWxTransNum()); + WxTransOrder vipOrder = wxTransOrderService.createWxTransOrder(userId, req.getWxTransNum()); OrderCreateVo result = new OrderCreateVo(); result.setPrice(vipOrder.getWxPrice()); result.setOrderNo(vipOrder.getOrderNo()); @@ -82,5 +83,32 @@ public class AccountAppController { return R.ok(result); } + @PostMapping("/wxTrans/star") + @Operation(summary = "发起交换微信") + @Log(title = "发起交换微信", businessType = BusinessType.OTHER, isSaveDb = false) + public R starWxTrans(@RequestBody StarWxTransReq starWxTransReq){ + starWxTransReq.setSponsorUserId(LoginHelper.getUserId()); + wxTransDataService.start(starWxTransReq); + return R.ok(); + } + + @GetMapping("/wxTrans/data/page") + @Operation(summary = "查询交换微信数据") + @Log(title = "发起交换微信", businessType = BusinessType.OTHER, isSaveDb = false) + public R> wxTransDataPage(PageQuery pageQuery, WxTransDataQuery wxTransDataQuery){ + wxTransDataQuery.setUserId(LoginHelper.getUserId()); + Page page = wxTransDataService.pageApp(pageQuery, wxTransDataQuery); + return R.ok(PageModel.build(page)); + } + + @GetMapping("/wxTrans/log/page") + @Operation(summary = "查询交换微信账户明细") + @Log(title = "查询交换微信账户明细", businessType = BusinessType.OTHER, isSaveDb = false) + public R> wxTransLogPage(PageQuery pageQuery, WxTransLogQuery query){ + query.setUserId(LoginHelper.getUserId()); + Page page = wxTransLogService.pageApp(pageQuery, query); + return R.ok(PageModel.build(page)); + } + } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/User.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/User.java index 18b7cb8..c3d77bb 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/User.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/User.java @@ -140,6 +140,9 @@ public class User implements Serializable { @Schema(description = "基础资料是否完成 0 未完成 1已完成") private Integer finishBaseStatus; + @Schema(description = "微信号") + private String wxCode; + /** * 基础信息完成进度 */ diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/VipPrice.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/VipPrice.java index 783ea4b..d9f4f64 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/VipPrice.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/VipPrice.java @@ -43,6 +43,8 @@ public class VipPrice implements Serializable { */ @Schema(description = "会员价格") private BigDecimal vipPrice; + @Schema(description = "赠送微信交换次数") + private Long giveWxTransNum; /** * 1-启用 0-禁用 */ diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/WxTransData.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/WxTransData.java new file mode 100644 index 0000000..88dc34d --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/WxTransData.java @@ -0,0 +1,71 @@ +package com.ruoyi.xq.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 微信交换数据对象 xq_wx_trans_data + * + * @author 77 + * @date 2024-03-25 + */ +@Data +@TableName("xq_wx_trans_data") +public class WxTransData implements Serializable { + + private static final long serialVersionUID=1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + /** + * 发起用户Id + */ + private Long sponsorUserId; + /** + * 发起用户号 + */ + private String sponsorUsercode; + /** + * 发起用户的微信 + */ + private String sponsorWx; + /** + * 接受用户ID + */ + private Long receiveUserId; + /** + * 接受用户号 + */ + private String receiveUsercode; + /** + * 接受用户的微信 + */ + private String receiveWx; + /** + * 0-待接收 1-接受交换 2-拒绝交换 + */ + private Integer status; + /** + * 后台操作管理员ID + */ + private Long adminId; + /** + * 后台操作管理员ID + */ + private String adminName; + + private String traceId; + + private LocalDateTime opTime; + + private LocalDateTime createTime; + private LocalDateTime updateTime; + +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/WxTransLog.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/WxTransLog.java new file mode 100644 index 0000000..0ba06cb --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/WxTransLog.java @@ -0,0 +1,52 @@ +package com.ruoyi.xq.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 微信交换记录对象 xq_wx_trans_log + * + * @author 77 + * @date 2024-03-25 + */ +@Data +@TableName("xq_wx_trans_log") +public class WxTransLog implements Serializable { + + private static final long serialVersionUID=1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + /** + * 用户ID + */ + private Long userId; + /** + * 用户编号 + */ + private String usercode; + private String traceId; + private Long tarUserId; + private String tarUsercode; + private String tarUserJson; + private String remark; + /** + * 操作类型 + */ + private Integer cateId; + private String cateName; + /** + * 微信交换次数变化 + */ + private Long changeValue; + + private LocalDateTime createTime; + private LocalDateTime updateTime; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/StarWxTransReq.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/StarWxTransReq.java new file mode 100644 index 0000000..8aa8361 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/StarWxTransReq.java @@ -0,0 +1,12 @@ +package com.ruoyi.xq.dto.app.account; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class StarWxTransReq { + @Schema(hidden = true) + private Long sponsorUserId; + @Schema(description = "接受的用户ID") + private Long receiveUserId; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransDataListAppVo.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransDataListAppVo.java new file mode 100644 index 0000000..178601b --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransDataListAppVo.java @@ -0,0 +1,41 @@ +package com.ruoyi.xq.dto.app.account; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Data +public class WxTransDataListAppVo { + private Long id; + @Schema(description = "用户ID") + private Long userId; + @Schema(description = "用户编号") + private String usercode; + @Schema(description = "用户头像") + private String avatar; + @Schema(description = "性别 0-未知 1-女 2-男") + private Integer gender; + @Schema(description = "昵称") + private String nickname; + @Schema(description = "生日") + private LocalDate birthday; + @Schema(description = "生日-缩减显示") + private String birthdayStr; + @Schema(description = "年龄") + private Integer age; + @Schema(description = "居住城市名称") + private String residenceCityName; + @Schema(description = "学历") + private Integer education; + @Schema(description = "职业") + private String profession; + + @Schema(description = "微信号") + private String wxCode; + @Schema(description = "操作时间") + private LocalDateTime createTime; + @Schema(description = "0-待接收 1-接受交换 2-拒绝交换") + private Integer status; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransDataQuery.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransDataQuery.java new file mode 100644 index 0000000..3cf3f2b --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransDataQuery.java @@ -0,0 +1,16 @@ +package com.ruoyi.xq.dto.app.account; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class WxTransDataQuery { + @Schema(hidden = true) + private Long userId; + + @Schema(description = "0-待接收 1-接受交换 2-拒绝交换") + private Integer status; + + @Schema(description = "1-我发起的微信交换 2-我接受的微信交换 3-和我有关的微信交换") + private Integer type; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransLogListVo.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransLogListVo.java new file mode 100644 index 0000000..022b192 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransLogListVo.java @@ -0,0 +1,28 @@ +package com.ruoyi.xq.dto.app.account; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class WxTransLogListVo { + @Schema(description = "用户ID") + private Long userId; + @Schema(description = "用户编号") + private String usercode; + @Schema(description = "来源的用户ID") + private Long sourceUserId; + @Schema(description = "来源的用户昵称") + private String sourceNickname; + @Schema(description = "来源的头像") + private String sourceImg; + @Schema(description = "标题分类") + private String title; + @Schema(description = "内容") + private String content; + @Schema(description = "创建时间") + private LocalDateTime createTime; + @Schema(description = "次数变化值") + private Long changeValue; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransLogQuery.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransLogQuery.java new file mode 100644 index 0000000..117a14c --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WxTransLogQuery.java @@ -0,0 +1,10 @@ +package com.ruoyi.xq.dto.app.account; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class WxTransLogQuery { + @Schema(description = "用户ID") + private Long userId; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/pay/ConsumeResp.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/pay/ConsumeResp.java index 2137e6d..6a86109 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/pay/ConsumeResp.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/pay/ConsumeResp.java @@ -11,4 +11,6 @@ public class ConsumeResp { private String traceId; private Long consumerId; private boolean success; + + private Long vipId; } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/ErrorEnum.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/ErrorEnum.java index 1e887cb..cacc950 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/ErrorEnum.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/ErrorEnum.java @@ -5,7 +5,8 @@ import lombok.Getter; @Getter public enum ErrorEnum implements IErrorService { - VIP_AUTH(600100,"权限不足,需要开通VIP") + VIP_AUTH(600100,"权限不足,需要开通VIP"), + WX_TRANS_ERROR(600200,"微信交换次数余额不足"), ; private final Integer code; private final String text; diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransDataStatusEnum.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransDataStatusEnum.java new file mode 100644 index 0000000..9e11157 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransDataStatusEnum.java @@ -0,0 +1,19 @@ +package com.ruoyi.xq.enums.account; + +import lombok.Getter; + +//0-待接收 1-接受交换 2-拒绝交换 +@Getter +public enum WxTransDataStatusEnum { + READY(0,"待接受"), + SUCCESS(1,"接受交换"), + FAIL(2,"拒绝交换"), + ; + private final Integer code; + private final String text; + + WxTransDataStatusEnum(Integer code, String text) { + this.code = code; + this.text = text; + } +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransLogCateEnum.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransLogCateEnum.java new file mode 100644 index 0000000..3c8c91e --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransLogCateEnum.java @@ -0,0 +1,26 @@ +package com.ruoyi.xq.enums.account; + +import lombok.Getter; + +import java.util.Arrays; + +@Getter +public enum WxTransLogCateEnum { + CONSUMER(1,"消费"), + VIP_GIVE(2,"开通vip赠送"), + ORDER(3,"购买"), + SYSTEM(4,"系统调账"), + + ; + private final Integer code; + private final String text; + + WxTransLogCateEnum(Integer code, String text) { + this.code = code; + this.text = text; + } + + public static WxTransLogCateEnum getByCode(Integer code){ + return Arrays.stream(WxTransLogCateEnum.values()).filter(i -> i.getCode().equals(code)).findFirst().orElse(null); + } +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/wxtrans/WxTransSourceEnum.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransSourceEnum.java similarity index 89% rename from ruoyi-xq/src/main/java/com/ruoyi/xq/enums/wxtrans/WxTransSourceEnum.java rename to ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransSourceEnum.java index 119d269..85ffc8e 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/wxtrans/WxTransSourceEnum.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WxTransSourceEnum.java @@ -1,4 +1,4 @@ -package com.ruoyi.xq.enums.wxtrans; +package com.ruoyi.xq.enums.account; import lombok.Getter; diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/LoginManager.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/LoginManager.java index a23c657..011bd8c 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/LoginManager.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/LoginManager.java @@ -73,11 +73,6 @@ public class LoginManager { if(user == null){ throw new ServiceException("用户不存在或密码错误"); } - /*String imei = ServletUtils.getImei(); - UserForbidManager.CheckForbid forbid = userForbidManager.checkForbid(user.getId(), user.getUsercode(), imei, ServletUtils.getClientIP()); - if(forbid != null && forbid.isForbid()){ - throw new ServiceException(forbid.getMessage()); - }*/ if(user.getStatus() != 0){ throw new ServiceException("用户已封禁,请联系客服"); } @@ -180,6 +175,7 @@ public class LoginManager { add.setType(0); add.setPassword(BCrypt.hashpw(usercode+"用户手动滑稽安康黄鼠狼")); add.setMobile(mobile); + add.setWxCode(mobile); add.setGender(UserGenderEnum.NONE.getCode()); add.setAvatar(cos + UserGenderEnum.NONE.getDefaultAvatar()); add.setImToken(IdUtil.simpleUUID()); diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/PayManager.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/PayManager.java index 90f20fa..0a9b7c8 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/PayManager.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/PayManager.java @@ -1,5 +1,6 @@ package com.ruoyi.xq.manager; +import com.ruoyi.xq.domain.VipPrice; import com.ruoyi.xq.dto.app.pay.ConsumeResp; import com.ruoyi.xq.enums.common.OrderTypeEnum; import com.ruoyi.xq.enums.pay.PlatformTypeEnum; @@ -7,6 +8,8 @@ import com.ruoyi.xq.mq.AmqpProducer; import com.ruoyi.xq.mq.handle.dto.CalculateSalesHandleDTO; import com.ruoyi.xq.service.UserExtendService; import com.ruoyi.xq.service.VipOrderService; +import com.ruoyi.xq.service.VipPriceService; +import com.ruoyi.xq.service.WxTransOrderService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -22,6 +25,12 @@ public class PayManager { private UserExtendService userExtendService; @Autowired private AmqpProducer amqpProducer; + @Autowired + private VipPriceService vipPriceService; + @Autowired + private WxTransOrderService wxTransOrderService; + + public void callBack(String orderNo, Map params, String appId, PlatformTypeEnum payTypeEnum){ OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo); if(orderTypeEnum == null){ @@ -47,6 +56,26 @@ public class PayManager { }catch (Exception e){ log.error("RabbitMq 发送失败, 充值分销流程流转失败!",e); } + try { + if(vipResp.getVipId() != null){ + VipPrice vipPrice = vipPriceService.getById(vipResp.getVipId()); + if(vipPrice != null && vipPrice.getGiveWxTransNum() > 0){ + } + } + }catch (Exception e){ + log.error("开通会员赠送次数失败",e); + } + } + break; + case WX_TRANS: + ConsumeResp consumeResp = wxTransOrderService.doSuccess(orderNo, params, appId, payTypeEnum); + if(consumeResp.isSuccess()){ + try { + // 用户消费统计 + userExtendService.incsConsumeTotal(consumeResp.getUserId(), consumeResp.getPrice()); + }catch (Exception e){ + log.error("用户微信交换次数消费统计",e); + } } break; default: diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserExtendMapper.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserExtendMapper.java index 06c8f9c..b1da17e 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserExtendMapper.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserExtendMapper.java @@ -30,4 +30,5 @@ public interface UserExtendMapper extends BaseMapper { boolean incsConsumeTotal(@Param("userId") Long userId, @Param("consumeMonty") BigDecimal consumeMonty); + boolean incsWxTransNum(@Param("userId") Long userId, @Param("num") int num); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/WxTransDataMapper.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/WxTransDataMapper.java new file mode 100644 index 0000000..33efdff --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/WxTransDataMapper.java @@ -0,0 +1,19 @@ +package com.ruoyi.xq.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.xq.domain.WxTransData; +import com.ruoyi.xq.dto.app.account.StarWxTransReq; +import com.ruoyi.xq.dto.app.account.WxTransDataQuery; +import org.apache.ibatis.annotations.Param; + +/** + * 微信交换数据Mapper接口 + * + * @author 77 + * @date 2024-03-25 + */ +public interface WxTransDataMapper extends BaseMapper { + + Page pageApp(@Param("build") Page build, @Param("query") WxTransDataQuery query); +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/WxTransLogMapper.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/WxTransLogMapper.java new file mode 100644 index 0000000..6ff9d69 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/WxTransLogMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.xq.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.xq.domain.WxTransLog; + +/** + * 微信交换记录Mapper接口 + * + * @author 77 + * @date 2024-03-25 + */ +public interface WxTransLogMapper extends BaseMapper { + +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserExtendService.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserExtendService.java index e5ac45c..2345edb 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserExtendService.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserExtendService.java @@ -4,11 +4,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.xq.domain.ConsumeLog; +import com.ruoyi.xq.domain.User; import com.ruoyi.xq.domain.UserExtend; import com.ruoyi.xq.dto.admin.user.UserExtendAdminVo; import com.ruoyi.xq.dto.admin.user.req.UpdateIncomeCoinReq; import com.ruoyi.xq.dto.admin.user.req.UpdateWxTransNumReq; -import com.ruoyi.xq.dto.app.account.AccountDetailVo; +import com.ruoyi.xq.enums.account.WxTransLogCateEnum; import com.ruoyi.xq.enums.user.AccountChangeCodeEnum; import java.math.BigDecimal; @@ -35,8 +36,11 @@ public interface UserExtendService extends IService { void updateWxTransNum(UpdateWxTransNumReq bo); + boolean consumeWxTrans(Long sponsorUserId, User receiveUser, String traceId); + boolean incsWxTrans(Long userId,Integer wxTransNum, WxTransLogCateEnum cateEnum, String traceId, String remark); UserExtend getByUserId(Long id); + } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransDataService.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransDataService.java new file mode 100644 index 0000000..df67879 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransDataService.java @@ -0,0 +1,22 @@ +package com.ruoyi.xq.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.xq.domain.WxTransData; +import com.ruoyi.xq.dto.app.account.StarWxTransReq; +import com.ruoyi.xq.dto.app.account.WxTransDataListAppVo; +import com.ruoyi.xq.dto.app.account.WxTransDataQuery; + +/** + * 微信交换数据Service接口 + * + * @author 77 + * @date 2024-03-25 + */ +public interface WxTransDataService extends IService { + + void start(StarWxTransReq starWxTransReq); + + Page pageApp(PageQuery pageQuery, WxTransDataQuery wxTransDataQuery); +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransLogService.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransLogService.java new file mode 100644 index 0000000..026b01d --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransLogService.java @@ -0,0 +1,24 @@ +package com.ruoyi.xq.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.xq.domain.User; +import com.ruoyi.xq.domain.WxTransLog; +import com.ruoyi.xq.dto.app.account.WxTransLogListVo; +import com.ruoyi.xq.dto.app.account.WxTransLogQuery; +import com.ruoyi.xq.enums.account.WxTransLogCateEnum; + +/** + * 微信交换记录Service接口 + * + * @author 77 + * @date 2024-03-25 + */ +public interface WxTransLogService extends IService { + Page pageApp(PageQuery pageQuery, WxTransLogQuery query); + + void consumerSaveLog(Long sponsorUserId, String traceId, User receiveUser); + + void saveLog(Long userId, Integer wxTransNum, WxTransLogCateEnum cateEnum, String traceId, String remark); +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransOrderService.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransOrderService.java index cf05dcd..4c8a7a2 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransOrderService.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/WxTransOrderService.java @@ -5,6 +5,11 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.xq.domain.WxTransOrder; import com.ruoyi.xq.dto.admin.wxtrans.WxTransOrderAdminVo; +import com.ruoyi.xq.dto.app.pay.ConsumeResp; +import com.ruoyi.xq.enums.pay.PlatformTypeEnum; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Map; /** * 微信交换订单Service接口 @@ -14,7 +19,12 @@ import com.ruoyi.xq.dto.admin.wxtrans.WxTransOrderAdminVo; */ public interface WxTransOrderService extends IService { - WxTransOrder createVipOrder(Long userId, Integer wxTransNum); + WxTransOrder createWxTransOrder(Long userId, Integer wxTransNum); + + WxTransOrder getByOrderNo(String orderNo); + + @Transactional(rollbackFor = Exception.class) + ConsumeResp doSuccess(String orderNo, Map params, String appId, PlatformTypeEnum payTypeEnum); Page pageAdmin(PageQuery pageQuery, WxTransOrderAdminVo bo); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserExtendServiceImpl.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserExtendServiceImpl.java index 97e6f5a..5f23614 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserExtendServiceImpl.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserExtendServiceImpl.java @@ -14,21 +14,18 @@ import com.ruoyi.xq.domain.WxTransOrder; import com.ruoyi.xq.dto.admin.user.UserExtendAdminVo; import com.ruoyi.xq.dto.admin.user.req.UpdateIncomeCoinReq; import com.ruoyi.xq.dto.admin.user.req.UpdateWxTransNumReq; -import com.ruoyi.xq.dto.app.account.AccountDetailVo; +import com.ruoyi.xq.enums.account.WxTransLogCateEnum; import com.ruoyi.xq.enums.common.OrderTypeEnum; import com.ruoyi.xq.enums.common.SystemConfigEnum; import com.ruoyi.xq.enums.consumer.ConsumerTypeEnum; import com.ruoyi.xq.enums.pay.PayStatusEnum; import com.ruoyi.xq.enums.pay.PlatformTypeEnum; import com.ruoyi.xq.enums.user.AccountChangeCodeEnum; -import com.ruoyi.xq.enums.wxtrans.WxTransSourceEnum; +import com.ruoyi.xq.enums.account.WxTransSourceEnum; import com.ruoyi.xq.manager.OrderNoUtil; import com.ruoyi.xq.manager.SystemConfigManager; import com.ruoyi.xq.mapper.UserExtendMapper; -import com.ruoyi.xq.service.AccountChangeLogService; -import com.ruoyi.xq.service.UserExtendService; -import com.ruoyi.xq.service.UserService; -import com.ruoyi.xq.service.WxTransOrderService; +import com.ruoyi.xq.service.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -55,6 +52,8 @@ public class UserExtendServiceImpl extends ServiceImpl im resp.setUserId(vipOrder.getUserId()); resp.setTraceId(traceId); resp.setSuccess(true); + resp.setVipId(vipOrder.getVipId()); return resp; } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransDataServiceImpl.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransDataServiceImpl.java new file mode 100644 index 0000000..08d81a9 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransDataServiceImpl.java @@ -0,0 +1,136 @@ +package com.ruoyi.xq.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.xq.domain.User; +import com.ruoyi.xq.domain.WxTransData; +import com.ruoyi.xq.dto.app.account.StarWxTransReq; +import com.ruoyi.xq.dto.app.account.WxTransDataListAppVo; +import com.ruoyi.xq.dto.app.account.WxTransDataQuery; +import com.ruoyi.xq.enums.ErrorEnum; +import com.ruoyi.xq.enums.account.WxTransDataStatusEnum; +import com.ruoyi.xq.enums.common.TraceIdEnum; +import com.ruoyi.xq.mapper.WxTransDataMapper; +import com.ruoyi.xq.service.UserExtendService; +import com.ruoyi.xq.service.UserService; +import com.ruoyi.xq.service.WxTransDataService; +import com.ruoyi.xq.util.BirthdayUtil; +import com.ruoyi.xq.util.PageConvert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 微信交换数据Service业务层处理 + * + * @author 77 + * @date 2024-03-25 + */ +@Service +public class WxTransDataServiceImpl extends ServiceImpl implements WxTransDataService { + + @Autowired + private UserExtendService userExtendService; + @Autowired + private UserService userService; + + @Override + @Transactional(rollbackFor = Exception.class) + public void start(StarWxTransReq starWxTransReq) { + if(starWxTransReq.getSponsorUserId().equals(starWxTransReq.getReceiveUserId())){ + throw new ServiceException("自己不能和自己交换微信哦"); + } + User receiveUser = userService.getById(starWxTransReq.getReceiveUserId()); + if(receiveUser == null){ + throw new ServiceException("接受用户不存在"); + } + String traceId = TraceIdEnum.WX_TRANS.getCode(); + boolean success = userExtendService.consumeWxTrans(starWxTransReq.getSponsorUserId(),receiveUser, traceId); + if(!success){ + throw new ServiceException(ErrorEnum.WX_TRANS_ERROR); + } + User sponsorUser = userService.getById(starWxTransReq.getSponsorUserId()); + WxTransData data = new WxTransData(); + data.setTraceId(traceId); + data.setSponsorUserId(sponsorUser.getId()); + data.setSponsorUsercode(sponsorUser.getUsercode()); + data.setSponsorWx(sponsorUser.getWxCode()); + data.setReceiveUserId(receiveUser.getId()); + data.setReceiveUsercode(receiveUser.getUsercode()); + data.setReceiveWx(receiveUser.getWxCode()); + data.setStatus(WxTransDataStatusEnum.READY.getCode()); + this.save(data); + } + + @Override + public Page pageApp(PageQuery pageQuery, WxTransDataQuery wxTransDataQuery) { + Page page = baseMapper.pageApp(pageQuery.build(), wxTransDataQuery); + List records = page.getRecords(); + if(CollectionUtils.isEmpty(records)){ + return PageConvert.convertEmpty(page); + } + Long userId = wxTransDataQuery.getUserId(); + List userIdList = new ArrayList<>(); + for (WxTransData record : records) { + userIdList.add(record.getSponsorUserId()); + userIdList.add(record.getReceiveUserId()); + } + List users = userService.listByIds(userIdList); + Map userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity())); + List res = new ArrayList<>(); + for (WxTransData record : records) { + WxTransDataListAppVo vo = new WxTransDataListAppVo(); + vo.setId(record.getId()); + vo.setCreateTime(record.getCreateTime()); + vo.setStatus(record.getStatus()); + if(record.getSponsorUserId().equals(userId)){ + vo.setUserId(record.getSponsorUserId()); + vo.setUsercode(record.getSponsorUsercode()); + User user = userMap.get(record.getSponsorUserId()); + if(user != null){ + vo.setAvatar(user.getAvatar()); + vo.setGender(user.getGender()); + vo.setNickname(user.getNickname()); + vo.setBirthday(user.getBirthday()); + vo.setBirthdayStr(BirthdayUtil.getMinBirthday(user.getBirthday())); + vo.setAge(BirthdayUtil.getAge(user.getBirthday())); + vo.setResidenceCityName(user.getResidenceCityName()); + vo.setEducation(user.getEducation()); + vo.setProfession(user.getProfession()); + } + if(WxTransDataStatusEnum.SUCCESS.getCode().equals(record.getStatus())){ + vo.setWxCode(record.getReceiveWx()); + } + } else { + vo.setUserId(record.getReceiveUserId()); + vo.setUsercode(record.getReceiveUsercode()); + User user = userMap.get(record.getReceiveUserId()); + if(user != null){ + vo.setAvatar(user.getAvatar()); + vo.setGender(user.getGender()); + vo.setNickname(user.getNickname()); + vo.setBirthday(user.getBirthday()); + vo.setBirthdayStr(BirthdayUtil.getMinBirthday(user.getBirthday())); + vo.setAge(BirthdayUtil.getAge(user.getBirthday())); + vo.setResidenceCityName(user.getResidenceCityName()); + vo.setEducation(user.getEducation()); + vo.setProfession(user.getProfession()); + } + if(WxTransDataStatusEnum.SUCCESS.getCode().equals(record.getStatus())){ + vo.setWxCode(record.getSponsorWx()); + } + } + res.add(vo); + } + return PageConvert.convert(page,res); + } +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransLogServiceImpl.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransLogServiceImpl.java new file mode 100644 index 0000000..d78b525 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransLogServiceImpl.java @@ -0,0 +1,104 @@ +package com.ruoyi.xq.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.xq.domain.User; +import com.ruoyi.xq.domain.WxTransLog; +import com.ruoyi.xq.dto.app.account.WxTransLogListVo; +import com.ruoyi.xq.dto.app.account.WxTransLogQuery; +import com.ruoyi.xq.dto.common.user.MinUser; +import com.ruoyi.xq.enums.account.WxTransLogCateEnum; +import com.ruoyi.xq.mapper.WxTransLogMapper; +import com.ruoyi.xq.service.UserService; +import com.ruoyi.xq.service.WxTransLogService; +import com.ruoyi.xq.util.PageConvert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 微信交换记录Service业务层处理 + * + * @author 77 + * @date 2024-03-25 + */ +@Service +public class WxTransLogServiceImpl extends ServiceImpl implements WxTransLogService { + @Autowired + private UserService userService; + + @Override + public Page pageApp(PageQuery pageQuery, WxTransLogQuery query) { + Page page = this.page(pageQuery.build(), Wrappers.lambdaQuery(WxTransLog.class).eq(WxTransLog::getUserId, query.getUserId())); + List records = page.getRecords(); + if(CollectionUtils.isEmpty(records)){ + return PageConvert.convertEmpty(page); + } + List userIdList = records.stream().map(WxTransLog::getTarUserId).filter(Objects::nonNull).collect(Collectors.toList()); + List users = userService.listByIds(userIdList); + Map userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity())); + List vo = new ArrayList<>(); + for (WxTransLog record : records) { + WxTransLogListVo res = new WxTransLogListVo(); + res.setUserId(record.getUserId()); + res.setUsercode(record.getUsercode()); + res.setTitle(record.getCateName()); + res.setContent(record.getRemark()); + res.setCreateTime(record.getCreateTime()); + res.setChangeValue(record.getChangeValue()); + User user = userMap.get(record.getTarUserId()); + if(user != null){ + res.setSourceUserId(user.getId()); + res.setSourceNickname(user.getNickname()); + res.setSourceImg(user.getAvatar()); + } + vo.add(res); + } + return PageConvert.convert(page,vo); + } + + @Override + public void consumerSaveLog(Long sponsorUserId, String traceId, User receiveUser) { + MinUser minUser = userService.getMinUserById(sponsorUserId); + WxTransLog wxTransLog = new WxTransLog(); + wxTransLog.setUserId(minUser.getId()); + wxTransLog.setUsercode(minUser.getUsercode()); + wxTransLog.setTraceId(traceId); + wxTransLog.setCateId(WxTransLogCateEnum.CONSUMER.getCode()); + wxTransLog.setCateName(WxTransLogCateEnum.CONSUMER.getText()); + wxTransLog.setRemark("使用一次微信交换"); + wxTransLog.setChangeValue(-1L); + wxTransLog.setTarUserJson(JSON.toJSONString(receiveUser)); + wxTransLog.setTarUserId(receiveUser.getId()); + wxTransLog.setTarUsercode(receiveUser.getUsercode()); + this.save(wxTransLog); + } + + @Override + public void saveLog(Long userId, Integer wxTransNum, WxTransLogCateEnum cateEnum, String traceId, String remark) { + MinUser minUser = userService.getMinUserById(userId); + WxTransLog wxTransLog = new WxTransLog(); + wxTransLog.setUserId(minUser.getId()); + wxTransLog.setUsercode(minUser.getUsercode()); + wxTransLog.setTraceId(traceId); + wxTransLog.setCateId(cateEnum.getCode()); + wxTransLog.setCateName(cateEnum.getText()); + wxTransLog.setRemark(cateEnum.getText()); + if(StringUtils.isNotBlank(remark)){ + wxTransLog.setRemark(remark); + } + wxTransLog.setChangeValue(Long.valueOf(wxTransNum)); + this.save(wxTransLog); + } +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransOrderServiceImpl.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransOrderServiceImpl.java index 3d5fd52..cfbd58b 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransOrderServiceImpl.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/WxTransOrderServiceImpl.java @@ -1,25 +1,35 @@ package com.ruoyi.xq.service.impl; import cn.hutool.core.util.NumberUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.xq.domain.User; import com.ruoyi.xq.domain.WxTransOrder; import com.ruoyi.xq.dto.admin.wxtrans.WxTransOrderAdminVo; +import com.ruoyi.xq.dto.app.pay.ConsumeResp; +import com.ruoyi.xq.enums.account.WxTransLogCateEnum; import com.ruoyi.xq.enums.common.OrderTypeEnum; import com.ruoyi.xq.enums.common.SystemConfigEnum; +import com.ruoyi.xq.enums.common.TraceIdEnum; import com.ruoyi.xq.enums.pay.PayStatusEnum; -import com.ruoyi.xq.enums.wxtrans.WxTransSourceEnum; +import com.ruoyi.xq.enums.account.WxTransSourceEnum; +import com.ruoyi.xq.enums.pay.PlatformTypeEnum; import com.ruoyi.xq.manager.OrderNoUtil; import com.ruoyi.xq.manager.SystemConfigManager; +import com.ruoyi.xq.manager.TraceIdManager; import com.ruoyi.xq.mapper.WxTransOrderMapper; +import com.ruoyi.xq.service.UserExtendService; import com.ruoyi.xq.service.UserService; import com.ruoyi.xq.service.WxTransOrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.util.Map; /** * 微信交换订单Service业务层处理 @@ -34,9 +44,11 @@ public class WxTransOrderServiceImpl extends ServiceImpl params, String appId, PlatformTypeEnum payTypeEnum){ + WxTransOrder wxTransOrder = this.getByOrderNo(orderNo); + if(wxTransOrder == null){ + ConsumeResp resp = new ConsumeResp(); + resp.setSuccess(false); + return resp; + } + String traceId = TraceIdManager.gen(TraceIdEnum.VIP); + boolean success = this.update(Wrappers.lambdaUpdate(WxTransOrder.class) + .eq(WxTransOrder::getId, wxTransOrder.getId()) + .eq(WxTransOrder::getPayStatus, PayStatusEnum.READY_PAY.getCode()) + .set(WxTransOrder::getPayStatus, PayStatusEnum.PAY.getCode()) + .set(WxTransOrder::getTraceId, traceId) + .set(WxTransOrder::getReturnContent, JSON.toJSONString(params)) + .set(WxTransOrder::getAppid,appId) + .set(WxTransOrder::getPlatformType, payTypeEnum.getCode())); + if(!success){ + ConsumeResp resp = new ConsumeResp(); + resp.setSuccess(false); + return resp; + } + userExtendService.incsWxTrans(wxTransOrder.getUserId(),wxTransOrder.getWxNum(), WxTransLogCateEnum.ORDER,wxTransOrder.getTraceId(), + "购买一次微信交换"); + ConsumeResp resp = new ConsumeResp(); + resp.setPrice(wxTransOrder.getWxPrice()); + resp.setUserId(wxTransOrder.getUserId()); + resp.setTraceId(traceId); + resp.setSuccess(true); + return resp; + + } + @Override public Page pageAdmin(PageQuery pageQuery, WxTransOrderAdminVo bo) { return baseMapper.pageAdmin(pageQuery.build(), bo); diff --git a/ruoyi-xq/src/main/resources/mapper/xq/UserExtendMapper.xml b/ruoyi-xq/src/main/resources/mapper/xq/UserExtendMapper.xml index 8213bd5..1ccb1a2 100644 --- a/ruoyi-xq/src/main/resources/mapper/xq/UserExtendMapper.xml +++ b/ruoyi-xq/src/main/resources/mapper/xq/UserExtendMapper.xml @@ -29,6 +29,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" set consume_total = consume_total + #{consumeMonty} where user_id = #{userId} + + update xq_user_extend + set wx_trans_num = wx_trans_num + #{num} + where wx_trans_num + #{num} > 0 and user_id = #{userId} + + select * + from xq_wx_trans_data t1 + + + and t1.status = #{query.status} + + + and t1.sponsor_user_id = #{query.userId} + + + and t1.receive_user_id = #{query.userId} + + + and (t1.receive_user_id = #{query.userId} or t1.sponsor_user_id = #{query.userId}) + + + + + + diff --git a/ruoyi-xq/src/main/resources/mapper/xq/WxTransLogMapper.xml b/ruoyi-xq/src/main/resources/mapper/xq/WxTransLogMapper.xml new file mode 100644 index 0000000..9b3a227 --- /dev/null +++ b/ruoyi-xq/src/main/resources/mapper/xq/WxTransLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + +