罗元桥
2021-06-10 a7937b8fcaa98b9a5dd04a1b83f2c3c2b591d354
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/EldersAuthServiceImpl.java
@@ -1,33 +1,43 @@
package com.panzhihua.service_community.service.impl;
import cn.hutool.core.util.IdcardUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.dtos.community.*;
import com.panzhihua.common.model.dtos.elders.ComEldersAuthGetResultDTO;
import com.panzhihua.common.model.dtos.elders.ComEldersAuthPageDTO;
import com.panzhihua.common.model.dtos.elders.ComEldersAuthUserAddAppDTO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.*;
import com.panzhihua.common.model.vos.community.EldersAuthDetailsVO;
import com.panzhihua.common.model.vos.community.EldersAuthFeedbackVO;
import com.panzhihua.common.model.vos.community.EldersAuthVO;
import com.panzhihua.common.model.vos.elders.ComElderAuthUserAppVO;
import com.panzhihua.common.model.vos.user.SysUserVO;
import com.panzhihua.common.utlis.AgeUtils;
import com.panzhihua.common.utlis.IdCard;
import com.panzhihua.common.utlis.StringUtils;
import com.panzhihua.service_community.dao.*;
import com.panzhihua.service_community.model.dos.*;
import com.panzhihua.service_community.service.EldersAuthService;
import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.beans.BeanUtils;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
 * @auther lyq
 * @create 2021-04-14 15:03:01
 * @describe 订单表服务实现类
 * @describe 服务实现类
 */
