package com.panzhihua.service_equipment.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.panzhihua.common.model.dtos.equipment.UnionUserDto;
|
import com.panzhihua.common.model.vos.LoginUserInfoVO;
|
import com.panzhihua.common.model.vos.R;
|
import com.panzhihua.common.redis.TokenManager;
|
import com.panzhihua.service_equipment.dao.*;
|
import com.panzhihua.service_equipment.model.dos.*;
|
import com.panzhihua.service_equipment.until.AccessUtil;
|
import com.panzhihua.service_equipment.service.UnionUserService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
@Service
|
@Slf4j
|
public class UnionUserServiceImpl extends ServiceImpl<UnionUserMapper, UnionUser> implements UnionUserService {
|
|
@Resource
|
private AccessUtil accessUtil;
|
|
@Resource
|
private UnionAccessMapper unionAccessMapper;
|
|
@Resource
|
private UsersMapper usersMapper;
|
|
@Resource
|
private TokenManager tokenManager;
|
|
@Resource
|
private UnionOpenDoorMapper unionOpenDoorMapper;
|
|
@Resource
|
private UnionIntegralRuleMapper unionIntegralRuleMapper;
|
|
@Resource
|
private UnionIntegralRuleRecordMapper unionIntegralRuleRecordMapper;
|
|
@Resource
|
private UnionIntegralSummarizeMapper unionIntegralSummarizeMapper;
|
|
@Resource
|
private UnionOutdoorSiteMapper unionOutdoorSiteMapper;
|
|
@Resource
|
private UnionIntegralRecordMapper unionIntegralRecordMapper;
|
|
/**
|
* 总工会户外劳登录
|
*
|
* @param loginUserInfoVO
|
* @return 总工会户外劳共用户
|
*/
|
@Override
|
public R<UnionUser> login(LoginUserInfoVO loginUserInfoVO) {
|
UnionUser unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("user_id", loginUserInfoVO.getUserId()));
|
if (unionUser != null) {
|
return R.ok(unionUser);
|
} else {
|
unionUser = new UnionUser();
|
unionUser.setSex(loginUserInfoVO.getSex().toString());
|
unionUser.setPhone(loginUserInfoVO.getPhone());
|
unionUser.setDeleteFlag(false);
|
unionUser.setCreateAt(LocalDateTime.now());
|
unionUser.setUpdateAt(LocalDateTime.now());
|
unionUser.setStatus(1);
|
unionUser.setNickName(loginUserInfoVO.getNickName());
|
unionUser.setUserId(loginUserInfoVO.getUserId());
|
if (loginUserInfoVO.getImageUrl() != null)
|
unionUser.setImageUrl(loginUserInfoVO.getImageUrl());
|
int insert = baseMapper.insert(unionUser);
|
if (insert > 0) {
|
return R.ok(unionUser);
|
} else {
|
return R.fail();
|
}
|
}
|
|
}
|
|
/**
|
* 总工会户外劳登录(h5)
|
*
|
* @param phone
|
* @return 总工会户外劳共用户
|
*/
|
@Override
|
public R<Map<String, Object>> loginByUnion(String phone){
|
Map<String, Object> mapUser = new HashMap<>();
|
Users users = usersMapper.selectOne(new QueryWrapper<Users>()
|
.eq("phone", phone)
|
.eq("deleted", 0)
|
.eq("freezeFlag", 0)
|
.orderByDesc("updateTime")
|
.last("limit 1"));
|
if (users!=null){
|
UnionUser unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("union_h5_user_id", users.getUsersID()));
|
if (unionUser!=null){
|
String token = tokenManager.getTokenByUserId(unionUser.getId().toString());
|
// String token=null;
|
if (token == null) {
|
//生成一个token,保存用户登录状态
|
token = tokenManager.createToken(unionUser.getId().toString(), unionUser.getId().toString());
|
}
|
mapUser.put("token", token);
|
mapUser.put("unionUser",unionUser);
|
log.info("mapUser{}",mapUser);
|
return R.ok(mapUser);
|
}
|
else {
|
unionUser=new UnionUser();
|
unionUser.setPhone(users.getPhone());
|
unionUser.setDeleteFlag(false);
|
unionUser.setCreateAt(LocalDateTime.now());
|
unionUser.setUpdateAt(LocalDateTime.now());
|
unionUser.setStatus(1);
|
unionUser.setNickName(users.getUname());
|
unionUser.setUnionH5UserId(users.getUsersID());
|
int insert = baseMapper.insert(unionUser);
|
if (insert >0){
|
unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("union_h5_user_id", users.getUsersID()));
|
if (unionUser!=null){
|
String token = tokenManager.getTokenByUserId(unionUser.getId().toString());
|
if (token == null) {
|
//生成一个token,保存用户登录状态
|
token = tokenManager.createToken(unionUser.getId().toString(), unionUser.getId().toString());
|
}
|
mapUser.put("token", token);
|
mapUser.put("unionUser",unionUser);
|
log.info("mapUser{}",mapUser);
|
return R.ok(mapUser);
|
}
|
|
}
|
|
}
|
return R.fail("新增用户失败请查看是否在川共之家登录");
|
}else {
|
log.info("总工会数据库没有人物");
|
return R.fail("数据错误,请先在川共之家登录");
|
}
|
|
}
|
|
/**
|
* 使用id查找用户
|
*
|
* @param id
|
* @return 总工会户外劳共用户
|
*/
|
@Override
|
public UnionUserDto selectById(Long id){
|
UnionUserDto unionUserDto=new UnionUserDto();
|
UnionUser unionUser = baseMapper.selectById(id);
|
BeanUtils.copyProperties(unionUser, unionUserDto);
|
return unionUserDto;
|
}
|
|
|
/**
|
* 总工会户外劳工站用户认证
|
*
|
* @param unionUserDto
|
* @return 总工会户外劳共用户
|
*/
|
|
@Override
|
public R authentication(UnionUserDto unionUserDto){
|
UnionUser unionUser=null;
|
if (unionUserDto.getIsApplets().equals(1))
|
unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("user_id", unionUserDto.getUserId()));
|
else
|
unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("id", unionUserDto.getId()));
|
if (unionUser != null){
|
log.info("查询到用户开始认证操作{}",unionUser);
|
//设备下发照片代码
|
LambdaQueryWrapper<UnionAccess> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.inSql(UnionAccess::getSiteId, "SELECT id FROM union_outdoor_site WHERE area_code='" + unionUserDto.getAreaCode() + "'");
|
List<UnionAccess> unionAccesses = unionAccessMapper.selectList(queryWrapper);
|
for (UnionAccess unionAccess : unionAccesses) {
|
try {
|
log.info("人脸注册");
|
accessUtil.faceEnroll(unionUser.getPhone(), unionUserDto.getName(), unionUserDto.getAuthenticatedUrlBase(), unionAccess.getCommunityExternalId(), unionAccess.getUnitId());
|
} catch (Exception e) {
|
// 处理异常
|
e.printStackTrace();
|
return R.fail("认证失败,请验证照片是否符合规范或者联系工作人员"); // 或者抛出自定义异常,根据实际情况进行处理
|
}
|
}
|
//更改数据库
|
unionUser.setName(unionUserDto.getName());
|
unionUser.setIdCard(unionUserDto.getIdCard());
|
unionUser.setAreaCode(unionUserDto.getAreaCode());
|
unionUser.setAuthenticatedUrl(unionUserDto.getAuthenticatedUrl());
|
unionUser.setAuthenticatedUrlBase(unionUserDto.getAuthenticatedUrlBase());
|
unionUser.setIsAuthenticated(1);
|
int i = baseMapper.updateById(unionUser);
|
if (i>0){
|
return R.ok("认证成功");
|
}
|
else {
|
return R.fail("认证失败");
|
}
|
}
|
else {
|
log.info("未查询到用户");
|
return R.fail("认证失败");
|
}
|
|
}
|
|
|
/**
|
* 用户开门
|
*
|
* @return 总工会户外劳共用户
|
*/
|
@Override
|
public R openDoor(UnionUserDto unionUserDto,String qRCode){
|
log.info("开始开门当前用户为{}",unionUserDto);
|
UnionAccess unionAccess = unionAccessMapper.selectOne(new QueryWrapper<UnionAccess>().eq("q_r_code", qRCode));
|
if (unionAccess==null){
|
return R.fail("无效的二维码");
|
}
|
try {
|
accessUtil.deviceOpen(unionAccess.getSn(), unionUserDto.getName(), "scan", "occupant");
|
} catch (Exception e) {
|
e.printStackTrace(); // 打印异常信息
|
log.info("开门失败原因{}",e);
|
return R.fail("开门失败请检查人脸照片是否你本人或者联系工作人员");
|
}
|
Integer userLastOpenDoorMinutesDiff = unionOpenDoorMapper.getUserLastOpenDoorMinutesDiff(unionUserDto.getId());
|
log.info("上次开门时间间隔时间{}分钟",userLastOpenDoorMinutesDiff);
|
QueryWrapper<UnionOpenDoor> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<UnionOpenDoor> eq = queryWrapper.eq("user_id", unionUserDto.getId())
|
.eq("DATE(create_at)", LocalDate.now())
|
.eq("type", 1);
|
Integer count = unionOpenDoorMapper.selectCount(eq);
|
log.info("今日获得积分的开门次数为{}",count);
|
UnionIntegralRule unionIntegralRule =
|
unionIntegralRuleMapper.selectOne(new QueryWrapper<UnionIntegralRule>().eq("id", 1));
|
log.info("当前规则{}",unionIntegralRule);
|
if (unionIntegralRule.getDayNumber()>count && unionIntegralRule.getTimeNumber() <userLastOpenDoorMinutesDiff ){
|
log.info("此次开门获得积分");
|
UnionOpenDoor unionOpenDoor=new UnionOpenDoor();
|
unionOpenDoor.setSiteId(unionAccess.getSiteId());
|
unionOpenDoor.setUserId(unionUserDto.getId());
|
unionOpenDoor.setType(1);
|
unionOpenDoor.setCreateAt(LocalDateTime.now());
|
unionOpenDoorMapper.insert(unionOpenDoor);
|
UnionIntegralRuleRecord unionIntegralRuleRecord = unionIntegralRuleRecordMapper.selectOne(new QueryWrapper<UnionIntegralRuleRecord>()
|
.eq("rule_id", unionIntegralRule.getId())
|
.eq("count", count + 1));
|
log.info("此次开门获得积分{}",unionIntegralRuleRecord.getIntegralNumber());
|
UnionOutdoorSite unionOutdoorSite = unionOutdoorSiteMapper.selectById(unionAccess.getSiteId());
|
UnionIntegralSummarize unionIntegralSummarize = unionIntegralSummarizeMapper.selectOne(new QueryWrapper<UnionIntegralSummarize>()
|
.eq("community_id", unionOutdoorSite.getAreaCode()).eq("user_id", unionUserDto.getId()));
|
if (unionIntegralSummarize==null){
|
log.info("第一次开门在此区域没有积分表新增一个");
|
unionIntegralSummarize=new UnionIntegralSummarize();
|
unionIntegralSummarize.setUserId(unionUserDto.getId().toString());
|
unionIntegralSummarize.setCommunityId(unionOutdoorSite.getAreaCode());
|
unionIntegralSummarize.setCreateTime(new Date());
|
unionIntegralSummarize.setUpdateTime(new Date());
|
unionIntegralSummarize.setAllIntegral(unionIntegralRuleRecord.getIntegralNumber().toString());
|
unionIntegralSummarizeMapper.insert(unionIntegralSummarize);
|
}else {
|
log.info("用户积分修改前{}",unionIntegralSummarize);
|
unionIntegralSummarize.setUpdateTime(new Date());
|
unionIntegralSummarize.setAllIntegral(String.valueOf((Integer.parseInt(unionIntegralSummarize.getAllIntegral())
|
+unionIntegralRuleRecord.getIntegralNumber())));
|
log.info("用户积分修改后{}",unionIntegralSummarize);
|
unionIntegralSummarizeMapper.updateById(unionIntegralSummarize);
|
}
|
log.info("新增积分记录");
|
UnionIntegralRecord unionIntegralRecord=new UnionIntegralRecord();
|
unionIntegralRecord.setIntegralType("1");
|
unionIntegralRecord.setIntegral(unionIntegralRuleRecord.getIntegralNumber().toString());
|
unionIntegralRecord.setUserId(unionUserDto.getId().toString());
|
unionIntegralRecord.setCreateTime(new Date());
|
unionIntegralRecord.setUpdateTime(new Date());
|
unionIntegralRecord.setCommunityId(unionOutdoorSite.getAreaCode());
|
unionIntegralRecord.setIntegralId(unionIntegralSummarize.getId());
|
unionIntegralRecord.setType("1");
|
unionIntegralRecordMapper.insert(unionIntegralRecord);
|
return R.ok("开门成功");
|
}
|
else {
|
log.info("此次开门不获得积分");
|
UnionOpenDoor unionOpenDoor=new UnionOpenDoor();
|
unionOpenDoor.setSiteId(unionAccess.getSiteId());
|
unionOpenDoor.setUserId(unionUserDto.getId());
|
unionOpenDoor.setType(2);
|
unionOpenDoor.setCreateAt(LocalDateTime.now());
|
unionOpenDoorMapper.insert(unionOpenDoor);
|
return R.ok("开门成功");
|
}
|
}
|
}
|