From c76581d8cb8cef594f666fc93befaae10cb6872e Mon Sep 17 00:00:00 2001 From: oneao Date: Fri, 26 Dec 2025 21:35:12 +0800 Subject: [PATCH] u --- .../auth/identity/model/vo/AuthLoginVO.java | 31 +++-- .../identity/service/AuthIdentityService.java | 28 ++-- .../link56/company/mapper/CompanyMapper.java | 4 +- .../company/mapper/CompanyUserMapper.java | 4 +- .../model/dto/UpdateCompanyUserDTO.java | 2 + .../model/po/{CompanyPO.java => Company.java} | 2 +- .../{CompanyUserPO.java => CompanyUser.java} | 5 +- .../company/model/vo/CompanyDetailVO.java | 3 +- .../company/model/vo/QueryCompanyUserVO.java | 2 + .../company/service/CompanyService.java | 73 ++++++----- .../company/service/CompanyUserService.java | 121 ++++++++++-------- .../link56/post/model/vo/PostCommentVO.java | 2 +- .../link56/post/model/vo/PostCompanyVO.java | 2 + .../post/service/PostCommentService.java | 87 +++++++------ .../cn/link56/post/service/PostService.java | 15 +-- .../link56/post/mapper/PostCommentMapper.xml | 4 +- .../src/components/SafeImage.vue | 74 +++++++++++ .../src/layout/components/header.vue | 4 +- .../link56-frontend-new/src/router/index.ts | 2 +- .../link56-frontend-new/src/store/user.ts | 3 + .../src/types/auth/index.ts | 20 +-- .../src/types/company/user.ts | 5 + .../src/types/post/index.ts | 2 +- .../link56-frontend-new/src/utils/time.ts | 66 ++++++++++ .../src/views/auth/login.vue | 15 +-- .../company/{detail/index.vue => detail.vue} | 13 +- .../src/views/company/index.vue | 29 +++-- .../post/detail/components/comment-list.vue | 111 ++++++++++------ .../src/views/post/detail/index.vue | 36 ++++-- .../src/views/settings/creator/home/index.vue | 31 +++-- .../src/views/settings/index.vue | 1 + .../src/views/settings/info/company.vue | 5 +- .../info/user/components/EditDrawer.vue | 6 + .../src/views/settings/info/user/index.vue | 8 ++ 34 files changed, 539 insertions(+), 277 deletions(-) rename code/link56/link56-backend/src/main/java/cn/link56/company/model/po/{CompanyPO.java => Company.java} (98%) rename code/link56/link56-backend/src/main/java/cn/link56/company/model/po/{CompanyUserPO.java => CompanyUser.java} (94%) create mode 100644 code/link56/link56-frontend-new/src/components/SafeImage.vue rename code/link56/link56-frontend-new/src/views/company/{detail/index.vue => detail.vue} (93%) diff --git a/code/link56/link56-backend/src/main/java/cn/link56/auth/identity/model/vo/AuthLoginVO.java b/code/link56/link56-backend/src/main/java/cn/link56/auth/identity/model/vo/AuthLoginVO.java index f3d08c57..943fa720 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/auth/identity/model/vo/AuthLoginVO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/auth/identity/model/vo/AuthLoginVO.java @@ -5,17 +5,32 @@ import lombok.Data; import lombok.NoArgsConstructor; @Data -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor public class AuthLoginVO { - private Long companyId; - private String companyLogo; - private String companyName; - private Long userId; - private Integer userRole; - private String userName; - private String userPosition; + private Company company; + private User user; private String token; + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class Company { + private Long id; + private String logo; + private String name; + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class User { + private Long id; + private Integer role; + private String name; + private String position; + private String avatar; + } } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/auth/identity/service/AuthIdentityService.java b/code/link56/link56-backend/src/main/java/cn/link56/auth/identity/service/AuthIdentityService.java index 10819289..1bf539b6 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/auth/identity/service/AuthIdentityService.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/auth/identity/service/AuthIdentityService.java @@ -9,8 +9,8 @@ import cn.link56.auth.identity.model.vo.AuthLoginVO; import cn.link56.auth.token.model.AuthToken; import cn.link56.auth.token.model.TokenPayload; import cn.link56.auth.token.service.AuthTokenService; -import cn.link56.company.model.po.CompanyPO; -import cn.link56.company.model.po.CompanyUserPO; +import cn.link56.company.model.po.Company; +import cn.link56.company.model.po.CompanyUser; import cn.link56.auth.identity.model.dto.AuthRegisterDTO; import cn.link56.company.service.CompanyService; import cn.link56.company.service.CompanyUserService; @@ -61,7 +61,7 @@ public class AuthIdentityService { long companyId = IdGenerator.nextId(); companyService.save( - new CompanyPO() + new Company() .setId(companyId) .setName(company.getName()) .setIndustry(StringUtils.join(company.getIndustries(),",")) @@ -72,7 +72,7 @@ public class AuthIdentityService { ); companyUserService.save( - new CompanyUserPO() + new CompanyUser() .setId(IdGenerator.nextId()) .setCompanyId(companyId) .setName(admin.getName()) @@ -85,7 +85,7 @@ public class AuthIdentityService { } public AuthLoginVO loginByPassword(AuthLoginPasswordDTO dto) { - CompanyUserPO user = companyUserService.loginByEmailAndPassword(dto.getEmail(), dto.getPassword()); + CompanyUser user = companyUserService.loginByEmailAndPassword(dto.getEmail(), dto.getPassword()); if (user == null) { throw new BusinessException("邮箱或密码错误"); } @@ -107,7 +107,7 @@ public class AuthIdentityService { throw new BusinessException("邮箱或验证码失效"); } - CompanyUserPO user = companyUserService.loginByEmail(email); + CompanyUser user = companyUserService.loginByEmail(email); if (user == null) { throw new BusinessException("邮箱不存在"); } @@ -118,8 +118,8 @@ public class AuthIdentityService { /** * 公共逻辑:根据用户生成 LoginVO */ - private AuthLoginVO buildLoginVO(CompanyUserPO user) { - CompanyPO company = companyService.getById(user.getCompanyId()); + private AuthLoginVO buildLoginVO(CompanyUser user) { + Company company = companyService.getById(user.getCompanyId()); TokenPayload tokenPayload = new TokenPayload(); tokenPayload.setCompanyId(user.getCompanyId()); @@ -127,18 +127,22 @@ public class AuthIdentityService { AuthToken authToken = tokenService.generateToken(tokenPayload); - return new AuthLoginVO( + AuthLoginVO.Company companyVO = new AuthLoginVO.Company( company.getId(), company.getLogo(), - company.getName(), + company.getName() + ); + AuthLoginVO.User userVO = new AuthLoginVO.User( user.getId(), user.getRole(), user.getName(), user.getPosition(), - - authToken.getToken() + user.getAvatar() ); + + return new AuthLoginVO(companyVO, userVO, authToken.getToken()); } + } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/mapper/CompanyMapper.java b/code/link56/link56-backend/src/main/java/cn/link56/company/mapper/CompanyMapper.java index 7ccad806..0549c824 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/mapper/CompanyMapper.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/mapper/CompanyMapper.java @@ -1,13 +1,13 @@ package cn.link56.company.mapper; import cn.link56.company.model.middle.RecommendCompanyRow; -import cn.link56.company.model.po.CompanyPO; +import cn.link56.company.model.po.Company; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper -public interface CompanyMapper extends BaseMapper { +public interface CompanyMapper extends BaseMapper { List listRecommend(); } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/mapper/CompanyUserMapper.java b/code/link56/link56-backend/src/main/java/cn/link56/company/mapper/CompanyUserMapper.java index df6767c3..522a48bd 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/mapper/CompanyUserMapper.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/mapper/CompanyUserMapper.java @@ -1,9 +1,9 @@ package cn.link56.company.mapper; -import cn.link56.company.model.po.CompanyUserPO; +import cn.link56.company.model.po.CompanyUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper -public interface CompanyUserMapper extends BaseMapper { +public interface CompanyUserMapper extends BaseMapper { } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/UpdateCompanyUserDTO.java b/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/UpdateCompanyUserDTO.java index d3bb4838..7c78d128 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/UpdateCompanyUserDTO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/UpdateCompanyUserDTO.java @@ -24,4 +24,6 @@ public class UpdateCompanyUserDTO { private String name; private String phone; private String canuse; + + private String avatar; } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/model/po/CompanyPO.java b/code/link56/link56-backend/src/main/java/cn/link56/company/model/po/Company.java similarity index 98% rename from code/link56/link56-backend/src/main/java/cn/link56/company/model/po/CompanyPO.java rename to code/link56/link56-backend/src/main/java/cn/link56/company/model/po/Company.java index b3d7c267..33bda6a4 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/model/po/CompanyPO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/model/po/Company.java @@ -17,7 +17,7 @@ import java.util.Date; @NoArgsConstructor @TableName("b_company") @Accessors(chain = true) -public class CompanyPO { +public class Company { @TableId(value = "b_id") private Long id; diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/model/po/CompanyUserPO.java b/code/link56/link56-backend/src/main/java/cn/link56/company/model/po/CompanyUser.java similarity index 94% rename from code/link56/link56-backend/src/main/java/cn/link56/company/model/po/CompanyUserPO.java rename to code/link56/link56-backend/src/main/java/cn/link56/company/model/po/CompanyUser.java index e568dfe9..8a6be744 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/model/po/CompanyUserPO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/model/po/CompanyUser.java @@ -17,7 +17,7 @@ import java.util.Date; @NoArgsConstructor @TableName("b_company_user") @Accessors(chain = true) -public class CompanyUserPO { +public class CompanyUser { @TableId(value = "b_id") private Long id; @@ -42,6 +42,9 @@ public class CompanyUserPO { @TableField("b_position") private String position; + @TableField("b_avatar") + private String avatar; + @TableField("b_canuse") private String canuse; diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/model/vo/CompanyDetailVO.java b/code/link56/link56-backend/src/main/java/cn/link56/company/model/vo/CompanyDetailVO.java index 3a85520a..0fae5d7d 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/model/vo/CompanyDetailVO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/model/vo/CompanyDetailVO.java @@ -26,7 +26,7 @@ public class CompanyDetailVO { @Data @AllArgsConstructor @NoArgsConstructor - public static class User{ + public static class User { private Long id; private Long companyId; private String email; @@ -34,5 +34,6 @@ public class CompanyDetailVO { private Integer role; private String position; private String name; + private String avatar; } } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/model/vo/QueryCompanyUserVO.java b/code/link56/link56-backend/src/main/java/cn/link56/company/model/vo/QueryCompanyUserVO.java index 2ce315eb..6ccb2f39 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/model/vo/QueryCompanyUserVO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/model/vo/QueryCompanyUserVO.java @@ -17,5 +17,7 @@ public class QueryCompanyUserVO { private String email; private String phone; + private String avatar; + private String canuse; } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyService.java b/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyService.java index 7ef71f65..30577988 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyService.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyService.java @@ -7,8 +7,8 @@ import cn.link56.company.mapper.CompanyMapper; import cn.link56.company.model.dto.QueryCompanyDTO; import cn.link56.company.model.dto.UpdateCompanyDTO; import cn.link56.company.model.middle.RecommendCompanyRow; -import cn.link56.company.model.po.CompanyPO; -import cn.link56.company.model.po.CompanyUserPO; +import cn.link56.company.model.po.Company; +import cn.link56.company.model.po.CompanyUser; import cn.link56.company.model.vo.CompanyDetailVO; import cn.link56.company.model.vo.QueryCompanyVO; import cn.link56.company.model.vo.RecommendCompanyVO; @@ -29,7 +29,7 @@ import java.util.List; import java.util.stream.Collectors; @Service -public class CompanyService extends ServiceImpl { +public class CompanyService extends ServiceImpl { @Resource private CompanyMapper companyMapper; @Resource @@ -67,9 +67,9 @@ public class CompanyService extends ServiceImpl { } public List listHot() { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(CompanyPO::getHotRecommend, "1") - .select(CompanyPO::getId, CompanyPO::getName); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Company::getHotRecommend, "1") + .select(Company::getId, Company::getName); return companyMapper.selectList(queryWrapper) .stream() @@ -86,8 +86,8 @@ public class CompanyService extends ServiceImpl { */ public boolean isNameExists(String name) { Long count = companyMapper.selectCount( - new LambdaQueryWrapper() - .eq(CompanyPO::getName, name) + new LambdaQueryWrapper() + .eq(Company::getName, name) ); return count > 0; } @@ -97,8 +97,8 @@ public class CompanyService extends ServiceImpl { */ public boolean isPhoneExists(String phone) { Long count = companyMapper.selectCount( - new LambdaQueryWrapper() - .eq(CompanyPO::getPhone, phone) + new LambdaQueryWrapper() + .eq(Company::getPhone, phone) ); return count > 0; } @@ -108,8 +108,8 @@ public class CompanyService extends ServiceImpl { */ public boolean isEmailExists(String email) { Long count = companyMapper.selectCount( - new LambdaQueryWrapper() - .eq(CompanyPO::getEmail, email) + new LambdaQueryWrapper() + .eq(Company::getEmail, email) ); return count > 0; } @@ -123,19 +123,19 @@ public class CompanyService extends ServiceImpl { List industries = queryCompanyDTO.getIndustries(); // 分页 - Page companyPage = new Page<>(currentPage,pageSize); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Page companyPage = new Page<>(currentPage,pageSize); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); // 名称 if (StringUtils.isNotBlank(name)){ - queryWrapper.like(CompanyPO::getName,name); + queryWrapper.like(Company::getName,name); } // 地区 if (areas != null && !areas.isEmpty()){ queryWrapper.and(wrapper -> { for (String area : areas) { - wrapper.or(w -> w.like(CompanyPO::getArea, area)); + wrapper.or(w -> w.like(Company::getArea, area)); } }); } @@ -144,12 +144,12 @@ public class CompanyService extends ServiceImpl { if (industries != null && !industries.isEmpty()) { queryWrapper.and(wrapper -> { for (String industry : industries) { - wrapper.or(w -> w.like(CompanyPO::getIndustry, industry)); + wrapper.or(w -> w.like(Company::getIndustry, industry)); } }); } - queryWrapper.eq(CompanyPO::getCanuse,"1"); + queryWrapper.eq(Company::getCanuse,"1"); List result = companyMapper.selectList(companyPage, queryWrapper).stream().map(item -> { QueryCompanyVO queryCompanyVO = new QueryCompanyVO(); @@ -173,18 +173,18 @@ public class CompanyService extends ServiceImpl { } public CompanyDetailVO getCompanyDetail(Long companyId) { - CompanyPO companyPO = companyMapper.selectById(companyId); - List companyUserPOS = companyUserService.listByCompanyId(companyId); + Company company = companyMapper.selectById(companyId); + List companyUsers = companyUserService.listByCompanyId(companyId); CompanyDetailVO companyDetailVO = new CompanyDetailVO(); - BeanUtils.copyProperties(companyPO,companyDetailVO); - companyDetailVO.setAreas(Arrays.stream(companyPO.getArea().split(",")) + BeanUtils.copyProperties(company,companyDetailVO); + companyDetailVO.setAreas(Arrays.stream(company.getArea().split(",")) .collect(Collectors.toList())); - companyDetailVO.setIndustries(Arrays.stream(companyPO.getIndustry().split(",")) + companyDetailVO.setIndustries(Arrays.stream(company.getIndustry().split(",")) .collect(Collectors.toList())); - companyDetailVO.setUsers(companyUserPOS.stream() + companyDetailVO.setUsers(companyUsers.stream() .map(item -> { CompanyDetailVO.User user = new CompanyDetailVO.User(); BeanUtils.copyProperties(item, user); @@ -206,43 +206,42 @@ public class CompanyService extends ServiceImpl { String name = updateCompanyDTO.getName(); String phone = updateCompanyDTO.getPhone(); String email = updateCompanyDTO.getEmail(); - Date establishmentDate = updateCompanyDTO.getEstablishmentDate(); - String profile = updateCompanyDTO.getProfile(); - String description = updateCompanyDTO.getDescription(); - String logo = updateCompanyDTO.getLogo(); String area = StringUtils.join(updateCompanyDTO.getAreas(), ","); String industry = StringUtils.join(updateCompanyDTO.getIndustries(), ","); // 检查 - CompanyPO companyPO = companyMapper.selectById(id); - if (ObjectUtils.isEmpty(companyPO)){ + Company company = companyMapper.selectById(id); + if (ObjectUtils.isEmpty(company)){ throw new BusinessException("更新失败,该公司不存在"); } // 检查名称 - if (!companyPO.getName().equals(name) && isNameExists(name)){ + if (!company.getName().equals(name) && isNameExists(name)){ throw new BusinessException("公司名称已存在"); } // 检查联系电话 - if (!StringUtils.equals(phone, companyPO.getPhone()) + if (!StringUtils.equals(phone, company.getPhone()) && isPhoneExists(phone)) { throw new BusinessException("公司联系电话已存在"); } // 检查邮箱 - if (!StringUtils.equals(email, companyPO.getEmail()) + if (!StringUtils.equals(email, company.getEmail()) && isEmailExists(email)) { throw new BusinessException("公司联系邮箱已存在"); } // 更新 - BeanUtils.copyProperties(updateCompanyDTO,companyPO); + BeanUtils.copyProperties(updateCompanyDTO, company); - companyPO.setArea(area); - companyPO.setIndustry(industry); + company.setArea(area); + company.setIndustry(industry); // 保存更新后的公司信息 - companyMapper.updateById(companyPO); + companyMapper.updateById(company); + + // 更新用户头像 + companyUserService.updateCompanyAvatar(company.getId(),company.getLogo()); } } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyUserService.java b/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyUserService.java index ecaccf0f..0d4f886f 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyUserService.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyUserService.java @@ -9,7 +9,7 @@ import cn.link56.company.model.dto.AddCompanyUserDTO; import cn.link56.company.model.dto.DeleteCompanyUserDTO; import cn.link56.company.model.dto.QueryCompanyUserDTO; import cn.link56.company.model.dto.UpdateCompanyUserDTO; -import cn.link56.company.model.po.CompanyUserPO; +import cn.link56.company.model.po.CompanyUser; import cn.link56.company.model.vo.QueryCompanyUserVO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -26,7 +26,7 @@ import java.util.List; import java.util.stream.Collectors; @Service -public class CompanyUserService extends ServiceImpl { +public class CompanyUserService extends ServiceImpl { @Resource private CompanyUserMapper companyUserMapper; @@ -41,8 +41,8 @@ public class CompanyUserService extends ServiceImpl() - .eq(CompanyUserPO::getEmail, email) + new LambdaQueryWrapper() + .eq(CompanyUser::getEmail, email) ); return count > 0; } @@ -54,13 +54,29 @@ public class CompanyUserService extends ServiceImpl() - .eq(CompanyUserPO::getPhone, phone) + new LambdaQueryWrapper() + .eq(CompanyUser::getPhone, phone) ); return count > 0; } + public void updateCompanyAvatar(Long companyId, String avatar) { + if (StringUtils.isBlank(avatar)) { + return; + } + + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(CompanyUser::getCompanyId, companyId) + .and(w -> w.isNull(CompanyUser::getAvatar) + .or() + .eq(CompanyUser::getAvatar, "")) + .set(CompanyUser::getAvatar, avatar); + + companyUserMapper.update(wrapper); + } + + /** * 校验当前用户是否有权限操作指定的公司 * @param companyId 当前公司ID @@ -69,10 +85,10 @@ public class CompanyUserService extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(CompanyUserPO::getEmail,email) - .eq(CompanyUserPO::getPassword,password); + public CompanyUser loginByEmailAndPassword(String email, String password){ + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CompanyUser::getEmail,email) + .eq(CompanyUser::getPassword,password); return companyUserMapper.selectOne(queryWrapper); } - public CompanyUserPO loginByEmail(String email){ - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(CompanyUserPO::getEmail,email); + public CompanyUser loginByEmail(String email){ + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CompanyUser::getEmail,email); return companyUserMapper.selectOne(queryWrapper); } - public List listByCompanyId(Long companyId){ - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(CompanyUserPO::getCompanyId,companyId); + public List listByCompanyId(Long companyId){ + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CompanyUser::getCompanyId,companyId); return companyUserMapper.selectList(queryWrapper); } @@ -132,34 +148,34 @@ public class CompanyUserService extends ServiceImpl queryPage = new Page<>(currentPage,pageSize); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Page queryPage = new Page<>(currentPage,pageSize); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(CompanyUserPO::getCompanyId,companyId); + queryWrapper.eq(CompanyUser::getCompanyId,companyId); if (StringUtils.isNotBlank(name)){ - queryWrapper.like(CompanyUserPO::getName,name); + queryWrapper.like(CompanyUser::getName,name); } if (StringUtils.isNotBlank(email)){ - queryWrapper.like(CompanyUserPO::getEmail,email); + queryWrapper.like(CompanyUser::getEmail,email); } if (StringUtils.isNotBlank(phone)){ - queryWrapper.like(CompanyUserPO::getPhone,phone); + queryWrapper.like(CompanyUser::getPhone,phone); } if (StringUtils.isNotBlank(position)){ - queryWrapper.like(CompanyUserPO::getPosition,position); + queryWrapper.like(CompanyUser::getPosition,position); } if (StringUtils.isNotBlank(canuse)){ - queryWrapper.eq(CompanyUserPO::getCanuse,canuse); + queryWrapper.eq(CompanyUser::getCanuse,canuse); } - List companyUserPOS = companyUserMapper.selectList(queryPage, queryWrapper); + List companyUsers = companyUserMapper.selectList(queryPage, queryWrapper); - List result = companyUserPOS.stream().map(item -> { + List result = companyUsers.stream().map(item -> { QueryCompanyUserVO queryCompanyUserVO = new QueryCompanyUserVO(); BeanUtils.copyProperties(item, queryCompanyUserVO); return queryCompanyUserVO; @@ -192,14 +208,14 @@ public class CompanyUserService extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.in(CompanyUserPO::getId, ids) - .eq(CompanyUserPO::getCompanyId, companyId) - .ne(CompanyUserPO::getRole, 0); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(CompanyUser::getId, ids) + .eq(CompanyUser::getCompanyId, companyId) + .ne(CompanyUser::getRole, 0); // 执行删除操作 companyUserMapper.delete(updateWrapper); diff --git a/code/link56/link56-backend/src/main/java/cn/link56/post/model/vo/PostCommentVO.java b/code/link56/link56-backend/src/main/java/cn/link56/post/model/vo/PostCommentVO.java index 2e326a3f..6c8642ca 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/post/model/vo/PostCommentVO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/post/model/vo/PostCommentVO.java @@ -22,7 +22,7 @@ public class PostCommentVO { @Data @AllArgsConstructor @NoArgsConstructor - public static class User{ + public static class User { private Long id; private Long companyId; private String name; diff --git a/code/link56/link56-backend/src/main/java/cn/link56/post/model/vo/PostCompanyVO.java b/code/link56/link56-backend/src/main/java/cn/link56/post/model/vo/PostCompanyVO.java index 11e27ef6..e9940213 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/post/model/vo/PostCompanyVO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/post/model/vo/PostCompanyVO.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.Date; import java.util.List; @Data @@ -14,6 +15,7 @@ public class PostCompanyVO { private String name; private String logo; private String profile; + private Date establishmentDate; private List areas; private List industries; } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/post/service/PostCommentService.java b/code/link56/link56-backend/src/main/java/cn/link56/post/service/PostCommentService.java index 1a103d9e..5d57a504 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/post/service/PostCommentService.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/post/service/PostCommentService.java @@ -41,61 +41,68 @@ public class PostCommentService extends ServiceImpl listPostComments(Long id) { + public List listPostComments(Long postId) { + // 1. 查询所有评论 - List list = postCommentMapper.selectComments(id); + List list = postCommentMapper.selectComments(postId); - // 2. 构建扁平化树形结构(所有子评论提升到根评论层级) - List rootComments = new ArrayList<>(); - Map commentMap = new HashMap<>(); - - // 2.1 初始化映射并收集根评论 + // 2. 构建 id -> comment 映射 + Map commentMap = new HashMap<>(list.size()); for (PostCommentVO comment : list) { + comment.setChildren(new ArrayList<>()); // 统一初始化 commentMap.put(comment.getId(), comment); - if (ObjectUtils.isEmpty(comment.getFatherId())) { - rootComments.add(comment); - comment.setChildren(new ArrayList<>()); // 提前初始化children - } } - // 2.2 遍历所有评论,将子评论挂到根祖先的children中 + // 3. 收集一级评论 + List rootComments = new ArrayList<>(); for (PostCommentVO comment : list) { - if (ObjectUtils.isEmpty(comment.getFatherId())) { - continue; // 跳过根评论 - } - - // 查找当前评论的根祖先(追溯到没有fatherId的祖先) - PostCommentVO rootAncestor = null; - Long currentFatherId = comment.getFatherId(); - while (true) { - PostCommentVO parent = commentMap.get(currentFatherId); - if (parent == null) break; // 父节点不存在,终止循环 - - if (ObjectUtils.isEmpty(comment.getFatherId())) { - rootAncestor = parent; // 找到根祖先 - break; - } else { - currentFatherId = parent.getFatherId(); // 继续向上查找 - } - } - - // 挂载到根祖先的children中 - if (rootAncestor != null && rootAncestor.getChildren() != null) { - rootAncestor.getChildren().add(comment); + if (comment.getFatherId() == null) { + rootComments.add(comment); } } - // 3. 按原始顺序排序(可选) - rootComments.forEach(root -> { - if (root.getChildren() != null) { - // 根据需求排序,例如按创建时间升序 - root.getChildren().sort(Comparator.comparing(PostCommentVO::getCreateTime)); + // 4. 将所有子评论挂到「根评论」的 children 中 + for (PostCommentVO comment : list) { + + // 跳过一级评论 + if (comment.getFatherId() == null) { + continue; } - }); + + PostCommentVO root = findRootComment(comment, commentMap); + if (root != null) { + root.getChildren().add(comment); + } + } + + // 5. 子评论排序(可选) + rootComments.forEach(root -> + root.getChildren().sort( + Comparator.comparing(PostCommentVO::getCreateTime) + ) + ); return rootComments; } + + private PostCommentVO findRootComment( + PostCommentVO comment, + Map commentMap) { + + PostCommentVO current = comment; + + while (current.getFatherId() != null) { + PostCommentVO parent = commentMap.get(current.getFatherId()); + if (parent == null) { + return null; // 数据异常,防御 + } + current = parent; + } + + return current; // fatherId == null 的就是根评论 + } + @Transactional public CreatePostCommentVO createPostComment(CreatePostCommentDTO dto) { PostComment postComment = new PostComment(); diff --git a/code/link56/link56-backend/src/main/java/cn/link56/post/service/PostService.java b/code/link56/link56-backend/src/main/java/cn/link56/post/service/PostService.java index ca111ba2..b390a6bc 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/post/service/PostService.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/post/service/PostService.java @@ -4,7 +4,7 @@ import cn.link56.common.BasePageVO; import cn.link56.common.context.UserContext; import cn.link56.common.exception.BusinessException; import cn.link56.common.utils.snowflake.idgen.IdGenerator; -import cn.link56.company.model.po.CompanyPO; +import cn.link56.company.model.po.Company; import cn.link56.company.service.CompanyService; import cn.link56.post.mapper.PostMapper; import cn.link56.post.model.dto.*; @@ -16,13 +16,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import javax.validation.constraints.NotNull; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -258,7 +256,6 @@ public class PostService extends ServiceImpl { Long viewTotal = postViewService.getTotalByPostId(id); Long commentTotal = postCommentService.getTotalByPostId(id); - postVO.setViewCount(viewTotal); postVO.setCommentCount(commentTotal); @@ -274,16 +271,16 @@ public class PostService extends ServiceImpl { } public PostCompanyVO getPostCompanyById(Long id) { - CompanyPO companyPO = companyService.getById(id); - if (companyPO == null){ + Company company = companyService.getById(id); + if (company == null){ throw new BusinessException("该公司不存在或已注销"); } PostCompanyVO postCompanyVO = new PostCompanyVO(); - BeanUtils.copyProperties(companyPO,postCompanyVO); + BeanUtils.copyProperties(company,postCompanyVO); - postCompanyVO.setAreas(Arrays.stream(StringUtils.split(companyPO.getArea(),",")).collect(Collectors.toList())); - postCompanyVO.setIndustries(Arrays.stream(StringUtils.split(companyPO.getIndustry(),",")).collect(Collectors.toList())); + postCompanyVO.setAreas(Arrays.stream(StringUtils.split(company.getArea(),",")).collect(Collectors.toList())); + postCompanyVO.setIndustries(Arrays.stream(StringUtils.split(company.getIndustry(),",")).collect(Collectors.toList())); return postCompanyVO; } diff --git a/code/link56/link56-backend/src/main/resources/cn/link56/post/mapper/PostCommentMapper.xml b/code/link56/link56-backend/src/main/resources/cn/link56/post/mapper/PostCommentMapper.xml index 1701ef77..5606f0a5 100644 --- a/code/link56/link56-backend/src/main/resources/cn/link56/post/mapper/PostCommentMapper.xml +++ b/code/link56/link56-backend/src/main/resources/cn/link56/post/mapper/PostCommentMapper.xml @@ -28,8 +28,8 @@