[feat]增加app轮播接口,增加app会员接口

This commit is contained in:
wangqx 2025-08-15 17:05:59 +08:00
parent 2c4ea0c22c
commit e2ce1e1211
25 changed files with 282 additions and 334 deletions

48
pom.xml
View File

@ -484,32 +484,32 @@
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- 1. 配置 SSH 连接信息 -->
<property name="ssh.host" value="192.168.1.65" /> <!-- 例如192.168.1.100 -->
<property name="ssh.port" value="22" /> <!-- SSH 默认端口 -->
<property name="ssh.username" value="wzj" /> <!-- 例如root -->
<property name="ssh.password" value="123456" /> <!-- 或使用密钥认证 -->
<property name="local.jar.path" value="${project.build.directory}/${project.build.finalName}.jar" /> <!-- 本地 JAR 路径 -->
<property name="remote.jar.path" value="/var/local/docker/java/data" /> <!-- 服务器存放 JAR 的目录,例如:/opt/app/ -->
<!-- <target>-->
<!-- &lt;!&ndash; 1. 配置 SSH 连接信息 &ndash;&gt;-->
<!-- <property name="ssh.host" value="192.168.1.65" /> &lt;!&ndash; 例如192.168.1.100 &ndash;&gt;-->
<!-- <property name="ssh.port" value="22" /> &lt;!&ndash; SSH 默认端口 &ndash;&gt;-->
<!-- <property name="ssh.username" value="wzj" /> &lt;!&ndash; 例如root &ndash;&gt;-->
<!-- <property name="ssh.password" value="123456" /> &lt;!&ndash; 或使用密钥认证 &ndash;&gt;-->
<!-- <property name="local.jar.path" value="${project.build.directory}/${project.build.finalName}.jar" /> &lt;!&ndash; 本地 JAR 路径 &ndash;&gt;-->
<!-- <property name="remote.jar.path" value="/var/local/docker/java/data" /> &lt;!&ndash; 服务器存放 JAR 的目录,例如:/opt/app/ &ndash;&gt;-->
<!-- 2. 通过 SCP 上传 JAR 包到目标服务器 -->
<scp
file="${local.jar.path}"
todir="${ssh.username}:${ssh.password}@${ssh.host}:${remote.jar.path}"
port="${ssh.port}"
trust="true" /> <!-- 信任未知主机密钥 -->
<!-- &lt;!&ndash; 2. 通过 SCP 上传 JAR 包到目标服务器 &ndash;&gt;-->
<!-- <scp-->
<!-- file="${local.jar.path}"-->
<!-- todir="${ssh.username}:${ssh.password}@${ssh.host}:${remote.jar.path}"-->
<!-- port="${ssh.port}"-->
<!-- trust="true" /> &lt;!&ndash; 信任未知主机密钥 &ndash;&gt;-->
<!-- 3. 通过 SSH 执行远程命令:重启 docker java 容器 -->
<sshexec
host="${ssh.host}"
port="${ssh.port}"
username="${ssh.username}"
password="${ssh.password}"
command="docker restart java"
trust="true"
failonerror="true" /> <!-- 命令执行失败时Maven 构建终止 -->
</target>
<!-- &lt;!&ndash; 3. 通过 SSH 执行远程命令:重启 docker java 容器 &ndash;&gt;-->
<!-- <sshexec-->
<!-- host="${ssh.host}"-->
<!-- port="${ssh.port}"-->
<!-- username="${ssh.username}"-->
<!-- password="${ssh.password}"-->
<!-- command="docker restart java"-->
<!-- trust="true"-->
<!-- failonerror="true" /> &lt;!&ndash; 命令执行失败时Maven 构建终止 &ndash;&gt;-->
<!-- </target>-->
</configuration>
</execution>
</executions>

View File

