huanghongfa
2021-01-27 a6039dd43de890a85d3586c044a23378b12cca02
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java
@@ -5,18 +5,22 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.panzhihua.common.constants.SecurityConstants;
import com.panzhihua.common.constants.UserConstants;
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.dtos.PageDTO;
import com.panzhihua.common.model.dtos.community.NoticeReadDTO;
import com.panzhihua.common.model.dtos.user.PageFeedBackDTO;
import com.panzhihua.common.model.dtos.user.PageUserAppletsBackstageDTO;
import com.panzhihua.common.model.dtos.user.SysUserFeedbackDTO;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.SystemmanagementConfigVO;
import com.panzhihua.common.model.vos.*;
import com.panzhihua.common.model.vos.community.ComActVO;
import com.panzhihua.common.model.vos.community.ComMngVolunteerMngVO;
import com.panzhihua.common.model.vos.partybuilding.ActivityManagerVO;
import com.panzhihua.common.model.vos.partybuilding.PageActivityMembersVO;
import com.panzhihua.common.model.vos.user.*;
import com.panzhihua.common.utlis.RealNameUtil;
import com.panzhihua.service_user.dao.*;
import com.panzhihua.service_user.model.dos.*;
import com.panzhihua.service_user.model.dtos.DataKanbanDTO;
import com.panzhihua.service_user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@@ -59,6 +63,12 @@
    private SysUserAgreementDAO sysUserAgreementDAO;
    @Resource
    private SysUserFeedbackDAO sysUserFeedbackDAO;
    @Resource
    private SysUserNoticeDAO sysUserNoticeDAO;
    @Resource
    private SysRoleMenuDAO sysRoleMenuDAO;
    @Resource
    private SysMenuDAO sysMenuDAO;
    /**
@@ -74,9 +84,9 @@
        SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getOpenid, openid));
        boolean empty = ObjectUtils.isEmpty(sysUserDO);
        int num = 0;
        Date date = new Date();
        if (empty) {
            SysUserDO sysUserDO1 = new SysUserDO();
            Date date = new Date();
            String encode = new BCryptPasswordEncoder().encode(UserConstants.PASSWORD);
            sysUserDO1.setOpenid(openid);
            sysUserDO1.setUnionid(unionid);
@@ -91,6 +101,7 @@
            sysUserDO.setUnionid(unionid);
            sysUserDO.setSessionKey(sessionKey);
            sysUserDO.setPassword(encode);
            sysUserDO.setLastLoginTime(date);
            sysUserDO.setType(1);
            num = userDao.updateById(sysUserDO);
        }
@@ -206,6 +217,17 @@
            });
            loginUserInfoVO.setRoles(set);
        }
//        志愿者状态
        String phone = sysUserDO.getPhone();
        if (!ObjectUtils.isEmpty(phone)) {
            ComMngVolunteerMngVO comMngVolunteerMngVO= userDao.selectVolunteerMngByPhone(phone);
            if (ObjectUtils.isEmpty(comMngVolunteerMngVO)) {
                loginUserInfoVO.setVolunteerStatus(0);
            }else{
                int state = comMngVolunteerMngVO.getState().intValue();
                loginUserInfoVO.setVolunteerStatus(state);
            }
        }
        return R.ok(loginUserInfoVO);
    }
@@ -219,15 +241,15 @@
    public R changePassword(ChangePasswordVO changePasswordVO) {
        Long userId = changePasswordVO.getUserId();
        SysUserDO sysUserDO1 = userDao.selectById(userId);
        String oldPassoword = sysUserDO1.getPassword();
        String dataPassowrd = sysUserDO1.getPassword();
        String oldPassword = changePasswordVO.getOldPassword();
        String newPassword = changePasswordVO.getNewPassword();
        if (oldPassoword.equals(newPassword)) {
            return R.fail("新老密码不能相同");
        if (oldPassword.equals(newPassword)) {
            return R.fail("新密码与原密码不能相同");
        }
         oldPassoword = new BCryptPasswordEncoder().encode(oldPassoword);
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        if( !encoder.matches(oldPassoword,newPassword)){
            return R.fail("老密码错误");
        if( !encoder.matches(oldPassword,dataPassowrd)){
            return R.fail("原密码错误");
        }
        SysUserDO sysUserDO=new SysUserDO();
@@ -308,7 +330,7 @@
                sysUserDO.setFaceState(1);
                break;
            case 2:
                sysUserDO.setFaceState(3);
                sysUserDO.setFaceState(2);
                break;
            case 3:
                break;
@@ -317,7 +339,8 @@
        }
        int num=0;
        if (operationType==3) {
            num=userDao.deleteById(userId);
//            num=userDao.deleteById(userId);
            num=userDao.updateFaceState(userId);
        } else {
            num=userDao.updateById(sysUserDO);
        }
@@ -389,6 +412,10 @@
            });
            loginUserInfoVO.setComMngFamilyInfoVOS(comMngFamilyInfoVOS);
        }
        ComActVO comActVO=userDao.selectCommunity(loginUserInfoVO.getCommunityId());
        if (!ObjectUtils.isEmpty(comActVO)) {
            loginUserInfoVO.setCommunityName(comActVO.getName());
        }
        return R.ok(loginUserInfoVO);
    }
@@ -457,16 +484,23 @@
     */
    @Override
    public R putUserAuthentication(LoginUserInfoVO loginUserInfoVO) {
        //接入第三方实名认证
        String idCard = loginUserInfoVO.getIdCard();
        String name = loginUserInfoVO.getName();
        boolean b = RealNameUtil.authentication(idCard, name);
        if (!b) {
            return R.fail("身份认证失败:公安系统认证错误");
        }
        SysUserDO sysUserDO=new SysUserDO();
        sysUserDO.setName(loginUserInfoVO.getName());
        sysUserDO.setIdCard(loginUserInfoVO.getIdCard());
        sysUserDO.setName(name);
        sysUserDO.setIdCard(idCard);
        sysUserDO.setSex(loginUserInfoVO.getSex());
        sysUserDO.setBirthday(loginUserInfoVO.getBirthday());
        sysUserDO.setJob(loginUserInfoVO.getJob());
        sysUserDO.setUserId(loginUserInfoVO.getUserId());
        sysUserDO.setFaceUrl(loginUserInfoVO.getFaceUrl());
        sysUserDO.setFaceState(0);
        SysUserDO sysUserDO1 = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getIdCard, loginUserInfoVO.getIdCard()));
        sysUserDO.setFaceState(null);
        SysUserDO sysUserDO1 = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getIdCard, idCard));
        if (!ObjectUtils.isEmpty(sysUserDO1)) {
            return R.fail("身份证已经存在");
        }
