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); } }