新版仿ok交易所-后端
1
zyy
2026-03-24 513e5442723f501525bf9ca6210b16561e5d3a2b
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
package com.yami.trading.admin.controller.user;
 
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yami.trading.admin.facade.PermissionFacade;
import com.yami.trading.admin.model.*;
import com.yami.trading.bean.model.Log;
import com.yami.trading.bean.model.User;
import com.yami.trading.bean.model.UserRecom;
import com.yami.trading.bean.model.Wallet;
import com.yami.trading.bean.user.dto.UserBasicDto;
import com.yami.trading.bean.user.dto.UserDto;
import com.yami.trading.common.annotation.SysLog;
import com.yami.trading.common.constants.Constants;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.util.IPHelper;
import com.yami.trading.security.common.manager.PasswordManager;
import com.yami.trading.security.common.util.SecurityUtils;
import com.yami.trading.security.common.enums.SysTypeEnum;
import com.yami.trading.security.common.manager.TokenStore;
import com.yami.trading.service.CapitaltWalletService;
import com.yami.trading.service.WalletService;
import com.yami.trading.service.system.LogService;
import com.yami.trading.service.user.UserRecomService;
import com.yami.trading.service.user.UserService;
import com.yami.trading.service.user.UserStatisticsService;
import com.yami.trading.sys.service.SysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import javax.validation.Valid;
import java.util.*;
import java.util.stream.Collectors;
 
@RestController
@RequestMapping("user")
@Api(tags = "用户管理")
public class UserController {
    @Autowired
    private TokenStore tokenStore;
 
    @Autowired
    UserService userService;
 
    @Autowired
    SysUserService sysUserService;
 
    @Autowired
    LogService logService;
 
    @Autowired
    WalletService walletService;
 
    @Autowired
    UserRecomService userRecomService;
 
    @Autowired
    UserStatisticsService userStatisticsService;
 
    @Autowired
    PermissionFacade permissionFacade;
 
    @Autowired
    PasswordManager passwordManager;
 
    @Autowired
    CapitaltWalletService capitaltWalletService;
 
    @PostMapping("list")
    @ApiOperation("列表")
    public Result<Page<UserDto>> list(@Valid @RequestBody UserListModel model) {
 
        List<String> roleNames = new ArrayList<>();
        if (StrUtil.isEmpty(model.getRolename())) {
            roleNames.add(Constants.SECURITY_ROLE_GUEST);
            roleNames.add(Constants.SECURITY_ROLE_MEMBER);
            roleNames.add(Constants.SECURITY_ROLE_TEST);
        } else {
            roleNames.add(model.getRolename());
        }
        Page<UserDto> page = new Page(model.getCurrent(), model.getSize());
        userService.listUser(page, roleNames, model.getUserCode(), model.getUserName(),permissionFacade.getOwnerUserIds());
        return Result.ok(page);
    }
 
    @GetMapping("asset/{id}")
    @ApiOperation("用户资产")
    public Result<?> asset(@PathVariable String id) {
        Map<String, Object> result = new HashMap<>();
        User user = userService.getById(id);
        Wallet wallet = walletService.getOne(Wrappers.<Wallet>lambdaQuery().eq(Wallet::getUserId, id));
        result.put("walletMone", wallet.getMoney());
        return Result.ok(result);
    }
 
 
 
    @ApiOperation(value = "修改账户余额")
    @PostMapping("updateWallt")
    @SysLog("修改账户余额")
    public Result updateWallt(@Valid @RequestBody UpdateWalltModel model) {
        sysUserService.checkSafeWord(model.getSafePassword());
        userService.updateWallt(model.getUserId(), model.getMoneyRevise(),
                model.getAccountType(), model.getCoinType());
        return Result.ok(null);
    }
 
    @ApiOperation(value = "修改账户资金余额")
    @PostMapping("updateCapitaltWallt")
    @SysLog("修改账户余额")
    public Result updateCapitaltWallt(@Valid @RequestBody UpdateWalltModel model) {
        sysUserService.checkSafeWord(model.getSafePassword());
        return capitaltWalletService.updateCapitaltWallt(model.getUserId(), model.getMoneyRevise(),
                model.getAccountType(), model.getCoinType());
    }
 
    @ApiOperation(value = "修改提现限制流水")
    @PostMapping("updateWithdrawalLimitFlow")
    @SysLog("修改提现限制流水")
    public Result updateWithdrawalLimitFlow(@Valid @RequestBody WithdrawalLimitFlowModel model) {
 
        userService.updateWithdrawalLimitFlow(model.getUserId(), model.getMoneyWithdraw());
        return Result.ok(null);
    }
 
