MCPcopy Index your code
hub / github.com/dream-num/LuckysheetServer

github.com/dream-num/LuckysheetServer @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
515 symbols 1,474 edges 89 files 364 documented · 71%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Luckysheet Server

简体中文 | English

介绍

💻Luckysheet 官方Java版本后台。

演示

  • 协同编辑Demo(注意:请大家别操作频繁,防止搞崩服务器)

部署

环境

jdk >= 1.8

postgre >= 10 (支持jsonb的版本) - Docker部署postgre - postgre中jsonb字段处理

redis >= 3 - Docker部署Redis - Docker部署Redis集群

nginx >= 1.12 - Docker部署Nginx

maven >= 3.6

IntelliJ IDEA >= 12 (非必须)

数据库初始化

创建数据库

CREATE DATABASE luckysheetdb

创建序列

DROP SEQUENCE IF EXISTS "public"."luckysheet_id_seq";
CREATE SEQUENCE "public"."luckysheet_id_seq"
INCREMENT 1
MINVALUE  1
MAXVALUE 9999999999999
START 1
CACHE 10;

创建表

DROP TABLE IF EXISTS "public"."luckysheet";
CREATE TABLE "luckysheet" (
  "id" int8 NOT NULL,
  "block_id" varchar(200) COLLATE "pg_catalog"."default" NOT NULL,
  "row_col" varchar(50),
  "index" varchar(200) COLLATE "pg_catalog"."default" NOT NULL,
  "list_id" varchar(200) COLLATE "pg_catalog"."default" NOT NULL,
  "status" int2 NOT NULL,
  "json_data" jsonb,
  "order" int2,
  "is_delete" int2
);
CREATE INDEX "block_id" ON "public"."luckysheet" USING btree (
  "block_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
  "list_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
CREATE INDEX "index" ON "public"."luckysheet" USING btree (
  "index" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
  "list_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
CREATE INDEX "is_delete" ON "public"."luckysheet" USING btree (
  "is_delete" "pg_catalog"."int2_ops" ASC NULLS LAST
);
CREATE INDEX "list_id" ON "public"."luckysheet" USING btree (
  "list_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
CREATE INDEX "order" ON "public"."luckysheet" USING btree (
  "list_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
  "order" "pg_catalog"."int2_ops" ASC NULLS LAST
);
CREATE INDEX "status" ON "public"."luckysheet" USING btree (
  "list_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
  "status" "pg_catalog"."int2_ops" ASC NULLS LAST
);
ALTER TABLE "public"."luckysheet" ADD CONSTRAINT "luckysheet_pkey" PRIMARY KEY ("id");

插入初始化语句

INSERT INTO "public"."luckysheet" VALUES (nextval('luckysheet_id_seq'), 'fblock', '', '1', '1079500#-8803#7c45f52b7d01486d88bc53cb17dcd2c3', 1, '{"row":84,"name":"Sheet1","chart":[],"color":"","index":"1","order":0,"column":60,"config":{},"status":0,"celldata":[],"ch_width":4748,"rowsplit":[],"rh_height":1790,"scrollTop":0,"scrollLeft":0,"visibledatarow":[],"visibledatacolumn":[],"jfgird_select_save":[],"jfgrid_selection_range":{}}', 0, 0);
INSERT INTO "public"."luckysheet" VALUES (nextval('luckysheet_id_seq'), 'fblock', '', '2', '1079500#-8803#7c45f52b7d01486d88bc53cb17dcd2c3', 0, '{"row":84,"name":"Sheet2","chart":[],"color":"","index":"2","order":1,"column":60,"config":{},"status":0,"celldata":[],"ch_width":4748,"rowsplit":[],"rh_height":1790,"scrollTop":0,"scrollLeft":0,"visibledatarow":[],"visibledatacolumn":[],"jfgird_select_save":[],"jfgrid_selection_range":{}}', 1, 0);
INSERT INTO "public"."luckysheet" VALUES (nextval('luckysheet_id_seq'), 'fblock', '', '3', '1079500#-8803#7c45f52b7d01486d88bc53cb17dcd2c3', 0, '{"row":84,"name":"Sheet3","chart":[],"color":"","index":"3","order":2,"column":60,"config":{},"status":0,"celldata":[],"ch_width":4748,"rowsplit":[],"rh_height":1790,"scrollTop":0,"scrollLeft":0,"visibledatarow":[],"visibledatacolumn":[],"jfgird_select_save":[],"jfgrid_selection_range":{}}', 2, 0);

nginx配置

http块配置

#websocket配置
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

upstream ws_dataluckysheet {
      server 项目的ip:端口;
}    

server块配置

#websocket配置
location /luckysheet/websocket/luckysheet {
    proxy_pass http://ws_dataluckysheet/luckysheet/websocket/luckysheet;

    proxy_set_header Host $host;
    proxy_set_header X-real-ip $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    #websocket
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}       

#动态资源配置
location /luckysheet/ {
    proxy_pass http://ws_dataluckysheet;
}

#静态资源配置,Luckysheet前端代码目录
location / {
    root   /usr/share/nginx/html; # 可修改为自己的资源路径
    index  index.html index.htm;
}

访问测试

  • 通过项目的ip:端口访问静态主页
  • 通过项目的ip:端口?share访问协同编辑主页

项目用法

application.yml 项目配置

server:
  port: 项目端口
  servlet:
    context-path: /项目路径
redis.channel: redis通道名称
row_size: 表格中行数 默认500
col_size: 表格中列数 默认500
pgSetUp: 是否启用pgsql作为存储数据(0为是,1为否)目前只能设置为0

application-dev.yml 数据库配置

spring:
  redis:
    host: ip地址
    port: 端口
    password: 密码

db:
  postgre:
    druid:
      url: jdbc:postgresql://ip地址:端口/luckysheetdb?useSSL=false
      driverClassName: org.postgresql.Driver
      username: 用户名
      password: 密码    

logback-spring.xml 日志配置

 <property name="log.path" value="日志输出目录"/>

项目说明

Luckysheet模块主要类说明

com.xc.luckysheet.WebApplication 项目启动类

com.xc.luckysheet.controller

JfGridFileController 表格数据加载类
TestController  postgre redis 测试类 

com.xc.luckysheet.entity

SheetOperationEnum 表格操作类型
JfGridConfigModel 表格块对象
LuckySheetGridModel 表格数据库对象
PgGridDataModel 表格sheet数据库对象

com.xc.luckysheet.postgre

PostgresGridFileDao postgre数据库操作
PostgresGridFileGetService 记录操作
PostgresJfGridUpdateService 更新处理

com.xc.luckysheet.redisserver

RedisLock redis锁
RedisMessageListener 管道监听类
RedisMessagePublish 管道发布类

com.xc.luckysheet.service

ConfigerService 配置类
ScheduleService 对定时数据库初始化

com.xc.luckysheet.utils

GzipHandle 信息压缩
Pako_GzipUtils WebSocket信息压缩

com.xc.luckysheet.websocket

IpAndPortUtil 获取当前服务的ip与端口
MyWebSocketHandler Socket处理器(包括发送信息,接收信息,信息错误等方法。)
MyWebSocketInterceptor Socket建立连接(握手)和断开
WebSocketConfig 注册WebSocket,设置WebSocket的地址
WSUserModel WebSocket对象

common模块主要类说明

com.xc.common.config.datasource.DataSourceConfig 数据源配置类
com.xc.common.config.redis.RedisConfig redis配置类

websocket 返回数据格式

{
    createTime: 命令发送时间
    data:{} 修改的命令
    id: "7a"   websocket的id
    returnMessage: "success"
    status: "0"  0告诉前端需要根据data的命令修改  1无意义
    type: 0:连接成功,1:发送给当前连接的用户,2:发送信息给其他用户,3:发送选区位置信息,999:用户连接断开
    username: 用户名
}

相关链接

贡献者和感谢

团队

版权信息

有关详细信息,请查阅附件的LICENSE文件。原始作者保留Apache 2.0许可未明确授予的所有权利。

Extension points exported contracts — how you extend this code

IRecordSelectHandle (Interface)
记录处理 @author Administrator [6 implementers]
luckysheet-db/src/main/java/com/xc/luckysheet/db/IRecordSelectHandle.java
BaseModel (Interface)
@author Administrator [2 implementers]
luckysheet/src/main/java/com/xc/luckysheet/entity/BaseModel.java
People (Interface)
(no doc) [2 implementers]
luckysheet-mysql/src/main/java/com/xc/luckysheet/mysql/testinvocationhandler/test1/People.java
SysConstant (Interface)
@author Administrator
common/src/main/java/com/xc/common/constant/SysConstant.java
IRecordDataInsertHandle (Interface)
插入数据 @author Administrator [6 implementers]
luckysheet-db/src/main/java/com/xc/luckysheet/db/IRecordDataInsertHandle.java
TestDao (Interface)
@author Administrator
luckysheet/src/main/java/com/xc/luckysheet/mapper/TestDao.java
STATUS (Interface)
状态
common/src/main/java/com/xc/common/constant/SysConstant.java
IRecordDataUpdataHandle (Interface)
json数据更新处理 @author Administrator [6 implementers]
luckysheet-db/src/main/java/com/xc/luckysheet/db/IRecordDataUpdataHandle.java

Core symbols most depended-on inside this repo

get
called by 313
luckysheet/src/main/java/com/xc/luckysheet/redisserver/RedisLock.java
toString
called by 246
luckysheet/src/main/java/com/xc/luckysheet/redisserver/RedisMessageModel.java
nextId
called by 24
luckysheet-db/src/main/java/com/xc/luckysheet/util/SnowFlake.java
getIndex
called by 22
luckysheet/src/main/java/com/xc/luckysheet/entity/enummodel/DisabledTypeEnum.java
getSheetByIndex
called by 16
luckysheet-db/src/main/java/com/xc/luckysheet/util/JfGridFileUtil.java
getIntByDBObject
called by 13
luckysheet/src/main/java/com/xc/luckysheet/xlsutils/poiutil/XlsSheetUtil.java
errorInstance
called by 12
common/src/main/java/com/xc/common/api/ResponseVO.java
toJson
called by 11
common/src/main/java/com/xc/common/utils/JsonUtil.java

Shape

Method 422
Class 77
Interface 12
Enum 4

Languages

Java100%

Modules by API surface

luckysheet/src/main/java/com/xc/luckysheet/db/server/JfGridUpdateService.java35 symbols
luckysheet-postgre/src/main/java/com/xc/luckysheet/postgres/impl/RecordDataUpdataHandle.java18 symbols
luckysheet-mysql/src/main/java/com/xc/luckysheet/mysql/impl/RecordDataUpdataHandle.java18 symbols
luckysheet-mongo/src/main/java/com/xc/luckysheet/mongo/impl/RecordDataUpdataHandle.java16 symbols
luckysheet-db/src/main/java/com/xc/luckysheet/db/IRecordDataUpdataHandle.java16 symbols
luckysheet/src/main/java/com/xc/luckysheet/websocket/MyWebSocketHandler.java14 symbols
luckysheet-postgre/src/main/java/com/xc/luckysheet/postgres/impl/RecordSelectHandle.java14 symbols
luckysheet-mysql/src/main/java/com/xc/luckysheet/mysql/impl/RecordSelectHandle.java14 symbols
luckysheet/src/main/java/com/xc/luckysheet/xlsutils/poiutil/XlsUtil.java13 symbols
luckysheet/src/main/java/com/xc/luckysheet/xlsutils/poiutil/XlsSheetUtil.java13 symbols
luckysheet-mongo/src/main/java/com/xc/luckysheet/mongo/impl/RecordSelectHandle.java13 symbols
luckysheet-db/src/main/java/com/xc/luckysheet/util/JfGridFileUtil.java13 symbols

Datastores touched

luckysheetdbDatabase · 1 repos
(mongodb)Database · 1 repos

For agents

$ claude mcp add LuckysheetServer \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact