diff --git a/code/link56/link56-backend-old/.gitignore b/code/link56/link56-backend-old/.gitignore
new file mode 100644
index 00000000..5ff6309b
--- /dev/null
+++ b/code/link56/link56-backend-old/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/.idea/.gitignore b/code/link56/link56-backend-old/.idea/.gitignore
new file mode 100644
index 00000000..13566b81
--- /dev/null
+++ b/code/link56/link56-backend-old/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/code/link56/link56-backend-old/.idea/encodings.xml b/code/link56/link56-backend-old/.idea/encodings.xml
new file mode 100644
index 00000000..aa00ffab
--- /dev/null
+++ b/code/link56/link56-backend-old/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/.idea/inspectionProfiles/Project_Default.xml b/code/link56/link56-backend-old/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 00000000..8662c472
--- /dev/null
+++ b/code/link56/link56-backend-old/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/.idea/misc.xml b/code/link56/link56-backend-old/.idea/misc.xml
new file mode 100644
index 00000000..132404bc
--- /dev/null
+++ b/code/link56/link56-backend-old/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/.idea/uiDesigner.xml b/code/link56/link56-backend-old/.idea/uiDesigner.xml
new file mode 100644
index 00000000..2b63946d
--- /dev/null
+++ b/code/link56/link56-backend-old/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/.idea/vcs.xml b/code/link56/link56-backend-old/.idea/vcs.xml
new file mode 100644
index 00000000..ba43f699
--- /dev/null
+++ b/code/link56/link56-backend-old/.idea/vcs.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/pom.xml b/code/link56/link56-backend-old/pom.xml
new file mode 100644
index 00000000..1336e5ab
--- /dev/null
+++ b/code/link56/link56-backend-old/pom.xml
@@ -0,0 +1,225 @@
+
+
+ 4.0.0
+
+ cn.sslog
+ link56-backend
+ 1.0-SNAPSHOT
+
+
+ 1.8
+ UTF-8
+ UTF-8
+ 3.1.1
+ 2.5.15
+ 1.2.23
+ 3.10.3
+ 1.3.1
+ 3.5.10.1
+ 3.9.1
+ 3.12.0
+
+
+ 9.0.96
+ 1.2.13
+ 5.3.39
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+ org.springframework
+ spring-framework-bom
+ ${spring-framework.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+
+ ch.qos.logback
+ logback-core
+ ${logback.version}
+
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-core
+ ${tomcat.version}
+
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-el
+ ${tomcat.version}
+
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-websocket
+ ${tomcat.version}
+
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+
+
+ com.auth0
+ java-jwt
+ ${jwt.version}
+
+
+
+ net.sourceforge.jtds
+ jtds
+ ${jtds.version}
+
+
+
+ com.mysql
+ mysql-connector-j
+ 8.0.33
+ runtime
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis-plus.version}
+
+
+
+ com.baomidou
+ mybatis-plus-jsqlparser-4.9
+ ${mybatis-plus.version}
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons.version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+
+
+ jar
+
+
+
+ public
+ aliyun nexus
+ https://maven.aliyun.com/repository/public
+
+ true
+
+
+
+
+
+
+ public
+ aliyun nexus
+ https://maven.aliyun.com/repository/public
+
+ true
+
+
+ false
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.5.15
+
+ true
+
+
+
+
+ repackage
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/SSlogUserApiApplication.java b/code/link56/link56-backend-old/src/main/java/cn/link56/SSlogUserApiApplication.java
new file mode 100644
index 00000000..66ff46b1
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/SSlogUserApiApplication.java
@@ -0,0 +1,14 @@
+package cn.link56;
+
+import cn.link56.utils.snowflake.idgen.IdGenerator;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableAsync;
+
+@SpringBootApplication
+@EnableAsync
+public class SSlogUserApiApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(SSlogUserApiApplication.class,args);
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/common/BasePageDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/common/BasePageDTO.java
new file mode 100644
index 00000000..c453af11
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/common/BasePageDTO.java
@@ -0,0 +1,13 @@
+package cn.link56.common;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BasePageDTO {
+ private Integer page;
+ private Integer pageSize;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/common/BasePageVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/common/BasePageVO.java
new file mode 100644
index 00000000..f12bb3b5
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/common/BasePageVO.java
@@ -0,0 +1,19 @@
+package cn.link56.common;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Accessors(chain = true)
+public class BasePageVO {
+ private long total;
+ private List record;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/common/Result.java b/code/link56/link56-backend-old/src/main/java/cn/link56/common/Result.java
new file mode 100644
index 00000000..4a64c9ea
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/common/Result.java
@@ -0,0 +1,53 @@
+package cn.link56.common;
+
+import cn.link56.constants.ResponseStatusConstants;
+import lombok.Data;
+import lombok.NonNull;
+
+@Data
+public class Result {
+ private final Integer code; // 编码(必填)
+ private final String message; // 国际化消息键(必填)
+ @NonNull
+ private final T data; // 数据(可空)
+
+ // 私有构造函数,强制通过静态工厂方法创建实例
+ private Result(Integer code, String message, T data) {
+ this.code = code;
+ this.message = message;
+ this.data = data;
+ }
+
+ // 成功响应(无数据)
+ public static Result success() {
+ return new Result<>(ResponseStatusConstants.SUCCESS,"请求成功", null);
+ }
+
+ public static Result success(String message) {
+ return new Result<>(ResponseStatusConstants.SUCCESS, message, null);
+ }
+
+ // 成功响应(带数据)
+ public static Result success(@NonNull T data) {
+ return new Result<>(ResponseStatusConstants.SUCCESS,"请求成功", data);
+ }
+
+ // 成功响应(带数据)
+ public static Result success(@NonNull T data,String message) {
+ return new Result<>(ResponseStatusConstants.SUCCESS, message, data);
+ }
+
+
+ public static Result error(Integer code,String message){
+ return new Result<>(code, message, null);
+ }
+
+ public static Result error(String message){
+ return new Result<>(ResponseStatusConstants.ERROR, message, null);
+ }
+
+ public static Result error(){
+ return new Result<>(ResponseStatusConstants.ERROR, null,null);
+ }
+
+}
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/config/AutoFillMetaObjectHandler.java b/code/link56/link56-backend-old/src/main/java/cn/link56/config/AutoFillMetaObjectHandler.java
new file mode 100644
index 00000000..c4883654
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/config/AutoFillMetaObjectHandler.java
@@ -0,0 +1,32 @@
+package cn.link56.config;
+
+import cn.link56.context.UserContext;
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Component
+public class AutoFillMetaObjectHandler implements MetaObjectHandler {
+ // 格式化为年月日 时分秒格式的字符串
+ private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ @Override
+ public void insertFill(MetaObject metaObject) {
+ // 获取当前时间并格式化为字符串
+ String formattedDate = LocalDateTime.now().format(formatter);
+ String userId = UserContext.getUserId();
+ this.strictInsertFill(metaObject, "createId", String.class, userId); // 使用字符串类型保存
+ this.strictInsertFill(metaObject, "createTime", String.class, formattedDate); // 使用字符串类型保存
+ this.strictInsertFill(metaObject, "updateTime", String.class, formattedDate); // 同样填充 updatedAt
+ }
+
+ @Override
+ public void updateFill(MetaObject metaObject) {
+ // 获取当前时间并格式化为字符串
+ String formattedDate = LocalDateTime.now().format(formatter);
+ this.strictUpdateFill(metaObject, "updateTime", String.class, formattedDate); // 使用字符串类型保存
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/config/IdGeneratorInitializer.java b/code/link56/link56-backend-old/src/main/java/cn/link56/config/IdGeneratorInitializer.java
new file mode 100644
index 00000000..b25564dc
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/config/IdGeneratorInitializer.java
@@ -0,0 +1,19 @@
+package cn.link56.config;
+
+import cn.link56.utils.snowflake.contract.IdGeneratorOptions;
+import cn.link56.utils.snowflake.idgen.IdGenerator;
+import lombok.RequiredArgsConstructor;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+@Component
+@RequiredArgsConstructor
+public class IdGeneratorInitializer {
+ @EventListener(ApplicationReadyEvent.class)
+ public void init() {
+ IdGeneratorOptions options = new IdGeneratorOptions();
+ options.WorkerId = 1;
+ IdGenerator.setIdGenerator(options);
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/config/MybatisPlusConfig.java b/code/link56/link56-backend-old/src/main/java/cn/link56/config/MybatisPlusConfig.java
new file mode 100644
index 00000000..affe8a97
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/config/MybatisPlusConfig.java
@@ -0,0 +1,24 @@
+package cn.link56.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@MapperScan("cn.link56.mapper")
+public class MybatisPlusConfig {
+
+ /**
+ * 添加分页插件
+ */
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.SQL_SERVER2005)); // 如果配置多个插件, 切记分页最后添加
+ // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
+ return interceptor;
+ }
+}
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/config/RemoveMillisSerializer.java b/code/link56/link56-backend-old/src/main/java/cn/link56/config/RemoveMillisSerializer.java
new file mode 100644
index 00000000..ecd208bf
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/config/RemoveMillisSerializer.java
@@ -0,0 +1,18 @@
+package cn.link56.config;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+import java.io.IOException;
+
+public class RemoveMillisSerializer extends JsonSerializer {
+ @Override
+ public void serialize(String value, JsonGenerator gen, SerializerProvider provider) throws IOException {
+ if (value != null && value.length() > 19) {
+ gen.writeString(value.substring(0, 19)); // 去除毫秒
+ } else {
+ gen.writeString(value);
+ }
+ }
+}
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/config/WebCorsConfig.java b/code/link56/link56-backend-old/src/main/java/cn/link56/config/WebCorsConfig.java
new file mode 100644
index 00000000..882863ff
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/config/WebCorsConfig.java
@@ -0,0 +1,29 @@
+package cn.link56.config;
+
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class WebCorsConfig {
+// @Bean
+// public CorsFilter corsFilter() {
+// // 1.创建 CORS 配置对象
+// CorsConfiguration config = new CorsConfiguration();
+// // 支持域
+// config.addAllowedOriginPattern("*");
+// // 是否发送 Cookie
+// config.setAllowCredentials(true);
+// // 支持请求方式
+// config.addAllowedMethod("*");
+// // 允许的原始请求头部信息
+// config.addAllowedHeader("*");
+// // 暴露的头部信息
+// config.addExposedHeader("*");
+// // 有效期 1800秒,设置预检请求(OPTIONS请求)的缓存时间,1800秒意味着客户端可以缓存这个设置1800秒
+// config.setMaxAge(1800L);
+// // 2.添加地址映射
+// UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
+// corsConfigurationSource.registerCorsConfiguration("/**", config);
+// // 3.返回 CorsFilter 对象
+// return new CorsFilter(corsConfigurationSource);
+// }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/config/WebMvcConfig.java b/code/link56/link56-backend-old/src/main/java/cn/link56/config/WebMvcConfig.java
new file mode 100644
index 00000000..75b21088
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/config/WebMvcConfig.java
@@ -0,0 +1,31 @@
+package cn.link56.config;
+
+import cn.link56.interceptor.LoginInterceptor;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(new LoginInterceptor()) // 注册拦截器
+ .addPathPatterns("/**") // 拦截所有请求
+ .excludePathPatterns(
+ "/auth/**",
+ "/company/getCompanyPage",
+ "/company/getPublicDetail",
+ "/company/getRecommendList",
+ "/company/getRecommendRightList",
+
+ "/forum/post/page",
+ "/forum/post/detail",
+ "/forum/post/getRecommendList",
+ "/forum/post/getHotList",
+ "/forum/post/comment/list",
+
+ "/webProperty/**",
+ "/webArea/**"
+ );
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/config/WebSocketConfig.java b/code/link56/link56-backend-old/src/main/java/cn/link56/config/WebSocketConfig.java
new file mode 100644
index 00000000..73a489ea
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/config/WebSocketConfig.java
@@ -0,0 +1,13 @@
+package cn.link56.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+ @Bean
+ public ServerEndpointExporter serverEndpointExporter() {
+ return new ServerEndpointExporter();
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/constants/ResponseStatusConstants.java b/code/link56/link56-backend-old/src/main/java/cn/link56/constants/ResponseStatusConstants.java
new file mode 100644
index 00000000..6833dade
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/constants/ResponseStatusConstants.java
@@ -0,0 +1,28 @@
+package cn.link56.constants;
+
+public class ResponseStatusConstants {
+ /**
+ * 操作成功
+ */
+ public static final Integer SUCCESS = 200;
+
+ /**
+ * 系统内部错误
+ */
+ public static final Integer ERROR = 500;
+
+ /**
+ * 缺少参数,参数格式有误,请求路径有误等
+ */
+ public static final Integer BAD_REQUEST = 400;
+
+ /**
+ * 未找到资源,或者该资源已丢失
+ */
+ public static final Integer NOT_FOUND = 404;
+
+ /**
+ * 登录失效或已过期
+ */
+ public static final Integer UNAUTHORIZED = 401;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/context/UserContext.java b/code/link56/link56-backend-old/src/main/java/cn/link56/context/UserContext.java
new file mode 100644
index 00000000..fad224fd
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/context/UserContext.java
@@ -0,0 +1,27 @@
+package cn.link56.context;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.ObjectUtils;
+
+public class UserContext {
+ private static final ThreadLocal userIdThreadLocal = new ThreadLocal<>();
+
+ public static void setUserId(String userId) {
+ userIdThreadLocal.set(userId);
+ }
+
+ public static String getUserId() {
+ String userId = userIdThreadLocal.get();
+ if (StringUtils.isEmpty(userId)) {
+ userId = "";
+ userIdThreadLocal.set(userId);
+ }
+ return userId;
+ }
+
+ public static void removeUserId() {
+ if (ObjectUtils.isEmpty(userIdThreadLocal)) {
+ userIdThreadLocal.remove();
+ }
+ }
+}
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/AuthController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/AuthController.java
new file mode 100644
index 00000000..f44decc7
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/AuthController.java
@@ -0,0 +1,37 @@
+package cn.link56.controller;
+
+import cn.link56.common.Result;
+import cn.link56.domain.dto.ForgetDTO;
+import cn.link56.domain.dto.LoginDTO;
+import cn.link56.domain.dto.RegisterDTO;
+import cn.link56.domain.vo.LoginVO;
+import cn.link56.service.AuthService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/auth")
+public class AuthController {
+ @Resource
+ private AuthService authService;
+
+ @PostMapping("/register")
+ public Result register(@RequestBody @Validated RegisterDTO registerDTO){
+ return authService.register(registerDTO);
+ }
+
+ @PostMapping("/login")
+ public Result login(@RequestBody @Validated LoginDTO loginDTO) {
+ return authService.login(loginDTO);
+ }
+
+ @PostMapping({"/forget"})
+ public Result forget(@RequestBody @Validated ForgetDTO forgetDTO) {
+ return authService.forget(forgetDTO);
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/FileController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/FileController.java
new file mode 100644
index 00000000..a6416dbe
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/FileController.java
@@ -0,0 +1,39 @@
+package cn.link56.controller;
+
+import cn.link56.common.Result;
+import cn.link56.domain.dto.file.InsertFileDTO;
+import cn.link56.domain.vo.aliyun.AliyunKeyVO;
+import cn.link56.service.SlFileService;
+import cn.link56.utils.HttpUtils;
+import cn.link56.utils.JsonUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/file")
+public class FileController {
+ @Resource
+ private SlFileService slFileService;
+
+ @PostMapping("/getAliyunKey")
+ public Result getAliyunKey() {
+ String requestUrl = "http://g3oss.g3soft.cn:8082/upload?orgid=sllog&bucket=g3hdzjsj";
+ String s = HttpUtils.sendGet(requestUrl);
+ AliyunKeyVO aliyunKeyVO = (AliyunKeyVO) JsonUtils.toBean(s, AliyunKeyVO.class);
+
+ assert aliyunKeyVO != null;
+
+ return Result.success(aliyunKeyVO);
+ }
+
+ @PostMapping("/insert")
+ public Result insertFile(@RequestBody @Validated InsertFileDTO insertFileDTO) {
+ boolean flag = slFileService.insertFile(insertFileDTO);
+ return flag ? Result.success() : Result.error();
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/ImMessageController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/ImMessageController.java
new file mode 100644
index 00000000..35a00fb4
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/ImMessageController.java
@@ -0,0 +1,48 @@
+package cn.link56.controller;
+
+import cn.link56.common.Result;
+import cn.link56.domain.dto.im.ImMessageHistoryDTO;
+import cn.link56.domain.dto.im.ImMessageUpdateIsReadDTO;
+import cn.link56.domain.vo.im.AllNoReadNumberVO;
+import cn.link56.domain.vo.im.ChatCompanyVO;
+import cn.link56.domain.vo.im.ImMessageHistoryVO;
+import cn.link56.service.ImMessageService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/imMessage")
+public class ImMessageController {
+ @Resource
+ private ImMessageService imMessageService;
+
+ @PostMapping("/chats")
+ public Result> getChats(){
+ List list = imMessageService.getChats();
+ return Result.success(list);
+ }
+
+ @PostMapping("/history")
+ public Result> getMessageHistory(@RequestBody @Validated ImMessageHistoryDTO imMessageHistoryDTO){
+ List list = imMessageService.getMessageHistory(imMessageHistoryDTO);
+ return Result.success(list);
+ }
+
+ @PostMapping("/updateIsRead")
+ public Result updateIsRead(@RequestBody @Validated ImMessageUpdateIsReadDTO imMessageUpdateIsReadDTO){
+ imMessageService.updateIsRead(imMessageUpdateIsReadDTO);
+ return Result.success();
+ }
+
+ @PostMapping("/getAllNoReadNumber")
+ public Result getAllNoReadNumber(){
+ AllNoReadNumberVO allNoReadNumberVO = imMessageService.getAllNoReadNumber();
+ return Result.success(allNoReadNumberVO);
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/SlCompanyController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/SlCompanyController.java
new file mode 100644
index 00000000..243b1c64
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/SlCompanyController.java
@@ -0,0 +1,64 @@
+package cn.link56.controller;
+
+import cn.link56.common.BasePageVO;
+import cn.link56.common.Result;
+import cn.link56.domain.dto.company.CompanyPageDTO;
+import cn.link56.domain.dto.company.CompanyPublicDetailDTO;
+import cn.link56.domain.dto.company.CompanyUpdateDetailDTO;
+import cn.link56.domain.vo.company.*;
+import cn.link56.service.SlCompanyService;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/company")
+public class SlCompanyController {
+ @Resource
+ private SlCompanyService slCompanyService;
+
+ @PostMapping("/getCompanyPage")
+ public Result> getCompanyPage(@RequestBody @Validated CompanyPageDTO companyPageDTO){
+ BasePageVO list = slCompanyService.getCompanyPage(companyPageDTO);
+ return Result.success(list);
+ }
+
+ @GetMapping("/getPrivateDetail")
+ public Result getPrivateDetail(){
+ CompanyPrivateDetailVO companyPrivateDetailVO = slCompanyService.getPrivateDetail();
+ return Result.success(companyPrivateDetailVO);
+ }
+
+ @PostMapping("/getPublicDetail")
+ public Result getPublicDetail(@RequestBody @Validated CompanyPublicDetailDTO companyPublicDetailDTO){
+ CompanyPublicDetailVO companyPublicDetailVO = slCompanyService.getPublicDetail(companyPublicDetailDTO);
+
+ if(ObjectUtils.isEmpty(companyPublicDetailVO)){
+ return Result.error("该公司已不存在!");
+ }
+
+ return Result.success(companyPublicDetailVO);
+ }
+
+
+ @PostMapping("/update")
+ public Result update(@RequestBody @Validated CompanyUpdateDetailDTO companyUpdateDetailDTO){
+ return slCompanyService.updateDetail(companyUpdateDetailDTO);
+ }
+
+ @GetMapping("/getRecommendList")
+ public Result> getRecommendList(){
+ List list = slCompanyService.getRecommendList();
+ return Result.success(list);
+ }
+
+ @GetMapping("/getRecommendRightList")
+ public Result> getRecommendRightList(){
+ List list = slCompanyService.getRecommendRightList();
+ return Result.success(list);
+ }
+}
+
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/SlNotificationController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/SlNotificationController.java
new file mode 100644
index 00000000..0f85e19e
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/SlNotificationController.java
@@ -0,0 +1,49 @@
+package cn.link56.controller;
+
+import cn.link56.common.BasePageDTO;
+import cn.link56.common.BasePageVO;
+import cn.link56.common.Result;
+import cn.link56.domain.vo.notification.NotificationVO;
+import cn.link56.service.SlNotificationService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotBlank;
+
+@RestController
+@RequestMapping("/notification")
+public class SlNotificationController {
+ @Resource
+ private SlNotificationService slNotificationService;
+
+ @PostMapping("/likeAndFavorite")
+ public Result> likePage(@RequestBody BasePageDTO basePageDTO){
+ BasePageVO result = slNotificationService.getLikeFavoritePage(basePageDTO);
+ return Result.success(result);
+ }
+
+ @PostMapping("/comment")
+ public Result> commentPage(@RequestBody BasePageDTO basePageDTO){
+ BasePageVO result = slNotificationService.getCommentPage(basePageDTO);
+ return Result.success(result);
+ }
+
+ @PostMapping("/delete/{notificationId}")
+ public Result delete(@PathVariable @NotBlank(message = "通知ID不能为空") String notificationId) {
+ boolean flag = slNotificationService.removeById(notificationId);
+ return flag ? Result.success() : Result.error();
+ }
+
+ @PostMapping("/likeAndFavorite/deleteAll")
+ public Result deleteAllLikeAndFavorite() {
+ boolean deleteFlag = slNotificationService.deleteAllLikeAndFavorite();
+ return deleteFlag ? Result.success() : Result.error();
+ }
+
+
+ @PostMapping("/comment/deleteAll")
+ public Result deleteAllComment() {
+ boolean deleteFlag = slNotificationService.deleteAllComment();
+ return deleteFlag ? Result.success() : Result.error();
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/WebAreaController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/WebAreaController.java
new file mode 100644
index 00000000..2ea7ffd7
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/WebAreaController.java
@@ -0,0 +1,25 @@
+package cn.link56.controller;
+
+import cn.link56.common.Result;
+import cn.link56.domain.vo.area.AreaVO;
+import cn.link56.service.WebAreaService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/webArea")
+public class WebAreaController {
+ @Resource
+ private WebAreaService webAreaService;
+
+ @GetMapping("/list")
+ public Result> list(){
+ List result = webAreaService.getList();
+ return Result.success(result);
+ }
+
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/WebPropertyController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/WebPropertyController.java
new file mode 100644
index 00000000..b432c533
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/WebPropertyController.java
@@ -0,0 +1,24 @@
+package cn.link56.controller;
+
+import cn.link56.common.Result;
+import cn.link56.domain.vo.property.WebPropertyVO;
+import cn.link56.service.WebPropertyService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/webProperty")
+public class WebPropertyController {
+ @Resource
+ private WebPropertyService webPropertyService;
+
+ @GetMapping("/list")
+ public Result> list(){
+ List result = webPropertyService.getList();
+ return Result.success(result);
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/WebSocketApplication.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/WebSocketApplication.java
new file mode 100644
index 00000000..7f4f1490
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/WebSocketApplication.java
@@ -0,0 +1,240 @@
+package cn.link56.controller;
+
+import cn.link56.domain.entity.ImMessage;
+import cn.link56.domain.im.dto.ImAcceptCheckOneOnlineDTO;
+import cn.link56.domain.im.dto.ImAcceptMessageDTO;
+import cn.link56.domain.im.dto.ImAcceptOneDTO;
+import cn.link56.domain.im.dto.ImAcceptRollbackDTO;
+import cn.link56.domain.im.vo.ImSendCheckOneOnlineVO;
+import cn.link56.domain.im.vo.ImSendMessageVO;
+import cn.link56.domain.im.vo.ImSendNormalVO;
+import cn.link56.domain.im.vo.ImSendRollbackVO;
+import cn.link56.enums.ImAcceptMessageEnum;
+import cn.link56.enums.ImSendMessageEnum;
+import cn.link56.service.ImMessageService;
+import cn.link56.service.SlCompanyService;
+import cn.link56.utils.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+@ServerEndpoint("/websocket/{token}")
+@Component
+@Slf4j
+public class WebSocketApplication {
+ /**
+ * 存储创建连接的用户信息。
+ * KEY:用户、公司id
+ * VALUE:建立的会话session
+ */
+ // 存储所有活跃会话(用户ID -> 会话对象)
+ private static final ConcurrentHashMap> socketPool = new ConcurrentHashMap<>();
+
+ // WebSocket 握手时获取用户ID的参数名
+ private static final String COMPANY_ID_PARAM = "id";
+
+ private static final SlCompanyService slCompanyService = SpringUtils.getBean(SlCompanyService.class);
+ private static final ImMessageService imMessageService = SpringUtils.getBean(ImMessageService.class);
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam("token") String token) throws IOException {
+ try {
+ if (StringUtils.isEmpty(token)) {
+ return;
+ }
+
+ // 验证token
+ JwtUtils.verify(token);
+
+ // 验证成功,获取用户ID
+ String userId = JwtUtils.getTokenInfo(token).get(COMPANY_ID_PARAM).asString();
+
+ // 将用户id存入到session属性中
+ session.getUserProperties().put(COMPANY_ID_PARAM, userId);
+
+ // 添加新连接
+ socketPool.computeIfAbsent(userId, k -> new CopyOnWriteArrayList<>()).add(session);
+
+ // 打印 userId 和当前该用户在线连接数
+ List currentSessions = socketPool.get(userId);
+ int onlineCount = (int) currentSessions.stream().filter(Session::isOpen).count();
+ } catch (Exception e) {
+ e.printStackTrace(); // 建议打日志
+ }
+ }
+
+
+ @OnClose
+ public void onClose(Session session) throws IOException {
+ String userId = (String) session.getUserProperties().get(COMPANY_ID_PARAM);
+ if (StringUtils.isNotEmpty(userId)) {
+ List sessions = socketPool.get(userId);
+ if (sessions != null) {
+ sessions.remove(session);
+ if (sessions.isEmpty()) {
+ socketPool.remove(userId);
+ }
+ }
+ }
+ }
+
+ @OnMessage
+ public void onMessage(String message, Session session) throws IOException {
+ ImAcceptMessageDTO baseDto = null;
+ try {
+ baseDto = JsonUtils.toBean(message, ImAcceptMessageDTO.class);
+ }catch (Exception e){
+ sendMessageBySession(session,ImSendMessageEnum.ERROR,null);
+ return;
+ }
+
+ if (ObjectUtils.isEmpty(baseDto)) {
+ log.warn("Received empty message from session {}", session.getId());
+ return;
+ }
+
+ String type = baseDto.getType();
+ if (StringUtils.isEmpty(type)) {
+ log.warn("Received message without type from session {}", session.getId());
+ return;
+ }
+
+ try {
+ ImAcceptMessageEnum enumType = ImAcceptMessageEnum.valueOf(type);
+ switch (enumType) {
+ case PING:
+ sendMessageBySession(session,ImSendMessageEnum.PONG,null);
+ break;
+ case CHECK_ONE_ONLINE:
+ ImAcceptCheckOneOnlineDTO imAcceptCheckOneOnlineDTO = MessageConverterUtils.convertData(baseDto.getData(), ImAcceptCheckOneOnlineDTO.class);
+ handleAcceptCheckOneOnline(imAcceptCheckOneOnlineDTO,session);
+ break;
+ case ONE:
+ ImAcceptOneDTO imAcceptOneDTO = MessageConverterUtils.convertData(baseDto.getData(), ImAcceptOneDTO.class);
+ handleAcceptOne(imAcceptOneDTO,session);
+ break;
+ case ROLLBACK:
+ ImAcceptRollbackDTO imAcceptRollbackDTO = MessageConverterUtils.convertData(baseDto.getData(),ImAcceptRollbackDTO.class);
+ handleAcceptRollback(imAcceptRollbackDTO);
+ break;
+ default:
+ System.out.println("未知消息类型");
+ break;
+ }
+ }catch (Exception e){
+ sendMessageBySession(session,ImSendMessageEnum.ERROR,null);
+ }
+ }
+
+ @OnError
+ public void onError(Session session, Throwable throwable) {
+
+ }
+
+ private void handleAcceptRollback(ImAcceptRollbackDTO imAcceptRollbackDTO) throws IOException {
+ String messageId = imAcceptRollbackDTO.getMessageId();
+
+ ImMessage imMessage = imMessageService.getById(messageId);
+ // 更新
+ imMessageService.updateIsRollback(imAcceptRollbackDTO);
+ String sendId = imMessage.getSendId();
+ String acceptId = imMessage.getAcceptId();
+
+ ImSendRollbackVO imSendRollbackVO = new ImSendRollbackVO();
+ imSendRollbackVO.setMessageId(messageId);
+ imSendRollbackVO.setSendId(sendId);
+ imSendRollbackVO.setAcceptId(acceptId);
+
+ sendMessageByCompanyId(sendId,ImSendMessageEnum.ROLLBACK,imSendRollbackVO);
+ sendMessageByCompanyId(acceptId,ImSendMessageEnum.ROLLBACK,imSendRollbackVO);
+ }
+
+
+ private void handleAcceptOne(ImAcceptOneDTO imAcceptOneDTO, Session session) throws IOException {
+ ImMessage imMessage = imMessageService.insertOne(imAcceptOneDTO);
+
+ if(ObjectUtils.isEmpty(imMessage)){
+ sendMessageBySession(session,ImSendMessageEnum.ERROR,null);
+ return;
+ }
+
+ ImSendNormalVO imSendNormalVO = new ImSendNormalVO();
+
+ imSendNormalVO.setMessageId(imMessage.getId())
+ .setMessageContent(imMessage.getContent())
+ .setMessageContentType(imMessage.getContentType())
+ .setSendId(imMessage.getSendId())
+ .setAcceptId(imMessage.getAcceptId())
+ .setQuoteMessageId(imMessage.getQuoteId())
+ .setIsRollback(imMessage.getIsRollback())
+ .setSendMessageTime(imMessage.getCreateTime());
+
+ sendMessageByCompanyId(imSendNormalVO.getSendId(),ImSendMessageEnum.ONE,imSendNormalVO);
+
+ imSendNormalVO.setSendName(slCompanyService.getById(imAcceptOneDTO.getSendId()).getName());
+
+ sendMessageByCompanyId(imSendNormalVO.getAcceptId(), ImSendMessageEnum.ONE,imSendNormalVO);
+ }
+
+ private void handleAcceptCheckOneOnline(ImAcceptCheckOneOnlineDTO imAcceptCheckOneOnlineDTO, Session session) throws IOException {
+ String companyId = imAcceptCheckOneOnlineDTO.getCompanyId();
+ if (StringUtils.isEmpty(companyId)) {
+ return;
+ }
+
+ ImSendCheckOneOnlineVO imSendCheckOneOnlineVO = new ImSendCheckOneOnlineVO();
+ imSendCheckOneOnlineVO.setCompanyId(companyId);
+
+ List sessions = socketPool.get(companyId);
+ boolean isOnline = false;
+
+ if (sessions != null) {
+ // 判断是否有至少一个打开的连接
+ isOnline = sessions.stream().anyMatch(Session::isOpen);
+ }
+
+ imSendCheckOneOnlineVO.setIsOnline(isOnline);
+
+ sendMessageBySession(session, ImSendMessageEnum.CHECK_ONE_ONLINE, imSendCheckOneOnlineVO);
+ }
+
+
+ // 给某个公司下的所有连接发送消息
+ private void sendMessageByCompanyId(String companyId, ImSendMessageEnum type, Object data) throws IOException {
+ List sessions = socketPool.get(companyId);
+ if (sessions != null) {
+ for (Session session : sessions) {
+ sendMessageCommon(session, type, data);
+ }
+ }
+ }
+
+ // 给单个会话发送消息(保持不变)
+ private void sendMessageBySession(Session session, ImSendMessageEnum type, Object data) throws IOException {
+ sendMessageCommon(session, type, data);
+ }
+
+ // 通用发送方法
+ private void sendMessageCommon(Session session, ImSendMessageEnum type, Object data) throws IOException {
+ if (session != null && session.isOpen()) {
+ final RemoteEndpoint.Basic remote = session.getBasicRemote();
+ synchronized (remote) {
+ ImSendMessageVO imSendMessageVO = new ImSendMessageVO();
+ imSendMessageVO.setType(type.name());
+ imSendMessageVO.setData(data);
+ remote.sendText(JsonUtils.toJson(imSendMessageVO));
+ }
+ }
+ }
+
+
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostCommentController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostCommentController.java
new file mode 100644
index 00000000..cae81d77
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostCommentController.java
@@ -0,0 +1,36 @@
+package cn.link56.controller.forum;
+
+import cn.link56.common.Result;
+import cn.link56.domain.dto.forum.comment.ForumCommentAddDTO;
+import cn.link56.domain.vo.forum.comment.ForumPostCommentVO;
+import cn.link56.service.forum.ForumPostCommentService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@RestController
+@RequestMapping("/forum/post/comment")
+public class ForumPostCommentController {
+ @Resource
+ private ForumPostCommentService forumPostCommentService;
+
+ @PostMapping("/add")
+ public Result add(@RequestBody @Validated ForumCommentAddDTO forumCommentAddDTO){
+ return forumPostCommentService.add(forumCommentAddDTO);
+ }
+
+ @GetMapping("/list")
+ public Result> getPostComments(@RequestParam("forumPostId") @NotBlank(message = "帖子ID不能为空") String forumPostId){
+ List forumPostCommentVOS = forumPostCommentService.getPostComments(forumPostId);
+ return Result.success(forumPostCommentVOS);
+ }
+
+ @PostMapping("/delete/{forumPostCommentId}")
+ public Result delete(@PathVariable("forumPostCommentId") @NotBlank(message = "帖子ID不能为空") String forumPostCommentId) {
+ boolean removeFlag = forumPostCommentService.deletePostComment(forumPostCommentId);
+ return removeFlag ? Result.success() : Result.error();
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostController.java
new file mode 100644
index 00000000..6958850a
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostController.java
@@ -0,0 +1,103 @@
+package cn.link56.controller.forum;
+
+import cn.link56.common.BasePageVO;
+import cn.link56.common.Result;
+import cn.link56.constants.ResponseStatusConstants;
+import cn.link56.domain.dto.forum.post.*;
+import cn.link56.domain.entity.forum.ForumPost;
+import cn.link56.domain.vo.forum.ForumDashboardVO;
+import cn.link56.domain.vo.forum.post.ForumPostDetailVO;
+import cn.link56.domain.vo.forum.post.ForumPostPageVO;
+import cn.link56.domain.vo.forum.post.ForumPostStatusCountVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartNumberVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartTypeVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartViewVO;
+import cn.link56.service.forum.ForumPostService;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/forum/post")
+public class ForumPostController {
+ @Resource
+ private ForumPostService forumPostService;
+
+ @PostMapping("/add")
+ public Result add(@RequestBody @Validated ForumPostAddDTO forumPostAddDTO){
+ return forumPostService.add(forumPostAddDTO);
+ }
+
+ @PostMapping("/update")
+ public Result update(@RequestBody @Validated ForumPostUpdateDTO forumPostUpdateDTO){
+ return forumPostService.updateDetail(forumPostUpdateDTO);
+ }
+
+ @PostMapping("/delete")
+ public Result deleteUserByPost(@RequestBody @Validated ForumPostDeleteDTO forumPostDeleteDTO) {
+ return forumPostService.delete(forumPostDeleteDTO);
+ }
+
+ @PostMapping("/page")
+ public Result> getPostPage(@RequestBody @Validated ForumPostCompanyPageDTO forumPostCompanyPageDTO){
+ return forumPostService.getPostPage(forumPostCompanyPageDTO);
+ }
+ @GetMapping("/getPostStatusCount")
+ public Result getPostStatusCount(){
+ ForumPostStatusCountVO forumPostStatusCountVO = forumPostService.getPostStatusCount();
+ return Result.success(forumPostStatusCountVO);
+ }
+
+ @PostMapping("/detail")
+ public Result getDetail(@RequestBody @Validated ForumPostDetailDTO forumPostDetailDTO) {
+ String forumPostId = forumPostDetailDTO.getForumPostId();
+ ForumPost forumPost = forumPostService.getById(forumPostId);
+
+ if(ObjectUtils.isEmpty(forumPost)){
+ return Result.error(ResponseStatusConstants.NOT_FOUND,"来晚了,该篇帖子已被删除!");
+ }
+
+ ForumPostDetailVO forumPostDetailVO = forumPostService.getDetail(forumPostDetailDTO);
+
+ return Result.success(forumPostDetailVO);
+ }
+
+ @GetMapping("/getRecommendList")
+ public Result> getRecommendList(){
+ List list = forumPostService.getRecommendList();
+ return Result.success(list);
+ }
+
+ @GetMapping("/getHotList")
+ public Result> getHotList(){
+ List list = forumPostService.getHotList();
+ return Result.success(list);
+ }
+
+ @GetMapping("/getDashboardData")
+ public Result getDashBoardData(){
+ ForumDashboardVO forumDashboardVO = forumPostService.getDashBoardData();
+ return Result.success(forumDashboardVO);
+ }
+
+ @GetMapping("/getChartView")
+ public Result> getChartViewData(){
+ List list = forumPostService.getChartViewData();
+ return Result.success(list);
+ }
+
+ @GetMapping("/getChartNumber")
+ public Result> getChartNumberData(){
+ List list = forumPostService.getChartNumberData();
+ return Result.success(list);
+ }
+
+ @GetMapping("/getChartType")
+ public Result> getChartTypeData(){
+ List list = forumPostService.getChartTypeData();
+ return Result.success(list);
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostFavoriteController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostFavoriteController.java
new file mode 100644
index 00000000..5efc9964
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostFavoriteController.java
@@ -0,0 +1,24 @@
+package cn.link56.controller.forum;
+
+import cn.link56.common.Result;
+import cn.link56.service.forum.ForumPostFavoriteService;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotBlank;
+
+@RestController
+@RequestMapping("/forum/post/favorite")
+public class ForumPostFavoriteController {
+ @Resource
+ private ForumPostFavoriteService forumPostFavoriteService;
+
+ @PostMapping("/{postId}")
+ public Result favorite(@PathVariable @NotBlank(message = "帖子ID不能为空") String postId){
+ forumPostFavoriteService.favorite(postId);
+ return Result.success();
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostLikeController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostLikeController.java
new file mode 100644
index 00000000..43147182
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostLikeController.java
@@ -0,0 +1,21 @@
+package cn.link56.controller.forum;
+
+import cn.link56.common.Result;
+import cn.link56.service.forum.ForumPostLikeService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotBlank;
+
+@RestController
+@RequestMapping("/forum/post/like")
+public class ForumPostLikeController {
+ @Resource
+ private ForumPostLikeService forumPostLikeService;
+
+ @PostMapping("/{postId}")
+ public Result like(@PathVariable @NotBlank(message = "帖子ID不能为空") String postId){
+ forumPostLikeService.like(postId);
+ return Result.success();
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostViewController.java b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostViewController.java
new file mode 100644
index 00000000..d6a23729
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/controller/forum/ForumPostViewController.java
@@ -0,0 +1,24 @@
+package cn.link56.controller.forum;
+
+import cn.link56.common.Result;
+import cn.link56.service.forum.ForumPostViewService;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotBlank;
+
+@RestController
+@RequestMapping("/forum/post/view")
+public class ForumPostViewController {
+ @Resource
+ private ForumPostViewService forumPostViewService;
+
+ @PostMapping("/{postId}")
+ public Result view(@PathVariable @NotBlank(message = "帖子ID不能为空") String postId){
+ forumPostViewService.view(postId);
+ return Result.success();
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/ForgetDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/ForgetDTO.java
new file mode 100644
index 00000000..79d446de
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/ForgetDTO.java
@@ -0,0 +1,17 @@
+package cn.link56.domain.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForgetDTO {
+ @NotBlank(
+ message = "邮箱号或手机号不能为空"
+ )
+ private String forgetCredential;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/LoginDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/LoginDTO.java
new file mode 100644
index 00000000..b93e81f0
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/LoginDTO.java
@@ -0,0 +1,17 @@
+package cn.link56.domain.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LoginDTO {
+ @NotBlank(message = "邮箱号不能为空")
+ private String loginCredential;
+ @NotBlank(message = "密码不能为空")
+ private String password;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/RegisterDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/RegisterDTO.java
new file mode 100644
index 00000000..78c9c2ef
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/RegisterDTO.java
@@ -0,0 +1,26 @@
+package cn.link56.domain.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RegisterDTO {
+ @NotBlank(message = "账号不能为空")
+ private String account;
+
+ @NotBlank(message = "公司名称不能为空")
+ private String name;
+
+ @NotBlank(message = "邮箱不能为空")
+ @Email(message = "邮箱格式有误")
+ private String email;
+
+ @NotBlank(message = "密码不能为空")
+ private String password;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/company/CompanyPageDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/company/CompanyPageDTO.java
new file mode 100644
index 00000000..67ce5e45
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/company/CompanyPageDTO.java
@@ -0,0 +1,15 @@
+package cn.link56.domain.dto.company;
+
+import cn.link56.common.BasePageDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class CompanyPageDTO extends BasePageDTO {
+ private List area;
+ private List industry;
+ private String name;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/company/CompanyPublicDetailDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/company/CompanyPublicDetailDTO.java
new file mode 100644
index 00000000..fa37c8f9
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/company/CompanyPublicDetailDTO.java
@@ -0,0 +1,15 @@
+package cn.link56.domain.dto.company;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CompanyPublicDetailDTO {
+ @NotBlank(message = "公司id不能为空")
+ private String companyId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/company/CompanyUpdateDetailDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/company/CompanyUpdateDetailDTO.java
new file mode 100644
index 00000000..f2bee61f
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/company/CompanyUpdateDetailDTO.java
@@ -0,0 +1,32 @@
+package cn.link56.domain.dto.company;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CompanyUpdateDetailDTO {
+ @NotBlank(message = "id不能为空")
+ private String companyId;
+ @NotBlank(message = "公司名称不能为空")
+ private String name;
+ @NotBlank(message = "登录账号不能为空")
+ private String account;
+ @NotBlank(message = "登录密码不能为空")
+ private String password;
+ @NotBlank(message = "公司邮箱不能为空")
+ private String email;
+ private String phone;
+ private List address;
+ private List industry;
+ private String establishedDate;
+ private String profile;
+ private String avatar;
+ private String description;
+ private String shortName;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/file/InsertFileDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/file/InsertFileDTO.java
new file mode 100644
index 00000000..0dd2996f
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/file/InsertFileDTO.java
@@ -0,0 +1,27 @@
+package cn.link56.domain.dto.file;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class InsertFileDTO {
+ @NotBlank(
+ message = "文件名称不能为空"
+ )
+ private String fileName;
+
+ @NotBlank(
+ message = "文件大小不能为空"
+ )
+ private String fileSize;
+
+ @NotBlank(
+ message = "文件全路径oss不能为空"
+ )
+ private String fileMapName;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/comment/ForumCommentAddDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/comment/ForumCommentAddDTO.java
new file mode 100644
index 00000000..77cb1021
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/comment/ForumCommentAddDTO.java
@@ -0,0 +1,16 @@
+package cn.link56.domain.dto.forum.comment;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForumCommentAddDTO {
+ private String fatherId;
+
+ private String postId;
+ private String companyId;
+ private String content;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostAddDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostAddDTO.java
new file mode 100644
index 00000000..73250a83
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostAddDTO.java
@@ -0,0 +1,30 @@
+package cn.link56.domain.dto.forum.post;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class ForumPostAddDTO {
+ @NotBlank(message = "帖子标题不能为空")
+ private String title;
+ @NotBlank(message = "帖子内容不能为空")
+ private String content;
+ @NotBlank(message = "帖子摘要不能为空")
+ private String summary;
+ private String cover;
+ private List tags;
+ @NotBlank(message = "公司id不能为空")
+ private String companyId;
+
+ @NotNull(message = "帖子状态不能为空")
+ @Min(value = 0, message = "帖子状态无效")
+ private Integer status;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostCompanyPageDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostCompanyPageDTO.java
new file mode 100644
index 00000000..bbe1a928
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostCompanyPageDTO.java
@@ -0,0 +1,13 @@
+package cn.link56.domain.dto.forum.post;
+
+import cn.link56.common.BasePageDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ForumPostCompanyPageDTO extends BasePageDTO {
+ private String companyId;
+ private String postTitle;
+ private Integer status;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostDeleteDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostDeleteDTO.java
new file mode 100644
index 00000000..562feec2
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostDeleteDTO.java
@@ -0,0 +1,15 @@
+package cn.link56.domain.dto.forum.post;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class ForumPostDeleteDTO {
+ @NotBlank(message = "帖子id不能为空")
+ private String forumPostId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostDetailDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostDetailDTO.java
new file mode 100644
index 00000000..ef888e8f
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostDetailDTO.java
@@ -0,0 +1,16 @@
+package cn.link56.domain.dto.forum.post;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class ForumPostDetailDTO {
+ @NotBlank(message = "帖子id不能为空")
+ private String forumPostId;
+ private String companyId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostPublicPageDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostPublicPageDTO.java
new file mode 100644
index 00000000..1514745c
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostPublicPageDTO.java
@@ -0,0 +1,10 @@
+package cn.link56.domain.dto.forum.post;
+
+import cn.link56.common.BasePageDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ForumPostPublicPageDTO extends BasePageDTO {
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostUpdateDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostUpdateDTO.java
new file mode 100644
index 00000000..18b52f4e
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/forum/post/ForumPostUpdateDTO.java
@@ -0,0 +1,30 @@
+package cn.link56.domain.dto.forum.post;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class ForumPostUpdateDTO {
+ @NotBlank(message = "帖子id不能为空")
+ private String forumPostId;
+ @NotBlank(message = "帖子标题不能为空")
+ private String title;
+ @NotBlank(message = "帖子内容不能为空")
+ private String content;
+ @NotBlank(message = "帖子摘要不能为空")
+ private String summary;
+ private String cover;
+ private List tags;
+
+ @NotNull(message = "帖子状态不能为空")
+ @Min(value = 0, message = "帖子状态无效")
+ private Integer status;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/im/ImMessageHistoryDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/im/ImMessageHistoryDTO.java
new file mode 100644
index 00000000..d96459cc
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/im/ImMessageHistoryDTO.java
@@ -0,0 +1,15 @@
+package cn.link56.domain.dto.im;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImMessageHistoryDTO {
+ @NotBlank(message = "聊天者的id不能为空")
+ private String chatCompanyId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/im/ImMessageUpdateIsReadDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/im/ImMessageUpdateIsReadDTO.java
new file mode 100644
index 00000000..fb1046ac
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/dto/im/ImMessageUpdateIsReadDTO.java
@@ -0,0 +1,15 @@
+package cn.link56.domain.dto.im;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImMessageUpdateIsReadDTO {
+ @NotBlank(message = "id不能为空")
+ private String companyId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/ImMessage.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/ImMessage.java
new file mode 100644
index 00000000..d3e87ece
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/ImMessage.java
@@ -0,0 +1,34 @@
+package cn.link56.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("im_message")
+@Accessors(chain = true) // 添加这一行即可支持链式操作
+public class ImMessage {
+ @TableId(value = "b_id", type = IdType.ASSIGN_UUID)
+ private String id;
+
+ @TableField("b_send_id")
+ private String sendId;
+ @TableField("b_accept_id")
+ private String acceptId;
+ @TableField("b_content")
+ private String content;
+ @TableField("b_content_type")
+ private String contentType;
+ @TableField("b_is_read")
+ private Integer isRead;// 是否已读
+ @TableField("b_is_rollback")
+ private Integer isRollback;// 是否撤回
+ @TableField("b_quote_id")
+ private String quoteId;// 引用id
+ @TableField(value = "b_create_time", fill = FieldFill.INSERT)
+ private String createTime;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/SlCompany.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/SlCompany.java
new file mode 100644
index 00000000..ff956b02
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/SlCompany.java
@@ -0,0 +1,70 @@
+package cn.link56.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("sl_company")
+@Accessors(chain = true) // 添加这一行即可支持链式操作
+public class SlCompany {
+ @TableId(value = "b_id", type = IdType.ASSIGN_UUID)
+ private String id;
+
+ @TableField("b_name")
+ private String name;
+
+ @TableField("b_account")
+ private String account;
+
+ @TableField("b_email")
+ private String email;
+
+ @TableField("b_password")
+ private String password;
+
+ @TableField("b_profile")
+ private String profile;
+
+ @TableField("b_description")
+ private String description;
+
+ @TableField("b_address")
+ private String address;
+
+ @TableField("b_phone")
+ private String phone;
+
+ @TableField("b_established_date")
+ private String establishedDate;
+
+ @TableField("b_avatar")
+ private String avatar;
+
+ @TableField("b_industry")
+ private String industry;
+
+ @TableField("b_visible")
+ private String visible;
+
+ @TableField("b_right_visible")
+ private String rightVisible;
+
+ @TableField("b_order")
+ private Integer bOrder;
+
+ @TableField("b_color")
+ private String color;
+ @TableField("b_shortname")
+ private String shortName;
+
+ @TableField(value = "b_create_time", fill = FieldFill.INSERT)
+ private String createTime;
+
+ @TableField(value = "b_update_time", fill = FieldFill.INSERT_UPDATE)
+ private String updateTime;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/SlFile.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/SlFile.java
new file mode 100644
index 00000000..f74aba25
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/SlFile.java
@@ -0,0 +1,38 @@
+package cn.link56.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("sl_file")
+@Accessors(chain = true)
+public class SlFile {
+ @TableId(
+ value = "b_id",
+ type = IdType.ASSIGN_UUID
+ )
+ private String id;
+ @TableField("mx_filename")
+ private String name;
+ @TableField("mx_filesize")
+ private String size;
+ @TableField("mx_fileext")
+ private String ext;
+ @TableField("mx_mapfilename")
+ private String mapName;
+ @TableField(
+ value = "b_create_time",
+ fill = FieldFill.INSERT
+ )
+ private String createTime;
+ @TableField(
+ value = "b_create_id",
+ fill = FieldFill.INSERT
+ )
+ private String createId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/SlNotification.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/SlNotification.java
new file mode 100644
index 00000000..35c78529
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/SlNotification.java
@@ -0,0 +1,29 @@
+package cn.link56.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("sl_notification")
+@Accessors(chain = true)
+public class SlNotification {
+ @TableId(value = "b_id", type = IdType.ASSIGN_UUID)
+ private String id;
+ @TableField("b_send_id")
+ private String sendId;
+ @TableField("b_accept_id")
+ private String acceptId;
+ @TableField("b_content")
+ private String content;
+ @TableField("b_post_id")
+ private String postId;
+ @TableField("b_type")
+ private Integer type;
+ @TableField(value = "b_create_time", fill = FieldFill.INSERT)
+ private String createTime;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/WebArea.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/WebArea.java
new file mode 100644
index 00000000..d2271ce9
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/WebArea.java
@@ -0,0 +1,20 @@
+package cn.link56.domain.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class WebArea {
+ private String id;
+ private Integer xh;
+ private String name;
+ private String fatherId;
+ private String canuse;
+ private String bz;
+ private String field;
+ private Integer order;
+ private String visible;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/WebProperty.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/WebProperty.java
new file mode 100644
index 00000000..84c64856
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/WebProperty.java
@@ -0,0 +1,32 @@
+package cn.link56.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("web_property")
+@Accessors(chain = true) // 添加这一行即可支持链式操作
+public class WebProperty {
+ @TableId(value = "b_id", type = IdType.ASSIGN_UUID)
+ private String id;
+ @TableField("b_xh")
+ private Integer xh;
+ @TableField("b_name")
+ private String name;
+ @TableField("b_canuse")
+ private String canuse;
+ @TableField("b_bz")
+ private String bz;
+ @TableField("b_url")
+ private String url;
+ @TableField("b_img")
+ private String img;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPost.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPost.java
new file mode 100644
index 00000000..e128c442
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPost.java
@@ -0,0 +1,35 @@
+package cn.link56.domain.entity.forum;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("forum_post")
+@Accessors(chain = true)
+public class ForumPost {
+ @TableId(value = "b_id", type = IdType.ASSIGN_UUID)
+ private String id;
+ @TableField("b_title")
+ private String title;
+ @TableField("b_content")
+ private String content;
+ @TableField("b_cover")
+ private String cover;
+ @TableField("b_tags")
+ private String tags;
+ @TableField("b_company_id")
+ private String companyId;
+ @TableField("b_summary")
+ private String summary;
+ @TableField("b_status")
+ private Integer status;
+ @TableField(value = "b_create_time", fill = FieldFill.INSERT)
+ private String createTime;
+ @TableField(value = "b_update_time", fill = FieldFill.INSERT_UPDATE)
+ private String updateTime;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostComment.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostComment.java
new file mode 100644
index 00000000..f30e9d40
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostComment.java
@@ -0,0 +1,27 @@
+package cn.link56.domain.entity.forum;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("forum_post_comment")
+@Accessors(chain = true)
+public class ForumPostComment {
+ @TableId(value = "b_id", type = IdType.ASSIGN_UUID)
+ private String id;
+ @TableField("b_post_id")
+ private String postId;
+ @TableField("b_content")
+ private String content;
+ @TableField("b_company_id")
+ private String companyId;
+ @TableField("b_father_id")
+ private String fatherId;
+ @TableField(value = "b_create_time", fill = FieldFill.INSERT)
+ private String createTime;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostFavorite.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostFavorite.java
new file mode 100644
index 00000000..87b7f5b2
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostFavorite.java
@@ -0,0 +1,23 @@
+package cn.link56.domain.entity.forum;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("forum_post_favorite")
+@Accessors(chain = true)
+public class ForumPostFavorite {
+ @TableId(value = "b_id", type = IdType.ASSIGN_UUID)
+ private String id;
+ @TableField("b_post_id")
+ private String postId;
+ @TableField("b_company_id")
+ private String companyId;
+ @TableField(value = "b_create_time", fill = FieldFill.INSERT)
+ private String createTime;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostLike.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostLike.java
new file mode 100644
index 00000000..97494263
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostLike.java
@@ -0,0 +1,23 @@
+package cn.link56.domain.entity.forum;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("forum_post_like")
+@Accessors(chain = true)
+public class ForumPostLike {
+ @TableId(value = "b_id", type = IdType.ASSIGN_UUID)
+ private String id;
+ @TableField("b_post_id")
+ private String postId;
+ @TableField("b_company_id")
+ private String companyId;
+ @TableField(value = "b_create_time", fill = FieldFill.INSERT)
+ private String createTime;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostView.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostView.java
new file mode 100644
index 00000000..54d07b68
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/entity/forum/ForumPostView.java
@@ -0,0 +1,21 @@
+package cn.link56.domain.entity.forum;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("forum_post_view")
+@Accessors(chain = true)
+public class ForumPostView {
+ @TableId(value = "b_id", type = IdType.ASSIGN_UUID)
+ private String id;
+ @TableField("b_post_id")
+ private String postId;
+ @TableField(value = "b_create_time", fill = FieldFill.INSERT)
+ private String createTime;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptCheckOneOnlineDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptCheckOneOnlineDTO.java
new file mode 100644
index 00000000..962bf314
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptCheckOneOnlineDTO.java
@@ -0,0 +1,12 @@
+package cn.link56.domain.im.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImAcceptCheckOneOnlineDTO {
+ private String companyId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptMessageDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptMessageDTO.java
new file mode 100644
index 00000000..592b482e
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptMessageDTO.java
@@ -0,0 +1,13 @@
+package cn.link56.domain.im.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImAcceptMessageDTO {
+ private String type;
+ private Object data;
+}
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptOneDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptOneDTO.java
new file mode 100644
index 00000000..b662645b
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptOneDTO.java
@@ -0,0 +1,16 @@
+package cn.link56.domain.im.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImAcceptOneDTO {
+ private String sendId;
+ private String acceptId;
+ private String content;
+ private String contentType;
+ private String quoteId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptRollbackDTO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptRollbackDTO.java
new file mode 100644
index 00000000..5efd3bbe
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/dto/ImAcceptRollbackDTO.java
@@ -0,0 +1,13 @@
+package cn.link56.domain.im.dto;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImAcceptRollbackDTO {
+ private String messageId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendCheckOneOnlineVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendCheckOneOnlineVO.java
new file mode 100644
index 00000000..15cfb7b9
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendCheckOneOnlineVO.java
@@ -0,0 +1,13 @@
+package cn.link56.domain.im.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImSendCheckOneOnlineVO {
+ private String companyId;
+ private Boolean isOnline;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendMessageVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendMessageVO.java
new file mode 100644
index 00000000..c9d6361d
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendMessageVO.java
@@ -0,0 +1,13 @@
+package cn.link56.domain.im.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImSendMessageVO {
+ private String type;
+ private Object data;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendNormalVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendNormalVO.java
new file mode 100644
index 00000000..2a19c3b8
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendNormalVO.java
@@ -0,0 +1,22 @@
+package cn.link56.domain.im.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = true)
+public class ImSendNormalVO {
+ private String messageId;
+ private String sendId;
+ private String sendName;
+ private String acceptId;
+ private String messageContent;
+ private String messageContentType;
+ private Integer isRollback;// 是否撤回
+ private String quoteMessageId;// 引用id
+ private String sendMessageTime;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendRollbackVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendRollbackVO.java
new file mode 100644
index 00000000..a245fe02
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/im/vo/ImSendRollbackVO.java
@@ -0,0 +1,14 @@
+package cn.link56.domain.im.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImSendRollbackVO {
+ private String messageId;
+ private String sendId;
+ private String acceptId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/LoginVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/LoginVO.java
new file mode 100644
index 00000000..cd140d09
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/LoginVO.java
@@ -0,0 +1,19 @@
+package cn.link56.domain.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = true) // 添加这一行即可支持链式操作
+public class LoginVO {
+ private String id;
+ private String account;
+ private String name;
+ private String email;
+ private String token;
+ private String avatar;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/aliyun/AliyunKeyVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/aliyun/AliyunKeyVO.java
new file mode 100644
index 00000000..927f1f5d
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/aliyun/AliyunKeyVO.java
@@ -0,0 +1,18 @@
+package cn.link56.domain.vo.aliyun;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AliyunKeyVO {
+ private String accessid;
+ private String policy;
+ private String signature;
+ private String dir;
+ private String host;
+ private String expire;
+ private String callback;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/area/AreaCompanyVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/area/AreaCompanyVO.java
new file mode 100644
index 00000000..34f78ba1
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/area/AreaCompanyVO.java
@@ -0,0 +1,6 @@
+package cn.link56.domain.vo.area;
+
+
+public class AreaCompanyVO {
+
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/area/AreaVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/area/AreaVO.java
new file mode 100644
index 00000000..9f92b91c
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/area/AreaVO.java
@@ -0,0 +1,18 @@
+package cn.link56.domain.vo.area;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = true)
+public class AreaVO {
+ private String label;
+ private String value;
+ private List children;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyAreaVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyAreaVO.java
new file mode 100644
index 00000000..48e56428
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyAreaVO.java
@@ -0,0 +1,24 @@
+package cn.link56.domain.vo.company;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CompanyAreaVO {
+ private String areaName;
+ private List companies; // 用于存放该地区的公司信息
+
+ // 内部类,用于表示公司信息
+ @Data
+ @AllArgsConstructor
+ @NoArgsConstructor
+ public static class CompanyInfo {
+ private String companyId;
+ private String companyName;
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyPageVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyPageVO.java
new file mode 100644
index 00000000..d609e053
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyPageVO.java
@@ -0,0 +1,26 @@
+package cn.link56.domain.vo.company;
+
+import cn.link56.config.RemoveMillisSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = true)
+public class CompanyPageVO {
+ private String companyId;
+
+ private List address;
+ private String avatar;
+ @JsonSerialize(using = RemoveMillisSerializer.class)
+ private String establishedDate;
+ private List industry;
+ private String name;
+ private String profile;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyPrivateDetailVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyPrivateDetailVO.java
new file mode 100644
index 00000000..2f66eb46
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyPrivateDetailVO.java
@@ -0,0 +1,28 @@
+package cn.link56.domain.vo.company;
+
+import cn.link56.config.RemoveMillisSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CompanyPrivateDetailVO {
+ private String companyId;
+ private String name;
+ private String account;
+ private String password;
+ private String email;
+ private String phone;
+ private List address;
+ private List industry;
+ @JsonSerialize(using = RemoveMillisSerializer.class)
+ private String establishedDate;
+ private String profile;
+ private String avatar;
+ private String description;
+ private String shortName;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyPublicDetailVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyPublicDetailVO.java
new file mode 100644
index 00000000..14907299
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyPublicDetailVO.java
@@ -0,0 +1,27 @@
+package cn.link56.domain.vo.company;
+
+import cn.link56.config.RemoveMillisSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CompanyPublicDetailVO {
+ private String companyId;
+ private String name;
+ private String email;
+ private String phone;
+ private List address;
+ private List industry;
+ @JsonSerialize(using = RemoveMillisSerializer.class)
+ private String establishedDate;
+ private String profile;
+ private String avatar;
+ private String description;
+ private String shortName;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyRecommendRightVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyRecommendRightVO.java
new file mode 100644
index 00000000..ea0cc962
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyRecommendRightVO.java
@@ -0,0 +1,14 @@
+package cn.link56.domain.vo.company;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CompanyRecommendRightVO {
+ private String companyId;
+ private String name;
+ private String color;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyRecommendVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyRecommendVO.java
new file mode 100644
index 00000000..2d0a33ab
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/company/CompanyRecommendVO.java
@@ -0,0 +1,26 @@
+package cn.link56.domain.vo.company;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CompanyRecommendVO {
+ private String shengName; // 用于 省 名称
+ private String shiName; // 用于 市 名称
+ private List companies; // 用于存放该地区的公司信息
+
+ // 内部类,用于表示公司信息
+ @Data
+ @AllArgsConstructor
+ @NoArgsConstructor
+ public static class CompanyInfo {
+ private String id; // 公司ID
+ private String name; // 公司名称
+ private String color;
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/ForumDashboardVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/ForumDashboardVO.java
new file mode 100644
index 00000000..603bff70
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/ForumDashboardVO.java
@@ -0,0 +1,15 @@
+package cn.link56.domain.vo.forum;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForumDashboardVO {
+ private Long postCount;
+ private Long viewCount;
+ private Long likeCount;
+ private Long favoriteCount;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/comment/ForumPostCommentVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/comment/ForumPostCommentVO.java
new file mode 100644
index 00000000..6bf71708
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/comment/ForumPostCommentVO.java
@@ -0,0 +1,36 @@
+package cn.link56.domain.vo.forum.comment;
+
+import cn.link56.config.RemoveMillisSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForumPostCommentVO {
+ private String commentId;
+ private String postId;
+ private String content;
+ @JsonSerialize(using = RemoveMillisSerializer.class) // 新增序列化器
+ private String createTime;
+ private String fatherId;
+
+ private Company publishCompany;
+ private Company replyCompany;
+
+ private List children;
+
+ // 发布公司对象
+ @AllArgsConstructor
+ @NoArgsConstructor
+ @Data
+ public static class Company {
+ private String companyId;
+ private String name;
+ private String avatar;
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostAddVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostAddVO.java
new file mode 100644
index 00000000..ba7b8694
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostAddVO.java
@@ -0,0 +1,12 @@
+package cn.link56.domain.vo.forum.post;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForumPostAddVO {
+ private String forumPostId;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostDetailVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostDetailVO.java
new file mode 100644
index 00000000..895494a4
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostDetailVO.java
@@ -0,0 +1,37 @@
+package cn.link56.domain.vo.forum.post;
+
+import cn.link56.config.RemoveMillisSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForumPostDetailVO {
+ private String forumPostId;
+ private String title;
+ private String content;
+ private String summary;
+ private String cover;
+ private Integer status;
+
+ private List tags;
+ private String tagsString;
+
+ @JsonSerialize(using = RemoveMillisSerializer.class)
+ private String publishTime;
+ private String companyId;
+ private String companyName;
+
+ private Integer viewCount;
+ private Integer likeCount;
+ private Integer favoriteCount;
+ private Integer commentCount;
+
+ private Boolean isLike;
+ private Boolean isFavorite;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostPageVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostPageVO.java
new file mode 100644
index 00000000..8e765bd9
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostPageVO.java
@@ -0,0 +1,29 @@
+package cn.link56.domain.vo.forum.post;
+
+import cn.link56.config.RemoveMillisSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForumPostPageVO {
+ private String forumPostId;
+ private String title;
+ private String summary;
+ private String cover;
+ private String tagsString;
+ private List tags;
+ @JsonSerialize(using = RemoveMillisSerializer.class)
+ private String publishTime;
+ private String companyName;
+
+ private Integer viewCount;
+ private Integer likeCount;
+ private Integer favoriteCount;
+ private Integer commentCount;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostStatusCountVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostStatusCountVO.java
new file mode 100644
index 00000000..a72c1aed
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/ForumPostStatusCountVO.java
@@ -0,0 +1,19 @@
+package cn.link56.domain.vo.forum.post;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForumPostStatusCountVO {
+ /** 所有状态的总数 */
+ private Long all;
+
+ /** 草稿状态的数量 */
+ private Long draft;
+
+ /** 正常(已发布)状态的数量 */
+ private Long normal;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/chart/ForumPostChartNumberVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/chart/ForumPostChartNumberVO.java
new file mode 100644
index 00000000..e32add72
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/chart/ForumPostChartNumberVO.java
@@ -0,0 +1,13 @@
+package cn.link56.domain.vo.forum.post.chart;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForumPostChartNumberVO {
+ private String label;
+ private Integer value;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/chart/ForumPostChartTypeVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/chart/ForumPostChartTypeVO.java
new file mode 100644
index 00000000..712be853
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/chart/ForumPostChartTypeVO.java
@@ -0,0 +1,13 @@
+package cn.link56.domain.vo.forum.post.chart;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForumPostChartTypeVO {
+ private String label;
+ private Integer value;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/chart/ForumPostChartViewVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/chart/ForumPostChartViewVO.java
new file mode 100644
index 00000000..2ef97269
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/forum/post/chart/ForumPostChartViewVO.java
@@ -0,0 +1,13 @@
+package cn.link56.domain.vo.forum.post.chart;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForumPostChartViewVO {
+ private String label;
+ private Integer value;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/im/AllNoReadNumberVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/im/AllNoReadNumberVO.java
new file mode 100644
index 00000000..f70e38d6
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/im/AllNoReadNumberVO.java
@@ -0,0 +1,12 @@
+package cn.link56.domain.vo.im;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AllNoReadNumberVO {
+ private Integer noReadNumber;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/im/ChatCompanyVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/im/ChatCompanyVO.java
new file mode 100644
index 00000000..7cc9fcb9
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/im/ChatCompanyVO.java
@@ -0,0 +1,28 @@
+package cn.link56.domain.vo.im;
+
+import cn.link56.config.RemoveMillisSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = true)
+public class ChatCompanyVO {
+ private String messageId;
+ @JsonSerialize(using = RemoveMillisSerializer.class)
+ private String lastMessageTime;
+
+ private String companyAvatar;
+ private String companyId;
+ private String companyName;
+
+ private Integer isRollback;
+ private Integer noReadNumber;
+
+ private String lastContent;
+ private String lastContentType;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/im/ImMessageHistoryVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/im/ImMessageHistoryVO.java
new file mode 100644
index 00000000..8260c1ca
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/im/ImMessageHistoryVO.java
@@ -0,0 +1,24 @@
+package cn.link56.domain.vo.im;
+
+import cn.link56.config.RemoveMillisSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = true)
+public class ImMessageHistoryVO {
+ private String messageId;
+ private String sendId;
+ private String acceptId;
+ private String messageContent;
+ private String messageContentType;
+ private Integer isRollback;// 是否撤回
+ private String quoteMessageId;// 引用id
+ @JsonSerialize(using = RemoveMillisSerializer.class)
+ private String sendMessageTime;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/notification/NotificationVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/notification/NotificationVO.java
new file mode 100644
index 00000000..13a83006
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/notification/NotificationVO.java
@@ -0,0 +1,38 @@
+package cn.link56.domain.vo.notification;
+
+import cn.link56.config.RemoveMillisSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class NotificationVO {
+ private String notificationId;
+ private String content;
+ @JsonSerialize(using = RemoveMillisSerializer.class)
+ private String createTime;
+ private Integer type;
+
+ private Post postDetail;
+ private Company sendCompany;
+
+ @AllArgsConstructor
+ @NoArgsConstructor
+ @Data
+ public static class Company {
+ private String companyId;
+ private String name;
+ private String avatar;
+ }
+
+ @AllArgsConstructor
+ @NoArgsConstructor
+ @Data
+ public static class Post {
+ private String postId;
+ private String title;
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/property/WebPropertyVO.java b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/property/WebPropertyVO.java
new file mode 100644
index 00000000..f1fc2389
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/domain/vo/property/WebPropertyVO.java
@@ -0,0 +1,15 @@
+package cn.link56.domain.vo.property;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = true)
+public class WebPropertyVO {
+ private String label;
+ private String value;
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ForumPostStatusEnum.java b/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ForumPostStatusEnum.java
new file mode 100644
index 00000000..1955e0f0
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ForumPostStatusEnum.java
@@ -0,0 +1,27 @@
+package cn.link56.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum ForumPostStatusEnum {
+ DRAFT(0, "草稿"),
+ NORMAL(1, "正常");
+
+ private final Integer code;
+ private final String description;
+
+ ForumPostStatusEnum(Integer code, String description) {
+ this.code = code;
+ this.description = description;
+ }
+
+ // 根据 code 获取枚举
+ public static ForumPostStatusEnum fromCode(Integer code) {
+ for (ForumPostStatusEnum status : ForumPostStatusEnum.values()) {
+ if (status.code.equals(code)) {
+ return status;
+ }
+ }
+ return null;
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ImAcceptMessageEnum.java b/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ImAcceptMessageEnum.java
new file mode 100644
index 00000000..f2df4fa9
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ImAcceptMessageEnum.java
@@ -0,0 +1,8 @@
+package cn.link56.enums;
+
+public enum ImAcceptMessageEnum {
+ PING,
+ CHECK_ONE_ONLINE,
+ ONE,
+ ROLLBACK
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ImSendMessageEnum.java b/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ImSendMessageEnum.java
new file mode 100644
index 00000000..aaf08fed
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ImSendMessageEnum.java
@@ -0,0 +1,9 @@
+package cn.link56.enums;
+
+public enum ImSendMessageEnum {
+ CHECK_ONE_ONLINE,
+ ONE,
+ ROLLBACK,
+ PONG,
+ ERROR
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/enums/NotificationTypeEnum.java b/code/link56/link56-backend-old/src/main/java/cn/link56/enums/NotificationTypeEnum.java
new file mode 100644
index 00000000..dbf473db
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/enums/NotificationTypeEnum.java
@@ -0,0 +1,29 @@
+package cn.link56.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum NotificationTypeEnum {
+ SYSTEM(0, "系统"),
+ LIKE(1, "赞"),
+ FAVORITE(2,"收藏"),
+ COMMENT(3, "评论");
+
+ private final Integer code; // 将 code 改为 String 类型
+ private final String description;
+
+ NotificationTypeEnum(Integer code, String description) {
+ this.code = code;
+ this.description = description;
+ }
+
+ // 根据 code 获取枚举
+ public static NotificationTypeEnum fromCode(Integer code) {
+ for (NotificationTypeEnum notification : NotificationTypeEnum.values()) {
+ if (notification.getCode().equals(code)) { // 使用 String 的 equals 比较
+ return notification;
+ }
+ }
+ return null;
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ResponseEnum.java b/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ResponseEnum.java
new file mode 100644
index 00000000..4cf67174
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/enums/ResponseEnum.java
@@ -0,0 +1,39 @@
+package cn.link56.enums;
+
+import cn.link56.constants.ResponseStatusConstants;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum ResponseEnum {
+ SUCCESS(ResponseStatusConstants.SUCCESS,"请求成功"),
+ ERROR(ResponseStatusConstants.ERROR,"服务器错误,请联系管理人员"),
+
+ AUTH_SUCCESS(ResponseStatusConstants.SUCCESS,"登录成功"),
+ AUTH_EXPIRE(ResponseStatusConstants.UNAUTHORIZED,"尚未登录或登录已过期,请重新登录"),
+ AUTH_ACCOUNT_ERROR(ResponseStatusConstants.UNAUTHORIZED,"登录失败,账号或密码有误"),
+ AUTH_FORGET_ERROR(ResponseStatusConstants.ERROR,"账号或邮箱不存在,请检查"),
+ AUTH_FORGET_SUCCESS(ResponseStatusConstants.SUCCESS,"密码已成功发送至您的邮箱,请注意查收"),
+
+ SAVE_SUCCESS(ResponseStatusConstants.SUCCESS,"保存成功"),
+ SAVE_ERROR(ResponseStatusConstants.ERROR,"保存失败,请稍后重试!"),
+
+ UPDATE_SUCCESS(ResponseStatusConstants.SUCCESS,"更新成功"),
+ UPDATE_ERROR(ResponseStatusConstants.ERROR,"更新失败,请稍后重试!"),
+ UPDATE_ACCOUNT_ERROR(ResponseStatusConstants.ERROR,"更新失败,该账号已被注册"),
+ UPDATE_EMAIL_ERROR(ResponseStatusConstants.ERROR,"更新失败,该邮箱已被注册"),
+
+ DELETE_SUCCESS(ResponseStatusConstants.SUCCESS,"删除成功"),
+ DELETE_ERROR(ResponseStatusConstants.ERROR,"删除失败,请稍后重试!"),
+
+ REGISTER_SUCCESS(ResponseStatusConstants.SUCCESS,"注册成功"),
+ REGISTER_ERROR(ResponseStatusConstants.ERROR,"注册失败"),
+ REGISTER_ACCOUNT_ERROR(ResponseStatusConstants.ERROR,"注册失败,该账号已被注册"),
+ REGISTER_EMAIL_ERROR(ResponseStatusConstants.ERROR,"注册失败,该邮箱已被注册"),
+
+ RESOURCE_NOT_FOUND(ResponseStatusConstants.NOT_FOUND,"资源不存在");
+
+ private final Integer code; //响应码
+ private final String message; //相应信息
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/exception/BaseException.java b/code/link56/link56-backend-old/src/main/java/cn/link56/exception/BaseException.java
new file mode 100644
index 00000000..ea495f37
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/exception/BaseException.java
@@ -0,0 +1,22 @@
+package cn.link56.exception;
+
+import cn.link56.enums.ResponseEnum;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class BaseException extends RuntimeException {
+ private Integer code;
+ private String message;
+
+ public BaseException() {
+ super();
+ }
+
+ public BaseException(ResponseEnum responseEnum) {
+ super(responseEnum.getMessage());
+ this.code = responseEnum.getCode();
+ this.message = responseEnum.getMessage();
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/exception/GlobalExceptionHandler.java b/code/link56/link56-backend-old/src/main/java/cn/link56/exception/GlobalExceptionHandler.java
new file mode 100644
index 00000000..1476adc4
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/exception/GlobalExceptionHandler.java
@@ -0,0 +1,94 @@
+package cn.link56.exception;
+
+import cn.link56.common.Result;
+import cn.link56.constants.ResponseStatusConstants;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.validation.BindException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingPathVariableException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolationException;
+import java.util.Objects;
+
+@Slf4j
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+ /**
+ * 请求方式不支持
+ */
+ @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+ public Result handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,
+ HttpServletRequest request)
+ {
+ String requestURI = request.getRequestURI();
+ String message = "请求地址 '" + requestURI + "' 不支持 '" + e.getMethod() + " ' 请求";
+ return Result.error(ResponseStatusConstants.BAD_REQUEST,message);
+ }
+ /**
+ * 请求路径中缺少必需的路径变量
+ */
+ @ExceptionHandler(MissingPathVariableException.class)
+ public Result handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request)
+ {
+ return Result.error(ResponseStatusConstants.BAD_REQUEST,String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName()));
+ }
+
+ /**
+ * 自定义验证异常
+ */
+ @ExceptionHandler(BindException.class)
+ public Result handleBindException(BindException e) {
+ log.error(e.getMessage(), e);
+ return Result.error(ResponseStatusConstants.BAD_REQUEST,"自定义校验异常");
+ }
+
+ /**
+ * 自定义验证异常
+ */
+ @ExceptionHandler(MethodArgumentNotValidException.class)
+ public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
+ String message = Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage();
+ return Result.error(ResponseStatusConstants.BAD_REQUEST,message);
+ }
+
+ /**
+ * 缺少参数异常
+ */
+ @ExceptionHandler(HttpMessageNotReadableException.class)
+ public Result handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
+ return Result.error(ResponseStatusConstants.BAD_REQUEST,"缺少请求体:" + e.getMessage());
+ }
+
+ /**
+ * 缺少参数异常
+ */
+ @ExceptionHandler(MissingServletRequestParameterException.class)
+ public Result handleMissingServletRequestParameterException(MissingServletRequestParameterException e) {
+ return Result.error(ResponseStatusConstants.BAD_REQUEST,"缺少参数:" + e.getMessage());
+ }
+
+ /**
+ * 缺少参数异常
+ */
+ @ExceptionHandler(ConstraintViolationException.class)
+ public Result handleConstraintViolationException(ConstraintViolationException e) {
+ return Result.error(ResponseStatusConstants.BAD_REQUEST,e.getMessage());
+ }
+
+ /**
+ * 处理系统异常
+ */
+ @ExceptionHandler(value = Exception.class)
+ public Result handleSystemException(Exception e) {
+ e.printStackTrace();
+ log.error("捕获到全局异常:{}",e.getMessage());
+ return Result.error();
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/exception/LoginException.java b/code/link56/link56-backend-old/src/main/java/cn/link56/exception/LoginException.java
new file mode 100644
index 00000000..a16ff87b
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/exception/LoginException.java
@@ -0,0 +1,5 @@
+package cn.link56.exception;
+
+public class LoginException extends BaseException{
+
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/interceptor/LoginInterceptor.java b/code/link56/link56-backend-old/src/main/java/cn/link56/interceptor/LoginInterceptor.java
new file mode 100644
index 00000000..8378b5c5
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/interceptor/LoginInterceptor.java
@@ -0,0 +1,90 @@
+package cn.link56.interceptor;
+
+import cn.link56.common.Result;
+import cn.link56.constants.ResponseStatusConstants;
+import cn.link56.context.UserContext;
+import cn.link56.utils.JsonUtils;
+import cn.link56.utils.JwtUtils;
+import com.auth0.jwt.interfaces.Claim;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
+import java.util.Map;
+
+public class LoginInterceptor implements HandlerInterceptor {
+
+ /***
+ * 在请求处理之前进行调用(Controller方法调用之前)
+ */
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ //OPTIONS方法是HTTP协议中定义的一种请求方法。它用于在客户端和服务器之间发起一个预检请求(Preflight Request),以确定实际的请求是否被服务器接受。
+ String method = request.getMethod();
+ if("OPTIONS".equalsIgnoreCase(method)){
+ return true;
+ }
+
+ boolean flag = false;
+
+ try {
+ String id = request.getHeader("id");
+ String token = request.getHeader("Authorization");
+ if (token.startsWith("Bearer ")) {
+ // 去掉 "Bearer " 前缀,获取 token 部分
+ token = token.substring(7); // "Bearer ".length() == 7
+ // 继续处理 token,例如验证、解码等操作
+ }
+
+ if(!StringUtils.isAllEmpty(id,token)){
+ // 验证token
+ JwtUtils.verify(token);
+
+ Map tokenInfo = JwtUtils.getTokenInfo(token);
+
+ Claim claim = tokenInfo.get("id");
+
+ String tokenId = claim.asString();
+
+ if(tokenId.equals(id)){
+ flag = true;
+ UserContext.setUserId(id);
+ }
+ }
+ }catch (Exception e){
+// e.printStackTrace();
+ }
+
+ if(!flag){
+ Result result = Result.error(ResponseStatusConstants.UNAUTHORIZED,"登录过期");
+ String jsonString = JsonUtils.toJson(result);
+ response.setContentType("application/json;charset=utf-8");
+ PrintWriter out = response.getWriter();
+ out.println(jsonString);
+ out.flush();
+ out.close();
+ }
+
+ return flag;
+ }
+
+ /***
+ * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
+ */
+ @Override
+ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+// System.out.println("执行了拦截器的postHandle方法");
+ }
+
+ /***
+ * 整个请求结束之后被调用,也就是在DispatchServlet渲染了对应的视图之后执行(主要用于进行资源清理工作)
+ */
+ @Override
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+// UserContext.removeUserContext();
+ UserContext.removeUserId();
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/ImMessageMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/ImMessageMapper.java
new file mode 100644
index 00000000..278ca347
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/ImMessageMapper.java
@@ -0,0 +1,37 @@
+package cn.link56.mapper;
+
+import cn.link56.domain.entity.ImMessage;
+import cn.link56.domain.vo.im.ChatCompanyVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ImMessageMapper extends BaseMapper {
+
+ /**
+ * 获取用户的聊天列表
+ * @param userId 用户ID,用于查询该用户的聊天记录
+ * @return 用户的聊天列表,包含每个聊天的公司信息
+ */
+ List getChats(@Param("userId") String userId);
+
+ /**
+ * 获取某个聊天的未读消息数量
+ * @param sendId 发送者的ID
+ * @param acceptId 接受者的ID
+ * @return 未读消息的数量
+ */
+ int getNoReadNumber(@Param("sendId") String sendId, @Param("acceptId") String acceptId);
+
+ /**
+ * 获取某个用户所有未读消息的总数
+ * @param acceptId 接受者的ID
+ * @return 所有未读消息的总数
+ */
+ Integer getAllNoReadNumber(@Param("acceptId") String acceptId);
+
+
+}
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/SlCompanyMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/SlCompanyMapper.java
new file mode 100644
index 00000000..7ea06122
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/SlCompanyMapper.java
@@ -0,0 +1,43 @@
+package cn.link56.mapper;
+
+import cn.link56.domain.entity.SlCompany;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+@Mapper
+public interface SlCompanyMapper extends BaseMapper {
+
+ /**
+ * 根据账号查找公司
+ * @param account 公司账号
+ * @return 匹配的公司,如果没有找到返回 null
+ */
+ SlCompany selectByAccount(@Param("account") String account);
+
+ /**
+ * 根据邮箱查找公司
+ * @param email 公司邮箱
+ * @return 匹配的公司,如果没有找到返回 null
+ */
+ SlCompany selectByEmail(@Param("email") String email);
+
+ /**
+ * 查找是否有相同账号但不是当前公司(排除给定的公司ID)
+ * @param account 公司账号
+ * @param companyId 当前公司的ID,用于排除
+ * @return 如果存在其他公司使用相同账号,则返回计数(1),否则返回 0
+ */
+ @Select("SELECT COUNT(1) FROM sl_company WHERE b_account = #{account} AND b_id != #{companyId}")
+ int selectByAccountExcludeId(@Param("account") String account, @Param("companyId") String companyId);
+
+ /**
+ * 查找是否有相同邮箱但不是当前公司(排除给定的公司ID)
+ * @param email 公司邮箱
+ * @param companyId 当前公司的ID,用于排除
+ * @return 如果存在其他公司使用相同邮箱,则返回计数(1),否则返回 0
+ */
+ @Select("SELECT COUNT(1) FROM sl_company WHERE b_email = #{email} AND b_id != #{companyId}")
+ int selectByEmailExcludeId(@Param("email") String email, @Param("companyId") String companyId);
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/SlFileMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/SlFileMapper.java
new file mode 100644
index 00000000..e7faeac5
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/SlFileMapper.java
@@ -0,0 +1,9 @@
+package cn.link56.mapper;
+
+import cn.link56.domain.entity.SlFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SlFileMapper extends BaseMapper {
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/SlNotificationMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/SlNotificationMapper.java
new file mode 100644
index 00000000..8370fd64
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/SlNotificationMapper.java
@@ -0,0 +1,20 @@
+package cn.link56.mapper;
+
+import cn.link56.domain.entity.SlNotification;
+import cn.link56.domain.vo.notification.NotificationVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface SlNotificationMapper extends BaseMapper {
+ List getLikeFavoritePage(@Param("acceptId") String acceptId,
+ @Param("startRow") int startRow,
+ @Param("endRow") int endRow);
+
+ List getCommentPage(@Param("acceptId") String acceptId,
+ @Param("startRow") int startRow,
+ @Param("endRow") int endRow);
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/WebAreaMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/WebAreaMapper.java
new file mode 100644
index 00000000..d70fc693
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/WebAreaMapper.java
@@ -0,0 +1,35 @@
+package cn.link56.mapper;
+
+import cn.link56.domain.entity.WebArea;
+import cn.link56.domain.vo.company.CompanyRecommendVO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface WebAreaMapper {
+
+ /**
+ * 获取所有省级地区信息
+ * @return 省级地区列表
+ */
+ List getShengAreas();
+
+ /**
+ * 获取所有市级地区信息
+ * @return 市级地区列表
+ */
+ List getShiAreas();
+
+ /**
+ * 获取所有区县级地区信息
+ * @return 区县级地区列表
+ */
+ List getQuAreas();
+
+ /**
+ * 获取所有可见的市级公司推荐列表
+ * @return 市级公司推荐列表
+ */
+ List getShiVisibleList();
+}
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/WebPropertyMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/WebPropertyMapper.java
new file mode 100644
index 00000000..36333471
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/WebPropertyMapper.java
@@ -0,0 +1,21 @@
+package cn.link56.mapper;
+
+import cn.link56.domain.entity.WebProperty;
+import cn.link56.domain.vo.property.WebPropertyVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface WebPropertyMapper extends BaseMapper {
+
+ /**
+ * 获取所有可用的Web属性列表
+ * 只查询 `b_canuse = '1'` 的属性
+ * @return 包含属性名称和属性值的 WebPropertyVO 列表
+ */
+ @Select("select b_name as label, b_name as value from web_property where b_canuse = '1'")
+ List getList();
+}
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostCommentMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostCommentMapper.java
new file mode 100644
index 00000000..49539de7
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostCommentMapper.java
@@ -0,0 +1,36 @@
+package cn.link56.mapper.forum;
+
+import cn.link56.domain.entity.forum.ForumPostComment;
+import cn.link56.domain.entity.SlCompany;
+import cn.link56.domain.vo.forum.comment.ForumPostCommentVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ForumPostCommentMapper extends BaseMapper {
+
+ /**
+ * 获取指定论坛帖子的评论列表
+ * @param forumPostId 论坛帖子ID
+ * @return 评论列表
+ */
+ List getPostComments(@Param("forumPostId") String forumPostId);
+
+ /**
+ * 根据评论ID获取关联的公司信息
+ * @param commentId 评论ID
+ * @return 评论的公司信息
+ */
+ SlCompany getCompanyByCommentId(@Param("commentId") String commentId);
+
+ /**
+ * 查询所有子评论的ID
+ * 递归查找指定评论及其所有子评论的ID列表
+ * @param rootId 根评论ID
+ * @return 子评论ID列表
+ */
+ List getCommentIdsByRootId(@Param("rootId") String rootId);
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostFavoriteMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostFavoriteMapper.java
new file mode 100644
index 00000000..9ee6715f
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostFavoriteMapper.java
@@ -0,0 +1,9 @@
+package cn.link56.mapper.forum;
+
+import cn.link56.domain.entity.forum.ForumPostFavorite;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ForumPostFavoriteMapper extends BaseMapper {
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostLikeMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostLikeMapper.java
new file mode 100644
index 00000000..b1a910ff
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostLikeMapper.java
@@ -0,0 +1,9 @@
+package cn.link56.mapper.forum;
+
+import cn.link56.domain.entity.forum.ForumPostLike;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ForumPostLikeMapper extends BaseMapper {
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostMapper.java
new file mode 100644
index 00000000..9acadc14
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostMapper.java
@@ -0,0 +1,74 @@
+package cn.link56.mapper.forum;
+
+import cn.link56.domain.entity.forum.ForumPost;
+import cn.link56.domain.vo.forum.ForumDashboardVO;
+import cn.link56.domain.vo.forum.post.ForumPostDetailVO;
+import cn.link56.domain.vo.forum.post.ForumPostPageVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartNumberVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartViewVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface ForumPostMapper extends BaseMapper {
+
+ /**
+ * 分页获取论坛帖子列表
+ * @param offset 偏移量,用于分页
+ * @param limit 每页显示的帖子数
+ * @param companyId 企业ID,用于筛选特定公司的帖子
+ * @param postTitle 帖子标题,用于搜索匹配的帖子
+ * @return 论坛帖子页面列表
+ */
+ List getPostPage(
+ @Param("offset") int offset,
+ @Param("limit") int limit,
+ @Param("companyId") String companyId,
+ @Param("postTitle") String postTitle,
+ @Param("postStatus") Integer postStatus
+ );
+
+ /**
+ * 获取论坛帖子的总数(根据公司和标题筛选)
+ * @param companyId 企业ID,用于筛选特定公司的帖子
+ * @param postTitle 帖子标题,用于搜索匹配的帖子
+ * @return 符合条件的论坛帖子总数
+ */
+ int countPosts(
+ @Param("companyId") String companyId,
+ @Param("postTitle") String postTitle,
+ @Param("postStatus") Integer postStatus
+ );
+
+ /**
+ * 获取推荐的论坛帖子列表
+ * @return 推荐的论坛帖子列表
+ */
+ List getRecommendList();
+
+ /**
+ * 获取热门的论坛帖子列表
+ * @return 热门的论坛帖子列表
+ */
+ List getHotList();
+
+ /**
+ * 根据 postId 获取 companyId
+ * @param postId 帖子ID
+ * @return 对应的公司ID
+ */
+ @Select("SELECT b_company_id FROM forum_post WHERE b_id = #{postId}")
+ String getCompanyIdByPostId(@Param("postId") String postId);
+
+ ForumPostDetailVO getPostDetail(@Param("forumPostId")String forumPostId,@Param("loginCompanyId")String loginCompanyId);
+
+ ForumDashboardVO getDashboardCountData(@Param("companyId") String companyId);
+
+ List getChartViewData(@Param("companyId") String companyId);
+
+ List getChartNumberData(@Param("companyId") String companyId);
+}
\ No newline at end of file
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostViewMapper.java b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostViewMapper.java
new file mode 100644
index 00000000..71968541
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/mapper/forum/ForumPostViewMapper.java
@@ -0,0 +1,9 @@
+package cn.link56.mapper.forum;
+
+import cn.link56.domain.entity.forum.ForumPostView;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ForumPostViewMapper extends BaseMapper {
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/AuthService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/AuthService.java
new file mode 100644
index 00000000..4f817b21
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/AuthService.java
@@ -0,0 +1,15 @@
+package cn.link56.service;
+
+import cn.link56.common.Result;
+import cn.link56.domain.dto.ForgetDTO;
+import cn.link56.domain.dto.LoginDTO;
+import cn.link56.domain.dto.RegisterDTO;
+import cn.link56.domain.vo.LoginVO;
+
+public interface AuthService {
+ Result register(RegisterDTO registerDTO);
+
+ Result login(LoginDTO loginDTO);
+
+ Result forget(ForgetDTO forgetDTO);
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/ImMessageService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/ImMessageService.java
new file mode 100644
index 00000000..6afe61b9
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/ImMessageService.java
@@ -0,0 +1,27 @@
+package cn.link56.service;
+
+import cn.link56.domain.dto.im.ImMessageHistoryDTO;
+import cn.link56.domain.dto.im.ImMessageUpdateIsReadDTO;
+import cn.link56.domain.entity.ImMessage;
+import cn.link56.domain.im.dto.ImAcceptOneDTO;
+import cn.link56.domain.im.dto.ImAcceptRollbackDTO;
+import cn.link56.domain.vo.im.AllNoReadNumberVO;
+import cn.link56.domain.vo.im.ChatCompanyVO;
+import cn.link56.domain.vo.im.ImMessageHistoryVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+public interface ImMessageService extends IService {
+ List getChats();
+
+ List getMessageHistory(ImMessageHistoryDTO imMessageHistoryDTO);
+
+ ImMessage insertOne(ImAcceptOneDTO imAcceptOneDTO);
+
+ void updateIsRead(ImMessageUpdateIsReadDTO imMessageUpdateIsReadDTO);
+
+ void updateIsRollback(ImAcceptRollbackDTO imAcceptRollbackDTO);
+
+ AllNoReadNumberVO getAllNoReadNumber();
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/SlCompanyService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/SlCompanyService.java
new file mode 100644
index 00000000..cd700224
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/SlCompanyService.java
@@ -0,0 +1,27 @@
+package cn.link56.service;
+
+import cn.link56.common.BasePageVO;
+import cn.link56.common.Result;
+import cn.link56.domain.dto.company.CompanyPageDTO;
+import cn.link56.domain.dto.company.CompanyPublicDetailDTO;
+import cn.link56.domain.dto.company.CompanyUpdateDetailDTO;
+import cn.link56.domain.entity.SlCompany;
+import cn.link56.domain.vo.company.*;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+public interface SlCompanyService extends IService {
+ BasePageVO getCompanyPage(CompanyPageDTO companyPageDTO);
+
+ CompanyPrivateDetailVO getPrivateDetail();
+
+ Result updateDetail(CompanyUpdateDetailDTO companyUpdateDetailDTO);
+
+ CompanyPublicDetailVO getPublicDetail(CompanyPublicDetailDTO companyPublicDetailDTO);
+
+ List getRecommendList();
+
+ List getRecommendRightList();
+
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/SlFileService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/SlFileService.java
new file mode 100644
index 00000000..1352b32a
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/SlFileService.java
@@ -0,0 +1,9 @@
+package cn.link56.service;
+
+import cn.link56.domain.dto.file.InsertFileDTO;
+import cn.link56.domain.entity.SlFile;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface SlFileService extends IService {
+ boolean insertFile(InsertFileDTO insertFileDTO);
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/SlNotificationService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/SlNotificationService.java
new file mode 100644
index 00000000..954a9a10
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/SlNotificationService.java
@@ -0,0 +1,17 @@
+package cn.link56.service;
+
+import cn.link56.common.BasePageDTO;
+import cn.link56.common.BasePageVO;
+import cn.link56.domain.entity.SlNotification;
+import cn.link56.domain.vo.notification.NotificationVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface SlNotificationService extends IService {
+ BasePageVO getLikeFavoritePage(BasePageDTO basePageDTO);
+
+ boolean deleteAllLikeAndFavorite();
+
+ BasePageVO getCommentPage(BasePageDTO basePageDTO);
+
+ boolean deleteAllComment();
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/WebAreaService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/WebAreaService.java
new file mode 100644
index 00000000..7df773f8
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/WebAreaService.java
@@ -0,0 +1,9 @@
+package cn.link56.service;
+
+import cn.link56.domain.vo.area.AreaVO;
+
+import java.util.List;
+
+public interface WebAreaService {
+ List getList();
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/WebPropertyService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/WebPropertyService.java
new file mode 100644
index 00000000..fb1abad1
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/WebPropertyService.java
@@ -0,0 +1,11 @@
+package cn.link56.service;
+
+import cn.link56.domain.entity.WebProperty;
+import cn.link56.domain.vo.property.WebPropertyVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+public interface WebPropertyService extends IService {
+ List getList();
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostCommentService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostCommentService.java
new file mode 100644
index 00000000..bc4889bd
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostCommentService.java
@@ -0,0 +1,17 @@
+package cn.link56.service.forum;
+
+import cn.link56.common.Result;
+import cn.link56.domain.dto.forum.comment.ForumCommentAddDTO;
+import cn.link56.domain.entity.forum.ForumPostComment;
+import cn.link56.domain.vo.forum.comment.ForumPostCommentVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+public interface ForumPostCommentService extends IService {
+ Result add(ForumCommentAddDTO forumCommentAddDTO);
+
+ List getPostComments(String forumPostId);
+
+ boolean deletePostComment(String forumPostCommentId);
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostFavoriteService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostFavoriteService.java
new file mode 100644
index 00000000..71439623
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostFavoriteService.java
@@ -0,0 +1,8 @@
+package cn.link56.service.forum;
+
+import cn.link56.domain.entity.forum.ForumPostFavorite;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface ForumPostFavoriteService extends IService {
+ void favorite(String postId);
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostLikeService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostLikeService.java
new file mode 100644
index 00000000..23d25347
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostLikeService.java
@@ -0,0 +1,8 @@
+package cn.link56.service.forum;
+
+import cn.link56.domain.entity.forum.ForumPostLike;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface ForumPostLikeService extends IService {
+ void like(String postId);
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostService.java
new file mode 100644
index 00000000..d8ad61e5
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostService.java
@@ -0,0 +1,42 @@
+package cn.link56.service.forum;
+
+import cn.link56.common.BasePageVO;
+import cn.link56.common.Result;
+import cn.link56.domain.dto.forum.post.*;
+import cn.link56.domain.entity.forum.ForumPost;
+import cn.link56.domain.vo.forum.ForumDashboardVO;
+import cn.link56.domain.vo.forum.post.ForumPostDetailVO;
+import cn.link56.domain.vo.forum.post.ForumPostPageVO;
+import cn.link56.domain.vo.forum.post.ForumPostStatusCountVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartNumberVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartTypeVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartViewVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+public interface ForumPostService extends IService {
+ Result add(ForumPostAddDTO forumPostAddDTO);
+
+ Result updateDetail(ForumPostUpdateDTO forumPostUpdateDTO);
+
+ Result delete(ForumPostDeleteDTO forumPostDeleteDTO);
+
+ Result> getPostPage(ForumPostCompanyPageDTO forumPostCompanyPageDTO);
+
+ ForumPostDetailVO getDetail(ForumPostDetailDTO forumPostDetailDTO);
+
+ List getRecommendList();
+
+ List getHotList();
+
+ ForumPostStatusCountVO getPostStatusCount();
+
+ ForumDashboardVO getDashBoardData();
+
+ List getChartViewData();
+
+ List getChartNumberData();
+
+ List getChartTypeData();
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostViewService.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostViewService.java
new file mode 100644
index 00000000..8f62ac86
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/ForumPostViewService.java
@@ -0,0 +1,8 @@
+package cn.link56.service.forum;
+
+import cn.link56.domain.entity.forum.ForumPostView;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface ForumPostViewService extends IService {
+ void view(String postId);
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostCommentServiceImpl.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostCommentServiceImpl.java
new file mode 100644
index 00000000..c4da7662
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostCommentServiceImpl.java
@@ -0,0 +1,187 @@
+package cn.link56.service.forum.impl;
+
+import cn.link56.common.Result;
+import cn.link56.domain.dto.forum.comment.ForumCommentAddDTO;
+import cn.link56.domain.entity.SlNotification;
+import cn.link56.domain.entity.forum.ForumPost;
+import cn.link56.domain.entity.forum.ForumPostComment;
+import cn.link56.domain.entity.SlCompany;
+import cn.link56.domain.vo.forum.comment.ForumPostCommentVO;
+import cn.link56.enums.NotificationTypeEnum;
+import cn.link56.mapper.SlNotificationMapper;
+import cn.link56.mapper.forum.ForumPostCommentMapper;
+import cn.link56.mapper.SlCompanyMapper;
+import cn.link56.mapper.forum.ForumPostMapper;
+import cn.link56.service.forum.ForumPostCommentService;
+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.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+@Service
+public class ForumPostCommentServiceImpl extends ServiceImpl implements ForumPostCommentService {
+ @Resource
+ private ForumPostCommentMapper forumPostCommentMapper;
+ @Resource
+ private SlCompanyMapper slCompanyMapper;
+ @Resource
+ private ForumPostMapper forumPostMapper;
+ @Autowired
+ private SlNotificationMapper slNotificationMapper;
+
+ @Override
+ public Result add(ForumCommentAddDTO forumCommentAddDTO) {
+ ForumPostComment forumPostComment = new ForumPostComment();
+
+ BeanUtils.copyProperties(forumCommentAddDTO, forumPostComment);
+
+ String fatherId = forumPostComment.getFatherId();
+
+ if(StringUtils.isEmpty(fatherId)){
+ forumPostComment.setFatherId("");
+ }
+
+ boolean flag = forumPostCommentMapper.insert(forumPostComment) > 0;
+
+
+ if(!flag){
+ return Result.error("评论失败,请刷新后重试!");
+ }
+
+ ForumPostCommentVO forumPostCommentVO = new ForumPostCommentVO();
+ BeanUtils.copyProperties(forumPostComment,forumPostCommentVO);
+ forumPostCommentVO.setCommentId(forumPostComment.getId());
+
+ // 发布人
+ SlCompany publishCompany = slCompanyMapper.selectById(forumPostComment.getCompanyId());
+ forumPostCommentVO.setPublishCompany(new ForumPostCommentVO.Company(publishCompany.getId(),publishCompany.getName(),publishCompany.getAvatar()));
+
+ if(!StringUtils.isEmpty(fatherId)){
+ SlCompany replyCompany = forumPostCommentMapper.getCompanyByCommentId(fatherId);
+ forumPostCommentVO.setReplyCompany(new ForumPostCommentVO.Company(replyCompany.getId(),replyCompany.getName(),replyCompany.getAvatar()));
+ }
+
+ handleAddCommentNotification(forumPostCommentVO);
+
+ return Result.success(forumPostCommentVO,"评论成功");
+ }
+ public List getPostComments(String forumPostId) {
+ // 1. 查询所有评论
+ List list = forumPostCommentMapper.getPostComments(forumPostId);
+
+ // 2. 构建扁平化树形结构(所有子评论提升到根评论层级)
+ List rootComments = new ArrayList<>();
+ Map commentMap = new HashMap<>();
+
+ // 2.1 初始化映射并收集根评论
+ for (ForumPostCommentVO comment : list) {
+ commentMap.put(comment.getCommentId(), comment);
+ if (StringUtils.isBlank(comment.getFatherId())) {
+ rootComments.add(comment);
+ comment.setChildren(new ArrayList<>()); // 提前初始化children
+ }
+ }
+
+ // 2.2 遍历所有评论,将子评论挂到根祖先的children中
+ for (ForumPostCommentVO comment : list) {
+ if (StringUtils.isBlank(comment.getFatherId())) {
+ continue; // 跳过根评论
+ }
+
+ // 查找当前评论的根祖先(追溯到没有fatherId的祖先)
+ ForumPostCommentVO rootAncestor = null;
+ String currentFatherId = comment.getFatherId();
+ while (true) {
+ ForumPostCommentVO parent = commentMap.get(currentFatherId);
+ if (parent == null) break; // 父节点不存在,终止循环
+
+ if (StringUtils.isBlank(parent.getFatherId())) {
+ rootAncestor = parent; // 找到根祖先
+ break;
+ } else {
+ currentFatherId = parent.getFatherId(); // 继续向上查找
+ }
+ }
+
+ // 挂载到根祖先的children中
+ if (rootAncestor != null && rootAncestor.getChildren() != null) {
+ rootAncestor.getChildren().add(comment);
+ }
+ }
+
+ // 3. 按原始顺序排序(可选)
+ rootComments.forEach(root -> {
+ if (root.getChildren() != null) {
+ // 根据需求排序,例如按创建时间升序
+ root.getChildren().sort(Comparator.comparing(ForumPostCommentVO::getCreateTime));
+ }
+ });
+
+ return rootComments;
+ }
+
+ @Override
+ @Transactional
+ public boolean deletePostComment(String forumPostCommentId) {
+ ForumPostComment forumPostComment = forumPostCommentMapper.selectById(forumPostCommentId);
+ if (forumPostComment == null) {
+ return false;
+ }
+
+ String fatherId = forumPostComment.getFatherId();
+
+ if (StringUtils.isBlank(fatherId)) {
+ // 父评论,需要递归删除自己和子评论
+ List commentIdsByRootId = forumPostCommentMapper.getCommentIdsByRootId(forumPostCommentId);
+ return forumPostCommentMapper.deleteByIds(commentIdsByRootId) > 0;
+ } else {
+ // 子评论,直接删自己
+ return forumPostCommentMapper.deleteById(forumPostCommentId) > 0;
+ }
+ }
+ @Async
+ public void handleAddCommentNotification(ForumPostCommentVO forumPostCommentVO){
+ String postId = forumPostCommentVO.getPostId();
+ ForumPost forumPost = forumPostMapper.selectById(postId);
+ String postCompanyId = forumPost.getCompanyId();
+
+ ForumPostCommentVO.Company publishCompany = forumPostCommentVO.getPublishCompany();
+ String publishCompanyId = publishCompany.getCompanyId();
+
+ ForumPostCommentVO.Company replyCompany = forumPostCommentVO.getReplyCompany();
+ String replyCompanyId = replyCompany != null ? replyCompany.getCompanyId() : null; // 防止为空
+
+ // 如果是根节点,通知帖子作者
+ if (StringUtils.isEmpty(forumPostCommentVO.getFatherId())) {
+ // 如果发布评论的人,并不是帖子作者本人才通知
+ if (!postCompanyId.equals(publishCompanyId)) {
+ SlNotification slNotification = new SlNotification();
+ slNotification
+ .setPostId(postId)
+ .setSendId(publishCompanyId)
+ .setAcceptId(postCompanyId)
+ .setType(NotificationTypeEnum.COMMENT.getCode())
+ .setContent(forumPostCommentVO.getContent());
+ slNotificationMapper.insert(slNotification);
+ }
+ }
+
+ // 如果不是根节点,通知接受者即可
+ if (replyCompanyId != null && !replyCompanyId.equals(publishCompanyId)) {
+ SlNotification slNotification = new SlNotification();
+ slNotification
+ .setPostId(postId)
+ .setSendId(publishCompanyId)
+ .setAcceptId(replyCompanyId)
+ .setType(NotificationTypeEnum.COMMENT.getCode())
+ .setContent(forumPostCommentVO.getContent());
+ slNotificationMapper.insert(slNotification);
+ }
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostFavoriteServiceImpl.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostFavoriteServiceImpl.java
new file mode 100644
index 00000000..010e5f9e
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostFavoriteServiceImpl.java
@@ -0,0 +1,73 @@
+package cn.link56.service.forum.impl;
+
+import cn.link56.context.UserContext;
+import cn.link56.domain.entity.SlNotification;
+import cn.link56.domain.entity.forum.ForumPost;
+import cn.link56.domain.entity.forum.ForumPostFavorite;
+import cn.link56.enums.NotificationTypeEnum;
+import cn.link56.mapper.SlNotificationMapper;
+import cn.link56.mapper.forum.ForumPostFavoriteMapper;
+import cn.link56.mapper.forum.ForumPostMapper;
+import cn.link56.service.forum.ForumPostFavoriteService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class ForumPostFavoriteServiceImpl extends ServiceImpl implements ForumPostFavoriteService {
+ @Resource
+ private ForumPostFavoriteMapper forumPostFavoriteMapper;
+ @Resource
+ private SlNotificationMapper slNotificationMapper;
+ @Resource
+ private ForumPostMapper forumPostMapper;
+ @Override
+ public void favorite(String postId) {
+ String companyId = UserContext.getUserId();
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ForumPostFavorite::getPostId,postId)
+ .eq(ForumPostFavorite::getCompanyId,companyId);
+
+ List forumPostFavorites = forumPostFavoriteMapper.selectList(queryWrapper);
+
+ if(forumPostFavorites.isEmpty()){
+ handleFavorite(postId,companyId);
+ } else {
+ handleUnFavorite(forumPostFavorites);
+ }
+ }
+ private void handleFavorite(String postId,String companyId){
+ ForumPostFavorite forumPostFavorite = new ForumPostFavorite();
+ forumPostFavorite.setPostId(postId)
+ .setCompanyId(companyId);
+
+ boolean insertFlag = forumPostFavoriteMapper.insert(forumPostFavorite) > 0;
+
+ if(insertFlag){
+ ForumPost forumPost = forumPostMapper.selectById(postId);
+ if(!forumPost.getCompanyId().equals(companyId)){
+ SlNotification slNotification = new SlNotification();
+
+ slNotification.setPostId(postId)
+ .setSendId(companyId)
+ .setType(NotificationTypeEnum.FAVORITE.getCode())
+ .setAcceptId(forumPostMapper.getCompanyIdByPostId(postId));
+
+ slNotificationMapper.insert(slNotification);
+ }
+ }
+ }
+
+ private void handleUnFavorite(List forumPostFavorites) {
+ // 收集所有的 id
+ List idsToDelete = forumPostFavorites.stream()
+ .map(ForumPostFavorite::getId) // 获取每个 ForumPostLike 的 id
+ .collect(Collectors.toList()); // 收集到一个 List
+
+ forumPostFavoriteMapper.deleteByIds(idsToDelete);
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostLikeServiceImpl.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostLikeServiceImpl.java
new file mode 100644
index 00000000..ef95608c
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostLikeServiceImpl.java
@@ -0,0 +1,74 @@
+package cn.link56.service.forum.impl;
+
+import cn.link56.context.UserContext;
+import cn.link56.domain.entity.SlNotification;
+import cn.link56.domain.entity.forum.ForumPost;
+import cn.link56.domain.entity.forum.ForumPostLike;
+import cn.link56.enums.NotificationTypeEnum;
+import cn.link56.mapper.SlNotificationMapper;
+import cn.link56.mapper.forum.ForumPostLikeMapper;
+import cn.link56.mapper.forum.ForumPostMapper;
+import cn.link56.service.forum.ForumPostLikeService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class ForumPostLikeServiceImpl extends ServiceImpl implements ForumPostLikeService {
+ @Resource
+ private ForumPostLikeMapper forumPostLikeMapper;
+ @Resource
+ private SlNotificationMapper slNotificationMapper;
+ @Resource
+ private ForumPostMapper forumPostMapper;
+ @Override
+ public void like(String postId) {
+ String companyId = UserContext.getUserId();
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ForumPostLike::getPostId,postId)
+ .eq(ForumPostLike::getCompanyId,companyId);
+
+ List forumPostLikes = forumPostLikeMapper.selectList(queryWrapper);
+
+ if(forumPostLikes.isEmpty()){
+ handleLike(postId,companyId);
+ } else {
+ handleUnLike(forumPostLikes);
+ }
+ }
+
+ private void handleLike(String postId,String companyId){
+ ForumPostLike forumPostLike = new ForumPostLike();
+ ForumPost forumPost = forumPostMapper.selectById(postId);
+ forumPostLike.setPostId(postId)
+ .setCompanyId(companyId);
+
+ boolean insertFlag = forumPostLikeMapper.insert(forumPostLike) > 0;
+
+ if(insertFlag){
+ if(!forumPost.getCompanyId().equals(companyId)){
+ SlNotification slNotification = new SlNotification();
+
+ slNotification.setPostId(postId)
+ .setSendId(companyId)
+ .setType(NotificationTypeEnum.LIKE.getCode())
+ .setAcceptId(forumPostMapper.getCompanyIdByPostId(postId));
+
+ slNotificationMapper.insert(slNotification);
+ }
+ }
+ }
+
+ private void handleUnLike(List forumPostLikes) {
+ // 收集所有的 id
+ List idsToDelete = forumPostLikes.stream()
+ .map(ForumPostLike::getId) // 获取每个 ForumPostLike 的 id
+ .collect(Collectors.toList()); // 收集到一个 List
+
+ forumPostLikeMapper.deleteByIds(idsToDelete);
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostServiceImpl.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostServiceImpl.java
new file mode 100644
index 00000000..d1ac5638
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostServiceImpl.java
@@ -0,0 +1,286 @@
+package cn.link56.service.forum.impl;
+
+import cn.link56.common.BasePageVO;
+import cn.link56.common.Result;
+import cn.link56.context.UserContext;
+import cn.link56.domain.dto.forum.post.*;
+import cn.link56.domain.entity.forum.ForumPost;
+import cn.link56.domain.entity.forum.ForumPostComment;
+import cn.link56.domain.vo.forum.ForumDashboardVO;
+import cn.link56.domain.vo.forum.post.ForumPostDetailVO;
+import cn.link56.domain.vo.forum.post.ForumPostPageVO;
+import cn.link56.domain.vo.forum.post.ForumPostStatusCountVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartNumberVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartTypeVO;
+import cn.link56.domain.vo.forum.post.chart.ForumPostChartViewVO;
+import cn.link56.domain.vo.property.WebPropertyVO;
+import cn.link56.enums.ForumPostStatusEnum;
+import cn.link56.mapper.WebPropertyMapper;
+import cn.link56.mapper.forum.ForumPostCommentMapper;
+import cn.link56.mapper.forum.ForumPostMapper;
+import cn.link56.service.forum.ForumPostService;
+import cn.link56.utils.ConvertUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class ForumPostServiceImpl extends ServiceImpl implements ForumPostService {
+ @Resource
+ private ForumPostMapper forumPostMapper;
+ @Resource
+ private ForumPostCommentMapper forumPostCommentMapper;
+ @Resource
+ private WebPropertyMapper webPropertyMapper;
+
+ @Override
+ public Result add(ForumPostAddDTO forumPostAddDTO) {
+
+ ForumPost forumPost = new ForumPost();
+ BeanUtils.copyProperties(forumPostAddDTO,forumPost);
+ forumPost.setTags(ConvertUtils.formatTags(forumPostAddDTO.getTags()));
+
+ boolean flag = forumPostMapper.insert(forumPost) > 0;
+
+ if(flag){
+ return Result.success(transDetailVO(forumPost));
+ }
+
+ return Result.error();
+ }
+
+ @Override
+ public Result updateDetail(ForumPostUpdateDTO forumPostUpdateDTO) {
+ String forumPostId = forumPostUpdateDTO.getForumPostId();
+ ForumPost forumPost = new ForumPost();
+
+ BeanUtils.copyProperties(forumPostUpdateDTO,forumPost);
+
+ forumPost.setId(forumPostId);
+ forumPost.setTags(ConvertUtils.formatTags(forumPostUpdateDTO.getTags()));
+
+ return forumPostMapper.updateById(forumPost) > 0 ? Result.success(transDetailVO(forumPost)) : Result.error();
+ }
+
+ @Override
+ @Transactional
+ public Result delete(ForumPostDeleteDTO forumPostDeleteDTO) {
+ String forumPostId = forumPostDeleteDTO.getForumPostId();
+
+ // 查询帖子是否存在
+ ForumPost forumPost = forumPostMapper.selectById(forumPostId);
+ if (forumPost == null) {
+ // 帖子不存在,返回成功
+ return Result.success();
+ }
+
+ // 删除与该帖子相关的评论
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ForumPostComment::getPostId, forumPostId);
+ List forumPostComments = forumPostCommentMapper.selectList(queryWrapper);
+
+ // 如果有评论,删除评论
+ if (!forumPostComments.isEmpty()) {
+ List commentIds = forumPostComments.stream()
+ .map(ForumPostComment::getId)
+ .collect(Collectors.toList());
+
+ forumPostCommentMapper.delete(new LambdaQueryWrapper().in(ForumPostComment::getId, commentIds));
+ }
+
+ // 删除帖子
+ boolean deleteFlag = forumPostMapper.deleteById(forumPostId) > 0;
+
+ // 根据删除结果返回
+ return deleteFlag ? Result.success() : Result.error();
+ }
+
+ @Override
+ public Result> getPostPage(ForumPostCompanyPageDTO dto) {
+ String companyId = dto.getCompanyId();
+ String postTitle = dto.getPostTitle();
+ Integer status = dto.getStatus();
+
+ int page = dto.getPage();
+ int size = dto.getPageSize();
+ int offset = (page - 1) * size + 1;
+ int limit = page * size;
+
+ List list = forumPostMapper.getPostPage(offset, limit, companyId,postTitle,status);
+ int total = forumPostMapper.countPosts(companyId,postTitle,status);
+ list.forEach(item -> {
+ item.setTags(ConvertUtils.parseTags(item.getTagsString()));
+ });
+ BasePageVO result = new BasePageVO<>();
+ result.setRecord(list);
+ result.setTotal(total);
+
+ return Result.success(result);
+ }
+
+ @Override
+ public ForumPostDetailVO getDetail(ForumPostDetailDTO forumPostDetailDTO) {
+ ForumPostDetailVO postDetail = forumPostMapper.getPostDetail(forumPostDetailDTO.getForumPostId(), forumPostDetailDTO.getCompanyId());
+ postDetail.setTags(ConvertUtils.parseTags(postDetail.getTagsString()));
+ if(ObjectUtils.isEmpty(postDetail.getIsFavorite())){
+ postDetail.setIsFavorite(false);
+ }
+ if(ObjectUtils.isEmpty(postDetail.getIsLike())){
+ postDetail.setIsLike(false);
+ }
+ return postDetail;
+ }
+
+ @Override
+ public List getRecommendList() {
+ return forumPostMapper.getRecommendList();
+ }
+
+ @Override
+ public List getHotList() {
+ return forumPostMapper.getHotList();
+ }
+
+ @Override
+ public ForumPostStatusCountVO getPostStatusCount() {
+ String companyId = UserContext.getUserId();
+
+ // 全部
+ LambdaQueryWrapper allWrapper = new LambdaQueryWrapper<>();
+ allWrapper.eq(ForumPost::getCompanyId, companyId);
+ Long all = forumPostMapper.selectCount(allWrapper);
+
+ // 草稿
+ LambdaQueryWrapper draftWrapper = new LambdaQueryWrapper<>();
+ draftWrapper.eq(ForumPost::getCompanyId, companyId)
+ .eq(ForumPost::getStatus, ForumPostStatusEnum.DRAFT.getCode());
+ Long draft = forumPostMapper.selectCount(draftWrapper);
+
+ // 正常
+ LambdaQueryWrapper normalWrapper = new LambdaQueryWrapper<>();
+ normalWrapper.eq(ForumPost::getCompanyId, companyId)
+ .eq(ForumPost::getStatus, ForumPostStatusEnum.NORMAL.getCode());
+ Long normal = forumPostMapper.selectCount(normalWrapper);
+
+ ForumPostStatusCountVO vo = new ForumPostStatusCountVO();
+ vo.setAll(all);
+ vo.setDraft(draft);
+ vo.setNormal(normal);
+ return vo;
+ }
+
+ @Override
+ public ForumDashboardVO getDashBoardData() {
+ String companyId = UserContext.getUserId();
+
+ return forumPostMapper.getDashboardCountData(companyId);
+ }
+
+ @Override
+ public List getChartViewData() {
+ String companyId = UserContext.getUserId();
+
+ List list = forumPostMapper.getChartViewData(companyId);
+
+ Map map = list.stream()
+ .collect(Collectors.toMap(ForumPostChartViewVO::getLabel, ForumPostChartViewVO::getValue));
+
+ List resData = new ArrayList<>();
+ for (int i = 6; i >= 0; i--) {
+ String date = LocalDate.now().minusDays(i).toString(); // yyyy-MM-dd
+ resData.add(new ForumPostChartViewVO(date, map.getOrDefault(date, 0)));
+ }
+
+ return resData;
+ }
+
+ @Override
+ public List getChartNumberData() {
+ String companyId = UserContext.getUserId();
+ List list = forumPostMapper.getChartNumberData(companyId);
+
+ Map map = list.stream()
+ .collect(Collectors.toMap(ForumPostChartNumberVO::getLabel, ForumPostChartNumberVO::getValue));
+
+ List resData = new ArrayList<>();
+ for (int i = 6; i >= 0; i--) {
+ String date = LocalDate.now().minusDays(i).toString(); // yyyy-MM-dd
+ resData.add(new ForumPostChartNumberVO(date, map.getOrDefault(date, 0)));
+ }
+
+ return resData;
+ }
+
+ @Override
+ public List getChartTypeData() {
+ String companyId = UserContext.getUserId();
+
+ // 查询符合条件的论坛帖子
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ForumPost::getCompanyId, companyId)
+ .eq(ForumPost::getStatus, ForumPostStatusEnum.NORMAL.getCode());
+ List forumPosts = forumPostMapper.selectList(queryWrapper);
+
+ // 获取 WebProperty 的列表
+ List list = webPropertyMapper.getList();
+ List propertys = list.stream()
+ .map(WebPropertyVO::getValue)
+ .collect(Collectors.toList());
+
+ // 用来存储结果的列表,使用 Map 存储标签及其对应的总值
+ Map tagCountMap = new HashMap<>();
+
+ // 遍历论坛帖子
+ forumPosts.forEach(item -> {
+ String tags = item.getTags(); // 获取标签字符串
+ if (StringUtils.isNotEmpty(tags)) {
+ // 将 tags 字符串拆分成标签列表
+ List tagArray = ConvertUtils.parseTags(tags);
+
+ // 检查每个标签是否在 propertys 中
+ for (String tag : tagArray) {
+ if (propertys.contains(tag.trim())) {
+ // 累加标签的计数值
+ tagCountMap.put(tag.trim(), tagCountMap.getOrDefault(tag.trim(), 0) + 1);
+ }
+ }
+ }
+ });
+
+ // 将 Map 转换为 ForumPostChartTypeVO 列表
+ List chartData = tagCountMap.entrySet().stream()
+ .map(entry -> {
+ ForumPostChartTypeVO chartTypeVO = new ForumPostChartTypeVO();
+ chartTypeVO.setLabel(entry.getKey());
+ chartTypeVO.setValue(entry.getValue());
+ return chartTypeVO;
+ })
+ .collect(Collectors.toList());
+
+ return chartData; // 返回最终的列表
+ }
+
+
+
+ public ForumPostDetailVO transDetailVO(ForumPost forumPost) {
+ if (forumPost == null) {
+ return null;
+ }
+
+ ForumPostDetailVO vo = new ForumPostDetailVO();
+ BeanUtils.copyProperties(forumPost, vo);
+ vo.setForumPostId(forumPost.getId());
+ vo.setTags(ConvertUtils.parseTags(forumPost.getTags()));
+ vo.setPublishTime(forumPost.getUpdateTime());
+ return vo;
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostViewServiceImpl.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostViewServiceImpl.java
new file mode 100644
index 00000000..751012cb
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/forum/impl/ForumPostViewServiceImpl.java
@@ -0,0 +1,24 @@
+package cn.link56.service.forum.impl;
+
+import cn.link56.domain.entity.forum.ForumPostView;
+import cn.link56.mapper.forum.ForumPostViewMapper;
+import cn.link56.service.forum.ForumPostViewService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class ForumPostViewServiceImpl extends ServiceImpl implements ForumPostViewService {
+ @Resource
+ private ForumPostViewMapper forumPostViewMapper;
+
+ @Override
+ @Async
+ public void view(String postId) {
+ ForumPostView forumPostView = new ForumPostView();
+ forumPostView.setPostId(postId);
+ forumPostViewMapper.insert(forumPostView);
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/AuthServiceImpl.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/AuthServiceImpl.java
new file mode 100644
index 00000000..43e7ac0e
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/AuthServiceImpl.java
@@ -0,0 +1,108 @@
+package cn.link56.service.impl;
+
+import cn.link56.common.Result;
+import cn.link56.domain.dto.ForgetDTO;
+import cn.link56.domain.dto.LoginDTO;
+import cn.link56.domain.dto.RegisterDTO;
+import cn.link56.domain.entity.SlCompany;
+import cn.link56.domain.vo.LoginVO;
+import cn.link56.mapper.SlCompanyMapper;
+import cn.link56.service.AuthService;
+import cn.link56.utils.EmailUtils;
+import cn.link56.utils.JwtUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+public class AuthServiceImpl implements AuthService {
+ @Resource
+ private SlCompanyMapper slCompanyMapper;
+ @Resource
+ private EmailUtils emailUtils;
+ @Override
+ public Result register(RegisterDTO registerDTO) {
+ String account = registerDTO.getAccount();
+ String name = registerDTO.getName();
+ String password = registerDTO.getPassword();
+ String email = registerDTO.getEmail();
+
+ SlCompany slCompanyByAccount = slCompanyMapper.selectByAccount(account);
+
+ if(ObjectUtils.isNotEmpty(slCompanyByAccount)){
+ return Result.error("该账号已被注册,请尝试其他账号");
+ }
+
+ SlCompany slCompanyByEmail = slCompanyMapper.selectByEmail(email);
+
+ if(ObjectUtils.isNotEmpty(slCompanyByEmail)){
+ return Result.error("该邮箱已被使用,请更换邮箱");
+ }
+
+ SlCompany slCompany = new SlCompany();
+ slCompany.setAccount(account)
+ .setName(name)
+ .setEmail(email)
+ .setPassword(password);
+
+ int insert = slCompanyMapper.insert(slCompany);
+
+ if(insert > 0){
+ return Result.success("注册成功");
+ }
+
+ return Result.error("注册失败,请稍后重试");
+ }
+
+ @Override
+ public Result login(LoginDTO loginDTO) {
+ String loginCredential = loginDTO.getLoginCredential();
+ String password = loginDTO.getPassword();
+
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(SlCompany::getEmail,loginCredential)
+ .eq(SlCompany::getPassword,password);
+
+ SlCompany slCompany = slCompanyMapper.selectOne(queryWrapper);
+
+ if(ObjectUtils.isEmpty(slCompany)){
+ return Result.error("密码错误");
+ }
+
+ String token = JwtUtils.createToken(slCompany.getId());
+
+ LoginVO loginVO = new LoginVO();
+
+ BeanUtils.copyProperties(slCompany,loginVO);
+
+ loginVO.setId(slCompany.getId());
+ loginVO.setToken(token);
+ loginVO.setAvatar(slCompany.getAvatar());
+
+ return Result.success(loginVO);
+ }
+
+ @Override
+ public Result forget(ForgetDTO forgetDTO) {
+ String forgetCredential = forgetDTO.getForgetCredential();
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(SlCompany::getEmail,forgetCredential)
+ .or()
+ .eq(SlCompany::getAccount,forgetCredential);
+ SlCompany slCompany = slCompanyMapper.selectOne(queryWrapper);
+ if (ObjectUtils.isEmpty(slCompany)) {
+ return Result.error("找回失败,该邮箱或账户不存在!");
+ } else {
+ Map map = new HashMap<>();
+ map.put("account", slCompany.getAccount());
+ map.put("password", slCompany.getPassword());
+ boolean sendFlag = emailUtils.sendEmail("ForgetPassword.html", "找回密码", map, slCompany.getEmail());
+ return sendFlag ? Result.success("找回密码成功,请查看邮箱!") : Result.error("找回密码失败,请稍后再试!");
+ }
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/ImMessageServiceImpl.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/ImMessageServiceImpl.java
new file mode 100644
index 00000000..4f288357
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/ImMessageServiceImpl.java
@@ -0,0 +1,129 @@
+package cn.link56.service.impl;
+
+import cn.link56.context.UserContext;
+import cn.link56.domain.dto.im.ImMessageHistoryDTO;
+import cn.link56.domain.dto.im.ImMessageUpdateIsReadDTO;
+import cn.link56.domain.entity.ImMessage;
+import cn.link56.domain.im.dto.ImAcceptOneDTO;
+import cn.link56.domain.im.dto.ImAcceptRollbackDTO;
+import cn.link56.domain.vo.im.AllNoReadNumberVO;
+import cn.link56.domain.vo.im.ChatCompanyVO;
+import cn.link56.domain.vo.im.ImMessageHistoryVO;
+import cn.link56.mapper.ImMessageMapper;
+import cn.link56.service.ImMessageService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class ImMessageServiceImpl extends ServiceImpl implements ImMessageService {
+ @Resource
+ private ImMessageMapper imMessageMapper;
+
+ @Override
+ public List getChats() {
+ String acceptId = UserContext.getUserId();
+ List list = imMessageMapper.getChats(acceptId);
+
+ list.forEach(item -> {
+ String sendId = item.getCompanyId();
+ Integer noReadNumber = imMessageMapper.getNoReadNumber(sendId,acceptId);
+ item.setNoReadNumber(noReadNumber);
+ if(ObjectUtils.isNotEmpty(item.getIsRollback()) && item.getIsRollback() == 1){
+ item.setLastContent("");
+ }
+ });
+ return list;
+ }
+
+ @Override
+ public List getMessageHistory(ImMessageHistoryDTO imMessageHistoryDTO) {
+ String chatId = imMessageHistoryDTO.getChatCompanyId();
+ String userId = UserContext.getUserId();
+
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.and(wrapper -> wrapper.eq(ImMessage::getSendId, userId)
+ .eq(ImMessage::getAcceptId, chatId))
+ .or(wrapper -> wrapper.eq(ImMessage::getSendId, chatId)
+ .eq(ImMessage::getAcceptId, userId));
+
+ // 添加排序,例如根据消息的时间戳降序排列
+ queryWrapper.orderByAsc(ImMessage::getCreateTime);
+
+ List list = imMessageMapper.selectList(queryWrapper);
+ List result = new ArrayList<>();
+
+ list.forEach(item -> {
+ ImMessageHistoryVO imMessageHistoryVO = new ImMessageHistoryVO();
+ imMessageHistoryVO.setMessageId(item.getId())
+ .setMessageContent(item.getContent())
+ .setMessageContentType(item.getContentType())
+ .setSendId(item.getSendId())
+ .setAcceptId(item.getAcceptId())
+ .setQuoteMessageId(item.getQuoteId())
+ .setIsRollback(item.getIsRollback())
+ .setSendMessageTime(item.getCreateTime());
+ if(ObjectUtils.isNotEmpty(item.getIsRollback()) && item.getIsRollback() == 1){
+ imMessageHistoryVO.setMessageContent("");
+ }
+ result.add(imMessageHistoryVO);
+ });
+
+ return result;
+ }
+
+ @Override
+ public ImMessage insertOne(ImAcceptOneDTO imAcceptOneDTO) {
+ ImMessage imMessage = new ImMessage();
+
+ BeanUtils.copyProperties(imAcceptOneDTO,imMessage);
+ int insert = imMessageMapper.insert(imMessage);
+
+ if(insert > 0){
+ return imMessage;
+ }
+ return null;
+ }
+
+ @Override
+ public void updateIsRead(ImMessageUpdateIsReadDTO imMessageUpdateIsReadDTO) {
+ String companyId = imMessageUpdateIsReadDTO.getCompanyId();
+ String userId = UserContext.getUserId();
+
+ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
+ updateWrapper.set(ImMessage::getIsRead,1)
+ .eq(ImMessage::getSendId,companyId)
+ .eq(ImMessage::getAcceptId,userId);
+
+ imMessageMapper.update(updateWrapper);
+ }
+
+ @Override
+ public void updateIsRollback(ImAcceptRollbackDTO imAcceptRollbackDTO) {
+ String messageId = imAcceptRollbackDTO.getMessageId();
+
+ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
+ updateWrapper.set(ImMessage::getIsRollback,1)
+ .eq(ImMessage::getId,messageId);
+
+ imMessageMapper.update(updateWrapper);
+ }
+
+ @Override
+ public AllNoReadNumberVO getAllNoReadNumber() {
+ AllNoReadNumberVO allNoReadNumberVO = new AllNoReadNumberVO();
+ String userId = UserContext.getUserId();
+ Integer number = imMessageMapper.getAllNoReadNumber(userId);
+
+ allNoReadNumberVO.setNoReadNumber(number);
+ return allNoReadNumberVO;
+ }
+
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/SlCompanyServiceImpl.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/SlCompanyServiceImpl.java
new file mode 100644
index 00000000..ab4827a6
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/SlCompanyServiceImpl.java
@@ -0,0 +1,211 @@
+package cn.link56.service.impl;
+
+import cn.link56.common.BasePageVO;
+import cn.link56.common.Result;
+import cn.link56.context.UserContext;
+import cn.link56.domain.dto.company.CompanyPageDTO;
+import cn.link56.domain.dto.company.CompanyPublicDetailDTO;
+import cn.link56.domain.dto.company.CompanyUpdateDetailDTO;
+import cn.link56.domain.entity.SlCompany;
+import cn.link56.domain.vo.company.*;
+import cn.link56.mapper.SlCompanyMapper;
+import cn.link56.mapper.WebAreaMapper;
+import cn.link56.service.SlCompanyService;
+import cn.link56.utils.ConvertUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class SlCompanyServiceImpl extends ServiceImpl implements SlCompanyService {
+ @Resource
+ private SlCompanyMapper slCompanyMapper;
+ @Resource
+ private WebAreaMapper webAreaMapper;
+ @Override
+ public BasePageVO getCompanyPage(CompanyPageDTO companyPageDTO) {
+ int page = companyPageDTO.getPage();
+ int pageSize = companyPageDTO.getPageSize();
+
+ Page companyPage = new Page<>(page, pageSize);
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+
+ // 模糊匹配公司名
+ String name = companyPageDTO.getName();
+ if (StringUtils.isNotBlank(name)) {
+ queryWrapper.like(SlCompany::getName, name);
+ }
+
+ // 多个地区模糊匹配 address
+ List areaList = companyPageDTO.getArea();
+ if (!CollectionUtils.isEmpty(areaList)) {
+ queryWrapper.and(wrapper -> {
+ for (String area : areaList) {
+ wrapper.or(w -> w.like(SlCompany::getAddress, area));
+ }
+ });
+ }
+
+ // 多个行业模糊匹配 industry
+ List industryList = companyPageDTO.getIndustry();
+ if (!CollectionUtils.isEmpty(industryList)) {
+ queryWrapper.and(wrapper -> {
+ for (String industry : industryList) {
+ wrapper.or(w -> w.like(SlCompany::getIndustry, industry));
+ }
+ });
+ }
+
+ queryWrapper.orderByDesc(SlCompany::getCreateTime);
+
+ List slCompanyList = slCompanyMapper.selectList(companyPage, queryWrapper);
+
+ List result = slCompanyList.stream()
+ .map(item -> {
+ CompanyPageVO vo = new CompanyPageVO();
+ BeanUtils.copyProperties(item, vo);
+ vo.setIndustry(ConvertUtils.parseTags(item.getIndustry()));
+ vo.setAddress(ConvertUtils.parseTags(item.getAddress()));
+ vo.setCompanyId(item.getId());
+ return vo;
+ })
+ .collect(Collectors.toList());
+
+
+ return new BasePageVO()
+ .setRecord(result)
+ .setTotal(companyPage.getTotal());
+ }
+
+ @Override
+ public CompanyPrivateDetailVO getPrivateDetail() {
+ String companyId = UserContext.getUserId();
+ if(StringUtils.isEmpty(companyId)){
+ return null;
+ }
+ SlCompany slCompany = slCompanyMapper.selectById(companyId);
+
+ CompanyPrivateDetailVO companyPrivateDetailVO = new CompanyPrivateDetailVO();
+
+ BeanUtils.copyProperties(slCompany,companyPrivateDetailVO);
+
+ companyPrivateDetailVO.setIndustry(ConvertUtils.parseTags(slCompany.getIndustry()));
+ companyPrivateDetailVO.setAddress(ConvertUtils.parseTags(slCompany.getAddress()));
+ companyPrivateDetailVO.setCompanyId(slCompany.getId());
+ return companyPrivateDetailVO;
+ }
+
+ @Override
+ public Result updateDetail(CompanyUpdateDetailDTO companyUpdateDetailDTO) {
+ String email = companyUpdateDetailDTO.getEmail();
+ String account = companyUpdateDetailDTO.getAccount();
+ String companyId = companyUpdateDetailDTO.getCompanyId();
+
+ boolean isExistsAccount = slCompanyMapper.selectByAccountExcludeId(account,companyId) > 0;
+ boolean isExistsEmail = slCompanyMapper.selectByEmailExcludeId(email,companyId) > 0;
+
+ if(isExistsAccount){
+ return Result.error("该账号已被注册");
+ }
+
+ if(isExistsEmail){
+ return Result.error("该邮箱已被注册");
+ }
+
+ SlCompany slCompany = new SlCompany();
+ BeanUtils.copyProperties(companyUpdateDetailDTO,slCompany);
+ slCompany.setId(companyUpdateDetailDTO.getCompanyId());
+
+ slCompany.setAddress(ConvertUtils.formatTags(companyUpdateDetailDTO.getAddress()));
+ slCompany.setIndustry(ConvertUtils.formatTags(companyUpdateDetailDTO.getIndustry()));
+
+ return slCompanyMapper.updateById(slCompany) > 0 ? Result.success() : Result.error();
+ }
+
+ @Override
+ public CompanyPublicDetailVO getPublicDetail(CompanyPublicDetailDTO companyPublicDetailDTO) {
+ String companyId = companyPublicDetailDTO.getCompanyId();
+
+ SlCompany slCompany = slCompanyMapper.selectById(companyId);
+
+ if(ObjectUtils.isEmpty(slCompany)){
+ return null;
+ }
+
+ CompanyPublicDetailVO companyPublicDetailVO = new CompanyPublicDetailVO();
+
+ BeanUtils.copyProperties(slCompany,companyPublicDetailVO);
+
+ companyPublicDetailVO.setCompanyId(slCompany.getId());
+
+ companyPublicDetailVO.setAddress(ConvertUtils.parseTags(slCompany.getAddress()));
+ companyPublicDetailVO.setIndustry(ConvertUtils.parseTags(slCompany.getIndustry()));
+
+ return companyPublicDetailVO;
+ }
+
+ @Override
+ public List getRecommendList() {
+ List result = webAreaMapper.getShiVisibleList();
+ result.forEach(item -> {
+ String shiName = item.getShiName();
+ LambdaQueryWrapper companyLambdaQueryWrapper = new LambdaQueryWrapper<>();
+
+ companyLambdaQueryWrapper.like(SlCompany::getAddress,shiName)
+ .eq(SlCompany::getVisible,"1")
+ .orderByAsc(SlCompany::getBOrder);
+
+ List slCompanies = slCompanyMapper.selectList(companyLambdaQueryWrapper);
+
+ List filtered = slCompanies.stream()
+ .filter(company -> isSecondEqualsTarget(company.getAddress(), shiName))
+ .map(company -> new CompanyRecommendVO.CompanyInfo(
+ company.getId(),
+ company.getName(),
+ company.getColor()
+ ))
+ .collect(Collectors.toList());
+
+ item.setCompanies(filtered);
+ });
+ return result;
+ }
+
+ @Override
+ public List getRecommendRightList() {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(SlCompany::getRightVisible,"1")
+ .orderByAsc(SlCompany::getBOrder);
+
+ List slCompanies = slCompanyMapper.selectList(queryWrapper);
+
+
+ List result = new ArrayList<>();
+ slCompanies.forEach(item -> {
+ CompanyRecommendRightVO companyRecommendRightVO = new CompanyRecommendRightVO();
+ BeanUtils.copyProperties(item, companyRecommendRightVO);
+ companyRecommendRightVO.setCompanyId(item.getId());
+
+ result.add(companyRecommendRightVO);
+ });
+
+ return result;
+ }
+ public boolean isSecondEqualsTarget(String address, String target) {
+ if (address == null || target == null) {
+ return false;
+ }
+ String[] parts = address.split(",");
+ return parts.length >= 2 && parts[1].trim().equals(target); // 第二个元素是下标 1
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/SlFileServiceImpl.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/SlFileServiceImpl.java
new file mode 100644
index 00000000..8b3a3a11
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/SlFileServiceImpl.java
@@ -0,0 +1,34 @@
+package cn.link56.service.impl;
+
+import cn.link56.domain.dto.file.InsertFileDTO;
+import cn.link56.domain.entity.SlFile;
+import cn.link56.mapper.SlFileMapper;
+import cn.link56.service.SlFileService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class SlFileServiceImpl extends ServiceImpl implements SlFileService {
+ @Resource
+ private SlFileMapper slFileMapper;
+ @Override
+ public boolean insertFile(InsertFileDTO insertFileDTO) {
+ String fileSize = insertFileDTO.getFileSize();
+ String fileName = insertFileDTO.getFileName();
+ String fileMapName = insertFileDTO.getFileMapName();
+ String suffix = "";
+ if (StringUtils.isNotEmpty(fileName)) {
+ int lastDotIndex = fileName.lastIndexOf(46);
+ if (lastDotIndex != -1 && lastDotIndex < fileName.length() - 1) {
+ suffix = fileName.substring(lastDotIndex + 1);
+ }
+ }
+
+ SlFile slFile = new SlFile();
+ slFile.setExt(suffix).setName(fileName).setMapName(fileMapName).setSize(fileSize);
+ return this.slFileMapper.insert(slFile) > 0;
+ }
+}
diff --git a/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/SlNotificationServiceImpl.java b/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/SlNotificationServiceImpl.java
new file mode 100644
index 00000000..e8ac9d42
--- /dev/null
+++ b/code/link56/link56-backend-old/src/main/java/cn/link56/service/impl/SlNotificationServiceImpl.java
@@ -0,0 +1,95 @@
+package cn.link56.service.impl;
+
+import cn.link56.common.BasePageDTO;
+import cn.link56.common.BasePageVO;
+import cn.link56.context.UserContext;
+import cn.link56.domain.entity.SlNotification;
+import cn.link56.domain.vo.notification.NotificationVO;
+import cn.link56.enums.NotificationTypeEnum;
+import cn.link56.mapper.SlNotificationMapper;
+import cn.link56.service.SlNotificationService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class SlNotificationServiceImpl extends ServiceImpl implements SlNotificationService {
+ @Resource
+ private SlNotificationMapper slNotificationMapper;
+ @Override
+ public BasePageVO getLikeFavoritePage(BasePageDTO basePageDTO) {
+ int[] rows = getStartEndRow(basePageDTO); // AaaDTO extends BasePageDTO
+ int startRow = rows[0];
+ int endRow = rows[1];
+
+ List datas = slNotificationMapper.getLikeFavoritePage(UserContext.getUserId(), startRow, endRow);
+
+ LambdaQueryWrapper