package com.sandu.ximon.admin.controller; 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.AdminStatusStatus; 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.context.CustomerInspectContextHolder; import com.sandu.ximon.admin.param.AddClientPrarm; import com.sandu.ximon.admin.param.AdminLoginParam; import com.sandu.ximon.admin.param.ClientPrarm; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.service.ClientService; import com.sandu.ximon.admin.service.RoleService; import com.sandu.ximon.dao.domain.Admin; import com.sandu.ximon.dao.domain.Client; import com.sandu.ximon.dao.enums.AdministratorEnums; import jodd.cli.Cli; 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.Collection; import java.util.HashMap; import java.util.Map; 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 TokenProvider tokenProvider; @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 ClientPrarm clientPrarm) { boolean b = clientService.updateClient(id, clientPrarm); 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) { 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 (null != keyword) { wrapper.like(Client::getClientName, keyword) .or(clientLambdaQueryWrapper -> clientLambdaQueryWrapper.like(Client::getMobile, keyword)) .or(clientLambdaQueryWrapper -> clientLambdaQueryWrapper.like(Client::getLinkMan, keyword)); } return ResponseUtil.successPage(clientService.list(wrapper)); } @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()); LoginUserInfo loginUserInfo = new LoginUserInfo(); loginUserInfo.setUserId(client.getId()); loginUserInfo.setAccount(client.getClientName()); loginUserInfo.setIp(IpUtil.getRealIp()); loginUserInfo.setAdministratorType(AdministratorEnums.CUSTOMER.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); } }