package com.ruoyi.account.controller;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.ruoyi.account.api.model.AppUser;
|
import com.ruoyi.account.api.model.UserPoint;
|
import com.ruoyi.account.api.model.UserWithdraw;
|
import com.ruoyi.account.mapper.UserPointMapper;
|
import com.ruoyi.account.mapper.UserWithdrawMapper;
|
import com.ruoyi.account.service.AppUserService;
|
import com.ruoyi.account.service.IUserWithdrawService;
|
import com.ruoyi.account.service.UserPointService;
|
import com.ruoyi.account.util.BankCode;
|
import com.ruoyi.account.util.HttpRequester;
|
import com.ruoyi.account.util.HttpRespons;
|
import com.ruoyi.account.util.withdraw.HttpUtilWithdraw;
|
import com.ruoyi.account.vo.*;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.utils.poi.ExcelUtil;
|
import com.ruoyi.common.core.web.controller.BaseController;
|
import com.ruoyi.common.core.web.page.PageInfo;
|
import com.ruoyi.common.security.service.TokenService;
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
import com.ruoyi.order.feignClient.OrderClient;
|
import com.ruoyi.order.model.Order;
|
import com.ruoyi.other.api.domain.Shop;
|
import com.ruoyi.other.api.domain.ShopBalanceStatement;
|
import com.ruoyi.other.api.domain.ShopWithdraw;
|
import com.ruoyi.system.api.model.LoginUser;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiParam;
|
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.LocalTime;
|
import java.time.YearMonth;
|
import java.util.ArrayList;
|
import java.util.Collection;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 前端控制器
|
* </p>
|
*
|
* @author luodangjia
|
* @since 2024-11-21
|
*/
|
@RestController
|
@RequestMapping("/user-point")
|
@Api(tags = "用户提现列表")
|
public class UserWithdrawController extends BaseController {
|
@Resource
|
private IUserWithdrawService userWithdrawService;
|
@Resource
|
private UserPointService userPointService;
|
@Resource
|
private UserWithdrawMapper userWithdrawMapper;
|
@Resource
|
private AppUserService appUserService;
|
@Resource
|
private TokenService tokenService;
|
@GetMapping("/shop/list")
|
@ApiOperation(value = "用户提现申请列表")
|
public R<IPage<UserWithdraw>> shoplist(@ApiParam("页码") @RequestParam Integer pageNum,
|
@ApiParam("每一页数据大小") Integer pageSize,
|
@ApiParam("用户手机号") String phone,
|
@ApiParam("审核状态(0=待审核,1=审核通过,2=审核失败)")Integer auditStatus) {
|
//模糊查询手机号
|
List<Long> appUserIds=new ArrayList<>();
|
if (StringUtils.isNotEmpty(phone)) {
|
QueryWrapper<AppUser> queryWrapper=new QueryWrapper<>();
|
queryWrapper.like(StringUtils.isNotEmpty(phone),"phone", phone);
|
appUserIds=appUserService.list(queryWrapper).stream().map(AppUser::getId).collect(Collectors.toList());
|
if (CollectionUtils.isEmpty(appUserIds)) {
|
return R.ok(new PageInfo<>());
|
}
|
}
|
PageInfo<UserWithdraw> page=new PageInfo<>(pageNum,pageSize);
|
List<UserWithdraw> list =userWithdrawMapper.page(page,appUserIds,auditStatus);
|
for (UserWithdraw userWithdraw : list) {
|
userWithdraw.setUid(userWithdraw.getId().toString());
|
}
|
page.setRecords(list);
|
return R.ok(page);
|
}
|
/**
|
* 审核
|
*/
|
@GetMapping("/audit")
|
@ApiOperation("提现审核")
|
public R<Void> audit(@ApiParam("审核状态 1=通过 2=失败") @RequestParam Integer auditstatus,
|
@ApiParam("提现id") Long id,
|
@ApiParam("审核失败备注") String auditMsg
|
) throws IOException {
|
LoginUser loginUser = tokenService.getLoginUser();
|
|
UserWithdraw userWithdraw = userWithdrawService.getById(id);
|
if(0 != userWithdraw.getAuditStatus()){
|
return R.fail("不能重复审核");
|
}
|
AppUser appUser = appUserService.getById(userWithdraw.getAppUserId());
|
if(1 == auditstatus){
|
// 打款
|
String url = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&" +
|
"cardNo="+userWithdraw.getReceiverAccountNoEnc()+"&cardBinCheck=true";
|
HashMap<String, String> hashMap = new HashMap<>();
|
HttpRequester hr = new HttpRequester();
|
HttpRespons HP = hr.sendPost(url, hashMap);
|
System.out.println("接收返回参数:" + HP.getContent());
|
com.alibaba.fastjson.JSONObject resPay = com.alibaba.fastjson.JSONObject.parseObject(HP.getContent());
|
System.err.println(resPay);
|
if (resPay.getString("validated")==null){
|
System.err.println("不合法的银行卡号");
|
}
|
String bankCode = resPay.getString("bank");
|
String bankName = BankCode.getBankNameByCode(bankCode); // 返回ABC枚举实例
|
System.err.println(bankName);
|
String withdraw = HttpUtilWithdraw.userWithdraw(userWithdraw, bankName);
|
if (!withdraw.equals("success")){
|
return R.fail("打款失败,原因:"+withdraw);
|
}
|
|
userWithdraw.setStatus(2);
|
userWithdraw.setArrivalTime(LocalDateTime.now());
|
userWithdrawService.updateById(userWithdraw);
|
}
|
if(2 == auditstatus){
|
//审核不通过
|
//回退积分和添加变动明细
|
UserPoint userPoint = new UserPoint();
|
userPoint.setType(19);
|
UserPoint one = userPointService.lambdaQuery().eq(UserPoint::getAppUserId, appUser.getId())
|
.orderByDesc(UserPoint::getCreateTime).last("limit 1").one();
|
userPoint.setVariablePoint(userWithdraw.getIntegral());
|
userPoint.setHistoricalPoint(one.getBalance());
|
userPoint.setBalance(one.getBalance() + userWithdraw.getIntegral());
|
userPoint.setCreateTime(LocalDateTime.now());
|
userPoint.setAppUserId(appUser.getId());
|
userPoint.setObjectId(userWithdraw.getId());
|
userPointService.save(userPoint);
|
// 回退积分
|
appUser.setAvailablePoint(appUser.getAvailablePoint()+userWithdraw.getIntegral());
|
appUserService.updateById(appUser);
|
}
|
userWithdraw.setAuditStatus(auditstatus);
|
userWithdraw.setAuditUserId(loginUser.getUserid());
|
userWithdraw.setAuditTime(LocalDateTime.now());
|
userWithdraw.setAuditMsg(auditMsg);
|
userWithdrawService.updateById(userWithdraw);
|
return R.ok();
|
}
|
}
|