diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java index 3c2c7582e..0c9dc521c 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java @@ -15,7 +15,7 @@ import com.wzj.soopin.member.domain.vo.AccountBillVO; import com.wzj.soopin.member.domain.vo.MemberAccountVO; import com.wzj.soopin.member.domain.vo.MemberBankVO; import com.wzj.soopin.member.domain.vo.MemberVO; -import com.wzj.soopin.member.service.IAccountBillService; +import com.wzj.soopin.transaction.service.IAccountBillService; import com.wzj.soopin.member.service.IMemberAccountService; import com.wzj.soopin.member.service.IMemberBankService; import com.wzj.soopin.member.service.IMemberService; @@ -36,7 +36,6 @@ import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.SocialLoginBody; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.ValidatorUtils; -import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.satoken.utils.LoginHelper; diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppOrderController.java b/ruoyi-admin/src/main/java/org/dromara/app/customer/AppOrderController.java similarity index 66% rename from ruoyi-admin/src/main/java/org/dromara/app/AppOrderController.java rename to ruoyi-admin/src/main/java/org/dromara/app/customer/AppOrderController.java index 486474c80..5ec6d6feb 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppOrderController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/customer/AppOrderController.java @@ -1,49 +1,27 @@ -package org.dromara.app; +package org.dromara.app.customer; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.wzj.soopin.content.domain.bo.IndexListBO; -import com.wzj.soopin.content.domain.bo.MyListBO; -import com.wzj.soopin.content.domain.bo.SimpleListBO; -import com.wzj.soopin.content.domain.bo.VlogBO; -import com.wzj.soopin.content.service.VlogService; -import com.wzj.soopin.content.service.VlogUploadService; -import com.wzj.soopin.content.utils.PagedGridResult; -import com.wzj.soopin.content.utils.QcCloud; import com.wzj.soopin.content.utils.RedisOperator; import com.wzj.soopin.order.domain.bo.OrderBo; import com.wzj.soopin.order.domain.bo.SaveOrderBO; import com.wzj.soopin.order.domain.entity.Order; import com.wzj.soopin.order.domain.vo.ManagerOrderDetailVO; import com.wzj.soopin.order.domain.vo.OrderVO; -import com.wzj.soopin.order.service.OrderItemService; import com.wzj.soopin.order.service.OrderService; -import com.wzj.soopin.order.service.impl.OrderServiceImpl; import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.dromara.common.core.domain.R; -import org.dromara.common.core.domain.model.LoginUser; -import org.dromara.common.core.exception.ServiceException; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.satoken.utils.LoginHelper; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import static com.wzj.soopin.content.domain.base.BaseInfoProperties.*; - @Slf4j @Api(tags = "订单相关接口") -@RequestMapping("/app/order") +@RequestMapping("/app/customer/order") @RestController @RequiredArgsConstructor public class AppOrderController { diff --git a/ruoyi-admin/src/main/java/org/dromara/app/shop/AppMerchantBillController.java b/ruoyi-admin/src/main/java/org/dromara/app/shop/AppMerchantBillController.java new file mode 100644 index 000000000..3d7c2eab4 --- /dev/null +++ b/ruoyi-admin/src/main/java/org/dromara/app/shop/AppMerchantBillController.java @@ -0,0 +1,82 @@ +package org.dromara.app.shop; + +import com.baomidou.mybatisplus.core.metadata.IPage; +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.domain.vo.AccountStatisticVO; +import com.wzj.soopin.member.enums.AccountTypeEnum; +import com.wzj.soopin.transaction.service.IAccountBillService; +import io.swagger.annotations.Api; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.system.domain.SysTenantAccount; +import org.dromara.system.service.ISysTenantAccountService; +import org.dromara.system.service.ISysTenantService; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 商户端,账单接口 + * + * @author Chopper + * @since 2020-12-18 16:59 + */ +@Slf4j +@Api(tags = "商户端,账单接口") +@RequestMapping("/app/merchant/account/") +@RestController +@RequiredArgsConstructor +public class AppMerchantBillController { + + private final IAccountBillService service; + private final AccountBillConvert convert; + + private final ISysTenantAccountService sysTenantAccountService; + private final ISysTenantService sysTenantService; + + private final IAccountBillService accountBillService; + + @Tag(name = "分页列表") + @PostMapping("/bill/page") + public R> page(@RequestBody AccountBillBO bo) { + + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + return R.fail("用户未登录"); + } + if(loginUser.getTenantId() == null){ + return R.fail("用户不是商户"); + } + //取member对应的商户 + SysTenantAccount sysTenantAccount = sysTenantAccountService.getByTenantId(loginUser.getTenantId()); + bo.setSource(AccountTypeEnum.MERCHANT.getCode()); + bo.setAccountId(sysTenantAccount.getId()); + Page articleList = service.page(bo.getPage(), bo.toWrapper()); + return R.ok(convert.toVO(articleList)); + } + + @Tag(name = "账户统计") + @PostMapping("/statistic") + public R statistic() { + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + return R.fail("用户未登录"); + } + if(loginUser.getTenantId() == null){ + return R.fail("用户不是商户"); + } + //根据当前登录的member获取用户信息 + return R.ok(accountBillService.getStatistic(loginUser.getTenantId())); + } + + +} diff --git a/ruoyi-admin/src/main/java/org/dromara/app/shop/AppShopOrderController.java b/ruoyi-admin/src/main/java/org/dromara/app/shop/AppShopOrderController.java new file mode 100644 index 000000000..3ff641cef --- /dev/null +++ b/ruoyi-admin/src/main/java/org/dromara/app/shop/AppShopOrderController.java @@ -0,0 +1,67 @@ +package org.dromara.app.shop; + +import com.wzj.soopin.order.domain.dto.CodeVerificationDto; +import com.wzj.soopin.order.service.VerificationCodeService; +import io.swagger.annotations.Api; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.satoken.utils.LoginHelper; +import org.springframework.web.bind.annotation.*; + +/** + * 商户端,订单接口 + * + * @author Chopper + * @since 2020-12-18 16:59 + */ +@Slf4j +@Api(tags = "商户端,订单接口") +@RequestMapping("/app/merchant/order") +@RestController +@RequiredArgsConstructor +public class AppShopOrderController { + + private final VerificationCodeService verificationCodeService; + + /** + * 扫码核销接口 + * @return 核销结果 + */ + @GetMapping("/verify") + @Tag(name = "核销接口") + public R verifyCode(@RequestParam("code") String code) { + + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + return R.fail("用户未登录"); + } + if(loginUser.getTenantId() == null){ + return R.fail("用户不是商户"); + } + verificationCodeService.verifyCode(code, loginUser.getTenantId()); + + return R.ok("核销成功"); + } + /** + * 扫码核销接口 + * @return 核销结果 + */ + @GetMapping("/scan") + @Tag(name = "扫码接口") + public R scan(@RequestParam("code") String code) { + + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + return R.fail("用户未登录"); + } + if(loginUser.getTenantId() == null){ + return R.fail("用户不是商户"); + } + return R.ok(verificationCodeService.scan(code)); + } + + +} diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java index 9d7b5b85e..cf7738fc9 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java @@ -34,6 +34,7 @@ import org.dromara.system.mapper.SysUserMapper; import org.dromara.web.domain.vo.LoginVo; import org.dromara.web.service.IAuthStrategy; import org.dromara.web.service.SysLoginService; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; /** @@ -58,36 +59,7 @@ public class SmsAuthStrategy implements IAuthStrategy { String tenantId = loginBody.getTenantId(); String phonenumber = loginBody.getPhonenumber(); String smsCode = loginBody.getSmsCode(); - LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> { - - - if("app".equals(client.getClientKey())){ - //会员登录 - Member member = loadMemberByPhonenumber(phonenumber); - - //手机号登录,如果没有则创建一个 - if (member == null) { - RegisterBody registerBody = new RegisterBody(); - registerBody.setPhoneNumber(phonenumber); - registerBody.setCode(smsCode); - registerBody.setUserType(UserType.APP_USER.getUserType()); - registerBody.setClientId(client.getClientId()); - registerBody.setUuid(phonenumber); - member = memberRegisterService.register(registerBody); - return loginService.buildLoginUser(member); - } else { - loginService.checkLogin(LoginType.SMS, tenantId, member.getUserName(), () -> !validateSmsCode(tenantId, phonenumber, smsCode)); - // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 - return loginService.buildLoginUser(member); - } - }else{ - //管理员登录 - SysUserVo user = loadUserByPhonenumber(phonenumber); - loginService.checkLogin(LoginType.SMS, tenantId, user.getUserName(), () -> !validateSmsCode(tenantId, phonenumber, smsCode)); - // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 - return loginService.buildLoginUser(user); - } - }); + LoginUser loginUser = checkUser(client, phonenumber, smsCode); loginUser.setClientKey(client.getClientKey()); loginUser.setDeviceType(client.getDeviceType()); SaLoginModel model = new SaLoginModel(); @@ -110,6 +82,45 @@ public class SmsAuthStrategy implements IAuthStrategy { } + private LoginUser checkUser(SysClientVo client, String phonenumber, String smsCode) { + if("app".equals(client.getClientKey())){ + //会员登录 + Member member = loadMemberByPhonenumber(phonenumber); + + //手机号登录,如果没有则创建一个 + if (member == null) { + RegisterBody registerBody = new RegisterBody(); + registerBody.setPhoneNumber(phonenumber); + registerBody.setCode(smsCode); + registerBody.setUserType(UserType.APP_USER.getUserType()); + registerBody.setClientId(client.getClientId()); + registerBody.setUuid(phonenumber); + member = memberRegisterService.register(registerBody); + return loginService.buildLoginUser(member); + } else { + loginService.checkLogin(LoginType.SMS, "tenantId", member.getUserName(), () -> !validateSmsCode("tenantId", phonenumber, smsCode)); + // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 + + + LoginUser user=loginService.buildLoginUser(member); + //检查member是否绑定了用户,如果有则获取用户信息 + if(ObjectUtil.isNotEmpty(member.getUserId())){ + SysUserVo sysUser = userMapper.selectVoById(member.getUserId()); + if(ObjectUtil.isNotEmpty(sysUser)){ + user.setTenantId(sysUser.getTenantId()); + } + } + return user; + } + }else{ + //管理员登录 + SysUserVo user = loadUserByPhonenumber(phonenumber); + loginService.checkLogin(LoginType.SMS, user.getTenantId(), user.getUserName(), () -> !validateSmsCode("tenantId", phonenumber, smsCode)); + + // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 + return loginService.buildLoginUser(user); + } + } private void checkMemberLogin(){ diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 7011fe358..5e25d0581 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -174,6 +174,7 @@ tenant: - oms_verification_codes - oms_verification_logs - ums_feedback + - trans_account_bill - trans_charge - trans_withdraw - trans_divide @@ -193,6 +194,7 @@ tenant: - sys_commission_rate_range - cont_article - cont_article_category + - diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/BaseBO.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/BaseBO.java index 10a866589..3366aabc1 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/BaseBO.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/BaseBO.java @@ -3,6 +3,7 @@ package org.dromara.common.core.domain; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.Data; import org.dromara.common.core.domain.model.BaseAudit; @@ -14,7 +15,9 @@ import java.util.Map; @Data public class BaseBO { + private Integer pageNo=1; + private Integer pageSize=10; protected LocalDateTime beginTime; @@ -28,4 +31,8 @@ public class BaseBO { public LambdaQueryWrapper toWrapper() { return new LambdaQueryWrapper(); } + + public Page getPage() { + return new Page<>(pageNo, pageSize); + } } diff --git a/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/enums/MessageActionEnum.java b/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/enums/MessageActionEnum.java index aeb3b7fe2..677cf4056 100644 --- a/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/enums/MessageActionEnum.java +++ b/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/enums/MessageActionEnum.java @@ -2,23 +2,24 @@ package org.dromara.common.mq.enums; public enum MessageActionEnum { - NEW_FOUCS(1,"newFocus"), //新的关注 - SYSTEM_NOTIFY(2, "system"), // 系统->通知 - SYSTEM_REPORT(3, "system"), // 系统->举报下架(视频,视频评论) 视频评论 - SYSTEM_CHECK(4, "system"), // 系统->审核结果(复审,驳回 ,通过) - SYSTEM_PUSH(5, "system"), //系统->推广类的 - INTERACTION_COMMENT(6, "interaction"), //互动->评论 - INTERACTION_AT(7, "interaction"), //互动->视频评论中的@ - INTERACTION_LIKE(8, "interaction"), //互动->点赞 - INTERACTION_REPLY(9, "interaction"), //互动->评论回复 - ORDER_RECHARGE(10, "order"), //订单->充值 online - ORDER_PAY(11, "order"), //订单->订单交易成功通知 online - ORDER_REFUND(12, "order"), //订单->退款结果通知 - GROUP_NOTIFY_CHECK(13, "groupNotify"), //群通知->进群申请 online - GROUP_NOTIFY_ACCEPT(14, "groupNotify"), // 群通知->进群审核审核通过 online - GROUP_NOTIFY_FAIL(15, "groupNotify"), // 群通知->进群审核审核拒绝 online - GROUP_NOTIFY_LEAVE_UP(16, "groupNotify"), // 群通知->群升级为达人群通知 - GROUP_NOTIFY_LEAVE_DOWN(17, "groupNotify"); // 群通知->群降级为普通群通知 + + SYSTEM_NOTIFY(10, "system"), // 系统->通知 + SYSTEM_REPORT(13, "system"), // 系统->举报下架(视频,视频评论) 视频评论 + SYSTEM_CHECK(14, "system"), // 系统->审核结果(复审,驳回 ,通过) + SYSTEM_PUSH(15, "system"), //系统->推广类的 + INTERACTION_COMMENT(21, "interaction"), //互动->评论 + INTERACTION_AT(27, "interaction"), //互动->视频评论中的@ + INTERACTION_LIKE(28, "interaction"), //互动->点赞 + NEW_FOUCS(21,"newFocus"), //新的关注 + INTERACTION_REPLY(29, "interaction"), //互动->评论回复 + ORDER_RECHARGE(30, "order"), //订单->充值 online + ORDER_PAY(31, "order"), //订单->订单交易成功通知 online + ORDER_REFUND(32, "order"), //订单->退款结果通知 + GROUP_NOTIFY_CHECK(43, "groupNotify"), //群通知->进群申请 online + GROUP_NOTIFY_ACCEPT(44, "groupNotify"), // 群通知->进群审核审核通过 online + GROUP_NOTIFY_FAIL(45, "groupNotify"), // 群通知->进群审核审核拒绝 online + GROUP_NOTIFY_LEAVE_UP(46, "groupNotify"), // 群通知->群升级为达人群通知 + GROUP_NOTIFY_LEAVE_DOWN(47, "groupNotify"); // 群通知->群降级为普通群通知 private int code; private String account; diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java index b7c7609a1..bd52c3004 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java @@ -218,4 +218,5 @@ public class LoginHelper { } } + } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyListBO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyListBO.java index d6f99ab04..d3be53221 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyListBO.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyListBO.java @@ -16,11 +16,4 @@ public class MyListBO extends BaseBO { @Schema(description = "是否公开(1公开,0私密)") private Integer privateFlag; - @Schema(description = "页码", defaultValue = "1") - private Long pageNum = 1L; - - @Schema(description = "每页大小", defaultValue = "10") - private Long pageSize = 10L; - - } diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/ISystemMessageUserService.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/IMQMessageHandleService.xml similarity index 100% rename from ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/ISystemMessageUserService.xml rename to ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/IMQMessageHandleService.xml diff --git a/ruoyi-modules/ruoyi-member/pom.xml b/ruoyi-modules/ruoyi-member/pom.xml index 4fb8823ce..c2bf0fe70 100644 --- a/ruoyi-modules/ruoyi-member/pom.xml +++ b/ruoyi-modules/ruoyi-member/pom.xml @@ -71,6 +71,10 @@ org.dromara ruoyi-common-security + + org.dromara + ruoyi-system + org.dromara diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/bo/AccountBillBO.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/bo/AccountBillBO.java index d8a86f1c1..47982b1fd 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/bo/AccountBillBO.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/bo/AccountBillBO.java @@ -51,4 +51,5 @@ public class AccountBillBO extends BaseBO { .eq(getAccountId() != null, AccountBill::getAccountId,accountId) .eq(getSource() != null, AccountBill::getSource,source); } + } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/AccountBill.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/AccountBill.java index eba2642ed..c03164721 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/AccountBill.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/AccountBill.java @@ -17,7 +17,7 @@ import java.math.BigDecimal; */ @Schema(description="账单") @Data -@TableName("ums_account_bill") +@TableName("trans_account_bill") @Builder public class AccountBill extends BaseAudit { @@ -54,4 +54,8 @@ public class AccountBill extends BaseAudit { private Integer source; + @Schema(description ="状态 0正常 1停用") + private Integer status; + + } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/vo/AccountStatisticVO.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/vo/AccountStatisticVO.java new file mode 100644 index 000000000..ed47c47b0 --- /dev/null +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/vo/AccountStatisticVO.java @@ -0,0 +1,46 @@ +package com.wzj.soopin.member.domain.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.dromara.common.core.domain.model.BaseAudit; +import org.dromara.common.excel.annotation.Excel; + +import java.math.BigDecimal; + +/** + * + * + * @author zcc + */ +@Schema(description="账户") +@Data +public class AccountStatisticVO extends BaseAudit { + + private Long id; + + private Long accountId; + + + @Schema(description ="余额") + @Excel(name = "余额") + private BigDecimal moneyBalance; + + /** + * 入账金额 + */ + private BigDecimal moneyIn; + /** + * 出账金额 + */ + private BigDecimal moneyOut; + + /** + * 已入账 + */ + private BigDecimal credited; + + /** + * 未入账 + */ + private BigDecimal pending; +} diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IAccountBillService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IAccountBillService.java deleted file mode 100644 index 6d18c9090..000000000 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IAccountBillService.java +++ /dev/null @@ -1,8 +0,0 @@ -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 { - -} diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberAccountService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberAccountService.java index 6b3d9863c..b1ba7c934 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberAccountService.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberAccountService.java @@ -19,7 +19,4 @@ public interface IMemberAccountService extends IService { Object getCount(); - boolean addMoney(BigDecimal money, Long memberId, AccountBillSourceEnum type, String remark); - - boolean reduceMoney(BigDecimal money, Long memberId, AccountBillSourceEnum type, String remark); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/AccountBillServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/AccountBillServiceImpl.java deleted file mode 100644 index 5184c273c..000000000 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/AccountBillServiceImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -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 implements IAccountBillService { - - - - - -} diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberAccountServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberAccountServiceImpl.java index 64350b89c..a5a6f3789 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberAccountServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberAccountServiceImpl.java @@ -10,7 +10,6 @@ import com.wzj.soopin.member.domain.bo.MemberAccountBO; import com.wzj.soopin.member.domain.vo.MemberAccountVO; 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.member.service.IMemberAccountService; import lombok.RequiredArgsConstructor; @@ -28,7 +27,6 @@ import java.math.BigDecimal; @RequiredArgsConstructor public class MemberAccountServiceImpl extends ServiceImpl implements IMemberAccountService { - private final AccountBillMapper accountBillMapper; @Override public MemberAccount getMemberAccount(Long memberId) { @@ -57,64 +55,4 @@ public class MemberAccountServiceImpl extends ServiceImpl - + + diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/ums/MemberAccountChangeRecord.xml b/ruoyi-modules/ruoyi-member/src/main/resources/ums/MemberAccountChangeRecord.xml index 7810c009f..4a74c503c 100644 --- a/ruoyi-modules/ruoyi-member/src/main/resources/ums/MemberAccountChangeRecord.xml +++ b/ruoyi-modules/ruoyi-member/src/main/resources/ums/MemberAccountChangeRecord.xml @@ -1,5 +1,5 @@ - + diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/VerificationCodeController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/VerificationCodeController.java index efb8d14cf..5b7ddccde 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/VerificationCodeController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/VerificationCodeController.java @@ -32,21 +32,6 @@ public class VerificationCodeController { return verificationCodeService.generateVerificationCode(orderId); } - /** - * 扫码核销接口 - * @return 核销结果 - */ - @PostMapping("/verify") - @Tag(name = "扫码核销接口") - public R verifyCode(@RequestBody CodeVerificationDto codeVerificationDto) { - R result = verificationCodeService.verifyCode(codeVerificationDto); - if (R.isSuccess(result)){ - verificationCodeService.sendMessage(codeVerificationDto); - } - else{ - verificationCodeService.sendMessageNo(codeVerificationDto); - } - return result; - } + } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/dto/CodeVerificationDto.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/dto/CodeVerificationDto.java index 91e17cbfa..4f12a0dbb 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/dto/CodeVerificationDto.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/dto/CodeVerificationDto.java @@ -10,7 +10,5 @@ public class CodeVerificationDto { @Schema(description = "核销码") private String codeValue; - @Schema(description = "商家id") - private Long usedMerchantId; } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/VerificationCodes.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/VerificationCodes.java index 247c0a723..5b78924ae 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/VerificationCodes.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/VerificationCodes.java @@ -37,8 +37,17 @@ public class VerificationCodes extends BaseAudit { private LocalDateTime usedTime; @Schema(description = "使用商家id") - private Long usedMerchantId; + private String usedMerchantId; @Schema(description = "过期时间") private LocalDateTime expireTime; + + @Schema(description = "核销时间") + private LocalDateTime verificationTime; + + @Schema(description = "核销结果") + private Integer result; + + @Schema(description = "失败原因") + private String reason; } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/VerificationCodeService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/VerificationCodeService.java index e3152fbfe..8e0b6bc8d 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/VerificationCodeService.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/VerificationCodeService.java @@ -3,6 +3,8 @@ package com.wzj.soopin.order.service; import com.baomidou.mybatisplus.extension.service.IService; import com.wzj.soopin.order.domain.dto.CodeVerificationDto; import com.wzj.soopin.order.domain.entity.VerificationCodes; +import com.wzj.soopin.order.domain.vo.ManagerOrderDetailVO; +import com.wzj.soopin.order.domain.vo.OrderVO; import org.dromara.common.core.domain.R; public interface VerificationCodeService extends IService { @@ -10,9 +12,7 @@ public interface VerificationCodeService extends IService { R generateVerificationCode(Long orderId); - R verifyCode(CodeVerificationDto codeVerificationDto); + void verifyCode(String code,String tenantId); - void sendMessage(CodeVerificationDto codeVerificationDto); - - void sendMessageNo(CodeVerificationDto codeVerificationDto); + ManagerOrderDetailVO scan(String code); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java index aa5f08f65..7fbffbb54 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java @@ -71,11 +71,7 @@ public class OrderServiceImpl extends ServiceImpl implements private final OrderOperateHistoryMapper orderOperateHistoryMapper; private final MemberMapper memberMapper; private final OrderDeliveryHistoryMapper orderDeliveryHistoryMapper; - private final VerificationCodeService verificationCodeService; private final SysTenantMapper sysTenantMapper; - private final MemberWechatMapper memberWechatMapper; - private final WechatPaymentHistoryMapper wechatPaymentHistoryMapper; - private final RedisService redisService; private final AftersaleMapper aftersaleMapper; /** diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/RedPacketServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/RedPacketServiceImpl.java index 8dc49dc67..23583dfb3 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/RedPacketServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/RedPacketServiceImpl.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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; @@ -34,7 +33,6 @@ public class RedPacketServiceImpl extends ServiceImpl redisTemplate; // Redis锁前缀 @@ -204,18 +202,18 @@ public class RedPacketServiceImpl extends ServiceImpl().eq(VerificationCodes::getCode, codeValue) + VerificationCodes verificationCodes = codeMapper.selectOne( + new LambdaQueryWrapper().eq(VerificationCodes::getCode, code) ); - if (code == null) { - recordVerificationLog(null, null, usedMerchantId, 0, "核销码不存在"); - return R.fail("核销码不存在"); + if (verificationCodes == null) { + throw new IllegalArgumentException("核销码不存在"); } // 检查核销码状态 - if (code.getStatus() == 1) { - recordVerificationLog(code.getId(), code.getOrderId(), usedMerchantId, 0, "核销码已使用"); - return R.fail("核销码已使用"); + if (verificationCodes.getStatus() == 1) { + throw new IllegalArgumentException("核销码已使用"); } - if (code.getStatus() == 2) { - recordVerificationLog(code.getId(), code.getOrderId(), usedMerchantId, 0, "核销码已过期"); - return R.fail("核销码已过期"); + if (verificationCodes.getStatus() == 2) { + throw new IllegalArgumentException("核销码已过期"); + } + // 检查核销码是否过期 + if (LocalDateTime.now().isAfter(verificationCodes.getExpireTime())) { + // 更新状态为已过期 + verificationCodes.setStatus(3); + codeMapper.updateById(verificationCodes); + throw new IllegalArgumentException("核销码已过期"); + } + // 检查订单状态 + Order order = orderMapper.selectById(verificationCodes.getOrderId()); + if (order == null || order.getStatus() != 6) { + throw new IllegalArgumentException("订单状态异常,无法核销"); + } + + + + if (verificationCodes.getStatus() == 1 || verificationCodes.getVerificationTime() != null) { + throw new IllegalArgumentException("该订单已被核销,核销时间:" + verificationCodes.getVerificationTime()); + } + return orderService.selectById(verificationCodes.getOrderId()); + } + + @Override + public void verifyCode(String code,String tenantId) { + + // 参数校验 + if (StringUtils.isBlank(code) || tenantId == null) { + throw new IllegalArgumentException("参数不能为空"); + } + + // 查询核销码 + VerificationCodes verificationCodes = codeMapper.selectOne( + new LambdaQueryWrapper().eq(VerificationCodes::getCode, code) + ); + if (verificationCodes == null) { + throw new IllegalArgumentException("核销码不存在"); + } + + // 检查核销码状态 + if (verificationCodes.getStatus() == 1) { + throw new IllegalArgumentException("核销码已使用"); + } + + if (verificationCodes.getStatus() == 2) { + throw new IllegalArgumentException("核销码已过期"); } // 检查订单状态 - Order order = orderMapper.selectById(code.getOrderId()); + Order order = orderMapper.selectById(verificationCodes.getOrderId()); if (order == null || order.getStatus() != 6) { - recordVerificationLog(code.getId(), code.getOrderId(), usedMerchantId, 0, "订单状态异常,无法核销"); - return R.fail("订单状态异常,无法核销"); + throw new IllegalArgumentException("订单状态异常,无法核销"); } // 检查核销码是否过期 - if (LocalDateTime.now().isAfter(code.getExpireTime())) { + if (LocalDateTime.now().isAfter(verificationCodes.getExpireTime())) { // 更新状态为已过期 - code.setStatus(3); - codeMapper.updateById(code); - recordVerificationLog(code.getId(), code.getOrderId(), usedMerchantId, 0, "核销码已过期"); - return R.fail("核销码已过期"); + verificationCodes.setStatus(3); + codeMapper.updateById(verificationCodes); + throw new IllegalArgumentException("核销码已过期"); } - // 检查该订单是否已经核销过 - VerificationLogs existingLog = logMapper.selectOne( - new LambdaQueryWrapper() - .eq(VerificationLogs::getOrderId, code.getOrderId()) - .eq(VerificationLogs::getResult, 1) - ); - - if (existingLog != null) { - recordVerificationLog(code.getId(), code.getOrderId(), usedMerchantId, 0, - "该订单已被核销,核销时间:" + existingLog.getVerificationTime()); - return R.fail("该订单已被核销,核销时间:" + existingLog.getVerificationTime()); + if (verificationCodes.getStatus() == 1 || verificationCodes.getVerificationTime() != null) { + throw new IllegalArgumentException("该订单已被核销,核销时间:" + verificationCodes.getVerificationTime()); } // 执行核销 - code.setStatus(1); - code.setUsedTime(LocalDateTime.now()); - code.setUsedMerchantId(usedMerchantId); - int result = codeMapper.updateById(code); + verificationCodes.setStatus(1); + verificationCodes.setUsedTime(LocalDateTime.now()); + verificationCodes.setUsedMerchantId(tenantId); + verificationCodes.setVerificationTime(LocalDateTime.now()); + verificationCodes.setResult(1); + int result = codeMapper.updateById(verificationCodes); if (result != 1) { - recordVerificationLog(code.getId(), code.getOrderId(), usedMerchantId, 0, "核销失败,请重试"); - return R.fail("核销失败,请重试"); + throw new IllegalArgumentException("核销失败,请重试"); } // 更新订单状态 @@ -170,39 +215,9 @@ public class VerificationCodeServiceImpl extends ServiceImpl resultData = new HashMap<>(); - resultData.put("orderId", order.getId()); - resultData.put("orderSn", order.getOrderSn()); - resultData.put("used_time", order.getUsedTime()); - resultData.put("code_url", order.getCodeUrl()); - - return R.ok("核销成功", resultData); } - /** - * 记录核销日志 - * @param codeId 核销码ID - * @param orderId 订单ID - * @param merchantId 商户ID - * @param result 结果:1成功,0失败 - * @param reason 失败原因 - */ - private void recordVerificationLog(Long codeId, Long orderId, Long merchantId, Integer result, String reason) { - VerificationLogs log = new VerificationLogs(); - log.setCodeId(codeId); - log.setOrderId(orderId); - log.setMerchantId(merchantId); - log.setVerificationTime(LocalDateTime.now()); - log.setResult(result); - log.setReason(reason); - logMapper.insert(log); - } - /** * 生成唯一核销码 */ @@ -212,48 +227,4 @@ public class VerificationCodeServiceImpl extends ServiceImpl resultMap = codeMapper.getProduvtNameAndMemberId(code); -// String productName = (String) resultMap.get("productName"); - Long memberId = (Long) resultMap.get("memberId"); - LocalDateTime verificationTime = codeMapper.verificationTime(code); - String formattedTime = verificationTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - // 核销成功模板ID - // 改为新版模板类型调用 - Map params = new HashMap<>(); -// params.put("productName", productName); - params.put("verificationTime", formattedTime); -// SysMessageBo messageBo = new SysMessageBo(); -// // 核销成功类型编号 -// messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.VERIFY_SUCCESS); -// messageBo.setTemplateParams(params); -// messageBo.setSenderId(memberId); -// // 补充:设置消息标题 -// messageBo.setTitle("核销成功通知"); -// sysMessageService.sendMessageToUser(messageBo, memberId); - } - - @Override - public void sendMessageNo(CodeVerificationDto codeVerificationDto) { - String code = codeVerificationDto.getCodeValue(); - Map resultMap = codeMapper.getProduvtNameAndMemberId(code); -// String productName = (String) resultMap.get("productName"); - Long memberId = (Long) resultMap.get("memberId"); - String reason = codeMapper.getReason(code); - // 核销失败模板ID - // 改为新版模板类型调用 - Map params = new HashMap<>(); -// params.put("productName", productName); - params.put("reason", reason); -// SysMessageBo messageBo = new SysMessageBo(); -// // 核销失败类型编号 -// messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.VERIFY_FAIL); -// messageBo.setTemplateParams(params); -// messageBo.setSenderId(memberId); -// // 补充:设置消息标题 -// messageBo.setTitle("核销失败通知"); -// sysMessageService.sendMessageToUser(messageBo, memberId); - } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysTenantAccount.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysTenantAccount.java index ed108c68f..975371b7d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysTenantAccount.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysTenantAccount.java @@ -14,7 +14,7 @@ public class SysTenantAccount extends BaseAudit { @Schema(description = "主键ID") private Long id; @Schema(description = "租户ID") - private Long tenantId; + private String tenantId; @Schema(description = "现金余额") private BigDecimal moneyBalance; @Schema(description = "钱包余额") diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantAccountStatisticVO.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantAccountStatisticVO.java new file mode 100644 index 000000000..b375e9edf --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantAccountStatisticVO.java @@ -0,0 +1,46 @@ +package org.dromara.system.domain.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.dromara.common.core.domain.model.BaseAudit; +import org.dromara.common.excel.annotation.Excel; + +import java.math.BigDecimal; + +/** + * + * + * @author zcc + */ +@Schema(description="账户") +@Data +public class SysTenantAccountStatisticVO extends BaseAudit { + + private Long id; + + private Long accountId; + + + @Schema(description ="余额") + @Excel(name = "余额") + private BigDecimal moneyBalance; + + /** + * 入账金额 + */ + private BigDecimal moneyIn; + /** + * 出账金额 + */ + private BigDecimal moneyOut; + + /** + * 已入账 + */ + private BigDecimal credited; + + /** + * 未入账 + */ + private BigDecimal pending; +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTenantAccountMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTenantAccountMapper.java index 229889eb2..936e42bd3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTenantAccountMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTenantAccountMapper.java @@ -14,9 +14,11 @@ import org.dromara.system.domain.vo.SysTenantAccountVo; @Mapper public interface SysTenantAccountMapper extends BaseMapperPlus { - + /** * 分页查询租户账户列表(关联租户表获取店铺名称) */ IPage selectTenantAccountPage(Page page, @Param("bo") SysTenantAccountBo bo); + + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantAccountService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantAccountService.java index dba73b75c..0e459decb 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantAccountService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantAccountService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.system.domain.CommissionSection; import org.dromara.system.domain.SysTenantAccount; import org.dromara.system.domain.bo.SysTenantAccountBo; +import org.dromara.system.domain.vo.SysTenantAccountStatisticVO; import org.dromara.system.domain.vo.SysTenantAccountVo; import java.util.List; @@ -19,5 +20,6 @@ public interface ISysTenantAccountService extends IService { boolean updateById(SysTenantAccount po); boolean removeById(Long id); - SysTenantAccount getByTenantId(Long tenantId); + SysTenantAccount getByTenantId(String tenantId); + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantAccountServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantAccountServiceImpl.java index 10355d92a..c214b6f80 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantAccountServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantAccountServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.dromara.system.domain.SysTenantAccount; import org.dromara.system.domain.bo.SysTenantAccountBo; +import org.dromara.system.domain.vo.SysTenantAccountStatisticVO; import org.dromara.system.domain.vo.SysTenantAccountVo; import org.dromara.system.mapper.SysTenantAccountMapper; import org.dromara.system.service.ISysTenantAccountService; @@ -66,7 +67,10 @@ public class SysTenantAccountServiceImpl extends ServiceImpl().eq(SysTenantAccount::getTenantId, tenantId)); } + + + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java index 5a16cebeb..91296e2f3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java @@ -249,7 +249,7 @@ public class SysTenantServiceImpl implements ISysTenantService { // 创建店铺账号 SysTenantAccount tenantAccount = new SysTenantAccount(); - tenantAccount.setTenantId(Long.valueOf(tenantId)); + tenantAccount.setTenantId(tenantId); tenantAccount.setType(bo.getType()); tenantAccount.setMoneyBalance(BigDecimal.ZERO); tenantAccount.setWallet(BigDecimal.ZERO); diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/controller/AccountBillController.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/AccountBillController.java similarity index 96% rename from ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/controller/AccountBillController.java rename to ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/AccountBillController.java index 8aba2c82d..48691e9ef 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/controller/AccountBillController.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/AccountBillController.java @@ -1,4 +1,4 @@ -package com.wzj.soopin.member.controller; +package com.wzj.soopin.transaction.controller; import cn.dev33.satoken.annotation.SaCheckPermission; @@ -7,7 +7,7 @@ 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 com.wzj.soopin.transaction.service.IAccountBillService; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/domain/po/DivideDetail.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/domain/po/DivideDetail.java index ac4fc1df9..c8d9db867 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/domain/po/DivideDetail.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/domain/po/DivideDetail.java @@ -124,4 +124,9 @@ public class DivideDetail extends BaseAudit { @TableField(value = "del_flag", fill = FieldFill.INSERT, jdbcType = JdbcType.CHAR) private String delFlag; + /** + * 账户id + * */ + private Long accountId; + } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/plugin/wallet/WalletPlugin.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/plugin/wallet/WalletPlugin.java index f8fb1c587..7eb8bfb5e 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/plugin/wallet/WalletPlugin.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/plugin/wallet/WalletPlugin.java @@ -13,6 +13,7 @@ import com.wzj.soopin.transaction.kit.Payment; import com.wzj.soopin.transaction.kit.dto.PayParam; import com.wzj.soopin.transaction.kit.dto.PaymentSuccessParams; import com.wzj.soopin.transaction.kit.params.dto.CashierParam; +import com.wzj.soopin.transaction.service.IAccountBillService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; @@ -51,7 +52,7 @@ public class WalletPlugin implements Payment { /** * 会员余额 */ - private final IMemberAccountService memberAccountService; + private final IAccountBillService accountBillService; /** * 收银台 */ @@ -161,7 +162,7 @@ public class WalletPlugin implements Payment { throw new ServiceException(ResultCode.USER_NOT_LOGIN); } //个人账户扣减 - boolean result = memberAccountService.reduceMoney( + boolean result = accountBillService.reduceMoney( cashierParam.getPrice(), loginUser.getUserId(), diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/AccountBillMapper.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/mapper/AccountBillMapper.java similarity index 84% rename from ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/AccountBillMapper.java rename to ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/mapper/AccountBillMapper.java index 9c1efca30..a367d458a 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/AccountBillMapper.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/mapper/AccountBillMapper.java @@ -1,4 +1,4 @@ -package com.wzj.soopin.member.mapper; +package com.wzj.soopin.transaction.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -7,6 +7,8 @@ import com.wzj.soopin.member.domain.vo.AccountDetailVO; import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import java.math.BigDecimal; + /** * 会员账户变动记录Mapper接口 */ @@ -19,4 +21,11 @@ public interface AccountBillMapper extends BaseMapperPlus selectByDivideId(@Param("divideId") Long divideId); + + BigDecimal getMoney(@Param("accountId") Long accountId, @Param("status") Integer status); } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IAccountBillService.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IAccountBillService.java new file mode 100644 index 000000000..cd70113cf --- /dev/null +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IAccountBillService.java @@ -0,0 +1,24 @@ +package com.wzj.soopin.transaction.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +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.AccountStatisticVO; +import com.wzj.soopin.member.enums.AccountBillSourceEnum; + +import java.math.BigDecimal; + +public interface IAccountBillService extends IService { + + AccountStatisticVO getStatistic(String tenantId); + + IPage selectVoPage(AccountBillBO bo); + + + boolean addMoney(BigDecimal money, Long memberId, AccountBillSourceEnum type, String remark); + + boolean reduceMoney(BigDecimal money, Long memberId, AccountBillSourceEnum type, String remark); + +} diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IDivideDetailService.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IDivideDetailService.java index 17b7d8ed9..003cb277c 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IDivideDetailService.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IDivideDetailService.java @@ -3,6 +3,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 { +import java.math.BigDecimal; +public interface IDivideDetailService extends IService { + BigDecimal selectPendingMoney(Long accountId); } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/AccountBillServiceImpl.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/AccountBillServiceImpl.java new file mode 100644 index 000000000..a2cc66895 --- /dev/null +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/AccountBillServiceImpl.java @@ -0,0 +1,133 @@ +package com.wzj.soopin.transaction.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.po.MemberAccount; +import com.wzj.soopin.member.domain.vo.AccountBillVO; +import com.wzj.soopin.member.domain.vo.AccountStatisticVO; +import com.wzj.soopin.member.enums.AccountBillChangeTypeEnum; +import com.wzj.soopin.member.enums.AccountBillSourceEnum; +import com.wzj.soopin.member.service.IMemberAccountService; +import com.wzj.soopin.transaction.mapper.AccountBillMapper; +import com.wzj.soopin.transaction.mapper.DivideDetailMapper; +import com.wzj.soopin.transaction.service.IAccountBillService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.system.domain.SysTenantAccount; +import org.dromara.system.service.ISysTenantAccountService; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; + +/** + * 会员账户表Service业务层处理 + * + * + * @author zcc + */ +@Service +@AllArgsConstructor +@Slf4j +public class AccountBillServiceImpl extends + ServiceImpl implements IAccountBillService { + + private final ISysTenantAccountService tenantAccountService; + private final DivideDetailMapper divideDetailMapper; + + private final AccountBillConvert convert; + + private final IMemberAccountService memberAccountService; + + @Override + public AccountStatisticVO getStatistic(String tenantId) { + //先获取账户信息 + SysTenantAccount account =tenantAccountService.getByTenantId(tenantId); + AccountStatisticVO vo = new AccountStatisticVO(); + vo.setAccountId(account.getId()); + vo.setMoneyBalance(account.getMoneyBalance()); + vo.setMoneyIn(baseMapper.getAccountBillSum(account.getId(), 1)); + vo.setMoneyOut(baseMapper.getAccountBillSum(account.getId(), 2)); + //然后统计账户的所有入的总和 + //统计已入账金额 + vo.setPending(divideDetailMapper.getMoney(account.getId(),1)); + //统计未入账金额 + vo.setPending(divideDetailMapper.getMoney(account.getId(),2)); + return vo; + } + + + @Override + public IPage selectVoPage( AccountBillBO bo) { + Page pageResult= baseMapper.selectPage(bo.getPage(), bo.toWrapper()); + + return convert.toVO(pageResult); + } + + + + + @Override + public boolean addMoney(BigDecimal money, Long memberId, AccountBillSourceEnum source, String remark) { + MemberAccount memberAccount = memberAccountService.getMemberAccount(memberId); + if (memberAccount == null) { + throw new RuntimeException("用户不存在"); + } + //检查当前用于的账户余额是否充足 + BigDecimal balance = memberAccount.getWallet(); + + + BigDecimal newBalance = balance.add(money); + //锁定用户余额 + memberAccountService.updateById(memberAccount.toBuilder().wallet(newBalance).build()); + + //生成账单 + AccountBill memberAccountChangeRecord = AccountBill.builder() + .accountId(memberAccount.getId()) + .changeAmount(money) + .moneyBalance(newBalance) + .beforeBalance(balance) + .afterBalance(newBalance) + .changeType(AccountBillChangeTypeEnum.IN.getCode()) + .changeDesc(remark) + .source(source.getCode()) + .build(); + baseMapper.insert(memberAccountChangeRecord); + return false; + } + + @Override + public boolean reduceMoney(BigDecimal money, Long memberId, AccountBillSourceEnum source, String remark) { + MemberAccount memberAccount = memberAccountService.getMemberAccount(memberId); + if (memberAccount == null) { + throw new RuntimeException("用户不存在"); + } + //检查当前用于的账户余额是否充足 + BigDecimal balance = memberAccount.getWallet(); + if (balance.compareTo(money) < 0) { + throw new RuntimeException("用户余额不足"); + } + + BigDecimal newBalance = balance.subtract(money); + //锁定用户余额 + memberAccountService.updateById(memberAccount.toBuilder().wallet(newBalance).build()); + + //生成账单 + AccountBill memberAccountChangeRecord = AccountBill.builder() + .accountId(memberAccount.getId()) + .changeAmount(money) + .moneyBalance(newBalance) + .beforeBalance(balance) + .afterBalance(newBalance) + .changeType(AccountBillChangeTypeEnum.OUT.getCode()) + .changeDesc(remark) + .source(source.getCode()) + .build(); + baseMapper.insert(memberAccountChangeRecord); + + return true; + } +} diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/ChargeServiceImpl.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/ChargeServiceImpl.java index ad9c399f3..cb0acf7d2 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/ChargeServiceImpl.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/ChargeServiceImpl.java @@ -5,7 +5,7 @@ import com.wzj.soopin.member.domain.po.AccountBill; import com.wzj.soopin.member.domain.po.MemberAccount; import com.wzj.soopin.member.enums.AccountBillChangeTypeEnum; import com.wzj.soopin.member.enums.AccountBillSourceEnum; -import com.wzj.soopin.member.service.IAccountBillService; +import com.wzj.soopin.transaction.service.IAccountBillService; import com.wzj.soopin.member.service.IMemberAccountService; import com.wzj.soopin.transaction.domain.po.Charge; import com.wzj.soopin.transaction.enums.ChargeStatus; diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/DivideDetailServiceImpl.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/DivideDetailServiceImpl.java index 76628fee1..fa0355879 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/DivideDetailServiceImpl.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/DivideDetailServiceImpl.java @@ -8,6 +8,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.math.BigDecimal; + /** * 分账服务实现类 * @@ -18,4 +20,9 @@ import org.springframework.stereotype.Service; @Slf4j public class DivideDetailServiceImpl extends ServiceImpl implements IDivideDetailService { + + @Override + public BigDecimal selectPendingMoney(Long accountId) { + return baseMapper.getMoney(accountId,1); + } } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WithdrawServiceImpl.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WithdrawServiceImpl.java index 5c7bdf6d7..40139b60b 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WithdrawServiceImpl.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WithdrawServiceImpl.java @@ -12,6 +12,7 @@ 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.EasypayAccountVO; +import com.wzj.soopin.transaction.service.IAccountBillService; import com.wzj.soopin.transaction.service.IWithdrawService; import com.wzj.soopin.transaction.service.IEasypayService; import lombok.RequiredArgsConstructor; @@ -104,7 +105,8 @@ public class WithdrawServiceImpl extends ServiceImpl i public boolean withdrawRevenue(Withdraw withdraw) { //调用三方支付平台获取用户余额 - SysTenantAccount tenantAccount = sysTenantAccountService.getByTenantId(withdraw.getMemberId()); + // TODO: 2025/9/10 这个地方不能用null ,但是现在商户提现的业务不对,暂时没有提现业务 + SysTenantAccount tenantAccount = sysTenantAccountService.getByTenantId(null); if (tenantAccount == null) { throw new RuntimeException("用户不存在"); } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/resources/mapper/transaction/DivideDetailMapper.xml b/ruoyi-modules/ruoyi-transaction/src/main/resources/mapper/transaction/DivideDetailMapper.xml new file mode 100644 index 000000000..a19a938b0 --- /dev/null +++ b/ruoyi-modules/ruoyi-transaction/src/main/resources/mapper/transaction/DivideDetailMapper.xml @@ -0,0 +1,20 @@ + + + + + +