mitao
2025-05-20 179c4d64313c9b7572778da4aaaf6c6584fe457d
springcloud_k8s_panzhihuazhihuishequ/service_equipment/src/main/java/com/panzhihua/service_equipment/service/impl/UnionUserServiceImpl.java
@@ -6,19 +6,22 @@
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.service_equipment.config.AccessUtil;
import com.panzhihua.service_equipment.dao.UnionAccessMapper;
import com.panzhihua.service_equipment.dao.UnionUserMapper;
import com.panzhihua.service_equipment.model.dos.UnionAccess;
import com.panzhihua.service_equipment.model.dos.UnionOutdoorSite;
import com.panzhihua.service_equipment.model.dos.UnionUser;
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
@@ -29,6 +32,30 @@
    @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;
    /**
     * 总工会户外劳登录
@@ -64,6 +91,85 @@
    }
    /**
     * 总工会户外劳登录(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
@@ -72,7 +178,11 @@
    @Override
    public R authentication(UnionUserDto unionUserDto){
        UnionUser unionUser = baseMapper.selectOne(new QueryWrapper<UnionUser>().eq("user_id", unionUserDto.getUserId()));
        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);
            //设备下发照片代码
@@ -110,4 +220,92 @@
        }
    }
    /**
     * 用户开门
     *
     * @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("开门成功");
        }
    }
}