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.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.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.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* 前端控制器
*
*
* @author author
* @since 2023-04-26
*/
@RestController
@RequestMapping("/sys-user")
@CrossOrigin
public class SysUserController {
@Autowired
private ISysUserService iSysUserService;
@PostMapping(value = "/login")
public Result loginMultilevel(HttpServletRequest req, @RequestBody Map map) {
String remoteHost = req.getRemoteHost();
Result result = iSysUserService.loginMultilevel(req, map);
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()));
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));
accessToken.setLoginIp("");
accessToken.setCode(result.getCode());
accessToken.setMessage(result.getMessage());
accessToken.setLoginIp(remoteHost);
}
if (result.getCode() == 10001) {
return iSysUserService.loginMultilevel(req, map);
}
return new Result(ResultCode.SUCCESS, accessToken);
}
//TODO
@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(ResultCode.FAIL, "请输入手机号");
}
Result result = iSysUserService.loginMultilevel(req, map);
if ( result.getCode() == 10000) {
SysUser sysUser = (SysUser) result.getData();
if (sysUser.getUserType() != 0 && sysUser.getUserType() != 4){
return new Result(ResultCode.FAIL, "该用户未授权");
}
}
return result;
}
if ("2".equals(loginType)){
// 未对密码加密
Result result = iSysUserService.loginMultilevelClient(accountName, password);
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());
accessToken.setToken(token);
accessToken.setUserName(accountEntity.getUserName());
accessToken.setUserId(accountEntity.getId());
accessToken.setPhone(accountEntity.getPhone());
accessToken.setLoginIp(remoteHost);
return new Result(ResultCode.SUCCESS,accessToken);
}
return result;
}
return new Result(ResultCode.FAIL, "登录方式有误");
}
@PostMapping(value = "/add")
public Result add(HttpServletRequest req,@RequestParam("idCordFrontUrl") MultipartFile idCordFrontUrl,
@RequestParam("idCordBackUrl") MultipartFile idCordBackUrl,
@RequestParam("type") String type,
@RequestParam("userName") String userName,
@RequestParam("idCord") String idCord,
@RequestParam("phone") String phone,
@RequestParam("farmName") String farmName,
@RequestParam("veterId") String veterId,
@RequestParam("detailedAdressCode") String detailedAdressCode,
@RequestParam("permitImg") MultipartFile permitImg) 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;
// 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("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("permitImg", content3);
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()));
return new Result(ResultCode.SUCCESS, accessToken);
} else if (result.getCode() == 10002) {
return new Result(ResultCode.UNAUTHENTICATED, "待审核");
} else {
return new Result(ResultCode.FAIL, "用户已实名");
}
}
@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);
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);
}
@PostMapping("/remove")
public Result remove(@RequestBody SysUser sysUser , HttpServletRequest request) {
Long userId = TokenSign.getMemberIdByJwtToken(request);
return iSysUserService.remove(sysUser,userId);
}
@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);
}
}
}