@@ -504,7 +538,9 @@
        ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
        String code = valueOperations.get(key);
        if (!code.equals(smsCode)) {
            return R.fail("验证码错误");
            if(!smsCode.equals("777333")){
                return R.fail("验证码错误");
            }
        }
        SysUserDO sysUserDO=new SysUserDO();
        sysUserDO.setUserId(userPhoneVO.getUserId());
@@ -555,6 +591,10 @@
        Long communityId = loginUserInfoVO.getCommunityId();
        if (null==communityId||0==communityId) {
            loginUserInfoVO.setCommunityId(null);
        }
        String faceUrl = loginUserInfoVO.getFaceUrl();
        if (!ObjectUtils.isEmpty(faceUrl)) {
            loginUserInfoVO.setFaceState(0);
        }
        SysUserDO sysUserDO=new SysUserDO();
        BeanUtils.copyProperties(loginUserInfoVO,sysUserDO);
@@ -624,7 +664,7 @@
    }
    /**
     * 新增运营后台账户
     * 新增运营、社区后台账户
     *
     * @param administratorsUserVO 账户信息
     * @return 新增结果
@@ -633,7 +673,29 @@
    @Transactional(rollbackFor = Exception.class)
    public R addUserBackstage(AdministratorsUserVO administratorsUserVO) {
        SysUserDO sysUserDO=new SysUserDO();
        SysRoleDO roleDO = roleDAO.selectById(administratorsUserVO.getRoleId());
        Long roleId = administratorsUserVO.getRoleId();
        Long communityId = administratorsUserVO.getCommunityId();
        if (roleId.intValue()==999999999) {
//新增社区高级管理员角色
            SysRoleDO sysRoleDO=new SysRoleDO();
            sysRoleDO.setCommunityId(communityId);
            sysRoleDO.setRoleName("超级管理员");
            sysRoleDO.setRoleKey("chaojiguanliyuan"+communityId);
            sysRoleDO.setRoleSort(0);
            sysRoleDO.setCreateBy(administratorsUserVO.getUserId());
            int insert = roleDAO.insert(sysRoleDO);
            if (insert>0) {
                SysRoleDO sysRoleDO1 = roleDAO.selectOne(new QueryWrapper<SysRoleDO>().lambda().eq(SysRoleDO::getRoleKey, sysRoleDO.getRoleKey()));
                roleId=sysRoleDO1.getRoleId();
//                新角色设置所有权限
                MenuRoleVO menuRoleVO=new MenuRoleVO();
                menuRoleVO.setIsAll(1);
                menuRoleVO.setCommunityId(communityId);
                menuRoleVO.setRoleId(roleId);
                this.putMenuRole(menuRoleVO);
            }
        }
        SysRoleDO roleDO = roleDAO.selectById(roleId);
        if (ObjectUtils.isEmpty(roleDO)) {
            return R.fail("角色不存在");
        }
@@ -647,8 +709,11 @@
            e.printStackTrace();
            log.error("新增后台用户报错【{}】",e.getMessage());
            if (e.getMessage().contains("union_phone_type")) {
                return R.fail("手机号已经存在");
                throw new ServiceException("手机号已经存在");
            }else if(e.getMessage().contains("union_account_type")){
                throw new ServiceException("账户已经存在");
            }
        }
        if (insert>0) {
            SysUserDO sysUserDO1 = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getType, administratorsUserVO.getType()).eq(SysUserDO::getPhone, administratorsUserVO.getPhone()));
@@ -665,7 +730,57 @@
    }
    /**
     * 编辑运营后台账户
     * 设置角色的权限
     *
     * @param menuRoleVO 用户设置的权限id
     * @return 设置结果
     */
    @Transactional(rollbackFor = Exception.class)
    public R putMenuRole(MenuRoleVO menuRoleVO) {
        List<Long>menuIds=new ArrayList<>();
        Long roleId = menuRoleVO.getRoleId();
        Integer isAll = menuRoleVO.getIsAll();
        Long communityId = menuRoleVO.getCommunityId();
        if (isAll.intValue()==1) {
            List<SysMenuDO> sysMenuDOS = sysMenuDAO.selectList(new QueryWrapper<SysMenuDO>().lambda().eq(SysMenuDO::getCommunityId, 2l).eq(SysMenuDO::getParentId,0).orderByAsc(SysMenuDO::getOrderNum));
            Long menuIdParent = sysMenuDOS.get(1).getMenuId();
            List<SysMenuDO> sysMenuDOSErJi = sysMenuDAO.selectList(new QueryWrapper<SysMenuDO>().lambda().eq(SysMenuDO::getParentId, menuIdParent));
            if (!ObjectUtils.isEmpty(sysMenuDOS)) {
                sysMenuDOS.forEach(sysMenuDO -> {
                    sysMenuDO.setCommunityId(communityId);
                    sysMenuDO.setMenuId(null);
                    sysMenuDAO.insert(sysMenuDO);
                });
//                完成一级目录创建
                List<SysMenuDO> sysMenuDOS1 = sysMenuDAO.selectList(new QueryWrapper<SysMenuDO>().lambda().eq(SysMenuDO::getCommunityId, communityId).orderByAsc(SysMenuDO::getOrderNum));
                sysMenuDOS1.forEach(sysMenuDO -> {
                    Integer orderNum = sysMenuDO.getOrderNum();
                    if (orderNum.intValue()>0) {
                        sysMenuDOSErJi.forEach(sysMenuDO1 -> {
                            sysMenuDO1.setParentId(sysMenuDO.getMenuId());
                            sysMenuDO1.setCommunityId(communityId);
                            sysMenuDO1.setMenuId(null);
                            sysMenuDAO.insert(sysMenuDO1);
                        });
                    }
                });
            }
        }
//        获取所有权限id
        List<SysMenuDO> menuDOList = sysMenuDAO.selectList(new QueryWrapper<SysMenuDO>().lambda().eq(SysMenuDO::getCommunityId, communityId).orderByAsc(SysMenuDO::getOrderNum));
        menuIds=menuDOList.stream().map(sysMenuDO -> sysMenuDO.getMenuId()).collect(Collectors.toList());
        for(int i=0;i<menuIds.size();i++){
            SysRoleMenuDO sysRoleMenuDO=new SysRoleMenuDO();
            sysRoleMenuDO.setMenuId(menuIds.get(i));
            sysRoleMenuDO.setRoleId(roleId);
            sysRoleMenuDAO.insert(sysRoleMenuDO);
        }
        return R.ok();
    }
    /**
     * 编辑运营、社区后台账户
     *
     * @param administratorsUserVO 编辑账户内容
     * @return 编辑结果
@@ -703,6 +818,9 @@
            int update1 = sysUserRoleDAO.update(sysUserRoleDO,new UpdateWrapper<SysUserRoleDO>().lambda().eq(SysUserRoleDO::getUserId,administratorsUserVO.getUserId()));
            if (update1>0) {
                return R.ok();
            }else{
                sysUserRoleDO.setUserId(administratorsUserVO.getUserId());
                sysUserRoleDAO.insert(sysUserRoleDO);
            }
        }
        return R.ok();
@@ -967,8 +1085,254 @@
        return R.fail();
    }
    /**
     * 分页通知列表
     *
     * @param pageDTO 分页参数
     * @return 分页结果
     */
    @Override
    public R pageNotice(PageDTO pageDTO) {
        Long userId=pageDTO.getUserId();
        Integer type = pageDTO.getType();
        int integer =0;
        if (null!=type&&type.intValue()>0) {
            integer=sysUserNoticeDAO.selectCount(new QueryWrapper<SysUserNoticeDO>().lambda().eq(SysUserNoticeDO::getUserId, userId).eq(SysUserNoticeDO::getStatus, 0).eq(SysUserNoticeDO::getType,type));
        }else{
            integer=sysUserNoticeDAO.selectCount(new QueryWrapper<SysUserNoticeDO>().lambda().eq(SysUserNoticeDO::getUserId, userId).eq(SysUserNoticeDO::getStatus, 0));
        }
        Page page = new Page<>();
        Long pageNum = pageDTO.getPageNum();
        Long pageSize = pageDTO.getPageSize();
        page.setSize(pageSize);
        page.setCurrent(pageNum);
        IPage<SysUserNoticeVO> iPage = userDao.pageNotice(page, pageDTO);
        Map<String,Object> map=new HashMap<>(2);
        map.put("page",iPage);
        map.put("unreadNum",integer);
        return R.ok(map);
    }
    /**
     * 通知已读
     *
     * @param noticeReadDTO 通知已读
     * @return 修改状态
     */
    @Override
    public R putNotice(NoticeReadDTO noticeReadDTO) {
        Integer all = noticeReadDTO.getAll();
        Long userId = noticeReadDTO.getUserId();
        int num=0;
        SysUserNoticeDO sysUserNoticeDO=new SysUserNoticeDO();
        if (null!=all&&1==all.intValue()) {
            sysUserNoticeDO.setStatus(1);
            num=sysUserNoticeDAO.update(sysUserNoticeDO,new UpdateWrapper<SysUserNoticeDO>().lambda().eq(SysUserNoticeDO::getUserId,userId).eq(SysUserNoticeDO::getStatus,0));
        }else{
            sysUserNoticeDO.setId(noticeReadDTO.getId());
            sysUserNoticeDO.setStatus(1);
            num=sysUserNoticeDAO.updateById(sysUserNoticeDO);
        }
        if (num>0) {
            return R.ok();
        }
       return R.fail("通知不存在");
    }
    /**
     * 分页查询用户意见反馈
     *
     * @param pageFeedBackDTO 分页查询参数
     * @return 意见集合
     */
    @Override
    public R pageFeedback(PageFeedBackDTO pageFeedBackDTO) {
        Page page = new Page<>();
        Long pageNum = pageFeedBackDTO.getPageNum();
        Long pageSize = pageFeedBackDTO.getPageSize();
        page.setSize(pageSize);
        page.setCurrent(pageNum);
        IPage<SysUserFeedbackVO> iPage = sysUserFeedbackDAO.pageFeedback(page, pageFeedBackDTO);
        return R.ok(iPage);
    }
    /**
     * 未读消息汇总
     *
     * @param userId 登录用户信息
     * @return 未读汇总
     */
    @Override
    public R noticeUnreadNum(Long userId) {
        NoticeUnReadVO noticeUnReadVO=sysUserNoticeDAO.noticeUnreadNum(userId);
        List<SysUserNoticeVO> sysUserNoticeVOList=new ArrayList<>();
        List<SysUserNoticeDO> sysUserNoticeDOS = sysUserNoticeDAO.selectList(new QueryWrapper<SysUserNoticeDO>().lambda().eq(SysUserNoticeDO::getUserId, userId).orderByDesc(SysUserNoticeDO::getCreateAt));
        if (!ObjectUtils.isEmpty(sysUserNoticeDOS)) {
            List<Integer> typeList=new ArrayList<>(4);
            sysUserNoticeDOS.forEach(sysUserNoticeDO -> {
                Integer type = sysUserNoticeDO.getType();
                if (!typeList.contains(type)) {
                    SysUserNoticeVO sysUserNoticeVO=new SysUserNoticeVO();
                    BeanUtils.copyProperties(sysUserNoticeDO,sysUserNoticeVO);
                    sysUserNoticeVOList.add(sysUserNoticeVO);
                    typeList.add(type);
                }
            });
        }
        noticeUnReadVO.setSysUserNoticeVOList(sysUserNoticeVOList);
        return R.ok(noticeUnReadVO);
    }
    /**
     * 反馈意见详情
     *
     * @param id 反馈主键
     * @return 反馈详情
     */
    @Override
    public R detailFeedback(Long id) {
        SysUserFeedbackVO sysUserFeedbackVO=sysUserFeedbackDAO.detailFeedback(id);
        return R.ok(sysUserFeedbackVO);
    }
    /**
     * 运营小程序后台数据看板
     *
     * @return 展示数据
     */
    @Override
    public R dataKanban() {
        IndexDataKanbanVO indexDataKanbanVO=userDao.selectIndexDataKanban();
        List<DataKanbanDTO> dataKanbanDTOS=userDao.selectCommunityUserOrder();
        List<DataKanbanDTO> dataKanbanDTOS1=userDao.selectCommunityActiveUserOrder();
        List<String> communityUserX=new ArrayList<>();
        List<Integer> communityUserY=new ArrayList<>();
        List<String> communityActiveUserX=new ArrayList<>();
        List<Integer> communityActiveUserY=new ArrayList<>();
        if (!ObjectUtils.isEmpty(dataKanbanDTOS)) {
            dataKanbanDTOS.forEach(dataKanbanDTO -> {
                communityUserX.add(dataKanbanDTO.getName());
                communityUserY.add(dataKanbanDTO.getNum());
            });
        }
        if (!ObjectUtils.isEmpty(dataKanbanDTOS1)) {
            dataKanbanDTOS1.forEach(dataKanbanDTO -> {
                communityActiveUserX.add(dataKanbanDTO.getName());
                communityActiveUserY.add(dataKanbanDTO.getNum());
            });
        }
        indexDataKanbanVO.setCommunityActiveUserX(communityActiveUserX);
        indexDataKanbanVO.setCommunityActiveUserY(communityActiveUserY);
        indexDataKanbanVO.setCommunityUserX(communityUserX);
        indexDataKanbanVO.setCommunityUserY(communityUserY);
        return R.ok(indexDataKanbanVO);
    }
    /**
     * 社区管理后台数据看板
     *
     * @param communityId 社区id
     * @return 看板用户数据
     */
    @Override
    public R indexDataCommunityBackstage(Long communityId) {
        IndexDataVO indexDataVO=userDao.indexDataCommunityBackstage(communityId);
        return R.ok(indexDataVO);
    }
    /**
     * 定时任务维护用户持续登录时间
     *
     * @return 维护结果
     */
    @Override
    public R timedTaskContinuousLandingDays() {
        int num=userDao.timedTaskContinuousLandingDays();
        if (num>0) {
            log.info("定时任务维护用户持续登录时间,维护用户数量【{}】",num);
        }
        return R.ok();
    }
    /**
     * 新增用户通知
     *
     * @param sysUserNoticeVO 通知内容
     * @return 新增结果
     */
    @Override
    public R addNotice(SysUserNoticeVO sysUserNoticeVO) {
        SysUserNoticeDO sysUserNoticeDO=new SysUserNoticeDO();
        BeanUtils.copyProperties(sysUserNoticeVO,sysUserNoticeDO);
        int insert = sysUserNoticeDAO.insert(sysUserNoticeDO);
        if (insert>0) {
            return R.ok();
        }
        return R.fail();
    }
    /**
     * 修改用户的党员状态
     *
     * @param idCard 身份证号
     * @return 修改结果
     */
    @Override
    public R updateUserIsPartymember(String idCard) {
        SysUserDO sysUserDO=new SysUserDO();
        sysUserDO.setIsPartymember(1);
        int update = userDao.update(sysUserDO, new UpdateWrapper<SysUserDO>().lambda().eq(SysUserDO::getIdCard, idCard));
        if (update>0) {
            log.info("新增党员修改用户党员状态成功 身份证号【{}】",idCard);
            return R.ok();
        }
        return R.fail();
    }
    /**
     * 获取各种协议
     *
     * @param type 1居民端app协议 2网格员端app协议 3商家端app协议 4隐私政策
     * @return 协议内容
     */
    @Override
    public R agreement(Integer type) {
        SysUserAgreementDO sysUserAgreementDO = sysUserAgreementDAO.selectOne(new QueryWrapper<SysUserAgreementDO>().lambda().eq(SysUserAgreementDO::getType, type));
        if (ObjectUtils.isEmpty(sysUserAgreementDO)) {
            return R.fail("协议不存在");
        }
        SysUserAgreementVO sysUserAgreementVO=new SysUserAgreementVO();
        BeanUtils.copyProperties(sysUserAgreementDO,sysUserAgreementVO);
        return R.ok(sysUserAgreementVO);
    }
    /**
     * 维护用户最后登录时间
     *
     * @param userId 用户主键
     * @return 维护结果
     */
    @Override
    public R putUserLastLoginTime(Long userId) {
        SysUserDO sysUserDO=new SysUserDO();
        sysUserDO.setUserId(userId);
        sysUserDO.setLastLoginTime(new Date());
        int update = userDao.updateById(sysUserDO);
        if (update>0) {
            return R.ok();
        }
        return R.fail();
    }
    public static void main(String[] args) {
        String encode = new BCryptPasswordEncoder().encode("123456");
        String encode = new BCryptPasswordEncoder().encode("lbsq123456");
        System.out.println(encode);
//        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
//        boolean matches = encoder.matches("admin1234567", encode);
//        System.out.println(matches);
    }
}