@Slf4j
@Service
@@ -35,9 +45,15 @@
    @Resource
    private EldersAuthDAO eldersAuthDAO;
    @Resource
    private EldersAuthFeedbackDAO eldersAuthFeedbackDAO;
    @Resource
    private ComEldersAuthUserMapper comEldersAuthUserMapper;
    @Resource
    private ComEldersAuthElderlyMapper comEldersAuthElderlyMapper;
    @Resource
    private SysConfMapper sysConfDao;
    /**
     * 新增高龄认证
     * @param eldersAuthAddDTO
@@ -147,4 +163,214 @@
    public String queryDomicile(String idCard) {
        return eldersAuthDAO.selectDomicile(idCard);
    }
    @Override
    public R queryEldersRecord(PageComEldersRecordsDTO pageComEldersRecordsDTO) {
        Page page = new Page<>();
        page.setSize(pageComEldersRecordsDTO.getPageSize());
        page.setCurrent(pageComEldersRecordsDTO.getPageNum());
        List<ComEldersAuthRecordVO> eldersAuthDOList = eldersAuthDAO.selectEldersRecordByPage(page, pageComEldersRecordsDTO);
        return R.ok(eldersAuthDOList);
    }
    @Override
    public R<ComEldersAuthElderlyDetailsVO> comEldersAuthElderlyDetails(Long id) {
        EldersAuthDO eldersAuthDO = eldersAuthDAO.selectById(id);
        if(eldersAuthDO == null){
            return R.fail("未查询到认证记录");
        }
        ComEldersAuthElderlyDetailsVO comEldersAuthElderlyDetailsVO = new ComEldersAuthElderlyDetailsVO();
        BeanUtils.copyProperties(eldersAuthDO, comEldersAuthElderlyDetailsVO);
        String communityName = eldersAuthDAO.selectCommunityNameByAuth(id);
        comEldersAuthElderlyDetailsVO.setCommunityName(communityName);
        List<EldersAuthFeedbackDO> eldersAuthFeedbackDOList = eldersAuthFeedbackDAO.selectList(new LambdaQueryWrapper<EldersAuthFeedbackDO>().eq(EldersAuthFeedbackDO::getAuthId, id));
        List<EldersAuthFeedbackVO> eldersAuthFeedbackVOList = new ArrayList<>();
        eldersAuthFeedbackDOList.forEach(edo ->{
            EldersAuthFeedbackVO eldersAuthFeedbackVO = new EldersAuthFeedbackVO();
            BeanUtils.copyProperties(edo, eldersAuthFeedbackVO);
            eldersAuthFeedbackVOList.add(eldersAuthFeedbackVO);
        });
        comEldersAuthElderlyDetailsVO.setFeedback(eldersAuthFeedbackVOList);
        return R.ok(comEldersAuthElderlyDetailsVO);
    }
    @Override
    public R communityAuthType(EldersAuthTypeQueryDTO eldersAuthTypeQueryDTO) {
        Long communityId = eldersAuthTypeQueryDTO.getCommunityId();
        List<SysConfDO> confDOList =
                sysConfDao.selectList(new LambdaQueryWrapper<SysConfDO>().eq(SysConfDO::getCommunityId, communityId)
                .orderByDesc(SysConfDO::getCreateAt));
        if(confDOList==null || confDOList.size()==0){
            SysConfDO sysConfDO = new SysConfDO();
            sysConfDO.setCode("ELDER_AUTH_TYPE");
            sysConfDO.setName("高龄认证类型");
            sysConfDO.setValue(1+"");//核验类型(1.视频认证 2.人脸核验)
            sysConfDO.setDescribe("高龄认证默认添加的核验类型");
            sysConfDO.setCommunityId(communityId);
            sysConfDO.setCreateBy(eldersAuthTypeQueryDTO.getUserId());
            int inserted = sysConfDao.insert(sysConfDO);
            if(inserted!=1){
                throw new ServiceException("添加高龄认证默认添加的核验类型失败");
            }
            confDOList =
                    sysConfDao.selectList(new LambdaQueryWrapper<SysConfDO>().eq(SysConfDO::getCommunityId, eldersAuthTypeQueryDTO.getOperUserId())
                            .orderByDesc(SysConfDO::getCreateAt));
        }
        if(confDOList!=null && confDOList.size()>0){
            SysConfDO  latest = confDOList.get(0);
            SysConfVO sysConfVO = new SysConfVO();
            BeanUtils.copyProperties(latest, sysConfVO);
            return R.ok(sysConfVO.getValue());
        }
        return R.ok();
    }
    /**
     * 人脸核验新增高龄认证记录
     * @param authGetResultDTO  请求参数
     * @return  新增结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R addAuthByEldersApp(ComEldersAuthGetResultDTO authGetResultDTO){
        ComEldersAuthUserDO authUserDO = comEldersAuthUserMapper.selectById(authGetResultDTO.getAuthUserId());
        if(authUserDO != null){
            EldersAuthDO eldersAuthDO = new EldersAuthDO();
            eldersAuthDO.setIdCard(authUserDO.getIdCard());
            eldersAuthDO.setAuthUserName(authUserDO.getName());
            eldersAuthDO.setCreateBy(authGetResultDTO.getUserId());
            eldersAuthDO.setCreateAt(new Date());
            eldersAuthDO.setSumitUserId(authGetResultDTO.getUserId());
            String domicile = this.baseMapper.selectDomicile(eldersAuthDO.getIdCard());
            if(org.springframework.util.StringUtils.isEmpty(domicile)){
                domicile = "暂无";
            }
            eldersAuthDO.setDomicile(domicile);
            eldersAuthDO.setBirthDay(IdCard.birthDay(authUserDO.getIdCard()));
            eldersAuthDO.setFamilyUserId(authUserDO.getId());
            eldersAuthDO.setAge(IdcardUtil.getAgeByIdCard(eldersAuthDO.getIdCard()));
            eldersAuthDO.setType(2);
            eldersAuthDO.setVerificationResult(authGetResultDTO.getVerificationResult());
            this.baseMapper.insert(eldersAuthDO);
            authUserDO.setIsAuth(ComEldersAuthUserDO.isAuth.yes);
            comEldersAuthUserMapper.updateById(authUserDO);
            return R.ok(eldersAuthDO.getId());
        }
        log.error("人脸核验新增认证记录失败,错误原因:未查询到老人记录,老人id:" + authGetResultDTO.getAuthUserId());
        return R.fail();
    }
    /**
     * 高龄认证分页接口
     * @param authPageDTO   请求参数
     * @return  查询结果
     */
    @Override
    public R pageEldersByApp(ComEldersAuthPageDTO authPageDTO){
        //判断当前用户是否是高龄老人,如果是则将这个人新增到高龄老人的列表里
        SysUserVO userVO = this.eldersAuthDAO.getSysUserByUserId(authPageDTO.getUserId());
        if(userVO != null){
            //查询当前用户是否已存在用户关联中
            ComEldersAuthUserDO oldAuthUserDO = comEldersAuthUserMapper.selectOne(new QueryWrapper<ComEldersAuthUserDO>().lambda()
                    .eq(ComEldersAuthUserDO::getIdCard,userVO.getIdCard()));
            if(oldAuthUserDO == null){
                //查询老人库是否存在当前用户信息
                ComEldersAuthElderlyDO authElderlyDO = comEldersAuthElderlyMapper.selectOne(new QueryWrapper<ComEldersAuthElderlyDO>().lambda()
                        .eq(ComEldersAuthElderlyDO::getIdCard,userVO.getIdCard()));
                if(authElderlyDO != null){
                    ComEldersAuthUserDO authUserDO = new ComEldersAuthUserDO();
                    authUserDO.setUserId(userVO.getUserId());
                    authUserDO.setRelation(ComEldersAuthUserDO.relation.br);
                    authUserDO.setName(userVO.getName());
                    authUserDO.setIdCard(userVO.getIdCard());
                    authUserDO.setCommunityId(authElderlyDO.getCommunityId());
                    authUserDO.setBigAgeId(authElderlyDO.getId());
                    comEldersAuthUserMapper.insert(authUserDO);
                }
            }
        }
        IPage<ComElderAuthUserAppVO> authUserAppVOIPage = comEldersAuthUserMapper.findByPage(new Page(authPageDTO.getPageNum(),authPageDTO.getPageSize()));
        if(!authUserAppVOIPage.getRecords().isEmpty()){
            authUserAppVOIPage.getRecords().forEach(authUser -> {
                if(authUser.getIsAuth().equals(ComEldersAuthUserDO.isAuth.yes)){
                    List<EldersAuthDO> authDOS = eldersAuthDAO.selectList(new QueryWrapper<EldersAuthDO>().lambda()
                            .eq(EldersAuthDO::getSumitUserId,authPageDTO.getUserId()).orderByDesc(EldersAuthDO::getCreateAt));
                    if(!authDOS.isEmpty()){
                        EldersAuthDO authDO = authDOS.get(0);
                        if(authDO.getType().equals(1)){//视频认证
                            Integer count = eldersAuthFeedbackDAO.selectCount(new QueryWrapper<EldersAuthFeedbackDO>().lambda()
                                    .eq(EldersAuthFeedbackDO::getAuthId,authDO.getId()));
                            if(count > 0){
                                authUser.setIsFeedback(1);
                            }
                        }
                    }
                }
                authUser.setAge(AgeUtils.getAgeFromBirthTimes(IdCard.birthDay(authUser.getIdCard()).getTime()));
            });
        }
        return R.ok(authUserAppVOIPage);
    }
    /**
     * 添加高龄老人接口
     * @param authUserAddAppDTO 请求参数
     * @return  添加结果
     */
    @Override
    public R addEldersByApp(ComEldersAuthUserAddAppDTO authUserAddAppDTO){
        ComEldersAuthUserDO authUserDO = comEldersAuthUserMapper.selectOne(new QueryWrapper<ComEldersAuthUserDO>().lambda()
                .eq(ComEldersAuthUserDO::getIdCard,authUserAddAppDTO.getIdCard()));
        if(authUserDO != null){
            return R.fail("当前老人已存在");
        }
        ComEldersAuthElderlyDO authElderlyDO = comEldersAuthElderlyMapper.selectOne(new QueryWrapper<ComEldersAuthElderlyDO>().lambda()
                .eq(ComEldersAuthElderlyDO::getIdCard,authUserAddAppDTO.getIdCard()));
        if(authElderlyDO == null){
            return R.fail("未在系统找到相符的高龄老人!请检查信息是否正确,或联系社区工作人员");
        }
        authUserDO = new ComEldersAuthUserDO();
        BeanUtils.copyProperties(authUserAddAppDTO,authUserDO);
        authUserDO.setBigAgeId(authElderlyDO.getId());
        authUserDO.setName(authElderlyDO.getName());
        if(comEldersAuthUserMapper.insert(authUserDO) > 0){
            return R.ok(authUserDO.getId());
        }
        return R.fail("添加失败");
    }
    /**
     * 修改高龄老人接口
     * @param authUserAddAppDTO 请求参数
     * @return  修改结果
     */
    @Override
    public R editEldersByApp(ComEldersAuthUserAddAppDTO authUserAddAppDTO){
        ComEldersAuthUserDO authUserDO = comEldersAuthUserMapper.selectById(authUserAddAppDTO.getElderId());
        if(authUserDO == null){
            return R.fail("未查询到老人信息");
        }
        if(StringUtils.isNotEmpty(authUserAddAppDTO.getName())){
            authUserDO.setName(authUserAddAppDTO.getName());
        }
        if(authUserAddAppDTO.getRelation() != null){
            authUserDO.setRelation(authUserAddAppDTO.getRelation());
        }
        if(comEldersAuthUserMapper.updateById(authUserDO) > 0){
            return R.ok();
        }
        return R.fail();
    }
}