package com.sandu.ximon.admin.controller; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.sandu.common.domain.ResponseVO; import com.sandu.common.enums.ResponseStatusEnums; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.security.LoginUserInfo; import com.sandu.common.security.annotation.AnonymousAccess; import com.sandu.common.security.config.SecurityProperties; import com.sandu.common.security.token.TokenProvider; import com.sandu.common.util.IpUtil; import com.sandu.common.util.ResponseUtil; import com.sandu.ximon.admin.dto.ClientDto; import com.sandu.ximon.admin.param.AddClientPrarm; import com.sandu.ximon.admin.param.AdminLoginParam; import com.sandu.ximon.admin.param.ResetClientPasswordPrarm; import com.sandu.ximon.admin.param.UpdateClientPrarm; import com.sandu.ximon.admin.security.PermissionConfig; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.service.ClientRoleRelationService; import com.sandu.ximon.admin.service.ClientService; import com.sandu.ximon.admin.service.RoleService; import com.sandu.ximon.dao.domain.Client; import com.sandu.ximon.dao.domain.ClientRoleRelation; import com.sandu.ximon.dao.enums.AdministratorEnums; import com.sandu.ximon.dao.enums.MenuEnum; import lombok.AllArgsConstructor; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; /** * 客户模块 */ @RestController @AllArgsConstructor @RequestMapping("v1/client") public class ClientController { private final SecurityProperties properties; private final ClientService clientService; private final PasswordEncoder passwordEncoder; private final RoleService roleService; private final ClientRoleRelationService clientRoleRelationService; private final TokenProvider tokenProvider; private PermissionConfig permissionConfig; @PostMapping("/add") public ResponseVO addClient(@RequestBody @Validated AddClientPrarm addClientPrarm) { boolean b = clientService.addClient(addClientPrarm); if (b) { return ResponseUtil.success("添加成功"); } else { return ResponseUtil.fail("添加失败"); } } @PostMapping("/update/{id}") public ResponseVO updateClient(@PathVariable Long id, @RequestBody @Validated UpdateClientPrarm updateClientPrarm) { boolean b = clientService.updateClient(id, updateClientPrarm); if (b) { return ResponseUtil.success("更新成功"); } else { return ResponseUtil.fail("更新失败"); } } @PostMapping("/resetClientPassword") public ResponseVO resetClientPassword(@RequestBody @Validated ResetClientPasswordPrarm resetClientPasswordPrarm) { boolean b = clientService.resetPassword(resetClientPasswordPrarm); if (b) { return ResponseUtil.success("修改成功"); } else { return ResponseUtil.fail("修改失败"); } } @PostMapping("/delete/{id}") public ResponseVO deleteClient(@PathVariable Long id) { boolean b = clientService.deleteClient(id); if (b) { return ResponseUtil.success("删除成功"); } else { return ResponseUtil.fail("删除失败"); } } @GetMapping("/list") public ResponseVO listLikeClient(BaseConditionVO baseConditionVO, @RequestParam(value = "keyword", required = false) String keyword) { if (!permissionConfig.check(MenuEnum.CLIENT_LIST.getCode())) { return ResponseUtil.fail("缺少对应用户权限"); } PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize()); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(Client.class); if (AdministratorEnums.CUSTOMER.getCode().equals(SecurityUtils.getAdministratorIdentity())) { wrapper.eq(Client::getSuperiorId, SecurityUtils.getUserId()); } if (keyword != null && !keyword.isEmpty()) { wrapper.like(Client::getClientName, keyword) .or(clientLambdaQueryWrapper -> clientLambdaQueryWrapper.like(Client::getMobile, keyword)) .or(clientLambdaQueryWrapper -> clientLambdaQueryWrapper.like(Client::getLinkMan, keyword)); } List clientList = clientService.list(wrapper); List clientDtoList = new ArrayList<>(); for (Client demo : clientList) { ClientDto clientDto = new ClientDto(); BeanUtil.copyProperties(demo, clientDto); ClientRoleRelation one = clientRoleRelationService.getOne(Wrappers.lambdaQuery(ClientRoleRelation.class) .eq(ClientRoleRelation::getClientId, demo.getId())); if (one != null) { clientDto.setRoleId(one.getRoleId()); } clientDtoList.add(clientDto); } return ResponseUtil.successPage(clientDtoList); } @AnonymousAccess @PostMapping(value = "/login") public ResponseVO longin(@RequestBody @Validated AdminLoginParam loginParam) { Client client = clientService.getOne(Wrappers.lambdaQuery(Client.class).eq(Client::getClientName, loginParam.getUsername()).last("limit 1")); if (client == null) { return ResponseUtil.error(ResponseStatusEnums.BAD_CREDENTIALS.getCode(), ResponseStatusEnums.BAD_CREDENTIALS.getMessage()); } if (!passwordEncoder.matches(loginParam.getPassword(), client.getPassword())) { return ResponseUtil.error(ResponseStatusEnums.BAD_CREDENTIALS.getCode(), ResponseStatusEnums.BAD_CREDENTIALS.getMessage()); } Collection grantedAuthorities = roleService.mapToGrantedAuthorities(client.getId(), false); LoginUserInfo loginUserInfo = new LoginUserInfo(); loginUserInfo.setUserId(client.getId()); loginUserInfo.setAccount(client.getClientName()); loginUserInfo.setIp(IpUtil.getRealIp()); loginUserInfo.setAdministratorType(AdministratorEnums.NORMAL.getCode()); loginUserInfo.setPermission(grantedAuthorities.stream().map(GrantedAuthority::getAuthority).collect(Collectors.joining(","))); // 生成令牌 String token = tokenProvider.createToken(loginUserInfo); // 更新最后登录时间 Client update = new Client(); update.setId(client.getId()); update.setLoginTime(LocalDateTime.now()); clientService.updateById(update); // 返回 token 与 用户信息 Map authInfo = new HashMap(2) {{ put("token", properties.getTokenStartWith() + token); put("user", client); }}; return ResponseUtil.success(authInfo); } }