package com.hxzkmonitor.controller;
|
|
import cloud.tianai.captcha.application.vo.CaptchaResponse;
|
import cloud.tianai.captcha.application.vo.ImageCaptchaVO;
|
import cloud.tianai.captcha.common.response.ApiResponse;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.hxzkmonitor.pojo.*;
|
import com.hxzkmonitor.service.TbDuanxinlogService;
|
import com.hxzkmonitor.service.TbLoginLogService;
|
import com.hxzkmonitor.service.TbMacService;
|
import com.hxzkmonitor.service.TbUserService;
|
import com.hxzkmonitor.util.HttpClientUtil;
|
import com.hxzkmonitor.util.MiMi;
|
import org.springframework.core.ParameterizedTypeReference;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpMethod;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.web.client.RestTemplate;
|
import com.hxzkmonitor.util.R;
|
import com.tencentcloudapi.common.Credential;
|
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
|
import com.tencentcloudapi.common.profile.ClientProfile;
|
import com.tencentcloudapi.common.profile.HttpProfile;
|
import com.tencentcloudapi.sms.v20210111.SmsClient;
|
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
|
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.time.format.DateTimeFormatter;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.List;
|
|
/**
|
* <p>
|
* 前端控制器
|
* </p>
|
*
|
* @author wangfei
|
* @since 2024-08-05
|
*/
|
@CrossOrigin
|
@RestController
|
@RequestMapping("/")
|
|
public class TbUserController {
|
|
private String SecretId = "AKIDrjZOI4e6KLZu9FAsSRN8eOwSt52lbMBz";
|
private String SecretKey = "xnRtHUL3YqdMyOLVSBjKkz1pQoxujS4d";
|
|
@Autowired
|
TbUserService tbUserService;
|
|
@Autowired
|
TbLoginLogService tbLoginLogService;
|
@Autowired
|
TbDuanxinlogService tbDuanxinlogService;
|
|
@Autowired
|
TbMacService tbMacService;
|
|
@Autowired
|
RestTemplate restTemplate;
|
|
// private final RestTemplate restTemplate;
|
//
|
// public YourClassName(RestTemplate restTemplate) {
|
// this.restTemplate = restTemplate;
|
// }
|
|
@ApiOperation(value = "分页查询", notes = "分页查询")
|
@GetMapping("/api/getUserPage")
|
public R getUserPage(Page page) {
|
IPage<TbUser> ipage = tbUserService.getUserPage(page);
|
|
return R.ok(ipage);
|
}
|
|
@PostMapping("/api/addorupUser")
|
public R addorupUser(TbUser tbUser) {
|
if (tbUser.getPassword() != null) {
|
tbUser.setPassword(passwordEncoder().encode(tbUser.getPassword()));
|
}
|
|
|
if (tbUser.getId()==null){
|
TbUser phone = tbUserService.findPhoneUser(tbUser.getAdminphone());
|
if (phone==null){
|
return R.ok(tbUserService.addorupUser(tbUser));
|
}else{
|
return R.failed("当前手机号已存在,请更换手机号");
|
}
|
}else{
|
return R.ok(tbUserService.addorupUser(tbUser));
|
}
|
|
}
|
|
@GetMapping("/api/code")
|
@ResponseBody
|
public CaptchaResponse<ImageCaptchaVO> genCaptcha(HttpServletRequest request, @RequestParam(value = "type", required = false) String type) {
|
// 构建请求参数
|
HttpEntity<String> entity = new HttpEntity<>("Parameters", null);
|
ResponseEntity<CaptchaResponse<ImageCaptchaVO>> response = restTemplate.exchange(
|
"http://localhost:8086/gen",
|
HttpMethod.GET,
|
entity,
|
new ParameterizedTypeReference<CaptchaResponse<ImageCaptchaVO>>() {},
|
"type", type
|
);
|
|
// 返回结果
|
return response.getBody();
|
}
|
|
@PostMapping("/api/checkCode")
|
public ApiResponse<?> checkCaptcha(@RequestBody Data data) {
|
// 远端 check 服务的 URL
|
String url = "http://localhost:8086/check";
|
|
// 发送 POST 请求到远端服务
|
ApiResponse<?> response = restTemplate.postForObject(url, data, ApiResponse.class);
|
|
if (response.isSuccess()) {
|
return ApiResponse.ofSuccess(Collections.singletonMap("id", data.getId()));
|
}
|
return response;
|
}
|
|
@GetMapping("/api/delUser")
|
public R delUser(Integer id) {
|
return R.ok(tbUserService.delUser(id));
|
}
|
|
@GetMapping("/api/searchUser")
|
public R searchUser(Page page, String keyword) {
|
return R.ok(tbUserService.searchUser(page, keyword));
|
}
|
|
@GetMapping("/api/findPhoneUser")
|
public R findPhoneUser(String phone) {
|
return R.ok(tbUserService.findPhoneUser(phone));
|
}
|
|
|
@PostMapping("api/users")
|
public R checkLogin(TbUser user) {
|
TbUser user1 = new TbUser();
|
String token = "hfghjhrtiyerjiofmwefnwefiewhiof212424";
|
|
List<TbMac> list1 = tbMacService.list();
|
System.out.println(list1.get(0));
|
MiMi mi = new MiMi();
|
String mm = MiMi.DecodePasswd(list1.get(0).getPassmac());
|
|
// if ( )
|
// 使用DateTimeFormatter解析字符串日期
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
// mm.split(";")[1];
|
System.out.println(mm);
|
if (user.getAdminphone() == null || user.getAdminphone().equals("")) {
|
user1 = tbUserService.checkLogin(user);
|
if (user1 != null) {
|
boolean isMatch = passwordEncoder().matches(user.getPassword(), user1.getPassword());
|
if (isMatch) {
|
user1.setToken(token);
|
String result= HttpClientUtil. doGet("http://localhost:8181/check");
|
System.out.println(result);//返回pdf地址
|
// if (result=="false"){
|
user1.setUsermsg(result);
|
// }
|
// try{
|
// LocalDate dateToCompare = LocalDate.parse(mm.split(";")[1], formatter);
|
//
|
// // 获取当前日期
|
// LocalDate today = LocalDate.now();
|
//
|
// // 比较日期
|
// if (dateToCompare.isBefore(today)) {
|
// System.out.println(mm.split(";")[1] + " 在今天之前");
|
// } else if (dateToCompare.isAfter(today)) {
|
//
|
// System.out.println(mm.split(";")[1] + " 在今天之后");
|
// user1.setUsermsg("注册码过期");
|
// return R.ok("注册码过期");
|
// } else {
|
// System.out.println(mm.split(";")[1] + " 就是今天");
|
// }
|
// }catch (ArrayIndexOutOfBoundsException e){
|
// user1.setUsermsg("注册码错误");
|
// return R.ok(user1);
|
// }
|
|
return R.ok(user1);
|
} else {
|
return R.failed("密码错误");
|
}
|
} else {
|
return R.failed("登录失败,请检查账号密码");
|
}
|
//用户名密码登录
|
} else {
|
//手机号验证码登录
|
user1 = tbUserService.loginPhone(user);
|
if (user1 != null) {
|
user1.setToken(token);
|
String result= HttpClientUtil. doGet("http://localhost:8181/check");
|
System.out.println(result);//返回pdf地址
|
// if (result=="false"){
|
user1.setUsermsg(result);
|
|
// }
|
// try{
|
//
|
// LocalDate dateToCompare = LocalDate.parse(mm.split(";")[1], formatter);
|
//
|
// // 获取当前日期
|
// LocalDate today = LocalDate.now();
|
//
|
// // 比较日期
|
// if (dateToCompare.isBefore(today)) {
|
//
|
// System.out.println(mm.split(";")[1] + " 在今天之前");
|
// } else if (dateToCompare.isAfter(today)) {
|
//
|
// System.out.println(mm.split(";")[1] + " 在今天之后");
|
// user1.setUsermsg("注册码过期");
|
// return R.ok("注册码过期");
|
// } else {
|
// System.out.println(mm.split(";")[1] + " 就是今天");
|
// }
|
// }catch (ArrayIndexOutOfBoundsException e){
|
// user1.setUsermsg("注册码错误");
|
// return R.ok(user1);
|
// }
|
return R.ok(user1);
|
} else {
|
return R.failed("登录失败,请检查账号密码");
|
}
|
}
|
|
}
|
|
@GetMapping("api/updatepassword2")
|
public R updatepassword2(String username, String oldpassword, String newpassword) {
|
TbUser user1 = new TbUser();
|
user1.setUsername(username);
|
TbUser user = tbUserService.checkLogin(user1);
|
boolean isMatch = passwordEncoder().matches(oldpassword, user.getPassword());
|
if (isMatch) {
|
user.setPassword(passwordEncoder().encode(newpassword));
|
tbUserService.addorupUser(user);
|
return R.ok(user);
|
} else {
|
return R.failed("原密码错误");
|
}
|
}
|
|
public PasswordEncoder passwordEncoder() {
|
return new BCryptPasswordEncoder();
|
}
|
|
@GetMapping("api/users")
|
public R getLogin(String phone) {
|
System.out.println("收到待校验token:" + phone);
|
// String token = "hfghjhrtiyerjiofmwefnwefiewhiof212424";
|
// R response = new R(StatusCode.Success);
|
|
TbUser tbUser1 = tbUserService.findPhoneUser(phone);
|
List<String> list = new ArrayList<>();
|
list.add(tbUser1.getRole());
|
TbUser tbUser = new TbUser();
|
tbUser.setIds(tbUser1.getId().toString());
|
tbUser.setName(tbUser1.getUsername());
|
// tbUser.setUsername("admin");
|
// tbUser.setPassword("11111");
|
//tbUser.setAvatar("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591530122836&di=b7bd6587bd70954db2f6a5c7588ca5ba&imgtype=0&src=http%3A%2F%2Fimg.wxcha.com%2Ffile%2F201901%2F03%2Fc447d5e161.jpg%3Fdown");
|
tbUser.setStatus("1");
|
tbUser.setTelephone(tbUser1.getAdminphone());
|
// tbUser.setLastLoginIp("27.154.74.117");
|
// tbUser.setLastLoginTime("1534837621348");
|
// tbUser.setCreatorId("admin");
|
// tbUser.setCreateTime("1497160610259");
|
// tbUser.setMerchantCode("TLif2btpzg079h15bk");
|
// tbUser.setDeleted("0");
|
tbUser.setRoles(list);
|
// if (username.equals("admin") && password.equals("111111")){
|
// response.setData(token);
|
// }else{
|
// response = new R(StatusCode.Fail.getCode(), "失败");
|
// }
|
// R response = new R(StatusCode.Success);
|
// try {
|
// wechatService.checkToken(token);
|
// } catch (Exception e) {
|
// response = new R(StatusCode.Fail.getCode(), e.getMessage());
|
// }
|
// response.setData(tbUser);
|
return R.ok(tbUser);
|
}
|
|
@GetMapping("/api/getsystem")
|
public R getsystem( String csname,String phone) {
|
return R.ok(tbUserService.getsystem(csname,phone));
|
}
|
|
@GetMapping("api/sms")
|
public R sms(String phone, Integer randomNumber) throws TencentCloudSDKException {
|
try {
|
System.out.println("生成的随机整数是:" + randomNumber);
|
// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
|
// 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
|
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
|
Credential cred = new Credential(SecretId, SecretKey);
|
// 实例化一个http选项,可选的,没有特殊需求可以跳过
|
HttpProfile httpProfile = new HttpProfile();
|
httpProfile.setEndpoint("sms.tencentcloudapi.com");
|
// 实例化一个client选项,可选的,没有特殊需求可以跳过
|
ClientProfile clientProfile = new ClientProfile();
|
clientProfile.setHttpProfile(httpProfile);
|
// 实例化要请求产品的client对象,clientProfile是可选的
|
SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile);
|
// 实例化一个请求对象,每个接口都会对应一个request对象
|
SendSmsRequest req = new SendSmsRequest();
|
String[] phoneNumberSet1 = {phone};
|
req.setPhoneNumberSet(phoneNumberSet1);
|
|
req.setSmsSdkAppId("1400838975");
|
req.setSignName("北京华星北斗智控");
|
req.setTemplateId("1878379");
|
|
String[] templateParamSet1 = {String.valueOf(randomNumber)};
|
req.setTemplateParamSet(templateParamSet1);
|
|
// 返回的resp是一个SendSmsResponse的实例,与请求对象对应
|
SendSmsResponse resp = client.SendSms(req);
|
// 输出json格式的字符串回包
|
System.out.println(SendSmsResponse.toJsonString(resp));
|
TbUser tbUser = tbUserService.findPhoneUser(phone);
|
TbDuanxinlog duanxinlog = new TbDuanxinlog();
|
duanxinlog.setName(tbUser.getUsername());
|
duanxinlog.setPhone(phone);
|
|
duanxinlog.setMsg("登录验证码:" + randomNumber + ",该验证码2分钟内有效,如非本人操作请忽略该短信");
|
tbDuanxinlogService.addorupDuanxinlog(duanxinlog);
|
} catch (TencentCloudSDKException e) {
|
System.out.println(e.toString());
|
}
|
return R.ok(randomNumber);
|
}
|
}
|