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.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.entity.AccessToken;
import com.huimv.farm.damsubsidy.entity.SysUser;
import com.huimv.farm.damsubsidy.service.ISysUserService;
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.util.Date;
import java.util.HashMap;
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) {
Result result = iSysUserService.loginMultilevel(req, map);
AccessToken accessToken = new AccessToken();
if (result.getCode() == 10000) {
SysUser user = (SysUser) result.getData();
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()));
}
if (result.getCode() == 10004) {
accessToken.setAccountName("游客");
accessToken.setCreated(new Date());
accessToken.setToken(TokenSign.sign("游客", map.get("phone"),null));
accessToken.setLoginIp("");
}
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)){
return iSysUserService.loginMultilevel(req,map);
}
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.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) {
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);
map.put("userName", userName);
map.put("idCord", idCord);
map.put("phone", phone);
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.setToken(TokenSign.sign(user.getUserName(), user.getPhone(),user.getId()));
JSONObject jsonObject = new JSONObject();
jsonObject.put("newToken", accessToken);
jsonObject.put("user", user);
return new Result(ResultCode.SUCCESS, jsonObject);
} else {
return new Result(ResultCode.FAIL,"用户已实名");
}
}
@PostMapping(value = "/edit")
public Result edit(HttpServletRequest req, @RequestBody SysUser user) {
return new Result(ResultCode.SUCCESS, iSysUserService.edit(req, user));
}
@PostMapping(value = "/list")
public Result list(HttpServletRequest req, @RequestBody Map map) {
return new Result(ResultCode.SUCCESS, iSysUserService.list(req, map));
}
@PostMapping(value = "/findPhone")
public Result findPhone(HttpServletRequest req, @RequestBody Map map) {
return new Result(ResultCode.SUCCESS, iSysUserService.findPhone(req, map));
}
//pc端
@PostMapping(value = "/listPc")
public Result listPc(HttpServletRequest req, @RequestBody Map map) {
return new Result(ResultCode.SUCCESS, 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 SysUser user) {
return new Result(ResultCode.SUCCESS, iSysUserService.editState(req, user));
}
//测试-token
@PostMapping(value = "/getToken")
public String getToken(HttpServletRequest req) {
String token = TokenSign.sign("superadmin", "123456789",1L);
return token;
}
@PostMapping("/listSubordinate")
public Result listSubordinate(@RequestBody Map map , HttpServletRequest request) {
Long userId = TokenSign.getMemberIdByJwtToken(request);
int pageNum = (Integer) map.get("pageNum");
int pageSize = (Integer) map.get("pageSize");
String searchStr = (String) map.get("searchStr");
// return iSysUserService.listSubordinate(searchStr,pageNum,pageSize,userId);
return null;
}
}