罗元桥
2021-09-24 09e41d546b030b47661877d4b8141c88584d7598
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java
@@ -1,5 +1,29 @@
package com.panzhihua.service_user.service.impl;
import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -11,43 +35,87 @@
import com.panzhihua.common.model.dtos.PageDTO;
import com.panzhihua.common.model.dtos.community.ExportUserDTO;
import com.panzhihua.common.model.dtos.community.NoticeReadDTO;
import com.panzhihua.common.model.dtos.grid.*;
import com.panzhihua.common.model.dtos.user.*;
import com.panzhihua.common.model.vos.*;
import com.panzhihua.common.model.dtos.community.convenient.ConvenientMerchantDTO;
import com.panzhihua.common.model.dtos.community.convenient.DisableOrEnableConvenientMerchantDTO;
import com.panzhihua.common.model.dtos.grid.EventGridMemberAddDTO;
import com.panzhihua.common.model.dtos.grid.EventGridMemberEditAdminDTO;
import com.panzhihua.common.model.dtos.grid.EventGridMemberEditStatusDTO;
import com.panzhihua.common.model.dtos.grid.EventGridMemberPassResetDTO;
import com.panzhihua.common.model.dtos.grid.PageEventGridMemberRelationDTO;
import com.panzhihua.common.model.dtos.user.EexcelUserDTO;
import com.panzhihua.common.model.dtos.user.PageFeedBackDTO;
import com.panzhihua.common.model.dtos.user.PageUserAppletsBackstageDTO;
import com.panzhihua.common.model.dtos.user.SysUserEditTipsDTO;
import com.panzhihua.common.model.dtos.user.SysUserFeedbackDTO;
import com.panzhihua.common.model.vos.AppletUserInfoVO;
import com.panzhihua.common.model.vos.EditUserInfoPassAppDTO;
import com.panzhihua.common.model.vos.IndexDataKanbanVO;
import com.panzhihua.common.model.vos.IndexDataVO;
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.community.ComActVO;
import com.panzhihua.common.model.vos.community.ComMngVolunteerMngVO;
import com.panzhihua.common.model.vos.grid.EventGridMemberRelationVO;
import com.panzhihua.common.model.vos.grid.GridMemberVO;
import com.panzhihua.common.model.vos.grid.admin.GridMemberBuildingVO;
import com.panzhihua.common.model.vos.partybuilding.ActivityManagerVO;
import com.panzhihua.common.model.vos.shop.ShopStoreVO;
import com.panzhihua.common.model.vos.user.*;
//import com.panzhihua.common.service.grid.GridService;
import com.panzhihua.common.service.partybuilding.PartyBuildingService;
import com.panzhihua.common.model.vos.user.AdministratorsUserVO;
import com.panzhihua.common.model.vos.user.ChangePasswordVO;
import com.panzhihua.common.model.vos.user.ComMngFamilyInfoVO;
import com.panzhihua.common.model.vos.user.ComMngUserTagVO;
import com.panzhihua.common.model.vos.user.CommunityUserInfoVO;
import com.panzhihua.common.model.vos.user.MenuRoleVO;
import com.panzhihua.common.model.vos.user.NoticeUnReadVO;
import com.panzhihua.common.model.vos.user.SysOperLogVO;
import com.panzhihua.common.model.vos.user.SysUserAgreementVO;
import com.panzhihua.common.model.vos.user.SysUserFeedbackVO;
import com.panzhihua.common.model.vos.user.SysUserNoticeVO;
import com.panzhihua.common.model.vos.user.SysUserVO;
import com.panzhihua.common.model.vos.user.UpdateUserArchivesVO;
import com.panzhihua.common.model.vos.user.UserArchivesVO;
import com.panzhihua.common.model.vos.user.UserPhoneVO;
import com.panzhihua.common.utlis.IdCard;
import com.panzhihua.common.utlis.RealNameUtil;
import com.panzhihua.common.utlis.SensitiveUtil;
import com.panzhihua.service_user.dao.*;
import com.panzhihua.service_user.model.dos.*;
import com.panzhihua.common.utlis.Snowflake;
import com.panzhihua.common.utlis.StringUtils;
import com.panzhihua.common.utlis.WxUtil;
import com.panzhihua.common.utlis.WxXCXTempSend;
import com.panzhihua.service_user.dao.ComMngFamilyInfoDAO;
import com.panzhihua.service_user.dao.ComMngUserTagDAO;
import com.panzhihua.service_user.dao.EventGridMemberBuildingRelationMapper;
import com.panzhihua.service_user.dao.LcCompareMemberCodeMapper;
import com.panzhihua.service_user.dao.RoleDAO;
import com.panzhihua.service_user.dao.SysMenuDAO;
import com.panzhihua.service_user.dao.SysOperLogDAO;
import com.panzhihua.service_user.dao.SysRoleMenuDAO;
import com.panzhihua.service_user.dao.SysUserAgreementDAO;
import com.panzhihua.service_user.dao.SysUserFeedbackDAO;
import com.panzhihua.service_user.dao.SysUserInputDAO;
import com.panzhihua.service_user.dao.SysUserNoticeDAO;
import com.panzhihua.service_user.dao.SysUserRoleDAO;
import com.panzhihua.service_user.dao.UserDao;
import com.panzhihua.service_user.model.dos.ComMngFamilyInfoDO;
import com.panzhihua.service_user.model.dos.ComMngUserTagDO;
import com.panzhihua.service_user.model.dos.EventGridMemberBuildingRelationDO;
import com.panzhihua.service_user.model.dos.LcCompareCodeMemberDO;
import com.panzhihua.service_user.model.dos.SysMenuDO;
import com.panzhihua.service_user.model.dos.SysOperLogDO;
import com.panzhihua.service_user.model.dos.SysRoleDO;
import com.panzhihua.service_user.model.dos.SysRoleMenuDO;
import com.panzhihua.service_user.model.dos.SysUserAgreementDO;
import com.panzhihua.service_user.model.dos.SysUserDO;
import com.panzhihua.service_user.model.dos.SysUserFeedbackDO;
import com.panzhihua.service_user.model.dos.SysUserInputDO;
import com.panzhihua.service_user.model.dos.SysUserNoticeDO;
import com.panzhihua.service_user.model.dos.SysUserRoleDO;
import com.panzhihua.service_user.model.dtos.DataKanbanDTO;
import com.panzhihua.service_user.service.EventGridMemberBuildingRelationService;
import com.panzhihua.service_user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
// import com.panzhihua.common.service.grid.GridService;
/**
 * @program: springcloud_k8s_panzhihuazhihuishequ
@@ -88,20 +156,43 @@
    private EventGridMemberBuildingRelationService buildingRelationService;
    @Resource
    private EventGridMemberBuildingRelationMapper eventGridMemberBuildingRelationMapper;
//    @Resource
//    private GridService gridService;
    @Resource
    private LcCompareMemberCodeMapper lcCompareMemberCodeMapper;
    // @Resource
    // private GridService gridService;
    public static void main(String[] args) {
        // String encode = new BCryptPasswordEncoder().encode("lbsq123456");
        // System.out.println(encode);
        List<Date> dates = new ArrayList<>();
        Date date = new Date();
        for (int i = 6; i >= 0; i--) {
            Date date1 = DateUtils.addDays(date, -i);
            dates.add(date1);
        }
        System.out.println(dates);
        // BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        // boolean matches = encoder.matches("admin1234567", encode);
        // System.out.println(matches);
    }
    /**
     * 小程序微信用户信息更新
     *
     * @param openid     小程序唯一ID
     * @param sessionKey 会话密钥
     * @param unionid    用户在开放平台的唯一标识符
     * @param openid
     *            小程序唯一ID
     * @param sessionKey
     *            会话密钥
     * @param unionid
     *            用户在开放平台的唯一标识符
     * @return token
     */
    @Override
    public R updateInsertUser(String openid, String sessionKey, String unionid) {
        SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getOpenid, openid));
        SysUserDO sysUserDO =
            userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getOpenid, openid));
        boolean empty = ObjectUtils.isEmpty(sysUserDO);
        int num = 0;
        Date date = new Date();
@@ -135,10 +226,14 @@
    /**
     * 维护小程序用户基本信息 头像 昵称 性别
     *
     * @param userId    数据库用户ID
     * @param nickName  昵称
     * @param gender    性别
     * @param avatarUrl 头像
     * @param userId
     *            数据库用户ID
     * @param nickName
     *            昵称
     * @param gender
     *            性别
     * @param avatarUrl
     *            头像
     * @return 维护结果
     */
    @Override
@@ -159,8 +254,10 @@
    /**
     * 维护微信用户手机号
     *
     * @param userId          数据库ID
     * @param purePhoneNumber 没有区号的手机号
     * @param userId
     *            数据库ID
     * @param purePhoneNumber
     *            没有区号的手机号
     * @return 维护结果
     */
    @Override
@@ -172,7 +269,7 @@
        userDao.updateServiceTeam(purePhoneNumber, purePhoneNumber);
        int i = userDao.updateById(sysUserDO);
        if (i > 0) {
            return R.ok();
            return R.ok(purePhoneNumber);
        } else {
            return R.fail("维护微信手机号失败");
        }
@@ -181,18 +278,22 @@
    /**
     * 认证中心获取平台用户信息
     *
     * @param name 登录账户
     * @param type 用户类型 用户类型 1 小程序 2 运营平台 3 社区平台
     * @param name
     *            登录账户
     * @param type
     *            用户类型 用户类型 1 小程序 2 运营平台 3 社区平台
     * @return 用户基本信息、角色
     */
    @Override
    public R<LoginUserInfoVO> getUserInfo(String name, int type) {
        SysUserDO sysUserDO = null;
        if (1 == type) {
            sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getType, type).eq(SysUserDO::getOpenid, name));
            sysUserDO = userDao.selectOne(
                new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getType, type).eq(SysUserDO::getOpenid, name));
        } else {
            LambdaQueryWrapper<SysUserDO> wrapper = new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getType, type);
            wrapper.and(sysUserDOLambdaQueryWrapper -> sysUserDOLambdaQueryWrapper.eq(SysUserDO::getAccount, name).or().eq(SysUserDO::getPhone, name));
            wrapper.and(sysUserDOLambdaQueryWrapper -> sysUserDOLambdaQueryWrapper.eq(SysUserDO::getAccount, name).or()
                .eq(SysUserDO::getPhone, name));
            sysUserDO = userDao.selectOne(wrapper);
        }
        boolean empty = ObjectUtils.isEmpty(sysUserDO);
@@ -206,7 +307,10 @@
        loginUserInfoVO.setStatus(sysUserDO.getStatus());
        loginUserInfoVO.setAccount(name);
        loginUserInfoVO.setType(sysUserDO.getType());
        loginUserInfoVO.setIsRealNamed(sysUserDO.getIdCard()!=null);//暂时 身份证判断实名制
        loginUserInfoVO.setIsRealNamed(sysUserDO.getIdCard() != null);// 暂时 身份证判断实名制
        if(sysUserDO.getCommunityId()!=null){
            loginUserInfoVO.setCommunityId(sysUserDO.getCommunityId());
        }
        List<SysRoleDO> roleDOList = roleDAO.selectByUserId(sysUserDO.getUserId());
        Set<String> set = new HashSet<>();
        if (!ObjectUtils.isEmpty(roleDOList)) {
@@ -220,7 +324,8 @@
    /**
     * 三端获取用户信息
     *
     * @param userId 用户ID
     * @param userId
     *            用户ID
     * @return 用户基本信息、角色
     */
    @Override
@@ -241,12 +346,12 @@
            loginUserInfoVO.setRoles(set);
        }
        loginUserInfoVO.setIsmemberrole(2);
//        志愿者状态
        // 志愿者状态
        String phone = sysUserDO.getPhone();
        Long userCommunityId = sysUserDO.getCommunityId();
        if(userCommunityId!=null){
        if (userCommunityId != null) {
            ComActVO comActVO = userDao.selectCommunity(userCommunityId);
            if(comActVO!=null) {
            if (comActVO != null) {
                loginUserInfoVO.setCommunityName(comActVO.getName());
            }
        }
@@ -258,7 +363,7 @@
                int state = comMngVolunteerMngVO.getState().intValue();
                loginUserInfoVO.setVolunteerStatus(state);
            }
            //是否是"管理员"或者 本社区 "社区团队"、"党委成员"
            // 是否是"管理员"或者 本社区 "社区团队"、"党委成员"
            Integer countTeam = userDao.selectCountTeam(phone, userCommunityId);
            Integer selectCountMemberRole = userDao.selectCountMemberRole(phone, userCommunityId);
            Integer isSysUser = userDao.selectCountSysUser(phone, userCommunityId);
@@ -270,14 +375,15 @@
                loginUserInfoVO.setIsmemberrole(1);
            }
        }
        loginUserInfoVO.setIsRealNamed(sysUserDO.getIdCard()!=null);
        loginUserInfoVO.setIsRealNamed(sysUserDO.getIdCard() != null);
        return R.ok(loginUserInfoVO);
    }
    /**
     * 修改用户登录密码
     *
     * @param changePasswordVO 新密码
     * @param changePasswordVO
     *            新密码
     * @return 修改结果
     */
    @Override
@@ -309,15 +415,18 @@
    /**
     * 某社区后台人员查询
     *
     * @param param       名字
     * @param communityId 社区id
     * @param param
     *            名字
     * @param communityId
     *            社区id
     * @return 人员集合
     */
    @Override
    public R listActivityManager(String param, Long communityId) {
        LambdaQueryWrapper<SysUserDO> queryWrapper = new LambdaQueryWrapper<>();
        List<ActivityManagerVO> activityManagerVOS = new ArrayList<>();
        queryWrapper = new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getCommunityId, communityId).eq(SysUserDO::getStatus, 1).eq(SysUserDO::getType, 3);
        queryWrapper = new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getCommunityId, communityId)
            .eq(SysUserDO::getStatus, 1).eq(SysUserDO::getType, 3);
        if (!ObjectUtils.isEmpty(param)) {
            queryWrapper = queryWrapper.eq(SysUserDO::getName, param);
        }
@@ -334,9 +443,24 @@
    }
    /**
     * 微心愿搜索社区团队人员列表
     *
     * @param param
     *            请求参数
     * @param communityId
     *            社区id
     * @return 社区团队人员列表
     */
    @Override
    public R listActivityManager2(String param, Long communityId) {
        return R.ok(userDao.getServiceTeamList(param, communityId));
    }
    /**
     * 分页查询人脸识别
     *
     * @param loginUserInfoVO 查询参数
     * @param loginUserInfoVO
     *            查询参数
     * @return 分页集合
     */
    @Override
@@ -359,7 +483,8 @@
    /**
     * 编辑人脸采集数据通过、驳回、删除
     *
     * @param loginUserInfoVO 操作信息
     * @param loginUserInfoVO
     *            操作信息
     * @return 操作结果
     */
    @Override
