101captain
2022-03-14 85cf42314fc04a637f1a44e78c1e476a445bf0f3
springcloud_k8s_panzhihuazhihuishequ/service_partybuilding/src/main/java/com/panzhihua/service_dangjian/service/impl/ComPbMemberServiceImpl.java
@@ -1,16 +1,31 @@
package com.panzhihua.service_dangjian.service.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import cn.hutool.core.util.IdcardUtil;
import com.google.common.collect.Lists;
import com.panzhihua.common.enums.ComPbMemberRoleTypeEnum;
import com.panzhihua.common.model.dtos.partybuilding.ComDataStatisticsOrgDto;
import com.panzhihua.common.model.dtos.partybuilding.PageComDataStatisticsMemberDto;
import com.panzhihua.common.model.vos.partybuilding.excel.ComDataStatisticsMemberExcelVo;
import com.panzhihua.common.model.vos.partybuilding.excel.ComPbCheckUnitErrorExcelVO;
import com.panzhihua.common.model.vos.partybuilding.excel.ComPbMemberRoleErrorExcelVo;
import com.panzhihua.common.model.vos.partybuilding.excel.ComPbMemberRoleExcelVo;
import com.panzhihua.service_dangjian.entity.ComPbCheckUnit;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.BeanUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -226,7 +241,7 @@
        }
        page.setSize(pageSize);
        page.setCurrent(pageNum);
        IPage<PartyBuildingMemberVO> iPage = comPbMemberDAO.pagePartyOrganization(page, pagePartyOrganizationVO);
        IPage<PartyBuildingMemberVO> iPage = comPbMemberDAO.queryAllByLimit(page, pagePartyOrganizationVO);
        iPage.getRecords().forEach(record -> {
            record.setIdCard(SensitiveUtil.desensitizedIdNumber(record.getIdCard()));
        });
@@ -290,15 +305,38 @@
     * @return 新增结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R addPartyCommittee(PartyCommitteeVO partyCommitteeVO) {
        ComPbMemberRoleDO comPbMemberRoleDO = new ComPbMemberRoleDO();
        BeanUtils.copyProperties(partyCommitteeVO, comPbMemberRoleDO);
        comPbMemberRoleDO.setCreateAt(new Date());
        comPbMemberRoleDO.setUpdateAt(new Date());
        comPbMemberRoleDO.setIsReg(2);
        SysUserVO sysUser = comPbMemberRoleDAO.getSysUserByPhone(partyCommitteeVO.getPhone());
        if (!ObjectUtils.isEmpty(sysUser)) {
        Integer userCount = comPbMemberRoleDAO.getSysUserByIdCardCount(partyCommitteeVO.getIdCard());
        if (userCount > 0) {
            comPbMemberRoleDO.setIsReg(1);
        }
        Date nowDate = new Date();
        //判断党员信息是否存在党委信息
        ComPbMemberDO pbMemberDO = comPbMemberDAO.selectOne(new QueryWrapper<ComPbMemberDO>().lambda()
                .eq(ComPbMemberDO::getIdCard,partyCommitteeVO.getIdCard())
                .eq(ComPbMemberDO::getAuditResult,ComPbMemberDO.AuditResult.SHTG)
                .eq(ComPbMemberDO::getCommunityId,partyCommitteeVO.getCommunityId()));
        if(pbMemberDO == null){
            //不存在则创建党委党员信息
            pbMemberDO = new ComPbMemberDO();
            BeanUtils.copyProperties(partyCommitteeVO, pbMemberDO);
            pbMemberDO.setAuditResult(ComPbMemberDO.AuditResult.SHTG);
            pbMemberDO.setCreateAt(nowDate);
            pbMemberDO.setUpdateAt(nowDate);
            pbMemberDO.setType(ComPbMemberDO.Type.ZSDY);
            comPbMemberDAO.insert(pbMemberDO);
        }else{
            //存在则更新党委党员信息
            BeanUtils.copyProperties(partyCommitteeVO, pbMemberDO);
            pbMemberDO.setUpdateAt(nowDate);
            pbMemberDO.setType(ComPbMemberDO.Type.ZSDY);
            comPbMemberDAO.updateById(pbMemberDO);
        }
        int insert = comPbMemberRoleDAO.insert(comPbMemberRoleDO);
        if (insert > 0) {
@@ -315,24 +353,29 @@
     * @return 编辑结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R updatePartyCommittee(PartyCommitteeVO partyCommitteeVO) {
        ComPbMemberRoleDO comPbMemberRoleDO = new ComPbMemberRoleDO();
        Date nowDate = new Date();
        BeanUtils.copyProperties(partyCommitteeVO, comPbMemberRoleDO);
        ComPbMemberRoleDO comPbMemberRoleDOOld = comPbMemberRoleDAO.selectById(partyCommitteeVO.getId());
        comPbMemberRoleDO.setCreateAt(comPbMemberRoleDOOld.getCreateAt());
        comPbMemberRoleDO.setUpdateAt(new Date());
        comPbMemberRoleDO.setPositionTwo(partyCommitteeVO.getPositionTwo());
        comPbMemberRoleDO.setUpdateAt(nowDate);
        comPbMemberRoleDO.setIsReg(2);
        PartyCommitteeVO oldPartyCommitteeVO = comPbMemberRoleDAO.selectPartyCommitteeById(partyCommitteeVO.getId());
        String oldphone = oldPartyCommitteeVO.getPhone();
        SysUserVO sysUserOld = comPbMemberRoleDAO.getSysUserByPhone(oldphone);
        String newphone = partyCommitteeVO.getPhone();
        SysUserVO sysUserNew = comPbMemberRoleDAO.getSysUserByPhone(newphone);
        if (!ObjectUtils.isEmpty(sysUserOld) || !ObjectUtils.isEmpty(sysUserNew)) {
        Integer userCount = comPbMemberRoleDAO.getSysUserByIdCardCount(partyCommitteeVO.getIdCard());
        if (userCount > 0) {
            comPbMemberRoleDO.setIsReg(1);
        }
        if (!newphone.equals(oldphone)) {
            comPbMemberRoleDAO.updateUserPhone(newphone, oldphone);
        //查询党员信息并更新
        ComPbMemberDO pbMemberDO = comPbMemberDAO.selectOne(new QueryWrapper<ComPbMemberDO>().lambda()
                .eq(ComPbMemberDO::getIdCard,partyCommitteeVO.getIdCard())
                .eq(ComPbMemberDO::getAuditResult,ComPbMemberDO.AuditResult.SHTG)
                .eq(ComPbMemberDO::getCommunityId,partyCommitteeVO.getCommunityId()));
        if(pbMemberDO != null){
            Long id = pbMemberDO.getId();
            BeanUtils.copyProperties(partyCommitteeVO, pbMemberDO);
            pbMemberDO.setId(id);
            pbMemberDO.setUpdateAt(nowDate);
            pbMemberDO.setType(ComPbMemberDO.Type.ZSDY);
            comPbMemberDAO.updateById(pbMemberDO);
        }
        int update = comPbMemberRoleDAO.updateById(comPbMemberRoleDO);
        if (update > 0) {
@@ -356,10 +399,9 @@
        }
        int delete = comPbMemberRoleDAO.deleteById(partyCommitteeVO.getId());
        if (delete > 0) {
            SysUserVO sysUserVO = comPbMemberRoleDAO.getSysUserByPhone(comPbMemberRoleDO.getPhone());
            Long userId = comPbMemberRoleDAO.getUserIdByIdCard(comPbMemberRoleDO.getIdCard());
            // 删除用户信息缓存
            if (sysUserVO != null) {
                Long userId = sysUserVO.getUserId();
            if (userId != null) {
                String userKey = UserConstants.LOGIN_USER_INFO + userId;
                stringRedisTemplate.delete(userKey);
                return R.ok();
@@ -591,6 +633,7 @@
        if (comPbMemberDO == null) {
            return R.fail("未找到党员认证信息");
        }
//        BeanUtils.copyProperties(partyBuildingMemberVO, comPbMemberDO);
        comPbMemberDO.setAuditResult(partyBuildingMemberVO.getAuditResult());
        if (partyBuildingMemberVO.getAuditResult() != null && partyBuildingMemberVO.getAuditResult().equals(3)) {
            comPbMemberDO.setRefuseReason(partyBuildingMemberVO.getRefuseReason());
@@ -618,6 +661,23 @@
        if (partyBuildingMemberVO.getPhotoPath() != null) {
            comPbMemberDO.setPhotoPath(partyBuildingMemberVO.getPhotoPath());
        }
        if (Objects.nonNull(partyBuildingMemberVO.getType())) {
            comPbMemberDO.setType(partyBuildingMemberVO.getType());
        }
        if (StringUtils.isNotEmpty(partyBuildingMemberVO.getPosition())) {
            comPbMemberDO.setPosition(partyBuildingMemberVO.getPosition());
        }
        if (Objects.nonNull(partyBuildingMemberVO.getCheckUnitId())) {
            comPbMemberDO.setCheckUnitId(partyBuildingMemberVO.getCheckUnitId());
        }
        if (StringUtils.isNotEmpty(partyBuildingMemberVO.getFunction())) {
            comPbMemberDO.setFunction(partyBuildingMemberVO.getFunction());
        }
        if (Objects.nonNull(partyBuildingMemberVO.getSpecialtyCategory())) {
            comPbMemberDO.setSpecialtyCategory(partyBuildingMemberVO.getSpecialtyCategory());
            comPbMemberDO.setSpecialtyName(partyBuildingMemberVO.getSpecialtyName());
        }
        if (comPbMemberDAO.updateById(comPbMemberDO) > 0) {
            PartyBuildingMemberVO rtVO = new PartyBuildingMemberVO();
@@ -632,4 +692,267 @@
        return R.ok(comPbMemberDAO.exportPbMember(organizationVO));
    }
    /**
     * 分页查询党员数据统计
     * @param statisticsMemberDto   请求参数
     * @return  党员数据统计
     */
    @Override
    public R pageDataStatisticsMember(PageComDataStatisticsMemberDto statisticsMemberDto) {
        IPage<ComDataStatisticsMemberVo> memberPage = comPbMemberDAO.pageDataStatisticsMember(new Page(statisticsMemberDto.getPageNum()
                ,statisticsMemberDto.getPageSize()),statisticsMemberDto);
        memberPage.getRecords().forEach(member -> {
            if(member.getIsRole() > 0){
                member.setIsRole(1);
            }else{
                member.setIsRole(2);
            }
            try {
                member.setAge(IdcardUtil.getAgeByIdCard(member.getIdCard()));
            } catch (Exception e) {
                log.error("年龄转义失败");
            }
            //查询党员统计数据
            ComDataStatisticsMemberVo statisticsMemberVo = comPbMemberDAO.getMemberStatistics(member.getUserId(),member.getCommunityId());
            if(statisticsMemberVo != null){
                member.setPartyActivityCount(statisticsMemberVo.getPartyActivityCount());
                member.setPartyActivityDuration(statisticsMemberVo.getPartyActivityDuration());
                member.setVolunteerActivityCount(statisticsMemberVo.getVolunteerActivityCount());
                member.setVolunteerActivityDuration(statisticsMemberVo.getVolunteerActivityDuration());
                member.setVolunteerActivityIntegral(statisticsMemberVo.getVolunteerActivityIntegral());
                member.setWishCount(statisticsMemberVo.getWishCount());
                member.setEasyCount(statisticsMemberVo.getEasyCount());
                member.setActivityCount(member.getPartyActivityCount() + member.getVolunteerActivityCount());
                member.setActivityDuration(member.getPartyActivityDuration() + member.getVolunteerActivityDuration());
            }
        });
        return R.ok(memberPage);
    }
    /**
     * 根据组织id查询组织下统计数据
     * @param statisticsOrgDto  请求参数
     * @return  组织下统计数据
     */
    @Override
    public R getOrgDataStatistics(ComDataStatisticsOrgDto statisticsOrgDto) {
        List<Long> orgIds = new ArrayList<>();
        Long communityId = statisticsOrgDto.getCommunityId();
        ComDataStatisticsOrgVo statisticsOrgVo = new ComDataStatisticsOrgVo();
        if(statisticsOrgDto.getOrgId() != null){
            ComPbOrgDO pbOrgDO = comPbOrgDAO.selectById(statisticsOrgDto.getOrgId());
            if(pbOrgDO == null){
                return R.fail("未查询到党组织");
            }
            //拼接党组织id
            if(pbOrgDO.getOneId() != null){
                orgIds.add(pbOrgDO.getOneId());
            }
            if(pbOrgDO.getTwoId() != null){
                orgIds.add(pbOrgDO.getTwoId());
            }
            if(pbOrgDO.getThirdId() != null){
                orgIds.add(pbOrgDO.getThirdId());
            }
            if(pbOrgDO.getFourId() != null){
                orgIds.add(pbOrgDO.getFourId());
            }
            if(pbOrgDO.getFiveId() != null){
                orgIds.add(pbOrgDO.getFiveId());
            }
        }
        //拼接查询开始结束时间
        String startTime = statisticsOrgDto.getYear() + "-01-01 00:00:00";
        String endTime = statisticsOrgDto.getYear() + "-12-31 23:59:59";
        ComDataStatisticsOrgVo statisticsVo = new ComDataStatisticsOrgVo();
        //查询统计左上数据
        statisticsVo = comPbMemberDAO.getOrgDataStatistics(communityId,orgIds);
        if(statisticsVo != null){
            BeanUtils.copyProperties(statisticsVo,statisticsOrgVo);
        }
        //查询左下数据
        statisticsVo = comPbMemberDAO.getOrgDataStatisticsLeftDown(communityId,orgIds,startTime,endTime);
        if(statisticsVo != null){
            statisticsOrgVo.setParticipateVolunteerActivityDuration(statisticsVo.getParticipateVolunteerActivityDuration());
            statisticsOrgVo.setParticipateVolunteerActivityNum(statisticsVo.getParticipateVolunteerActivityNum());
            statisticsOrgVo.setParticipatePartyActivityNum(statisticsVo.getParticipatePartyActivityNum());
        }
        //查询党员数据
        IPage<PartyBuildingMemberVO> partyMemberPage = comPbMemberDAO.getOrgDataStatisticsMember(new Page(statisticsOrgDto.getPageNum()
                ,statisticsOrgDto.getPageSize()),communityId,orgIds);
        if(partyMemberPage.getRecords() != null && !partyMemberPage.getRecords().isEmpty()){
            statisticsOrgVo.setPartyMemberList(partyMemberPage.getRecords());
        }
        List<String> startDateList = DateUtils.getYearFirstMonths(statisticsOrgDto.getYear());
        List<String> endDateList = DateUtils.getYearLastMonths(statisticsOrgDto.getYear());
        List<String> completeWishList = new ArrayList<>();
        List<String> cumulativeWishList = new ArrayList<>();
        List<String> completeEasyList = new ArrayList<>();
        List<String> cumulativeEasyList = new ArrayList<>();
        for (int i = 0; i < startDateList.size(); i++) {
            Map<String,Object> statisticsMap = comPbMemberDAO.getOrgDataStatisticsRightDown(communityId,orgIds, startDateList.get(i) + " 00:00:00", endDateList.get(i) + " 23:59:59");
            if(statisticsMap != null){
                completeWishList.add(statisticsMap.get("completeWishNum").toString());
                cumulativeWishList.add(statisticsMap.get("cumulativeWishNum").toString());
                completeEasyList.add(statisticsMap.get("completeEasyNum").toString());
                cumulativeEasyList.add(statisticsMap.get("cumulativeEasyNum").toString());
                if(i == startDateList.size() - 1){
                    statisticsOrgVo.setWishNum(statisticsMap.get("cumulativeWishNum").toString());
                    statisticsOrgVo.setEasyNum(statisticsMap.get("cumulativeEasyNum").toString());
                }
            }
        }
        statisticsOrgVo.setCompleteEasyList(completeEasyList);
        statisticsOrgVo.setCompleteWishList(completeWishList);
        statisticsOrgVo.setCumulativeWishList(cumulativeWishList);
        statisticsOrgVo.setCumulativeEasyList(cumulativeEasyList);
        Integer partyMemberNum = statisticsOrgVo.getPartyMemberNum();
        if (Objects.nonNull(partyMemberNum) && partyMemberNum.intValue() > 0) {
            Integer formalPartyMemberNum = statisticsOrgVo.getFormalPartyMemberNum();
            if (Objects.nonNull(formalPartyMemberNum) && formalPartyMemberNum.intValue() > 0) {
                statisticsOrgVo.setFormalPartyMemberNumPercent(new BigDecimal(formalPartyMemberNum/partyMemberNum).setScale(2));
            }
            Integer preparePartyMemberNum = statisticsOrgVo.getPreparePartyMemberNum();
            if (Objects.nonNull(preparePartyMemberNum) && preparePartyMemberNum.intValue() > 0) {
                statisticsOrgVo.setPreparePartyMemberNumPercent(new BigDecimal(preparePartyMemberNum/partyMemberNum).setScale(2));
            }
        }
        return R.ok(statisticsOrgVo);
    }
    /**
     * 查询党组织表头统计数据
     * @param communityId
     *            社区id
     * @return  党组织表头统计数据
     */
    @Override
    public R getHeaderOrgDataStatistics(Long communityId) {
        ComDataStatisticsHeaderOrgVo headerOrgVo = comPbMemberDAO.getHeaderOrgDataStatistics(communityId);
        if(headerOrgVo != null){
            if(headerOrgVo.getVillageNum() == null || headerOrgVo.getVillageNum().equals(0)){
                headerOrgVo.setVillageRate(BigDecimal.ZERO);
            }else{
                headerOrgVo.setVillageRate(BigDecimal.valueOf(headerOrgVo.getAreaNum()).divide(BigDecimal.valueOf(headerOrgVo.getVillageNum())
                        ,4,BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100)));
            }
        }
        return R.ok(headerOrgVo);
    }
    /**
     * 党员数据统计-党员导出数据查询
     * @param statisticsMemberDto   请求参数
     * @return  党员导出数据
     */
    @Override
    public R exportDataStatisticsMember(PageComDataStatisticsMemberDto statisticsMemberDto) {
        List<ComDataStatisticsMemberExcelVo> memberList = comPbMemberDAO.exportDataStatisticsMember(statisticsMemberDto);
        memberList.forEach(member -> {
            //查询党员统计数据
            ComDataStatisticsMemberVo statisticsMemberVo = comPbMemberDAO.getMemberStatistics(member.getUserId(),member.getCommunityId());
            if(statisticsMemberVo != null){
                member.setPartyActivityCount(statisticsMemberVo.getPartyActivityCount());
                member.setPartyActivityDuration(statisticsMemberVo.getPartyActivityDuration());
                member.setVolunteerActivityCount(statisticsMemberVo.getVolunteerActivityCount());
                member.setVolunteerActivityDuration(statisticsMemberVo.getVolunteerActivityDuration());
                member.setVolunteerActivityIntegral(statisticsMemberVo.getVolunteerActivityIntegral());
                member.setWishCount(statisticsMemberVo.getWishCount());
                member.setEasyCount(statisticsMemberVo.getEasyCount());
                member.setActivityCount(member.getPartyActivityCount() + member.getVolunteerActivityCount());
                member.setActivityDuration(member.getPartyActivityDuration() + member.getVolunteerActivityDuration());
            }
        });
        return R.ok(memberList);
    }
    /**
     * 党委导入接口
     * @param list 数据列表
     * @param communityId   社区id
     * @param userId    用户id
     * @return  导入结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R importPbMemberRole(List<ComPbMemberRoleExcelVo> list, Long communityId, Long userId) {
        ArrayList<ComPbMemberRoleErrorExcelVo> mistakes = Lists.newArrayList();
        ArrayList<ComPbMemberRoleDO> saveList = Lists.newArrayList();
        Date nowDate = new Date();
        if(list != null && list.size() > 0){
            list.forEach(memberRole -> {
                ComPbMemberRoleDO memberRoleDO = comPbMemberRoleDAO.selectOne(new QueryWrapper<ComPbMemberRoleDO>().lambda()
                        .eq(ComPbMemberRoleDO::getCommunityId,communityId).eq(ComPbMemberRoleDO::getIdCard,memberRole.getIdCard()));
                if(memberRoleDO != null){
                    ComPbMemberRoleErrorExcelVo roleErrorExcelVo = new ComPbMemberRoleErrorExcelVo();
                    BeanUtils.copyProperties(memberRole,roleErrorExcelVo);
                    roleErrorExcelVo.setError("该党委已存在,不可重复导入");
                    mistakes.add(roleErrorExcelVo);
                }else{
                    memberRoleDO = new ComPbMemberRoleDO();
                    BeanUtils.copyProperties(memberRole,memberRoleDO);
                    Integer type = ComPbMemberRoleTypeEnum.getCodeByName(memberRole.getTypeName());
                    if(type.equals(0)){
                        ComPbMemberRoleErrorExcelVo roleErrorExcelVo = new ComPbMemberRoleErrorExcelVo();
                        BeanUtils.copyProperties(memberRole,roleErrorExcelVo);
                        roleErrorExcelVo.setError("党委标签不存在,请核对后再重新导入");
                        mistakes.add(roleErrorExcelVo);
                        return;
                    }else{
                        memberRoleDO.setType(type);
                    }
                    try {
                        Date joinTime = DateUtils.stringToDate(memberRole.getJoinTime(),DateUtils.yyyyMMdd_format);
                        memberRoleDO.setJoinTime(joinTime);
                    } catch (Exception e) {
                        ComPbMemberRoleErrorExcelVo roleErrorExcelVo = new ComPbMemberRoleErrorExcelVo();
                        BeanUtils.copyProperties(memberRole,roleErrorExcelVo);
                        roleErrorExcelVo.setError("入党时间格式错误,请按照正确格式填写,如:2022-01-01");
                        mistakes.add(roleErrorExcelVo);
                        return;
                    }
                    try {
                        Date employmentTime = DateUtils.stringToDate(memberRole.getEmploymentTime(),DateUtils.yyyyMMdd_format);
                        memberRoleDO.setEmploymentTime(employmentTime);
                    } catch (Exception e) {
                        ComPbMemberRoleErrorExcelVo roleErrorExcelVo = new ComPbMemberRoleErrorExcelVo();
                        BeanUtils.copyProperties(memberRole,roleErrorExcelVo);
                        roleErrorExcelVo.setError("转正时间格式错误,请按照正确格式填写,如:2022-01-01");
                        mistakes.add(roleErrorExcelVo);
                        return;
                    }
                    Integer userCount = comPbMemberRoleDAO.getSysUserByIdCardCount(memberRole.getIdCard());
                    memberRoleDO.setIsReg(userCount > 0 ? 1 : 2);
                    memberRoleDO.setCommunityId(communityId);
                    saveList.add(memberRoleDO);
                }
            });
        }
        if(saveList.size() > 0){
            saveList.forEach(save -> {
                comPbMemberRoleDAO.insert(save);
            });
        }
        if(mistakes.size() > 0){
            return R.fail(mistakes);
        }
        return R.ok();
    }
    @Override
    public R exportPartyMember(PagePartyOrganizationVO pagePartyOrganizationVO) {
        return R.ok(comPbMemberDAO.exportPartyMemberList(pagePartyOrganizationVO));
    }
    @Override
    public R checkMember(String idCard) {
        List<ComPbMemberDO> list=comPbMemberDAO.selectList(new QueryWrapper<ComPbMemberDO>().lambda().eq(ComPbMemberDO::getIdCard,idCard));
        return R.ok(CollectionUtils.isEmpty(list));
    }
}