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.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.param.AddClientPrarm;
|
import com.sandu.ximon.admin.param.AdminLoginParam;
|
import com.sandu.ximon.admin.param.UpdateClientPrarm;
|
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.Client;
|
import com.sandu.ximon.dao.enums.AdministratorEnums;
|
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<Object> addClient(@RequestBody @Validated AddClientPrarm addClientPrarm) {
|
boolean b = clientService.addClient(addClientPrarm);
|
if (b) {
|
return ResponseUtil.success("添加成功");
|
} else {
|
return ResponseUtil.fail("添加失败");
|
}
|
}
|
|
|
@PostMapping("/update/{id}")
|
public ResponseVO<Object> updateClient(@PathVariable Long id, @RequestBody @Validated UpdateClientPrarm updateClientPrarm) {
|
boolean b = clientService.updateClient(id, updateClientPrarm);
|
if (b) {
|
return ResponseUtil.success("更新成功");
|
} else {
|
return ResponseUtil.fail("更新失败");
|
}
|
}
|
|
@PostMapping("/delete/{id}")
|
public ResponseVO<Object> deleteClient(@PathVariable Long id) {
|
boolean b = clientService.deleteClient(id);
|
if (b) {
|
return ResponseUtil.success("删除成功");
|
} else {
|
return ResponseUtil.fail("删除失败");
|
}
|
}
|
|
@GetMapping("/list")
|
public ResponseVO<Object> listLikeClient(BaseConditionVO baseConditionVO, @RequestParam(value = "keyword", required = false) String keyword) {
|
PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
|
LambdaQueryWrapper<Client> 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<Object> 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<GrantedAuthority> 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<String, Object> authInfo = new HashMap<String, Object>(2) {{
|
put("token", properties.getTokenStartWith() + token);
|
put("user", client);
|
}};
|
return ResponseUtil.success(authInfo);
|
}
|
}
|