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;
/**
*
* 前端控制器
*
*
* @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 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 genCaptcha(HttpServletRequest request, @RequestParam(value = "type", required = false) String type) {
// 构建请求参数
HttpEntity entity = new HttpEntity<>("Parameters", null);
ResponseEntity> response = restTemplate.exchange(
"http://localhost:8086/gen",
HttpMethod.GET,
entity,
new ParameterizedTypeReference>() {},
"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 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 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);
}
}