无关风月
4 天以前 c72910d2b90f74d23e770717d80921b4fd064d48
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
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();
    }
}