mitao
3 天以前 dbece172a57c74eff448f7feb4ebe1fd4131a536
springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/service/impl/PartyMemberServiceImpl.java
@@ -2,28 +2,25 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.idev.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.vos.sangeshenbian.SystemUserVo;
import com.panzhihua.sangeshenbian.enums.AuditStatusEnum;
import com.panzhihua.sangeshenbian.model.entity.BcRegion;
import com.panzhihua.sangeshenbian.model.entity.ComAct;
import com.panzhihua.sangeshenbian.model.entity.ComStreet;
import com.panzhihua.sangeshenbian.model.entity.PartyMember;
import com.panzhihua.sangeshenbian.dao.PartyMemberMapper;
import com.panzhihua.sangeshenbian.model.excel.PartyMemberExcel;
import com.panzhihua.sangeshenbian.warpper.PartyMemberImportFailedVO;
import com.panzhihua.sangeshenbian.model.excel.PartyMemberTemplate;
import com.panzhihua.sangeshenbian.service.IBcRegionService;
import com.panzhihua.sangeshenbian.service.IComActService;
import com.panzhihua.sangeshenbian.service.IComStreetService;
import com.panzhihua.sangeshenbian.service.IPartyMemberService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.panzhihua.sangeshenbian.warpper.PartyMemberDTO;
import com.panzhihua.sangeshenbian.warpper.PartyMemberQuery;
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.sangeshenbian.SystemUserVo;
import com.panzhihua.common.redis.RedisUtils;
import com.panzhihua.sangeshenbian.dao.PartyMemberMapper;
import com.panzhihua.sangeshenbian.enums.AuditStatusEnum;
import com.panzhihua.sangeshenbian.enums.FreezeStatusEnum;
import com.panzhihua.sangeshenbian.enums.ReportTypeEnum;
import com.panzhihua.sangeshenbian.model.entity.*;
import com.panzhihua.sangeshenbian.model.excel.PartyMemberExcel;
import com.panzhihua.sangeshenbian.model.excel.PartyMemberTemplate;
import com.panzhihua.sangeshenbian.service.*;
import com.panzhihua.sangeshenbian.warpper.*;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -33,10 +30,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;
/**
 * <p>
@@ -50,9 +44,12 @@
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class PartyMemberServiceImpl extends ServiceImpl<PartyMemberMapper, PartyMember> implements IPartyMemberService {
    private final HttpServletResponse response;
    private final ISystemUserService systemUserService;
    private final IBcRegionService bcRegionService;
    private final IComStreetService comStreetService;
    private final IComActService comActService;
    private final RedisUtils redisUtils;
    private final ISystemUserLevelService systemUserLevelService;
    /**
     * 党员分页查询列表
     *
@@ -62,7 +59,33 @@
     */
    @Override
    public Page<PartyMember> pageList(PartyMemberQuery query, SystemUserVo loginUserInfo) {
        SystemUser user = systemUserService.getById(loginUserInfo.getId());
        if (Objects.isNull(user)){
            throw new ServiceException("用户不存在");
        }
        loginUserInfo.setAccountLevel(user.getAccountLevel());
        loginUserInfo.setDistrictsCode(user.getDistrictsCode());
        loginUserInfo.setStreetId(user.getStreetId());
        loginUserInfo.setCommunityId(user.getCommunityId());
        return  baseMapper.pageList(new Page<>(query.getPageNum(), query.getPageSize()),query,loginUserInfo);
        // 判断当前登录用户是否有权限查看这个社区的党员
//        if(loginUserInfo.getAccountLevel()==1){
//            // 是市级权限 全查
//            return  baseMapper.pageList(new Page<>(query.getPageNum(), query.getPageSize()),query,loginUserInfo);
//        }
//        if(loginUserInfo.getAccountLevel()==2){
//            // 是区县权限
//            // 判断当前登录用户是否有权限查看这个社区的党员
//            LambdaQueryWrapper<PartyMember> queryWrapper = new LambdaQueryWrapper<>();
//            queryWrapper.eq(PartyMember::getDistrictsCode,loginUserInfo.getDistrictsCode());
//            if(StrUtil.isNotBlank(query.getName())){
//                queryWrapper.like(PartyMember::getName,query.getName());
//            }
//            if(StrUtil.isNotBlank(query.getIdNumber())){}
//        }
//        return null;
    }
    /**
     * 添加党员
@@ -74,13 +97,27 @@
        PartyMember partyMember = BeanUtil.copyProperties(dto, PartyMember.class);
        String idNumber = dto.getIdNumber();
        partyMember.setGender(getGender(idNumber));
        BcRegion districtByCode = bcRegionService.getDistrictByCode(dto.getDistrictsCode());
        if (Objects.nonNull(districtByCode)){
            partyMember.setDistricts(districtByCode.getRegionName());
        }
        ComStreet street = comStreetService.getById(dto.getStreetId());
        if (Objects.nonNull(street)){
            partyMember.setStreet(street.getName());
        }
        ComAct act = comActService.getById(dto.getCommunityId());
        if (Objects.nonNull(act)){
            partyMember.setCommunity(act.getName());
        }
        if (Objects.isNull(dto.getId())) {
            //添加
            partyMember.setCreateBy(Long.parseLong(loginUserInfo.getId().toString()));
            partyMember.setAuditStatus(AuditStatusEnum.APPROVED.getCode());
            partyMember.setFreezeStatus(FreezeStatusEnum.NORMAL.getCode());
            partyMember.setSource(1);
            save(partyMember);
        } else {
            partyMember.setIsConfirm(0);
            partyMember.setUpdateBy(Long.parseLong(loginUserInfo.getId().toString()));
            updateById(partyMember);
        }
@@ -91,11 +128,12 @@
     * @param loginUserInfo
     */
    @Override
    public void freeze(Long id, SystemUserVo loginUserInfo) {
    public PartyMember freeze(Long id, SystemUserVo loginUserInfo) {
        PartyMember partyMember = getById(id);
        partyMember.setFreezeStatus(partyMember.getFreezeStatus() == 1 ? 0 : 1);
        partyMember.setUpdateBy(Long.parseLong(loginUserInfo.getId().toString()));
        updateById(partyMember);
        return partyMember;
    }
    @Override
@@ -116,7 +154,15 @@
     */
    @Override
    public void export(PartyMemberQuery query, SystemUserVo loginUserInfo) throws IOException {
     List<PartyMember> list = baseMapper.queryList(query,loginUserInfo);
        SystemUser user = systemUserService.getById(loginUserInfo.getId());
        if (Objects.isNull(user)){
            throw new ServiceException("用户不存在");
        }
        loginUserInfo.setAccountLevel(user.getAccountLevel());
        loginUserInfo.setDistrictsCode(user.getDistrictsCode());
        loginUserInfo.setStreetId(user.getStreetId());
        loginUserInfo.setCommunityId(user.getCommunityId());
        List<PartyMember> list = baseMapper.queryList(query,loginUserInfo);
        List<PartyMemberExcel> partyMemberExcels = BeanUtil.copyToList(list, PartyMemberExcel.class);
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
@@ -139,38 +185,38 @@
        if (CollUtil.isEmpty(list)) {
            throw new ServiceException("导入数据为空");
        }
        // 存储验证失败的记录
        List<PartyMemberImportFailedVO> failedList = new ArrayList<>();
        // 存储验证成功的记录
        List<PartyMember> validPartyMembers = new ArrayList<>();
        // 手机号正则表达式
        String phoneRegex = "^1[3-9]\\d{9}$";
        // 身份证号正则表达式
        String idCardRegex = "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)";
        // 批量验证数据
        for (PartyMemberTemplate template : list) {
            PartyMemberImportFailedVO failedVO = new PartyMemberImportFailedVO();
            boolean isValid = true;
            StringBuilder errorMsg = new StringBuilder();
            // 复制数据到失败记录对象
            BeanUtil.copyProperties(template, failedVO);
            // 1. 验证手机号
            if (StrUtil.isBlank(template.getPhone()) || !template.getPhone().matches(phoneRegex)) {
                isValid = false;
                errorMsg.append("手机号格式不正确; ");
            }
            // 2. 验证身份证号
            if (StrUtil.isBlank(template.getIdNumber()) || !template.getIdNumber().matches(idCardRegex)) {
                isValid = false;
                errorMsg.append("身份证号格式不正确; ");
            }
            // 3. 验证账号是否已存在
            if (StrUtil.isNotBlank(template.getPhone())) {
                LambdaQueryWrapper<PartyMember> queryWrapper = new LambdaQueryWrapper<>();
@@ -181,7 +227,7 @@
                    errorMsg.append("账号已存在");
                }
            }
            // 4. 验证所在社区
            String districtName = null;
            String streetName = null;
@@ -199,12 +245,12 @@
                    districtName = addressParts[0];
                    streetName = addressParts[1];
                    communityName = addressParts[2];
                    // 验证区县、街道、社区信息
                    // 验证区县是否存在
                    BcRegion district = bcRegionService.getDistrictByName(districtName);
                    if (Objects.isNull(district)) {
                        isValid = false;
                        errorMsg.append("区县不存在; ");
@@ -219,11 +265,12 @@
                            // 验证社区是否存在且属于该街道
                            // 实际代码应该是调用相应的Service查询社区信息
                            ComAct comAct = comActService.getCommunityByNameAndStreet(communityName, comStreet.getStreetId());
                            streetId = comStreet.getStreetId();
                            communityId = comAct.getCommunityId();
                            if (Objects.isNull(comAct)) {
                                isValid = false;
                                errorMsg.append("社区不存在或不属于所选街道; ");
                            } else {
                                streetId = comStreet.getStreetId();
                                communityId = comAct.getCommunityId();
                            }
                        }
                    }
@@ -232,7 +279,7 @@
                isValid = false;
                errorMsg.append("社区信息不能为空; ");
            }
            // 如果验证失败,添加到失败列表,否则添加到成功列表
            if (!isValid) {
                failedVO.setFailReason(errorMsg.toString());
@@ -240,15 +287,15 @@
            } else {
                PartyMember partyMember = new PartyMember();
                BeanUtil.copyProperties(template, partyMember);
                // 设置创建人和更新人
                partyMember.setCreateBy(Long.parseLong(loginUserInfo.getId().toString()));
                partyMember.setUpdateBy(Long.parseLong(loginUserInfo.getId().toString()));
                //导入党员默认审核通过
                partyMember.setAuditStatus(AuditStatusEnum.APPROVED.getCode());
                partyMember.setSource(1);//管理后台录入
                //默认头像 TODO 默认头像
                partyMember.setAvatar("");
                //默认头像
                partyMember.setAvatar("https://www.psciio.com//idcard/f15c91f940624ed59537ecced1059f18.jpg");
                // 根据身份证号设置性别
                if (StrUtil.isNotBlank(template.getIdNumber())) {
                    partyMember.setGender(getGender(template.getIdNumber()));
@@ -265,16 +312,33 @@
                validPartyMembers.add(partyMember);
            }
        }
        // 处理验证成功的数据
        if (!validPartyMembers.isEmpty()) {
            // 批量保存
            saveBatch(validPartyMembers);
        }
        // 返回验证失败的数据
        return failedList;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void applyForMembership(PartyMemberApplicationRequest dto, LoginUserInfoVO loginUserInfo) {
        PartyMember partyMember = BeanUtil.copyProperties(dto, PartyMember.class);
        String idNumber = dto.getIdNumber();
        partyMember.setPhone(loginUserInfo.getPhone());
        partyMember.setGender(getGender(idNumber));
        partyMember.setCreateBy(loginUserInfo.getUserId());
        partyMember.setUpdateBy(loginUserInfo.getUserId());
        partyMember.setAuditStatus(AuditStatusEnum.PENDING.getCode());
        partyMember.setCreateTime(DateUtil.date());
        partyMember.setUpdateTime(DateUtil.date());
        partyMember.setSource(0);
        saveOrUpdate(partyMember);
    }
    /**
     * 审核
@@ -283,10 +347,49 @@
     * @param loginUserInfo
     */
    @Override
    public void audit(PartyMemberDTO dto, SystemUserVo loginUserInfo) {
    public PartyMember audit(PartyMemberDTO dto, SystemUserVo loginUserInfo) {
        PartyMember partyMember = BeanUtil.copyProperties(dto, PartyMember.class);
        partyMember.setUpdateBy(Long.parseLong(loginUserInfo.getId().toString()));
        updateById(partyMember);
        return this.getById(dto.getId());
    }
    @Override
    public Page<PendingPartyMemberApplicationVO> preAuditList(Page<PendingPartyMemberApplicationVO> page,
                                                              LoginUserInfoVO loginUserInfo) {
        SystemUser adminUser = systemUserService.getOne(new LambdaQueryWrapper<SystemUser>()
                .eq(SystemUser::getPhone, loginUserInfo.getPhone())
                .eq(SystemUser::getIsAdmin, 1)
                .ne(SystemUser::getStatus, 3)
                .ne(SystemUser::getAccountLevel, 5)
                .last("LIMIT 1"));
        if (adminUser == null){
            throw new ServiceException("无权审核");
        }
        Integer identity = (Integer) redisUtils.get("identity:" + loginUserInfo.getPhone());
        if(identity != null && identity != 2){
            throw new ServiceException("请切换至管理员身份");
        }
        int accountLevel = adminUser.getAccountLevel();
        Long communityId = null;
        String streetId = null;
        String districtsCode = null;
        if (accountLevel == ReportTypeEnum.COMMUNITY.getCode()) {
            communityId = adminUser.getCommunityId();
        } else if (accountLevel == ReportTypeEnum.STREET.getCode()) {
            streetId = adminUser.getStreetId();
        } else if (accountLevel == ReportTypeEnum.DISTRICT.getCode()) {
            districtsCode = adminUser.getDistrictsCode();
        } else if(accountLevel != ReportTypeEnum.CITY.getCode()){
            throw new ServiceException("无权审核:未知等级");
        }
        String phone = loginUserInfo.getPhone();
        return this.baseMapper.queryPreAuditPage(page, phone, accountLevel, districtsCode, streetId, communityId);
    }
    /**
@@ -300,4 +403,22 @@
        return (genderDigit % 2 == 0) ? 0 : 1;
    }
    /**
     * 根据电话号码查询有效的党员数据
     * @param phone
     * @return
     */
    @Override
   public PartyMember getPartyMemberByPhone(String phone) {
        PartyMember one = this.getOne(new LambdaQueryWrapper<PartyMember>().eq(PartyMember::getPhone, phone)
                .eq(PartyMember::getAuditStatus, 1).eq(PartyMember::getFreezeStatus, 0).eq(PartyMember::getDelFlag, 0));
      return one;
   }
    @Override
    public Boolean verifyPartyMemberByPhone(String phone) {
        Optional<PartyMember> partyMember = this.lambdaQuery().eq(PartyMember::getPhone, phone).oneOpt();
        return partyMember.isPresent();
    }
}