package com.huimv.cattle.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huimv.cattle.mapper.SysFarmMapper;
import com.huimv.cattle.mapper.SysFarmServiceMapper;
import com.huimv.cattle.mapper.SysUserAccountMapper;
import com.huimv.cattle.pojo.SysFarm;
import com.huimv.cattle.pojo.SysFarmService;
import com.huimv.cattle.pojo.SysUserAccount;
import com.huimv.cattle.service.SysUserAccountService;
import com.huimv.cattle.session.AccessToken;
import com.huimv.cattle.token.TokenSign;
import com.huimv.cattle.utils.ConstUtil;
import com.huimv.cattle.utils.DateUtil;
import com.huimv.cattle.utils.ResultUtil;
import com.huimv.common.utils.Result;
import com.huimv.common.utils.ResultCode;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
//import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
*
* 服务实现类
*
*
* @author zn
* @since 2022-09-26
*/
@Service
public class SysUserAccountServiceImpl extends ServiceImpl implements SysUserAccountService {
@Resource
private SysUserAccountMapper sysUserAccountMapper;
@Resource
private SysFarmServiceMapper farmServiceMapper;
@Resource
private SysFarmMapper farmMapper;
// @Resource
// private RedisTemplate redisTemplate;
@Resource
private ResultUtil resultUtil;
@Value("${user.defaultPassword}")
private String defaultPassword;
@Override
public Result login(HttpServletRequest request, Map paramsMap) {
String accountName = paramsMap.get("accountName");
String password = paramsMap.get("password");
String remoteHost = request.getRemoteHost();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("account_name", accountName).eq("password", password);
SysUserAccount resultSysUserAccount = sysUserAccountMapper.selectOne(queryWrapper);
System.out.println("sysUserAccount=" + resultSysUserAccount);
if (resultSysUserAccount == null) {
//账号、密码错误
return new Result(ConstUtil.ERR_NO_EXIST_CODE, ConstUtil.ERR_NO_EXIST_INFO, false);
}
if (resultSysUserAccount.getLoginStatus() == 0) {
//牧场状态不能为中止服务状态(0)
return new Result(ConstUtil.ERR_FARM_TIMEOUT_CODE, ConstUtil.ERR_FARM_TIMEOUT_INFO, false);
} else if (resultSysUserAccount.getLoginStatus() == 2) {
//牧场状态不能为注销状态(2)
return new Result(ConstUtil.ERR_FARM_CANCEL_CODE, ConstUtil.ERR_FARM_CANCEL_INFO, false);
}
//判断服务状态
Integer accountClass = resultSysUserAccount.getAccountClass();
if (accountClass == 2) {
Date now = new Date();
List farmServices = farmServiceMapper.selectList(new QueryWrapper().eq("farm_code", resultSysUserAccount.getFarmCode()).ge("end_date", now).le("start_date", now));
if (ObjectUtil.isEmpty(farmServices)) {
return new Result(ConstUtil.ERR_FARM_OVERDUE_CODE, ConstUtil.ERR_FARM_OVERDUE_INFO, false);
}
}
//--更新当前登录状态 --//
resultSysUserAccount.setLoginTime(new Date());
sysUserAccountMapper.updateById(resultSysUserAccount);
//将当前账号加入到set集合当中(退出时从该集合删除该账号信息)
// _createLoginStatus(accountName);
//-- 构造token --//
AccessToken accessToken = new AccessToken();
Long id = resultSysUserAccount.getId();
String farmCode = resultSysUserAccount.getFarmCode();
accessToken.setAccountName(accountName);
accessToken.setCreated(new Date());
accessToken.setCode(null);
accessToken.setMessage("");
accessToken.setFarmId(farmCode);
System.out.println("login.farmCode >>>>>>>>>>>>>>>>>>> " + farmCode);
//构造token
String token = TokenSign.sign(accountName, id, farmCode, "");
accessToken.setToken(token);
accessToken.setId(id.intValue());
accessToken.setLoginIp(remoteHost);
accessToken.setUserName(resultSysUserAccount.getUserName());
accessToken.setType(null);
accessToken.setAccontClass(resultSysUserAccount.getAccountClass());
return new Result(ResultCode.SUCCESS, accessToken);
}
// private void _createLoginStatus(String accountName) {
// //-- 将有令牌的登录账户加入缓存集合 --//
// String key = "TOKEN:ACCOUNT:SET";
//// redisTemplate.opsForValue().set(key, accountName);
// redisTemplate.opsForSet().add(key, accountName);
// System.out.println("_createLoginStatus");
// }
@Override
public Result logout(HttpServletRequest request, Map paramsMap) {
// String accountName = paramsMap.get("accountName");
// String accountName = request.getHeader("accountName");
// String accountName2 = request.getQueryString();
//--将有令牌的登录账户从缓存集合中删除--//
// String key = "TOKEN:ACCOUNT:SET";
// redisTemplate.opsForSet().remove(key, accountName);
// return new Result(ResultCode.SUCCESS);
return null;
}
/**
* @Method : newUserAccount
* @Description : 创建用户账号
* @Params : [paramsMap]
* @Return : com.huimv.common.utils.Result
* @Author : ZhuoNing
* @Date : 2022/10/9
* @Time : 18:03
*/
@Override
public Result newUserAccount(HttpServletRequest request, Map paramsMap) {
//登录状态
String loginStatus = paramsMap.get("loginStatus");
if (StringUtils.isBlank(loginStatus)) {
loginStatus = "1";
}
String accountType = paramsMap.get("accountType");
String farmCode ="";
if ("1".equals(accountType)){
farmCode = paramsMap.get("farmCode");
}else {
farmCode = TokenSign.getFarmCode(request);
}
// if ("1".equals(accountClass)){
// farmCode = "0";
// }
if (farmCode == "" ||StringUtils.isBlank(farmCode)){
farmCode = "0";
}
System.out.println(farmCode);
//查询判断是否有重名存在
QueryWrapper queryWrapperUserAccount = new QueryWrapper<>();
queryWrapperUserAccount.eq("account_name", paramsMap.get("accountName"));
Long userCount = sysUserAccountMapper.selectCount(queryWrapperUserAccount);
if (userCount > 0) {
return new Result(ConstUtil.ERR_ACCOUNT_SAME_CODE, ConstUtil.ERR_ACCOUNT_SAME_INFO, false);
}
SysUserAccount userAccount = new SysUserAccount();
userAccount.setUserName(paramsMap.get("userName"));
userAccount.setMale(Integer.parseInt(paramsMap.get("male")));
userAccount.setJob(paramsMap.get("job"));
userAccount.setMobile(paramsMap.get("mobile"));
userAccount.setAccountClass(Integer.parseInt(paramsMap.get("accountClass")));
userAccount.setAccountType(Integer.parseInt(paramsMap.get("accountType")));
userAccount.setAccountName(paramsMap.get("accountName"));
userAccount.setPassword(paramsMap.get("password"));
// userAccount.setLoginTime(new java.sql.Date(new Date().getTime()));
userAccount.setFarmCode(farmCode);
userAccount.setLoginStatus(Integer.parseInt(loginStatus));
return resultUtil.getResult(sysUserAccountMapper.insert(userAccount));
}
/**
* @Method : editUserAccount
* @Description : 编辑用户账号
* @Params : [paramsMap]
* @Return : com.huimv.common.utils.Result
* @Author : ZhuoNing
* @Date : 2022/10/9
* @Time : 18:03
*/
@Override
public Result editUserAccount(Map paramsMap) {
//登录状态
String loginStatus = paramsMap.get("loginStatus");
if (StringUtils.isBlank(loginStatus)) {
loginStatus = "1";
}
//
String farmCode = paramsMap.get("farmCode");
if (StringUtils.isBlank(farmCode)||farmCode == "") {
farmCode = "0";
}
String id = paramsMap.get("id");
SysUserAccount sysUserAccount = sysUserAccountMapper.selectById(id);
Date loginTime = sysUserAccount.getLoginTime();
SysUserAccount userAccount = new SysUserAccount();
userAccount.setId(Long.parseLong(id));
userAccount.setUserName(paramsMap.get("userName"));
userAccount.setMale(Integer.parseInt(paramsMap.get("male")));
userAccount.setJob(paramsMap.get("job"));
userAccount.setMobile(paramsMap.get("mobile"));
userAccount.setAccountClass(Integer.parseInt(paramsMap.get("accountClass")));
userAccount.setAccountType(Integer.parseInt(paramsMap.get("accountType")));
userAccount.setAccountName(paramsMap.get("accountName"));
userAccount.setPassword(paramsMap.get("password"));
userAccount.setLoginTime(loginTime);
userAccount.setLoginStatus(Integer.parseInt(loginStatus));
userAccount.setFarmCode(farmCode);
return resultUtil.getResult(sysUserAccountMapper.updateById(userAccount));
}
/**
* @Method : removeUserAccount
* @Description : 批量删除用户账户信息
* @Params : [paramsMap]
* @Return : com.huimv.common.utils.Result
* @Author : ZhuoNing
* @Date : 2022/10/9
* @Time : 17:45
*/
@Override
public Result removeUserAccount(Map paramsMap) {
String ids = paramsMap.get("ids");
String[] idArray = ids.split(",");
List idList = Arrays.asList(idArray);
QueryWrapper queryWrapper = new QueryWrapper<>();
for (String id : idArray) {
queryWrapper.eq("id", id);
SysUserAccount userAccount = sysUserAccountMapper.selectOne(queryWrapper);
if (userAccount.getAccountClass() == 1 && userAccount.getAccountType() == 1) {
return new Result(ConstUtil.ERR_NO_DELETE_ADMIN_CODE, ConstUtil.ERR_NO_DELETE_ADMIN_INFO, false);
} else {
sysUserAccountMapper.deleteById(userAccount);
}
}
return new Result(ResultCode.SUCCESS);
// return resultUtil.getResult(sysUserAccountMapper.deleteBatchIds(idList));
}
/**
* @Method : listUserAccount
* @Description : 列表展示用户账户
* @Params : [paramsMap]
* @Return : com.huimv.common.utils.Result
* @Author : ZhuoNing
* @Date : 2022/10/9
* @Time : 18:02
*/
@Override
public Result listUserAccount(HttpServletRequest request, Map paramsMap) throws ParseException {
//
Integer userId = TokenSign.getMemberIdByJwtToken(request);
DateUtil dateUtil = new DateUtil();
String pageNo = paramsMap.get("pageNo") + "";
if (pageNo == null) {
pageNo = "1";
}
String pageSize = paramsMap.get("pageSize") + "";
if (pageSize == null) {
pageSize = "10";
}
String farmCode = request.getHeader("farmCode");
String accountName = paramsMap.get("accountName");
String userName = paramsMap.get("userName");
String accountClass = paramsMap.get("accountClass");
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.ne("id",userId);
queryWrapper.eq(StringUtils.isNotBlank(farmCode), "farm_code", farmCode);
queryWrapper.like(StringUtils.isNotBlank(accountName), "account_name", accountName);
queryWrapper.like(StringUtils.isNotBlank(userName), "user_name", userName);
// queryWrapper.eq(StringUtils.isNotBlank(accountClass),"account_class",accountClass);
// queryWrapper.and(wrapper ->wrapper.eq("account_class", 1).or().eq("account_type",1));
queryWrapper.and(wrapper -> wrapper.eq("account_type", 1).or().eq("account_type", 2));
queryWrapper.orderByDesc("login_time");
//
Page page = new Page<>(Integer.parseInt(pageNo), Integer.parseInt(pageSize));
Page pageSysUserAccount = sysUserAccountMapper.selectPage(page, queryWrapper);
List sysUserAccountList = pageSysUserAccount.getRecords();
JSONArray dataJa = new JSONArray();
for (SysUserAccount sysUserAccount : sysUserAccountList) {
String farmCode1 = sysUserAccount.getFarmCode();
SysFarm sysFarm = farmMapper.selectOne(new QueryWrapper().eq("farm_code", farmCode1));
JSONObject dataJo = (JSONObject) JSONObject.toJSON(sysUserAccount);
dataJo.put("loginTime", dateUtil.formatDatetimeText(dataJo.getDate("loginTime")));
dataJo.put("farmName", "");
if (ObjectUtil.isNotEmpty(sysFarm)) {
dataJo.put("farmName", sysFarm.getFarmName());
}
dataJa.add(dataJo);
}
JSONObject resultJo = new JSONObject();
resultJo.put("records", dataJa);
resultJo.put("total", pageSysUserAccount.getTotal());
resultJo.put("size", pageSysUserAccount.getSize());
resultJo.put("current", pageSysUserAccount.getCurrent());
resultJo.put("orders", pageSysUserAccount.orders());
resultJo.put("optimizeCountSql", pageSysUserAccount.optimizeCountSql());
resultJo.put("searchCount", pageSysUserAccount.searchCount());
resultJo.put("countId", pageSysUserAccount.countId());
resultJo.put("maxLimit", pageSysUserAccount.maxLimit());
resultJo.put("pages", pageSysUserAccount.getPages());
return new Result(ResultCode.SUCCESS, resultJo);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Result resetPassword(Map paramsMap) {
String ids = paramsMap.get("ids");
String[] idArray = ids.split(",");
int rows = 0;
for (String id : idArray) {
SysUserAccount SysUserAccount = new SysUserAccount();
SysUserAccount.setId(Long.parseLong(id));
SysUserAccount.setPassword(defaultPassword);
rows += sysUserAccountMapper.updateById(SysUserAccount);
}
return resultUtil.getResult(rows);
}
@Override
public Result loginApp(HttpServletRequest request, Map paramsMap) {
String accountName = paramsMap.get("accountName");
String password = paramsMap.get("password");
String remoteHost = request.getRemoteHost();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("account_name", accountName).eq("password", password).eq("account_class", 2);
SysUserAccount resultSysUserAccount = sysUserAccountMapper.selectOne(queryWrapper);
System.out.println("sysUserAccount=" + resultSysUserAccount);
if (resultSysUserAccount == null) {
//账号、密码错误
return new Result(ConstUtil.ERR_NO_EXIST_CODE, ConstUtil.ERR_NO_EXIST_INFO, false);
}
if (resultSysUserAccount.getLoginStatus() == 0) {
//牧场状态不能为中止服务状态(0)
return new Result(ConstUtil.ERR_FARM_TIMEOUT_CODE, ConstUtil.ERR_FARM_TIMEOUT_INFO, false);
} else if (resultSysUserAccount.getLoginStatus() == 2) {
//牧场状态不能为注销状态(2)
return new Result(ConstUtil.ERR_FARM_CANCEL_CODE, ConstUtil.ERR_FARM_CANCEL_INFO, false);
}
//判断服务状态
Integer accountClass = resultSysUserAccount.getAccountClass();
if (accountClass == 2) {
Date now = new Date();
List farmServices = farmServiceMapper.selectList(new QueryWrapper().eq("farm_code", resultSysUserAccount.getFarmCode()).ge("end_date", now).le("start_date", now));
if (ObjectUtil.isEmpty(farmServices)) {
return new Result(100012, "该牧场未在服务有效期", false);
}
}
//--更新当前登录状态 --//
resultSysUserAccount.setLoginTime(new Date());
sysUserAccountMapper.updateById(resultSysUserAccount);
//将当前账号加入到set集合当中(退出时从该集合删除该账号信息)
// _createLoginStatus(accountName);
//-- 构造token --//
AccessToken accessToken = new AccessToken();
Long id = resultSysUserAccount.getId();
String farmCode = resultSysUserAccount.getFarmCode();
accessToken.setAccountName(accountName);
accessToken.setCreated(new Date());
accessToken.setCode(null);
accessToken.setMessage("");
accessToken.setFarmId(farmCode);
System.out.println("login.farmCode >>>>>>>>>>>>>>>>>>> " + farmCode);
//构造token
String token = TokenSign.sign(accountName, id, farmCode, "");
accessToken.setToken(token);
accessToken.setId(id.intValue());
accessToken.setLoginIp(remoteHost);
accessToken.setUserName(resultSysUserAccount.getUserName());
accessToken.setType(null);
accessToken.setAccontClass(resultSysUserAccount.getAccountClass());
return new Result(ResultCode.SUCCESS, accessToken);
}
@Override
public Result listPlatformUserAndFarmAdmin(HttpServletRequest request, Map paramsMap) throws ParseException {
//
DateUtil dateUtil = new DateUtil();
String pageNo = paramsMap.get("pageNo") + "";
if (StringUtils.isBlank(pageNo)) {
pageNo = "1";
}
String pageSize = paramsMap.get("pageSize") + "";
if (StringUtils.isBlank(pageSize)) {
pageSize = "10";
}
String accountName = paramsMap.get("accountName");
String userName = paramsMap.get("userName");
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(accountName), "account_name", accountName);
queryWrapper.like(StringUtils.isNotBlank(userName), "user_name", userName);
queryWrapper.and(wrapper -> wrapper.eq("account_class", 1).or().eq("account_type", 1));
queryWrapper.orderByDesc("login_time");
//
Page page = new Page<>(Integer.parseInt(pageNo), Integer.parseInt(pageSize));
Page pageSysUserAccount = sysUserAccountMapper.selectPage(page, queryWrapper);
List sysUserAccountList = pageSysUserAccount.getRecords();
JSONArray dataJa = new JSONArray();
for (SysUserAccount sysUserAccount : sysUserAccountList) {
String farmCode1 = sysUserAccount.getFarmCode();
SysFarm sysFarm = farmMapper.selectOne(new QueryWrapper().eq("farm_code", farmCode1));
JSONObject dataJo = (JSONObject) JSONObject.toJSON(sysUserAccount);
dataJo.put("loginTime", dateUtil.formatDatetimeText(dataJo.getDate("loginTime")));
dataJo.put("farmName", "");
if (ObjectUtil.isNotEmpty(sysFarm)) {
dataJo.put("farmName", sysFarm.getFarmName());
}
dataJa.add(dataJo);
}
JSONObject resultJo = new JSONObject();
resultJo.put("records", dataJa);
resultJo.put("total", pageSysUserAccount.getTotal());
resultJo.put("size", pageSysUserAccount.getSize());
resultJo.put("current", pageSysUserAccount.getCurrent());
resultJo.put("orders", pageSysUserAccount.orders());
resultJo.put("optimizeCountSql", pageSysUserAccount.optimizeCountSql());
resultJo.put("searchCount", pageSysUserAccount.searchCount());
resultJo.put("countId", pageSysUserAccount.countId());
resultJo.put("maxLimit", pageSysUserAccount.maxLimit());
resultJo.put("pages", pageSysUserAccount.getPages());
return new Result(ResultCode.SUCCESS, resultJo);
}
@Override
public Result resetMyPassword(HttpServletRequest request, Map paramsMap) {
String accountName = request.getHeader("accountName");
String oldPassword = paramsMap.get("oldPassword");
String password = paramsMap.get("password");
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("account_name", accountName);
queryWrapper.eq("password", oldPassword);
SysUserAccount sysUserAccount = sysUserAccountMapper.selectOne(queryWrapper);
if (sysUserAccount == null) {
return new Result(ConstUtil.ERR_PASSWORD_ERROR_CODE, ConstUtil.ERR_PASSWORD_ERROR_INFO, false);
}
sysUserAccount.setPassword(password);
int rows = sysUserAccountMapper.updateById(sysUserAccount);
if (rows == 0) {
return new Result(ConstUtil.ERR_UPDATE_PASSWORD_CODE, ConstUtil.ERR_UPDATE_PASSWORD_INFO,false);
} else {
return new Result(ResultCode.SUCCESS);
}
}
@Override
public Result loginScreen(HttpServletRequest request, Map paramsMap) {
String accountName = paramsMap.get("accountName");
String password = paramsMap.get("password");
String remoteHost = request.getRemoteHost();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("account_name", accountName).eq("password", password).eq("account_class",1);
SysUserAccount resultSysUserAccount = sysUserAccountMapper.selectOne(queryWrapper);
System.out.println("sysUserAccount=" + resultSysUserAccount);
if (resultSysUserAccount == null) {
//账号、密码错误
return new Result(ConstUtil.ERR_NO_EXIST_CODE, ConstUtil.ERR_NO_EXIST_INFO, false);
}
if (resultSysUserAccount.getLoginStatus() == 0) {
//牧场状态不能为中止服务状态(0)
return new Result(ConstUtil.ERR_FARM_TIMEOUT_CODE, ConstUtil.ERR_FARM_TIMEOUT_INFO, false);
} else if (resultSysUserAccount.getLoginStatus() == 2) {
//牧场状态不能为注销状态(2)
return new Result(ConstUtil.ERR_FARM_CANCEL_CODE, ConstUtil.ERR_FARM_CANCEL_INFO, false);
}
//判断服务状态
Integer accountClass = resultSysUserAccount.getAccountClass();
if (accountClass == 2) {
Date now = new Date();
List farmServices = farmServiceMapper.selectList(new QueryWrapper().eq("farm_code", resultSysUserAccount.getFarmCode()).ge("end_date", now).le("start_date", now));
if (ObjectUtil.isEmpty(farmServices)) {
return new Result(ConstUtil.ERR_FARM_OVERDUE_CODE, ConstUtil.ERR_FARM_OVERDUE_INFO, false);
}
}
//--更新当前登录状态 --//
resultSysUserAccount.setLoginTime(new Date());
sysUserAccountMapper.updateById(resultSysUserAccount);
//将当前账号加入到set集合当中(退出时从该集合删除该账号信息)
// _createLoginStatus(accountName);
//-- 构造token --//
AccessToken accessToken = new AccessToken();
Long id = resultSysUserAccount.getId();
String farmCode = resultSysUserAccount.getFarmCode();
accessToken.setAccountName(accountName);
accessToken.setCreated(new Date());
accessToken.setCode(null);
accessToken.setMessage("");
accessToken.setFarmId(farmCode);
System.out.println("login.farmCode >>>>>>>>>>>>>>>>>>> " + farmCode);
//构造token
String token = TokenSign.sign(accountName, id, farmCode, "");
accessToken.setToken(token);
accessToken.setId(id.intValue());
accessToken.setLoginIp(remoteHost);
accessToken.setUserName(resultSysUserAccount.getUserName());
accessToken.setType(null);
accessToken.setAccontClass(resultSysUserAccount.getAccountClass());
return new Result(ResultCode.SUCCESS, accessToken);
}
}