# 合伙人管理后台项目

## 代码以及文档
- [代码地址](http://gitlab.fjmaimaimai.com/mmm-go/partnermg.git)
- [项目原型svn](svn://218.106.157.184/repo/项目文件/项目【合伙人】)
- [yapi-合伙人前端](http://47.97.5.102:36666/project/209/interface/api)

服务端地址
```
测试开发环境pg数据库地址:114.55.200.59:31543,开发库:partner_dev,测试库:partner_test
正式环境pg数据库地址:114.55.200.59:31544,正式库:partner

服务端开发环境地址:http://mmm-partnermg-dev.fjmaimaimai.com
服务端测试环境地址:http://mmm-partnermg-test.fjmaimaimai.com
服务端正式环境地址:https://public-interface.fjmaimaimai.com/mmm-partnermg
```
## 系统架构图
![diagram](http://gitlab.fjmaimaimai.com/chenzhiying/img-folder/raw/master/diagram.png)

## 项目整体
- 项目使用框架
  - http框架:beego 
  - orm框架:go-pg
  - 数据存储:postgresql
  - 项目结构分层:DDD领域驱动

- 项目结构
```
├─conf     项目配置文件 
├─deploy   项目部署文件            
├─pkg
│  ├─application   
│  │  ├─adminPermission  用户权限菜单
│  │  ├─businessBonus    (在0.5.0后已经移除)      
│  │  ├─company        企业公司功能
│  │  ├─event          事件订阅以及处理
│  │  ├─factory        工厂类,实例具体的实现(数据仓储)
│  │  ├─orderinfo      合伙人订单以及分红数据
│  │  ├─partnerCategory  合伙人分类信息     
│  │  ├─partnerInfo       合伙人信息       
│  │  ├─syncOrder         同步其他系统的订单数据
│  │  ├─unifiedUserCenter 从企业平台接收企业和管理员用户数据     
│  │  └─users             管理员用户信息
│  ├─constant      变量配置(数据库等)
│  ├─domain   领域模型(核心数据处理,接口定义)
│  │  ├─event  领域事件定义
│  │  └─service  领域服务定义      
│  ├─infrastructure 基础设施
│  │  ├─dao      特殊的数据库操作
│  │  ├─domainService    实现领域服务   
│  │  ├─pg       postgresql 数据库模型定义
│  │  ├─repository    数据仓储具体实现(对应domain定义数据库的数据存储接口)
│  │  ├─serviceGateway   其他系统服务调用
│  │          
│  ├─lib        
│  ├─log    
│  └─port    数据接入层(http接入,消息)
│      ├─beego     beego接入    
│      └─consumer   kafka消息订阅            
└─vendor
```

## 领域驱动设计-战略建模
### 领域

### 限界上下文

### 上下文映射

## 领域驱动设计-战术建模
### 实体
实发订单实体:OrderBase

栏目设置实体:ColumnSetting

合伙人实体:Partner

用户实体:User

公司实体:Company

管理员实体:AdminUser

### 值对象


### 聚合根

### 领域服务

### 领域事件

## 领域驱动设计工程实现
### 模块

### 领域对象

### 资源库

### 防腐层

### 领域服务

### 数据流转
![avatar](http://gitlab.fjmaimaimai.com/chenzhiying/img-folder/raw/master/dto.png)
### 上下文集成

### 分离领域
![avatar](http://gitlab.fjmaimaimai.com/chenzhiying/img-folder/raw/master/dispatch.png)

## 系统对接的外部数据

1. 外部数据来源,接收企业平台发送过来的数据。目前接收的是公司和员工的数据
    主要内容在文件夹
    partnermg/pkg/application/unifiedUserCenter,
    partnermg/pkg/port/beego/controller/sync_data_controller.go,
    partnermg/pkg/port/beego/routers/routers.go,
    具体对接需要的数据格式文档地址:
    [yapi-企业平台-子系统对接](http://47.97.5.102:36666/project/187/interface/api)

2. 外部数据来源,接收香米小程序的订单,需要对接kafka消息。
    主要内容在
    partnermg/pkg/application/syncOrder,
    partnermg/pkg/port/consumer,
    具体对接需要的数据格式文档地址:
    [yapi-合伙人-后端](http://47.97.5.102:36666/project/211/interface/api/9013)

3. 需要调用外部的api接口,调用企业平台,统一用户中心的接口
    主要内容在
    partnermg/pkg/infrastructure/serviceGateway

## 系统入口
- [测试环境--企业平台网站地址](https://enterprise-platform-dev.fjmaimaimai.com)
- [开发环境--企业平台网站地址](https://enterprise-platform-local.fjmaimaimai.com)
- 天联共创后台自身没有独立的登录入口,需要经过企业平台进行跳转登录

## 标准产品组工具使用
- 设置全局变量(替换YOUR-USER-PATH为你真实的项目路径) 
  
    1.生成路径(项目生成路径):/YOUR-USER-PATH/GolandProjects/
  
    2.eggs根目录路径(领域描述语言DSL文档路径生成或引用路径):/YOUR-USER-PATH/GolandProjects/partnermg/document/
  
    3.egg名称(通常为项目名称,同样是DSL文件夹名称):partnermg

- 应用描述语言生成
  
    1.应用描述语言egg脚手架生成

    2.生成属性(Attribute)

    3.生成模式(Schema)

    4.生成服务(Service)

    5.生成接口(Api)

- 具体工程生成
    
    1.生成接口文档(OpenApi)

    2.生成项目代码脚手架

    3.生成领域模型

    4.生成应用服务

    5.生成Http协议接口

## 建议
1. vendor 目前作用是存放依赖,加快在容器中的构建速度。
2. 有"go.mod"文件存在,可以直接删除vendor文件夹。不过相应的dockerfile 也要进行一定的修改。
3. vendor 文件夹如果不是迫不得已,请不要手动修改其中的文件!可以使用命令 “go mod vendor”。
如果手动修改vendor中的文件,需自行进行版本管理。(慎重考虑!慎重考虑!慎重考虑!)。