@@ -382,7 +507,7 @@
        }
        int num = 0;
        if (operationType == 3) {
//            num=userDao.deleteById(userId);
            // num=userDao.deleteById(userId);
            num = userDao.updateFaceState(userId);
        } else {
            num = userDao.updateById(sysUserDO);
@@ -396,26 +521,48 @@
    /**
     * 分页查询人口管理
     *
     * @param loginUserInfoVO 查询参数
     * @param userInfoVO
     *            查询参数
     * @return 分页数据
     */
    @Override
    public R pageUser(LoginUserInfoVO loginUserInfoVO) {
        Page page = new Page<>();
        Long pageNum = loginUserInfoVO.getPageNum();
        Long pageSize = loginUserInfoVO.getPageSize();
        if (null == pageNum || 0 == pageNum) {
            pageNum = 1l;
        }
        if (null == pageSize || 0 == pageSize) {
            pageSize = 10l;
        }
        page.setSize(pageSize);
        page.setCurrent(pageNum);
        IPage<LoginUserInfoVO> iPage = userDao.pageUser(page, loginUserInfoVO);
    public R pageUser(AppletUserInfoVO userInfoVO) {
        IPage<AppletUserInfoVO> iPage =
            userDao.pageUser(new Page<>(userInfoVO.getPageNum(), userInfoVO.getPageSize()), userInfoVO);
        iPage.getRecords().forEach(record -> {
            record.setPhone(SensitiveUtil.desensitizedPhoneNumber(record.getPhone()));
//            record.setPhone(SensitiveUtil.desensitizedPhoneNumber(record.getPhone()));
            record.setIdCard(SensitiveUtil.desensitizedIdNumber(record.getIdCard()));
            if (StringUtils.isNotEmpty(record.getTags())) {
                StringBuffer sb = new StringBuffer();
                sb.append(record.getTags() + ",");
                if (record.getIsPartymember().equals(1)) {
                    if (!sb.toString().contains("党员")){
                        sb.append("党员,");
                    }
                }
                if (record.getIsVolunteer().equals(1)) {
                    if (!sb.toString().contains("志愿者")) {
                        sb.append("志愿者,");
                    }
                }
                String tags = sb.toString();
                record.setTags(tags.substring(0, tags.length() - 1));
            }else {
                StringBuffer sb = new StringBuffer();
                if (record.getIsPartymember().equals(1)) {
                    sb.append("党员,");
                }
                if (record.getIsVolunteer().equals(1)) {
                    sb.append("志愿者,");
                }
                String tags = sb.toString();
                if (tags.length() > 0) {
                    record.setTags(tags.substring(0, tags.length() - 1));
                } else {
                    record.setTags("无");
                }
            }
        });
        return R.ok(iPage);
    }
@@ -430,15 +577,17 @@
        List<String> list = new ArrayList<>();
        List<ComMngUserTagDO> comMngUserTagDOS = comMngUserTagDAO.selectList(new LambdaQueryWrapper<>());
        if (!ObjectUtils.isEmpty(comMngUserTagDOS)) {
            list = comMngUserTagDOS.stream().map(comMngUserTagDO -> comMngUserTagDO.getTagName()).collect(Collectors.toList());
            list = comMngUserTagDOS.stream().map(comMngUserTagDO -> comMngUserTagDO.getTagName())
                .collect(Collectors.toList());
        }
        return R.ok(list);
    }
    /**
     * 人员详情
     *detailuser
     * @param userId 用户id
     * 人员详情 detailuser
     *
     * @param userId
     *            用户id
     * @return 人员详情
     */
    @Override
@@ -450,7 +599,8 @@
                return R.fail("人员不存在");
            }
            BeanUtils.copyProperties(sysUserDO, loginUserInfoVO);
            List<ComMngFamilyInfoDO> comMngFamilyInfoDOS = comMngFamilyInfoDAO.selectList(new QueryWrapper<ComMngFamilyInfoDO>().lambda().eq(ComMngFamilyInfoDO::getUserId, userId));
            List<ComMngFamilyInfoDO> comMngFamilyInfoDOS = comMngFamilyInfoDAO
                .selectList(new QueryWrapper<ComMngFamilyInfoDO>().lambda().eq(ComMngFamilyInfoDO::getUserId, userId));
            if (!ObjectUtils.isEmpty(comMngFamilyInfoDOS)) {
                List<ComMngFamilyInfoVO> comMngFamilyInfoVOS = new ArrayList<>();
                comMngFamilyInfoDOS.forEach(comMngFamilyInfoDO -> {
@@ -462,7 +612,7 @@
            }
        } else {
            //导入社区人员
            // 导入社区人员
            SysUserInputDO sysUserInputDO = sysUserInputDAO.selectById(userId - 100000000);
            if (ObjectUtils.isEmpty(sysUserInputDO)) {
                return R.fail("人员不存在");
@@ -471,7 +621,8 @@
            BeanUtils.copyProperties(sysUserInputDO, loginUserInfoVO);
            String doorNumber = sysUserInputDO.getDoorNumber();
            Long areaId = sysUserInputDO.getAreaId();
            List<SysUserInputDO> sysUserInputDOS = sysUserInputDAO.selectList(new QueryWrapper<SysUserInputDO>().lambda().eq(SysUserInputDO::getDoorNumber, doorNumber).eq(SysUserInputDO::getAreaId, areaId));
            List<SysUserInputDO> sysUserInputDOS = sysUserInputDAO.selectList(new QueryWrapper<SysUserInputDO>()
                .lambda().eq(SysUserInputDO::getDoorNumber, doorNumber).eq(SysUserInputDO::getAreaId, areaId));
            if (!ObjectUtils.isEmpty(sysUserInputDOS)) {
                List<ComMngFamilyInfoVO> comMngFamilyInfoVOS = new ArrayList<>();
                sysUserInputDOS.forEach(sysUserInputDO1 -> {
@@ -508,15 +659,18 @@
    /**
     * 设置用户标签
     *
     * @param loginUserInfoVO 标签信息
     * @param loginUserInfoVO
     *            标签信息
     * @return 设置结果
     */
    @Override
    public R putUserTag(LoginUserInfoVO loginUserInfoVO) {
        SysUserDO sysUserDO = new SysUserDO();
        sysUserDO.setUserId(loginUserInfoVO.getUserId());
        sysUserDO.setTags(loginUserInfoVO.getTags());
        int update = userDao.updateById(sysUserDO);
        if (StringUtils.isNotEmpty(loginUserInfoVO.getTags()) && !"无".equals(loginUserInfoVO.getTags())) {
            sysUserDO.setTags(loginUserInfoVO.getTags());
        }
        int update = userDao.putUserTag(sysUserDO);
        if (update > 0) {
            return R.ok();
        }
@@ -526,7 +680,8 @@
    /**
     * 修改用户志愿者状态
     *
     * @param phone 志愿者手机号
     * @param phone
     *            志愿者手机号
     * @param type
     */
    @Override
@@ -534,21 +689,22 @@
        SysUserDO sysUserDO = new SysUserDO();
        sysUserDO.setIsVolunteer(type);
        //????根据手机号匹配
        // ????根据手机号匹配
        int update = userDao.update(sysUserDO, new UpdateWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, phone));
        if (update > 0) {
            ComMngVolunteerMngVO comMngVolunteerMngVO = userDao.selectVolunteerMngByPhone(phone);
            if(comMngVolunteerMngVO!=null&&comMngVolunteerMngVO.getSubmitUserId()!=null) {
            if (comMngVolunteerMngVO != null && comMngVolunteerMngVO.getSubmitUserId() != null) {
                Long userId = comMngVolunteerMngVO.getSubmitUserId();
                //删除用户信息缓存
                // 删除用户信息缓存
                String userKey = UserConstants.LOGIN_USER_INFO + userId;
                stringRedisTemplate.delete(userKey);
            }else{
                List<SysUserDO> userDOList =  userDao.selectList(new LambdaQueryWrapper<SysUserDO>().eq(SysUserDO::getPhone, phone));
                if(userDOList!=null && userDOList.size()>0){
                    userDOList.forEach(usrDo ->{
            } else {
                List<SysUserDO> userDOList =
                    userDao.selectList(new LambdaQueryWrapper<SysUserDO>().eq(SysUserDO::getPhone, phone));
                if (userDOList != null && userDOList.size() > 0) {
                    userDOList.forEach(usrDo -> {
                        Long userId = usrDo.getUserId();
                        //删除用户信息缓存
                        // 删除用户信息缓存
                        String userKey = UserConstants.LOGIN_USER_INFO + userId;
                        stringRedisTemplate.delete(userKey);
                    });
@@ -559,11 +715,11 @@
        return R.fail();
    }
    /**
     * 修改用户志愿者状态
     *
     * @param userId 志愿者用户ID
     * @param userId
     *            志愿者用户ID
     * @param type
     */
    @Override
@@ -583,7 +739,7 @@
            }
            int update = userDao.updateById(sysUserDO);
            if (update > 0) {
                //删除用户信息缓存
                // 删除用户信息缓存
                String userKey = UserConstants.LOGIN_USER_INFO + userId;
                stringRedisTemplate.delete(userKey);
                return R.ok();
@@ -595,21 +751,23 @@
    /**
     * 用户绑定社区、小区
     *
     * @param loginUserInfoVO 社区小区数据
     * @param loginUserInfoVO
     *            社区小区数据
     * @return 绑定结果
     */
    @Override
    public R putUserCommunityArea(LoginUserInfoVO loginUserInfoVO) {
        SysUserDO sysUserDO = new SysUserDO();
        sysUserDO.setCommunityId(loginUserInfoVO.getCommunityId());
//        sysUserDO.setAreaId(loginUserInfoVO.getAreaId());
        // sysUserDO.setAreaId(loginUserInfoVO.getAreaId());
        sysUserDO.setUserId(loginUserInfoVO.getUserId());
        int update = userDao.updateById(sysUserDO);
        if (update > 0) {
            //删除用户信息缓存
            // 删除用户信息缓存
            String userKey = UserConstants.LOGIN_USER_INFO + loginUserInfoVO.getUserId();
            stringRedisTemplate.delete(userKey);
            return R.ok();
            return R.ok(sysUserDO);
        }
        return R.fail();
    }
@@ -617,49 +775,70 @@
    /**
     * 用户实名认证
     *
     * @param loginUserInfoVO 认证数据
     * @param loginUserInfoVO
     *            认证数据
     * @return 认证结果
     */
    @Override
    public R putUserAuthentication(LoginUserInfoVO loginUserInfoVO) {
        //接入第三方实名认证
        // 接入第三方实名认证
        String idCard = loginUserInfoVO.getIdCard();
        String name = loginUserInfoVO.getName();
        log.info("用户实名认证发送请求,姓名:" + name + "身份证号码:" + idCard);
        try {
            boolean b = RealNameUtil.authentication(idCard, name);
            if (!b) {
                return R.fail("身份认证失败:请填写真实信息");
            }
        }catch (ServiceException serviceException){
            return R.fail(serviceException.getMessage());
        }
        // try {
        // boolean b = RealNameUtil.authentication(idCard, name);
        // if (!b) {
        // return R.fail("身份认证失败:请填写真实信息");
        // }
        // }catch (ServiceException serviceException){
        // return R.fail(serviceException.getMessage());
        // }
        SysUserDO sysUserDO = new SysUserDO();
        sysUserDO.setName(name);
        sysUserDO.setIdCard(idCard);
        //通过身份证号判断性别以及出生日期
        // 通过身份证号判断性别以及出生日期
        sysUserDO.setSex(IdCard.sex(idCard));
        sysUserDO.setBirthday(IdCard.birthDay(idCard));
        sysUserDO.setJob(loginUserInfoVO.getJob());
        if (!StringUtils.isEmpty(loginUserInfoVO.getJob())) {
            sysUserDO.setJob(loginUserInfoVO.getJob());
        }
        sysUserDO.setUserId(loginUserInfoVO.getUserId());
        sysUserDO.setFaceUrl(loginUserInfoVO.getFaceUrl());
        if (!StringUtils.isEmpty(loginUserInfoVO.getPhone())) {
            sysUserDO.setPhone(loginUserInfoVO.getPhone());
        }
        sysUserDO.setFaceState(null);
        SysUserDO sysUserDO1 = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getIdCard, idCard));
        SysUserDO sysUserDO1 =
            userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getIdCard, idCard));
        if (!ObjectUtils.isEmpty(sysUserDO1)) {
            return R.fail("身份证已经存在");
        }
        int update = userDao.updateById(sysUserDO);
        if (update > 0) {
            //清空缓存
            // 清空缓存
            String userKey = UserConstants.LOGIN_USER_INFO + loginUserInfoVO.getUserId();
            stringRedisTemplate.delete(userKey);
            //实名认证成功查询是否有已审核的党员信息,有则更新党员信息绑定党员的userId
            // 实名认证成功查询是否有已审核的党员信息,有则更新党员信息绑定党员的userId
            Long memberId = userDao.getPartyBuildingByIdCard(idCard);
            if(memberId != null){
            if (memberId != null) {
                sysUserDO.setIsPartymember(1);
                userDao.updateById(sysUserDO);
                //修改审核绑定的userId
                userDao.updateComPbMemberUserId(idCard,sysUserDO.getUserId());
                // 修改审核绑定的userId
                userDao.updateComPbMemberUserId(idCard, sysUserDO.getUserId());
            }
            SysUserDO user = userDao.selectById(loginUserInfoVO.getUserId());
            if (user != null) {
                // 实名认证成功推送订阅消息给用户
                try {
                    WxXCXTempSend util = new WxXCXTempSend();
                    String accessToken = util.getAppAccessToken();
                    // 用户实名认证推送消息
                    WxUtil.sendSubscribeRZSH(user.getOpenid(), accessToken, "实名认证",
                        com.panzhihua.common.utlis.DateUtils.getCurrentDateStr(), "认证成功");
                } catch (Exception e) {
                    log.error("推送用户订阅消息失败,失败原因:" + e.getMessage());
                }
            }
            return R.ok();
        }
@@ -669,7 +848,8 @@
    /**
     * 修改用户手机号
     *
     * @param userPhoneVO 手机号信息
     * @param userPhoneVO
     *            手机号信息
     * @return 修改结果
     */
    @Override
@@ -713,7 +893,8 @@
    /**
     * 修改用户信息
     *
     * @param loginUserInfoVO 修改内容
     * @param loginUserInfoVO
     *            修改内容
     * @return 修改结果
     */
    @Override
@@ -766,14 +947,16 @@
    /**
     * 家庭成员列表
     *
     * @param userId 登录用户
     * @param userId
     *            登录用户
     * @return 成员集合
     */
    @Override
    public R listFamily(Long userId,Long pageNum, Long pageSize) {
    public R listFamily(Long userId, Long pageNum, Long pageSize) {
        List<ComMngFamilyInfoVO> comMngFamilyInfoVOS = new ArrayList<>();
        LambdaQueryWrapper<ComMngFamilyInfoDO> query = new QueryWrapper<ComMngFamilyInfoDO>().lambda().eq(ComMngFamilyInfoDO::getUserId, userId).orderByDesc(ComMngFamilyInfoDO::getCreateAt);
        IPage<ComMngFamilyInfoDO> pageData = comMngFamilyInfoDAO.selectPage(new Page<>(pageNum,pageSize), query);
        LambdaQueryWrapper<ComMngFamilyInfoDO> query = new QueryWrapper<ComMngFamilyInfoDO>().lambda()
            .eq(ComMngFamilyInfoDO::getUserId, userId).orderByDesc(ComMngFamilyInfoDO::getCreateAt);
        IPage<ComMngFamilyInfoDO> pageData = comMngFamilyInfoDAO.selectPage(new Page<>(pageNum, pageSize), query);
        if (!ObjectUtils.isEmpty(pageData.getRecords())) {
            pageData.getRecords().forEach(comMngFamilyInfoDO -> {
                ComMngFamilyInfoVO comMngFamilyInfoVO = new ComMngFamilyInfoVO();
@@ -787,14 +970,17 @@
    /**
     * 新增家庭成员
     *
     * @param comMngFamilyInfoVO 家庭成员基本信息
     * @param comMngFamilyInfoVO
     *            家庭成员基本信息
     * @return 增加结果
     */
    @Override
    public R addFamily(ComMngFamilyInfoVO comMngFamilyInfoVO) {
        ComMngFamilyInfoDO comMngFamilyInfoDO = new ComMngFamilyInfoDO();
        BeanUtils.copyProperties(comMngFamilyInfoVO, comMngFamilyInfoDO);
        ComMngFamilyInfoDO comMngFamilyInfoDO1 = comMngFamilyInfoDAO.selectOne(new QueryWrapper<ComMngFamilyInfoDO>().lambda().eq(ComMngFamilyInfoDO::getIdCard, comMngFamilyInfoVO.getIdCard()).eq(ComMngFamilyInfoDO::getUserId, comMngFamilyInfoVO.getUserId()));
        ComMngFamilyInfoDO comMngFamilyInfoDO1 = comMngFamilyInfoDAO.selectOne(new QueryWrapper<ComMngFamilyInfoDO>()
            .lambda().eq(ComMngFamilyInfoDO::getIdCard, comMngFamilyInfoVO.getIdCard())
            .eq(ComMngFamilyInfoDO::getUserId, comMngFamilyInfoVO.getUserId()));
        if (!ObjectUtils.isEmpty(comMngFamilyInfoDO1)) {
            return R.fail("家庭成员已经存在");
        }
@@ -809,7 +995,8 @@
    /**
     * 编辑家庭成员
     *
     * @param comMngFamilyInfoVO 家庭成员信息
     * @param comMngFamilyInfoVO
     *            家庭成员信息
     * @return 编辑结果
     */
    @Override
@@ -827,7 +1014,8 @@
    /**
     * 新增运营、社区后台账户
     *
     * @param administratorsUserVO 账户信息
     * @param administratorsUserVO
     *            账户信息
     * @return 新增结果
     */
    @Override
@@ -837,7 +1025,7 @@
        Long roleId = administratorsUserVO.getRoleId();
        if (roleId.intValue() == 999999999 || roleId.intValue() == 888888888) {
            Long communityId = administratorsUserVO.getCommunityId();
            //新增社区高级管理员角色
            // 新增社区高级管理员角色
            SysRoleDO sysRoleDO = new SysRoleDO();
            if (roleId.intValue() == 999999999) {
                sysRoleDO.setCommunityId(communityId);
@@ -852,9 +1040,10 @@
            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()));
                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);
@@ -883,15 +1072,15 @@
        }
        if(insert>0 && sysUserDO.getType()==3){//添加的用户是社区账号时
            //添加网格综合治理管理后台用户
        if (insert > 0 && sysUserDO.getType() == 3) {// 添加的用户是社区账号时
            // 添加网格综合治理管理后台用户
            SysUserDO sysUserDOWangGe = new SysUserDO();
            BeanUtils.copyProperties(sysUserDO, sysUserDOWangGe);
            sysUserDOWangGe.setUserId(null);
            sysUserDOWangGe.setType(7);//网格综治后台
            sysUserDOWangGe.setType(7);// 网格综治后台
            try {
                int addWange = userDao.insert(sysUserDOWangGe);
                if(addWange!=1){
                if (addWange != 1) {
                    throw new ServiceException("新增网格综合治理管理后台用户失败");
                }
            } catch (Exception e) {
@@ -906,14 +1095,56 @@
            }
        }
        if (insert > 0) {
            SysUserDO sysUserDO1 = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getType, administratorsUserVO.getType()).eq(SysUserDO::getAccount, administratorsUserVO.getAccount()));
            SysUserDO sysUserDO1 = userDao
                .selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getType, administratorsUserVO.getType())
                    .eq(SysUserDO::getAccount, administratorsUserVO.getAccount()));
            Long userId = sysUserDO1.getUserId();
            SysUserRoleDO sysUserRoleDO = new SysUserRoleDO();
            sysUserRoleDO.setUserId(userId);
            sysUserRoleDO.setRoleId(roleDO.getRoleId());
            int insert1 = sysUserRoleDAO.insert(sysUserRoleDO);
            if (insert1 > 0) {
                return R.ok();
                return R.ok(userId);
            }
        }
        return R.fail();
    }
    @Override
    public R addUserBackstageProperty(AdministratorsUserVO administratorsUserVO) {
        SysUserDO sysUserDO = new SysUserDO();
        Long roleId = administratorsUserVO.getRoleId();
        SysRoleDO roleDO = roleDAO.selectById(roleId);
        if (ObjectUtils.isEmpty(roleDO)) {
            return R.fail("角色不存在");
        }
        String encode = new BCryptPasswordEncoder().encode(administratorsUserVO.getPassword());
        administratorsUserVO.setPassword(encode);
        BeanUtils.copyProperties(administratorsUserVO, sysUserDO);
        int insert = 0;
        try {
            insert = userDao.insert(sysUserDO);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("新增后台用户报错【{}】", e.getMessage());
            if (e.getMessage().contains("union_phone_type")) {
                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::getAccount, administratorsUserVO.getAccount()));
            Long userId = sysUserDO1.getUserId();
            SysUserRoleDO sysUserRoleDO = new SysUserRoleDO();
            sysUserRoleDO.setUserId(userId);
            sysUserRoleDO.setRoleId(roleDO.getRoleId());
            int insert1 = sysUserRoleDAO.insert(sysUserRoleDO);
            if (insert1 > 0) {
                return R.ok(userId);
            }
        }
        return R.fail();
@@ -922,7 +1153,8 @@
    /**
     * 设置角色的权限
     *
     * @param menuRoleVO 用户设置的权限id
     * @param menuRoleVO
     *            用户设置的权限id
     * @return 设置结果
     */
    @Transactional(rollbackFor = Exception.class)
@@ -931,42 +1163,48 @@
        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);
//                        });
//                    }
//                });
//            }
//        }
        // 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);
        // });
        // }
        // });
        // }
        // }
//        菜单写死不重新生成菜单 todo 所有注释上面自动生成新菜单功能
        // 菜单写死不重新生成菜单 todo 所有注释上面自动生成新菜单功能
//        获取所有权限id
        List<SysMenuDO> menuDOList = sysMenuDAO.selectList(new QueryWrapper<SysMenuDO>().lambda().eq(SysMenuDO::getCommunityId, 2l).orderByAsc(SysMenuDO::getOrderNum));
        if(!menuDOList.isEmpty()){
        // 获取所有权限id
        List<SysMenuDO> menuDOList = sysMenuDAO.selectList(new QueryWrapper<SysMenuDO>().lambda()
            .eq(SysMenuDO::getCommunityId, 2l).orderByAsc(SysMenuDO::getOrderNum));
        if (!menuDOList.isEmpty()) {
            menuIds = menuDOList.stream().map(sysMenuDO -> sysMenuDO.getMenuId()).collect(Collectors.toList());
            for (int i = 0; i < menuIds.size(); i++) {
                SysRoleMenuDO sysRoleMenuDO = sysRoleMenuDAO.selectOne(new QueryWrapper<SysRoleMenuDO>().lambda().eq(SysRoleMenuDO::getMenuId,menuIds.get(i))
                        .eq(SysRoleMenuDO::getRoleId,roleId));
                if(sysRoleMenuDO == null){
                SysRoleMenuDO sysRoleMenuDO = sysRoleMenuDAO.selectOne(new QueryWrapper<SysRoleMenuDO>().lambda()
                    .eq(SysRoleMenuDO::getMenuId, menuIds.get(i)).eq(SysRoleMenuDO::getRoleId, roleId));
                if (sysRoleMenuDO == null) {
                    sysRoleMenuDO = new SysRoleMenuDO();
                    sysRoleMenuDO.setMenuId(menuIds.get(i));
                    sysRoleMenuDO.setRoleId(roleId);
@@ -980,7 +1218,8 @@
    /**
     * 编辑运营、社区后台账户
     *
     * @param administratorsUserVO 编辑账户内容
     * @param administratorsUserVO
     *            编辑账户内容
     * @return 编辑结果
     */
    @Override
@@ -1013,7 +1252,8 @@
        if (update > 0 && null != roleDO) {
            SysUserRoleDO sysUserRoleDO = new SysUserRoleDO();
            sysUserRoleDO.setRoleId(roleDO.getRoleId());
            int update1 = sysUserRoleDAO.update(sysUserRoleDO, new UpdateWrapper<SysUserRoleDO>().lambda().eq(SysUserRoleDO::getUserId, administratorsUserVO.getUserId()));
            int update1 = sysUserRoleDAO.update(sysUserRoleDO, new UpdateWrapper<SysUserRoleDO>().lambda()
                .eq(SysUserRoleDO::getUserId, administratorsUserVO.getUserId()));
            if (update1 > 0) {
                return R.ok();
            } else {
@@ -1027,7 +1267,8 @@
    /**
     * 删除后台用户
     *
     * @param administratorsUserVO 用户主键
     * @param administratorsUserVO
     *            用户主键
     * @return 删除结果
     */
    @Override
@@ -1043,11 +1284,12 @@
        if (communityId1.intValue() != communityId.intValue()) {
            return R.fail("用户不属于当前平台");
        }
        //删除用户
        // 删除用户
        int delete = userDao.deleteById(userId);
        //删除用户角色关系
        // 删除用户角色关系
        if (delete > 0) {
            int delete1 = sysUserRoleDAO.delete(new QueryWrapper<SysUserRoleDO>().lambda().eq(SysUserRoleDO::getUserId, userId));
            int delete1 =
                sysUserRoleDAO.delete(new QueryWrapper<SysUserRoleDO>().lambda().eq(SysUserRoleDO::getUserId, userId));
            if (delete1 == 0) {
                return R.fail("用户没有角色关系");
            }
@@ -1058,7 +1300,8 @@
    /**
     * 分页查询后台用户
     *
     * @param administratorsUserVO 查询参数
     * @param administratorsUserVO
     *            查询参数
     * @return 后台用户
     */
    @Override
@@ -1081,7 +1324,8 @@
    /**
     * 保存操作日志
     *
     * @param operlog 日志内容
     * @param operlog
     *            日志内容
     * @return 保存结果
     */
    @Override
@@ -1098,7 +1342,8 @@
    /**
     * 分页展示操作日志
     *
     * @param sysOperLogVO 分页参数
     * @param sysOperLogVO
     *            分页参数
     * @return 分页集合
     */
    @Override
@@ -1125,8 +1370,8 @@
     */
    @Override
    public R listAgreement(Long communityId) {
        List<SysUserAgreementDO> sysUserAgreementDOS = sysUserAgreementDAO.selectList(new LambdaQueryWrapper<SysUserAgreementDO>()
                .eq(SysUserAgreementDO::getCommunityId,communityId));
        List<SysUserAgreementDO> sysUserAgreementDOS = sysUserAgreementDAO.selectList(
            new LambdaQueryWrapper<SysUserAgreementDO>().eq(SysUserAgreementDO::getCommunityId, communityId));
        if (ObjectUtils.isEmpty(sysUserAgreementDOS)) {
            return R.fail();
        }
@@ -1142,7 +1387,8 @@
    /**
     * 编辑用户协议
     *
     * @param sysUserAgreementVO 编辑内容
     * @param sysUserAgreementVO
     *            编辑内容
     * @return 编辑结果
     */
    @Override
@@ -1159,12 +1405,14 @@
    /**
     * 用户标签
     *
     * @param communityId 社区id
     * @param communityId
     *            社区id
     * @return 标签集合
     */
    @Override
    public R listComMngUserTag(Long communityId) {
        List<ComMngUserTagDO> comMngUserTagDOS = comMngUserTagDAO.selectList(new QueryWrapper<ComMngUserTagDO>().or().lambda().eq(ComMngUserTagDO::getSysFlag,1).or().eq(ComMngUserTagDO::getCommunityId, communityId));
        List<ComMngUserTagDO> comMngUserTagDOS = comMngUserTagDAO.selectList(new QueryWrapper<ComMngUserTagDO>().or()
            .lambda().eq(ComMngUserTagDO::getSysFlag, 1).or().eq(ComMngUserTagDO::getCommunityId, communityId));
        if (ObjectUtils.isEmpty(comMngUserTagDOS)) {
            return R.fail();
        }
@@ -1180,7 +1428,8 @@
    /**
     * 新增删除用户标签
     *
     * @param systemmanagementConfigVO 操作内容
     * @param systemmanagementConfigVO
     *            操作内容
     * @return 操作结果
     */
    @Override
@@ -1189,7 +1438,7 @@
        Long communityId = systemmanagementConfigVO.getCommunityId();
        List<ComMngUserTagVO> comMngUserTagVOList = systemmanagementConfigVO.getComMngUserTagVOList();
        if (!ObjectUtils.isEmpty(comMngUserTagVOList)) {
            comMngUserTagDAO.delete(null);
            comMngUserTagDAO.delete(new QueryWrapper<ComMngUserTagDO>().lambda().eq(ComMngUserTagDO::getCommunityId,communityId));
            comMngUserTagVOList.forEach(comMngUserTagVO -> {
                ComMngUserTagDO comMngUserTagDO = new ComMngUserTagDO();
                comMngUserTagDO.setCommunityId(communityId);
@@ -1206,7 +1455,8 @@
    /**
     * 分页查询小程序用户
     *
     * @param pageUserAppletsBackstageDTO 查询参数
     * @param pageUserAppletsBackstageDTO
     *            查询参数
     * @return 分页集合
     */
    @Override
@@ -1223,7 +1473,8 @@
    /**
     * 编辑用户状态
     *
     * @param pageUserAppletsBackstageDTO 启用或者禁用 1 启用 2 禁用
     * @param pageUserAppletsBackstageDTO
     *            启用或者禁用 1 启用 2 禁用
     * @return 编辑结果
     */
    @Override
@@ -1243,7 +1494,8 @@
    /**
     * 调试接口--清除昵称、社区、小区
     *
     * @param userId 登录用户id
     * @param userId
     *            登录用户id
     * @return 清除结果
     */
    @Override
@@ -1258,19 +1510,22 @@
    /**
     * 用户协议和隐私政策
     *
     * @param type 所属app 1居民端app 2网格员端app 3商家端app
     * @param type
     *            所属app 1居民端app 2网格员端app 3商家端app
     * @return 协议内容
     */
    @Override
    public R userAgreement(int type) {
        SysUserAgreementDO sysUserAgreementDO = sysUserAgreementDAO.selectOne(new QueryWrapper<SysUserAgreementDO>().lambda().eq(SysUserAgreementDO::getType, type));
        SysUserAgreementDO sysUserAgreementDO = sysUserAgreementDAO
            .selectOne(new QueryWrapper<SysUserAgreementDO>().lambda().eq(SysUserAgreementDO::getType, type));
        return R.ok(sysUserAgreementDO);
    }
    /**
     * 意见反馈
     *
     * @param sysUserFeedbackDTO 反馈内容
     * @param sysUserFeedbackDTO
     *            反馈内容
     * @return 反馈结果
     */
    @Override
@@ -1288,7 +1543,8 @@
    /**
     * 分页通知列表
     *
     * @param pageDTO 分页参数
     * @param pageDTO
     *            分页参数
     * @return 分页结果
     */
    @Override
@@ -1297,9 +1553,12 @@
        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));
            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));
            integer = sysUserNoticeDAO.selectCount(new QueryWrapper<SysUserNoticeDO>().lambda()
                .eq(SysUserNoticeDO::getUserId, userId).eq(SysUserNoticeDO::getStatus, 0));
        }
        Page page = new Page<>();
        Long pageNum = pageDTO.getPageNum();
@@ -1316,7 +1575,8 @@
    /**
     * 通知已读
     *
     * @param noticeReadDTO 通知已读
     * @param noticeReadDTO
     *            通知已读
     * @return 修改状态
     */
    @Override
@@ -1327,7 +1587,8 @@
        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));
            num = sysUserNoticeDAO.update(sysUserNoticeDO, new UpdateWrapper<SysUserNoticeDO>().lambda()
                .eq(SysUserNoticeDO::getUserId, userId).eq(SysUserNoticeDO::getStatus, 0));
        } else {
            sysUserNoticeDO.setId(noticeReadDTO.getId());
            sysUserNoticeDO.setStatus(1);
@@ -1342,7 +1603,8 @@
    /**
     * 分页查询用户意见反馈
     *
     * @param pageFeedBackDTO 分页查询参数
     * @param pageFeedBackDTO
     *            分页查询参数
     * @return 意见集合
     */
    @Override
@@ -1359,14 +1621,16 @@
    /**
     * 未读消息汇总
     *
     * @param userId 登录用户信息
     * @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));
        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 -> {
@@ -1386,7 +1650,8 @@
    /**
     * 反馈意见详情
     *
     * @param id 反馈主键
     * @param id
     *            反馈主键
     * @return 反馈详情
     */
    @Override
@@ -1415,10 +1680,10 @@
                communityUserY.add(dataKanbanDTO.getNum());
            });
        }
//        获取最近七天数据
        // 获取最近七天数据
        List<Date> serverndays = this.getServenDays();
        serverndays.forEach(date -> {
            //        查询社区活动数量
            // 查询社区活动数量
            DataKanbanDTO dataKanbanDTO = userDao.selectCommunityActiveUserOrder(date);
            communityActiveUserX.add(DateFormatUtils.format(date, "MM-dd"));
            communityActiveUserY.add(dataKanbanDTO.getNum());
@@ -1448,13 +1713,14 @@
    /**
     * 社区管理后台数据看板
     *
     * @param communityId 社区id
     * @param communityId
     *            社区id
     * @return 看板用户数据
     */
    @Override
    public R indexDataCommunityBackstage(Long communityId) {
        IndexDataVO indexDataVO = userDao.indexDataCommunityBackstage(communityId);
        //查询后台党员数量
        // 查询后台党员数量
        return R.ok(indexDataVO);
    }
@@ -1475,7 +1741,8 @@
    /**
     * 新增用户通知
     *
     * @param sysUserNoticeVO 通知内容
     * @param sysUserNoticeVO
     *            通知内容
     * @return 新增结果
     */
    @Override
@@ -1492,17 +1759,19 @@
    /**
     * 修改用户的党员状态
     *
     * @param idCard 身份证号
     * @param idCard
     *            身份证号
     * @return 修改结果
     */
    @Override
    public R updateUserIsPartymember(String idCard) {
        SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getIdCard,idCard).eq(SysUserDO::getType,1));
        if(sysUserDO != null){
        SysUserDO sysUserDO = userDao.selectOne(
            new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getIdCard, idCard).eq(SysUserDO::getType, 1));
        if (sysUserDO != null) {
            sysUserDO.setIsPartymember(1);
            int updated = userDao.updateById(sysUserDO);
            if(updated>0){
                //删除用户信息缓存
            if (updated > 0) {
                // 删除用户信息缓存
                String userKey = UserConstants.LOGIN_USER_INFO + sysUserDO.getUserId();
                stringRedisTemplate.delete(userKey);
            }
@@ -1514,17 +1783,19 @@
    /**
     * 修改用户的党员状态
     *
     * @param idCard 身份证号
     * @param idCard
     *            身份证号
     * @return 修改结果
     */
    @Override
    public R updateUserNotPartymember(String idCard) {
        SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getIdCard,idCard).eq(SysUserDO::getType,1));
        if(sysUserDO != null){
        SysUserDO sysUserDO = userDao.selectOne(
            new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getIdCard, idCard).eq(SysUserDO::getType, 1));
        if (sysUserDO != null) {
            sysUserDO.setIsPartymember(0);
            int updated = userDao.updateById(sysUserDO);
            if(updated>0) {
                //删除用户信息缓存
            if (updated > 0) {
                // 删除用户信息缓存
                String userKey = UserConstants.LOGIN_USER_INFO + sysUserDO.getUserId();
                stringRedisTemplate.delete(userKey);
            }
@@ -1533,16 +1804,17 @@
        return R.ok();
    }
    /**
     * 获取各种协议
     *
     * @param type 1居民端app协议 2网格员端app协议 3商家端app协议 4隐私政策
     * @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));
        SysUserAgreementDO sysUserAgreementDO = sysUserAgreementDAO
            .selectOne(new QueryWrapper<SysUserAgreementDO>().lambda().eq(SysUserAgreementDO::getType, type));
        if (ObjectUtils.isEmpty(sysUserAgreementDO)) {
            return R.fail("协议不存在");
        }
@@ -1554,7 +1826,8 @@
    /**
     * 维护用户最后登录时间
     *
     * @param userId 用户主键
     * @param userId
     *            用户主键
     * @return 维护结果
     */
    @Override
@@ -1572,7 +1845,8 @@
    /**
     * 删除意见反馈
     *
     * @param id 主键
     * @param id
     *            主键
     * @return 删除结果
     */
    @Override
@@ -1587,7 +1861,8 @@
    /**
     * 校验小区是否存在
     *
     * @param areaName 小区名字
     * @param areaName
     *            小区名字
     * @return 校验结果
     */
    @Override
@@ -1608,7 +1883,8 @@
    /**
     * 社区人员详情包括导入人员
     *
     * @param userId 人员id
     * @param userId
     *            人员id
     * @return CommunityUserInfoVO
     */
    @Override
@@ -1643,7 +1919,8 @@
                communityUserInfoVO.setPoliticalOutlook(3);
            }
            communityUserInfoVO.setIsVolunteer(sysUserDO.getIsVolunteer());
            List<ComMngFamilyInfoDO> comMngFamilyInfoDOS = comMngFamilyInfoDAO.selectList(new QueryWrapper<ComMngFamilyInfoDO>().lambda().eq(ComMngFamilyInfoDO::getUserId, userId));
            List<ComMngFamilyInfoDO> comMngFamilyInfoDOS = comMngFamilyInfoDAO
                .selectList(new QueryWrapper<ComMngFamilyInfoDO>().lambda().eq(ComMngFamilyInfoDO::getUserId, userId));
            if (!ObjectUtils.isEmpty(comMngFamilyInfoDOS)) {
                List<ComMngFamilyInfoVO> comMngFamilyInfoVOS = new ArrayList<>();
                comMngFamilyInfoDOS.forEach(comMngFamilyInfoDO -> {
@@ -1660,7 +1937,8 @@
    /**
     * 用户搜索了就下载搜索的用户否则下载所有用户
     *
     * @param exportUserDTO 用户搜索内容
     * @param exportUserDTO
     *            用户搜索内容
     * @return List<EexcelUserDTO> excel内容
     */
    @Override
@@ -1671,7 +1949,8 @@
    @Override
    public R getSysUserVOByPhone(String phone) {
        SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, phone).eq(SysUserDO::getType,1));
        SysUserDO sysUserDO = userDao
            .selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, phone).eq(SysUserDO::getType, 1));
        if (ObjectUtils.isEmpty(sysUserDO)) {
            return R.fail("用户不存在");
        }
@@ -1680,34 +1959,24 @@
        return R.ok(sysUserVO);
    }
    public static void main(String[] args) {
//        String encode = new BCryptPasswordEncoder().encode("lbsq123456");
//        System.out.println(encode);
        List<Date> dates = new ArrayList<>();
        Date date = new Date();
        for (int i = 6; i >= 0; i--) {
            Date date1 = DateUtils.addDays(date, -i);
            dates.add(date1);
        }
        System.out.println(dates);
//        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
//        boolean matches = encoder.matches("admin1234567", encode);
//        System.out.println(matches);
    }
    /**
     * 查询当前社区所有标签以及预设标签
     *
     * @return 标签集合
     */
    @Override
    public R listTags(Long communityId) {
    public R listTags() {
        List<String> list = new ArrayList<>();
        List<ComMngUserTagDO> comMngUserTagDOS = comMngUserTagDAO.selectList(new QueryWrapper<ComMngUserTagDO>().eq("sys_flag", 1).or().eq("community_id", communityId));
        List<ComMngUserTagDO> comMngUserTagDOS = comMngUserTagDAO
            .selectList(null);
        if (!ObjectUtils.isEmpty(comMngUserTagDOS)) {
            list = comMngUserTagDOS.stream().map(comMngUserTagDO -> comMngUserTagDO.getTagName()).collect(Collectors.toList());
            for (ComMngUserTagDO comMngUserTagDO : comMngUserTagDOS) {
                if (!list.contains(comMngUserTagDO.getTagName())) {
                    list.add(comMngUserTagDO.getTagName());
                }
            }
//            list = comMngUserTagDOS.stream().map(comMngUserTagDO -> comMngUserTagDO.getTagName())
//                .collect(Collectors.toList());
        }
        return R.ok(list);
    }
@@ -1728,7 +1997,8 @@
    /**
     * 新增SysUser
     *
     * @param storeVO 请求参数
     * @param storeVO
     *            请求参数
     * @return 新增结果
     */
    @Override
@@ -1736,7 +2006,7 @@
        SysUserDO sysUserDO = new SysUserDO();
        Long communityId = 0L;
        //新增社区高级管理员角色
        // 新增社区高级管理员角色
        SysRoleDO sysRoleDO = new SysRoleDO();
        sysRoleDO.setCommunityId(0L);
        sysRoleDO.setRoleName(storeVO.getName());
@@ -1747,14 +2017,14 @@
        if (insert < 0) {
            return R.fail();
        }
        //新角色设置所有权限
        // 新角色设置所有权限
        MenuRoleVO menuRoleVO = new MenuRoleVO();
        menuRoleVO.setIsAll(1);
        menuRoleVO.setCommunityId(communityId);
        menuRoleVO.setRoleId(sysRoleDO.getRoleId());
        this.putMenuRole(menuRoleVO);
        //sys_user 表
        // sys_user 表
        String encode = new BCryptPasswordEncoder().encode(storeVO.getStorePassword());
        BeanUtils.copyProperties(storeVO, sysUserDO);
        sysUserDO.setAccount(storeVO.getStoreAccount());
@@ -1766,7 +2036,7 @@
        sysUserDO.setPassword(encode);
        try {
            insert = userDao.insert(sysUserDO);
            //把SysUserId赋值给店铺
            // 把SysUserId赋值给店铺
            if (sysUserDO.getUserId() != null) {
                userDao.updateStoreByPhone(storeVO.getPhone(), sysUserDO.getUserId());
            }
@@ -1787,13 +2057,14 @@
    /**
     * 修改SysUser用户信息
     *
     * @param storeVO 请求参数
     * @param storeVO
     *            请求参数
     * @return 修改结果
     */
    @Override
    public R editSysUser(ShopStoreVO storeVO) {
        SysUserDO sysUserDO1 = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, storeVO.getPhone())
                .eq(SysUserDO::getType, 5));
        SysUserDO sysUserDO1 = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda()
            .eq(SysUserDO::getPhone, storeVO.getPhone()).eq(SysUserDO::getType, 5));
        if (sysUserDO1 == null) {
            return R.fail("未查询到后台管理用户!");
        }
@@ -1808,16 +2079,17 @@
    /**
     * 修改用户小程序首页活动提示
     *
     * @param userEditTipsDTO 请求参数
     * @param userEditTipsDTO
     *            请求参数
     * @return 修改结果
     */
    public R editUserTips(SysUserEditTipsDTO userEditTipsDTO) {
        //查询用户信息
        // 查询用户信息
        SysUserDO userDO = userDao.selectById(userEditTipsDTO.getUserId());
        if (userDO == null) {
            return R.fail("未查询到用户信息");
        }
        //修改用户信息
        // 修改用户信息
        userDO.setIsTips(userEditTipsDTO.getIsTips());
        userDao.updateById(userDO);
        if (userDao.updateById(userDO) > 0) {
@@ -1829,7 +2101,7 @@
    @Override
    public R getUserArchives(Long userId) {
        //查询用户信息
        // 查询用户信息
        SysUserDO userDO = userDao.selectById(userId);
        if (userDO == null) {
            return R.fail("未查询到用户信息");
@@ -1842,7 +2114,7 @@
    @Override
    public R updateUserArchives(UpdateUserArchivesVO userArchivesVO) {
        if(userArchivesVO.getUserId()==null){
        if (userArchivesVO.getUserId() == null) {
            return R.fail("未查询到用户信息");
        }
        userDao.updateUserArchives(userArchivesVO);
@@ -1851,24 +2123,26 @@
    /**
     * 修改app用户密码
     * @param userInfoAppDTO    请求参数
     * @return  修改结果
     *
     * @param userInfoAppDTO
     *            请求参数
     * @return 修改结果
     */
    @Override
    public R updateUserPassByApp(EditUserInfoPassAppDTO userInfoAppDTO){
        if(userInfoAppDTO.getOldPassword().equals(userInfoAppDTO.getNewPassword())){
    public R updateUserPassByApp(EditUserInfoPassAppDTO userInfoAppDTO) {
        if (userInfoAppDTO.getOldPassword().equals(userInfoAppDTO.getNewPassword())) {
            return R.fail("新密码不可与原密码相同");
        }
        //查询用户信息
        // 查询用户信息
        SysUserDO userDO = userDao.selectById(userInfoAppDTO.getUserId());
        if (userDO == null) {
            return R.fail("未查询到用户信息");
        }
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        if (!passwordEncoder.matches(userInfoAppDTO.getOldPassword(),userDO.getPassword())) {
        if (!passwordEncoder.matches(userInfoAppDTO.getOldPassword(), userDO.getPassword())) {
            return R.fail("原密码错误");
        }
        if(!userInfoAppDTO.getNewPassword().equals(userInfoAppDTO.getConfirmPassword())){
        if (!userInfoAppDTO.getNewPassword().equals(userInfoAppDTO.getConfirmPassword())) {
            return R.fail("两次输入的新密码不一致");
        }
        userDO.setPassword(passwordEncoder.encode(userInfoAppDTO.getNewPassword()));
@@ -1881,16 +2155,19 @@
    /**
     * 添加网格员
     * @param eventGridMemberAddDTO    请求参数
     * @return  结果
     *
     * @param eventGridMemberAddDTO
     *            请求参数
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R addGridUser(EventGridMemberAddDTO eventGridMemberAddDTO) {
        SysRoleDO gridMemberDefaultRole = roleDAO.selectOne(new QueryWrapper<SysRoleDO>().lambda().eq(SysRoleDO::getRoleKey, Constants.GRID_DEFAULT_ROLE_KEY));
        if(gridMemberDefaultRole==null) {
            //添加默认网格员角色
        SysRoleDO gridMemberDefaultRole = roleDAO.selectOne(
            new QueryWrapper<SysRoleDO>().lambda().eq(SysRoleDO::getRoleKey, Constants.GRID_DEFAULT_ROLE_KEY));
        if (gridMemberDefaultRole == null) {
            // 添加默认网格员角色
            gridMemberDefaultRole = new SysRoleDO();
            gridMemberDefaultRole.setCommunityId(0L);
            gridMemberDefaultRole.setRoleName("网格员默认角色");
@@ -1898,22 +2175,22 @@
            gridMemberDefaultRole.setRoleSort(0);
            gridMemberDefaultRole.setCreateBy(eventGridMemberAddDTO.getUserId());
            int insert = roleDAO.insert(gridMemberDefaultRole);
            if (insert!=1) {
            if (insert != 1) {
                throw new ServiceException("网格员默认角色添加失败");
            }
        }
        Long roleId = gridMemberDefaultRole.getRoleId();
        //新角色设置所有权限
        // 新角色设置所有权限
        MenuRoleVO menuRoleVO = new MenuRoleVO();
        menuRoleVO.setIsAll(1);
        menuRoleVO.setCommunityId(eventGridMemberAddDTO.getCommunityId());
        menuRoleVO.setRoleId(roleId);
        this.putMenuRole(menuRoleVO);
        //参数校验
        SysUserDO oldUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getType,6)
                .eq(SysUserDO::getNickName,eventGridMemberAddDTO.getNickName()));
        if(oldUserDO != null){
        // 参数校验
        SysUserDO oldUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getType, 6)
            .eq(SysUserDO::getNickName, eventGridMemberAddDTO.getNickName()));
        if (oldUserDO != null) {
            return R.fail("昵称已使用");
        }
@@ -1921,11 +2198,11 @@
        String encode = new BCryptPasswordEncoder().encode(eventGridMemberAddDTO.getPassword());
        eventGridMemberAddDTO.setPassword(encode);
        BeanUtils.copyProperties(eventGridMemberAddDTO, sysUserDO);
        if(!StringUtils.isEmpty(sysUserDO.getNickName())){
        if (!StringUtils.isEmpty(sysUserDO.getNickName())) {
            sysUserDO.setName(sysUserDO.getNickName());
        }
        sysUserDO.setType(6);
        if(StringUtils.isEmpty(eventGridMemberAddDTO.getImageUrl())){
        if (StringUtils.isEmpty(eventGridMemberAddDTO.getImageUrl())) {
            sysUserDO.setImageUrl(Constants.ZONG_ZHI_GRID_MEMBER_IMAGE_URL);
        }
        int insert = 0;
@@ -1936,17 +2213,35 @@
            sysUserRoleDO.setRoleId(roleId);
            sysUserRoleDAO.insert(sysUserRoleDO);
            //关联市平台网格员
            if(eventGridMemberAddDTO.getLcMemberId() != null){
                this.userDao.addLcMember(eventGridMemberAddDTO.getLcMemberId(),sysUserDO.getUserId(),sysUserDO.getNickName());
            // 关联市平台网格员
            if (eventGridMemberAddDTO.getLcMemberId() != null) {
                LcCompareCodeMemberDO compareCodeMemberDO =
                    lcCompareMemberCodeMapper.selectOne(new QueryWrapper<LcCompareCodeMemberDO>().lambda()
                        .eq(LcCompareCodeMemberDO::getLcGridMemberId, eventGridMemberAddDTO.getLcMemberId()));
                if (compareCodeMemberDO != null) {
                    compareCodeMemberDO.setLocalGridMemberId(sysUserDO.getUserId().toString());
                    compareCodeMemberDO.setGridMemberName(sysUserDO.getNickName());
                    compareCodeMemberDO.setUpdateAt(new Date());
                    lcCompareMemberCodeMapper.updateById(compareCodeMemberDO);
                } else {
                    compareCodeMemberDO = new LcCompareCodeMemberDO();
                    compareCodeMemberDO.setId(Snowflake.getId());
                    compareCodeMemberDO.setLocalGridMemberId(sysUserDO.getUserId().toString());
                    compareCodeMemberDO.setGridMemberName(sysUserDO.getNickName());
                    compareCodeMemberDO.setLcGridMemberId(eventGridMemberAddDTO.getLcMemberId());
                    compareCodeMemberDO.setLcBindUserId(eventGridMemberAddDTO.getLcBindUserId());
                    compareCodeMemberDO.setLcGridMemberName(eventGridMemberAddDTO.getLcMemberName());
                    compareCodeMemberDO.setCreateAt(new Date());
                    lcCompareMemberCodeMapper.insert(compareCodeMemberDO);
                }
            }
            //网格员关联楼栋
            if(!eventGridMemberAddDTO.getBuildingIds().isEmpty()){
            // 网格员关联楼栋
            if (eventGridMemberAddDTO.getBuildingIds() != null && !eventGridMemberAddDTO.getBuildingIds().isEmpty()) {
                List<EventGridMemberBuildingRelationDO> buildingRelationList = new ArrayList<>();
                eventGridMemberAddDTO.getBuildingIds().forEach(buildingId -> {
                    Map<String,Long> resultMap = this.userDao.getBuilding(buildingId);
                    if(resultMap != null){
                    Map<String, Long> resultMap = this.userDao.getBuilding(buildingId);
                    if (resultMap != null) {
                        EventGridMemberBuildingRelationDO buildingRelationDO = new EventGridMemberBuildingRelationDO();
                        buildingRelationDO.setBuildingId(buildingId);
                        buildingRelationDO.setGridMemberId(sysUserDO.getUserId());
@@ -1956,7 +2251,7 @@
                        buildingRelationList.add(buildingRelationDO);
                    }
                });
                if(!buildingRelationList.isEmpty()){
                if (!buildingRelationList.isEmpty()) {
                    buildingRelationService.saveBatch(buildingRelationList);
                }
            }
@@ -1969,32 +2264,40 @@
                return R.fail("账户已经存在");
            }
        }
        if(insert > 0){
        if (insert > 0) {
            return R.ok();
        }else{
        } else {
            return R.fail("添加失败");
        }
    }
    /**
     * 网格员管理
     * @param memberRelationDTO 请求参数
     * @return  网格员列表
     *
     * @param memberRelationDTO
     *            请求参数
     * @return 网格员列表
     */
    @Override
    public R getGridMemberList(PageEventGridMemberRelationDTO memberRelationDTO){
        IPage<GridMemberVO> gridMemberPage = userDao.getGridMemberList(new Page(memberRelationDTO.getPageNum()
                ,memberRelationDTO.getPageSize()),memberRelationDTO);
        if(!gridMemberPage.getRecords().isEmpty()){
    public R getGridMemberList(PageEventGridMemberRelationDTO memberRelationDTO) {
        IPage<GridMemberVO> gridMemberPage = userDao.getGridMemberList(
            new Page(memberRelationDTO.getPageNum(), memberRelationDTO.getPageSize()), memberRelationDTO);
        if (!gridMemberPage.getRecords().isEmpty()) {
            gridMemberPage.getRecords().forEach(gridMember -> {
                //查询网格员关联市平台网格员id
                gridMember.setLcMemberId(this.userDao.getLcMemberId(gridMember.getUserId()));
                // 查询网格员关联市平台网格员id
                Map<String, String> lcMemberMap = this.userDao.getLcMemberId(gridMember.getUserId());
                if (lcMemberMap != null) {
                    gridMember.setLcMemberId(lcMemberMap.get("lc_grid_member_id"));
                    gridMember.setLcMemberName(lcMemberMap.get("lc_grid_member_name"));
                    gridMember.setLcBindUserId(lcMemberMap.get("lc_bind_user_id"));
                }
                //查询网格员关联楼栋信息
                List<GridMemberBuildingVO> memberBuildingList = eventGridMemberBuildingRelationMapper.getGridMemberBuildingRelation(gridMember.getUserId());
                if(!memberBuildingList.isEmpty()){
                // 查询网格员关联楼栋信息
                List<GridMemberBuildingVO> memberBuildingList =
                    eventGridMemberBuildingRelationMapper.getGridMemberBuildingRelation(gridMember.getUserId());
                if (!memberBuildingList.isEmpty()) {
                    memberBuildingList.forEach(memberBuilding -> {
                        if(!memberBuilding.getBuildingName().contains("栋")){
                        if (!memberBuilding.getBuildingName().contains("栋")) {
                            memberBuilding.setBuildingName(memberBuilding.getBuildingName() + "栋");
                        }
                    });
@@ -2007,49 +2310,71 @@
    /**
     * 修改网格员信息
     * @param gridMemberDTO 请求参数
     * @return  修改结果
     *
     * @param gridMemberDTO
     *            请求参数
     * @return 修改结果
     */
    @Override
    public R editGridUser(EventGridMemberEditAdminDTO gridMemberDTO){
    @Transactional(rollbackFor = Exception.class)
    public R editGridUser(EventGridMemberEditAdminDTO gridMemberDTO) {
        if(gridMemberDTO.getGridMemberId() == null){
        if (gridMemberDTO.getGridMemberId() == null) {
            return R.fail("参数错误");
        }
        SysUserDO sysUserDO = userDao.selectById(gridMemberDTO.getGridMemberId());
        if(sysUserDO == null){
        if (sysUserDO == null) {
            return R.fail("参数错误");
        }
        gridMemberDTO.setUserId(gridMemberDTO.getGridMemberId());
        //参数校验
        SysUserDO oldUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getType,6)
                .eq(SysUserDO::getNickName,gridMemberDTO.getNickName()));
        if(oldUserDO != null && !oldUserDO.getUserId().equals(gridMemberDTO.getGridMemberId())){
        // 参数校验
        SysUserDO oldUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getType, 6)
            .eq(SysUserDO::getNickName, gridMemberDTO.getNickName()));
        if (oldUserDO != null && !oldUserDO.getUserId().equals(gridMemberDTO.getGridMemberId())) {
            return R.fail("昵称已使用");
        }
        BeanUtils.copyProperties(gridMemberDTO,sysUserDO);
        BeanUtils.copyProperties(gridMemberDTO, sysUserDO);
        int insert = 0;
        try {
            insert = userDao.updateById(sysUserDO);
            //关联市平台网格员
            if(gridMemberDTO.getLcMemberId() != null){
                this.userDao.addLcMember(gridMemberDTO.getLcMemberId(),sysUserDO.getUserId(),sysUserDO.getNickName());
            }else{
                this.userDao.delLcMember(sysUserDO.getUserId());
            // 清除原本关联网格员信息
            this.userDao.delLcMember(sysUserDO.getUserId());
            // 关联市平台网格员
            if (gridMemberDTO.getLcMemberId() != null) {
                // 关联现有的网格员信息
                LcCompareCodeMemberDO compareCodeMemberDO =
                    lcCompareMemberCodeMapper.selectOne(new QueryWrapper<LcCompareCodeMemberDO>().lambda()
                        .eq(LcCompareCodeMemberDO::getLcGridMemberId, gridMemberDTO.getLcMemberId()));
                if (compareCodeMemberDO != null) {
                    compareCodeMemberDO.setLocalGridMemberId(sysUserDO.getUserId().toString());
                    compareCodeMemberDO.setGridMemberName(sysUserDO.getNickName());
                    compareCodeMemberDO.setUpdateAt(new Date());
                    lcCompareMemberCodeMapper.updateById(compareCodeMemberDO);
                } else {
                    compareCodeMemberDO = new LcCompareCodeMemberDO();
                    compareCodeMemberDO.setId(Snowflake.getId());
                    compareCodeMemberDO.setLocalGridMemberId(sysUserDO.getUserId().toString());
                    compareCodeMemberDO.setGridMemberName(sysUserDO.getNickName());
                    compareCodeMemberDO.setLcGridMemberId(gridMemberDTO.getLcMemberId());
                    compareCodeMemberDO.setLcBindUserId(gridMemberDTO.getLcBindUserId());
                    compareCodeMemberDO.setLcGridMemberName(gridMemberDTO.getLcMemberName());
                    compareCodeMemberDO.setCreateAt(new Date());
                    lcCompareMemberCodeMapper.insert(compareCodeMemberDO);
                }
            }
            //清除原网格员与楼栋关联关系
            // 清除原网格员与楼栋关联关系
            this.userDao.delGridMemberRelation(sysUserDO.getUserId());
            //新增网格员关联楼栋
            if(!gridMemberDTO.getBuildingIds().isEmpty()){
            // 新增网格员关联楼栋
            if (gridMemberDTO.getBuildingIds() != null && !gridMemberDTO.getBuildingIds().isEmpty()) {
                List<EventGridMemberBuildingRelationDO> buildingRelationList = new ArrayList<>();
                gridMemberDTO.getBuildingIds().forEach(buildingId -> {
                    Map<String,Long> resultMap = this.userDao.getBuilding(buildingId);
                    if(resultMap != null){
                    Map<String, Long> resultMap = this.userDao.getBuilding(buildingId);
                    if (resultMap != null) {
                        EventGridMemberBuildingRelationDO buildingRelationDO = new EventGridMemberBuildingRelationDO();
                        buildingRelationDO.setBuildingId(buildingId);
                        buildingRelationDO.setGridMemberId(sysUserDO.getUserId());
@@ -2059,7 +2384,7 @@
                        buildingRelationList.add(buildingRelationDO);
                    }
                });
                if(!buildingRelationList.isEmpty()){
                if (!buildingRelationList.isEmpty()) {
                    buildingRelationService.saveBatch(buildingRelationList);
                }
            }
@@ -2073,7 +2398,7 @@
                return R.fail("账户已经存在");
            }
        }
        if(insert > 0){
        if (insert > 0) {
            return R.ok();
        }
        return R.fail("修改失败");
@@ -2081,12 +2406,14 @@
    /**
     * 重置网格员密码
     * @param gridMemberDTO 请求参数
     * @return  重置结果
     *
     * @param gridMemberDTO
     *            请求参数
     * @return 重置结果
     */
    @Override
    public R passResetUser(EventGridMemberPassResetDTO gridMemberDTO){
        if(gridMemberDTO.getIds().isEmpty() || StringUtils.isEmpty(gridMemberDTO.getPassword())){
    public R passResetUser(EventGridMemberPassResetDTO gridMemberDTO) {
        if (gridMemberDTO.getIds().isEmpty() || StringUtils.isEmpty(gridMemberDTO.getPassword())) {
            return R.fail("参数错误");
        }
        String encode = new BCryptPasswordEncoder().encode(gridMemberDTO.getPassword());
@@ -2097,23 +2424,25 @@
    /**
     * 批量删除网格员
     * @param Ids   网格员id集合
     * @return  删除结果
     *
     * @param Ids
     *            网格员id集合
     * @return 删除结果
     */
    @Override
    public R deleteMembers(List<Long> Ids){
        if(Ids.isEmpty()){
    public R deleteMembers(List<Long> Ids) {
        if (Ids.isEmpty()) {
            return R.fail("参数有误");
        }
        if(userDao.deleteBatchIds(Ids) > 0){
        if (userDao.deleteBatchIds(Ids) > 0) {
            return R.ok();
        }
        return R.fail("删除失败");
    }
    @Override
    public R gridMemberEditStatus(EventGridMemberEditStatusDTO gridMemberEditDTO){
        if(gridMemberEditDTO.getIds().isEmpty()){
    public R gridMemberEditStatus(EventGridMemberEditStatusDTO gridMemberEditDTO) {
        if (gridMemberEditDTO.getIds().isEmpty()) {
            return R.fail("参数有误");
        }
        userDao.gridMemberEditStatus(gridMemberEditDTO);
@@ -2121,14 +2450,226 @@
    }
    @Override
    public R noTips(Long userId){
    public R noTips(Long userId) {
        SysUserDO userDO = this.userDao.selectById(userId);
        if(userDO != null){
        if (userDO != null) {
            userDO.setBigAgeTips(2);
            if(this.userDao.updateById(userDO) > 0){
            if (this.userDao.updateById(userDO) > 0) {
                return R.ok();
            }
        }
        return R.fail();
    }
    /**
     * 查询社区的收益说明
     *
     * @param communityId
     *            社区id
     * @return 收益说明
     */
    @Override
    public R listAgreements(Long communityId) {
        List<SysUserAgreementDO> sysUserAgreementDOS =
            sysUserAgreementDAO.selectList(new LambdaQueryWrapper<SysUserAgreementDO>()
                .eq(SysUserAgreementDO::getCommunityId, communityId).eq(SysUserAgreementDO::getType, 5));
        if (sysUserAgreementDOS.isEmpty()) {
            SysUserAgreementDO agreementDO = new SysUserAgreementDO();
            agreementDO.setCommunityId(communityId);
            agreementDO.setName("收益说明");
            agreementDO.setType(5);
            agreementDO.setCreateAt(new Date());
            agreementDO.setContent(Constants.PROFIT_EXPLAIN);
            sysUserAgreementDAO.insert(agreementDO);
            sysUserAgreementDOS.add(agreementDO);
        }
        List<SysUserAgreementVO> sysUserAgreementVOS = new ArrayList<>();
        sysUserAgreementDOS.forEach(sysUserAgreementDO -> {
            SysUserAgreementVO sysUserAgreementVO = new SysUserAgreementVO();
            BeanUtils.copyProperties(sysUserAgreementDO, sysUserAgreementVO);
            sysUserAgreementVOS.add(sysUserAgreementVO);
        });
        return R.ok(sysUserAgreementVOS);
    }
    @Override
    public R getGridIsOk(Long userId) {
        Integer count = this.userDao.getGridIsOk(userId);
        if (count > 0) {
            return R.ok(count);
        } else {
            return R.fail();
        }
    }
    @Override
    public R getGridsMemberList(Long communityId) {
        return R.ok(this.userDao.getGridsMemberList(communityId));
    }
    /**
     * 根据用户id查询用户openid
     *
     * @param userId
     *            用户id
     * @return openid
     */
    @Override
    public R getUserOpenId(Long userId) {
        SysUserDO userDO = this.userDao.selectById(userId);
        if (userDO != null) {
            return R.ok(userDO.getOpenid());
        }
        return R.fail();
    }
    /**
     * 查询社区后台工作人员列表
     *
     * @param communityId
     *            社区id
     * @return 社区后台工作人员列表
     */
    @Override
    public R getUserListByCommunityId(Long communityId) {
        return R.ok(this.userDao.getUserListByCommunityId(communityId));
    }
    /**
     * 检查当前用户是否是社区工作人员
     * @param phone
     * @param communityId
     * @return
     */
    @Override
    public R checkCurrentUserIsTeam(String phone, Long communityId) {
        int result = this.userDao.selectCountTeam(phone, communityId);
        if (result > 0) {
            return R.ok(true);
        }
        return R.ok(false);
    }
    @Override
    public R resetPassword(Long userId) {
        SysUserDO sysUserDO = new SysUserDO();
        sysUserDO.setUserId(userId);
        String encode = new BCryptPasswordEncoder().encode("admin123456");
        sysUserDO.setPassword(encode);
        int update = userDao.updateById(sysUserDO);
        if (update > 0) {
            return R.ok();
        }
        return R.fail();
    }
    @Override
    public R resetPasswordPatch(Long[] userId) {
        if(userId!=null){
            for(Long user:userId){
                SysUserDO sysUserDO = new SysUserDO();
                sysUserDO.setUserId(user);
                String encode = new BCryptPasswordEncoder().encode("admin123456");
                sysUserDO.setPassword(encode);
                userDao.updateById(sysUserDO);
            }
        }
        return R.ok();
    }
    /**
     * 便民服务新增商家账号
     * @param convenientMerchantDTO
     * @return 商家用户id
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R addConvenientMerchantUser(ConvenientMerchantDTO convenientMerchantDTO) {
        SysUserDO sysUserDO = new SysUserDO();
        Long communityId = 0L;
        // 新增社区高级管理员角色
        SysRoleDO sysRoleDO = new SysRoleDO();
        sysRoleDO.setCommunityId(0L);
        sysRoleDO.setRoleName(convenientMerchantDTO.getName());
        sysRoleDO.setRoleKey(Constants.CONVENIENT_MERCHANT_ROLE_KEY + convenientMerchantDTO.getAccount());
        sysRoleDO.setRoleSort(0);
        sysRoleDO.setCreateBy(convenientMerchantDTO.getCreatedBy());
        try {
            int insert = roleDAO.insert(sysRoleDO);
            if (insert != 1) {
                return R.fail("网络错误");
            }
        } catch (Exception e) {
            log.error("新增角色报错【{}】", e.getMessage());
            if (e.getMessage().contains("unique_role_name_community_id")) {
                return R.fail("商家名称已被占用");
            } else {
                return R.fail("建立商家角色失败");
            }
        }
        // 新角色设置所有权限
        MenuRoleVO menuRoleVO = new MenuRoleVO();
        menuRoleVO.setIsAll(1);
        menuRoleVO.setCommunityId(communityId);
        menuRoleVO.setRoleId(sysRoleDO.getRoleId());
        this.putMenuRole(menuRoleVO);
        // sys_user 表
        String encode = new BCryptPasswordEncoder().encode(convenientMerchantDTO.getPassword());
        BeanUtils.copyProperties(convenientMerchantDTO, sysUserDO);
        sysUserDO.setAccount(convenientMerchantDTO.getAccount());
        sysUserDO.setType(10);
        sysUserDO.setAreaId(null);
        sysUserDO.setStatus(1);
        sysUserDO.setPhone(convenientMerchantDTO.getPhone());
        sysUserDO.setName(convenientMerchantDTO.getContacts());
        sysUserDO.setPassword(encode);
        try {
            userDao.insert(sysUserDO);
            return R.ok(sysUserDO.getUserId());
        } catch (Exception e) {
            e.printStackTrace();
            log.error("新增后台用户报错【{}】", e.getMessage());
            roleDAO.deleteByRoleKey(Constants.CONVENIENT_MERCHANT_ROLE_KEY + convenientMerchantDTO.getAccount());
            if (e.getMessage().contains("union_phone_type")) {
                return R.fail("手机号已经存在");
            } else if (e.getMessage().contains("union_account_type")) {
                return R.fail("账户已经存在");
            }
        }
        return R.fail("新增商户发生错误");
    }
    /**
 * 修改便民服务商家绑定账号
 * @param userId 用户id
 * @param account 修改账户
 * @return 修改结果
 */
@Override
public R putUserAccount(Long userId, String account) {
    SysUserDO sysUserDO = userDao.selectById(userId);
    if (isNull(sysUserDO)) {
        return R.fail("用户不存在");
    }
    String oldAccount = sysUserDO.getAccount();
    sysUserDO.setAccount(account);
    int result = userDao.updateById(sysUserDO);
    if (result > 0) {
        SysRoleDO sysRoleDO = roleDAO.selectOne(new QueryWrapper<SysRoleDO>()
                .lambda().eq(SysRoleDO::getRoleKey, Constants.CONVENIENT_MERCHANT_ROLE_KEY + oldAccount));
        if (nonNull(sysRoleDO)) {
            sysRoleDO.setRoleKey(Constants.CONVENIENT_MERCHANT_ROLE_KEY + account);
            roleDAO.updateById(sysRoleDO);
        }
    }
    return R.ok();
}
    @Override
    public R disableOrEnableMerchantUsers(DisableOrEnableConvenientMerchantDTO disableOrEnableConvenientMerchantDTO) {
        userDao.disableOrEnableMerchantUsers(disableOrEnableConvenientMerchantDTO.getType(), disableOrEnableConvenientMerchantDTO.getIds());
        return R.ok();
    }
}