Merge remote-tracking branch 'origin/wzj-main' into wzj-main

# Conflicts:
#	ruoyi-admin/src/main/java/org/dromara/web/service/impl/IndexServiceImpl.java
This commit is contained in:
fxh 2025-06-30 10:11:30 +08:00
commit 0c53738935
73 changed files with 1908 additions and 205 deletions

10
pom.xml
View File

@ -370,7 +370,12 @@
<version>${revision}</version>
</dependency>
<!-- 交易模块 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-transaction</artifactId>
<version>${revision}</version>
</dependency>
<!-- 工作流模块 -->
<dependency>
<groupId>org.dromara</groupId>
@ -440,6 +445,7 @@
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${springdoc.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
@ -501,7 +507,7 @@
<configuration>
<argLine>-Dfile.encoding=UTF-8</argLine>
<!-- 根据打包环境执行对应的@Tag测试方法 -->
<groups>${profiles.active}</groups>
<groups>dev</groups>
<!-- 排除标签 -->
<excludedGroups>exclude</excludedGroups>
</configuration>

View File

@ -107,6 +107,12 @@
<artifactId>ruoyi-workflow</artifactId>
</dependency>
<!-- 交易模块 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-transaction</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>

View File

@ -58,7 +58,7 @@ public class CaptchaController {
*/
// @RateLimiter(key = "#phonenumber", time = 60, count = 1)
@GetMapping("/resource/sms/code")
public R<Void> smsCode(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) {
public R<String> smsCode(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) {
String key = GlobalConstants.CAPTCHA_CODE_KEY + phonenumber;
String code = RandomUtil.randomNumbers(4);
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
@ -72,7 +72,7 @@ public class CaptchaController {
// log.error("验证码短信发送异常 => {}", smsResponse);
// return R.fail(smsResponse.getData().toString());
// }
return R.ok();
return R.ok(code);
}
/**

View File

@ -52,6 +52,7 @@ import java.util.function.Supplier;
@Service
public class SysLoginService {
@Value("${user.password.maxRetryCount}")
private Integer maxRetryCount;
@ -74,6 +75,8 @@ public class SysLoginService {
*/
@Lock4j
public void socialRegister(AuthUser authUserData) {
String authId = authUserData.getSource() + authUserData.getUuid();
// 第三方用户信息
SysSocialBo bo = BeanUtil.toBean(authUserData, SysSocialBo.class);

View File

@ -258,8 +258,8 @@ springdoc:
packages-to-scan: com.wzj.soopin.goods
- group: 4.内容模块
packages-to-scan: com.wzj.soopin.content
- group: 5.结算模块
packages-to-scan: com.wzj.soopin.pay
- group: 5.交易模块
packages-to-scan: com.wzj.soopin.transaction
- group: 6.IM模块
packages-to-scan: com.wzj.soopin.im
- group: 7.系统模块

View File

@ -2,9 +2,9 @@ spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 123
url: jdbc:mysql://82.156.121.2:23306/wzj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: wzj
password: A085F27A43B0
hikari:
connection-timeout: 30000
validation-timeout: 5000

View File

@ -21,6 +21,7 @@
<module>ruoyi-content</module>
<module>ruoyi-im</module>
<module>ruoyi-auth</module>
<module>ruoyi-transaction</module>
</modules>
<artifactId>ruoyi-modules</artifactId>

View File

@ -378,6 +378,8 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
}
@Override
public Map<String, Object> getVlogStatistics(String fileId) {
Map<String, Object> result = new HashMap<>();

View File

@ -21,6 +21,7 @@
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-doc</artifactId>
@ -98,21 +99,22 @@
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sse</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>-->
<!-- <artifactId>ruoyi-order</artifactId>-->
<!-- <scope>runtime</scope>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>-->
<!-- <artifactId>ruoyi-goods</artifactId>-->
<!-- <scope>runtime</scope>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>-->
<!-- <artifactId>ruoyi-content</artifactId>-->
<!-- <scope>runtime</scope>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
</dependencies>

View File

@ -3,6 +3,7 @@ package com.wzj.soopin.member.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.wzj.soopin.content.service.VlogService;
import com.wzj.soopin.member.convert.FeedbackConvert;
import com.wzj.soopin.member.convert.MemberConvert;
import com.wzj.soopin.member.domain.bo.FeedbackBO;
@ -40,6 +41,8 @@ public class FeedbackController {
private final IMemberService memberService;
// private final VlogService vlogService;
@Tag(name = "查询意见反馈列表")
@PostMapping("/list")

View File

@ -1,19 +0,0 @@
package com.wzj.soopin.member.convert;
import com.wzj.soopin.member.domain.bo.ChargeBO;
import com.wzj.soopin.member.domain.bo.FansBO;
import com.wzj.soopin.member.domain.po.Charge;
import com.wzj.soopin.member.domain.po.Fans;
import com.wzj.soopin.member.domain.vo.ChargeVO;
import com.wzj.soopin.member.domain.vo.FansVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
/**
* 充值
*
* @author zcc
*/
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface ChargeConvert extends BaseConverter<ChargeVO, ChargeBO, Charge> {
}

View File

@ -1,48 +0,0 @@
package com.wzj.soopin.member.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.wzj.soopin.member.annotation.MemberFillField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 易生平台账户信息
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description="易生")
@Data
@Builder(toBuilder = true)
public class YishengAccountVO extends BaseAudit {
/**
* 主键
*/
@Schema(description ="主键")
@ExcelProperty(value = "主键", order = 1)
private Long id;
/**
* 会员id
*/
@Schema(description ="会员id")
@ExcelProperty(value ="会员id", order = 3)
private Long memberId;
/**
* 金额
*/
@Schema(description ="金额")
@ExcelProperty(value ="金额", order = 4)
private BigDecimal balance;
}

View File

@ -1,9 +0,0 @@
package com.wzj.soopin.member.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzj.soopin.member.domain.po.Withdraw;
import org.apache.ibatis.annotations.Select;
public interface WithdrawMapper extends BaseMapper<Withdraw> {
}

View File

@ -1,15 +0,0 @@
package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.bo.WithdrawBO;
import com.wzj.soopin.member.domain.po.Feedback;
import com.wzj.soopin.member.domain.po.Withdraw;
import com.wzj.soopin.member.domain.vo.FeedbackVO;
import java.io.Serializable;
public interface IWithdrawService extends IService<Withdraw> {
boolean audit(WithdrawBO bo);
boolean withdraw(Long id);
}

View File

@ -1,19 +0,0 @@
package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.po.Withdraw;
import com.wzj.soopin.member.domain.vo.YishengAccountVO;
import java.math.BigDecimal;
/**
* 易生支付的service
*/
public interface IYishengService {
YishengAccountVO getYishengAccount(Long memberId);
boolean withdraw(Long memberId, BigDecimal money);
boolean syncMemberAccount();
}

View File

@ -57,6 +57,9 @@ public class MemberRegisterService {
boolean exist = memberService.exists(new LambdaQueryWrapper<Member>()
.eq(Member::getPhoneEncrypted, phoneNumber));
if (exist) {
throw new UserException("user.register.save.error", username);
}

View File

@ -26,6 +26,7 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.redis.redis.RedisCache;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.scheduling.annotation.Scheduled;
@ -66,7 +67,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
@Override
@CachePut(value = CacheConstants.MEMBER, key = "#id")
@CacheEvict(value = CacheConstants.MEMBER, key = "#id")
public boolean save(Member entity) {
super.save(entity);
@ -95,8 +96,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
return true;
}
@CachePut(value = CacheConstants.MEMBER, key = "#id")
@CacheEvict(value = CacheConstants.MEMBER, key = "#id")
public int updateMark(MemberBO member) {
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("mark",member.getMark())
@ -107,6 +107,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
@CacheEvict(value = CacheConstants.MEMBER, key = "#id")
public Integer changeStatus(MemberBO bo) {
UpdateWrapper<Member> wrapper = new UpdateWrapper<>();
wrapper.eq("id", bo.getId());
@ -251,13 +252,14 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
@Override
// @Cacheable (cacheNames = CacheConstants.MEMBER, key = "#id")
public Member getById(Serializable id) {
return super.getById(id);
}
@Override
@Cacheable (cacheNames = CacheConstants.MEMBER, key = "#id")
public MemberVO getMemberInfo(Serializable id) {
return memberConvert.toVO(getById(id));
}

View File

@ -66,7 +66,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
private final VerificationCodeService verificationCodeService;
private final SysTenantMapper sysTenantMapper;
public OrderServiceImpl(OrderMapper orderMapper, OrderItemMapper orderItemMapper, SkuMapper skuMapper, OrderOperateHistoryMapper orderOperateHistoryMapper, MemberMapper memberMapper, OrderDeliveryHistoryMapper orderDeliveryHistoryMapper, VerificationCodeService verificationCodeService, SysTenantMapper sysTenantMapper) {
public OrderServiceImpl(OrderMapper orderMapper, OrderItemMapper orderItemMapper, SkuMapper skuMapper,
OrderOperateHistoryMapper orderOperateHistoryMapper, MemberMapper memberMapper, OrderDeliveryHistoryMapper orderDeliveryHistoryMapper, VerificationCodeService verificationCodeService, SysTenantMapper sysTenantMapper) {
this.orderMapper = orderMapper;
this.orderItemMapper = orderItemMapper;
this.skuMapper = skuMapper;

View File

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-modules</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-transaction</artifactId>
<description>
交易模块
</description>
<dependencies>
<!-- 通用工具-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-doc</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-translation</artifactId>
</dependency>
<!-- OSS功能模块 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-oss</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-log</artifactId>
</dependency>
<!-- excel-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-excel</artifactId>
</dependency>
<!-- SMS功能模块 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sms</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-tenant</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-security</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-web</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-idempotent</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sensitive</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-encrypt</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-order</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-member</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,18 +1,13 @@
package com.wzj.soopin.member.controller;
package com.wzj.soopin.transaction.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.annotation.MemberFillMethod;
import com.wzj.soopin.member.convert.ChargeConvert;
import com.wzj.soopin.member.convert.MemberForbiddenConvert;
import com.wzj.soopin.member.domain.bo.ChargeBO;
import com.wzj.soopin.member.domain.bo.MemberForbiddenBO;
import com.wzj.soopin.member.domain.po.Charge;
import com.wzj.soopin.member.domain.po.MemberForbidden;
import com.wzj.soopin.member.domain.vo.ChargeVO;
import com.wzj.soopin.member.domain.vo.MemberForbiddenVO;
import com.wzj.soopin.member.service.IChargeService;
import com.wzj.soopin.member.service.IMemberForbiddenService;
import com.wzj.soopin.transaction.convert.ChargeConvert;
import com.wzj.soopin.transaction.domain.bo.ChargeBO;
import com.wzj.soopin.transaction.domain.po.Charge;
import com.wzj.soopin.transaction.domain.vo.ChargeVO;
import com.wzj.soopin.transaction.service.IChargeService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
@ -25,7 +20,7 @@ import org.springframework.web.bind.annotation.*;
*/
@Tag(name = "用户封禁")
@RestController
@RequestMapping("/ums/charge")
@RequestMapping("/trans/charge")
@RequiredArgsConstructor
public class ChargeController {

View File

@ -0,0 +1,65 @@
package com.wzj.soopin.transaction.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.transaction.convert.DivideConvert;
import com.wzj.soopin.transaction.domain.bo.DivideBO;
import com.wzj.soopin.transaction.domain.po.Divide;
import com.wzj.soopin.transaction.domain.vo.DivideVO;
import com.wzj.soopin.transaction.service.IDivideService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.springframework.web.bind.annotation.*;
/**
* 用户封禁
*/
@Tag(name = "分账")
@RestController
@RequestMapping("/trans/divide")
@RequiredArgsConstructor
public class DivideController {
private final IDivideService service;
private final DivideConvert convert;
@Tag(name = "查询列表")
@PostMapping("/list")
public R<IPage<DivideVO>> list(@RequestBody DivideBO bo, @RequestBody Page page) {
Page<Divide> pages = service.page(page, bo.toWrapper());
return R.ok(convert.toVO(pages));
}
@Tag(name = "新增")
@Log(title = "新增 ", businessType = BusinessType.INSERT)
@PostMapping("/add")
public R add(@RequestBody DivideBO bo) {
return R.ok(service.save(bo));
}
@Tag(name = "详情")
@GetMapping(value = "/{id}")
public R<DivideVO> getInfo(@PathVariable("id") Long id) {
return R.ok(service.getVOById(id));
}
@Tag(name = ("回调更新"))
@Log(title = "回调更新", businessType = BusinessType.UPDATE)
@PostMapping("/callback")
public R callback(@RequestBody DivideBO bo) {
service.updateById(convert.toPo(bo));
return R.ok();
}
@Tag(name = "删除")
@Log(title = "删除", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public R<Object> remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -0,0 +1,73 @@
package com.wzj.soopin.transaction.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.transaction.convert.DivideRuleConvert;
import com.wzj.soopin.transaction.domain.bo.DivideRuleBO;
import com.wzj.soopin.transaction.domain.po.DivideRule;
import com.wzj.soopin.transaction.domain.vo.DivideRuleVO;
import com.wzj.soopin.transaction.service.IDivideRuleService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.springframework.web.bind.annotation.*;
/**
* 用户封禁
*/
@Tag(name = "分账")
@RestController
@RequestMapping("/trans/divide/rule")
@RequiredArgsConstructor
public class DivideRuleController {
private final IDivideRuleService service;
private final DivideRuleConvert convert;
@Tag(name = "查询列表")
@PostMapping("/list")
public R<IPage<DivideRuleVO>> list(@RequestBody DivideRuleBO bo, @RequestBody Page page) {
Page<DivideRule> pages = service.page(page, bo.toWrapper());
return R.ok(convert.toVO(pages));
}
@Tag(name = "新增")
@Log(title = "新增 ", businessType = BusinessType.INSERT)
@PostMapping("/add")
public R add(@RequestBody DivideRuleBO bo) {
return R.ok(service.save(bo));
}
@Tag(name = "详情")
@GetMapping(value = "/{id}")
public R<DivideRuleVO> getInfo(@PathVariable("id") Long id) {
return R.ok(service.getVOById(id));
}
@Tag(name = ("修改"))
@Log(title = "修改", businessType = BusinessType.UPDATE)
@PostMapping("/update")
public R update(@RequestBody DivideRuleBO bo) {
service.save(convert.toPo(bo));
return R.ok();
}
@Tag(name = ("启用停用"))
@Log(title = "启用停用", businessType = BusinessType.UPDATE)
@PostMapping("/change")
public R change(@RequestBody DivideRuleBO bo) {
service.save(convert.toPo(bo));
return R.ok();
}
@Tag(name = "删除")
@Log(title = "删除", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public R<Object> remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,18 +1,13 @@
package com.wzj.soopin.member.controller;
package com.wzj.soopin.transaction.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.annotation.MemberFillMethod;
import com.wzj.soopin.member.convert.MemberForbiddenConvert;
import com.wzj.soopin.member.convert.WithdrawConvert;
import com.wzj.soopin.member.domain.bo.MemberForbiddenBO;
import com.wzj.soopin.member.domain.bo.WithdrawBO;
import com.wzj.soopin.member.domain.po.MemberForbidden;
import com.wzj.soopin.member.domain.po.Withdraw;
import com.wzj.soopin.member.domain.vo.MemberForbiddenVO;
import com.wzj.soopin.member.domain.vo.WithdrawVO;
import com.wzj.soopin.member.service.IMemberForbiddenService;
import com.wzj.soopin.member.service.IWithdrawService;
import com.wzj.soopin.transaction.convert.WithdrawConvert;
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
import com.wzj.soopin.transaction.domain.po.Withdraw;
import com.wzj.soopin.transaction.domain.vo.WithdrawVO;
import com.wzj.soopin.transaction.service.IWithdrawService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
@ -25,7 +20,7 @@ import org.springframework.web.bind.annotation.*;
*/
@Tag(name = "提现")
@RestController
@RequestMapping("/ums/withdraw")
@RequestMapping("/trans/withdraw")
@RequiredArgsConstructor
public class WithdrawController {

View File

@ -0,0 +1,16 @@
package com.wzj.soopin.transaction.convert;
import com.wzj.soopin.transaction.domain.bo.ChargeBO;
import com.wzj.soopin.transaction.domain.po.Charge;
import com.wzj.soopin.transaction.domain.vo.ChargeVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
/**
* 充值
*
* @author zcc
*/
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface ChargeConvert extends BaseConverter<ChargeVO, ChargeBO, Charge> {
}

View File

@ -0,0 +1,12 @@
package com.wzj.soopin.transaction.convert;
import com.wzj.soopin.transaction.domain.bo.DivideBO;
import com.wzj.soopin.transaction.domain.po.Divide;
import com.wzj.soopin.transaction.domain.vo.DivideVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface DivideConvert extends BaseConverter<DivideVO, DivideBO, Divide> {
}

View File

@ -0,0 +1,12 @@
package com.wzj.soopin.transaction.convert;
import com.wzj.soopin.transaction.domain.bo.DivideDetailBO;
import com.wzj.soopin.transaction.domain.po.DivideDetail;
import com.wzj.soopin.transaction.domain.vo.DivideDetailVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface DivideDetailConvert extends BaseConverter<DivideDetailVO, DivideDetailBO, DivideDetail> {
}

View File

@ -0,0 +1,12 @@
package com.wzj.soopin.transaction.convert;
import com.wzj.soopin.transaction.domain.bo.DivideRuleBO;
import com.wzj.soopin.transaction.domain.po.DivideRule;
import com.wzj.soopin.transaction.domain.vo.DivideRuleVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface DivideRuleConvert extends BaseConverter<DivideRuleVO, DivideRuleBO, DivideRule> {
}

View File

@ -0,0 +1,12 @@
package com.wzj.soopin.transaction.convert;
import com.wzj.soopin.transaction.domain.bo.DivideRuleDetailBO;
import com.wzj.soopin.transaction.domain.po.DivideRuleDetail;
import com.wzj.soopin.transaction.domain.vo.DivideRuleDetailVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface DivideRuleDetailConvert extends BaseConverter<DivideRuleDetailVO, DivideRuleDetailBO, DivideRuleDetail> {
}

View File

@ -1,8 +1,8 @@
package com.wzj.soopin.member.convert;
package com.wzj.soopin.transaction.convert;
import com.wzj.soopin.member.domain.bo.WithdrawBO;
import com.wzj.soopin.member.domain.po.Withdraw;
import com.wzj.soopin.member.domain.vo.WithdrawVO;
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
import com.wzj.soopin.transaction.domain.po.Withdraw;
import com.wzj.soopin.transaction.domain.vo.WithdrawVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;

View File

@ -1,9 +1,8 @@
package com.wzj.soopin.member.domain.bo;
package com.wzj.soopin.transaction.domain.bo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.member.domain.po.Charge;
import com.wzj.soopin.member.domain.po.Withdraw;
import com.wzj.soopin.transaction.domain.po.Charge;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;

View File

@ -0,0 +1,93 @@
package com.wzj.soopin.transaction.domain.bo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.wzj.soopin.transaction.domain.po.Divide;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* 订单分账
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description = "订单分账")
@Data
public class DivideBO extends BaseBO<Divide> {
/**
* 主键
*/
@Schema(description = "主键")
@ExcelProperty(value = "主键", order = 1)
private Long id;
/**
* 分账规则id
*/
@Schema(description = "分账规则id")
@ExcelProperty(value = "分账规则id", order = 2)
private Long ruleId;
/**
* 金额
*/
@Schema(description = "订单总金额")
@ExcelProperty(value = "订单总金额", order = 4)
private BigDecimal orderMoney;
/**
* 手续费
*/
@Schema(description = "手续费")
@ExcelProperty(value = "手续费", order = 5)
private BigDecimal fee;
/**
* 金额分配比例
*/
@Schema(description = "实际分账金额")
@ExcelProperty(value = "实际分账金额", order = 5)
private BigDecimal actualMoney;
@Schema(description = "适用订单类型")
private Integer type;
/**
* 状态
*/
@Schema(description = "状态")
@ExcelProperty(value = "状态", order = 5)
private Integer status;
/**
* 订单id
* */
@Schema(description = "订单id")
@ExcelProperty(value = "订单id", order = 8)
private Long orderId;
/**
* 订单编号
* */
@Schema(description = "订单编号")
@ExcelProperty(value = "订单编号", order = 9)
private String orderSn;
/**
* 分账规则明细
*/
@Schema(description = "分账规则明细")
@ExcelProperty(value = "分账规则明细", order = 10)
private List<DivideDetailBO> details=new ArrayList<>();
}

View File

@ -0,0 +1,109 @@
package com.wzj.soopin.transaction.domain.bo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.wzj.soopin.transaction.domain.po.DivideDetail;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
import java.math.BigDecimal;
/**
* 分账规则明细
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description = "订单分账明细")
@Data
public class DivideDetailBO extends BaseBO<DivideDetail> {
/**
* 主键
*/
@Schema(description = "主键")
@ExcelProperty(value = "主键", order = 1)
private Long id;
/**
* 分账id
*/
@Schema(description = "分账id")
@ExcelProperty(value = "分账id", order = 2)
private Long divideId;
/**
* 分账规则id
*/
@Schema(description = "分账规则id")
@ExcelProperty(value = "分账规则id", order = 2)
private Long ruleId;
/**
* 分账规则明细id
*/
@Schema(description = "分账规则明细id")
@ExcelProperty(value = "分账规则明细id", order = 3)
private Long ruleDetailId;
/**
* 金额
*/
@Schema(description = "金额")
@ExcelProperty(value = "金额", order = 4)
private BigDecimal money;
/**
* 手续费
*/
@Schema(description = "手续费")
@ExcelProperty(value = "手续费", order = 5)
private BigDecimal fee;
/**
* 金额分配比例
*/
@Schema(description = "金额分配比例")
@ExcelProperty(value = "金额分配比例", order = 5)
private BigDecimal moneyPercent;
/**
* 手续费分配比例
*/
@Schema(description = "手续费分配比例")
@ExcelProperty(value = "手续费分配比例", order = 5)
private BigDecimal feePercent;
/**
* 账户类型 1 平台 2 商户 3 代理人
* */
private Integer type;
@Schema(description = "账户id")
@ExcelProperty(value = "账户id", order = 6)
private Long accountId;
/**
* 账户名称
* */
@Schema(description = "账户名称")
@ExcelProperty(value = "账户名称", order = 7)
private String accountName;
/**
* 订单id
* */
@Schema(description = "订单id")
@ExcelProperty(value = "订单id", order = 8)
private Long orderId;
/**
* 订单编号
* */
@Schema(description = "订单编号")
@ExcelProperty(value = "订单编号", order = 9)
private String orderSn;
}

View File

@ -0,0 +1,66 @@
package com.wzj.soopin.transaction.domain.bo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.wzj.soopin.transaction.domain.po.DivideRule;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
import java.util.ArrayList;
import java.util.List;
/**
* 分账规则
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description="分账规则")
@Data
public class DivideRuleBO extends BaseBO<DivideRule> {
/**
* 主键
*/
@Schema(description ="主键")
@ExcelProperty(value = "主键", order = 1)
private Long id;
/**
* 提现码
*/
@Schema(description ="编号")
@ExcelProperty(value = "编号", order = 2)
private String code;
@Schema(description ="名称")
@ExcelProperty(value ="名称", order = 3)
private String name;
@Schema(description ="是否分配手续费")
@ExcelProperty(value ="是否分配手续费", order = 4)
private Integer divideFeeFlag;
@Schema(description ="手续费分配方式")
@ExcelProperty(value ="手续费分配方式", order = 5)
private Integer feeType;
/**
* 状态
*/
@Schema(description ="状态")
@ExcelProperty(value ="状态", order = 7)
private Integer status;
/**
* 类型
*/
@Schema(description ="适用订单类型")
@ExcelProperty(value ="类型", order = 8)
private Integer type;
private List<DivideRuleDetailBO> details=new ArrayList<>();
}

View File

@ -0,0 +1,54 @@
package com.wzj.soopin.transaction.domain.bo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.wzj.soopin.transaction.domain.po.DivideRuleDetail;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
import java.math.BigDecimal;
/**
* 分账规则明细
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description="分账规则明细")
@Data
public class DivideRuleDetailBO extends BaseBO<DivideRuleDetail> {
/**
* 主键
*/
@Schema(description ="主键")
@ExcelProperty(value = "主键", order = 1)
private Long id;
/**
* 提现码
*/
@Schema(description ="分账规则id")
@ExcelProperty(value = "分账规则id", order = 2)
private Long ruleId;
@Schema(description ="金额分配比例")
@ExcelProperty(value ="金额分配比例", order = 4)
private BigDecimal moneyPercent;
@Schema(description ="手续费分配比例")
@ExcelProperty(value ="手续费分配比例", order = 5)
private BigDecimal feePercent;
/**
* 类型
*/
@Schema(description ="账户类型 1 平台 2 商户 3 代理人")
@ExcelProperty(value ="类型", order = 8)
private Integer type;
}

View File

@ -1,14 +1,11 @@
package com.wzj.soopin.member.domain.bo;
package com.wzj.soopin.transaction.domain.bo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.member.domain.po.Withdraw;
import com.wzj.soopin.transaction.domain.po.Withdraw;
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 java.math.BigDecimal;
import java.time.LocalDateTime;

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.member.domain.po;
package com.wzj.soopin.transaction.domain.po;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@ -14,7 +14,7 @@ import java.time.LocalDateTime;
*/
@Schema(description="充值")
@Data
@TableName("ums_charge")
@TableName("trans_charge")
public class Charge extends BaseAudit {
/**

View File

@ -0,0 +1,84 @@
package com.wzj.soopin.transaction.domain.po;
import com.alibaba.excel.annotation.ExcelProperty;
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.mybatis.core.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 订单分账
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description = "订单分账")
@Data
@TableName("trans_divide")
public class Divide extends BaseEntity {
/**
* 主键
*/
@Schema(description = "主键")
@ExcelProperty(value = "主键", order = 1)
@TableId
private Long id;
/**
* 分账规则id
*/
@Schema(description = "分账规则id")
@ExcelProperty(value = "分账规则id", order = 2)
private Long ruleId;
/**
* 金额
*/
@Schema(description = "订单总金额")
@ExcelProperty(value = "订单总金额", order = 4)
private BigDecimal orderMoney;
/**
* 手续费
*/
@Schema(description = "手续费")
@ExcelProperty(value = "手续费", order = 5)
private BigDecimal fee;
/**
* 金额分配比例
*/
@Schema(description = "实际分账金额")
@ExcelProperty(value = "实际分账金额", order = 5)
private BigDecimal actualMoney;
/**
* 状态
*/
@Schema(description = "状态")
@ExcelProperty(value = "状态", order = 5)
private Integer status;
/**
* 订单id
* */
@Schema(description = "订单id")
@ExcelProperty(value = "订单id", order = 8)
private Long orderId;
/**
* 订单编号
* */
@Schema(description = "订单编号")
@ExcelProperty(value = "订单编号", order = 9)
private String orderSn;
}

View File

@ -0,0 +1,110 @@
package com.wzj.soopin.transaction.domain.po;
import com.alibaba.excel.annotation.ExcelProperty;
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.mybatis.core.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 分账规则明细
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description = "订单分账明细")
@Data
@TableName("trans_divide_detail")
public class DivideDetail extends BaseEntity {
/**
* 主键
*/
@Schema(description = "主键")
@ExcelProperty(value = "主键", order = 1)
@TableId
private Long id;
/**
* 分账规则id
*/
@Schema(description = "分账id")
@ExcelProperty(value = "分账id", order = 2)
private Long divideId;
/**
* 分账规则明细id
*/
@Schema(description = "分账规则明细id")
@ExcelProperty(value = "分账规则明细id", order = 3)
private Long ruleDetailId;
/**
* 金额
*/
@Schema(description = "金额")
@ExcelProperty(value = "金额", order = 4)
private BigDecimal money;
/**
* 手续费
*/
@Schema(description = "手续费")
@ExcelProperty(value = "手续费", order = 5)
private BigDecimal fee;
/**
* 金额分配比例
*/
@Schema(description = "金额分配比例")
@ExcelProperty(value = "金额分配比例", order = 5)
private BigDecimal moneyPercent;
/**
* 手续费分配比例
*/
@Schema(description = "手续费分配比例")
@ExcelProperty(value = "手续费分配比例", order = 5)
private BigDecimal feePercent;
/**
* 账户类型 1 平台 2 商户 3 代理人
* */
private Integer type;
/**
* 状态
*/
@Schema(description = "状态 0 未分账 1 分账成功 2 分账失败")
@ExcelProperty(value = "状态", order = 5)
private Integer status;
@Schema(description = "账户id")
@ExcelProperty(value = "账户id", order = 6)
private Long accountId;
/**
* 账户名称
* */
@Schema(description = "账户名称")
@ExcelProperty(value = "账户名称", order = 7)
private String accountName;
/**
* 订单id
* */
@Schema(description = "订单id")
@ExcelProperty(value = "订单id", order = 8)
private Long orderId;
/**
* 订单编号
* */
@Schema(description = "订单编号")
@ExcelProperty(value = "订单编号", order = 9)
private String orderSn;
}

View File

@ -0,0 +1,65 @@
package com.wzj.soopin.transaction.domain.po;
import com.alibaba.excel.annotation.ExcelProperty;
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.mybatis.core.domain.BaseEntity;
/**
* 分账规则
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description="分账规则")
@Data
@TableName("trans_divide_rule")
public class DivideRule extends BaseEntity {
/**
* 主键
*/
@Schema(description ="主键")
@ExcelProperty(value = "主键", order = 1)
@TableId
private Long id;
/**
* 提现码
*/
@Schema(description ="编号")
@ExcelProperty(value = "编号", order = 2)
private String code;
@Schema(description ="名称")
@ExcelProperty(value ="名称", order = 3)
private String name;
@Schema(description ="是否分配手续费")
@ExcelProperty(value ="是否分配手续费", order = 4)
private Integer divideFeeFlag;
@Schema(description ="手续费分配方式")
@ExcelProperty(value ="手续费分配方式", order = 5)
private Integer feeType;
/**
* 状态
*/
@Schema(description ="状态")
@ExcelProperty(value ="状态", order = 7)
private Integer status;
/**
* 类型
*/
@Schema(description ="适用订单类型")
@ExcelProperty(value ="类型", order = 8)
private Integer type;
}

View File

@ -0,0 +1,55 @@
package com.wzj.soopin.transaction.domain.po;
import com.alibaba.excel.annotation.ExcelProperty;
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.mybatis.core.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 分账规则明细
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description="分账规则明细")
@Data
@TableName("trans_divide_rule_detail")
public class DivideRuleDetail extends BaseEntity {
/**
* 主键
*/
@Schema(description ="主键")
@ExcelProperty(value = "主键", order = 1)
@TableId
private Long id;
@Schema(description ="分账规则id")
@ExcelProperty(value = "分账规则id", order = 2)
private Long ruleId;
@Schema(description ="金额分配比例")
@ExcelProperty(value ="金额分配比例", order = 4)
private BigDecimal moneyPercent;
@Schema(description ="手续费分配比例")
@ExcelProperty(value ="手续费分配比例", order = 5)
private BigDecimal feePercent;
/**
* 类型
*/
@Schema(description ="账户类型 1 平台 2 商户 3 代理人")
@ExcelProperty(value ="类型", order = 8)
private Integer type;
}

View File

@ -1,7 +1,6 @@
package com.wzj.soopin.member.domain.po;
package com.wzj.soopin.transaction.domain.po;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;

View File

@ -1,11 +1,13 @@
package com.wzj.soopin.member.domain.vo;
package com.wzj.soopin.transaction.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.wzj.soopin.member.annotation.MemberFillField;
import com.wzj.soopin.member.domain.vo.MemberVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@ -18,7 +20,7 @@ import java.time.LocalDateTime;
*/
@Schema(description="充值")
@Data
public class ChargeVO extends BaseAudit {
public class ChargeVO extends BaseEntity {
/**
* 主键

View File

@ -0,0 +1,101 @@
package com.wzj.soopin.transaction.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 分账规则明细
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description = "订单分账明细")
@Data
public class DivideDetailVO extends BaseEntity {
/**
* 主键
*/
@Schema(description = "主键")
@ExcelProperty(value = "主键", order = 1)
private Long id;
/**
* 分账规则id
*/
@Schema(description = "分账规则id")
@ExcelProperty(value = "分账规则id", order = 2)
private Long ruleId;
/**
* 分账规则明细id
*/
@Schema(description = "分账规则明细id")
@ExcelProperty(value = "分账规则明细id", order = 3)
private Long ruleDetailId;
/**
* 金额
*/
@Schema(description = "金额")
@ExcelProperty(value = "金额", order = 4)
private BigDecimal money;
/**
* 手续费
*/
@Schema(description = "手续费")
@ExcelProperty(value = "手续费", order = 5)
private BigDecimal fee;
/**
* 金额分配比例
*/
@Schema(description = "金额分配比例")
@ExcelProperty(value = "金额分配比例", order = 5)
private BigDecimal moneyPercent;
/**
* 手续费分配比例
*/
@Schema(description = "手续费分配比例")
@ExcelProperty(value = "手续费分配比例", order = 5)
private BigDecimal feePercent;
/**
* 账户类型 1 平台 2 商户 3 代理人
* */
private Integer type;
@Schema(description = "账户id")
@ExcelProperty(value = "账户id", order = 6)
private Long accountId;
/**
* 账户名称
* */
@Schema(description = "账户名称")
@ExcelProperty(value = "账户名称", order = 7)
private String accountName;
/**
* 订单id
* */
@Schema(description = "订单id")
@ExcelProperty(value = "订单id", order = 8)
private Long orderId;
/**
* 订单编号
* */
@Schema(description = "订单编号")
@ExcelProperty(value = "订单编号", order = 9)
private String orderSn;
}

View File

@ -0,0 +1,55 @@
package com.wzj.soopin.transaction.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 分账规则明细
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description="分账规则明细")
@Data
public class DivideRuleDetailVO extends BaseEntity {
/**
* 主键
*/
@Schema(description ="主键")
@ExcelProperty(value = "主键", order = 1)
private Long id;
/**
* 提现码
*/
@Schema(description ="分账规则id")
@ExcelProperty(value = "分账规则id", order = 2)
private Long ruleId;
@Schema(description ="金额分配比例")
@ExcelProperty(value ="金额分配比例", order = 4)
private BigDecimal moneyPercent;
@Schema(description ="手续费分配比例")
@ExcelProperty(value ="手续费分配比例", order = 5)
private BigDecimal feePercent;
/**
* 类型
*/
@Schema(description ="账户类型 1 平台 2 商户 3 代理人")
@ExcelProperty(value ="类型", order = 8)
private Integer type;
}

View File

@ -0,0 +1,72 @@
package com.wzj.soopin.transaction.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.util.ArrayList;
import java.util.List;
/**
* 分账规则
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description="分账规则")
@Data
public class DivideRuleVO extends BaseEntity {
/**
* 主键
*/
@Schema(description ="主键")
@ExcelProperty(value = "主键", order = 1)
private Long id;
@Schema(description ="分账规则id")
@ExcelProperty(value = "分账规则id", order = 2)
private Long ruleId;
/**
* 提现码
*/
@Schema(description ="编号")
@ExcelProperty(value = "编号", order = 2)
private String code;
@Schema(description ="名称")
@ExcelProperty(value ="名称", order = 3)
private String name;
@Schema(description ="是否分配手续费")
@ExcelProperty(value ="是否分配手续费", order = 4)
private Integer divideFeeFlag;
@Schema(description ="手续费分配方式")
@ExcelProperty(value ="手续费分配方式", order = 5)
private Integer feeType;
/**
* 状态
*/
@Schema(description ="状态")
@ExcelProperty(value ="状态", order = 7)
private Integer status;
/**
* 类型
*/
@Schema(description ="适用订单类型")
@ExcelProperty(value ="类型", order = 8)
private Integer type;
@Schema(description = "分账规则明细")
@ExcelProperty(value = "分账规则明细", order = 9)
private List<DivideRuleDetailVO> details=new ArrayList<>();
}

View File

@ -0,0 +1,86 @@
package com.wzj.soopin.transaction.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.math.BigDecimal;
import java.util.List;
/**
* 订单分账
*
* @author wzj
* @date 2023-03-07
*/
@Schema(description = "订单分账")
@Data
public class DivideVO extends BaseEntity {
/**
* 主键
*/
@Schema(description = "主键")
@ExcelProperty(value = "主键", order = 1)
private Long id;
/**
* 分账规则id
*/
@Schema(description = "分账规则id")
@ExcelProperty(value = "分账规则id", order = 2)
private Long ruleId;
private String ruleName;
/**
* 金额
*/
@Schema(description = "订单总金额")
@ExcelProperty(value = "订单总金额", order = 4)
private BigDecimal orderMoney;
/**
* 手续费
*/
@Schema(description = "手续费")
@ExcelProperty(value = "手续费", order = 5)
private BigDecimal fee;
/**
* 金额分配比例
*/
@Schema(description = "实际分账金额")
@ExcelProperty(value = "实际分账金额", order = 5)
private BigDecimal actualMoney;
@Schema(description = "适用订单类型")
private Integer type;
/**
* 状态
*/
@Schema(description = "状态")
@ExcelProperty(value = "状态", order = 5)
private Integer status;
/**
* 订单id
* */
@Schema(description = "订单id")
@ExcelProperty(value = "订单id", order = 8)
private Long orderId;
/**
* 订单编号
* */
@Schema(description = "订单编号")
@ExcelProperty(value = "订单编号", order = 9)
private String orderSn;
private List<DivideDetailVO> details;
}

View File

@ -1,13 +1,13 @@
package com.wzj.soopin.member.domain.vo;
package com.wzj.soopin.transaction.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.wzj.soopin.member.annotation.MemberFillField;
import com.wzj.soopin.member.domain.vo.MemberVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@ -20,7 +20,7 @@ import java.time.LocalDateTime;
*/
@Schema(description="提现")
@Data
public class WithdrawVO extends BaseAudit {
public class WithdrawVO extends BaseEntity {
/**
* 主键

View File

@ -0,0 +1,37 @@
package com.wzj.soopin.transaction.domain.vo;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
/**
* 易生平台账户信息
*
* @author wzj
* @date 2023-03-07
*/
@Builder(toBuilder = true)
@Data
public class YishengAccountVO {
/**
* 主键
*/
private Long id;
/**
* 会员id
*/
private Long memberId;
/**
* 金额
*/
private BigDecimal balance;
}

View File

@ -0,0 +1,30 @@
package com.wzj.soopin.transaction.enums;
public enum DivideRuleStatus {
/**
* 启用
*/
ON(1, "启用"),
/**
* 禁用
*/
OFF(0, "禁用");
private final int code;
private final String message;
DivideRuleStatus(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}

View File

@ -0,0 +1,23 @@
package com.wzj.soopin.transaction.enums;
public enum DivideStatus {
PENDING(0, "待分账"),
SUCCESS(1, "分账成功"),
FAIL(2, "分账失败");
private int code;
private String desc;
DivideStatus(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public String getDesc() {
return desc;
}
}

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.member.enums;
package com.wzj.soopin.transaction.enums;
public enum WithdrawAuditStatus {
PENDING(0, "待审核"),

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.member.enums;
package com.wzj.soopin.transaction.enums;
public enum WithdrawStatus {
WAITING(0, "等待转账"),

View File

@ -1,8 +1,7 @@
package com.wzj.soopin.member.mapper;
package com.wzj.soopin.transaction.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzj.soopin.member.domain.po.Charge;
import com.wzj.soopin.member.domain.po.Withdraw;
import com.wzj.soopin.transaction.domain.po.Charge;
/**
* 意见反馈Mapper接口

View File

@ -0,0 +1,14 @@
package com.wzj.soopin.transaction.mapper;
import com.wzj.soopin.transaction.domain.po.DivideDetail;
import com.wzj.soopin.transaction.domain.vo.DivideDetailVO;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 意见反馈Mapper接口
*
* @author zcc
*/
public interface DivideDetailMapper extends BaseMapperPlus<DivideDetail, DivideDetailVO> {
}

View File

@ -0,0 +1,15 @@
package com.wzj.soopin.transaction.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzj.soopin.transaction.domain.po.Divide;
import com.wzj.soopin.transaction.domain.vo.DivideVO;
/**
* 意见反馈Mapper接口
*
* @author zcc
*/
public interface DivideMapper extends BaseMapper <Divide> {
DivideVO getVOById( Long divideId);
}

View File

@ -0,0 +1,14 @@
package com.wzj.soopin.transaction.mapper;
import com.wzj.soopin.transaction.domain.po.DivideRuleDetail;
import com.wzj.soopin.transaction.domain.vo.DivideRuleDetailVO;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 意见反馈Mapper接口
*
* @author zcc
*/
public interface DivideRuleDetailMapper extends BaseMapperPlus<DivideRuleDetail, DivideRuleDetailVO> {
}

View File

@ -0,0 +1,13 @@
package com.wzj.soopin.transaction.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzj.soopin.transaction.domain.po.DivideRule;
/**
* 意见反馈Mapper接口
*
* @author zcc
*/
public interface DivideRuleMapper extends BaseMapper<DivideRule> {
}

View File

@ -0,0 +1,8 @@
package com.wzj.soopin.transaction.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzj.soopin.transaction.domain.po.Withdraw;
public interface WithdrawMapper extends BaseMapper<Withdraw> {
}

View File

@ -1,8 +1,7 @@
package com.wzj.soopin.member.service;
package com.wzj.soopin.transaction.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.po.Charge;
import com.wzj.soopin.member.domain.po.Withdraw;
import com.wzj.soopin.transaction.domain.po.Charge;
public interface IChargeService extends IService<Charge> {

View File

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

View File

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

View File

@ -0,0 +1,13 @@
package com.wzj.soopin.transaction.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.transaction.domain.bo.DivideRuleBO;
import com.wzj.soopin.transaction.domain.po.DivideRule;
import com.wzj.soopin.transaction.domain.vo.DivideRuleVO;
public interface IDivideRuleService extends IService<DivideRule> {
boolean save( DivideRuleBO bo);
DivideRuleVO getVOById(Long divideId);
}

View File

@ -0,0 +1,13 @@
package com.wzj.soopin.transaction.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.transaction.domain.bo.DivideBO;
import com.wzj.soopin.transaction.domain.po.Divide;
import com.wzj.soopin.transaction.domain.vo.DivideVO;
public interface IDivideService extends IService<Divide> {
boolean save( DivideBO bo);
DivideVO getVOById( Long divideId);
}

View File

@ -0,0 +1,11 @@
package com.wzj.soopin.transaction.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
import com.wzj.soopin.transaction.domain.po.Withdraw;
public interface IWithdrawService extends IService<Withdraw> {
boolean audit(WithdrawBO bo);
boolean withdraw(Long id);
}

View File

@ -0,0 +1,52 @@
package com.wzj.soopin.transaction.service;
import com.wzj.soopin.transaction.domain.vo.YishengAccountVO;
import java.math.BigDecimal;
public interface IYishengService {
/**
* 获取易生账户
* @param memberId
* @return
*/
YishengAccountVO getYishengAccount(Long memberId);
/**
* 提现
* @param memberId
* @param money
* @return
*/
boolean withdraw(Long memberId, BigDecimal money);
/**
* 同步会员账户
* @return
*/
boolean syncMemberAccount();
/**
* 开通商户
*/
void openMerchant(Long memberId);
/**
* 获取商户账户
*/
YishengAccountVO getMerchantAccount(Long memberId);
/**
* 分账
*/
boolean split(Long memberId, BigDecimal money);
/**
* 商户审核通知
* */
boolean merchantAuditNotice(String request);
}

View File

@ -1,12 +1,9 @@
package com.wzj.soopin.member.service.impl;
package com.wzj.soopin.transaction.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.po.Charge;
import com.wzj.soopin.member.domain.po.MemberForbidden;
import com.wzj.soopin.member.mapper.ChargeMapper;
import com.wzj.soopin.member.mapper.MemberForbiddenMapper;
import com.wzj.soopin.member.service.IChargeService;
import com.wzj.soopin.member.service.IMemberForbiddenService;
import com.wzj.soopin.transaction.domain.po.Charge;
import com.wzj.soopin.transaction.mapper.ChargeMapper;
import com.wzj.soopin.transaction.service.IChargeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

View File

@ -0,0 +1,21 @@
package com.wzj.soopin.transaction.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.transaction.domain.po.DivideDetail;
import com.wzj.soopin.transaction.mapper.DivideDetailMapper;
import com.wzj.soopin.transaction.service.IDivideDetailService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* 分账服务实现类
*
* @author zcc
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class DivideDetailServiceImpl extends ServiceImpl<DivideDetailMapper, DivideDetail> implements IDivideDetailService {
}

View File

@ -0,0 +1,21 @@
package com.wzj.soopin.transaction.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.transaction.domain.po.DivideRuleDetail;
import com.wzj.soopin.transaction.mapper.DivideRuleDetailMapper;
import com.wzj.soopin.transaction.service.IDivideRuleDetailService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* 分账服务实现类
*
* @author zcc
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class DivideRuleDetailServiceImpl extends ServiceImpl<DivideRuleDetailMapper, DivideRuleDetail> implements IDivideRuleDetailService {
}

View File

@ -0,0 +1,99 @@
package com.wzj.soopin.transaction.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.transaction.convert.DivideRuleConvert;
import com.wzj.soopin.transaction.convert.DivideRuleDetailConvert;
import com.wzj.soopin.transaction.domain.bo.DivideRuleBO;
import com.wzj.soopin.transaction.domain.po.DivideRule;
import com.wzj.soopin.transaction.domain.po.DivideRuleDetail;
import com.wzj.soopin.transaction.domain.vo.DivideRuleVO;
import com.wzj.soopin.transaction.enums.DivideRuleStatus;
import com.wzj.soopin.transaction.mapper.DivideRuleDetailMapper;
import com.wzj.soopin.transaction.mapper.DivideRuleMapper;
import com.wzj.soopin.transaction.service.IDivideRuleService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.List;
/**
* 分账服务实现类
*
* @author zcc
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class DivideRuleServiceImpl extends ServiceImpl<DivideRuleMapper, DivideRule> implements IDivideRuleService {
private final DivideRuleDetailMapper detailMapper;
private final DivideRuleDetailConvert detailConvert;
private final DivideRuleConvert convert;
@Transactional(rollbackFor = Exception.class)
@Override
public boolean save(DivideRuleBO bo) {
DivideRule entity = convert.toPo(bo);
entity.setStatus(DivideRuleStatus.ON.getCode());
// 保存主分账信息
boolean mainResult = super.save(entity);
if (!mainResult) {
throw new ServiceException("分账主信息保存失败");
}
// 若明细列表不为空批量保存分账明细信息
if (!bo.getDetails().isEmpty()) {
List<DivideRuleDetail> detailEntities = bo.getDetails().stream()
.peek(detailBO -> detailBO.setRuleId(entity.getId()))
.map(detailConvert::toPo)
.toList();
boolean detailResult = detailMapper.insertBatch(detailEntities);
if (!detailResult) {
throw new ServiceException("明细保存失败");
}
}
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean removeById(Serializable id) {
// 根据主分账记录的 ID 删除对应的分账明细
boolean detailRemoveResult = detailMapper.delete(new QueryWrapper<DivideRuleDetail>().lambda().eq(DivideRuleDetail::getRuleId, id)) > 0;
if (!detailRemoveResult) {
log.error("分账规则明细信息删除失败,分账记录 ID: {}", id);
return false;
}
// 删除主分账记录
boolean mainRemoveResult = super.removeById(id);
if (!mainRemoveResult) {
log.error("分账规则主信息删除失败,分账记录 ID: {}", id);
return false;
}
return true;
}
@Override
public DivideRuleVO getVOById(Long divideId) {
DivideRule divideRule = baseMapper.selectById(divideId);
if (divideRule == null) {
return null;
}
List<DivideRuleDetail> detailList = detailMapper.selectList(new QueryWrapper<DivideRuleDetail>().lambda()
.eq(DivideRuleDetail::getRuleId, divideId));
DivideRuleVO vo = convert.toVO(divideRule);
vo.setDetails(detailConvert.toVO(detailList));
return vo;
}
}

View File

@ -0,0 +1,98 @@
package com.wzj.soopin.transaction.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.transaction.convert.DivideConvert;
import com.wzj.soopin.transaction.convert.DivideDetailConvert;
import com.wzj.soopin.transaction.domain.bo.DivideBO;
import com.wzj.soopin.transaction.domain.po.Divide;
import com.wzj.soopin.transaction.domain.po.DivideDetail;
import com.wzj.soopin.transaction.domain.vo.DivideVO;
import com.wzj.soopin.transaction.enums.DivideStatus;
import com.wzj.soopin.transaction.mapper.DivideDetailMapper;
import com.wzj.soopin.transaction.mapper.DivideMapper;
import com.wzj.soopin.transaction.service.IDivideService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.List;
/**
* 分账服务实现类
*
* @author zcc
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class DivideServiceImpl extends ServiceImpl<DivideMapper, Divide> implements IDivideService {
private final DivideDetailMapper detailMapper;
private final DivideDetailConvert detailConvert;
private final DivideConvert divideConvert;
@Override
@Transactional(rollbackFor = Exception.class)
public boolean save(DivideBO bo) {
Divide entity = divideConvert.toPo(bo);
entity.setStatus(DivideStatus.PENDING.getCode());
// 保存主分账信息
boolean mainResult = super.save(entity);
if (!mainResult) {
throw new ServiceException("分账主信息保存失败DivideBO: {}");
}
// 若明细列表不为空批量保存分账明细信息
if (!bo.getDetails().isEmpty()) {
List<DivideDetail> detailEntities = bo.getDetails().stream()
.peek(detailBO -> detailBO.setDivideId(entity.getId()))
.map(detailConvert::toPo)
.toList();
boolean detailResult = detailMapper.insertBatch(detailEntities);
if (!detailResult) {
throw new ServiceException("分账主信息保存失败DivideBO: {}");
}
}
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean removeById(Serializable id) {
// 根据主分账记录的 ID 删除对应的分账明细
boolean detailRemoveResult = detailMapper.delete(new QueryWrapper<DivideDetail>().lambda().eq(DivideDetail::getDivideId, id)) > 0;
if (!detailRemoveResult) {
log.error("分账明细信息删除失败,分账记录 ID: {}", id);
return false;
}
// 删除主分账记录
boolean mainRemoveResult = super.removeById(id);
if (!mainRemoveResult) {
log.error("分账主信息删除失败,分账记录 ID: {}", id);
return false;
}
return true;
}
@Override
public DivideVO getVOById(Long divideId) {
DivideVO divide = baseMapper.getVOById(divideId);
if (divide == null) {
return null;
}
List<DivideDetail> detailList = detailMapper.selectList(new QueryWrapper<DivideDetail>().lambda().eq(DivideDetail::getDivideId, divideId));
divide.setDetails(detailConvert.toVO(detailList));
return divide;
}
}

View File

@ -1,20 +1,19 @@
package com.wzj.soopin.member.service.impl;
package com.wzj.soopin.transaction.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.bo.WithdrawBO;
import com.wzj.soopin.member.domain.po.Charge;
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.Withdraw;
import com.wzj.soopin.member.domain.vo.YishengAccountVO;
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.WithdrawAuditStatus;
import com.wzj.soopin.member.enums.WithdrawStatus;
import com.wzj.soopin.member.mapper.ChargeMapper;
import com.wzj.soopin.member.mapper.MemberAccountMapper;
import com.wzj.soopin.member.mapper.WithdrawMapper;
import com.wzj.soopin.transaction.enums.WithdrawAuditStatus;
import com.wzj.soopin.transaction.enums.WithdrawStatus;
import com.wzj.soopin.transaction.mapper.WithdrawMapper;
import com.wzj.soopin.member.service.*;
import com.wzj.soopin.transaction.domain.vo.YishengAccountVO;
import com.wzj.soopin.transaction.service.IWithdrawService;
import com.wzj.soopin.transaction.service.IYishengService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper;

View File

@ -1,11 +1,8 @@
package com.wzj.soopin.member.service.impl;
package com.wzj.soopin.transaction.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.po.Charge;
import com.wzj.soopin.member.domain.vo.YishengAccountVO;
import com.wzj.soopin.member.mapper.ChargeMapper;
import com.wzj.soopin.member.service.IChargeService;
import com.wzj.soopin.member.service.IYishengService;
import com.wzj.soopin.transaction.domain.vo.YishengAccountVO;
import com.wzj.soopin.transaction.service.IYishengService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -37,4 +34,24 @@ public class YishengServiceImpl implements IYishengService {
public boolean syncMemberAccount() {
return true;
}
@Override
public void openMerchant(Long memberId) {
}
@Override
public YishengAccountVO getMerchantAccount(Long memberId) {
return null;
}
@Override
public boolean split(Long memberId, BigDecimal money) {
return false;
}
@Override
public boolean merchantAuditNotice(String request) {
return false;
}
}

View File

@ -0,0 +1,28 @@
<?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.transaction.mapper.DivideMapper">
<select id="getVOById" resultType="com.wzj.soopin.transaction.domain.vo.DivideVO">
SELECT
d.id,
d.order_sn,
d.order_money,
d.actual_money,
d.rule_id,
d.order_id,
d.fee,
d.status,
d.create_time,
dr.name as rule_name,
dr.type
FROM
trans_divide d
LEFT JOIN
trans_divide_rule dr ON d.rule_id = dr.id
WHERE
d.id = #{divideId}
</select>
</mapper>