package cc.mrbird.febs.ai.service.impl; import cc.mrbird.febs.ai.entity.AiCompany; import cc.mrbird.febs.ai.entity.AiCompanyMemberApply; import cc.mrbird.febs.ai.entity.AiMember; import cc.mrbird.febs.ai.entity.AiMemberRole; import cc.mrbird.febs.ai.mapper.AiCompanyMapper; import cc.mrbird.febs.ai.mapper.AiCompanyMemberApplyMapper; import cc.mrbird.febs.ai.mapper.AiMemberRoleMapper; import cc.mrbird.febs.ai.req.company.ApiCompanyCodeEditDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerDto; import cc.mrbird.febs.ai.req.memberRole.ApiMemberRoleDto; import cc.mrbird.febs.ai.res.company.ApiCompanyVo; import cc.mrbird.febs.ai.res.memberRole.ApiMemberRoleVo; import cc.mrbird.febs.ai.service.AiMemberRoleService; import cc.mrbird.febs.ai.service.AiMemberService; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.mapper.MallMemberMapper; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * AI用户选择角色表 Service实现类 * * @author yourname * @date 2025-07-29 */ @Slf4j @Service @RequiredArgsConstructor public class AiMemberRoleServiceImpl extends ServiceImpl implements AiMemberRoleService { private final AiMemberRoleMapper aiMemberRoleMapper; private final AiCompanyMapper aiCompanyMapper; private final MallMemberMapper mallMemberMapper; private final AiMemberService aiMemberService; private final AiCompanyMemberApplyMapper aiCompanyMemberApplyMapper; @Override public List getListByQuery(LambdaQueryWrapper query) { return aiMemberRoleMapper.selectList( query); } @Override public FebsResponse memberRoleList() { List list = new ArrayList<>(); LambdaQueryWrapper query = Wrappers.lambdaQuery(AiMemberRole.class); query.eq(AiMemberRole::getState, 1); List listByQuery = this.getListByQuery(query); if (CollUtil.isNotEmpty(listByQuery)){ for (AiMemberRole aiMemberRole : listByQuery){ ApiMemberRoleVo apiMemberRoleVo = new ApiMemberRoleVo(); apiMemberRoleVo.setId(aiMemberRole.getId()); apiMemberRoleVo.setName(aiMemberRole.getName()); apiMemberRoleVo.setIconImg(aiMemberRole.getIconImg()); list.add(apiMemberRoleVo); } } return new FebsResponse().success().data(list); } @Override public FebsResponse memberRoleListV1(ApiMemberRoleDto dto) { List list = new ArrayList<>(); LambdaQueryWrapper query = Wrappers.lambdaQuery(AiMemberRole.class); if (StrUtil.isNotEmpty(dto.getCompanyId())){ query.eq(AiMemberRole::getCompanyId, dto.getCompanyId()); }else{ query.isNull(AiMemberRole::getCompanyId); } query.eq(AiMemberRole::getState, 1); List listByQuery = this.getListByQuery(query); if (CollUtil.isNotEmpty(listByQuery)){ for (AiMemberRole aiMemberRole : listByQuery){ ApiMemberRoleVo apiMemberRoleVo = new ApiMemberRoleVo(); apiMemberRoleVo.setId(aiMemberRole.getId()); apiMemberRoleVo.setName(aiMemberRole.getName()); apiMemberRoleVo.setIconImg(aiMemberRole.getIconImg()); list.add(apiMemberRoleVo); } } return new FebsResponse().success().data(list); } @Override public String getDefaultMemberRoleId() { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(AiMemberRole.class); queryWrapper.eq(AiMemberRole::getState, 1); queryWrapper.isNull(AiMemberRole::getCompanyId); queryWrapper.orderByAsc(AiMemberRole::getCreatedTime); queryWrapper.last("limit 1"); List listByQuery = this.getListByQuery(queryWrapper); if (CollUtil.isNotEmpty(listByQuery)){ for (AiMemberRole aiMemberRole : listByQuery){ return aiMemberRole.getId(); } } return null; } @Override public FebsResponse companyList() { List list = new ArrayList<>(); List aiCompanies = aiCompanyMapper.selectList(null); if (CollUtil.isNotEmpty(aiCompanies)){ for (AiCompany aiCompany : aiCompanies){ ApiCompanyVo apiCompanyVo = new ApiCompanyVo(); apiCompanyVo.setId(aiCompany.getId()); apiCompanyVo.setName(aiCompany.getName()); apiCompanyVo.setCode(aiCompany.getCode()); list.add(apiCompanyVo); } } return new FebsResponse().success().data(list); } @Override public FebsResponse editCompanyCode(ApiCompanyCodeEditDto dto) { String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); String companyId = dto.getCompanyCode(); if(ObjectUtil.isNotEmpty(dto.getCompanyCode())){ AiCompany aiCompany = aiCompanyMapper.selectOne( Wrappers.lambdaQuery(AiCompany.class) .eq(AiCompany::getCode, dto.getCompanyCode()) .last("limit 1") ); if (ObjectUtil.isEmpty(aiCompany)){ throw new FebsException("公司编码不存在"); } if (ObjectUtil.isNotEmpty(aiCompany)){ companyId = aiCompany.getId(); } } MallMember mallMember = mallMemberMapper.selectOne( Wrappers.lambdaQuery(MallMember.class) .eq(MallMember::getMemberUuid, memberUuid) .last("limit 1") ); mallMember.setCompanyId(companyId); mallMemberMapper.update(null, Wrappers.lambdaUpdate(MallMember.class) .set(MallMember::getCompanyId, companyId) .eq(MallMember::getId, mallMember.getId()) ); AiMember aiMember = aiMemberService.getById(memberUuid); if (ObjectUtil.isNotEmpty(aiMember) && StrUtil.isNotEmpty(mallMember.getCompanyId())){ aiMemberService.update(null, Wrappers.lambdaUpdate(AiMember.class) .set(AiMember::getCompanyId, mallMember.getCompanyId()) .eq(AiMember::getId, aiMember.getId()) ); } return new FebsResponse().success(); } @Override public FebsResponse applyCompanyCode(ApiCompanyCodeEditDto dto) { String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); String companyCode = dto.getCompanyCode(); if (StrUtil.isBlank(companyCode)){ throw new FebsException("请选择公司"); } AiCompany aiCompany = aiCompanyMapper.selectOne( Wrappers.lambdaQuery(AiCompany.class) .eq(AiCompany::getCode, dto.getCompanyCode()) .last("limit 1") ); if (ObjectUtil.isEmpty(aiCompany)){ throw new FebsException("公司编码不存在"); } List stateList = Arrays.asList(0, 1); List aiCompanyMemberApplies = aiCompanyMemberApplyMapper.selectList( Wrappers.lambdaQuery(AiCompanyMemberApply.class) .eq(AiCompanyMemberApply::getMemberId, memberUuid) .in(AiCompanyMemberApply::getState, stateList) ); if (CollUtil.isNotEmpty(aiCompanyMemberApplies)){ throw new FebsException("您已申请过公司,请勿重复申请"); } AiCompanyMemberApply entity = new AiCompanyMemberApply(); entity.setMemberId(memberUuid); entity.setCompanyCode(aiCompany.getCode()); entity.setCompanyName(aiCompany.getName()); aiCompanyMemberApplyMapper.insert(entity); return new FebsResponse().success(); } }