package com.doumee.service.business.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.CasesMapper; import com.doumee.dao.business.CategoryMapper; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.MultifileMapper; import com.doumee.dao.business.model.Cases; import com.doumee.dao.business.model.Category; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Multifile; import com.doumee.dao.system.model.SystemUser; import com.doumee.service.business.MemberService; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; /** * 会员信息表Service实现 * @author doumee * @date 2026-01-27 16:02:37 */ @Service public class MemberServiceImpl implements MemberService { @Autowired private MemberMapper memberMapper; @Autowired private CategoryMapper categoryMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private CasesMapper casesMapper; @Autowired private MultifileMapper multifileMapper; @Override public Integer create(Member member) { memberMapper.insert(member); return member.getId(); } @Override public void deleteById(Integer id) { memberMapper.deleteById(id); } @Override public void delete(Member member) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(member); memberMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } memberMapper.deleteBatchIds(ids); } @Override public void updateById(Member member) { memberMapper.updateById(member); } @Override public void updateByIdInBatch(List members) { if (CollectionUtils.isEmpty(members)) { return; } for (Member member: members) { this.updateById(member); } } @Override public Member findById(Integer id) { return memberMapper.selectById(id); } @Override public Member findOne(Member member) { QueryWrapper wrapper = new QueryWrapper<>(member).last("limit 1"); return memberMapper.selectOne(wrapper); } @Override public List findList(Member member) { QueryWrapper wrapper = new QueryWrapper<>(member); return memberMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); Member model = pageWrap.getModel(); queryWrapper.selectAll(Member.class) .selectAs(Category::getName, Member::getLevelName) .selectAs(SystemUser::getRealname, Member::getUpdateUserName) .leftJoin(SystemUser.class,SystemUser::getId,Member::getUpdateUser) .leftJoin(Category.class,Category::getId,Member::getLevelId) .apply(Objects.nonNull(model.getBustypeIds())," find_in_set( '["+model.getBustypeIds()+"]', t.BUSTYPE_IDS ) ") .apply(Objects.nonNull(model.getZhanquIds())," find_in_set( '["+model.getZhanquIds()+"]', t.ZHANQU_IDS ) ") .like(StringUtils.isNotBlank(model.getName()),Member::getName, model.getName()) .eq(Objects.nonNull(model.getStatus()),Member::getStatus, model.getStatus()) .in(Objects.nonNull(model.getLevelId()),Member::getStatus, model.getStatus()) .eq(Objects.nonNull(model.getCode()),Member::getCode, model.getCode()) .orderByDesc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.ZERO),Member::getFee) .orderByAsc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.ONE),Member::getFee) .orderByDesc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.TWO),Category::getDetail) .orderByAsc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.THREE),Category::getDetail) .orderByDesc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.FOUR),Member::getServeNum) ; if(Constants.equalsInteger(pageWrap.getModel().getQueryFlag(),Constants.ONE)){ queryWrapper.select("(select count(c.id) from cases c where c.deleted=0 and c.member_id=t.id)",Member::getCaseNum); } if(StringUtils.isNotBlank(model.getFieldIds())){ String [] fieldIds = model.getFieldIds().split(","); for (String s:fieldIds) { queryWrapper.apply("find_in_set( '["+s+"]' , t.FIELD_IDS )"); } } if (StringUtils.isNotBlank(model.getQueryZQCode())) { Category zhanqu = categoryMapper.selectOne(new QueryWrapper().lambda() .eq(Category::getDeleted,Constants.ZERO) .eq(Category::getStatus,Constants.ZERO) .eq(Category::getDetail,model.getQueryZQCode()) .last(" limit 1") ); if(Objects.nonNull(zhanqu)){ queryWrapper.apply(" find_in_set( '["+zhanqu.getId()+"]', t.ZHANQU_IDS ) "); } } IPage memberIPage = memberMapper.selectJoinPage(page, Member.class, queryWrapper); if(CollectionUtils.isNotEmpty(memberIPage.getRecords())){ List categoryList = categoryMapper.selectList(new QueryWrapper().lambda() .eq(Category::getDeleted, Constants.ZERO) // .eq(Category::getType,Constants.TWO) .orderByAsc(Category::getSortnum) ); String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.MEMBER_FILES).getCode(); String roleConfig = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.ROLE_CONFIG).getCode(); for (Member member:memberIPage.getRecords()) { if(CollectionUtils.isNotEmpty(categoryList)){ dealMemberField(member,categoryList); if(Constants.equalsInteger(pageWrap.getModel().getQueryFlag(),Constants.ONE)) { dealMemberCategoryList(member, categoryList); } } member.setFullImgurl(StringUtils.isNotBlank(member.getImgurl())?(path + member.getImgurl()):""); if(StringUtils.isBlank(roleConfig)||StringUtils.isBlank(model.getQueryUserRole()) || !roleConfig.contains(model.getQueryUserRole())){ member.setFee(null); } if(member.getJobYear()!=null){ member.setWorkYears(DateUtil.getCurrentYear( ) - member.getJobYear()+1); } } } return PageData.from(memberIPage); } private void dealMemberCategoryList(Member member, List categoryList) { member.setFieldList(new ArrayList<>()); member.setTypeList(new ArrayList<>()); member.setZqList(new ArrayList<>()); for(Category c:categoryList){ // 0=战区;1=商业化;2=擅长领域; if(Constants.equalsInteger(c.getType(),Constants.ZERO)&& StringUtils.contains(member.getZhanquIds(),"["+c.getId()+"]")){ //战区 member.getZqList().add(c); } if(Constants.equalsInteger(c.getType(),Constants.ONE)&& StringUtils.contains(member.getBustypeIds(),"["+c.getId()+"]")){ //商业化 member.getTypeList().add(c); } if(Constants.equalsInteger(c.getType(),Constants.TWO) && StringUtils.contains(member.getFieldIds(),"["+c.getId()+"]")){ //擅长领域 member.getFieldList().add(c); } } } @Override public Member findDetailById(Integer id,String queryUserRole) { Member member = memberMapper.selectJoinOne(Member.class, new MPJLambdaWrapper() .selectAll(Member.class) .select(" c1.NAME ", Member::getPromotionName) .select(" c2.NAME ", Member::getLevelName) .select(" TIMESTAMPDIFF(YEAR, CONCAT(t.JOB_YEAR , '-01-01'), now()) ",Member::getWorkYears) .leftJoin(" category c1 on t.POSITON = c1.id ") .leftJoin(" category c2 on t.LEVEL_ID = c2.id ") .eq(Member::getId, id) .last(" limit 1 ")); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(StringUtils.isNotBlank(member.getFieldIds())){ member.setFieldList( categoryMapper.selectList(new QueryWrapper().lambda() .eq(Category::getDeleted, Constants.ZERO) .eq(Category::getType,Constants.TWO) .apply(" find_in_set(CONCAT('[',id,']'),'"+member.getFieldIds()+"') ") .orderByAsc(Category::getSortnum) ) ); } String resourcePath = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode(); String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.CATEGORY_FILES).getCode(); String roleConfig = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.ROLE_CONFIG).getCode(); member.setFullImgurl(StringUtils.isNotBlank(member.getImgurl())?(resourcePath + path + member.getImgurl()):""); List casesList = casesMapper.selectList(new QueryWrapper().lambda() .eq(Cases::getMemberId,member.getId()) .eq(Cases::getDeleted,Constants.ZERO) .orderByDesc(Cases::getId) ); if(CollectionUtils.isNotEmpty(casesList)){ String casePath = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.CASES_FILES).getCode(); for (Cases cases:casesList) { List multifileList = multifileMapper.selectList(new QueryWrapper().lambda() .eq(Multifile::getObjId,cases.getId()) .eq(Multifile::getObjType,Constants.ONE) .eq(Multifile::getIsdeleted,Constants.ZERO) .orderByDesc(Multifile::getId) ); multifileList.forEach(multifile -> { multifile.setUrl(StringUtils.isNotBlank(multifile.getFileurl())?(resourcePath + casePath + multifile.getFileurl()):""); }); } member.setCasesList(casesList); } if(StringUtils.isBlank(roleConfig)||StringUtils.isBlank(queryUserRole) || !roleConfig.contains(queryUserRole)){ member.setFee(null); } return member; } public void dealMemberField(Member member,List categoryList){ if(CollectionUtils.isNotEmpty(categoryList)){ return; } String fieldNames = ""; for (Category category:categoryList) { if(member.getFieldIds().contains("["+category.getId()+"]")){ fieldNames = fieldNames + (StringUtils.isNotBlank(fieldNames)?",":"") + category.getName(); } } member.setFieldNames(fieldNames); } @Override public long count(Member member) { QueryWrapper wrapper = new QueryWrapper<>(member); return memberMapper.selectCount(wrapper); } }