# service README

## 开发环境搭建

### 启动mongo服务
window 环境下建议使用git bash
`
1. cd ./mongodb
2. ./start.sh
`
## 启动redis服务
`
1. cd ./redis
2. ./start.sh
`

### 创建数据库
`
0.  docker ps -a
1. docker exec -it test-mongo  /bin/bash 

2. mongosh

3. show dbs

4. use antingService
`
### docker 
`
1. 查看docker占有情况：docker system df
2. docker ps -a
3. 
3. docker rm $(docker ps -aq)：删除所有未运行的容器（docker stop 容器id停止运行容器）。
docker image prune -a： 删除掉未被使用的镜像。
`
## cli

 - 开发环境：
   初始化：yarn dev:init
   初始化：yarn dev:initMenu //初始化PC端菜单，菜单可以在管理后台配置
   开发启动：yarn dev

- 生产环境：
  初始化：yarn build
  初始化：yarn build:initMenu //初始化PC端菜单
  运行：yarn prd
  部署：yarn dep

小程序登录：
1. 获取oss配置：

get http://127.0.0.1:6918/api/mini/v1/common/getOssConfig?dirpath=user%2F

2. 上传头像：https://norgren-service.oss-cn-shanghai.aliyuncs.com

3. 获取code get
http://127.0.0.1:6918/api/mini/v1/wx_mini/getCodeInfo?code=0b1i8u1003HZqS1FHH000NS8LL0i8u1J

4. 授权登录 post

http://127.0.0.1:6918/api/mini/v1/user/login

请求参数：
grantType: onlywxmin
userInfo: {"avatarUrl":"https://norgren-service.oss-cn-shanghai.aliyuncs.com/admin/2024-07-07/2024070709533817810.jpeg","nickName":"大鹏","country":"","province":"","city":"","language":"","gender":1}
code: 0b1i8u1003HZqS1FHH000NS8LL0i8u1J
enPhoneInfo: {}

### mongosh
```sh
use myDatabase
show collections
db.cases.find().pretty()
db.cases.drop()


```
​
### 设置mongo 做副本集
`
1. docker exec -it slea-mongo  /bin/bash
2. mongosh
初始化副本集
3. rs.initiate({
  _id: "rs0",
  version: 1,
  members: [
    { _id: 0, host: "localhost:27017" }
  ]
});
3. rs.status();
4. rs.conf();
`
可以直接执行脚本：项目名称/data/dev/mongodb/start.sh

5. 检查
docker exec -it slea-mongo mongosh --port 27017 -u secureAdmin -p sA398P50d508 --authenticationDatabase admin --eval "rs.status()"


use admin
db.auth("qsAdmin", "sA398P50d508")

db.myCollection.insertOne({ name: "Alice", age: 25, city: "Shanghai" })
db.myCollection.insertMany([
  { name: "Bob", age: 30, city: "Beijing" },
  { name: "Charlie", age: 35, city: "Guangzhou" }
])
db.myCollection.find()

show collections
db.users.find()
db.users.drop()
db.users.find({
  username: "18817958776",
  status: { $in: ["pending", "active"] }
});

## 程序设计
### 程序的用户
1. 管理员
2. 小程序
### 程序的实体
1. 企业组织 organization
2. 微信小程序用户user
3. 管理后台用户admin
4. 会员member
5. 会费dues
6. 协会动态
7. 活动会议会务
8. 最新公告
9. banner
10. 文档管理：富文本，图片，用于协会管理办法
11. 我的审核
12. 我的活动
13. 我的收藏
14. 
### 审批流程
1. 入会流程：，提交成功-协会初审-协会复审-缴纳会费-成为会员，每一个步骤可能不通过审批，通过/不通过都需要备注

2. 退会流程：提交申请-协会审核-通过/拒绝 拒绝需要理由
#### 关于逻辑关系
1. 关于用户提交入会申请具体逻辑：用户创建会员表member，提交基础信息，再提交详细信息；提交详细信息后生成下载文档，用户打印上传后提交申请创建入会申请表MembershipApplication记录申请流程
2. 管理员审批逻辑：管理员通过申请则更新member和MembershipApplication，并由管理员填写协会信息更新member并更新MembershipApplication记录申请流程；驳回申请则只更新MembershipApplication输入驳回的理由。
3. 关于复审：管理员填写好协会信息后将复审的链接发给复审人员，复审人员通过则进入缴纳；驳回则输入驳回理由

### 操作数据：
`
db.members.updateOne( { _id: ObjectId("66cc87bab1c7aaff8915a82b") }, /* 查询条件，匹配特定的 _id*/ { $set: { status: "generated" } /* 更新操作，将 status 字段设置为 "initial_review"*/ } )

db.members.findOne( { userId: ObjectId("66cdc8c284b553edc34eb246"),
status: {
    '$in': [
      'create',
      'update_detail',
      'generated',
      'pending',
      'initial_review',
      're_review',
      'awaiting_payment',
      'withdrawal_pending'
    ]
  }, })
`

use your_database_name  // 切换到你的数据库

// 查找并更新审批流程模板，添加新的步骤
db.approvalprocesstemplates.updateOne(
  { name: "入会申请审批流程" },  // 查找条件
  { 
    $push: { 
      steps: {
        stepName: "恭喜您，您已成为正式会员",
        stepType: "member",
        amount: 100,  // 假设缴费金额为100
        order: 5      // 确保步骤顺序为5
      }
    }
  }
);
db.approvalprocesstemplates.updateOne(
  { name: "入会申请审批流程", "steps.order": 5 },  // 查找条件，确保找到 order 为 5 的步骤
  { 
    $set: { 
      "steps.$.stepType": "member"  // 使用 $set 修改步骤类型
    }
  }
);
// 输出提示信息
print("审批流程模板更新成功");

db.members.updateOne(
  { _id: ObjectId('66da3ca7c50c6f68d830b29d') },
  { $set: { approvalInstance: ObjectId('66da41455f33a9d1fc00501b') } }
)