@ -1,16 +1,15 @@
package org.dromara.app;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.convert.MemberAccountChangeRecordConvert;
import com.wzj.soopin.member.convert.AccountBillConvert;
import com.wzj.soopin.member.convert.MemberAccountConvert;
import com.wzj.soopin.member.convert.MemberConvert;
import com.wzj.soopin.member.domain.bo.MemberAccountChangeRecordBO;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.domain.vo.MemberAccountChangeRecordVO;
import com.wzj.soopin.member.domain.bo.AccountBillBO;
import com.wzj.soopin.member.domain.po.AccountBill;
import com.wzj.soopin.member.domain.vo.AccountBillVO;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
import com.wzj.soopin.member.domain.vo.MemberVO;
import com.wzj.soopin.member.service.IMemberAccountChangeRecordService;
import com.wzj.soopin.member.service.IAccountBillService;
import com.wzj.soopin.member.service.IMemberAccountService;
import com.wzj.soopin.member.service.IMemberService;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -32,9 +31,9 @@ public class AppMemberController {
private final IMemberAccountService accountService;
private final IMemberAccountChangeRecordService accountChangeRecordService;
private final IAccountBillService accountBillService;
private final MemberAccountChangeRecordConvert accountChangeRecordConvert;
private final AccountBillConvert accountBillConvert;
@ -47,14 +46,16 @@ public class AppMemberController {
@Tag(name ="获取会员账户表详细信息")
@GetMapping(value = "/account/{memberId}")
public R<MemberAccountVO> accountInfo(@PathVariable("memberId") Long memberId) {
return R.ok(accountConvert.toVO(accountService.getById(memberId)));
return R.ok(accountConvert.toVO(accountService.getMemberAccount(memberId)));
}
@Tag(name = "查询账单")
@PostMapping("/changeRecord/list")
public R<Page<MemberAccountChangeRecordVO>> list(@RequestBody MemberAccountChangeRecordBO bo,
@RequestBody Page<MemberAccountChangeRecord> page) {
Page<MemberAccountChangeRecord> memberPage = accountChangeRecordService.page(page,bo.toWrapper());
return R.ok(accountChangeRecordConvert.toVO(memberPage));
@PostMapping("/bills")
public R<Page<AccountBillVO>> list(@RequestBody AccountBillBO bo,
@RequestBody Page<AccountBill> page) {
Page<AccountBill> memberPage = accountBillService.page(page,bo.toWrapper());
return R.ok(accountBillConvert.toVO(memberPage));
}
}

View File

@ -222,78 +222,27 @@ sms:
--- # 三方授权
justauth:
# 前端外网访问地址
address: http://localhost:80
address: http://82.156.121.2:8880/
type:
maxkey:
# maxkey 服务器地址
# 注意 如下均配置均不需要修改 maxkey 已经内置好了数据
server-url: http://sso.maxkey.top
client-id: 876892492581044224
client-secret: x1Y5MTMwNzIwMjMxNTM4NDc3Mzche8
redirect-uri: ${justauth.address}/social-callback?source=maxkey
topiam:
# topiam 服务器地址
server-url: http://127.0.0.1:1898/api/v1/authorize/y0q************spq***********8ol
client-id: 449c4*********937************759
client-secret: ac7***********1e0************28d
redirect-uri: ${justauth.address}/social-callback?source=topiam
scopes: [openid, email, phone, profile]
qq:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=qq
union-id: false
weibo:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=weibo
gitee:
client-id: 91436b7940090d09c72c7daf85b959cfd5f215d67eea73acbf61b6b590751a98
client-secret: 02c6fcfd70342980cd8dd2f2c06c1a350645d76c754d7a264c4e125f9ba915ac
redirect-uri: ${justauth.address}/social-callback?source=gitee
dingtalk:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=dingtalk
baidu:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=baidu
csdn:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=csdn
coding:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=coding
coding-group-name: xx
oschina:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=oschina
alipay_wallet:
alipay_wallet: # 支付宝钱包
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet
alipay-public-key: MIIB**************DAQAB
wechat_open:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
wechat_open: # 微信开放平台
client-id: wxebcdaea31881caab
client-secret: 71826d76bad096ec5407897c6ed1391f
redirect-uri: ${justauth.address}/social-callback?source=wechat_open
wechat_mp:
wechat_mp: # 微信小程序
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=wechat_mp
wechat_enterprise:
wechat_enterprise: # 微信企业
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=wechat_enterprise
agent-id: 1000002
gitlab:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=gitlab
# 腾讯云IM配置
tencent:

View File

@ -39,7 +39,8 @@ public class SocialUtils {
AuthConfig.AuthConfigBuilder builder = AuthConfig.builder()
.clientId(obj.getClientId())
.clientSecret(obj.getClientSecret())
.redirectUri(obj.getRedirectUri())
.redirectUri(obj.getRedirectUri())// 回调地址
.ignoreCheckState(true)// 忽略state校验默认false
.scopes(obj.getScopes());
return switch (source.toLowerCase()) {
case "dingtalk" -> new AuthDingTalkRequest(builder.build(), STATE_CACHE);

View File

@ -0,0 +1,102 @@
package com.wzj.soopin.member.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.convert.AccountBillConvert;
import com.wzj.soopin.member.domain.bo.AccountBillBO;
import com.wzj.soopin.member.domain.po.AccountBill;
import com.wzj.soopin.member.domain.vo.AccountBillVO;
import com.wzj.soopin.member.service.IAccountBillService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 会员信息Controller
*
* @author zcc
* @date 2022-11-28
*/
@Tag(name = "账单")
@RequestMapping("/ums/account/bill")
@RestController
@RequiredArgsConstructor
public class AccountBillController extends BaseController {
private final IAccountBillService service;
private final AccountBillConvert convert;
@Tag(name = "查询账单列表")
@SaCheckPermission("ums:accountbill:list")
@PostMapping("page")
public R<Page<AccountBillVO>> page(@RequestBody AccountBillBO bo,
@RequestBody Page<AccountBill> page) {
Page<AccountBill> memberPage = service.page(page,bo.toWrapper());
return R.ok(convert.toVO(memberPage));
}
@Tag(name = "查询账单列表")
@SaCheckPermission("ums:accountbill:list")
@PostMapping("list")
public R<List<AccountBillVO>> list(@RequestBody AccountBillBO bo) {
List<AccountBill> memberPage = service.list(bo.toWrapper());
return R.ok(convert.toVO(memberPage));
}
@Tag(name ="导出账单")
@SaCheckPermission("ums:accountbill:export")
@PostMapping("export")
public ResponseEntity<String> export(AccountBillBO query) {
List<AccountBill> list = service.list(query.toWrapper());
ExcelUtil<AccountBillVO> util = new ExcelUtil<>(AccountBillVO.class);
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "账单"));
}
@Tag(name ="获取账单详情")
@SaCheckPermission("ums:accountbill:query")
@GetMapping(value = "{id}")
public R<AccountBillVO> getInfo(@PathVariable("id") Long id) {
return R.ok(convert.toVO(service.getById(id)));
}
@Tag(name ="新增账单")
@SaCheckPermission("ums:accountbill:add")
@Log(title = "新增账单", businessType = BusinessType.INSERT)
@PostMapping("add")
public R add(@RequestBody AccountBillBO member) {
return R.ok(service.save(convert.toPo(member)));
}
@Tag(name ="修改账单")
@SaCheckPermission("ums:accountbill:edit")
@Log(title = "修改账单", businessType = BusinessType.UPDATE)
@PostMapping("update")
public R edit(@RequestBody AccountBillBO member) {
return R.ok(service.updateById(convert.toPo(member)));
}
@Tag(name ="删除账单")
@SaCheckPermission("ums:accountbill:remove")
@Log(title = "删除账单", businessType = BusinessType.DELETE)
@DeleteMapping("{id}")
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,100 +0,0 @@
package com.wzj.soopin.member.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.convert.MemberAccountChangeRecordConvert;
import com.wzj.soopin.member.convert.MemberConvert;
import com.wzj.soopin.member.domain.bo.MemberAccountChangeRecordBO;
import com.wzj.soopin.member.domain.bo.MemberBO;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.domain.vo.MemberAccountChangeRecordVO;
import com.wzj.soopin.member.domain.vo.MemberDataStatisticsVO;
import com.wzj.soopin.member.domain.vo.MemberVO;
import com.wzj.soopin.member.service.IMemberAccountChangeRecordService;
import com.wzj.soopin.member.service.IMemberService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 会员信息Controller
*
* @author zcc
* @date 2022-11-28
*/
@Tag(name = "会员账户变动接口列表")
@RequestMapping("/ums/account/change/record")
@RestController
@RequiredArgsConstructor
public class MemberAccountChangeRecordController extends BaseController {
private final IMemberAccountChangeRecordService service;
private final MemberAccountChangeRecordConvert convert;
@Tag(name = "查询账户变动列表")
@SaCheckPermission("ums:accountchange:list")
@PostMapping("list")
public R<Page<MemberAccountChangeRecordVO>> list(@RequestBody MemberAccountChangeRecordBO bo,
@RequestBody Page<MemberAccountChangeRecord> page) {
Page<MemberAccountChangeRecord> memberPage = service.page(page,bo.toWrapper());
return R.ok(convert.toVO(memberPage));
}
@Tag(name ="导出变动记录")
@SaCheckPermission("ums:accountchange:export")
@Log(title = "会员信息", businessType = BusinessType.EXPORT)
@PostMapping("export")
public ResponseEntity<String> export(MemberAccountChangeRecordBO query) {
List<MemberAccountChangeRecord> list = service.list(query.toWrapper());
ExcelUtil<MemberAccountChangeRecordVO> util = new ExcelUtil<>(MemberAccountChangeRecordVO.class);
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "会员变动记录"));
}
@Tag(name ="获取变动记录")
@SaCheckPermission("ums:accountchange:query")
@GetMapping(value = "{id}")
public R<MemberAccountChangeRecordVO> getInfo(@PathVariable("id") Long id) {
return R.ok(convert.toVO(service.getById(id)));
}
@Tag(name ="新增变动记录")
@SaCheckPermission("'ums:accountchange:add")
@Log(title = "新增变动记录", businessType = BusinessType.INSERT)
@PostMapping("add")
public R add(@RequestBody MemberAccountChangeRecordBO member) {
return R.ok(service.save(convert.toPo(member)));
}
@Tag(name ="修改变动记录")
@SaCheckPermission("ums:accountchange:edit")
@Log(title = "修改变动记录", businessType = BusinessType.UPDATE)
@PostMapping("update")
public R edit(@RequestBody MemberAccountChangeRecordBO member) {
return R.ok(service.updateById(convert.toPo(member)));
}
@Tag(name ="删除变动记录")
@SaCheckPermission("ums:accountchange:remove")
@Log(title = "删除变动记录", businessType = BusinessType.DELETE)
@DeleteMapping("{id}")
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -0,0 +1,17 @@
package com.wzj.soopin.member.convert;
import com.wzj.soopin.member.domain.bo.AccountBillBO;
import com.wzj.soopin.member.domain.po.AccountBill;
import com.wzj.soopin.member.domain.vo.AccountBillVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
/**
* 会员账户表 DO <=> DTO <=> VO / BO / Query
*
* @author zcc
*/
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface AccountBillConvert extends BaseConverter<AccountBillVO, AccountBillBO, AccountBill> {
}

View File

@ -1,20 +0,0 @@
package com.wzj.soopin.member.convert;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.member.domain.bo.MemberAccountChangeRecordBO;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.domain.vo.MemberAccountChangeRecordVO;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
/**
* 会员账户表 DO <=> DTO <=> VO / BO / Query
*
* @author zcc
*/
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface MemberAccountChangeRecordConvert extends BaseConverter<MemberAccountChangeRecordVO, MemberAccountChangeRecordBO, MemberAccountChangeRecord> {
}

View File

@ -1,32 +1,24 @@
package com.wzj.soopin.member.domain.bo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.domain.po.AccountBill;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
/**
* 会员账户表对象 ums_member_account
* 账单
*
* @author zcc
*/
@Schema(description="会员账户变动记录")
@Schema(description="账单 ")
@Data
public class MemberAccountChangeRecordBO extends BaseBO<MemberAccountChangeRecord> {
public class AccountBillBO extends BaseBO<AccountBill> {
private Long id;
@Schema(description ="MEMBER_ID")
private Long memberId;
@Schema(description = "账户id")
private Long accountId;
@Schema(description ="余额")
@ -53,10 +45,9 @@ public class MemberAccountChangeRecordBO extends BaseBO<MemberAccountChangeRecor
private Integer source;
@Override
public LambdaQueryWrapper<MemberAccountChangeRecord> toWrapper() {
return new LambdaQueryWrapper<MemberAccountChangeRecord>()
.eq(getMemberId() != null,MemberAccountChangeRecord::getMemberId,memberId)
.eq(getChangeType() != null,MemberAccountChangeRecord::getChangeType,changeType)
.eq(getSource() != null,MemberAccountChangeRecord::getSource,source);
public LambdaQueryWrapper<AccountBill> toWrapper() {
return new LambdaQueryWrapper<AccountBill>()
.eq(getChangeType() != null, AccountBill::getChangeType,changeType)
.eq(getSource() != null, AccountBill::getSource,source);
}
}

View File

@ -11,23 +11,20 @@ import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
/**
* 会员账户表对象 ums_member_account
* 账单对象 ums_account_bill
*
* @author zcc
*/
@Schema(description="会员账户变动记录")
@Schema(description="账单")
@Data
@TableName("ums_account_change_record")
@TableName("ums_account_bill")
@Builder
public class MemberAccountChangeRecord extends BaseAudit {
public class AccountBill extends BaseAudit {
@Schema(description ="主键")
@TableId(value="id")
private Long id;
@Schema(description ="会员id")
private Long memberId;
@Schema(description = "账户id")
private Long accountId;
@ -47,14 +44,14 @@ public class MemberAccountChangeRecord extends BaseAudit {
@Excel(name = "变动金额")
private BigDecimal changeAmount;
@Schema(description ="变动类型")
@Schema(description ="变动类型 1收入 2支出")
private Integer changeType;
@Schema(description ="变动描述")
private String changeDesc;
@Schema(description ="来源")
private String source;
@Schema(description ="来源 ")
private Integer source;
}

View File

@ -2,7 +2,6 @@ package com.wzj.soopin.member.domain.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
@ -11,16 +10,18 @@ import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
/**
* 会员账户表对象 ums_member_account
* 账单VO
*
* @author zcc
*/
@Schema(description="会员账户变动记录")
@Schema(description="账单")
@Data
public class MemberAccountChangeRecordVO extends BaseAudit {
public class AccountBillVO extends BaseAudit {
private Long id;
private Long accountId;
@Schema(description ="MEMBER_ID")
@TableId(value="member_id", type = IdType.ASSIGN_ID)
private Long memberId;

View File

@ -1,15 +1,13 @@
package com.wzj.soopin.member.enums;
public enum MemberAccountChangeRecordSourceEnum {
YISHENG(1, "充值"),
CHARGE(2, "提现"),
WITHDRAW(3, "经营"),
public enum AccountBillChangeTypeEnum {
RECHARGE_REFUND_REFUND_REFUND(9, "充值退款退款退款");
IN(1, "收入"),
OUT(2, "支出");
private Integer code;
private String message;
MemberAccountChangeRecordSourceEnum(Integer code, String message) {
AccountBillChangeTypeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}

View File

@ -1,6 +1,7 @@
package com.wzj.soopin.member.enums;
public enum MemberAccountChangeRecordChangeTypeEnum {
public enum AccountBillSourceEnum {
WITHDRAW(1, "提现"),
CHARGE(2, "充值"),
RECHARGE(3, "充值"),
@ -8,11 +9,18 @@ public enum MemberAccountChangeRecordChangeTypeEnum {
WITHDRAW_REFUND(5, "提现退款"),
RECHARGE_REFUND_REFUND(6, "充值退款退款"),
WITHDRAW_REFUND_REFUND(7, "提现退款退款"),
RECHARGE_REFUND_REFUND_REFUND(8, "充值退款退款退款");
RECHARGE_REFUND_REFUND_REFUND(9, "充值退款退款退款"),
RED_PACKAGE_RECEIVE(10, "红包接收"),
RED_PACKAGE_SEND(11, "红包发送"),
RED_PACKAGE_REFUND(12, "红包退款"),
RED_PACKAGE_REFUND_REFUND(13, "红包退款退款");
;
private Integer code;
private String message;
MemberAccountChangeRecordChangeTypeEnum(Integer code, String message) {
AccountBillSourceEnum(Integer code, String message) {
this.code = code;
this.message = message;
}

View File

@ -1,9 +1,8 @@
package com.wzj.soopin.member.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.domain.po.AccountBill;
import com.wzj.soopin.member.domain.vo.AccountDetailVO;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@ -11,7 +10,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 会员账户变动记录Mapper接口
*/
public interface MemberAccountChangeRecordMapper extends BaseMapperPlus<MemberAccountChangeRecord, AccountDetailVO> {
public interface AccountBillMapper extends BaseMapperPlus<AccountBill, AccountDetailVO> {
/**
* 分页查询账户明细关联账户表获取账户类型

View File

@ -0,0 +1,8 @@
package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.po.AccountBill;
public interface IAccountBillService extends IService<AccountBill> {
}

View File

@ -1,9 +0,0 @@
package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
public interface IMemberAccountChangeRecordService extends IService<MemberAccountChangeRecord> {
}

View File

@ -67,4 +67,7 @@ public interface IMemberService extends IService<Member> {
MemberVO getLoginMemberInfo();
String updateWechat(MemberBO bo);
}

View File

@ -0,0 +1,23 @@
package com.wzj.soopin.member.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.po.AccountBill;
import com.wzj.soopin.member.mapper.AccountBillMapper;
import com.wzj.soopin.member.service.IAccountBillService;
import org.springframework.stereotype.Service;
/**
* 会员账户表Service业务层处理
*
*
* @author zcc
*/
@Service
public class AccountBillServiceImpl extends
ServiceImpl<AccountBillMapper, AccountBill> implements IAccountBillService {
}

View File

@ -6,11 +6,10 @@ import com.wzj.soopin.member.domain.bo.AccountDetailQueryBO;
import com.wzj.soopin.member.domain.vo.AccountDetailVO;
import com.wzj.soopin.member.enums.AccountTypeEnum;
import com.wzj.soopin.member.enums.UserTypeEnum;
import com.wzj.soopin.member.mapper.MemberAccountChangeRecordMapper;
import com.wzj.soopin.member.mapper.AccountBillMapper;
import com.wzj.soopin.member.service.IAccountDetailService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.core.domain.model.LoginUser;
import org.springframework.stereotype.Service;
@ -26,13 +25,13 @@ import java.util.List;
@RequiredArgsConstructor
public class AccountDetailServiceImpl implements IAccountDetailService {
private final MemberAccountChangeRecordMapper accountChangeRecordMapper;
private final AccountBillMapper accountChangeRecordMapper;
@Override
public IPage<AccountDetailVO> queryAccountDetailPage(AccountDetailQueryBO queryBO) {
// 构建分页对象
Page<AccountDetailVO> page = new Page<>(queryBO.getPageNum(), queryBO.getPageSize());
// 处理时间格式
String startTime = null;
String endTime = null;
@ -42,30 +41,30 @@ public class AccountDetailServiceImpl implements IAccountDetailService {
if (queryBO.getEndTime() != null) {
endTime = queryBO.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
// 记录查询参数日志
log.info("查询账户明细参数memberId={}, accountId={}, changeType={}, source={}, startTime={}, endTime={}",
queryBO.getMemberId(), queryBO.getAccountId(), queryBO.getChangeType(),
log.info("查询账户明细参数memberId={}, accountId={}, changeType={}, source={}, startTime={}, endTime={}",
queryBO.getMemberId(), queryBO.getAccountId(), queryBO.getChangeType(),
queryBO.getSource(), startTime, endTime);
// 查询数据
IPage<AccountDetailVO> result = accountChangeRecordMapper.selectAccountDetailPage(
page, queryBO.getMemberId(), queryBO.getAccountId(),
page, queryBO.getMemberId(), queryBO.getAccountId(),
queryBO.getChangeType(), queryBO.getSource(), startTime, endTime
);
// 补充账户类型和用户类型描述
List<AccountDetailVO> records = result.getRecords();
for (AccountDetailVO record : records) {
// 设置账户类型描述
record.setAccountTypeDesc(AccountTypeEnum.getDesc(record.getAccountType()));
// 根据账户类型判断用户类型
Integer userType = getUserTypeByAccountType(record.getAccountType());
record.setUserType(userType);
record.setUserTypeDesc(UserTypeEnum.getDesc(userType));
}
log.info("查询账户明细完成,共查询到{}条记录", result.getTotal());
return result;
}
@ -82,10 +81,10 @@ public class AccountDetailServiceImpl implements IAccountDetailService {
if (loginUser == null) {
throw new RuntimeException("用户未登录");
}
// 设置当前登录用户的会员ID
queryBO.setMemberId(loginUser.getUserId());
// 调用原有的分页查询方法
return queryAccountDetailPage(queryBO);
}

View File

@ -1,31 +0,0 @@
package com.wzj.soopin.member.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.mapper.MemberAccountChangeRecordMapper;
import com.wzj.soopin.member.mapper.MemberAccountMapper;
import com.wzj.soopin.member.service.IMemberAccountChangeRecordService;
import com.wzj.soopin.member.service.IMemberAccountService;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
* 会员账户表Service业务层处理
*
*
* @author zcc
*/
@Service
public class MemberAccountChangeRecordServiceImpl extends
ServiceImpl<MemberAccountChangeRecordMapper, MemberAccountChangeRecord> implements IMemberAccountChangeRecordService {
}

View File

@ -269,4 +269,13 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
LoginUser tokenUser = LoginHelper.getLoginUser();
return this.getMemberInfo(tokenUser.getUserId());
}
@Override
public String updateWechat(MemberBO bo) {
String openId=bo.getAvatar();
//到微信去验证
String token=bo.getPassword();
return openId;
}
}

View File

@ -1,15 +1,15 @@
<?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.wzj.soopin.member.mapper.MemberAccountChangeRecordMapper">
<mapper namespace="com.wzj.soopin.member.mapper.AccountBillMapper">
<!-- 分页查询账户明细(关联会员账户表和租户账户表获取账户类型) -->
<select id="selectAccountDetailPage" resultType="com.wzj.soopin.member.domain.vo.AccountDetailVO">
SELECT
SELECT
r.id,
r.member_id as memberId,
r.account_id as accountId,
COALESCE(ma.type, ta.type) as accountType,
CASE
CASE
WHEN ma.id IS NOT NULL THEN 2 -- 会员
WHEN ta.id IS NOT NULL THEN 1 -- 租户
ELSE 2 -- 默认会员

View File

@ -1,5 +1,5 @@
<?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.wzj.soopin.member.mapper.MemberAccountChangeRecordMapper" >
<mapper namespace="com.wzj.soopin.member.mapper.AccountBillMapper" >
</mapper>

View File

@ -2,8 +2,10 @@ package com.wzj.soopin.order.service.impl;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.mapper.MemberAccountChangeRecordMapper;
import com.wzj.soopin.member.domain.po.AccountBill;
import com.wzj.soopin.member.enums.AccountBillChangeTypeEnum;
import com.wzj.soopin.member.enums.AccountBillSourceEnum;
import com.wzj.soopin.member.mapper.AccountBillMapper;
import com.wzj.soopin.member.mapper.MemberAccountMapper;
import com.wzj.soopin.order.domain.entity.RedPacket;
import com.wzj.soopin.order.domain.entity.RedPacketReceive;
@ -32,7 +34,7 @@ public class RedPacketServiceImpl extends ServiceImpl<RedPacketMapper, RedPacket
private final RedPacketMapper redPacketMapper;
private final RedPacketReceiveMapper redPacketReceiveMapper;
private final MemberAccountMapper umsAccountMapper;
private final MemberAccountChangeRecordMapper accountChangeRecordMapper;
private final AccountBillMapper accountChangeRecordMapper;
private final RedisTemplate<String, Object> redisTemplate;
// Redis锁前缀
@ -206,14 +208,14 @@ public class RedPacketServiceImpl extends ServiceImpl<RedPacketMapper, RedPacket
umsAccountMapper.updateMoneyBalance(senderId, afterBalance);
// 记录金额变动
MemberAccountChangeRecord record = MemberAccountChangeRecord.builder()
AccountBill record = AccountBill.builder()
.moneyBalance(beforeBalance)
.accountId(senderId)
.beforeBalance(beforeBalance)
.afterBalance(afterBalance)
.changeAmount(redPacket.getTotalAmount())
.changeType(CHANGE_TYPE_SEND)
.source("发送红包红包ID" + redPacket.getId())
.changeType(AccountBillChangeTypeEnum.OUT.getCode())
.source(AccountBillSourceEnum.RED_PACKAGE_SEND.getCode())
.build();
accountChangeRecordMapper.insert(record);
@ -269,7 +271,7 @@ public class RedPacketServiceImpl extends ServiceImpl<RedPacketMapper, RedPacket
umsAccountMapper.updateMoneyBalance(senderId, afterBalance);
// 记录金额变动
MemberAccountChangeRecord record = MemberAccountChangeRecord.builder()
AccountBill record = AccountBill.builder()
.accountId(senderId)
.beforeBalance(beforeBalance)
.afterBalance(afterBalance)
@ -340,7 +342,7 @@ public class RedPacketServiceImpl extends ServiceImpl<RedPacketMapper, RedPacket
umsAccountMapper.updateMoneyBalance(memberId, afterBalance);
// 记录金额变动
MemberAccountChangeRecord record = MemberAccountChangeRecord.builder()
AccountBill record = AccountBill.builder()
.accountId(memberId)
.beforeBalance(beforeBalance)
.afterBalance(afterBalance)

View File

@ -3,10 +3,10 @@ package com.wzj.soopin.transaction.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.domain.po.AccountBill;
import com.wzj.soopin.transaction.domain.po.Withdraw;
import com.wzj.soopin.member.enums.MemberAccountChangeRecordChangeTypeEnum;
import com.wzj.soopin.member.enums.MemberAccountChangeRecordSourceEnum;
import com.wzj.soopin.member.enums.AccountBillChangeTypeEnum;
import com.wzj.soopin.member.enums.AccountBillSourceEnum;
import com.wzj.soopin.transaction.enums.WithdrawAuditStatus;
import com.wzj.soopin.transaction.enums.WithdrawStatus;
import com.wzj.soopin.transaction.mapper.WithdrawMapper;
@ -40,7 +40,7 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
*/
private final IYishengService yishengService;
private final IMemberAccountChangeRecordService memberAccountChangeRecordService;
private final IAccountBillService memberAccountChangeRecordService;
@Override
public boolean audit(WithdrawBO bo) {
@ -106,14 +106,14 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
yishengAccountVO = yishengService.getYishengAccount(withdraw.getMemberId());
memberAccountService.updateById(memberAccount.toBuilder().wallet(balance.subtract(finalBalance)).build());
//生成账户变动记录bh
MemberAccountChangeRecord memberAccountChangeRecord = MemberAccountChangeRecord.builder()
AccountBill memberAccountChangeRecord = AccountBill.builder()
.accountId(withdraw.getMemberId())
.moneyBalance(finalBalance)
.beforeBalance(balance)
.afterBalance(yishengAccountVO.getBalance())
.changeType(MemberAccountChangeRecordChangeTypeEnum.WITHDRAW.getCode())
.changeType(AccountBillChangeTypeEnum.OUT.getCode())
.changeDesc("提现")
.source(MemberAccountChangeRecordSourceEnum.WITHDRAW.getCode()).build();
.source(AccountBillSourceEnum.WITHDRAW.getCode()).build();
memberAccountChangeRecordService.save(memberAccountChangeRecord);
} else {