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 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 login(LoginUserInfoVO loginUserInfoVO) { UnionUser unionUser = baseMapper.selectOne(new QueryWrapper().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> loginByUnion(String phone){ Map mapUser = new HashMap<>(); Users users = usersMapper.selectOne(new QueryWrapper() .eq("phone", phone) .eq("deleted", 0) .eq("freezeFlag", 0) .orderByDesc("updateTime") .last("limit 1")); if (users!=null){ UnionUser unionUser = baseMapper.selectOne(new QueryWrapper().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().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().eq("user_id", unionUserDto.getUserId())); else unionUser = baseMapper.selectOne(new QueryWrapper().eq("id", unionUserDto.getId())); if (unionUser != null){ log.info("查询到用户开始认证操作{}",unionUser); //设备下发照片代码 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.inSql(UnionAccess::getSiteId, "SELECT id FROM union_outdoor_site WHERE area_code='" + unionUserDto.getAreaCode() + "'"); List 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().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 queryWrapper = new QueryWrapper<>(); QueryWrapper 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().eq("id", 1)); log.info("当前规则{}",unionIntegralRule); if (unionIntegralRule.getDayNumber()>count && unionIntegralRule.getTimeNumber() () .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() .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("开门成功"); } } }