    @ApiOperation(value = "重置登录密码")
    @PostMapping("restLoginPasswrod")
    @SysLog("重置登录密码")
    public Result restLoginPasswrod(@Valid @RequestBody RestLoginPasswrodModel model) {
        sysUserService.checkGooleAuthCode(Long.valueOf(model.getGoogleAuthCode()));
        sysUserService.checkSafeWord(model.getLoginSafeword());
        userService.restLoginPasswrod(model.getUserId(),  passwordManager.decryptPassword(model.getPassword()));
        return Result.ok(null);
    }
 
    @ApiOperation(value = "解绑用户谷歌验证器")
    @PostMapping("deleteGooleAuthCode")
    @SysLog("解绑用户谷歌验证器")
    public Result deleteGooleAuthCode(@Valid @RequestBody DeleteGooleAuthCodeModel model) {
 
        userService.deleteGooleAuthCode(model.getUserId(), model.getGoogleAuthCode(), model.getLoginSafeword());
        return Result.ok(null);
    }
 
    @ApiOperation(value = "重置资金密码")
    @PostMapping("restSafePassword")
    @SysLog("重置资金密码")
    public Result restSafePassword(@Valid @RequestBody RestSafePasswordModel model) {
        sysUserService.checkGooleAuthCode(Long.valueOf(model.getGoogleAuthCode()));
        sysUserService.checkSafeWord(model.getLoginSafeword());
        userService.restSafePassword(model.getUserId(), passwordManager.decryptPassword(model.getNewSafeword()));
        return Result.ok(null);
    }
 
    /**
     * 退出用户登录状态
     */
    @PostMapping(value = "resetUserLoginState")
    @ApiOperation(value = "强制用户退出登录状态")
    public Result resetUserLoginState(@Valid @RequestBody ResetUserLoginStateModel model) {
        try {
            sysUserService.checkGooleAuthCode(Long.valueOf(model.getGoogleAuthCode()));
            sysUserService.checkSafeWord(model.getLoginSafeword());
            tokenStore.deleteAllToken(String.valueOf(SysTypeEnum.ORDINARY.value()), String.valueOf(model.getUserId()));
            Log log = new Log();
            log.setCategory(Constants.LOG_CATEGORY_OPERATION);
            log.setUsername(SecurityUtils.getSysUser().getUsername());
            log.setOperator(SecurityUtils.getSysUser().getUsername());
            log.setLog("管理员手动退出用户登录状态,ip:[" + IPHelper.getIpAddr() + "]");
            logService.save(log);
        } catch (Exception e) {
            //throw  new YamiShopBindException("操作失败!");
        }
        return Result.ok(null);
    }
 
    /**
     * 查询用户基本信息
     * @param uid
     * @return
     */
    @GetMapping("/{uid}")
    @ApiOperation("详情")
    public Result<List<UserBasicDto>> detail(@PathVariable String uid) {
        Set<String> ids = new HashSet<>();
        User eUser = userService.findUserByUserCode(uid);
        if(null == eUser) {
            return Result.failed("用户不存在");
        }
        List<String> childrenIds = userRecomService.findChildren(eUser.getUserId());
        List<UserRecom> parents = userRecomService.getParents(eUser.getUserId());
        ids.add(eUser.getUserId());
        if(childrenIds.size() > 0) ids.addAll(childrenIds);
        if(parents.size() > 0) ids.addAll(parents.stream().map(UserRecom::getUserId).collect(Collectors.toList()));
 
        List<User> users = userService.list(Wrappers.<User>lambdaQuery().in(User::getUserId, ids).orderByAsc(User::getUserLevel));
        List<UserBasicDto> userBasicDtos = users.stream().map(user -> {
            UserBasicDto userBasicDto = new UserBasicDto();
            userBasicDto.setUserId(user.getUserId());
            userBasicDto.setUserLevel(user.getUserLevel());
            userBasicDto.setUserName(user.getUserName());
            userBasicDto.setUid(user.getUserCode());
            userBasicDto.setAccountType(Constants.ROLE_MAP.get(user.getRoleName()));
            userBasicDto.setRealNameAuthority(user.isRealNameAuthority());
            userBasicDto.setCreditScore(user.getCreditScore());
            return userBasicDto;
        }).collect(Collectors.toList());
 
        return Result.ok(userBasicDtos);
    }
 
 
 
    @GetMapping("/assetsAll")
    @ApiOperation("用户资产 登录者只能看自己下面的用户资产")
    public  Result assetsAll(@RequestParam  String userId){
     User user=   userService.findUserByUserCode(userId);
        List<Map<String, Object>> asset_data =   userStatisticsService.getAssetsAll(SecurityUtils.getCurrentSysUserId(),user.getUserId());
        return  Result.succeed(asset_data);
    }
 
    @GetMapping("/getWalletExtends")
    @ApiOperation("用户币种资产")
    public  Result getWalletExtends(@RequestParam  String userId){
        User user=   userService.findUserByUserCode(userId);
        return userStatisticsService.getWalletExtends(user.getUserId());
    }
 
 
}