package com.huimv.farm.damsubsidy.controller;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.huimv.farm.damsubsidy.common.token.TokenSign;
import com.huimv.farm.damsubsidy.common.utils.Result;
import com.huimv.farm.damsubsidy.common.utils.ResultCode;
import com.huimv.farm.damsubsidy.common.utils.SmsUtils;
import com.huimv.farm.damsubsidy.common.utils.UploadImage;
import com.huimv.farm.damsubsidy.config.CharacterEncodingFilter;
import com.huimv.farm.damsubsidy.entity.AccessToken;
import com.huimv.farm.damsubsidy.entity.SysUser;
import com.huimv.farm.damsubsidy.service.ISysUserService;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
*
* 前端控制器
*
*
* @author author
* @since 2023-04-26
*/
@RestController
@RequestMapping("/sys-user")
@CrossOrigin
public class SysUserController {
@Autowired
private ISysUserService iSysUserService;
@Autowired
private RedisTemplate redisTemplate;
@PostMapping("/sendCode")
public void senCode(@RequestBody Map paramsMap) throws Exception {
String phone = paramsMap.get("phone");
System.out.println(phone);
String code = generateRandomCode();
//模板id
String templateId = "e683346d84234fc1a0816791587a4335";
//模板里的参数,可多个
String[] params = {code};
// 调用发送短信的接口
JSONObject success = SmsUtils.sendSms(templateId,phone, params);
Boolean success1 = (Boolean)success.get("success");
if (success1) {
// 如果发送成功,将手机号和验证码保存
redisTemplate.opsForValue().set("xumu:"+phone,code,5L, TimeUnit.MINUTES);
System.out.println("发送成功");
// phoneCodeMap.put(phoneNumber, code);
} else {
// do something
}
System.out.println(success);
}
private static String generateRandomCode() {
Random random = new Random();
String code = "";
for (int i = 0; i < 6; i++) {
code += random.nextInt(10);
}
return code;
}
@PostMapping("/loginOne")
public Result loginOne() {
AccessToken accessToken = new AccessToken();
Result result = iSysUserService.loginOne();
SysUser user = (SysUser) result.getData();
accessToken.setAccountName(user.getUserName());
accessToken.setCreated(new Date());
accessToken.setType(user.getUserType());
accessToken.setToken(TokenSign.sign(user.getUserName(), user.getPhone(),user.getId(),user.getBriefAddressCode(),user.getUserType()));
accessToken.setCode(result.getCode());
accessToken.setMessage(result.getMessage());
accessToken.setUserId(user.getId());
accessToken.setPhone(user.getPhone());
accessToken.setUser(user);
return new Result(ResultCode.SUCCESS,accessToken);
}
@PostMapping(value = "/login")
public Result loginMultilevel(HttpServletRequest req, @RequestBody Map map) {
String remoteHost = req.getRemoteHost();
Result result = iSysUserService.loginMultilevel(req, map,remoteHost);
AccessToken accessToken = new AccessToken();
if (result.getCode() == 10000) {
SysUser user = (SysUser) result.getData();
if (user.getUserType() == 4 && user.getPermit() == null) {
accessToken.setPermit(1);
} else {
accessToken.setPermit(0);//不需要
}
accessToken.setAccountName(user.getUserName());
accessToken.setCreated(new Date());
accessToken.setType(user.getUserType());
accessToken.setToken(TokenSign.sign(user.getUserName(), user.getPhone(),user.getId(),user.getBriefAddressCode(),user.getUserType()));
accessToken.setCode(result.getCode());
accessToken.setMessage(result.getMessage());
accessToken.setUserId(user.getId());
accessToken.setPhone(user.getPhone());
accessToken.setLoginIp(remoteHost);
accessToken.setUser(user);
}
if (result.getCode() == 10004) {
accessToken.setAccountName("游客");
accessToken.setCreated(new Date());
accessToken.setToken(TokenSign.sign("游客", map.get("phone"),null,"",10));
accessToken.setLoginIp("");
accessToken.setCode(result.getCode());
accessToken.setMessage(result.getMessage());
accessToken.setLoginIp(remoteHost);
}
if (result.getCode() == 10001) {
return iSysUserService.loginMultilevel(req, map,remoteHost);
}
return new Result(ResultCode.SUCCESS, accessToken);
}
//
@PostMapping(value = "/loginClient")
public Result loginClient(HttpServletRequest req, @RequestBody Map map) {
String accountName = map.get("accountName");
String password = map.get("password");
String loginType = map.get("loginType");
String remoteHost = req.getRemoteHost();
//手机登录
if ("1".equals(loginType)){
String phone = map.get("phone");
if (StringUtils.isEmpty(phone)){
return new Result(10001, "请输入手机号",false);
}
Result result = iSysUserService.loginMultilevel(req, map,remoteHost);
if ( result.getCode() == 10000) {
SysUser sysUser = (SysUser) result.getData();
if (sysUser.getUserType() != 0 && sysUser.getUserType() != 4){
return new Result(10001, "该用户未授权",false);
}
}
return result;
}
if ("2".equals(loginType)){
// 未对密码加密
Result result = iSysUserService.loginMultilevelClient(accountName, password,remoteHost);
if(result.getCode() == 10000){
SysUser accountEntity = (SysUser) result.getData();
Long id = accountEntity.getId();
AccessToken accessToken = new AccessToken();
accessToken.setCreated(new Date());
accessToken.setAccountName(accountName);
accessToken.setCode(result.getCode());
accessToken.setMessage(result.getMessage());
String token = TokenSign.sign(accountName,accountEntity.getPhone(),accountEntity.getId(),accountEntity.getBriefAddressCode(),accountEntity.getUserType());
accessToken.setToken(token);
accessToken.setUserName(accountEntity.getUserName());
accessToken.setUserId(accountEntity.getId());
accessToken.setPhone(accountEntity.getPhone());
SysUser user = (SysUser) result.getData();
accessToken.setUser(user);
accessToken.setLoginIp(remoteHost);
return new Result(ResultCode.SUCCESS,accessToken);
}
return result;
}
return new Result(10001, "登录方式有误",false);
}
@PostMapping(value = "/add")
public Result add(HttpServletRequest req,@RequestParam(name = "idCordFrontUrl") MultipartFile idCordFrontUrl,
@RequestParam("idCordBackUrl") MultipartFile idCordBackUrl,
@RequestParam("type") String type,
@RequestParam("userName") String userName,
@RequestParam("idCord") String idCord,
@RequestParam("phone") String phone,
@RequestParam(name = "farmName",required = false) String farmName,
@RequestParam(name = "veterId",required = false) String veterId,
@RequestParam(name = "address") String address,//身份证地址
@RequestParam(name = "detailedAddress") String detailedAddress,//详细地址
@RequestParam(name = "detailedAdressCode") String detailedAdressCode//地址行政码
) throws UnsupportedEncodingException {
req.setCharacterEncoding("UTF-8");
System.out.println(userName);
String imgname = "成功";
String originalFilename = idCordFrontUrl.getOriginalFilename();
String filenameExtension = StringUtils.getFilenameExtension(originalFilename);
String path = DateUtil.format(new Date(), "yyyy-MM");
try {
InputStream inputStream = idCordFrontUrl.getInputStream();
BufferedInputStream in = new BufferedInputStream(inputStream);
ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
byte[] temp = new byte[1024];
int size = 0;
while ((size = in.read(temp)) != -1) {
out.write(temp, 0, size);
}
in.close();
byte[] content = out.toByteArray();
imgname = UUID.randomUUID() + "." + filenameExtension;
UploadImage.sshSftp(content, path, imgname);
} catch (Exception e) {
e.printStackTrace();
}
String content = "https://img.ifarmcloud.com/images/" + path + "/" + imgname;
String imgname2 = "成功";
String originalFilename2 = idCordBackUrl.getOriginalFilename();
String filenameExtension2 = StringUtils.getFilenameExtension(originalFilename2);
String path2 = DateUtil.format(new Date(), "yyyy-MM");
try {
InputStream inputStream = idCordBackUrl.getInputStream();
BufferedInputStream in = new BufferedInputStream(inputStream);
ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
byte[] temp = new byte[1024];
int size = 0;
while ((size = in.read(temp)) != -1) {
out.write(temp, 0, size);
}
in.close();
byte[] content2 = out.toByteArray();
imgname2 = UUID.randomUUID() + "." + filenameExtension2;
UploadImage.sshSftp(content2, path2, imgname2);
} catch (Exception e) {
e.printStackTrace();
}
String content2 = "https://img.ifarmcloud.com/images/" + path2 + "/" + imgname2;
Map map = new HashMap<>();
map.put("idCordFrontUrl", content);
map.put("idCordBackUrl", content2);
map.put("type", type);
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
map.put("userName", userName);
map.put("idCord", idCord);
map.put("phone", phone);
map.put("veterId", veterId);
map.put("detailedAdressCode", detailedAdressCode);
map.put("farmName", farmName);
map.put("address", address);
map.put("detailedAddress", detailedAddress);
Result result = iSysUserService.add(req, map);
if (result.getCode() == 10000) {
SysUser user = (SysUser) result.getData();
AccessToken accessToken = new AccessToken();
accessToken.setAccountName(user.getUserName());
accessToken.setCreated(new Date());
accessToken.setLoginIp(user.getLastIp());
accessToken.setType(user.getUserType());
accessToken.setToken(TokenSign.sign(user.getUserName(), user.getPhone(),user.getId(),user.getBriefAddressCode(),user.getUserType()));
accessToken.setPhone(user.getPhone());
accessToken.setUser(user);
accessToken.setUserName(user.getUserName());
accessToken.setUserId(user.getId());
accessToken.setMessage(result.getMessage());
return new Result(ResultCode.SUCCESS, accessToken);
} else if (result.getCode() == 10004) {
return new Result(10004, "待审核",false);
} else {
return iSysUserService.add(req,map);
}
}
@PostMapping(value = "/addTest")
public void addTest( @RequestParam("userName") String userName) {
System.out.println(userName);
}
@PostMapping(value = "/edit")
public Result edit(HttpServletRequest req, @RequestBody SysUser user) {
return iSysUserService.edit(req, user);
}
@PostMapping(value = "/list")
public Result list(HttpServletRequest req, @RequestBody Map map) {
return iSysUserService.list(req, map);
}
@PostMapping(value = "/findPhone")
public Result findPhone(HttpServletRequest req, @RequestBody Map map) {
return iSysUserService.findPhone(req, map);
}
//pc端
@PostMapping(value = "/listPc")
public Result listPc(HttpServletRequest req, @RequestBody Map map) {
return iSysUserService.listPc(req, map);
}
@PostMapping(value = "/listPc2")
public Result listPc2(HttpServletRequest req, @RequestBody Map map) {
return new Result(ResultCode.SUCCESS, iSysUserService.listPc2(req, map));
}
@PostMapping(value = "/editState")
public Result editState(HttpServletRequest req, @RequestBody Map paramsMap) {
return new Result(ResultCode.SUCCESS, iSysUserService.editState(req, paramsMap));
}
//测试-token
@PostMapping(value = "/getToken")
public String getToken(HttpServletRequest req) {
String token = TokenSign.sign("养殖户测试", "13112341236",6L,"",10);
return token;
}
@PostMapping("/listSubordinate")
public Result listSubordinate(@RequestBody Map map , HttpServletRequest request) {
Long userId = TokenSign.getMemberIdByJwtToken(request);
Integer pageNum = (Integer) map.get("pageNum");
Integer pageSize = (Integer) map.get("pageSize");
if (StringUtils.isEmpty(pageNum)){
pageNum =1;
}
if (StringUtils.isEmpty(pageSize)){
pageSize =10;
}
String searchStr = (String) map.get("searchStr");
return iSysUserService.listSubordinate(searchStr,pageNum,pageSize,userId);
}
@PostMapping("/addXiang")
public Result addXiang(@RequestBody SysUser sysUser , HttpServletRequest request) {
Long userId = TokenSign.getMemberIdByJwtToken(request);
return iSysUserService.addXiang(sysUser,userId);
}
@GetMapping("/getTest")
public void getTest( HttpServletRequest request) {
Long userId = TokenSign.getMemberIdByJwtToken(request);
System.out.println(userId);
}
//删除
/* @GetMapping("/remove")
public Result remove(@RequestParam("userIds")String userIds , HttpServletRequest request) {
Long userId = TokenSign.getMemberIdByJwtToken(request);
return iSysUserService.remove(userIds,userId);
}*/
@GetMapping("/removeById")
public Result removeById(@RequestParam("id") Integer id) {
iSysUserService.removeById(id);
return new Result(10000,"删除成功",true);
}
@PostMapping("/update")
public Result update(@RequestBody SysUser sysUser , HttpServletRequest request) {
Long userId = TokenSign.getMemberIdByJwtToken(request);
return iSysUserService.updateUser(sysUser,userId);
}
@PostMapping("/getUser")
public Result getUser(){
List sysUsers = iSysUserService.list(new QueryWrapper().in("user_type", 2, 3));
if (ObjectUtil.isEmpty(sysUsers)){
return new Result(ResultCode.SUCCESS,null);
}else {
return new Result(ResultCode.SUCCESS,sysUsers);
}
}
@PostMapping("/addImg")
public Result addImg(HttpServletRequest httpServletRequest,@RequestParam("permitImg") MultipartFile permitImg,
@RequestParam("id") String id){
String imgname3 = "成功";
String originalFilename3 = permitImg.getOriginalFilename();
String filenameExtension3 = StringUtils.getFilenameExtension(originalFilename3);
String path3 = DateUtil.format(new Date(), "yyyy-MM");
try {
InputStream inputStream = permitImg.getInputStream();
BufferedInputStream in = new BufferedInputStream(inputStream);
ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
byte[] temp = new byte[1024];
int size = 0;
while ((size = in.read(temp)) != -1) {
out.write(temp, 0, size);
}
in.close();
byte[] content3 = out.toByteArray();
imgname3 = UUID.randomUUID() + "." + filenameExtension3;
UploadImage.sshSftp(content3, path3, imgname3);
} catch (Exception e) {
e.printStackTrace();
}
String content3 = "https://img.ifarmcloud.com/images/" + path3 + "/" + imgname3;
Map map = new HashMap<>();
map.put("id", id);
map.put("permitImg", content3);
return iSysUserService.addImg(httpServletRequest, map);
}
@PostMapping("/removeByIds")
public Result remove(@RequestBody Map paramsMap ) {
return iSysUserService.removeByIds(paramsMap);
}
@PostMapping("/login2")
public Result login2(@RequestBody Map paramsMap) {
Result result = iSysUserService.login2(paramsMap);
SysUser user = (SysUser) result.getData();
if (result.getCode() == 10000) {
AccessToken accessToken = new AccessToken();
accessToken.setUser(user);
accessToken.setUserId(user.getId());
accessToken.setToken(TokenSign.sign(user.getUserName(), user.getPhone(), user.getId(),user.getBriefAddressCode(),user.getUserType()));
accessToken.setAccountName(user.getUserName());
accessToken.setCreated(new Date());
accessToken.setLoginIp(user.getLastIp());
accessToken.setType(user.getUserType());
accessToken.setMessage(result.getMessage());
return new Result(ResultCode.SUCCESS, accessToken);
} else {
return result;
}
}
@PostMapping("/listFarmer")
public Result listFarmer(HttpServletRequest httpServletRequest,@RequestBody Map paramsMap){
return iSysUserService.listFarmer(httpServletRequest,paramsMap);
}
}