k94314517
2025-04-21 16332a341801f80d27830d2ea4e683b4ab21167c
server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -10,17 +10,15 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.core.utils.qiyeweixin.QywxUtil;
import com.doumee.core.utils.qiyeweixin.model.response.QywxDepartInfoResponse;
import com.doumee.core.utils.qiyeweixin.model.response.QywxUserAttrInfoResponse;
import com.doumee.core.utils.qiyeweixin.model.response.QywxUserExtAttrResponse;
import com.doumee.core.utils.qiyeweixin.model.response.QywxUserListResponse;
import com.doumee.core.utils.qiyeweixin.model.response.*;
import com.doumee.dao.business.CompanyMapper;
import com.doumee.dao.business.CompanyMemberMapper;
import com.doumee.dao.business.ManagersMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.CompanyMember;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.dto.LoginH5DTO;
import com.doumee.dao.web.dto.UpdEmailDTO;
import com.doumee.service.business.MemberService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -39,6 +37,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * 人员信息表Service实现
@@ -56,6 +55,8 @@
    private CompanyMapper companyMapper;
    @Autowired
    private CompanyMemberMapper companyMemberMapper;
    @Autowired
    private ManagersMapper managersMapper;
    @Override
    public Integer create(Member member) {
@@ -84,7 +85,19 @@
    @Override
    public void updateById(Member member) {
        memberMapper.updateById(member);
        if( member.getId() == null){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                .eq(Member::getId,member.getId() )
                .set(Member::getSex,member.getSex() )
                .set(Member::getPhone,member.getPhone() )
                .set(Member::getRemark,member.getRemark() )
                .set(Member::getEmail,member.getEmail() )
                .set(Member::getEditDate,new Date())
                .set(Member::getEditor,user.getId())
        );
    }
    @Override
@@ -109,9 +122,53 @@
    }
    @Override
    public List<Member> findList(Member member) {
        QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
        return memberMapper.selectList(wrapper);
    public List<Member> findList(Member pageWrap) {
        pageWrap.setIsdeleted(Constants.ZERO);
        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper. selectAll(Member.class)
                .selectAs(SystemUser::getUsername,Member::getEditorName)
                .leftJoin(SystemUser.class,SystemUser::getId,Member::getEditor)
                .eq(pageWrap.getId() != null, Member::getId, pageWrap.getId())
                .eq(pageWrap.getCreator() != null, Member::getCreator, pageWrap.getCreator())
                .ge(pageWrap.getCreateDate() != null, Member::getCreateDate, Utils.Date.getStart(pageWrap.getCreateDate()))
                .le(pageWrap.getCreateDate() != null, Member::getCreateDate, Utils.Date.getEnd(pageWrap.getCreateDate()))
                .eq(pageWrap.getEditor() != null, Member::getEditor, pageWrap.getEditor())
                .ge(pageWrap.getEditDate() != null, Member::getEditDate, Utils.Date.getStart(pageWrap.getEditDate()))
                .le(pageWrap.getEditDate() != null, Member::getEditDate, Utils.Date.getEnd(pageWrap.getEditDate()))
                .eq(pageWrap.getIsdeleted() != null, Member::getIsdeleted, pageWrap.getIsdeleted())
                .like(pageWrap.getName() != null, Member::getName, pageWrap.getName())
                .eq(pageWrap.getRemark() != null, Member::getRemark, pageWrap.getRemark())
                .eq(pageWrap.getStatus() != null, Member::getStatus, pageWrap.getStatus())
                .eq(pageWrap.getSortnum() != null, Member::getSortnum, pageWrap.getSortnum())
                .eq(pageWrap.getImgurl() != null, Member::getImgurl, pageWrap.getImgurl())
                .eq(pageWrap.getType() != null, Member::getType, pageWrap.getType())
                .eq(pageWrap.getCompanyName() != null, Member::getCompanyName, pageWrap.getCompanyName())
                .eq(pageWrap.getPhone() != null, Member::getPhone, pageWrap.getPhone())
                .eq(pageWrap.getEmail() != null, Member::getEmail, pageWrap.getEmail())
                .eq(pageWrap.getSex() != null, Member::getSex, pageWrap.getSex())
                .eq(pageWrap.getCode() != null, Member::getCode, pageWrap.getCode())
                .eq(pageWrap.getQwId() != null, Member::getQwId, pageWrap.getQwId())
                .eq(pageWrap.getIdcard() != null, Member::getIdcard, pageWrap.getIdcard())
                .ge(pageWrap.getLastLoginDate() != null, Member::getLastLoginDate, Utils.Date.getStart(pageWrap.getLastLoginDate()))
                .le(pageWrap.getLastLoginDate() != null, Member::getLastLoginDate, Utils.Date.getEnd(pageWrap.getLastLoginDate()))
                .eq(pageWrap.getLoginCount() != null, Member::getLoginCount, pageWrap.getLoginCount());
        if (pageWrap.getKeyword() != null) {
            queryWrapper.and( ms->ms.like(Member::getName,pageWrap.getKeyword())
                    .or().like(Member::getPhone,pageWrap.getKeyword())
                    .or().like(Member::getCompanyName,pageWrap.getKeyword()));
        }
        if(pageWrap.getIncludeChild()!=null &&pageWrap.getIncludeChild() ){
            if(pageWrap.getCompanyId() !=null){
                //如果包含下级组织
                Company company = companyMapper.selectById(pageWrap.getCompanyId());//查询组织信息
                queryWrapper.exists("select (cm.id) from company_member cm where cm.company_id_path like '"+company.getIdPath()+"%'  and cm.member_id=t.id");
//                queryWrapper.likeRight(Company::getIdPath,company.getIdPath());
            }
        }else{
            //不包含下级组织
            queryWrapper.exists(pageWrap.getCompanyId()!=null,"select (cm.id) from company_member cm where cm.company_id='"+pageWrap.getCompanyId()+"'  and cm.member_id=t.id");
        }
        return memberMapper.selectJoinList(Member.class,queryWrapper);
    }
    @Override
@@ -137,7 +194,7 @@
                .eq(pageWrap.getModel().getSortnum() != null, Member::getSortnum, pageWrap.getModel().getSortnum())
                .eq(pageWrap.getModel().getImgurl() != null, Member::getImgurl, pageWrap.getModel().getImgurl())
                .eq(pageWrap.getModel().getType() != null, Member::getType, pageWrap.getModel().getType())
//                .eq(pageWrap.getModel().getCompanyId() != null, Member::getCompanyId, pageWrap.getModel().getCompanyId())
                .eq(pageWrap.getModel().getCompanyName() != null, Member::getCompanyName, pageWrap.getModel().getCompanyName())
                .eq(pageWrap.getModel().getPhone() != null, Member::getPhone, pageWrap.getModel().getPhone())
                .eq(pageWrap.getModel().getEmail() != null, Member::getEmail, pageWrap.getModel().getEmail())
                .eq(pageWrap.getModel().getSex() != null, Member::getSex, pageWrap.getModel().getSex())
@@ -161,10 +218,23 @@
            }
        }else{
            //不包含下级组织
            queryWrapper.exists("select (cm.id) from company_member cm where cm.company_id='"+pageWrap.getModel().getCompanyId()+"'  and cm.member_id=t.id");
            queryWrapper.exists(pageWrap.getModel().getCompanyId()!=null,"select (cm.id) from company_member cm where cm.company_id='"+pageWrap.getModel().getCompanyId()+"'  and cm.member_id=t.id");
        }
        if(Objects.nonNull(pageWrap.getModel().getIsSendCopy())&&Constants.equalsInteger(Constants.ONE,pageWrap.getModel().getIsSendCopy())){
            queryWrapper.apply(" t.id in ( select MEMBER_ID  from managers where  ISDELETED= 0 and STATUS = 0 and TYPE = 1  ) ");
        }
        queryWrapper.orderByAsc(Member::getCreateDate);
        return PageData.from(memberMapper.selectJoinPage(page,Member.class, queryWrapper));
        PageData<Member> record =  PageData.from(memberMapper.selectJoinPage(page,Member.class, queryWrapper));
        if(record!=null && record.getRecords()!=null){
            for(Member m : record.getRecords()){
                if(StringUtils.isNotBlank(m.getCompanyName())){
                    m.setCompanyNameList(m.getCompanyName().split(","));
                }
            }
        }
        return  record;
    }
    @Override
