package com.dy.pipIrrSell.wallet; import com.dy.common.aop.SsoAop; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.ResultCodeMsg; import com.dy.pipIrrGlobal.pojoSe.SeWallet; import com.dy.pipIrrGlobal.pojoSe.SeWalletRecharge; import com.dy.pipIrrSell.result.SellResultCode; import com.dy.pipIrrSell.wallet.dto.DtoRecharge; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.Optional; /** * @author ZhuBaoMin * @date 2023/12/11 16:36 * @LastEditTime 2023/12/11 16:36 * @Description */ @Slf4j @Tag(name = "电子钱包管理", description = "电子钱包管理") @RestController @RequestMapping(path="wallet") @RequiredArgsConstructor @Validated public class WalletCtrl { private final WalletSv walletSv; /** * 注册电子钱包账户 * 注册钱先验证该农户是否已经注册电子钱包 * @param clientId * @return */ @Operation(summary = "注册电子钱包", description = "注册电子钱包") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "操作结果:true:成功,false:失败(BaseResponse.content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @PostMapping(path = "add_wallet") @SsoAop() public BaseResponse addWallet(@RequestParam("clientId") @NotNull(message = "农户编号不能为空") Long clientId){ if(clientId == null || clientId < 0) { return BaseResponseUtils.buildFail(SellResultCode.CLIENT_ID_CANNOT_BE_NULL.getMessage()); } if(walletSv.getWalletByClientId(clientId) != null) { return BaseResponseUtils.buildFail(SellResultCode.WALLET_ACCOUNT_EXIST.getMessage()); } SeWallet seWallet = new SeWallet(); seWallet.setClientId(clientId); seWallet.setMoney(0d); seWallet.setLastOperate(LastOperateENUM.OPEN_ACCOUNT.getCode()); seWallet.setLastOperateTime(new Date()); seWallet.setCreateTime(new Date()); Long rec = Optional.ofNullable(walletSv.addWallet(seWallet)).orElse(0L); if(rec == 0) { return BaseResponseUtils.buildFail(SellResultCode.WALLET_OPEN_ACCOUNT_FAIL.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; } /** * 电子钱包账户充值 * @param po * @param bindingResult * @return */ @Operation(summary = "电子钱包充值", description = "电子钱包充值") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "操作结果:true:成功,false:失败(BaseResponse.content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @PostMapping(path = "add_recharge", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse addRecharge(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult){ Long clientId = Optional.ofNullable(po .getClientId()).orElse(0L); Double amount = Optional.ofNullable(po.getAmount()).orElse(0.0); // 验证该农户是否已经注册电子钱包账户并取出ID及当前账户余额 SeWallet seWallet = walletSv.getWalletByClientId(clientId); if(seWallet == null) { return BaseResponseUtils.buildFail(SellResultCode.NO_ACCOUNT.getMessage()); } Long wallerId = Optional.ofNullable(seWallet.getId()).orElse(0L); Double money = Optional.ofNullable(seWallet.getMoney()).orElse(0.0); // 计算充值后余额 Double afterRrecharge = money + amount; // 修改电子钱包余额、最后操作类型、最后操作时间 seWallet.setMoney(afterRrecharge); seWallet.setLastOperate(LastOperateENUM.RECHARGE.getCode()); seWallet.setLastOperateTime(new Date()); Integer rec_updateWaller = Optional.ofNullable(walletSv.updateWallet(seWallet)).orElse(0); if(rec_updateWaller == 0) { return BaseResponseUtils.buildFail(SellResultCode.UPDATE_ACCOUNT_FAIL.getMessage()); } // 添加充值记录 SeWalletRecharge seWalletRecharge = new SeWalletRecharge(); seWalletRecharge.setWalletId(wallerId); seWalletRecharge.setClientId(clientId); seWalletRecharge.setMoney(money); seWalletRecharge.setAmount(amount); seWalletRecharge.setAfterRecharge(afterRrecharge); seWalletRecharge.setRechargeTime(new Date()); Long rec = Optional.ofNullable(walletSv.addRecharge(seWalletRecharge)).orElse(0L); if(rec == 0) { return BaseResponseUtils.buildFail(SellResultCode.WALLET_OPEN_ACCOUNT_FAIL.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; } }