diff --git a/pz-merchant/src/main/java/com/pz/merchant/controller/applet/CompanyController.java b/pz-merchant/src/main/java/com/pz/merchant/controller/applet/CompanyController.java index cd01155..ef62eaf 100644 --- a/pz-merchant/src/main/java/com/pz/merchant/controller/applet/CompanyController.java +++ b/pz-merchant/src/main/java/com/pz/merchant/controller/applet/CompanyController.java @@ -14,12 +14,14 @@ import com.pz.merchant.domain.vo.CompanyAppVo; import com.pz.merchant.domain.vo.CompanyBalanceVo; import com.pz.merchant.domain.vo.FinanceStatisticVo; import com.pz.merchant.service.ICompanyService; +import com.pz.merchant.service.IEmployeesService; import com.pz.system.domain.bo.WithdrawDepositBo; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotNull; +import java.math.BigDecimal; /** * 商户[小程序] @@ -34,6 +36,7 @@ import javax.validation.constraints.NotNull; public class CompanyController extends BaseController { private final ICompanyService companyService; + private final IEmployeesService employeesService; /** * 修改商户名称/头像 @@ -88,9 +91,15 @@ public class CompanyController extends BaseController { * 提现 */ @PutMapping("/withdraw") - public R<Boolean> withdrawDeposit(@RequestBody WithdrawDepositBo bo) { - // TODO: 2023/9/14 提现暂时搁置 - return R.ok(true); + public R<Boolean> withdrawDeposit(@RequestBody @Validated(EditGroup.class) WithdrawDepositBo bo) { + if (bo.getAmount().compareTo(BigDecimal.ZERO) != 0) { + return R.fail("提现金额必须大于0"); + } + if (bo.getIsMerchant()) { + return R.ok(companyService.withdrawDeposit(bo)); + }else { + return R.ok(); + } } } diff --git a/pz-system/src/main/java/com/pz/merchant/domain/Employees.java b/pz-system/src/main/java/com/pz/merchant/domain/Employees.java index e451800..2a6fd4d 100644 --- a/pz-system/src/main/java/com/pz/merchant/domain/Employees.java +++ b/pz-system/src/main/java/com/pz/merchant/domain/Employees.java @@ -87,7 +87,7 @@ public class Employees extends BaseEntity { /** * 冻结余额 */ - private Long freezeBalance; + private String freezeBalance; /** * 取消订单次数 */ diff --git a/pz-system/src/main/java/com/pz/merchant/service/ICompanyService.java b/pz-system/src/main/java/com/pz/merchant/service/ICompanyService.java index e35e1bd..097ff2d 100644 --- a/pz-system/src/main/java/com/pz/merchant/service/ICompanyService.java +++ b/pz-system/src/main/java/com/pz/merchant/service/ICompanyService.java @@ -10,6 +10,7 @@ import com.pz.merchant.domain.vo.CompanyAppVo; import com.pz.merchant.domain.vo.CompanyBalanceVo; import com.pz.merchant.domain.vo.CompanyVo; import com.pz.merchant.domain.vo.FinanceStatisticVo; +import com.pz.system.domain.bo.WithdrawDepositBo; import java.util.Collection; import java.util.List; @@ -85,4 +86,12 @@ public interface ICompanyService { * @return 商户余额及提现记录 */ CompanyBalanceVo queryCompanyBalance(CompanyBalanceBo bo, PageQuery page); + + /** + * 提现 + * + * @param bo 提现数据 + * @return 操作结果 + */ + boolean withdrawDeposit(WithdrawDepositBo bo); } diff --git a/pz-system/src/main/java/com/pz/merchant/service/IEmployeesService.java b/pz-system/src/main/java/com/pz/merchant/service/IEmployeesService.java index c8760fc..acce322 100644 --- a/pz-system/src/main/java/com/pz/merchant/service/IEmployeesService.java +++ b/pz-system/src/main/java/com/pz/merchant/service/IEmployeesService.java @@ -12,6 +12,7 @@ import com.pz.common.core.domain.PageQuery; import com.pz.merchant.domain.vo.OrderInfoVO; import com.pz.merchant.domain.vo.TodayOrderListVo; import com.pz.system.domain.bo.EmployeesCompanyBo; +import com.pz.system.domain.bo.WithdrawDepositBo; import java.util.Collection; import java.util.List; @@ -125,4 +126,13 @@ public interface IEmployeesService { */ EmployeesVo queryByUserId(Long userId); + + /** + * 提现 + * + * @param bo 提现数据 + * @return 操作结果 + */ + boolean withdrawDeposit(WithdrawDepositBo bo); + } diff --git a/pz-system/src/main/java/com/pz/merchant/service/impl/CompanyServiceImpl.java b/pz-system/src/main/java/com/pz/merchant/service/impl/CompanyServiceImpl.java index bdde3e4..5f593a4 100644 --- a/pz-system/src/main/java/com/pz/merchant/service/impl/CompanyServiceImpl.java +++ b/pz-system/src/main/java/com/pz/merchant/service/impl/CompanyServiceImpl.java @@ -10,6 +10,7 @@ import com.pz.common.core.domain.entity.SysUser; import com.pz.common.core.page.TableDataInfo; import com.pz.common.core.domain.PageQuery; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.pz.common.exception.ServiceException; import com.pz.common.utils.StringUtils; import com.pz.merchant.domain.Company; import com.pz.merchant.domain.bo.CompanyBalanceBo; @@ -20,6 +21,7 @@ import com.pz.merchant.mapper.CompanyMapper; import com.pz.merchant.service.ICompanyService; import com.pz.merchant.service.ISonOrderService; import com.pz.system.domain.Income; +import com.pz.system.domain.bo.WithdrawDepositBo; import com.pz.system.mapper.CityMapper; import com.pz.system.mapper.IncomeMapper; import com.pz.system.mapper.SysUserMapper; @@ -229,4 +231,28 @@ public class CompanyServiceImpl implements ICompanyService { result.setIncomes(incomePage.getRecords()); return result; } + + /** + * 商户提现 + * + * @param bo 提现数据 + * @return 提现结果 + */ + @Override + public boolean withdrawDeposit(WithdrawDepositBo bo) { + Company company = baseMapper.selectById(bo.getId()); + Objects.requireNonNull(company, "未检查到账户"); + BigDecimal money = new BigDecimal(Optional.ofNullable(company.getBalance()).orElse("0")); + BigDecimal balance = money.subtract(bo.getAmount()); + if (balance.compareTo(BigDecimal.ZERO) < 0) { + throw new ServiceException("可用余额不足"); + } + BigDecimal freeze = new BigDecimal(Optional.ofNullable(company.getFreezeBalance()).orElse("0")); + freeze = freeze.add(bo.getAmount()); + LambdaUpdateWrapper<Company> wrapper = Wrappers.lambdaUpdate(); + wrapper.set(Company::getBalance, balance) + .set(Company::getFreezeBalance, freeze) + .eq(Company::getId, company.getId()); + return baseMapper.update(null, wrapper) > 0; + } } diff --git a/pz-system/src/main/java/com/pz/merchant/service/impl/EmployeesServiceImpl.java b/pz-system/src/main/java/com/pz/merchant/service/impl/EmployeesServiceImpl.java index b2f6e1b..75e8cf6 100644 --- a/pz-system/src/main/java/com/pz/merchant/service/impl/EmployeesServiceImpl.java +++ b/pz-system/src/main/java/com/pz/merchant/service/impl/EmployeesServiceImpl.java @@ -23,6 +23,7 @@ import com.pz.merchant.service.ISonOrderService; import com.pz.system.domain.Business; import com.pz.system.domain.TotalOrder; import com.pz.system.domain.bo.EmployeesCompanyBo; +import com.pz.system.domain.bo.WithdrawDepositBo; import com.pz.system.domain.vo.BusinessVo; import com.pz.system.domain.vo.TotalOrderVo; import com.pz.system.mapper.BusinessMapper; @@ -36,6 +37,7 @@ import com.pz.merchant.domain.Employees; import com.pz.merchant.mapper.EmployeesMapper; import com.pz.merchant.service.IEmployeesService; +import java.math.BigDecimal; import java.time.LocalDate; import java.util.*; @@ -302,6 +304,24 @@ public class EmployeesServiceImpl implements IEmployeesService { return baseMapper.selectVoOne(Wrappers.<Employees>lambdaQuery().eq(Employees::getUid, userId)); } + @Override + public boolean withdrawDeposit(WithdrawDepositBo bo) { + Employees employees = baseMapper.selectById(bo.getId()); + Objects.requireNonNull(employees, "未检查到账户"); + BigDecimal money = new BigDecimal(Optional.ofNullable(employees.getBalance()).orElse("0")); + BigDecimal balance = money.subtract(bo.getAmount()); + if (balance.compareTo(BigDecimal.ZERO) < 0) { + throw new ServiceException("可用余额不足"); + } + BigDecimal freeze = new BigDecimal(Optional.ofNullable(employees.getFreezeBalance()).orElse("0")); + freeze = freeze.add(bo.getAmount()); + LambdaUpdateWrapper<Employees> wrapper = Wrappers.lambdaUpdate(); + wrapper.set(Employees::getBalance, balance) + .set(Employees::getFreezeBalance, freeze) + .eq(Employees::getId, employees.getId()); + return baseMapper.update(null, wrapper) > 0; + } + /** * 保存前的数据校验 */ diff --git a/pz-system/src/main/java/com/pz/system/domain/bo/WithdrawDepositBo.java b/pz-system/src/main/java/com/pz/system/domain/bo/WithdrawDepositBo.java index 3fdd508..b9448f5 100644 --- a/pz-system/src/main/java/com/pz/system/domain/bo/WithdrawDepositBo.java +++ b/pz-system/src/main/java/com/pz/system/domain/bo/WithdrawDepositBo.java @@ -1,9 +1,14 @@ package com.pz.system.domain.bo; import com.pz.common.core.domain.BaseEntity; +import com.pz.common.core.validate.EditGroup; import lombok.Data; import lombok.EqualsAndHashCode; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + /** * <p>created in 2023/9/14 17:41 * @@ -17,16 +22,19 @@ public class WithdrawDepositBo extends BaseEntity { /** * 唯一标识ID */ + @NotNull(groups = EditGroup.class,message = "唯一表示不能为空") private Integer id; /** * 是否是商户 */ + @NotNull(groups = EditGroup.class,message = "身份标识不能为空") private Boolean isMerchant; /** * 提现金额 */ - private Float amount; + @Min(groups = EditGroup.class,value = 0,message = "提现金额必须大于0") + private BigDecimal amount; }