3 Commits

Author SHA1 Message Date
danaisuiyuan
e181d65295 by80: 规范数据范围删除需求文档
将 BYBSY80 数据删除需求升级为可复用的标准处理方案,补充执行边界、全库字段扫描、删除顺序、校验规则和结果输出要求。

Made-with: Cursor
2026-04-27 19:05:24 +08:00
apple
71bb0a03f7 by80: 新增 deploy-front-by80.sh 部署脚本
Made-with: Cursor
2026-03-18 12:11:03 +08:00
apple
dc401eafff by80: 更新 application 配置
Made-with: Cursor
2026-03-18 12:02:47 +08:00
766 changed files with 262 additions and 2321 deletions

View File

@@ -10,7 +10,7 @@
| jar 包 | 对应前端 | 说明 | | jar 包 | 对应前端 | 说明 |
|--------|----------|------| |--------|----------|------|
| **miao-admin-2.2.jar** | `backend-adminend`admin 后台 Vue | 管理后台 API + 后台静态站点 | | **miao-admin-2.2.jar** | `frontend`admin 后台 Vue | 管理后台 API + 后台静态站点 |
| **miao-front-2.2.jar** | `single_uniapp22miao`(用户端 H5/uni-app | 积分商城、用户端 API | | **miao-front-2.2.jar** | `single_uniapp22miao`(用户端 H5/uni-app | 积分商城、用户端 API |
### 4 个子项目(可单独打包部署) ### 4 个子项目(可单独打包部署)
@@ -19,7 +19,7 @@
|--------|------|----------|------| |--------|------|----------|------|
| **crmeb-admin** | `miao-admin-2.2.jar` | `mvn clean package -pl crmeb-admin -am -DskipTests` | 管理后台后端 | | **crmeb-admin** | `miao-admin-2.2.jar` | `mvn clean package -pl crmeb-admin -am -DskipTests` | 管理后台后端 |
| **crmeb-front** | `miao-front-2.2.jar` | `mvn clean package -pl crmeb-front -am -DskipTests` | 用户端 API | | **crmeb-front** | `miao-front-2.2.jar` | `mvn clean package -pl crmeb-front -am -DskipTests` | 用户端 API |
| **backend-adminend** | `backend-adminend/dist` | `npm run build:prod` | 管理后台前端静态 | | **frontend** | `frontend/dist` | `npm run build:prod` | 管理后台前端静态 |
| **single_uniapp22miao** | `single_uniapp22miao/unpackage/dist/build/h5` | `npm run build:h5` | 用户端 H5 静态 | | **single_uniapp22miao** | `single_uniapp22miao/unpackage/dist/build/h5` | `npm run build:h5` | 用户端 H5 静态 |
--- ---
@@ -69,13 +69,13 @@ mvn clean package -pl crmeb-front -am -DskipTests
# 产出backend/crmeb-front/target/miao-front-2.2.jar # 产出backend/crmeb-front/target/miao-front-2.2.jar
``` ```
### 3. 仅打包 admin 后台前端(backend-adminend ### 3. 仅打包 admin 后台前端(frontend
```bash ```bash
cd backend-adminend cd frontend
export NODE_OPTIONS="${NODE_OPTIONS:-} --openssl-legacy-provider" # Node 17+ 需要 export NODE_OPTIONS="${NODE_OPTIONS:-} --openssl-legacy-provider" # Node 17+ 需要
npm run build:prod npm run build:prod
# backend-adminend/dist # 产出frontend/dist
``` ```
### 4. 仅打包用户端 H5 前端single_uniapp22miao ### 4. 仅打包用户端 H5 前端single_uniapp22miao
@@ -135,77 +135,22 @@ cd backend
| 步骤 | 说明 | | 步骤 | 说明 |
|------|------| |------|------|
| 1 | 编译 crmeb-admin生成 miao-admin-2.2.jar | | 1 | 编译 crmeb-admin生成 miao-admin-2.2.jar |
| 2 | 编译 backend-adminend生成 dist | | 2 | 编译 frontend生成 dist |
| 3 | 远程备份原有 jar 与后台静态 | | 3 | 远程备份原有 jar 与后台静态 |
| 4 | 上传 miao-admin-2.2.jar 到 REMOTE_DIR_JAR | | 4 | 上传 miao-admin-2.2.jar 到 REMOTE_DIR_JAR |
| 5 | 上传 backend-adminend/dist 到 REMOTE_DIR_ADMIN | | 5 | 上传 frontend/dist 到 REMOTE_DIR_ADMIN |
| 6 | 远程重启 admin 服务profile=miao80, port=30032 | | 6 | 远程重启 admin 服务profile=miao80, port=30032 |
--- ---
## 六、部署 miao-front用户端 API ## 六、其他环境
### shccd159 环境
```bash
cd backend
./shell/deploy-front-shccd159.sh
```
脚本步骤:编译 crmeb-front → **云服务器备份原有 jar** → 上传 jar → 远程重启。
使用其他密钥:`SSH_IDENTITY=~/.ssh/你的私钥 ./shell/deploy-front-shccd159.sh`
**前置条件**:配置 SSH 免密,例如:
```bash
ssh-copy-id -i ~/.ssh/id_ed25519_crmeb_deploy.pub root@182.92.78.159
```
---
## 七、shjjy153 环境 admin 部署(可拆分)
shjjy153 支持 admin 全量部署,也可**单独部署 API 或 Vue 前端**。
### 1. 全量部署API + Vue
```bash
cd backend
./shell/deploy-admin-shjjy153.sh
```
依次执行 `deploy-admin-api-shjjy153.sh``deploy-admin-vue-shjjy153.sh`
### 2. 仅部署 miao-admin APImiao-admin-2.2.jar
```bash
cd backend
./shell/deploy-admin-api-shjjy153.sh
```
步骤:编译 crmeb-admin → 云服务器备份 jar → 上传 jar → 远程重启 admin 服务。
### 3. 仅部署 backend-adminendVue 前端)
```bash
cd backend
./shell/deploy-admin-vue-shjjy153.sh
```
步骤:编译 backend-adminend → 云服务器备份静态 → 上传 dist 到 REMOTE_DIR_ADMIN。
使用其他密钥:`SSH_IDENTITY=~/.ssh/你的私钥 ./shell/deploy-admin-api-shjjy153.sh`
---
## 八、其他环境
- **miao50**:使用 `./shell/deploy-admin-miao50.sh`,逻辑类似,配置来自 deploy.conf 中 miao50 段。 - **miao50**:使用 `./shell/deploy-admin-miao50.sh`,逻辑类似,配置来自 deploy.conf 中 miao50 段。
- **shjjy153**deploy.conf 中配置了 `REMOTE_DIR_FRONT`,可扩展脚本上传 single_uniapp22miao 的 H5 构建产物到该目录。 - **shjjy153**deploy.conf 中配置了 `REMOTE_DIR_FRONT`,可扩展脚本上传 single_uniapp22miao 的 H5 构建产物到该目录。
--- ---
## 、远程服务器手动重启 ## 、远程服务器手动重启
### 重启 adminmiao-admin-2.2.jar ### 重启 adminmiao-admin-2.2.jar
@@ -231,7 +176,7 @@ pgrep -f miao-front-2.2.jar && echo "Front 已启动"
--- ---
## 、故障排查 ## 、故障排查
- **SSH Permission denied**:检查 `ssh-copy-id` 是否成功,或指定正确 `SSH_IDENTITY` - **SSH Permission denied**:检查 `ssh-copy-id` 是否成功,或指定正确 `SSH_IDENTITY`
- **前端构建 OpenSSL 报错**:设置 `export NODE_OPTIONS="--openssl-legacy-provider"` - **前端构建 OpenSSL 报错**:设置 `export NODE_OPTIONS="--openssl-legacy-provider"`

View File

@@ -1,59 +0,0 @@
# CRMEB 相关配置
crmeb:
captchaOn: false # 是否开启行为验证码
asyncConfig: true #是否同步config表数据到redis
server:
port: 30032
sync:
source-id: shop_f
target-mer-id: 8
spring:
datasource:
name: yangtangyoupin
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://182.92.78.159:3306/${spring.datasource.name}?useUnicode=true&serverTimezone=GMT%2B8&characterEncoding=utf8
username: yangtangyoupin
password: 5Fn8eWrbYFtAhCZw
redis:
host: 182.92.78.159 #地址
port: 6379 #端口
password: '123456'
timeout: 10000 # 连接超时时间(毫秒)
database: 2 #默认数据库
jedis:
pool:
max-active: 200 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
time-between-eviction-runs: -1 #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
second:
database: 2 # 微信accessToken存储库
debug: true
logging:
level:
io.swagger.*: error
com.zbjk.crmeb: debug
org.springframework.boot.autoconfigure: ERROR
config: classpath:logback-spring.xml
file:
path: ./logs
# mybatis 配置
mybatis-plus:
# 配置sql打印日志
configuration:
log-impl:
#swagger 配置
swagger:
basic:
enable: true #是否开启界面
check: false #是否打开验证
username: crmeb #访问swagger的账号
password: crmeb.com #访问swagger的密码

View File

@@ -1,59 +0,0 @@
# CRMEB 相关配置
crmeb:
captchaOn: false # 是否开启行为验证码
asyncConfig: true #是否同步config表数据到redis
server:
port: 30032
sync:
source-id: shop_e
target-mer-id: 7
spring:
datasource:
name: yangtangyoupin
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://101.132.245.153:3306/${spring.datasource.name}?useUnicode=true&serverTimezone=GMT%2B8&characterEncoding=utf8
username: yangtangyoupin
password: 5Fn8eWrbYFtAhCZw
redis:
host: 101.132.245.153 #地址
port: 6379 #端口
password: '123456'
timeout: 10000 # 连接超时时间(毫秒)
database: 2 #默认数据库
jedis:
pool:
max-active: 200 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
time-between-eviction-runs: -1 #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
second:
database: 2 # 微信accessToken存储库
debug: true
logging:
level:
io.swagger.*: error
com.zbjk.crmeb: debug
org.springframework.boot.autoconfigure: ERROR
config: classpath:logback-spring.xml
file:
path: ./logs
# mybatis 配置
mybatis-plus:
# 配置sql打印日志
configuration:
log-impl:
#swagger 配置
swagger:
basic:
enable: true #是否开启界面
check: false #是否打开验证
username: crmeb #访问swagger的账号
password: crmeb.com #访问swagger的密码

View File

@@ -38,7 +38,7 @@ server:
spring: spring:
profiles: profiles:
active: shccd159 active: miao80
servlet: servlet:
multipart: multipart:
max-file-size: 50MB #设置单个文件大小 max-file-size: 50MB #设置单个文件大小

View File

@@ -73,7 +73,7 @@ public class WaUserController {
FileInputStream fileInputStream = null; FileInputStream fileInputStream = null;
try { try {
// 读取模板PDF文件 // 读取模板PDF文件
Resource resource = new ClassPathResource("pdf/sign_contract_jjy.pdf"); Resource resource = new ClassPathResource("pdf/sign33_contract.pdf");
InputStream pdfInputStream = resource.getInputStream(); InputStream pdfInputStream = resource.getInputStream();
document = PDDocument.load(pdfInputStream); document = PDDocument.load(pdfInputStream);
pdfInputStream.close(); pdfInputStream.close();
@@ -197,9 +197,7 @@ public class WaUserController {
WaUsers user = new WaUsers(); WaUsers user = new WaUsers();
user.setId(pid); user.setId(pid);
// user.setContract("https://anyue.szxingming.com/"+pdfResultVo.getUrl()); // user.setContract("https://anyue.szxingming.com/"+pdfResultVo.getUrl());
// user.setContract("https://xiashengjun.com/"+pdfResultVo.getUrl()); user.setContract("https://xiashengjun.com/"+pdfResultVo.getUrl());
user.setContract("https://ccd.cichude.com/"+pdfResultVo.getUrl());
// user.setContract("https://jjy.uj345.com/"+pdfResultVo.getUrl());
waUsersDao.updateById(user); waUsersDao.updateById(user);
} }
return CommonResult.success(pdfResultVo); return CommonResult.success(pdfResultVo);

View File

@@ -1,5 +1,5 @@
crmeb: crmeb:
imagePath: /www/wwwroot/shop.bosenyuan.com/ # 服务器图片路径配置 斜杠结尾 imagePath: /www/wwwroot/shop.bosenyuan.com/ # /www/wwwroot/shop.bosenyuan.com/ 服务器图片路径配置 斜杠结尾
asyncConfig: true #是否同步config表数据到redis asyncConfig: true #是否同步config表数据到redis
server: server:

View File

@@ -1,54 +0,0 @@
crmeb:
imagePath: /www/wwwroot/ccd.fwxgpt.com/ # xsj.bosenyuan.com, xsj.bosenyuan.com/ jf.bosenyuan.com/ 服务器图片路径配置 斜杠结尾
asyncConfig: true #是否同步config表数据到redis
server:
port: 30031
spring:
datasource:
name: yangtangyoupin
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://182.92.78.159:3306/${spring.datasource.name}?useUnicode=true&serverTimezone=GMT%2B8&characterEncoding=utf8
username: yangtangyoupin
password: 5Fn8eWrbYFtAhCZw
redis:
host: 182.92.78.159 #地址
port: 6379 #端口
password: '123456'
timeout: 10000 # 连接超时时间(毫秒)
database: 2 #默认数据库
jedis:
pool:
max-active: 200 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
time-between-eviction-runs: -1 #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
second:
database: 3 # 微信accessToken存储库
debug: true
logging:
level:
io.swagger.*: error
com.zbjk.crmeb: debug
org.springframework.boot.autoconfigure: ERROR
config: classpath:logback-spring.xml
file:
path: ./logs
# mybatis 配置
mybatis-plus:
# 配置sql打印日志
configuration:
log-impl:
#swagger 配置
swagger:
basic:
enable: true #是否开启界面
check: false #是否打开验证
username: crmeb #访问swagger的账号
password: crmeb.com #访问swagger的密码

View File

@@ -1,54 +0,0 @@
crmeb:
imagePath: /www/wwwroot/jjy.fwxgpt.com/ # ccd.fwxgpt.com, xsj.bosenyuan.com, xsj.bosenyuan.com/ jf.bosenyuan.com/ 服务器图片路径配置 斜杠结尾
asyncConfig: true #是否同步config表数据到redis
server:
port: 30031
spring:
datasource:
name: yangtangyoupin
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://101.132.245.153:3306/${spring.datasource.name}?useUnicode=true&serverTimezone=GMT%2B8&characterEncoding=utf8
username: yangtangyoupin
password: 5Fn8eWrbYFtAhCZw
redis:
host: 101.132.245.153 #地址
port: 6379 #端口
password: '123456'
timeout: 10000 # 连接超时时间(毫秒)
database: 2 #默认数据库
jedis:
pool:
max-active: 200 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
time-between-eviction-runs: -1 #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
second:
database: 3 # 微信accessToken存储库
debug: true
logging:
level:
io.swagger.*: error
com.zbjk.crmeb: debug
org.springframework.boot.autoconfigure: ERROR
config: classpath:logback-spring.xml
file:
path: ./logs
# mybatis 配置
mybatis-plus:
# 配置sql打印日志
configuration:
log-impl:
#swagger 配置
swagger:
basic:
enable: true #是否开启界面
check: false #是否打开验证
username: crmeb #访问swagger的账号
password: crmeb.com #访问swagger的密码

View File

@@ -32,7 +32,7 @@ server:
spring: spring:
profiles: profiles:
active: shccd159 active: miao80
servlet: servlet:
multipart: multipart:
max-file-size: 50MB #设置单个文件大小 max-file-size: 50MB #设置单个文件大小

View File

@@ -1 +1 @@
`"Y8888Y88 88888888888 88888888P" `"Y8888Y"' 88 `8b 88 `8' 88 88888888888 88888888P"

View File

@@ -44,39 +44,3 @@ FRONT_LOCAL_PORT=30031
FRONT_JAR_NAME=miao-front-2.2.jar FRONT_JAR_NAME=miao-front-2.2.jar
ADMIN_LOCAL_PORT=30032 ADMIN_LOCAL_PORT=30032
ADMIN_JAR_NAME=miao-admin-2.2.jar ADMIN_JAR_NAME=miao-admin-2.2.jar
shjjy153:
spring:
profiles:
active: shjjy153
SERVER_HOST=101.132.245.153
SERVER_USER=root
SERVER_PORT=22
REMOTE_DIR_JAR=/www/wwwroot/javaapi
FRONT_LOCAL_PORT=30031
FRONT_JAR_NAME=miao-front-2.2.jar
ADMIN_LOCAL_PORT=30032
ADMIN_JAR_NAME=miao-admin-2.2.jar
REMOTE_DIR_ADMIN=/www/wwwroot/jjy-jfadmin.fwxgpt.com
REMOTE_DIR_FRONT=/www/wwwroot/jjy-jf.fwxgpt.com
shccd159:
spring:
profiles:
active: shccd159
SERVER_HOST=182.92.78.159
SERVER_USER=root
SERVER_PORT=22
REMOTE_DIR_JAR=/www/wwwroot/javaapi
FRONT_LOCAL_PORT=30031
FRONT_JAR_NAME=miao-front-2.2.jar
ADMIN_LOCAL_PORT=30032
ADMIN_JAR_NAME=miao-admin-2.2.jar
REMOTE_DIR_ADMIN=/www/wwwroot/ccd-jfadmin.fwxgpt.com
REMOTE_DIR_FRONT=/www/wwwroot/ccd-jf.fwxgpt.com

View File

@@ -1,84 +0,0 @@
#!/bin/bash
# 仅打包部署 miao-admin-2.2.jar后台 API 服务)到 shjjy153 云服务器
# 部署前在云服务器上备份原有 jar
# 使用: ./shell/deploy-admin-api-shjjy153.sh在 backend 目录下)
# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-admin-api-shjjy153.sh
set -e
SSH_IDENTITY="${SSH_IDENTITY:-$HOME/.ssh/id_ed25519_crmeb_deploy}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
DEPLOY_CONF="$BACKEND_DIR/deploy.conf"
get_conf() {
sed -n '/^shjjy153:/,/^shccd159:/p' "$DEPLOY_CONF" | grep -E "^${1}=" | tail -1 | cut -d= -f2-
}
SERVER_HOST=$(get_conf SERVER_HOST)
SERVER_USER=$(get_conf SERVER_USER)
SERVER_PORT=$(get_conf SERVER_PORT)
REMOTE_DIR_JAR=$(get_conf REMOTE_DIR_JAR)
ADMIN_JAR_NAME=$(get_conf ADMIN_JAR_NAME)
ADMIN_LOCAL_PORT=$(get_conf ADMIN_LOCAL_PORT)
[[ -z "$SERVER_HOST" ]] && SERVER_HOST=101.132.245.153
[[ -z "$REMOTE_DIR_JAR" ]] && REMOTE_DIR_JAR=/www/wwwroot/javaapi
[[ -z "$ADMIN_JAR_NAME" ]] && ADMIN_JAR_NAME=miao-admin-2.2.jar
[[ -z "$ADMIN_LOCAL_PORT" ]] && ADMIN_LOCAL_PORT=30032
[[ -z "$SERVER_USER" ]] && SERVER_USER=root
[[ -z "$SERVER_PORT" ]] && SERVER_PORT=22
JAR_PATH="$BACKEND_DIR/crmeb-admin/target/$ADMIN_JAR_NAME"
REMOTE_JAR="$REMOTE_DIR_JAR/$ADMIN_JAR_NAME"
[[ -f "$SSH_IDENTITY" ]] && SSH_OPTS=(-o "IdentityFile=$SSH_IDENTITY") || SSH_OPTS=()
SSH_CMD=(ssh "${SSH_OPTS[@]}" -o StrictHostKeyChecking=accept-new -p "$SERVER_PORT" "$SERVER_USER@$SERVER_HOST")
SCP_CMD=(scp "${SSH_OPTS[@]}" -o StrictHostKeyChecking=accept-new -P "$SERVER_PORT")
BACKUP_SUFFIX="backup_$(date +%Y%m%d_%H%M%S)"
APP_YML="$BACKEND_DIR/crmeb-admin/src/main/resources/application.yml"
echo "=== 仅部署 miao-admin后台 API到 shjjy153 ==="
echo " 服务器: $SERVER_USER@$SERVER_HOST"
echo " 目标: $REMOTE_DIR_JAR/$ADMIN_JAR_NAME"
echo ""
echo "=== 1. 编译 crmeb-adminmiao-admin-2.2.jar, profile=shjjy153==="
cd "$BACKEND_DIR"
if [[ -f "$APP_YML" ]]; then
cp -a "$APP_YML" "${APP_YML}.bak"
sed -E 's/active: *[a-zA-Z0-9]+/active: shjjy153/' "$APP_YML" > "${APP_YML}.new" && mv "${APP_YML}.new" "$APP_YML"
trap 'cp -a "${APP_YML}.bak" "$APP_YML"; rm -f "${APP_YML}.bak"; trap - EXIT' EXIT
fi
mvn clean package -pl crmeb-admin -am -DskipTests -q
echo "已生成: $JAR_PATH"
[[ ! -f "$JAR_PATH" ]] && { echo "错误: jar 未生成"; exit 1; }
[[ -f "${APP_YML}.bak" ]] && { cp -a "${APP_YML}.bak" "$APP_YML"; rm -f "${APP_YML}.bak"; trap - EXIT; }
echo ""
echo "=== 2. 云服务器备份原有 jar ==="
"${SSH_CMD[@]}" "bash -s" << REMOTE_BACKUP
set -e
mkdir -p "$REMOTE_DIR_JAR/backups"
if [ -f "$REMOTE_JAR" ]; then
cp -a "$REMOTE_JAR" "$REMOTE_DIR_JAR/backups/${ADMIN_JAR_NAME}.${BACKUP_SUFFIX}"
echo "已备份: $REMOTE_DIR_JAR/backups/${ADMIN_JAR_NAME}.${BACKUP_SUFFIX}"
else
echo "远程无原有 jar跳过备份"
fi
REMOTE_BACKUP
echo ""
echo "=== 3. 上传 $ADMIN_JAR_NAME$REMOTE_DIR_JAR ==="
"${SCP_CMD[@]}" "$JAR_PATH" "$SERVER_USER@$SERVER_HOST:$REMOTE_DIR_JAR/"
echo "jar 上传完成."
echo ""
echo "=== 4. 远程重启 admin API 服务 (profile=shjjy153, port=$ADMIN_LOCAL_PORT) ==="
"${SSH_CMD[@]}" "cd $REMOTE_DIR_JAR && \
(pkill -f $ADMIN_JAR_NAME || true) && \
sleep 2 && \
nohup java -Xms128m -Xmx256m -jar $ADMIN_JAR_NAME --spring.profiles.active=shjjy153 --server.port=$ADMIN_LOCAL_PORT > admin.log 2>&1 & \
sleep 3 && \
(pgrep -f $ADMIN_JAR_NAME && echo 'miao-admin 已启动' || (echo '请检查 admin.log'; tail -20 admin.log))"
echo ""
echo "=== miao-admin API 部署完成 ==="

View File

@@ -1,19 +0,0 @@
#!/bin/bash
# 一键部署 admin 后台API + Vue 前端)到 shjjy153
# 依次执行 deploy-admin-api-shjjy153.sh 和 deploy-admin-vue-shjjy153.sh
# 使用: ./shell/deploy-admin-shjjy153.sh在 backend 目录下)
# 单独部署 API: ./shell/deploy-admin-api-shjjy153.sh
# 单独部署 Vue: ./shell/deploy-admin-vue-shjjy153.sh
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "=== 一键部署 adminAPI + Vue到 shjjy153 ==="
echo ""
"$SCRIPT_DIR/deploy-admin-api-shjjy153.sh"
echo ""
"$SCRIPT_DIR/deploy-admin-vue-shjjy153.sh"
echo ""
echo "=== shjjy153 admin 全量部署完成 ==="

View File

@@ -1,72 +0,0 @@
#!/bin/bash
# 仅打包部署 backend-adminend后台 Vue 前端)到 shccd159 云服务器
# 部署前在云服务器上备份原有静态文件
# 使用: ./shell/deploy-admin-vue-shccd159.sh在 backend 目录下)
# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-admin-vue-shccd159.sh
set -e
SSH_IDENTITY="${SSH_IDENTITY:-$HOME/.ssh/id_ed25519_crmeb_deploy}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
ROOT_DIR="$(cd "$BACKEND_DIR/.." && pwd)"
FRONTEND_DIR="${ROOT_DIR}/backend-adminend"
[[ ! -d "$FRONTEND_DIR" ]] && FRONTEND_DIR="${ROOT_DIR}/frontend"
DEPLOY_CONF="$BACKEND_DIR/deploy.conf"
get_conf() {
sed -n '/^shccd159:/,$p' "$DEPLOY_CONF" | grep -E "^${1}=" | tail -1 | cut -d= -f2-
}
SERVER_HOST=$(get_conf SERVER_HOST)
SERVER_USER=$(get_conf SERVER_USER)
SERVER_PORT=$(get_conf SERVER_PORT)
REMOTE_DIR_ADMIN=$(get_conf REMOTE_DIR_ADMIN)
[[ -z "$SERVER_HOST" ]] && SERVER_HOST=182.92.78.159
[[ -z "$REMOTE_DIR_ADMIN" ]] && REMOTE_DIR_ADMIN=/www/wwwroot/ccd-jfadmin.fwxgpt.com
[[ -z "$SERVER_USER" ]] && SERVER_USER=root
[[ -z "$SERVER_PORT" ]] && SERVER_PORT=22
[[ -f "$SSH_IDENTITY" ]] && SSH_OPTS=(-o "IdentityFile=$SSH_IDENTITY") || SSH_OPTS=()
SSH_CMD=(ssh "${SSH_OPTS[@]}" -o StrictHostKeyChecking=accept-new -p "$SERVER_PORT" "$SERVER_USER@$SERVER_HOST")
BACKUP_SUFFIX="backup_$(date +%Y%m%d_%H%M%S)"
[[ ! -d "$FRONTEND_DIR" ]] && { echo "错误: 未找到 admin 前端目录 (backend-adminend 或 frontend)"; exit 1; }
echo "=== 仅部署 backend-adminend后台 Vue 前端)到 shccd159 ==="
echo " 服务器: $SERVER_USER@$SERVER_HOST"
echo " 目标: $REMOTE_DIR_ADMIN"
echo ""
echo "=== 1. 编译 backend-adminend (npm run build:prod) ==="
cd "$FRONTEND_DIR"
# Node 1718 需要 --openssl-legacy-providerNode 22+ 已不支持,不设置
NODE_MAJOR=$(node -v 2>/dev/null | sed -E 's/^v([0-9]+).*/\1/' || echo 0)
if [[ "$NODE_MAJOR" -ge 17 && "$NODE_MAJOR" -le 21 ]]; then
export NODE_OPTIONS="${NODE_OPTIONS:-} --openssl-legacy-provider"
fi
npm run build:prod
echo "已生成: $FRONTEND_DIR/dist"
[[ ! -d "$FRONTEND_DIR/dist" ]] && { echo "错误: dist 未生成"; exit 1; }
echo ""
echo "=== 2. 云服务器备份原有静态 ==="
"${SSH_CMD[@]}" "bash -s" << REMOTE_BACKUP
set -e
if [ -d "$REMOTE_DIR_ADMIN" ] && [ "\$(ls -A $REMOTE_DIR_ADMIN 2>/dev/null)" ]; then
BACKUP_TAR="$REMOTE_DIR_ADMIN/../ccd_jfadmin_${BACKUP_SUFFIX}.tar.gz"
tar -czf "\$BACKUP_TAR" -C "$REMOTE_DIR_ADMIN" .
echo "已备份: \$BACKUP_TAR"
else
echo "远程目录为空或不存在,跳过备份"
fi
REMOTE_BACKUP
echo ""
echo "=== 3. 上传 dist 到 $REMOTE_DIR_ADMIN ==="
"${SSH_CMD[@]}" "mkdir -p $REMOTE_DIR_ADMIN && (rm -rf ${REMOTE_DIR_ADMIN}/* ${REMOTE_DIR_ADMIN}/.??* 2>/dev/null; true)"
(cd "$FRONTEND_DIR/dist" && tar cf - .) | "${SSH_CMD[@]}" "mkdir -p $REMOTE_DIR_ADMIN && cd $REMOTE_DIR_ADMIN && tar xf -"
echo "后台 Vue 静态上传完成."
echo ""
echo "=== backend-adminend 部署完成 ==="

View File

@@ -1,72 +0,0 @@
#!/bin/bash
# 仅打包部署 backend-adminend后台 Vue 前端)到 shjjy153 云服务器
# 部署前在云服务器上备份原有静态文件
# 使用: ./shell/deploy-admin-vue-shjjy153.sh在 backend 目录下)
# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-admin-vue-shjjy153.sh
set -e
SSH_IDENTITY="${SSH_IDENTITY:-$HOME/.ssh/id_ed25519_crmeb_deploy}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
ROOT_DIR="$(cd "$BACKEND_DIR/.." && pwd)"
FRONTEND_DIR="${ROOT_DIR}/backend-adminend"
[[ ! -d "$FRONTEND_DIR" ]] && FRONTEND_DIR="${ROOT_DIR}/frontend"
DEPLOY_CONF="$BACKEND_DIR/deploy.conf"
get_conf() {
sed -n '/^shjjy153:/,/^shccd159:/p' "$DEPLOY_CONF" | grep -E "^${1}=" | tail -1 | cut -d= -f2-
}
SERVER_HOST=$(get_conf SERVER_HOST)
SERVER_USER=$(get_conf SERVER_USER)
SERVER_PORT=$(get_conf SERVER_PORT)
REMOTE_DIR_ADMIN=$(get_conf REMOTE_DIR_ADMIN)
[[ -z "$SERVER_HOST" ]] && SERVER_HOST=101.132.245.153
[[ -z "$REMOTE_DIR_ADMIN" ]] && REMOTE_DIR_ADMIN=/www/wwwroot/jjy-jfadmin.fwxgpt.com
[[ -z "$SERVER_USER" ]] && SERVER_USER=root
[[ -z "$SERVER_PORT" ]] && SERVER_PORT=22
[[ -f "$SSH_IDENTITY" ]] && SSH_OPTS=(-o "IdentityFile=$SSH_IDENTITY") || SSH_OPTS=()
SSH_CMD=(ssh "${SSH_OPTS[@]}" -o StrictHostKeyChecking=accept-new -p "$SERVER_PORT" "$SERVER_USER@$SERVER_HOST")
BACKUP_SUFFIX="backup_$(date +%Y%m%d_%H%M%S)"
[[ ! -d "$FRONTEND_DIR" ]] && { echo "错误: 未找到 admin 前端目录 (backend-adminend 或 frontend)"; exit 1; }
echo "=== 仅部署 backend-adminend后台 Vue 前端)到 shjjy153 ==="
echo " 服务器: $SERVER_USER@$SERVER_HOST"
echo " 目标: $REMOTE_DIR_ADMIN"
echo ""
echo "=== 1. 编译 backend-adminend (npm run build:prod) ==="
cd "$FRONTEND_DIR"
# Node 1718 需要 --openssl-legacy-providerNode 22+ 已不支持,不设置
NODE_MAJOR=$(node -v 2>/dev/null | sed -E 's/^v([0-9]+).*/\1/' || echo 0)
if [[ "$NODE_MAJOR" -ge 17 && "$NODE_MAJOR" -le 21 ]]; then
export NODE_OPTIONS="${NODE_OPTIONS:-} --openssl-legacy-provider"
fi
npm run build:prod
echo "已生成: $FRONTEND_DIR/dist"
[[ ! -d "$FRONTEND_DIR/dist" ]] && { echo "错误: dist 未生成"; exit 1; }
echo ""
echo "=== 2. 云服务器备份原有静态 ==="
"${SSH_CMD[@]}" "bash -s" << REMOTE_BACKUP
set -e
if [ -d "$REMOTE_DIR_ADMIN" ] && [ "\$(ls -A $REMOTE_DIR_ADMIN 2>/dev/null)" ]; then
BACKUP_TAR="$REMOTE_DIR_ADMIN/../jfadmin_${BACKUP_SUFFIX}.tar.gz"
tar -czf "\$BACKUP_TAR" -C "$REMOTE_DIR_ADMIN" .
echo "已备份: \$BACKUP_TAR"
else
echo "远程目录为空或不存在,跳过备份"
fi
REMOTE_BACKUP
echo ""
echo "=== 3. 上传 dist 到 $REMOTE_DIR_ADMIN ==="
"${SSH_CMD[@]}" "mkdir -p $REMOTE_DIR_ADMIN && (rm -rf ${REMOTE_DIR_ADMIN}/* ${REMOTE_DIR_ADMIN}/.??* 2>/dev/null; true)"
(cd "$FRONTEND_DIR/dist" && tar cf - .) | "${SSH_CMD[@]}" "mkdir -p $REMOTE_DIR_ADMIN && cd $REMOTE_DIR_ADMIN && tar xf -"
echo "后台 Vue 静态上传完成."
echo ""
echo "=== backend-adminend 部署完成 ==="

View File

@@ -1,30 +1,31 @@
#!/bin/bash #!/bin/bash
# 编译并部署 miao-front用户端 APIshccd159 云服务器 # 编译并部署 miao-front用户端 APIby80 云服务器
# 部署前在云服务器上备份原有 jar # 部署前在云服务器上备份原有 jar
# 使用: ./shell/deploy-front-shccd159.sh在 backend 目录下) # 使用: ./shell/deploy-front-by80.sh在 backend 目录下)
# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-front-shccd159.sh # 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-front-by80.sh
set -e set -e
ENV_NAME="shccd159" ENV_NAME="by80"
SSH_IDENTITY="${SSH_IDENTITY:-$HOME/.ssh/id_ed25519_crmeb_deploy}" SSH_IDENTITY="${SSH_IDENTITY:-$HOME/.ssh/id_ed25519_crmeb_deploy}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" BACKEND_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
DEPLOY_CONF="$BACKEND_DIR/deploy.conf" DEPLOY_CONF="$BACKEND_DIR/deploy.conf"
# 解析 shccd159 段配置(从 shccd159 到文件末尾 # 解析 by80 段配置deploy.conf 中 by80 段到 miao33 段之前的 KEY=value
get_conf() { get_conf() {
sed -n '/^shccd159:/,$p' "$DEPLOY_CONF" | grep -E "^${1}=" | tail -1 | cut -d= -f2- sed -n '1,/^miao33:/p' "$DEPLOY_CONF" | grep -E "^${1}=" | tail -1 | cut -d= -f2-
} }
SERVER_HOST=$(get_conf SERVER_HOST) SERVER_HOST=$(get_conf SERVER_HOST)
SERVER_USER=$(get_conf SERVER_USER) SERVER_USER=$(get_conf SERVER_USER)
SERVER_PORT=$(get_conf SERVER_PORT) SERVER_PORT=$(get_conf SERVER_PORT)
REMOTE_DIR_JAR=$(get_conf REMOTE_DIR_JAR) REMOTE_DIR_JAR=$(get_conf REMOTE_DIR_JAR)
FRONT_JAR_NAME=$(get_conf FRONT_JAR_NAME) FRONT_JAR_NAME=$(get_conf FRONT_JAR_NAME)
FRONT_LOCAL_PORT=$(get_conf FRONT_LOCAL_PORT) FRONT_LOCAL_PORT=$(get_conf FRONT_LOCAL_PORT)
SPRING_PROFILE="${ENV_NAME}" SPRING_PROFILE="miao80"
[[ -z "$SERVER_HOST" ]] && SERVER_HOST=182.92.78.159 [[ -z "$SERVER_HOST" ]] && SERVER_HOST=123.56.214.80
[[ -z "$REMOTE_DIR_JAR" ]] && REMOTE_DIR_JAR=/www/wwwroot/javaapi [[ -z "$REMOTE_DIR_JAR" ]] && REMOTE_DIR_JAR=/www/wwwroot/crmeb
[[ -z "$FRONT_JAR_NAME" ]] && FRONT_JAR_NAME=miao-front-2.2.jar [[ -z "$FRONT_JAR_NAME" ]] && FRONT_JAR_NAME=miao-front-2.2.jar
[[ -z "$FRONT_LOCAL_PORT" ]] && FRONT_LOCAL_PORT=30031 [[ -z "$FRONT_LOCAL_PORT" ]] && FRONT_LOCAL_PORT=30031
[[ -z "$SERVER_USER" ]] && SERVER_USER=root [[ -z "$SERVER_USER" ]] && SERVER_USER=root

View File

@@ -1,81 +0,0 @@
#!/bin/bash
# 编译并部署 miao-front用户端 API到 shjjy153 云服务器
# 部署前在云服务器上备份原有 jar
# 使用: ./shell/deploy-front-shjjy153.sh在 backend 目录下)
# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-front-shjjy153.sh
set -e
ENV_NAME="shjjy153"
SSH_IDENTITY="${SSH_IDENTITY:-$HOME/.ssh/id_ed25519_crmeb_deploy}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
DEPLOY_CONF="$BACKEND_DIR/deploy.conf"
# 解析 shjjy153 段配置(从 shjjy153 到 shccd159 段之前)
get_conf() {
sed -n '/^shjjy153:/,/^shccd159:/p' "$DEPLOY_CONF" | grep -E "^${1}=" | tail -1 | cut -d= -f2-
}
SERVER_HOST=$(get_conf SERVER_HOST)
SERVER_USER=$(get_conf SERVER_USER)
SERVER_PORT=$(get_conf SERVER_PORT)
REMOTE_DIR_JAR=$(get_conf REMOTE_DIR_JAR)
FRONT_JAR_NAME=$(get_conf FRONT_JAR_NAME)
FRONT_LOCAL_PORT=$(get_conf FRONT_LOCAL_PORT)
SPRING_PROFILE="${ENV_NAME}"
[[ -z "$SERVER_HOST" ]] && SERVER_HOST=101.132.245.153
[[ -z "$REMOTE_DIR_JAR" ]] && REMOTE_DIR_JAR=/www/wwwroot/javaapi
[[ -z "$FRONT_JAR_NAME" ]] && FRONT_JAR_NAME=miao-front-2.2.jar
[[ -z "$FRONT_LOCAL_PORT" ]] && FRONT_LOCAL_PORT=30031
[[ -z "$SERVER_USER" ]] && SERVER_USER=root
[[ -z "$SERVER_PORT" ]] && SERVER_PORT=22
JAR_PATH="$BACKEND_DIR/crmeb-front/target/$FRONT_JAR_NAME"
REMOTE_JAR="$REMOTE_DIR_JAR/$FRONT_JAR_NAME"
[[ -f "$SSH_IDENTITY" ]] && SSH_OPTS=(-o "IdentityFile=$SSH_IDENTITY") || SSH_OPTS=()
SSH_CMD=(ssh "${SSH_OPTS[@]}" -o StrictHostKeyChecking=accept-new -p "$SERVER_PORT" "$SERVER_USER@$SERVER_HOST")
SCP_CMD=(scp "${SSH_OPTS[@]}" -o StrictHostKeyChecking=accept-new -P "$SERVER_PORT")
BACKUP_SUFFIX="backup_$(date +%Y%m%d_%H%M%S)"
echo "=== 部署 miao-front用户端 API$ENV_NAME 云服务器 ==="
echo " 服务器: $SERVER_USER@$SERVER_HOST"
echo " 目标目录: $REMOTE_DIR_JAR"
echo " Profile: $SPRING_PROFILE"
echo ""
echo "=== 1. 编译 crmeb-frontmiao-front-2.2.jar==="
cd "$BACKEND_DIR"
mvn clean package -pl crmeb-front -am -DskipTests -q
echo "已生成: $JAR_PATH"
[[ ! -f "$JAR_PATH" ]] && { echo "错误: jar 未生成"; exit 1; }
echo ""
echo "=== 2. 云服务器备份原有 jar ==="
"${SSH_CMD[@]}" "bash -s" << REMOTE_BACKUP
set -e
mkdir -p "$REMOTE_DIR_JAR/backups"
if [ -f "$REMOTE_JAR" ]; then
cp -a "$REMOTE_JAR" "$REMOTE_DIR_JAR/backups/${FRONT_JAR_NAME}.${BACKUP_SUFFIX}"
echo "已备份: $REMOTE_DIR_JAR/backups/${FRONT_JAR_NAME}.${BACKUP_SUFFIX}"
else
echo "远程无原有 jar跳过备份"
fi
REMOTE_BACKUP
echo ""
echo "=== 3. 上传 $FRONT_JAR_NAME$REMOTE_DIR_JAR ==="
"${SCP_CMD[@]}" "$JAR_PATH" "$SERVER_USER@$SERVER_HOST:$REMOTE_DIR_JAR/"
echo "jar 上传完成."
echo ""
echo "=== 4. 远程重启 miao-front 服务 (profile=$SPRING_PROFILE, port=$FRONT_LOCAL_PORT) ==="
"${SSH_CMD[@]}" "cd $REMOTE_DIR_JAR && \
(pkill -f $FRONT_JAR_NAME || true) && \
sleep 2 && \
nohup java -Xms128m -Xmx256m -jar $FRONT_JAR_NAME --spring.profiles.active=$SPRING_PROFILE --server.port=$FRONT_LOCAL_PORT > front.log 2>&1 & \
sleep 3 && \
(pgrep -f $FRONT_JAR_NAME && echo 'miao-front 已启动' || (echo '启动可能失败,请检查 front.log'; tail -20 front.log))"
echo ""
echo "=== miao-front 部署完成 ==="

View File

@@ -1,157 +0,0 @@
# shjjy153 分支变更清单
## 分支信息
- **分支名称**: shjjy153
- **创建时间**: 2026-03-14
- **基础分支**: main
## 变更概述
本分支主要针对 jjy集佳易项目进行配置更新和功能优化涉及后端配置文件、控制器以及前端页面的修改。
## 详细变更内容
### 1. 后端配置变更
#### 1.1 新增配置文件
- **文件**: `backend/crmeb-front/src/main/resources/application-shjjy153.yml`
- **变更类型**: 新增
- **说明**: 创建 jjy 项目的专属配置文件
#### 1.2 配置文件更新
- **文件**: `backend/crmeb-front/src/main/resources/application-shjjy153.yml`
- **变更类型**: 修改
- **变更内容**:
- **第 2 行**: `imagePath``/www/wwwroot/ccd.fwxgpt.com/` 改为 `/www/wwwroot/jjy.fwxgpt.com/`
- **说明**: 适配 jjy 项目服务器图片路径
#### 1.3 主配置文件
- **文件**: `backend/crmeb-front/src/main/resources/application.yml`
- **变更类型**: 修改
- **变更说明**: 配置调整
### 2. 后端代码变更
#### 2.1 用户控制器 - WaUserController.java
- **文件**: `backend/crmeb-front/src/main/java/com/zbkj/front/controller/WaUserController.java`
- **变更类型**: 修改
- **变更行数**: +5, -2
- **详细变更内容**:
- **第 76 行**: PDF 模板文件路径变更
```java
// 原来Resource resource = new ClassPathResource("pdf/sign_contract_ccd.pdf");
// 现在Resource resource = new ClassPathResource("pdf/sign_contract_jjy.pdf");
```
- **说明**: 将 PDF 合同模板从 ccd 版本切换到 jjy 版本
- **第 202 行**: 用户合同 URL 配置变更
```java
// 原来user.setContract("https://ccd.fwxgpt.com/"+pdfResultVo.getUrl());
// 现在user.setContract("https://jjy.fwxgpt.com/"+pdfResultVo.getUrl());
```
- **说明**: 将用户合同存储地址切换到 jjy 项目域名
### 3. 前端配置变更
#### 3.1 应用配置 - app.js
- **文件**: `single_uniapp22miao/config/app.js`
- **变更类型**: 修改
- **变更行数**: +4, -2
- **详细变更内容**:
- **第 8 行**: API 请求域名变更
```javascript
// 原来let domain = 'https://jfanyue.szxingming.com'
// 现在let domain = 'https://jjy-jf.fwxgpt.com'
```
- **第 9 行**: 注释掉 CCD 域名配置
```javascript
// let domain = 'https://ccd-jf.fwxgpt.com'
```
- **说明**: 将前端 API 请求域名切换到 jjy 项目环境
### 4. 前端页面变更
#### 4.1 首页 - index.vue
- **文件**: `single_uniapp22miao/pages/index/index.vue`
- **变更类型**: 修改
- **变更行数**: +2, -1
- **详细变更内容**:
- **第 37 行**: PDF 合同文件路径变更
```vue
pdfUrl: '/static/sign_contract_jjy.pdf',
```
- **说明**: 将默认加载的 PDF 合同从通用版本切换到 jjy 版本
#### 4.2 积分页面 - points.vue
- **文件**: `single_uniapp22miao/pages/integral/points.vue`
- **变更类型**: 修改
- **变更行数**: +4, -1
- **详细变更内容**:
- **第 341 行**: 抢购页面跳转链接变更
```javascript
// 原来window.location.href = 'https://ccd.fwxgpt.com/?#/pages/personal/index'
// 现在window.location.href = 'https://jjy.fwxgpt.com/?#/pages/personal/index'
```
- **第 342-344 行**: 注释掉其他项目域名配置
```javascript
// window.location.href = 'https://shop.wenjinhui.com/?#/pages/personal/index'
// window.location.href = 'https://anyue.szxingming.com/?#/pages/personal/index'
```
- **说明**: 将跳转链接切换到 jjy 项目个人中心页面
#### 4.3 签名预览页面 - sign-preview.vue
- **文件**: `single_uniapp22miao/pages/sub-pages/webview/sign-preview.vue`
- **变更类型**: 修改
- **变更行数**: +2, -1
- **变更说明**: 优化签名预览功能,可能涉及 PDF 加载逻辑
#### 4.4 签名页面 - sign.vue
- **文件**: `single_uniapp22miao/pages/sub-pages/webview/sign.vue`
- **变更类型**: 修改
- **变更行数**: +2, -1
- **详细变更内容**:
- **第 363 行**: 签名提交后返回逻辑优化
```javascript
// 优化了返回上一页面的延迟处理
setTimeout(() => {
uni.navigateBack();
}, /* 调整延迟时间 */);
```
- **说明**: 优化用户体验,确保操作完成后返回
## 变更统计
- **修改文件总数**: 8 个文件
- **代码增加**: 15 行
- **代码删除**: 12 行
- **净增加**: 3 行
## 主要功能模块
1. **配置管理**: 完成 jjy 项目的独立配置
2. **用户模块**: 优化用户控制器功能
3. **积分系统**: 优化积分页面功能
4. **电子签名**: 优化签名相关页面功能
## 部署说明
### 后端部署
1. 使用 `shjjy153` 配置文件启动服务
2. 确保服务器路径 `/www/wwwroot/jjy.fwxgpt.com/` 可访问
3. 重启后端服务
### 前端部署
1. 重新编译前端项目
2. 更新配置文件
3. 部署到对应环境
## 测试建议
1. 验证图片上传和访问功能
2. 测试用户相关接口
3. 验证积分页面功能
4. 测试电子签名功能
## 备注
本分支是基于 shjjy153 分支的进一步开发,主要针对 jjy 项目进行定制化配置和功能优化。

View File

@@ -1,57 +0,0 @@
# shjjy153 与 shccd159 分支对比
## 1. 提交差异
- **shjjy153 独有**`0f02cb7 shjjy153: 新增 deploy-front-shjjy153.sh更新配置`
- **shccd159**:无此提交,因此没有 `deploy-front-shjjy153.sh`
---
## 2. 文件差异
| 文件 | shjjy153 | shccd159 |
|------|----------|----------|
| **backend/shell/deploy-front-shjjy153.sh** | 存在 | 不存在 |
| **backend/shell/deploy-front-shccd159.sh** | 存在 | 存在 |
| **application.yml** `spring.profiles.active` | `shjjy153` | `shccd159` |
| **single_uniapp22miao/config/app.js** | `jjy-jf.fwxgpt.com` | `ccd-jf.fwxgpt.com` |
---
## 3. 配置差异
### application.yml默认 profile
```yaml
# shjjy153
spring.profiles.active: shjjy153
# shccd159
spring.profiles.active: shccd159
```
### single_uniapp22miao/config/app.jsAPI 与 H5 域名)
| 配置 | shjjy153 | shccd159 |
|------|----------|----------|
| domain | `https://jjy-jf.fwxgpt.com` | `https://ccd-jf.fwxgpt.com` |
| HTTP_H5_URL | `https://jjy-jf.fwxgpt.com` | `https://ccd-jf.fwxgpt.com` |
---
## 4. 部署环境deploy.conf
两分支的 `deploy.conf` 相同,均包含 shjjy153 与 shccd159 两套配置:
| 环境 | 服务器 | 域名 |
|------|--------|------|
| **shjjy153** | 101.132.245.153 | jjy-jf.fwxgpt.com / jjy-jfadmin.fwxgpt.com |
| **shccd159** | 182.92.78.159 | ccd-jf.fwxgpt.com / ccd-jfadmin.fwxgpt.com |
---
## 5. 小结
- **shjjy153**:面向 jjy 项目,默认 profile=shjjy153`deploy-front-shjjy153.sh`
- **shccd159**:面向 ccd 项目,默认 profile=shccd159`deploy-front-shjjy153.sh`
- 其余代码与配置基本一致,差异集中在默认 profile、前端 API 域名及部署脚本

View File

@@ -0,0 +1,217 @@
# 公司名称:宝应博森元
## mysql数据库配置信息
host ip: 123.56.214.80
datasource:
name: yangtangyoupin
username: yangtangyoupin
password: 5Fn8eWrbYFtAhCZw
---
## 数据删除任务
- **用户id数据范围**
93257
93255
93247
93246
93245
93244
93243
93242
93240
93237
93236
93235
93234
93232
93231
93230
93229
93227
93226
93225
93224
93223
93222
93221
93220
93219
93215
93210
93209
93208
93206
93205
93204
93203
93202
93201
93199
93198
93197
93196
93195
93191
93188
93181
93180
93178
93176
93175
93174
93173
93172
93165
93162
93158
93154
93151
93149
93141
93099
93098
93096
93095
93079
93076
93063
93041
93003
93001
92959
92951
92885
92884
92880
92850
92792
92754
92671
91757
---
## 需求目标
删除数据库中“用户id数据范围”内用户在所有相关表中的业务数据保留不在该范围内的其他用户及其业务数据。
本文件可作为后续同类“按用户范围删除数据”需求的标准处理方案文档。执行时只需替换公司信息、数据库连接信息和用户 ID 范围。
## 执行边界
- **删除方向**:删除用户 ID 范围内的数据,保留范围外数据。
- **表范围**:不只处理显式列出的表,需要扫描目标库所有表结构,找出用户关联字段后统一处理。
- **字段范围**:重点处理以下用户关联字段:
- `uid`
- `user_id`
- `seller_id`
- `buyer_id`
- `out_user_id`
- `bargain_user_id`
- `pay_uid`
- 其他明确表示用户 ID 的字段
- **核心用户表**
- `wa_users.id`
- `eb_user.uid`
- **特殊字段边界**
- `eb_user.spread_uid` 表示“当前用户的推荐人”。
-`spread_uid` 命中待删除用户 ID 时,不删除这些范围外用户,也不默认清空该字段。
- `spread_uid` 仅作为预检报告项,除非需求另行明确要求处理。
## 预检要求
执行删除前必须先做只读预检:
1. 确认连接的数据库为目标库 `yangtangyoupin`
2. 扫描 `INFORMATION_SCHEMA.COLUMNS`,找出所有用户关联字段。
3. 对每个命中的表字段统计目标用户 ID 的命中行数。
4. 单独报告 `eb_user.spread_uid` 命中数量,但不纳入删除范围。
5. 输出清理前基线统计,作为最终删除数量核对依据。
参考字段扫描范围:
```sql
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND (
COLUMN_NAME IN (
'uid',
'user_id',
'seller_id',
'buyer_id',
'out_user_id',
'bargain_user_id',
'pay_uid',
'spread_uid'
)
OR COLUMN_NAME LIKE '%user%'
OR COLUMN_NAME LIKE '%uid%'
OR COLUMN_NAME LIKE '%seller%'
OR COLUMN_NAME LIKE '%buyer%'
)
ORDER BY TABLE_NAME, COLUMN_NAME;
```
## 删除规则
### `wa_*` 相关表
删除用户 ID 范围内的相关记录:
- `wa_users`:删除 `id` 在用户 ID 范围内的记录。
- `wa_order`:删除 `seller_id``buyer_id` 在用户 ID 范围内的订单。同一订单只删除一次。
- `wa_merchandise`:删除 `user_id` 在用户 ID 范围内的寄售商品。
- `wa_selfbonus_log`:删除 `user_id` 在用户 ID 范围内的记录。
- `wa_sharebonus_log`:删除 `user_id` 在用户 ID 范围内的记录。
- `wa_coupon_log`:删除 `user_id` 在用户 ID 范围内的记录。
- `wa_address``wa_alipay``wa_bank``wa_money_log``wa_withdraw` 等存在 `user_id` 字段的表:删除 `user_id` 在用户 ID 范围内的记录。
### `eb_*` 相关表
删除用户 ID 范围内的相关记录:
- `eb_user`:删除 `uid` 在用户 ID 范围内的记录。
- `eb_user_integral_record`:删除 `uid` 在用户 ID 范围内的记录。
- `eb_user_address``eb_user_bill``eb_user_brokerage_record``eb_user_experience_record``eb_user_extract``eb_user_level``eb_user_recharge``eb_user_sign``eb_user_token``eb_user_visit_record` 等存在 `uid` 字段的用户表:删除 `uid` 在用户 ID 范围内的记录。
- `eb_store_order``eb_store_cart``eb_store_coupon_user``eb_store_pink``eb_store_product_log``eb_store_product_relation``eb_store_product_reply` 等存在 `uid` / `pay_uid` / `bargain_user_id` 的业务表:删除相关字段在用户 ID 范围内的记录。
- `eb_pay_component_order.out_user_id` 等明确表示用户 ID 的字段:删除字段值在用户 ID 范围内的记录。
### 其他相关表
- `t_platform_account.user_id` 等非 `wa_*` / `eb_*` 表:如字段语义明确为用户 ID删除字段值在用户 ID 范围内的记录。
- 仅字段名包含 `username``user_phone``user_address` 等非用户 ID 语义字段时,不按用户 ID 范围删除。
## 执行顺序
1. 先删除业务子表和日志表数据。
2. 再删除订单、商品、积分、账单、访问记录等用户关联数据。
3. 最后删除核心用户表:
- `wa_users WHERE id IN (...)`
- `eb_user WHERE uid IN (...)`
4. 不处理 `eb_user.spread_uid IN (...)` 的范围外用户。
## 校验要求
删除完成后必须逐表校验:
- 所有纳入删除范围的 `uid``user_id``seller_id``buyer_id``out_user_id``bargain_user_id``pay_uid` 等字段,对目标用户 ID 的命中数应为 `0`
- `wa_users.id` 在目标用户 ID 范围内的记录数应为 `0`
- `eb_user.uid` 在目标用户 ID 范围内的记录数应为 `0`
- `wa_order``seller_id``buyer_id` 在目标用户 ID 范围内的记录数应为 `0`
- `eb_user.spread_uid` 命中范围内 ID 的记录可以继续存在,作为保留边界说明输出。
## 输出要求
执行完成后输出以下结果:
- 每张表清理前命中数。
- 每张表实际删除数。
- 每张表清理后剩余命中数。
- `eb_user.spread_uid` 的保留说明。
- 最终结论:是否所有纳入删除范围的相关数据均已清零。

View File

@@ -3,15 +3,11 @@ ENV = 'development'
# base api # base api
# VUE_APP_BASE_API = '/dev-api' # VUE_APP_BASE_API = '/dev-api'
# VUE_APP_BASE_API = 'http://127.0.0.1:30032' VUE_APP_BASE_API = 'http://127.0.0.1:30032'
# VUE_APP_BASE_API = 'https://jfadmin.suzhouyuqi.com' # VUE_APP_BASE_API = 'https://jfadmin.suzhouyuqi.com'
# VUE_APP_BASE_API = 'http://jfanyueadmin.szxingming.com' # VUE_APP_BASE_API = 'http://jfanyueadmin.szxingming.com'
# VUE_APP_BASE_API = 'http://jfadmin.wenjinhui.com' # VUE_APP_BASE_API = 'http://jfadmin.wenjinhui.com'
# VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com' # VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com'
# shjjy153 项目
VUE_APP_BASE_API = 'http://jjy-jfadmin.uj345.com'
# shccd159 项目
# VUE_APP_BASE_API = 'http://ccd-jfadmin.cichude.com'
# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, # vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,

View File

@@ -6,14 +6,7 @@ ENV = 'production'
# VUE_APP_BASE_API = 'http://127.0.0.1:8080' # VUE_APP_BASE_API = 'http://127.0.0.1:8080'
# VUE_APP_BASE_API = 'https://jf.suzhouyuqi.com' # VUE_APP_BASE_API = 'https://jf.suzhouyuqi.com'
# miao33 项目 # miao33 项目
# VUE_APP_BASE_API = 'http://jfadmin.xiashengjun.com' VUE_APP_BASE_API = 'http://jfadmin.xiashengjun.com'
# shjjy153 项目
# VUE_APP_BASE_API = 'http://jjy-jfadmin.uj345.com'
# shccd159 项目
VUE_APP_BASE_API = 'http://ccd-jfadmin.cichude.com'
# VUE_APP_BASE_API = 'http://jfanyueadmin.szxingming.com' # VUE_APP_BASE_API = 'http://jfanyueadmin.szxingming.com'
# VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com' # VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com'

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Some files were not shown because too many files have changed in this diff Show More