@@ -234,7 +304,7 @@
                        if(StringUtils.isNotBlank(comNames)){
                            comNames += ",";
                        }
                        comNames += c.getName();
                        comNames += c.getNamePath();
                    }
                }
                cm.setCompanyList(qycom);
@@ -358,4 +428,85 @@
        return  null;
    }
    @Override
    public Member getUserInfo(LoginH5DTO dto){
        if(Objects.isNull(dto)||
                StringUtils.isBlank(dto.getCode())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        String token = systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode();
        //根据code换区企业微信ID
        QywxBaseResponse<String> qwIdBaseResponse =  QywxUtil.getUserInfoByCode(token,dto.getCode());
        if(Objects.isNull(qwIdBaseResponse)||Objects.isNull(qwIdBaseResponse.getErrcode())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"企业微信登录码解析失败,请联系管理员");
        }
        if(!Constants.equalsInteger(qwIdBaseResponse.getErrcode(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"企业微信登录失败:"+qwIdBaseResponse.getErrmsg());
        }
        if(Objects.isNull(qwIdBaseResponse.getData())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"企业微信用户信息解析失败,请联系管理员");
        }
        String qwId = qwIdBaseResponse.getData();
//        String qwId = dto.getCode();
        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getQwId,qwId).eq(Member::getIsdeleted,Constants.ZERO).last(" limit 1 "));
        if(Objects.isNull(member)){
            //根据企业微信ID 查询用户信息
            QywxUserInfoResponse qywxUserInfoResponse =  QywxUtil.getUserInfo(token,qwId);
            if(Objects.isNull(qywxUserInfoResponse)||Objects.isNull(qywxUserInfoResponse.getErrcode())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"企业微信获取用户信息解析失败,请联系管理员");
            }
            if(!Constants.equalsInteger(qywxUserInfoResponse.getErrcode(),Constants.ZERO)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"企业微信获取用户信息失败:"+qwIdBaseResponse.getErrmsg());
            }
            member = new Member();
            member.setCreateDate(new Date());
            member.setStatus(Constants.ZERO);
            member.setIsdeleted(Constants.ZERO);
            member.setName(StringUtils.isNotBlank(qywxUserInfoResponse.getName())?qywxUserInfoResponse.getName():null);
            member.setImgurl(StringUtils.isNotBlank(qywxUserInfoResponse.getAvatar())?qywxUserInfoResponse.getAvatar():null);
            member.setPhone(StringUtils.isNotBlank(qywxUserInfoResponse.getMobile())?qywxUserInfoResponse.getMobile():null);
            member.setQwId(qwId);
            memberMapper.insert(member);
        }
        //查询是否有权限
        member.setDcaButton(managersMapper.selectCount(new QueryWrapper<Managers>().lambda()
                .eq(Managers::getIsdeleted,Constants.ZERO).eq(Managers::getMemberId,member.getId())
                .eq(Managers::getType,Constants.TWO))>Constants.ZERO?Constants.ONE:Constants.ZERO);
        return member;
    }
    @Override
    public void updEmail(UpdEmailDTO updEmailDTO){
        if(Objects.isNull(updEmailDTO)
            || StringUtils.isBlank(updEmailDTO.getEmail())
            || Objects.isNull(updEmailDTO.getUserId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Member member = memberMapper.selectById(updEmailDTO.getUserId());
        if(Objects.isNull(member)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"用户信息异常");
        }
        memberMapper.update(null,new UpdateWrapper<Member>().lambda().set(Member::getEmail,updEmailDTO.getEmail()).eq(Member::getId,member.getId()));
    }
    @Override
    public Member checkUserValid(Member member){
        if(Objects.isNull(member)||Objects.isNull(member.getId())){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到有效用户信息");
        }
        Member dbMember = memberMapper.selectById(member.getId());
        if(Objects.isNull(dbMember)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前登录用户已注销");
        }
        if(!Constants.equalsInteger(dbMember.getIsdeleted(),Constants.ZERO)||!Constants.equalsInteger(dbMember.getStatus(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前登录用户已禁用");
        }
        return dbMember;
    }
}