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.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; @PostMapping("list") @ApiOperation("列表") public Result> list(@Valid @RequestBody UserListModel model) { List 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 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 result = new HashMap<>(); User user = userService.getById(id); Wallet wallet = walletService.getOne(Wrappers.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("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()); String password = passwordManager.decryptPassword(model.getPassword()); userService.restLoginPasswrod(model.getUserId(), password); 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()); String password = passwordManager.decryptPassword(model.getNewSafeword()); userService.restSafePassword(model.getUserId(), password); 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> detail(@PathVariable String uid) { Set ids = new HashSet<>(); User eUser = userService.findUserByUserCode(uid); if(null == eUser) { return Result.failed("用户不存在"); } List childrenIds = userRecomService.findChildren(eUser.getUserId()); List 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 users = userService.list(Wrappers.lambdaQuery().in(User::getUserId, ids).orderByAsc(User::getUserLevel)); List 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()); return userBasicDto; }).collect(Collectors.toList()); return Result.ok(userBasicDtos); } @GetMapping("/assetsAll") @ApiOperation("用户资产 登录者只能看自己下面的用户资产") public Result assetsAll(@RequestParam String userId){ User user= userService.findUserByUserCode(userId); List> asset_data = userStatisticsService.getAssetsAll(SecurityUtils.getCurrentSysUserId(),user.getUserId()); return Result.succeed(asset_data); } }