作者 陈志颖

fix:解决冲突

正在显示 87 个修改的文件 包含 3393 行增加198 行删除

要显示太多修改。

为保证性能只显示 87 of 87+ 个文件。

@@ -12,5 +12,5 @@ ENV GO111MODULE on @@ -12,5 +12,5 @@ ENV GO111MODULE on
12 ENV GOPROXY https://goproxy.cn 12 ENV GOPROXY https://goproxy.cn
13 # RUN ["go","mod","tidy"] 13 # RUN ["go","mod","tidy"]
14 RUN ["go","build","-mod=vendor"] 14 RUN ["go","build","-mod=vendor"]
15 -EXPOSE 8082 15 +EXPOSE 8082 443
16 ENTRYPOINT ["./partnermg"] 16 ENTRYPOINT ["./partnermg"]
1 -# 服务端工作交接事项  
2 -## 合伙人管理后台项目 1 +# 合伙人管理后台项目
3 2
4 -### 代码以及文档 3 +## 代码以及文档
5 - [代码地址](http://gitlab.fjmaimaimai.com/mmm-go/partnermg.git) 4 - [代码地址](http://gitlab.fjmaimaimai.com/mmm-go/partnermg.git)
6 - [项目原型svn](svn://218.106.157.184/repo/项目文件/项目【合伙人】) 5 - [项目原型svn](svn://218.106.157.184/repo/项目文件/项目【合伙人】)
7 - [yapi-合伙人前端](http://47.97.5.102:36666/project/209/interface/api) 6 - [yapi-合伙人前端](http://47.97.5.102:36666/project/209/interface/api)
@@ -15,7 +14,10 @@ @@ -15,7 +14,10 @@
15 服务端测试环境地址:http://mmm-partnermg-test.fjmaimaimai.com 14 服务端测试环境地址:http://mmm-partnermg-test.fjmaimaimai.com
16 服务端正式环境地址:https://public-interface.fjmaimaimai.com/mmm-partnermg 15 服务端正式环境地址:https://public-interface.fjmaimaimai.com/mmm-partnermg
17 ``` 16 ```
18 -### 项目整体 17 +## 系统架构图
  18 +![diagram](http://gitlab.fjmaimaimai.com/chenzhiying/img-folder/raw/master/diagram.png)
  19 +
  20 +## 项目整体
19 - 项目使用框架 21 - 项目使用框架
20 - http框架:beego 22 - http框架:beego
21 - orm框架:go-pg 23 - orm框架:go-pg
@@ -57,7 +59,56 @@ @@ -57,7 +59,56 @@
57 │ └─consumer kafka消息订阅 59 │ └─consumer kafka消息订阅
58 └─vendor 60 └─vendor
59 ``` 61 ```
60 -### 系统对接的外部数据 62 +
  63 +## 领域驱动设计-战略建模
  64 +### 领域
  65 +
  66 +### 限界上下文
  67 +
  68 +### 上下文映射
  69 +
  70 +## 领域驱动设计-战术建模
  71 +### 实体
  72 +实发订单实体:OrderBase
  73 +
  74 +栏目设置实体:ColumnSetting
  75 +
  76 +合伙人实体:Partner
  77 +
  78 +用户实体:User
  79 +
  80 +公司实体:Company
  81 +
  82 +管理员实体:AdminUser
  83 +
  84 +### 值对象
  85 +
  86 +
  87 +### 聚合根
  88 +
  89 +### 领域服务
  90 +
  91 +### 领域事件
  92 +
  93 +## 领域驱动设计工程实现
  94 +### 模块
  95 +
  96 +### 领域对象
  97 +
  98 +### 资源库
  99 +
  100 +### 防腐层
  101 +
  102 +### 领域服务
  103 +
  104 +### 数据流转
  105 +![avatar](http://gitlab.fjmaimaimai.com/chenzhiying/img-folder/raw/master/dto.png)
  106 +### 上下文集成
  107 +
  108 +### 分离领域
  109 +![avatar](http://gitlab.fjmaimaimai.com/chenzhiying/img-folder/raw/master/dispatch.png)
  110 +
  111 +## 系统对接的外部数据
61 112
62 1. 外部数据来源,接收企业平台发送过来的数据。目前接收的是公司和员工的数据 113 1. 外部数据来源,接收企业平台发送过来的数据。目前接收的是公司和员工的数据
63 主要内容在文件夹 114 主要内容在文件夹
@@ -78,11 +129,43 @@ @@ -78,11 +129,43 @@
78 主要内容在 129 主要内容在
79 partnermg/pkg/infrastructure/serviceGateway 130 partnermg/pkg/infrastructure/serviceGateway
80 131
81 -### 系统入口 132 +## 系统入口
82 - [测试环境--企业平台网站地址](https://enterprise-platform-dev.fjmaimaimai.com) 133 - [测试环境--企业平台网站地址](https://enterprise-platform-dev.fjmaimaimai.com)
83 - [开发环境--企业平台网站地址](https://enterprise-platform-local.fjmaimaimai.com) 134 - [开发环境--企业平台网站地址](https://enterprise-platform-local.fjmaimaimai.com)
84 - 天联共创后台自身没有独立的登录入口,需要经过企业平台进行跳转登录 135 - 天联共创后台自身没有独立的登录入口,需要经过企业平台进行跳转登录
85 136
  137 +## 标准产品组工具使用
  138 +- 设置全局变量(替换YOUR-USER-PATH为你真实的项目路径)
  139 +
  140 + 1.生成路径(项目生成路径):/YOUR-USER-PATH/GolandProjects/
  141 +
  142 + 2.eggs根目录路径(领域描述语言DSL文档路径生成或引用路径):/YOUR-USER-PATH/GolandProjects/partnermg/document/
  143 +
  144 + 3.egg名称(通常为项目名称,同样是DSL文件夹名称):partnermg
  145 +
  146 +- 应用描述语言生成
  147 +
  148 + 1.应用描述语言egg脚手架生成
  149 +
  150 + 2.生成属性(Attribute)
  151 +
  152 + 3.生成模式(Schema)
  153 +
  154 + 4.生成服务(Service)
  155 +
  156 + 5.生成接口(Api)
  157 +
  158 +- 具体工程生成
  159 +
  160 + 1.生成接口文档(OpenApi)
  161 +
  162 + 2.生成项目代码脚手架
  163 +
  164 + 3.生成领域模型
  165 +
  166 + 4.生成应用服务
  167 +
  168 + 5.生成Http协议接口
86 169
87 ## 建议 170 ## 建议
88 1. vendor 目前作用是存放依赖,加快在容器中的构建速度。 171 1. vendor 目前作用是存放依赖,加快在容器中的构建速度。
1 appname = partnermg 1 appname = partnermg
2 runmode = "${RUN_MODE||dev}" 2 runmode = "${RUN_MODE||dev}"
3 httpport = "${HTTP_PORT||8082}" 3 httpport = "${HTTP_PORT||8082}"
4 - 4 +EnableHTTPS = true
  5 +HTTPSPort = "443"
  6 +HTTPSCertFile = "conf/fjmaimaimai.com_pem.crt"
  7 +HTTPSKeyFile = "conf/fjmaimaimai.com_rsa.key"
5 #开启监控 8 #开启监控
6 EnableAdmin = false 9 EnableAdmin = false
7 #开启JSON请求 10 #开启JSON请求
@@ -10,6 +13,7 @@ copyrequestbody = true @@ -10,6 +13,7 @@ copyrequestbody = true
10 enablexsrf = false 13 enablexsrf = false
11 xsrfkey = asdfioerjlasdfmFADFOEJF2323SDFF 14 xsrfkey = asdfioerjlasdfmFADFOEJF2323SDFF
12 xsrfexpire = 3600 15 xsrfexpire = 3600
  16 +
13 #是否将错误信息进行渲染 17 #是否将错误信息进行渲染
14 EnableErrorsRender =false 18 EnableErrorsRender =false
15 [lang] 19 [lang]
  1 +-----BEGIN CERTIFICATE-----
  2 +MIIGWjCCBUKgAwIBAgIQBKNf6ftifrIH+BeJ7V4uqjANBgkqhkiG9w0BAQsFADBf
  3 +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
  4 +d3cuZGlnaWNlcnQuY29tMR4wHAYDVQQDExVHZW9UcnVzdCBDTiBSU0EgQ0EgRzEw
  5 +HhcNMjEwMTA2MDAwMDAwWhcNMjIwMjA2MjM1OTU5WjCBgzELMAkGA1UEBhMCQ04x
  6 +EjAQBgNVBAgMCeemj+W7uuecgTESMBAGA1UEBwwJ56aP5bee5biCMTAwLgYDVQQK
  7 +DCfnpo/lu7rkubDkubDkubDkv6Hmga/np5HmioDmnInpmZDlhazlj7gxGjAYBgNV
  8 +BAMMESouZmptYWltYWltYWkuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
  9 +CgKCAQEAv1KDwfoVuXyMSNUvLapWLpyWdQd8Dy4l5Wmdiydof4+ijqCfgPgMOZGS
  10 +7ucvis1ZUZLYDKbZq8xODVEWlXf/n6sMXkq0B+eltlYqyPOZyaBUkg2qqz/iKljb
  11 +1pGE5q7gfQ5nQoEW8J/DZUlKs+7jg9O0y2S0jVj3s7QlFy6Alw9BE/7ChOxqfegN
  12 +Ua0UL8W6rFqK32eyvZUeecvtKoZwJ3YD2ayXJIN70OivjkcWLskmf6+CjalitqQs
  13 +JZ7xD6/WtrpunTCpOVNqhR81sCOT+xxDwNppDqiMNo3lFL6TeQSWT19RBllkiWdW
  14 +XXfWS7CsIrqp8i/7fjt66VmVqZnPDwIDAQABo4IC6zCCAucwHwYDVR0jBBgwFoAU
  15 +kZ9eMRWuEJ+tYMH3wcyqSDQvDCYwHQYDVR0OBBYEFEhZyphSt/IUiLKJLr78T+7j
  16 +l7tmMC0GA1UdEQQmMCSCESouZmptYWltYWltYWkuY29tgg9mam1haW1haW1haS5j
  17 +b20wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
  18 +AjB1BgNVHR8EbjBsMDSgMqAwhi5odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vR2Vv
  19 +VHJ1c3RDTlJTQUNBRzEuY3JsMDSgMqAwhi5odHRwOi8vY3JsNC5kaWdpY2VydC5j
  20 +b20vR2VvVHJ1c3RDTlJTQUNBRzEuY3JsMEsGA1UdIAREMEIwNgYJYIZIAYb9bAEB
  21 +MCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAIBgZn
  22 +gQwBAgIwbwYIKwYBBQUHAQEEYzBhMCEGCCsGAQUFBzABhhVodHRwOi8vb2NzcC5k
  23 +Y29jc3AuY24wPAYIKwYBBQUHMAKGMGh0dHA6Ly9jcmwuZGlnaWNlcnQtY24uY29t
  24 +L0dlb1RydXN0Q05SU0FDQUcxLmNydDAMBgNVHRMBAf8EAjAAMIIBAgYKKwYBBAHW
  25 +eQIEAgSB8wSB8ADuAHUAKXm+8J45OSHwVnOfY6V35b5XfZxgCvj5TV0mXCVdx4QA
  26 +AAF21tCFyQAABAMARjBEAiAPHS8Wp3c0J7d5By9NQM3/tyf7/B0H7JZLJ+IlcoCG
  27 +IwIgR1+Mj5Q6nhWdqV5s9WLgSUvhpJJxvFrJOzV6zkfXZEwAdQAiRUUHWVUkVpY/
  28 +oS/x922G4CMmY63AS39dxoNcbuIPAgAAAXbW0IYsAAAEAwBGMEQCIBbGUD0dLyIT
  29 +O+KzBtFPQjiRUbcjGZsbY0gWmVzZfBPrAiAa2X20smzJK42hcMenaVrUgxC/y/j0
  30 +bYYfKRrfwEsoWDANBgkqhkiG9w0BAQsFAAOCAQEAU4aHqNW/qgzRUwBv3C9E70r/
  31 +/LMy3asBePsBARZlzd3tXrr446lsX3HKmAH4AtLACjwPv3ejsEJueeQxrwMxalW+
  32 +2ZerAJhzYqD0OovwcB2b6cDB5zWAuyllFo6ILI3KSQjzFmi4Vn993pN2b2OEUkwC
  33 +REYvMVf2BzHjVFuCiXtUWgOucsCb4ES+yWjCrw93VafyhhGCbXVXd55GNbZFE+kw
  34 +JArAwYPKwabuFYFfeSVWcRvaV+Kbo88ytPo5ZpShSOBFCPQ1JQ/BxWEmzHXQIzcz
  35 +uqELYfxmxI3q6plbgHtL1rY2B8YTWcxXF98fIfg5OKYssOV4LGcoOWPf0PUPrg==
  36 +-----END CERTIFICATE-----
  1 +-----BEGIN RSA PRIVATE KEY-----
  2 +MIIEpQIBAAKCAQEAv1KDwfoVuXyMSNUvLapWLpyWdQd8Dy4l5Wmdiydof4+ijqCf
  3 +gPgMOZGS7ucvis1ZUZLYDKbZq8xODVEWlXf/n6sMXkq0B+eltlYqyPOZyaBUkg2q
  4 +qz/iKljb1pGE5q7gfQ5nQoEW8J/DZUlKs+7jg9O0y2S0jVj3s7QlFy6Alw9BE/7C
  5 +hOxqfegNUa0UL8W6rFqK32eyvZUeecvtKoZwJ3YD2ayXJIN70OivjkcWLskmf6+C
  6 +jalitqQsJZ7xD6/WtrpunTCpOVNqhR81sCOT+xxDwNppDqiMNo3lFL6TeQSWT19R
  7 +BllkiWdWXXfWS7CsIrqp8i/7fjt66VmVqZnPDwIDAQABAoIBAHN3mF980Jm2ym+2
  8 +ghe8YvEUvlV5I+2Be4uel1+BdDbweDo+RKWwjqg77ILU8kOCNbLevhe8p0hhMIYm
  9 +90tUNemmcPuDeG4A52lJTd8j7h/a7M+NAgECuDu4j01LW/thdcjj5XwkrrSgp2u8
  10 +tSItPhC0t7u9Vp6sICrLwUrhXOhNV+qdm94VhabJFGkdR9iUYw7W7w54Z1p+Nfw8
  11 +PJdDJfwu0lr8DFB2Zw+Ota8Xg+PX71x4mWS1g+h/6xz2ivptFcKPcwd60EjB+ROi
  12 +IQC8pnUmbF0H0epoVisB3SWEMzuShmAZrckBW+0ILDUUmNzcZxcWrmzIpomCdkOv
  13 +Trtrd/ECgYEA6v37SfsSKohPncHIYfV3FE7Xt7WH09TFymAY8FXIY+K6xvX9wtWB
  14 +h+3quFWuh0VTp15m6xAF1UN6HOG0uRKwUGFqwYBy4I+88KCUO3BJzbWn2TOjt4xE
  15 +8KVwGmZafqxPjwLagCN3RBLNYF4S+jhygBIlSzHkuVkwZPGbVet7NWkCgYEA0G0b
  16 +uDPJl37gEfvhMebdTWUq+FuAVx7h7UjZQM6BNoE3cDdZHUY7pMTqqD2UDbp6O6dC
  17 +0b8Hhs8kx90DewdixSzli67jNVeTRFY3DZ85Ac/BmGyuusNm6Uwbsz4RYsyUSrRD
  18 +bukC/L1vFjB5k/UgGh0kKnBT74mO/kqASWUIebcCgYEAiShtP6UX2VNuhPnSZ7rK
  19 +IkRSjJucB/ws5g5o//5R1FtGAVMbJllQHXK0iZsZH0NLrGjhUVoszWlxIOJshYlu
  20 +97ukgATlCEVdVmWjn33O1g6tRY1qhXuN0Zf+cqpDL6SLW0GjHx+UQVtoHFNMaFgC
  21 +HNZ6hgU9JyHzqTeMHv4vD+ECgYEAhk2oTPvh7OLuk+gQZk1zUMnd9IdRndHilzoX
  22 +9DCdBnghNwgTPk/hYv0YkCyN2ILO/N18qxdDTFTySG9cLMzHknKpv2aENf0mgiRj
  23 ++T0eSNKM1yFBPktnZvGJ7+gQ3+8fpzudMDyplh6jFFNMJFERzIH2qfoTvAiRwb5U
  24 +B/c4jOUCgYEAiQOXabnrnOvkfhl/RhH/WVeLs6O3c5yei0THysGc+9CqE8txnWPN
  25 +A4XI8Tu8G2ScBN+v9oPFWlLAZxbxh1m6RM6VwP4q+Y8fmdQ+d6gH/IKTdBjH7bOt
  26 +4SHS+t8Z6PSu8K1BsF3pGRS7OWPlivSJzRyP2YIgE/xtwsEqiODdRKM=
  27 +-----END RSA PRIVATE KEY-----
@@ -10,6 +10,9 @@ spec: @@ -10,6 +10,9 @@ spec:
10 - name: "http" 10 - name: "http"
11 port: 80 11 port: 80
12 targetPort: 8082 12 targetPort: 8082
  13 + - name: "https"
  14 + port: 443
  15 + targetPort: 443
13 selector: 16 selector:
14 k8s-app: mmm-partnermg 17 k8s-app: mmm-partnermg
15 --- 18 ---
@@ -48,10 +51,13 @@ spec: @@ -48,10 +51,13 @@ spec:
48 imagePullPolicy: Always 51 imagePullPolicy: Always
49 ports: 52 ports:
50 - containerPort: 8082 53 - containerPort: 8082
51 - volumeMounts:  
52 - - mountPath: /opt/logs  
53 - name: accesslogs 54 + - containerPort: 443
  55 +# volumeMounts:
  56 +# - mountPath: /opt/logs
  57 +# name: accesslogs
54 env: 58 env:
  59 + - name: HTTP_PORT
  60 + value: "8082"
55 - name: POSTGRESQL_DB_NAME 61 - name: POSTGRESQL_DB_NAME
56 value: "partner_dev" 62 value: "partner_dev"
57 - name: POSTGRESQL_USER 63 - name: POSTGRESQL_USER
@@ -86,6 +92,8 @@ spec: @@ -86,6 +92,8 @@ spec:
86 value: "dev" 92 value: "dev"
87 - name: Log_PREFIX 93 - name: Log_PREFIX
88 value: "[partnermg_dev]" 94 value: "[partnermg_dev]"
89 - volumes:  
90 - - name: accesslogs  
91 - emptyDir: {} 95 + - name: APP_NAME
  96 + value: ""
  97 +# volumes:
  98 +# - name: accesslogs
  99 +# emptyDir: {}
@@ -10,6 +10,9 @@ spec: @@ -10,6 +10,9 @@ spec:
10 - name: "http" 10 - name: "http"
11 port: 80 11 port: 80
12 targetPort: 8082 12 targetPort: 8082
  13 + - name: "https"
  14 + port: 443
  15 + targetPort: 443
13 selector: 16 selector:
14 k8s-app: mmm-partnermg 17 k8s-app: mmm-partnermg
15 --- 18 ---
@@ -45,10 +48,13 @@ spec: @@ -45,10 +48,13 @@ spec:
45 imagePullPolicy: Always 48 imagePullPolicy: Always
46 ports: 49 ports:
47 - containerPort: 8082 50 - containerPort: 8082
  51 + - containerPort: 443
48 volumeMounts: 52 volumeMounts:
49 - mountPath: /opt/logs 53 - mountPath: /opt/logs
50 name: accesslogs 54 name: accesslogs
51 env: 55 env:
  56 + - name: HTTP_PORT
  57 + value: "8082"
52 - name: POSTGRESQL_DB_NAME 58 - name: POSTGRESQL_DB_NAME
53 value: "partner" 59 value: "partner"
54 - name: POSTGRESQL_USER 60 - name: POSTGRESQL_USER
@@ -83,6 +89,8 @@ spec: @@ -83,6 +89,8 @@ spec:
83 value: "dev" 89 value: "dev"
84 - name: Log_PREFIX 90 - name: Log_PREFIX
85 value: "[partnermg_prd]" 91 value: "[partnermg_prd]"
  92 + - name: APP_NAME
  93 + value: "mmm-partnermg"
86 volumes: 94 volumes:
87 - name: accesslogs 95 - name: accesslogs
88 emptyDir: {} 96 emptyDir: {}
@@ -10,6 +10,9 @@ spec: @@ -10,6 +10,9 @@ spec:
10 - name: "http" 10 - name: "http"
11 port: 80 11 port: 80
12 targetPort: 8082 12 targetPort: 8082
  13 + - name: "https"
  14 + port: 443
  15 + targetPort: 443
13 selector: 16 selector:
14 k8s-app: mmm-partnermg 17 k8s-app: mmm-partnermg
15 --- 18 ---
@@ -45,10 +48,13 @@ spec: @@ -45,10 +48,13 @@ spec:
45 imagePullPolicy: Always 48 imagePullPolicy: Always
46 ports: 49 ports:
47 - containerPort: 8082 50 - containerPort: 8082
48 - volumeMounts:  
49 - - mountPath: /opt/logs  
50 - name: accesslogs 51 + - containerPort: 443
  52 +# volumeMounts:
  53 +# - mountPath: /opt/logs
  54 +# name: accesslogs
51 env: 55 env:
  56 + - name: HTTP_PORT
  57 + value: "8082"
52 - name: POSTGRESQL_DB_NAME 58 - name: POSTGRESQL_DB_NAME
53 value: "partner_test" 59 value: "partner_test"
54 - name: POSTGRESQL_USER 60 - name: POSTGRESQL_USER
@@ -83,6 +89,8 @@ spec: @@ -83,6 +89,8 @@ spec:
83 value: "dev" 89 value: "dev"
84 - name: Log_PREFIX 90 - name: Log_PREFIX
85 value: "[partnermg_test]" 91 value: "[partnermg_test]"
86 - volumes:  
87 - - name: accesslogs  
88 - emptyDir: {} 92 + - name: APP_NAME
  93 + value: "partnermg"
  94 +# volumes:
  95 +# - name: accesslogs
  96 +# emptyDir: {}
  1 +swagger: "2.0"
  2 +info:
  3 + title: ""
  4 + description: 合伙人后管平台
  5 + contact:
  6 + name: SteveChan
  7 + email: steve.d.chan@qq.com
  8 + home: ""
  9 + version: 0.0.1
  10 +consumes:
  11 +- application/json
  12 +- application/xml
  13 +produces:
  14 +- application/json
  15 +- application/xml
  16 +paths:
  17 + /column-settings:
  18 + get:
  19 + tags:
  20 + - column_setting
  21 + summary: 返回栏目设置增删改查列表
  22 + description: 返回栏目设置增删改查列表
  23 + operationId: column_setting#listColumnSetting
  24 + parameters:
  25 + - name: offset
  26 + in: query
  27 + description: 查询偏离量
  28 + required: false
  29 + type: integer
  30 + - name: limit
  31 + in: query
  32 + description: 查询限制
  33 + required: false
  34 + type: integer
  35 + responses:
  36 + "200":
  37 + description: OK response.
  38 + schema:
  39 + $ref: '#/definitions/ColumnSettingListColumnSettingResponseBody'
  40 + schemes:
  41 + - http
  42 + post:
  43 + tags:
  44 + - column_setting
  45 + summary: 重置栏目设置
  46 + description: 重置栏目设置
  47 + operationId: column_setting#resetColumn
  48 + responses:
  49 + "200":
  50 + description: OK response.
  51 + schema:
  52 + $ref: '#/definitions/ColumnSettingResetColumnResponseBody'
  53 + schemes:
  54 + - http
  55 + /column-settings/{columnSettingId}:
  56 + get:
  57 + tags:
  58 + - column_setting
  59 + summary: 返回栏目设置增删改查
  60 + description: 返回栏目设置增删改查
  61 + operationId: column_setting#getColumnSetting
  62 + parameters:
  63 + - name: columnSettingId
  64 + in: path
  65 + description: 栏目设置id
  66 + required: true
  67 + type: integer
  68 + responses:
  69 + "200":
  70 + description: OK response.
  71 + schema:
  72 + $ref: '#/definitions/ColumnSettingGetColumnSettingResponseBody'
  73 + schemes:
  74 + - http
  75 + put:
  76 + tags:
  77 + - column_setting
  78 + summary: 更新栏目设置增删改查
  79 + description: 更新栏目设置增删改查
  80 + operationId: column_setting#updateColumnSetting
  81 + parameters:
  82 + - name: columnSettingId
  83 + in: path
  84 + description: 栏目设置id
  85 + required: true
  86 + type: integer
  87 + responses:
  88 + "200":
  89 + description: OK response.
  90 + schema:
  91 + $ref: '#/definitions/ColumnSettingUpdateColumnSettingResponseBody'
  92 + schemes:
  93 + - http
  94 + delete:
  95 + tags:
  96 + - column_setting
  97 + summary: 移除栏目设置增删改查
  98 + description: 移除栏目设置增删改查
  99 + operationId: column_setting#removeColumnSetting
  100 + parameters:
  101 + - name: columnSettingId
  102 + in: path
  103 + description: 栏目设置id
  104 + required: true
  105 + type: integer
  106 + responses:
  107 + "200":
  108 + description: OK response.
  109 + schema:
  110 + $ref: '#/definitions/ColumnSettingRemoveColumnSettingResponseBody'
  111 + schemes:
  112 + - http
  113 +definitions:
  114 + ColumnSettingCreateColumnSettingRequestBody:
  115 + title: ColumnSettingCreateColumnSettingRequestBody
  116 + type: object
  117 + properties:
  118 + description:
  119 + type: string
  120 + description: 栏目设置描述
  121 + required:
  122 + - description
  123 + userName:
  124 + type: string
  125 + description: 栏目设置关联用户名称
  126 + required:
  127 + - userName
  128 + ColumnSettingCreateColumnSettingResponseBody:
  129 + title: 'Mediatype identifier: ColumnSettingCreateColumnSettingResponseBody'
  130 + type: object
  131 + properties:
  132 + column_setting:
  133 + $ref: '#/definitions/column_settingResponseBody'
  134 + ColumnSettingGetColumnSettingResponseBody:
  135 + title: 'Mediatype identifier: ColumnSettingGetColumnSettingResponseBody'
  136 + type: object
  137 + properties:
  138 + column_setting:
  139 + $ref: '#/definitions/column_settingResponseBody'
  140 + ColumnSettingListColumnSettingResponseBody:
  141 + title: 'Mediatype identifier: ColumnSettingListColumnSettingResponseBody'
  142 + type: object
  143 + properties:
  144 + column_setting:
  145 + $ref: '#/definitions/column_settingResponseBody'
  146 + count:
  147 + type: integer
  148 + description: 匹配数目
  149 + required:
  150 + - count
  151 + ColumnSettingRemoveColumnSettingResponseBody:
  152 + title: 'Mediatype identifier: ColumnSettingRemoveColumnSettingResponseBody'
  153 + type: object
  154 + properties:
  155 + column_setting:
  156 + $ref: '#/definitions/column_settingResponseBody'
  157 + ColumnSettingResetColumnResponseBody:
  158 + title: 'Mediatype identifier: ColumnSettingResetColumnResponseBody'
  159 + type: object
  160 + properties:
  161 + column_setting:
  162 + $ref: '#/definitions/column_settingResponseBody'
  163 + ColumnSettingUpdateColumnSettingResponseBody:
  164 + title: 'Mediatype identifier: ColumnSettingUpdateColumnSettingResponseBody'
  165 + type: object
  166 + properties:
  167 + column_setting:
  168 + $ref: '#/definitions/column_settingResponseBody'
  169 + column_settingResponseBody:
  170 + title: column_settingResponseBody
  171 + type: object
  172 + properties:
  173 + columnSettingId:
  174 + type: integer
  175 + description: 栏目设置id
  176 + required:
  177 + - columnSettingId
  178 + companyId:
  179 + type: integer
  180 + description: 栏目设置关联用户公司id
  181 + required:
  182 + - companyId
  183 + createdAt:
  184 + type: string
  185 + description: 栏目设置创建时间
  186 + required:
  187 + - createdAt
  188 + description:
  189 + type: string
  190 + description: 栏目设置描述
  191 + required:
  192 + - description
  193 + key:
  194 + type: string
  195 + description: 栏目设置模块名称
  196 + required:
  197 + - key
  198 + uid:
  199 + type: integer
  200 + description: 栏目设置关联用户uid
  201 + required:
  202 + - uid
  203 + updatedAt:
  204 + type: string
  205 + description: 栏目设置更新时间
  206 + required:
  207 + - updatedAt
  208 + userName:
  209 + type: string
  210 + description: 栏目设置关联用户名称
  211 + required:
  212 + - userName
  213 + value:
  214 + type: array
  215 + items:
  216 + $ref: '#/definitions/columnResponseBody'
  217 + description: 栏目数组
  218 + description: 栏目设置
  219 + columnResponseBody:
  220 + title: columnResponseBody
  221 + type: object
  222 + properties:
  223 + columnId:
  224 + type: string
  225 + description: 列标记
  226 + required:
  227 + - columnId
  228 + paramCn:
  229 + type: string
  230 + description: 列标记中文
  231 + required:
  232 + - paramCn
  233 + paramFix:
  234 + type: integer
  235 + description: 列标记是否固定,1:固定,2:不固定
  236 + required:
  237 + - paramFix
  238 + description: 栏目项
  1 +version: v1
  2 +kind: HttpApi
  3 +metadata:
  4 + service: column_setting
  5 + path: /column-settings
  6 + endpoints:
  7 + - method: createColumnSetting
  8 + route:
  9 + post: /
  10 + - method: updateColumnSetting
  11 + route:
  12 + put: /{columnSettingId}
  13 + - method: getColumnSetting
  14 + route:
  15 + get: /{columnSettingId}
  16 + - method: removeColumnSetting
  17 + route:
  18 + delete: /{columnSettingId}
  19 + - method: resetColumn
  20 + route:
  21 + post: /
  22 + - method: listColumnSetting
  23 + route:
  24 + get: /
  25 + params:
  26 + - name: offset
  27 + - name: limit
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: columnId
  5 + description: 列标记
  6 + type:
  7 + primitive: string
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: paramCn
  5 + description: 列标记中文
  6 + type:
  7 + primitive: string
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: paramFix
  5 + description: 列标记是否固定,1:固定,2:不固定
  6 + type:
  7 + primitive: int
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: columnSettingId
  5 + description: 栏目设置id
  6 + type:
  7 + primitive: int64
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: companyId
  5 + description: 栏目设置关联用户公司id
  6 + type:
  7 + primitive: int32
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: createdAt
  5 + description: 栏目设置创建时间
  6 + type:
  7 + primitive: datetime
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: description
  5 + description: 栏目设置描述
  6 + type:
  7 + primitive: string
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: invalidValue
  5 + description: 无效的栏目数组
  6 + type:
  7 + array: column
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: key
  5 + description: 栏目设置模块名称
  6 + type:
  7 + primitive: string
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: uid
  5 + description: 栏目设置关联用户uid
  6 + type:
  7 + primitive: int64
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: updatedAt
  5 + description: 栏目设置更新时间
  6 + type:
  7 + primitive: datetime
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: userName
  5 + description: 栏目设置关联用户名称
  6 + type:
  7 + primitive: string
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: value
  5 + description: 栏目值对象数组
  6 + type:
  7 + array: column
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: count
  5 + description: 匹配数目
  6 + type:
  7 + primitive: int64
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: limit
  5 + description: 查询限制
  6 + type:
  7 + primitive: int
  1 +version: v1
  2 +kind: Attribute
  3 +metadata:
  4 + name: offset
  5 + description: 查询偏离量
  6 + type:
  7 + primitive: int
  1 +version: v1
  2 +kind: Project
  3 +metadata:
  4 + name: project
  5 + description: 合伙人后管平台
  6 + version: 0.0.1
  7 + repository: gitlab.fjmaimaimai.com/mmm-go/partnermg
  8 + contact:
  9 + name: SteveChan
  10 + email: steve.d.chan@qq.com
  1 +version: v1
  2 +kind: Schema
  3 +metadata:
  4 + name: column
  5 + description: 栏目项
  6 + attributes:
  7 + - ref: columnId
  8 + required: true
  9 + - ref: paramCn
  10 + required: true
  11 + - ref: paramFix
  12 + required: true
  1 +version: v1
  2 +kind: Schema
  3 +metadata:
  4 + name: column_setting
  5 + description: 栏目设置
  6 + attributes:
  7 + - ref: columnSettingId
  8 + required: true
  9 + - ref: companyId
  10 + required: true
  11 + - ref: createdAt
  12 + required: true
  13 + - ref: description
  14 + required: true
  15 + - ref: key
  16 + required: true
  17 + - ref: uid
  18 + required: true
  19 + - ref: updatedAt
  20 + required: true
  21 + - ref: userName
  22 + required: true
  23 + - name: value
  24 + description: 栏目数组
  25 + type:
  26 + array: column
  27 + - name: invalidValue
  28 + description: 无效栏目数组
  29 + type:
  30 + array: column
  1 +version: v1
  2 +kind: Method
  3 +metadata:
  4 + name: createColumnSetting
  5 + type: command
  6 + description: 创建栏目设置增删改查
  7 + payload:
  8 + - ref: description
  9 + required: true
  10 + - ref: userName
  11 + required: true
  12 + result:
  13 + - name: column_setting
  14 + type:
  15 + schema: column_setting
  1 +version: v1
  2 +kind: Method
  3 +metadata:
  4 + name: getColumnSetting
  5 + type: query
  6 + description: 返回栏目设置增删改查
  7 + payload:
  8 + - ref: columnSettingId
  9 + required: true
  10 + result:
  11 + - name: column_setting
  12 + type:
  13 + schema: column_setting
  1 +version: v1
  2 +kind: Method
  3 +metadata:
  4 + name: listColumnSetting
  5 + type: query
  6 + description: 返回栏目设置增删改查列表
  7 + payload:
  8 + - ref: offset
  9 + required: true
  10 + - ref: limit
  11 + required: true
  12 + result:
  13 + - ref: count
  14 + required: true
  15 + - name: column_setting
  16 + type:
  17 + schema: column_setting
  1 +version: v1
  2 +kind: Method
  3 +metadata:
  4 + name: removeColumnSetting
  5 + type: command
  6 + description: 移除栏目设置增删改查
  7 + payload:
  8 + - ref: columnSettingId
  9 + required: true
  10 + result:
  11 + - name: column_setting
  12 + type:
  13 + schema: column_setting
  1 +version: v1
  2 +kind: Method
  3 +metadata:
  4 + name: resetColumn
  5 + type: command
  6 + description: 重置栏目设置
  7 + result:
  8 + - name: column_setting
  9 + type:
  10 + schema: column_setting
  1 +version: v1
  2 +kind: Method
  3 +metadata:
  4 + name: updateColumnSetting
  5 + type: command
  6 + description: 更新栏目设置增删改查
  7 + payload:
  8 + - ref: columnSettingId
  9 + required: true
  10 + result:
  11 + - name: column_setting
  12 + type:
  13 + schema: column_setting
  1 +version: v1
  2 +kind: Service
  3 +metadata:
  4 + name: column_setting
  5 + description: 栏目设置
@@ -13,17 +13,17 @@ require ( @@ -13,17 +13,17 @@ require (
13 github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072 // indirect 13 github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072 // indirect
14 github.com/fatih/structs v1.1.0 // indirect 14 github.com/fatih/structs v1.1.0 // indirect
15 github.com/gavv/httpexpect v2.0.0+incompatible 15 github.com/gavv/httpexpect v2.0.0+incompatible
  16 + github.com/go-pg/pg v8.0.6+incompatible
16 github.com/go-pg/pg/v10 v10.7.3 17 github.com/go-pg/pg/v10 v10.7.3
17 github.com/google/go-querystring v1.0.0 // indirect 18 github.com/google/go-querystring v1.0.0 // indirect
18 github.com/gorilla/websocket v1.4.2 // indirect 19 github.com/gorilla/websocket v1.4.2 // indirect
19 github.com/imkira/go-interpol v1.1.0 // indirect 20 github.com/imkira/go-interpol v1.1.0 // indirect
20 github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 // indirect 21 github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 // indirect
21 - github.com/linmadan/egglib-go v0.0.0-20191217144343-ca4539f95bf9 22 + github.com/linmadan/egglib-go v0.0.0-20201125083542-25358a549edb
22 github.com/mattn/go-colorable v0.1.6 // indirect 23 github.com/mattn/go-colorable v0.1.6 // indirect
23 github.com/moul/http2curl v1.0.0 // indirect 24 github.com/moul/http2curl v1.0.0 // indirect
24 github.com/onsi/ginkgo v1.14.2 25 github.com/onsi/ginkgo v1.14.2
25 github.com/onsi/gomega v1.10.3 26 github.com/onsi/gomega v1.10.3
26 - github.com/sclevine/agouti v3.0.0+incompatible // indirect  
27 github.com/sergi/go-diff v1.1.0 // indirect 27 github.com/sergi/go-diff v1.1.0 // indirect
28 github.com/shopspring/decimal v1.2.0 28 github.com/shopspring/decimal v1.2.0
29 github.com/smartystreets/goconvey v1.6.4 // indirect 29 github.com/smartystreets/goconvey v1.6.4 // indirect
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  6 +
  7 + "github.com/astaxie/beego/validation"
  8 +)
  9 +
  10 +type CreateColumnSettingCommand struct {
  11 + // 公司id
  12 + CompanyId int `json:"companyId"`
  13 + // 用户uid
  14 + Uid int64 `json:"uid"`
  15 + // 栏目设置描述
  16 + Description string `json:"description"`
  17 + // 栏目设置关联用户名称
  18 + UserName string `json:"userName"`
  19 + // 默认栏目设置
  20 + Value []domain.Column `json:"value"`
  21 + // 无效栏目设置爱
  22 + InvalidValue []domain.Column `json:"invalidValue"`
  23 + // 模块键值
  24 + Key string `json:"key"`
  25 +}
  26 +
  27 +//func (createColumnSettingCommand *CreateColumnSettingCommand) Valid(validation *validation.Validation) {
  28 +// _ = validation.SetError("CustomValid", "未实现的自定义认证")
  29 +//}
  30 +
  31 +func (createColumnSettingCommand *CreateColumnSettingCommand) ValidateCommand() error {
  32 + valid := validation.Validation{}
  33 + b, err := valid.Valid(createColumnSettingCommand)
  34 + if err != nil {
  35 + return err
  36 + }
  37 + if !b {
  38 + for _, validErr := range valid.Errors {
  39 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  40 + }
  41 + }
  42 + return nil
  43 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 +
  6 + "github.com/astaxie/beego/validation"
  7 +)
  8 +
  9 +type RemoveColumnSettingCommand struct {
  10 + // 栏目设置id
  11 + ColumnSettingId int64 `json:"columnSettingId"`
  12 + // 用户uid
  13 + Uid int64 `json:"uid"`
  14 + // 公司id
  15 + CompanyId int `json:"companyId"`
  16 +}
  17 +
  18 +//func (removeColumnSettingCommand *RemoveColumnSettingCommand) Valid(validation *validation.Validation) {
  19 +// validation.SetError("CustomValid", "未实现的自定义认证")
  20 +//}
  21 +
  22 +func (removeColumnSettingCommand *RemoveColumnSettingCommand) ValidateCommand() error {
  23 + valid := validation.Validation{}
  24 + b, err := valid.Valid(removeColumnSettingCommand)
  25 + if err != nil {
  26 + return err
  27 + }
  28 + if !b {
  29 + for _, validErr := range valid.Errors {
  30 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  31 + }
  32 + }
  33 + return nil
  34 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  6 +
  7 + "github.com/astaxie/beego/validation"
  8 +)
  9 +
  10 +type ResetColumnCommand struct {
  11 + // 公司id
  12 + CompanyId int `json:"companyId"`
  13 + // 用户uid
  14 + Uid int64 `json:"uid"`
  15 + // 默认栏目
  16 + Value []domain.Column `json:"value"`
  17 + // 默认无效栏目
  18 + InvalidValue []domain.Column `json:"invalidValue"`
  19 +}
  20 +
  21 +//func (resetColumnCommand *ResetColumnCommand) Valid(validation *validation.Validation) {
  22 +// _ = validation.SetError("CustomValid", "未实现的自定义认证")
  23 +//}
  24 +
  25 +func (resetColumnCommand *ResetColumnCommand) ValidateCommand() error {
  26 + valid := validation.Validation{}
  27 + b, err := valid.Valid(resetColumnCommand)
  28 + if err != nil {
  29 + return err
  30 + }
  31 + if !b {
  32 + for _, validErr := range valid.Errors {
  33 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  34 + }
  35 + }
  36 + return nil
  37 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  6 +
  7 + "github.com/astaxie/beego/validation"
  8 +)
  9 +
  10 +type UpdateColumnSettingCommand struct {
  11 + // 栏目设置id
  12 + ColumnSettingId int64 `json:"columnSettingId"`
  13 + // 公司id
  14 + CompanyId int `json:"companyId"`
  15 + // 用户uid
  16 + Uid int64 `json:"uid"`
  17 + // 选中的栏目
  18 + Selected []domain.Column `json:"selected"`
  19 + // 未选中的栏目
  20 + UnSelected []domain.Column `json:"unselected"`
  21 + // 栏目设置
  22 + Value []domain.Column `json:"value"`
  23 + // 无效栏目设置
  24 + InvalidValue []domain.Column `json:"invalidValue"`
  25 + // 栏目
  26 + OrderBaseColumns OrderBaseColumns `json:"orderBaseColumns"`
  27 +}
  28 +
  29 +type OrderBaseColumns struct {
  30 + // 选中的栏目
  31 + Selected []domain.Column `json:"selected"`
  32 + // 未选中的栏目
  33 + UnSelected []domain.Column `json:"unselected"`
  34 +}
  35 +
  36 +//func (updateColumnSettingCommand *UpdateColumnSettingCommand) Valid(validation *validation.Validation) {
  37 +// _ = validation.SetError("CustomValid", "未实现的自定义认证")
  38 +//}
  39 +
  40 +func (updateColumnSettingCommand *UpdateColumnSettingCommand) ValidateCommand() error {
  41 + valid := validation.Validation{}
  42 + b, err := valid.Valid(updateColumnSettingCommand)
  43 + if err != nil {
  44 + return err
  45 + }
  46 + if !b {
  47 + for _, validErr := range valid.Errors {
  48 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  49 + }
  50 + }
  51 + return nil
  52 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 +
  6 + "github.com/astaxie/beego/validation"
  7 +)
  8 +
  9 +type GetColumnSettingQuery struct {
  10 + // 栏目设置id
  11 + ColumnSettingId int64 `json:"columnSettingId"`
  12 + // 公司id
  13 + CompanyId int `json:"companyId"`
  14 + // 用户uid
  15 + Uid int64 `json:"uid"`
  16 +}
  17 +
  18 +//func (getColumnSettingQuery *GetColumnSettingQuery) Valid(validation *validation.Validation) {
  19 +// _ = validation.SetError("CustomValid", "未实现的自定义认证")
  20 +//}
  21 +
  22 +func (getColumnSettingQuery *GetColumnSettingQuery) ValidateQuery() error {
  23 + valid := validation.Validation{}
  24 + b, err := valid.Valid(getColumnSettingQuery)
  25 + if err != nil {
  26 + return err
  27 + }
  28 + if !b {
  29 + for _, validErr := range valid.Errors {
  30 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  31 + }
  32 + }
  33 + return nil
  34 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 +
  6 + "github.com/astaxie/beego/validation"
  7 +)
  8 +
  9 +type ListColumnSettingQuery struct {
  10 + // 查询偏离量
  11 + Offset int `json:"offset" valid:"Required"`
  12 + // 查询限制
  13 + Limit int `json:"limit" valid:"Required"`
  14 +}
  15 +
  16 +//func (listColumnSettingQuery *ListColumnSettingQuery) Valid(validation *validation.Validation) {
  17 +// _ = validation.SetError("CustomValid", "未实现的自定义认证")
  18 +//}
  19 +
  20 +func (listColumnSettingQuery *ListColumnSettingQuery) ValidateQuery() error {
  21 + valid := validation.Validation{}
  22 + b, err := valid.Valid(listColumnSettingQuery)
  23 + if err != nil {
  24 + return err
  25 + }
  26 + if !b {
  27 + for _, validErr := range valid.Errors {
  28 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  29 + }
  30 + }
  31 + return nil
  32 +}
  1 +package service
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/linmadan/egglib-go/core/application"
  6 + "github.com/linmadan/egglib-go/utils/tool_funs"
  7 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/columnSetting/command"
  8 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/columnSetting/query"
  9 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/factory"
  10 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/constant"
  11 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  12 + "strconv"
  13 + "time"
  14 +)
  15 +
  16 +// 栏目设置
  17 +type ColumnSettingService struct {
  18 +}
  19 +
  20 +/**
  21 + * @Author SteveChan
  22 + * @Description //新增用户时,初始化栏目设置
  23 + * @Date 23:13 2021/1/26
  24 + * @Param
  25 + * @return
  26 + **/
  27 +func (columnSettingService *ColumnSettingService) CreateColumnSetting(createColumnSettingCommand *command.CreateColumnSettingCommand) (interface{}, error) {
  28 + if err := createColumnSettingCommand.ValidateCommand(); err != nil {
  29 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  30 + }
  31 + transactionContext, err := factory.CreateTransactionContext(nil)
  32 + if err != nil {
  33 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  34 + }
  35 + if errStart := transactionContext.StartTransaction(); errStart != nil {
  36 + return nil, application.ThrowError(application.TRANSACTION_ERROR, errStart.Error())
  37 + }
  38 + defer func() {
  39 + _ = transactionContext.RollbackTransaction()
  40 + }()
  41 + newColumnSetting := &domain.ColumnSetting{
  42 + Description: createColumnSettingCommand.Description,
  43 + UserName: createColumnSettingCommand.UserName,
  44 + CompanyId: createColumnSettingCommand.CompanyId,
  45 + Uid: createColumnSettingCommand.Uid,
  46 + Key: constant.ORDER_BASE, // 订单栏目模块名称
  47 + Value: domain.DefaultColumns, // 栏目值数组,创建用户时使用默认栏目设置
  48 + InvalidValue: domain.DefaultInvalidColumns, // 初始化无效栏目数组
  49 + CreatedAt: time.Now(),
  50 + UpdatedAt: time.Now(),
  51 + }
  52 + var columnSettingRepository domain.ColumnSettingRepository
  53 + if value, errFac := factory.CreateColumnSettingRepository(map[string]interface{}{
  54 + "transactionContext": transactionContext,
  55 + }); errFac != nil {
  56 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, errFac.Error())
  57 + } else {
  58 + columnSettingRepository = value
  59 + }
  60 + if columnSettingSaved, errSaved := columnSettingRepository.Save(newColumnSetting); errSaved != nil {
  61 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, errSaved.Error())
  62 + } else {
  63 + if errCommit := transactionContext.CommitTransaction(); errCommit != nil {
  64 + return nil, application.ThrowError(application.TRANSACTION_ERROR, errCommit.Error())
  65 + }
  66 + return columnSettingSaved, nil
  67 + }
  68 +}
  69 +
  70 +/**
  71 + * @Author SteveChan
  72 + * @Description // 返回栏目设置
  73 + * @Date 23:14 2021/1/26
  74 + * @Param
  75 + * @return
  76 + **/
  77 +func (columnSettingService *ColumnSettingService) GetColumnSetting(getColumnSettingQuery *query.GetColumnSettingQuery) (interface{}, error) {
  78 + if err := getColumnSettingQuery.ValidateQuery(); err != nil {
  79 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  80 + }
  81 + transactionContext, err := factory.CreateTransactionContext(nil)
  82 + if err != nil {
  83 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  84 + }
  85 + if err := transactionContext.StartTransaction(); err != nil {
  86 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  87 + }
  88 + defer func() {
  89 + _ = transactionContext.RollbackTransaction()
  90 + }()
  91 + var columnSettingRepository domain.ColumnSettingRepository
  92 + if value, errFact := factory.CreateColumnSettingRepository(map[string]interface{}{
  93 + "transactionContext": transactionContext,
  94 + }); errFact != nil {
  95 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, errFact.Error())
  96 + } else {
  97 + columnSettingRepository = value
  98 + }
  99 + columnSettingFound, err := columnSettingRepository.FindOne(map[string]interface{}{"uid": getColumnSettingQuery.Uid, "companyId": getColumnSettingQuery.CompanyId})
  100 + if err != nil {
  101 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  102 + }
  103 + if columnSettingFound == nil {
  104 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(getColumnSettingQuery.Uid, 10)))
  105 + } else {
  106 + if errCommit := transactionContext.CommitTransaction(); errCommit != nil {
  107 + return nil, application.ThrowError(application.TRANSACTION_ERROR, errCommit.Error())
  108 + }
  109 +
  110 + // 数据mapper
  111 + orderBaseColumns := map[string]interface{}{
  112 + "orderBaseColumns": map[string]interface{}{
  113 + "selected": columnSettingFound.Value,
  114 + "unselected": columnSettingFound.InvalidValue,
  115 + },
  116 + }
  117 +
  118 + return orderBaseColumns, nil
  119 + }
  120 +}
  121 +
  122 +// 返回栏目设置增删改查列表
  123 +func (columnSettingService *ColumnSettingService) ListColumnSetting(listColumnSettingQuery *query.ListColumnSettingQuery) (interface{}, error) {
  124 + if err := listColumnSettingQuery.ValidateQuery(); err != nil {
  125 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  126 + }
  127 + transactionContext, err := factory.CreateTransactionContext(nil)
  128 + if err != nil {
  129 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  130 + }
  131 + if err := transactionContext.StartTransaction(); err != nil {
  132 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  133 + }
  134 + defer func() {
  135 + transactionContext.RollbackTransaction()
  136 + }()
  137 + var columnSettingRepository domain.ColumnSettingRepository
  138 + if value, err := factory.CreateColumnSettingRepository(map[string]interface{}{
  139 + "transactionContext": transactionContext,
  140 + }); err != nil {
  141 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  142 + } else {
  143 + columnSettingRepository = value
  144 + }
  145 + if count, columnSettings, err := columnSettingRepository.Find(domain.ColumnSettingFindQuery{
  146 + Offset: listColumnSettingQuery.Offset,
  147 + Limit: listColumnSettingQuery.Limit,
  148 + }); err != nil {
  149 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  150 + } else {
  151 + if err := transactionContext.CommitTransaction(); err != nil {
  152 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  153 + }
  154 + return map[string]interface{}{
  155 + "count": count,
  156 + "column_settings": columnSettings,
  157 + }, nil
  158 + }
  159 +}
  160 +
  161 +/**
  162 + * @Author SteveChan
  163 + * @Description // 删除用户时移除栏目设置
  164 + * @Date 23:14 2021/1/26
  165 + * @Param
  166 + * @return
  167 + **/
  168 +func (columnSettingService *ColumnSettingService) RemoveColumnSetting(removeColumnSettingCommand *command.RemoveColumnSettingCommand) (interface{}, error) {
  169 + if err := removeColumnSettingCommand.ValidateCommand(); err != nil {
  170 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  171 + }
  172 + transactionContext, err := factory.CreateTransactionContext(nil)
  173 + if err != nil {
  174 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  175 + }
  176 + if errSt := transactionContext.StartTransaction(); errSt != nil {
  177 + return nil, application.ThrowError(application.TRANSACTION_ERROR, errSt.Error())
  178 + }
  179 + defer func() {
  180 + _ = transactionContext.RollbackTransaction()
  181 + }()
  182 + var columnSettingRepository domain.ColumnSettingRepository
  183 + if value, errFac := factory.CreateColumnSettingRepository(map[string]interface{}{
  184 + "transactionContext": transactionContext,
  185 + }); errFac != nil {
  186 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, errFac.Error())
  187 + } else {
  188 + columnSettingRepository = value
  189 + }
  190 + columnSettingFound, err := columnSettingRepository.FindOne(map[string]interface{}{"uid": removeColumnSettingCommand.Uid, "companyId": removeColumnSettingCommand.CompanyId})
  191 + if err != nil {
  192 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  193 + }
  194 + if columnSettingFound == nil {
  195 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(removeColumnSettingCommand.Uid, 10)))
  196 + }
  197 + if columnSettingRemoved, _, errRm := columnSettingRepository.Remove(columnSettingFound, nil); errRm != nil {
  198 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, errRm.Error())
  199 + } else {
  200 + if errTr := transactionContext.CommitTransaction(); errTr != nil {
  201 + return nil, application.ThrowError(application.TRANSACTION_ERROR, errRm.Error())
  202 + }
  203 +
  204 + // 数据mapper
  205 + orderBaseColumns := map[string]interface{}{
  206 + "orderBaseColumns": map[string]interface{}{
  207 + "selected": columnSettingRemoved.Value,
  208 + "unselected": columnSettingRemoved.InvalidValue,
  209 + },
  210 + }
  211 +
  212 + return orderBaseColumns, nil
  213 + }
  214 +}
  215 +
  216 +/**
  217 + * @Author SteveChan
  218 + * @Description // 重置栏目设置
  219 + * @Date 23:15 2021/1/26
  220 + * @Param
  221 + * @return
  222 + **/
  223 +func (columnSettingService *ColumnSettingService) ResetColumn(resetColumnCommand *command.ResetColumnCommand) (interface{}, error) {
  224 + if err := resetColumnCommand.ValidateCommand(); err != nil {
  225 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  226 + }
  227 + transactionContext, err := factory.CreateTransactionContext(nil)
  228 + if err != nil {
  229 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  230 + }
  231 + if errStart := transactionContext.StartTransaction(); errStart != nil {
  232 + return nil, application.ThrowError(application.TRANSACTION_ERROR, errStart.Error())
  233 + }
  234 + defer func() {
  235 + _ = transactionContext.RollbackTransaction()
  236 + }()
  237 +
  238 + var columnSettingRepository domain.ColumnSettingRepository
  239 + if value, errFact := factory.CreateColumnSettingRepository(map[string]interface{}{
  240 + "transactionContext": transactionContext,
  241 + }); errFact != nil {
  242 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, errFact.Error())
  243 + } else {
  244 + columnSettingRepository = value
  245 + }
  246 + columnSettingFound, err := columnSettingRepository.FindOne(map[string]interface{}{"uid": resetColumnCommand.Uid, "companyId": resetColumnCommand.CompanyId})
  247 + if err != nil {
  248 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  249 + }
  250 + if columnSettingFound == nil {
  251 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(resetColumnCommand.Uid, 10)))
  252 + }
  253 + if errUpdated := columnSettingFound.Update(tool_funs.SimpleStructToMap(resetColumnCommand)); errUpdated != nil {
  254 + return nil, application.ThrowError(application.BUSINESS_ERROR, errUpdated.Error())
  255 + }
  256 + if columnSettingSaved, errSaved := columnSettingRepository.Save(columnSettingFound); errSaved != nil {
  257 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, errSaved.Error())
  258 + } else {
  259 + if errCommit := transactionContext.CommitTransaction(); errCommit != nil {
  260 + return nil, application.ThrowError(application.TRANSACTION_ERROR, errCommit.Error())
  261 + }
  262 +
  263 + // 数据mapper
  264 + orderBaseColumns := map[string]interface{}{
  265 + "orderBaseColumns": map[string]interface{}{
  266 + "selected": columnSettingSaved.Value,
  267 + "unselected": columnSettingSaved.InvalidValue,
  268 + },
  269 + }
  270 +
  271 + return orderBaseColumns, nil
  272 + }
  273 +}
  274 +
  275 +/**
  276 + * @Author SteveChan
  277 + * @Description // 更新栏目设置
  278 + * @Date 23:15 2021/1/26
  279 + * @Param
  280 + * @return
  281 + **/
  282 +func (columnSettingService *ColumnSettingService) UpdateColumnSetting(updateColumnSettingCommand *command.UpdateColumnSettingCommand) (interface{}, error) {
  283 + if err := updateColumnSettingCommand.ValidateCommand(); err != nil {
  284 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  285 + }
  286 + transactionContext, err := factory.CreateTransactionContext(nil)
  287 + if err != nil {
  288 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  289 + }
  290 + if errStart := transactionContext.StartTransaction(); errStart != nil {
  291 + return nil, application.ThrowError(application.TRANSACTION_ERROR, errStart.Error())
  292 + }
  293 + defer func() {
  294 + _ = transactionContext.RollbackTransaction()
  295 + }()
  296 + var columnSettingRepository domain.ColumnSettingRepository
  297 + if value, errFact := factory.CreateColumnSettingRepository(map[string]interface{}{
  298 + "transactionContext": transactionContext,
  299 + }); errFact != nil {
  300 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, errFact.Error())
  301 + } else {
  302 + columnSettingRepository = value
  303 + }
  304 + updateColumnSettingCommand.Value = updateColumnSettingCommand.Selected
  305 + updateColumnSettingCommand.InvalidValue = updateColumnSettingCommand.UnSelected
  306 + columnSetting, err := columnSettingRepository.FindOne(map[string]interface{}{"uid": updateColumnSettingCommand.Uid, "companyId": updateColumnSettingCommand.CompanyId})
  307 + if err != nil {
  308 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  309 + }
  310 + if columnSetting == nil {
  311 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(updateColumnSettingCommand.Uid, 10)))
  312 + }
  313 + if errUpdated := columnSetting.Update(tool_funs.SimpleStructToMap(updateColumnSettingCommand)); errUpdated != nil {
  314 + return nil, application.ThrowError(application.BUSINESS_ERROR, errUpdated.Error())
  315 + }
  316 + if columnSettingSaved, errSaved := columnSettingRepository.Save(columnSetting); errSaved != nil {
  317 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, errSaved.Error())
  318 + } else {
  319 + if errCommit := transactionContext.CommitTransaction(); errCommit != nil {
  320 + return nil, application.ThrowError(application.TRANSACTION_ERROR, errCommit.Error())
  321 + }
  322 +
  323 + // 数据mapper
  324 + orderBaseColumns := map[string]interface{}{
  325 + "orderBaseColumns": map[string]interface{}{
  326 + "selected": columnSettingSaved.Value,
  327 + "unselected": columnSettingSaved.InvalidValue,
  328 + },
  329 + }
  330 +
  331 + return orderBaseColumns, nil
  332 + }
  333 +}
  334 +
  335 +func NewColumnSettingService(options map[string]interface{}) *ColumnSettingService {
  336 + newColumnSettingService := &ColumnSettingService{}
  337 + return newColumnSettingService
  338 +}
@@ -104,3 +104,11 @@ func CreateOrderLogRepository(options map[string]interface{}) (domain.OrderLogRe @@ -104,3 +104,11 @@ func CreateOrderLogRepository(options map[string]interface{}) (domain.OrderLogRe
104 } 104 }
105 return repository.NewOrderLogRepository(transactionContext) 105 return repository.NewOrderLogRepository(transactionContext)
106 } 106 }
  107 +
  108 +func CreateColumnSettingRepository(options map[string]interface{}) (domain.ColumnSettingRepository, error) {
  109 + var transactionContext *transaction.TransactionContext
  110 + if value, ok := options["transactionContext"]; ok {
  111 + transactionContext = value.(*transaction.TransactionContext)
  112 + }
  113 + return repository.NewColumnSettingRepository(transactionContext)
  114 +}
1 package command 1 package command
2 2
3 -import "errors" 3 +import (
  4 + "errors"
  5 + "time"
  6 +)
4 7
5 //创建订单 8 //创建订单
6 type CreateOrderCommand struct { 9 type CreateOrderCommand struct {
@@ -32,6 +35,8 @@ type CreateOrderCommand struct { @@ -32,6 +35,8 @@ type CreateOrderCommand struct {
32 Code string `json:"code"` 35 Code string `json:"code"`
33 //合伙人类型名称-错误信息返回 36 //合伙人类型名称-错误信息返回
34 PartnerCategoryName string `json:"partnerCategoryName"` 37 PartnerCategoryName string `json:"partnerCategoryName"`
  38 + //销售日期
  39 + SaleDate time.Time `json:"saleDate"`
35 } 40 }
36 41
37 func (postData *CreateOrderCommand) Valid() error { 42 func (postData *CreateOrderCommand) Valid() error {
1 package command 1 package command
2 2
  3 +import "time"
  4 +
3 //UpdateOrderPurposeCommand 更新订单单 5 //UpdateOrderPurposeCommand 更新订单单
4 type UpdateOrderCommand struct { 6 type UpdateOrderCommand struct {
5 Id int64 `json:"id"` 7 Id int64 `json:"id"`
@@ -21,6 +23,8 @@ type UpdateOrderCommand struct { @@ -21,6 +23,8 @@ type UpdateOrderCommand struct {
21 Goods []OrderGoodData `json:"goods"` 23 Goods []OrderGoodData `json:"goods"`
22 //公司id 24 //公司id
23 CompanyId int64 `json:"companyId"` 25 CompanyId int64 `json:"companyId"`
24 - // 合伙人类型 26 + //合伙人类型
25 PartnerCategory int64 `json:"partner_category"` 27 PartnerCategory int64 `json:"partner_category"`
  28 + //销售日期
  29 + SaleDate time.Time `json:"saleDate"`
26 } 30 }
@@ -8,7 +8,7 @@ package query @@ -8,7 +8,7 @@ package query
8 8
9 /** 9 /**
10 * @Author SteveChan 10 * @Author SteveChan
11 - * @Description //TODO 查询合伙人id 11 + * @Description // 查询合伙人id
12 * @Date 23:18 2021/1/6 12 * @Date 23:18 2021/1/6
13 **/ 13 **/
14 type GetPartnerIdQuery struct { 14 type GetPartnerIdQuery struct {
@@ -8,7 +8,7 @@ package query @@ -8,7 +8,7 @@ package query
8 8
9 /** 9 /**
10 * @Author SteveChan 10 * @Author SteveChan
11 - * @Description //TODO 查询产品id 11 + * @Description //查询产品id
12 * @Date 23:18 2021/1/6 12 * @Date 23:18 2021/1/6
13 **/ 13 **/
14 type GetProductIdQuery struct { 14 type GetProductIdQuery struct {
@@ -16,10 +16,14 @@ type ListOrderBaseQuery struct { @@ -16,10 +16,14 @@ type ListOrderBaseQuery struct {
16 DeliveryCode string `json:"deliveryCode"` 16 DeliveryCode string `json:"deliveryCode"`
17 //公司id 17 //公司id
18 CompanyId int64 `json:"companyId"` 18 CompanyId int64 `json:"companyId"`
  19 + //用户uid
  20 + Uid int64 `json:"uid"`
19 //订单类型 21 //订单类型
20 OrderType int `json:"orderType"` 22 OrderType int `json:"orderType"`
21 //合伙人分类 23 //合伙人分类
22 PartnerCategory int `json:"partnerCategory"` 24 PartnerCategory int `json:"partnerCategory"`
  25 + //合伙人类型名称
  26 + PartnerCategoryName string `json:"partnerCategoryName"`
23 //更新时间开始 27 //更新时间开始
24 UpdateTimeBegin string `json:"updateTimeBegin"` 28 UpdateTimeBegin string `json:"updateTimeBegin"`
25 //更新时间截止 29 //更新时间截止
@@ -28,4 +32,8 @@ type ListOrderBaseQuery struct { @@ -28,4 +32,8 @@ type ListOrderBaseQuery struct {
28 CreateTimeBegin string `json:"createTimeBegin"` 32 CreateTimeBegin string `json:"createTimeBegin"`
29 //创建时间截止 33 //创建时间截止
30 CreateTimeEnd string `json:"createTimeEnd"` 34 CreateTimeEnd string `json:"createTimeEnd"`
  35 + //销售时间开始
  36 + SaleDateBegin string `json:"saleDateBegin"`
  37 + //销售时间结束
  38 + SaleDateEnd string `json:"sateDateEnd"`
31 } 39 }
  1 +/**
  2 + @author: stevechan
  3 + @date: 2021/2/2
  4 + @note:
  5 +**/
  6 +
  7 +package query
  8 +
  9 +type ListOrderBonusForExcelQuery struct {
  10 + Type string `json:"type"` // 操作类型 ORDER_BASE
  11 + Where BonusWhere `json:"where"` // 导出条件
  12 + IDS []int `json:"ids"` // 勾选id
  13 +}
  14 +
  15 +type BonusWhere struct {
  16 + SearchWord string `json:"searchWord"`
  17 + OrderType int `json:"orderType"`
  18 + PageSize int `json:"pageSize"`
  19 + PageNumber int `json:"pageNumber"`
  20 + PartnerCategoryId int `json:"partnerCategoryId"`
  21 + CreateTime []string `json:"createTime"`
  22 +}
  1 +/**
  2 + @author: stevechan
  3 + @date: 2021/1/27
  4 + @note:
  5 +**/
  6 +
  7 +package query
  8 +
  9 +type ListOrderForExcelQuery struct {
  10 + Type string `json:"type"` // 操作类型 ORDER_BASE
  11 + Where Where `json:"where"` // 导出条件
  12 + IDS []int `json:"ids"` // 勾选id
  13 +}
  14 +
  15 +type Where struct {
  16 + PartnerName string `json:"partnerName"` // 合伙人姓名
  17 + OrderCode string `json:"orderCode"` // 订单号
  18 + DeliveryCode string `json:"deliveryCode"` // 发货单号
  19 + PartnerCategory int `json:"partnerCategory"` // 合伙人类型
  20 + PartnerCategoryName string `json:"partnerCategoryName"` // 合伙人类型名称
  21 + UpdateTime []string `json:"updateTime"` // 更新时间
  22 + CreateTime []string `json:"createTime"` // 创建时间
  23 + SaleDate []string `json:"saleDate"` // 销售日期
  24 +}
@@ -2,6 +2,9 @@ package service @@ -2,6 +2,9 @@ package service
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "github.com/linmadan/egglib-go/core/application"
  6 + "strconv"
  7 + "time"
5 8
6 "github.com/astaxie/beego/logs" 9 "github.com/astaxie/beego/logs"
7 10
@@ -62,9 +65,11 @@ func (service OrderInfoService) PageListOrderBase(listOrderQuery query.ListOrder @@ -62,9 +65,11 @@ func (service OrderInfoService) PageListOrderBase(listOrderQuery query.ListOrder
62 listOrderQuery.PartnerName, // 合伙人姓名 65 listOrderQuery.PartnerName, // 合伙人姓名
63 listOrderQuery.OrderCode, // 订单号 66 listOrderQuery.OrderCode, // 订单号
64 listOrderQuery.DeliveryCode, // 发货单号 67 listOrderQuery.DeliveryCode, // 发货单号
65 - [2]string{listOrderQuery.UpdateTimeBegin, listOrderQuery.UpdateTimeEnd},  
66 - [2]string{listOrderQuery.CreateTimeBegin, listOrderQuery.CreateTimeEnd}, 68 + [2]string{listOrderQuery.UpdateTimeBegin, listOrderQuery.UpdateTimeEnd}, // 订单创建时间
  69 + [2]string{listOrderQuery.CreateTimeBegin, listOrderQuery.CreateTimeEnd}, // 订单更新时间
  70 + [2]string{listOrderQuery.SaleDateBegin, listOrderQuery.SaleDateEnd}, // 销售日期
67 listOrderQuery.PartnerCategory, 71 listOrderQuery.PartnerCategory,
  72 + listOrderQuery.PartnerCategoryName,
68 listOrderQuery.Limit, listOrderQuery.Offset, 73 listOrderQuery.Limit, listOrderQuery.Offset,
69 ) 74 )
70 if err != nil { 75 if err != nil {
@@ -94,6 +99,7 @@ func (service OrderInfoService) PageListOrderBase(listOrderQuery query.ListOrder @@ -94,6 +99,7 @@ func (service OrderInfoService) PageListOrderBase(listOrderQuery query.ListOrder
94 "index": listIndex, 99 "index": listIndex,
95 "createTime": orders[i].CreateTime.Local().Format("2006-01-02 15:04:05"), 100 "createTime": orders[i].CreateTime.Local().Format("2006-01-02 15:04:05"),
96 "updateTime": orders[i].UpdateTime.Local().Format("2006-01-02 15:04:05"), 101 "updateTime": orders[i].UpdateTime.Local().Format("2006-01-02 15:04:05"),
  102 + "saleDate": orders[i].SaleDate.Local().Format("2006-01-02 15:04:05"),
97 "buyer": orders[i].Buyer.BuyerName, 103 "buyer": orders[i].Buyer.BuyerName,
98 "id": fmt.Sprint(orders[i].Id), 104 "id": fmt.Sprint(orders[i].Id),
99 "orderId": orders[i].OrderCode, 105 "orderId": orders[i].OrderCode,
@@ -188,7 +194,13 @@ func (service OrderInfoService) GetOrderDetail(getOrderQuery query.GetOrderQuery @@ -188,7 +194,13 @@ func (service OrderInfoService) GetOrderDetail(getOrderQuery query.GetOrderQuery
188 return order, nil 194 return order, nil
189 } 195 }
190 196
191 -//CreateNewOrder 创建订单 197 +/**
  198 + * @Author SteveChan
  199 + * @Description // 创建订单,增加销售日期
  200 + * @Date 11:57 2021/1/26
  201 + * @Param
  202 + * @return
  203 + **/
192 func (service OrderInfoService) CreateNewOrder(cmd command.CreateOrderCommand) (*domain.OrderBase, error) { 204 func (service OrderInfoService) CreateNewOrder(cmd command.CreateOrderCommand) (*domain.OrderBase, error) {
193 var ( 205 var (
194 transactionContext, _ = factory.CreateTransactionContext(nil) 206 transactionContext, _ = factory.CreateTransactionContext(nil)
@@ -255,7 +267,8 @@ func (service OrderInfoService) CreateNewOrder(cmd command.CreateOrderCommand) ( @@ -255,7 +267,8 @@ func (service OrderInfoService) CreateNewOrder(cmd command.CreateOrderCommand) (
255 goodMap[goodname] = 1 267 goodMap[goodname] = 1
256 } 268 }
257 newOrder := &domain.OrderBase{ 269 newOrder := &domain.OrderBase{
258 - OrderType: cmd.OrderType, OrderCode: cmd.OrderCode, 270 + OrderType: cmd.OrderType,
  271 + OrderCode: cmd.OrderCode,
259 DeliveryCode: cmd.DeliveryCode, 272 DeliveryCode: cmd.DeliveryCode,
260 Buyer: domain.Buyer{ 273 Buyer: domain.Buyer{
261 BuyerName: cmd.BuyerName, 274 BuyerName: cmd.BuyerName,
@@ -263,6 +276,7 @@ func (service OrderInfoService) CreateNewOrder(cmd command.CreateOrderCommand) ( @@ -263,6 +276,7 @@ func (service OrderInfoService) CreateNewOrder(cmd command.CreateOrderCommand) (
263 RegionInfo: domain.RegionInfo{ 276 RegionInfo: domain.RegionInfo{
264 RegionName: cmd.OrderRegion, 277 RegionName: cmd.OrderRegion,
265 }, 278 },
  279 + SaleDate: cmd.SaleDate,
266 PartnerId: cmd.PartnerId, 280 PartnerId: cmd.PartnerId,
267 PartnerInfo: partnerData.Partner, 281 PartnerInfo: partnerData.Partner,
268 SalesmanBonusPercent: cmd.SalesmanBonusPercent, 282 SalesmanBonusPercent: cmd.SalesmanBonusPercent,
@@ -277,15 +291,15 @@ func (service OrderInfoService) CreateNewOrder(cmd command.CreateOrderCommand) ( @@ -277,15 +291,15 @@ func (service OrderInfoService) CreateNewOrder(cmd command.CreateOrderCommand) (
277 var cmdPartnerCategoryOk bool 291 var cmdPartnerCategoryOk bool
278 for _, v := range partnerData.PartnerCategoryInfos { 292 for _, v := range partnerData.PartnerCategoryInfos {
279 if v.Id == cmd.PartnerCategory { 293 if v.Id == cmd.PartnerCategory {
280 - _, categorys, err := categoryRepository.Find(domain.PartnerCategoryFindQuery{ 294 + _, categories, err := categoryRepository.Find(domain.PartnerCategoryFindQuery{
281 Ids: []int64{v.Id}, 295 Ids: []int64{v.Id},
282 }) 296 })
283 if err != nil { 297 if err != nil {
284 e := fmt.Sprintf("获取合伙人分类数据失败:%s", err) 298 e := fmt.Sprintf("获取合伙人分类数据失败:%s", err)
285 return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e) 299 return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e)
286 } 300 }
287 - if len(categorys) > 0 {  
288 - newOrder.PartnerCategory = categorys[0] 301 + if len(categories) > 0 {
  302 + newOrder.PartnerCategory = categories[0]
289 cmdPartnerCategoryOk = true 303 cmdPartnerCategoryOk = true
290 } 304 }
291 break 305 break
@@ -393,6 +407,28 @@ func (service OrderInfoService) UpdateOrderData(cmd command.UpdateOrderCommand) @@ -393,6 +407,28 @@ func (service OrderInfoService) UpdateOrderData(cmd command.UpdateOrderCommand)
393 transactionContext.RollbackTransaction() 407 transactionContext.RollbackTransaction()
394 }() 408 }()
395 409
  410 + // 获取合伙人类型
  411 + var PartnerCategoryRepository domain.PartnerCategoryRepository
  412 + if PartnerCategoryRepository, err = factory.CreatePartnerCategoryRepository(map[string]interface{}{
  413 + "transactionContext": transactionContext,
  414 + }); err != nil {
  415 + return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  416 + }
  417 + var partnerCategories []domain.PartnerCategory
  418 + _, partnerCategories, err = PartnerCategoryRepository.Find(domain.PartnerCategoryFindQuery{
  419 + Ids: []int64{},
  420 + })
  421 + if err != nil {
  422 + return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, fmt.Sprintf("检索合伙人类型数据失败"))
  423 + }
  424 + partnerCategoryMap := map[int64]interface{}{}
  425 + if len(partnerCategories) > 0 {
  426 + for _, partnerCategory := range partnerCategories {
  427 + partnerCategoryMap[partnerCategory.Id] = partnerCategory.Name
  428 + }
  429 + }
  430 +
  431 + // 获取合伙人数据
396 var PartnerInfoRepository domain.PartnerInfoRepository 432 var PartnerInfoRepository domain.PartnerInfoRepository
397 if PartnerInfoRepository, err = factory.CreatePartnerInfoRepository(map[string]interface{}{ 433 if PartnerInfoRepository, err = factory.CreatePartnerInfoRepository(map[string]interface{}{
398 "transactionContext": transactionContext, 434 "transactionContext": transactionContext,
@@ -500,6 +536,7 @@ func (service OrderInfoService) UpdateOrderData(cmd command.UpdateOrderCommand) @@ -500,6 +536,7 @@ func (service OrderInfoService) UpdateOrderData(cmd command.UpdateOrderCommand)
500 var cmdPartnerCategoryOk bool 536 var cmdPartnerCategoryOk bool
501 for _, v := range partnerData.PartnerCategoryInfos { 537 for _, v := range partnerData.PartnerCategoryInfos {
502 if v.Id == cmd.PartnerCategory { 538 if v.Id == cmd.PartnerCategory {
  539 + v.Name = partnerCategoryMap[v.Id].(string)
503 oldOrderData.PartnerCategory = v 540 oldOrderData.PartnerCategory = v
504 cmdPartnerCategoryOk = true 541 cmdPartnerCategoryOk = true
505 } 542 }
@@ -511,6 +548,7 @@ func (service OrderInfoService) UpdateOrderData(cmd command.UpdateOrderCommand) @@ -511,6 +548,7 @@ func (service OrderInfoService) UpdateOrderData(cmd command.UpdateOrderCommand)
511 oldOrderData.DeliveryCode = cmd.DeliveryCode 548 oldOrderData.DeliveryCode = cmd.DeliveryCode
512 oldOrderData.Buyer.BuyerName = cmd.BuyerName 549 oldOrderData.Buyer.BuyerName = cmd.BuyerName
513 oldOrderData.RegionInfo.RegionName = cmd.OrderRegion 550 oldOrderData.RegionInfo.RegionName = cmd.OrderRegion
  551 + oldOrderData.SaleDate = cmd.SaleDate
514 oldOrderData.PartnerId = cmd.PartnerId 552 oldOrderData.PartnerId = cmd.PartnerId
515 oldOrderData.PartnerInfo = partnerData.Partner 553 oldOrderData.PartnerInfo = partnerData.Partner
516 oldOrderData.SalesmanBonusPercent = cmd.SalesmanBonusPercent 554 oldOrderData.SalesmanBonusPercent = cmd.SalesmanBonusPercent
@@ -519,7 +557,6 @@ func (service OrderInfoService) UpdateOrderData(cmd command.UpdateOrderCommand) @@ -519,7 +557,6 @@ func (service OrderInfoService) UpdateOrderData(cmd command.UpdateOrderCommand)
519 if err != nil { 557 if err != nil {
520 return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, fmt.Sprintf("核算订单中合计的数值失败:%s", err)) 558 return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, fmt.Sprintf("核算订单中合计的数值失败:%s", err))
521 } 559 }
522 -  
523 err = orderBaseRepository.Save(oldOrderData) 560 err = orderBaseRepository.Save(oldOrderData)
524 if err != nil { 561 if err != nil {
525 return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, fmt.Sprintf("保存订单数据失败:%s", err)) 562 return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, fmt.Sprintf("保存订单数据失败:%s", err))
@@ -883,7 +920,7 @@ func (service OrderInfoService) ListOrderBonusForExcel(listOrderQuery query.List @@ -883,7 +920,7 @@ func (service OrderInfoService) ListOrderBonusForExcel(listOrderQuery query.List
883 920
884 /** 921 /**
885 * @Author SteveChan 922 * @Author SteveChan
886 - * @Description // 导出订单数据 923 + * @Description //根据栏目设置,导出订单数据
887 * @Date 22:05 2021/1/10 924 * @Date 22:05 2021/1/10
888 * @Param 925 * @Param
889 * @return 926 * @return
@@ -897,7 +934,7 @@ func (service OrderInfoService) ListOrderForExcel(listOrderQuery query.ListOrder @@ -897,7 +934,7 @@ func (service OrderInfoService) ListOrderForExcel(listOrderQuery query.ListOrder
897 return nil, nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error()) 934 return nil, nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error())
898 } 935 }
899 defer func() { 936 defer func() {
900 - transactionContext.RollbackTransaction() 937 + _ = transactionContext.RollbackTransaction()
901 }() 938 }()
902 939
903 var ( 940 var (
@@ -916,61 +953,105 @@ func (service OrderInfoService) ListOrderForExcel(listOrderQuery query.ListOrder @@ -916,61 +953,105 @@ func (service OrderInfoService) ListOrderForExcel(listOrderQuery query.ListOrder
916 listOrderQuery.DeliveryCode, // 发货单号 953 listOrderQuery.DeliveryCode, // 发货单号
917 [2]string{listOrderQuery.UpdateTimeBegin, listOrderQuery.UpdateTimeEnd}, 954 [2]string{listOrderQuery.UpdateTimeBegin, listOrderQuery.UpdateTimeEnd},
918 [2]string{listOrderQuery.CreateTimeBegin, listOrderQuery.CreateTimeEnd}, 955 [2]string{listOrderQuery.CreateTimeBegin, listOrderQuery.CreateTimeEnd},
  956 + [2]string{listOrderQuery.SaleDateBegin, listOrderQuery.SaleDateEnd},
919 listOrderQuery.PartnerCategory, 957 listOrderQuery.PartnerCategory,
  958 + listOrderQuery.PartnerCategoryName,
920 ) 959 )
921 if err != nil { 960 if err != nil {
922 return nil, nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 961 return nil, nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
923 } 962 }
  963 +
  964 + // 获取栏目设置
  965 + var columnSettingRepository domain.ColumnSettingRepository
  966 + if value, errFact := factory.CreateColumnSettingRepository(map[string]interface{}{
  967 + "transactionContext": transactionContext,
  968 + }); errFact != nil {
  969 + return nil, nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  970 + } else {
  971 + columnSettingRepository = value
  972 + }
  973 + columnSettingFound, err := columnSettingRepository.FindOne(map[string]interface{}{"uid": listOrderQuery.Uid, "companyId": listOrderQuery.CompanyId})
  974 + if err != nil {
  975 + return nil, nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  976 + }
  977 + if columnSettingFound == nil {
  978 + return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(listOrderQuery.Uid, 10)))
  979 + }
  980 +
924 err = transactionContext.CommitTransaction() 981 err = transactionContext.CommitTransaction()
925 if err != nil { 982 if err != nil {
926 return nil, nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 983 return nil, nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
927 } 984 }
928 var resultMaps []map[string]string 985 var resultMaps []map[string]string
929 for i := range ordersData { 986 for i := range ordersData {
  987 + t, _ := time.ParseInLocation("2006-01-02 15:04:05", ordersData[i].SaleDate, time.Local)
930 m := map[string]string{ 988 m := map[string]string{
931 - "num": fmt.Sprint(i + 1),  
932 - "order_code": ordersData[i].OrderCode,  
933 - "delivery_code": ordersData[i].DeliveryCode,  
934 - "partner_name": ordersData[i].PartnerName,  
935 - "update_time": ordersData[i].UpdateTime,  
936 - "create_time": ordersData[i].CreateTime,  
937 - "plan_order_count": fmt.Sprint(ordersData[i].PlanOrderCount),  
938 - "use_order_count": "",  
939 - "region_name": fmt.Sprint(ordersData[i].RegionName),  
940 - "plan_order_amount": fmt.Sprintf("%10.2f", ordersData[i].PlanOrderAmount),  
941 - "use_order_amount": "",  
942 - "partner_category": ordersData[i].PartnerCategory,  
943 - "buyer_name": ordersData[i].BuyerName, 989 + //"num": fmt.Sprint(i + 1),
  990 + //"order_code": ordersData[i].OrderCode,
  991 + //"delivery_code": ordersData[i].DeliveryCode,
  992 + //"partner_name": ordersData[i].PartnerName,
  993 + //"update_time": ordersData[i].UpdateTime,
  994 + //"create_time": ordersData[i].CreateTime,
  995 + //"sale_date": ordersData[i].SaleDate,
  996 + //"plan_order_count": fmt.Sprint(ordersData[i].PlanOrderCount),
  997 + //"use_order_count": "",
  998 + //"region_name": fmt.Sprint(ordersData[i].RegionName),
  999 + //"plan_order_amount": fmt.Sprintf("%10.2f", ordersData[i].PlanOrderAmount),
  1000 + //"use_order_amount": "",
  1001 + //"partner_category": ordersData[i].PartnerCategory,
  1002 + //"buyer_name": ordersData[i].BuyerName,
  1003 + "index": fmt.Sprint(i + 1),
  1004 + "orderId": ordersData[i].OrderCode,
  1005 + "shipmentsId": ordersData[i].DeliveryCode,
  1006 + "partner": ordersData[i].PartnerName,
  1007 + "updateTime": ordersData[i].UpdateTime,
  1008 + "createTime": ordersData[i].CreateTime,
  1009 + "saleDate": t.Format("2006-01-02"),
  1010 + "orderNum": fmt.Sprint(ordersData[i].PlanOrderCount),
  1011 + "quantityControl": "",
  1012 + "orderDist": fmt.Sprint(ordersData[i].RegionName),
  1013 + "orderPrice": fmt.Sprintf("%10.2f", ordersData[i].PlanOrderAmount),
  1014 + "priceControl": "",
  1015 + "partnerCategory": ordersData[i].PartnerCategory,
  1016 + "buyer": ordersData[i].BuyerName,
944 } 1017 }
945 if ordersData[i].UseOrderCount >= 0 { 1018 if ordersData[i].UseOrderCount >= 0 {
946 - m["use_order_count"] = fmt.Sprint(ordersData[i].UseOrderCount) 1019 + m["quantityControl"] = fmt.Sprint(ordersData[i].UseOrderCount)
947 } 1020 }
948 if ordersData[i].UseOrderAmount >= 0 { 1021 if ordersData[i].UseOrderAmount >= 0 {
949 - m["use_order_amount"] = fmt.Sprintf("%10.2f", ordersData[i].UseOrderAmount) 1022 + m["priceControl"] = fmt.Sprintf("%10.2f", ordersData[i].UseOrderAmount)
950 } 1023 }
951 resultMaps = append(resultMaps, m) 1024 resultMaps = append(resultMaps, m)
952 } 1025 }
953 - column := [][2]string{  
954 - [2]string{"num", "序号"},  
955 - [2]string{"order_code", "订单号"},  
956 - [2]string{"delivery_code", "发货单号"},  
957 - [2]string{"create_time", "创建时间"},  
958 - [2]string{"update_time", "更新时间"},  
959 - [2]string{"plan_order_count", "订单数量"},  
960 - [2]string{"use_order_count", "数量调整"},  
961 - [2]string{"plan_order_amount", "订单金额"},  
962 - [2]string{"use_order_amount", "金额调整"},  
963 - [2]string{"region_name", "订单区域"},  
964 - [2]string{"partner_category", "合伙人类型"},  
965 - [2]string{"buyer_name", "客户"},  
966 - [2]string{"partner_name", "合伙人"}, 1026 +
  1027 + //column := [][2]string{
  1028 + // [2]string{"num", "序号"},
  1029 + // [2]string{"order_code", "订单号"},
  1030 + // [2]string{"delivery_code", "发货单号"},
  1031 + // [2]string{"create_time", "创建时间"},
  1032 + // [2]string{"update_time", "更新时间"},
  1033 + // [2]string{"sale_date", "销售时间"},
  1034 + // [2]string{"plan_order_count", "订单数量"},
  1035 + // [2]string{"use_order_count", "数量调整"},
  1036 + // [2]string{"plan_order_amount", "订单金额"},
  1037 + // [2]string{"use_order_amount", "金额调整"},
  1038 + // [2]string{"region_name", "订单区域"},
  1039 + // [2]string{"partner_category", "合伙人类型"},
  1040 + // [2]string{"buyer_name", "客户"},
  1041 + // [2]string{"partner_name", "合伙人"},
  1042 + //}
  1043 +
  1044 + var column [][2]string
  1045 + for _, columnValue := range columnSettingFound.Value {
  1046 + column = append(column, [2]string{columnValue.Id, columnValue.ParamCn})
967 } 1047 }
  1048 +
968 return resultMaps, column, nil 1049 return resultMaps, column, nil
969 } 1050 }
970 1051
971 /** 1052 /**
972 * @Author SteveChan 1053 * @Author SteveChan
973 - * @Description //TODO 批量导入创建订单 1054 + * @Description // 批量导入创建订单,增加销售时间
974 * @Date 11:00 2021/1/7 1055 * @Date 11:00 2021/1/7
975 * @Param 1056 * @Param
976 * @return 1057 * @return
@@ -1122,6 +1203,7 @@ func (service OrderInfoService) CreateNewOrderByImport(createOrderCommands []*co @@ -1122,6 +1203,7 @@ func (service OrderInfoService) CreateNewOrderByImport(createOrderCommands []*co
1122 PartnerInfo: partnerData.Partner, 1203 PartnerInfo: partnerData.Partner,
1123 SalesmanBonusPercent: cmd.SalesmanBonusPercent, 1204 SalesmanBonusPercent: cmd.SalesmanBonusPercent,
1124 CompanyId: cmd.CompanyId, 1205 CompanyId: cmd.CompanyId,
  1206 + SaleDate: cmd.SaleDate,
1125 } 1207 }
1126 1208
1127 // 批量校验合伙人分类数据 1209 // 批量校验合伙人分类数据
@@ -2,6 +2,7 @@ package service @@ -2,6 +2,7 @@ package service
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/utils"
5 6
6 "github.com/linmadan/egglib-go/core/application" 7 "github.com/linmadan/egglib-go/core/application"
7 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/factory" 8 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/factory"
@@ -238,7 +239,7 @@ func (PartnerInfoService *PartnerInfoService) GetPartnerInfo(q query.GetPartnerI @@ -238,7 +239,7 @@ func (PartnerInfoService *PartnerInfoService) GetPartnerInfo(q query.GetPartnerI
238 239
239 /** 240 /**
240 * @Author SteveChan 241 * @Author SteveChan
241 - * @Description // 更新合伙人 242 + * @Description //TODO 更新合伙人,判断合伙类型是否有业务数据
242 * @Date 00:07 2020/12/30 243 * @Date 00:07 2020/12/30
243 * @Param 244 * @Param
244 * @return 245 * @return
@@ -261,7 +262,9 @@ func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(cmd *command.Upd @@ -261,7 +262,9 @@ func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(cmd *command.Upd
261 var ( 262 var (
262 partnerInfoRepository domain.PartnerInfoRepository 263 partnerInfoRepository domain.PartnerInfoRepository
263 categoryRepository domain.PartnerCategoryRepository 264 categoryRepository domain.PartnerCategoryRepository
  265 + orderBaseRepository domain.OrderBaseRepository
264 categories []domain.PartnerCategory 266 categories []domain.PartnerCategory
  267 + orders []domain.OrderBase
265 partnerInfoDao *dao.PartnerInfoDao 268 partnerInfoDao *dao.PartnerInfoDao
266 ) 269 )
267 270
@@ -283,6 +286,12 @@ func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(cmd *command.Upd @@ -283,6 +286,12 @@ func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(cmd *command.Upd
283 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 286 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
284 } 287 }
285 288
  289 + if orderBaseRepository, err = factory.CreateOrderBaseRepository(map[string]interface{}{
  290 + "transactionContext": transactionContext,
  291 + }); err != nil {
  292 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  293 + }
  294 +
286 // 获取合伙人类型 295 // 获取合伙人类型
287 var categoryMap = make(map[int64]string) 296 var categoryMap = make(map[int64]string)
288 _, categories, err = categoryRepository.Find(domain.PartnerCategoryFindQuery{ 297 _, categories, err = categoryRepository.Find(domain.PartnerCategoryFindQuery{
@@ -349,6 +358,34 @@ func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(cmd *command.Upd @@ -349,6 +358,34 @@ func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(cmd *command.Upd
349 return lib.ThrowError(lib.BUSINESS_ERROR, "异常操作") 358 return lib.ThrowError(lib.BUSINESS_ERROR, "异常操作")
350 } 359 }
351 360
  361 + partnerCategoryInfos := partnerInfo.PartnerCategoryInfos
  362 +
  363 + //判断相应合伙类型下是否有订单数据
  364 + var notInPartnerCategoryInfos []int64
  365 + var categoryIdsQuery []int64
  366 + var categoryIdsCmd []int64
  367 + for _, partnerCategory := range partnerCategoryInfos {
  368 + categoryIdsQuery = append(categoryIdsQuery, partnerCategory.Id)
  369 + }
  370 + for _, category := range categories {
  371 + categoryIdsCmd = append(categoryIdsCmd, category.Id)
  372 + }
  373 + for _, v := range categoryIdsQuery {
  374 + if !utils.IsContainInt(categoryIdsCmd, v) {
  375 + notInPartnerCategoryInfos = append(notInPartnerCategoryInfos, v)
  376 + }
  377 + }
  378 + if len(notInPartnerCategoryInfos) > 0 {
  379 + orders, _, err = orderBaseRepository.Find(domain.OrderBaseFindQuery{
  380 + PartnerId: cmd.Id,
  381 + CompanyId: cmd.CompanyId,
  382 + PartnerCategoryIds: notInPartnerCategoryInfos,
  383 + })
  384 + if len(orders) > 0 {
  385 + return lib.ThrowError(lib.BUSINESS_ERROR, "该合伙类型下有业务数据,不可删除!")
  386 + }
  387 + }
  388 +
352 partnerInfo.Partner.PartnerName = cmd.PartnerName 389 partnerInfo.Partner.PartnerName = cmd.PartnerName
353 partnerInfo.Salesman = cmd.Salesman 390 partnerInfo.Salesman = cmd.Salesman
354 partnerInfo.Status = cmd.Status 391 partnerInfo.Status = cmd.Status
@@ -372,7 +409,7 @@ func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(cmd *command.Upd @@ -372,7 +409,7 @@ func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(cmd *command.Upd
372 // e := fmt.Sprintf("更新业务分红(partner_id=%d)数据失败:%s", partnerInfo.Partner.Id, err) 409 // e := fmt.Sprintf("更新业务分红(partner_id=%d)数据失败:%s", partnerInfo.Partner.Id, err)
373 // return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e) 410 // return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e)
374 // } 411 // }
375 - transactionContext.CommitTransaction() 412 + _ = transactionContext.CommitTransaction()
376 return 413 return
377 } 414 }
378 415
@@ -85,6 +85,13 @@ func (s SyncOrderService) SyncOrderFromBestshop(cmd command.CreateOrderFromBests @@ -85,6 +85,13 @@ func (s SyncOrderService) SyncOrderFromBestshop(cmd command.CreateOrderFromBests
85 return err 85 return err
86 } 86 }
87 87
  88 +/**
  89 + * @Author SteveChan
  90 + * @Description //同步小程序订单,增加销售时间
  91 + * @Date 23:53 2021/1/26
  92 + * @Param
  93 + * @return
  94 + **/
88 func (s SyncOrderService) CreateOrderFromBestshop(cmd command.CreateOrderFromBestshop) error { 95 func (s SyncOrderService) CreateOrderFromBestshop(cmd command.CreateOrderFromBestshop) error {
89 var ( 96 var (
90 transactionContext, _ = factory.CreateTransactionContext(nil) 97 transactionContext, _ = factory.CreateTransactionContext(nil)
@@ -258,6 +265,8 @@ func (s SyncOrderService) copyOrderBestshopToOrderBase(orderBestshop *domain.Ord @@ -258,6 +265,8 @@ func (s SyncOrderService) copyOrderBestshopToOrderBase(orderBestshop *domain.Ord
258 // 默认设定为事业合伙人订单 265 // 默认设定为事业合伙人订单
259 orderbase.PartnerCategory = domain.PartnerCategory{Id: 1, Name: "事业合伙人"} 266 orderbase.PartnerCategory = domain.PartnerCategory{Id: 1, Name: "事业合伙人"}
260 orderbase.Compute() 267 orderbase.Compute()
  268 + // 销售日期
  269 + //orderbase.SaleDate = orderBestshop.CreateTime
261 err = orderBaseRepository.Save(&orderbase) 270 err = orderBaseRepository.Save(&orderbase)
262 if err != nil { 271 if err != nil {
263 e := fmt.Sprintf("添加order_base数据失败%s", err) 272 e := fmt.Sprintf("添加order_base数据失败%s", err)
@@ -4,6 +4,7 @@ import ( @@ -4,6 +4,7 @@ import (
4 "encoding/json" 4 "encoding/json"
5 "errors" 5 "errors"
6 "fmt" 6 "fmt"
  7 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/constant"
7 "time" 8 "time"
8 9
9 "github.com/astaxie/beego/logs" 10 "github.com/astaxie/beego/logs"
@@ -101,6 +102,7 @@ func (service SyncCompanyService) addCompany(data CompanytData) error { @@ -101,6 +102,7 @@ func (service SyncCompanyService) addCompany(data CompanytData) error {
101 var ( 102 var (
102 companyRespository domain.CompanyRepository 103 companyRespository domain.CompanyRepository
103 userRespository domain.UsersRepository 104 userRespository domain.UsersRepository
  105 + columnSettingRepository domain.ColumnSettingRepository
104 ) 106 )
105 if companyRespository, err = factory.CreateCompanyRepository(map[string]interface{}{ 107 if companyRespository, err = factory.CreateCompanyRepository(map[string]interface{}{
106 "transactionContext": transactionContext, 108 "transactionContext": transactionContext,
@@ -112,6 +114,11 @@ func (service SyncCompanyService) addCompany(data CompanytData) error { @@ -112,6 +114,11 @@ func (service SyncCompanyService) addCompany(data CompanytData) error {
112 }); err != nil { 114 }); err != nil {
113 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 115 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
114 } 116 }
  117 + if columnSettingRepository, err = factory.CreateColumnSettingRepository(map[string]interface{}{
  118 + "transactionContext": transactionContext,
  119 + }); err != nil {
  120 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  121 + }
115 applets := []domain.CompanyApplets{} 122 applets := []domain.CompanyApplets{}
116 for _, v := range data.Company.Applets { 123 for _, v := range data.Company.Applets {
117 app := domain.CompanyApplets{ 124 app := domain.CompanyApplets{
@@ -163,6 +170,21 @@ func (service SyncCompanyService) addCompany(data CompanytData) error { @@ -163,6 +170,21 @@ func (service SyncCompanyService) addCompany(data CompanytData) error {
163 if err != nil { 170 if err != nil {
164 return fmt.Errorf("添加用户数据失败,%s", err) 171 return fmt.Errorf("添加用户数据失败,%s", err)
165 } 172 }
  173 + // 初始化栏目设置
  174 + newColumnSetting := &domain.ColumnSetting{
  175 + Description: "订单管理栏目设置",
  176 + UserName: data.User.Name,
  177 + CompanyId: int(data.User.CompanyId),
  178 + Uid: data.User.Id,
  179 + Key: constant.ORDER_BASE, // 订单栏目模块名称
  180 + Value: domain.DefaultColumns, // 栏目值数组,创建用户时使用默认栏目设置
  181 + InvalidValue: domain.DefaultInvalidColumns, // 初始化无效栏目数组
  182 + CreatedAt: time.Now(),
  183 + UpdatedAt: time.Now(),
  184 + }
  185 + if _, err = columnSettingRepository.Save(newColumnSetting); err != nil {
  186 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  187 + }
166 err = transactionContext.CommitTransaction() 188 err = transactionContext.CommitTransaction()
167 return nil 189 return nil
168 } 190 }
@@ -199,13 +221,22 @@ func (service SyncCompanyService) updateCompany(data CompanytData) error { @@ -199,13 +221,22 @@ func (service SyncCompanyService) updateCompany(data CompanytData) error {
199 oldCompany, err = companyRespository.FindOne(domain.CompanyFindOneOptions{ 221 oldCompany, err = companyRespository.FindOne(domain.CompanyFindOneOptions{
200 Id: data.Company.Id, 222 Id: data.Company.Id,
201 }) 223 })
  224 + if err != nil {
  225 + return fmt.Errorf("获取公司数据失败,%s", err)
  226 + }
202 _, oldCompanyAdmins, err = userRespository.Find(domain.UsersFindQuery{ 227 _, oldCompanyAdmins, err = userRespository.Find(domain.UsersFindQuery{
203 CompanyId: data.Company.Id, 228 CompanyId: data.Company.Id,
204 AdminType: domain.UserIsAdmin, 229 AdminType: domain.UserIsAdmin,
205 }) 230 })
  231 + if err != nil {
  232 + return fmt.Errorf("获取公司admin数据失败,%s", err)
  233 + }
206 newUser, err = userRespository.FindOne(domain.UsersFindOneQuery{ 234 newUser, err = userRespository.FindOne(domain.UsersFindOneQuery{
207 Id: data.User.Id, 235 Id: data.User.Id,
208 }) 236 })
  237 + if err != nil {
  238 + return fmt.Errorf("获取用户数据失败,%s,data.user.id=%d", err, data.User.Id)
  239 + }
209 applets := []domain.CompanyApplets{} 240 applets := []domain.CompanyApplets{}
210 for _, v := range data.Company.Applets { 241 for _, v := range data.Company.Applets {
211 app := domain.CompanyApplets{ 242 app := domain.CompanyApplets{
@@ -4,6 +4,7 @@ import ( @@ -4,6 +4,7 @@ import (
4 "encoding/json" 4 "encoding/json"
5 "errors" 5 "errors"
6 "fmt" 6 "fmt"
  7 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/constant"
7 "time" 8 "time"
8 9
9 "github.com/astaxie/beego/logs" 10 "github.com/astaxie/beego/logs"
@@ -85,6 +86,13 @@ func NewSyncEmployeeService(option map[string]interface{}) *SyncEmployeeService @@ -85,6 +86,13 @@ func NewSyncEmployeeService(option map[string]interface{}) *SyncEmployeeService
85 86
86 var _ SyncAction = (*SyncEmployeeService)(nil) 87 var _ SyncAction = (*SyncEmployeeService)(nil)
87 88
  89 +/**
  90 + * @Author SteveChan
  91 + * @Description //新增、导入用户初始化栏目设置
  92 + * @Date 23:54 2021/1/26
  93 + * @Param
  94 + * @return
  95 + **/
88 func (service SyncEmployeeService) DoAction(action string, byteData []byte) error { 96 func (service SyncEmployeeService) DoAction(action string, byteData []byte) error {
89 switch action { 97 switch action {
90 case "add": 98 case "add":
@@ -157,6 +165,13 @@ func (service SyncEmployeeService) DoAction(action string, byteData []byte) erro @@ -157,6 +165,13 @@ func (service SyncEmployeeService) DoAction(action string, byteData []byte) erro
157 } 165 }
158 } 166 }
159 167
  168 +/**
  169 + * @Author SteveChan
  170 + * @Description //TODO 初始化栏目设置
  171 + * @Date 00:07 2021/1/27
  172 + * @Param
  173 + * @return
  174 + **/
160 //addEmployeeData 添加用户 175 //addEmployeeData 添加用户
161 func (service SyncEmployeeService) addEmployeeData(datas []EmployeeData) error { 176 func (service SyncEmployeeService) addEmployeeData(datas []EmployeeData) error {
162 var ( 177 var (
@@ -167,7 +182,7 @@ func (service SyncEmployeeService) addEmployeeData(datas []EmployeeData) error { @@ -167,7 +182,7 @@ func (service SyncEmployeeService) addEmployeeData(datas []EmployeeData) error {
167 return err 182 return err
168 } 183 }
169 defer func() { 184 defer func() {
170 - transactionContext.RollbackTransaction() 185 + _ = transactionContext.RollbackTransaction()
171 }() 186 }()
172 var usersRepository domain.UsersRepository 187 var usersRepository domain.UsersRepository
173 if usersRepository, err = factory.CreateUsersRepository(map[string]interface{}{ 188 if usersRepository, err = factory.CreateUsersRepository(map[string]interface{}{
@@ -175,6 +190,12 @@ func (service SyncEmployeeService) addEmployeeData(datas []EmployeeData) error { @@ -175,6 +190,12 @@ func (service SyncEmployeeService) addEmployeeData(datas []EmployeeData) error {
175 }); err != nil { 190 }); err != nil {
176 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 191 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
177 } 192 }
  193 + var columnSettingRepository domain.ColumnSettingRepository
  194 + if columnSettingRepository, err = factory.CreateColumnSettingRepository(map[string]interface{}{
  195 + "transactionContext": transactionContext,
  196 + }); err != nil {
  197 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  198 + }
178 for i := range datas { 199 for i := range datas {
179 data := datas[i] 200 data := datas[i]
180 newUser := domain.Users{ 201 newUser := domain.Users{
@@ -202,7 +223,24 @@ func (service SyncEmployeeService) addEmployeeData(datas []EmployeeData) error { @@ -202,7 +223,24 @@ func (service SyncEmployeeService) addEmployeeData(datas []EmployeeData) error {
202 if err = usersRepository.Add(&newUser); err != nil { 223 if err = usersRepository.Add(&newUser); err != nil {
203 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 224 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
204 } 225 }
  226 +
  227 + // 初始化栏目设置
  228 + newColumnSetting := &domain.ColumnSetting{
  229 + Description: "订单管理栏目设置",
  230 + UserName: data.Name,
  231 + CompanyId: int(data.CompanyId),
  232 + Uid: data.Id,
  233 + Key: constant.ORDER_BASE, // 订单栏目模块名称
  234 + Value: domain.DefaultColumns, // 栏目值数组,创建用户时使用默认栏目设置
  235 + InvalidValue: domain.DefaultInvalidColumns, // 初始化无效栏目数组
  236 + CreatedAt: time.Now(),
  237 + UpdatedAt: time.Now(),
  238 + }
  239 + if _, err = columnSettingRepository.Save(newColumnSetting); err != nil {
  240 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  241 + }
205 } 242 }
  243 +
206 err = transactionContext.CommitTransaction() 244 err = transactionContext.CommitTransaction()
207 return err 245 return err
208 } 246 }
@@ -225,15 +263,68 @@ func (service SyncEmployeeService) updateEmployeeData(datas []EmployeeData) erro @@ -225,15 +263,68 @@ func (service SyncEmployeeService) updateEmployeeData(datas []EmployeeData) erro
225 }); err != nil { 263 }); err != nil {
226 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 264 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
227 } 265 }
  266 + var columnSettingRepository domain.ColumnSettingRepository
  267 + if columnSettingRepository, err = factory.CreateColumnSettingRepository(map[string]interface{}{
  268 + "transactionContext": transactionContext,
  269 + }); err != nil {
  270 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  271 + }
228 for i := range datas { 272 for i := range datas {
229 data := datas[i] 273 data := datas[i]
230 - var oldUser domain.Users  
231 - oldUser, err = usersRepository.FindOne(domain.UsersFindOneQuery{ 274 + var (
  275 + oldUser *domain.Users
  276 + userExist bool
  277 + )
  278 + oldUser, userExist, err = usersRepository.FindOneWithExist(domain.UsersFindOneQuery{
232 Id: data.Id, 279 Id: data.Id,
233 }) 280 })
234 if err != nil { 281 if err != nil {
235 return lib.ThrowError(lib.BUSINESS_ERROR, err.Error()) 282 return lib.ThrowError(lib.BUSINESS_ERROR, err.Error())
236 } 283 }
  284 + if !userExist {
  285 + //不存在可更新数据,执行添加数据的操作
  286 + newUser := domain.Users{
  287 + Id: data.Id,
  288 + CompanyId: data.CompanyId,
  289 + OpenId: data.OpenId,
  290 + Name: data.Name,
  291 + Sex: data.Sex,
  292 + JobNum: data.JobNum,
  293 + Phone: data.Phone,
  294 + PrivatePhone: data.PrivatePhone,
  295 + Email: data.Email,
  296 + ExtensionNum: data.ExtensionNum,
  297 + Workspace: data.WorkSpace,
  298 + Status: data.Status,
  299 + Avatar: data.Avatar,
  300 + Remarks: data.Remarks,
  301 + ChargeStatus: data.ChargeStatus,
  302 + Permission: []domain.AdminPermissionBase{}, //初始化权限
  303 + AccessPartners: []domain.Partner{}, //默认初始化
  304 + AdminType: data.AdminType,
  305 + IsSenior: 2,
  306 + }
  307 + newUser.EntryTime, _ = time.Parse("2006-01-02", data.EntryTime)
  308 + if err = usersRepository.Add(&newUser); err != nil {
  309 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  310 + }
  311 + // 添加用户数据时初始化栏目设置
  312 + newColumnSetting := &domain.ColumnSetting{
  313 + Description: "订单管理栏目设置",
  314 + UserName: data.Name,
  315 + CompanyId: int(data.CompanyId),
  316 + Uid: data.Id,
  317 + Key: constant.ORDER_BASE, // 订单栏目模块名称
  318 + Value: domain.DefaultColumns, // 栏目值数组,创建用户时使用默认栏目设置
  319 + InvalidValue: domain.DefaultInvalidColumns, // 初始化无效栏目数组
  320 + CreatedAt: time.Now(),
  321 + UpdatedAt: time.Now(),
  322 + }
  323 + if _, err = columnSettingRepository.Save(newColumnSetting); err != nil {
  324 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  325 + }
  326 + continue
  327 + } else {
237 entryTime, _ := time.Parse("2006-01-02", data.EntryTime) 328 entryTime, _ := time.Parse("2006-01-02", data.EntryTime)
238 _ = oldUser.Update(map[string]interface{}{ 329 _ = oldUser.Update(map[string]interface{}{
239 "CompanyId": data.CompanyId, 330 "CompanyId": data.CompanyId,
@@ -252,10 +343,11 @@ func (service SyncEmployeeService) updateEmployeeData(datas []EmployeeData) erro @@ -252,10 +343,11 @@ func (service SyncEmployeeService) updateEmployeeData(datas []EmployeeData) erro
252 "EntryTime": entryTime, 343 "EntryTime": entryTime,
253 "AdminType": data.AdminType, 344 "AdminType": data.AdminType,
254 }) 345 })
255 - if err = usersRepository.Edit(&oldUser); err != nil { 346 + if err = usersRepository.Edit(oldUser); err != nil {
256 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 347 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
257 } 348 }
258 } 349 }
  350 + }
259 err = transactionContext.CommitTransaction() 351 err = transactionContext.CommitTransaction()
260 return err 352 return err
261 } 353 }
@@ -270,7 +362,7 @@ func (service SyncEmployeeService) deleteEmployeeData(data DeleteUserData) error @@ -270,7 +362,7 @@ func (service SyncEmployeeService) deleteEmployeeData(data DeleteUserData) error
270 return err 362 return err
271 } 363 }
272 defer func() { 364 defer func() {
273 - transactionContext.RollbackTransaction() 365 + _ = transactionContext.RollbackTransaction()
274 }() 366 }()
275 var usersRepository domain.UsersRepository 367 var usersRepository domain.UsersRepository
276 if usersRepository, err = factory.CreateUsersRepository(map[string]interface{}{ 368 if usersRepository, err = factory.CreateUsersRepository(map[string]interface{}{
@@ -281,6 +373,32 @@ func (service SyncEmployeeService) deleteEmployeeData(data DeleteUserData) error @@ -281,6 +373,32 @@ func (service SyncEmployeeService) deleteEmployeeData(data DeleteUserData) error
281 if err = usersRepository.Remove(data.Ids); err != nil { 373 if err = usersRepository.Remove(data.Ids); err != nil {
282 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 374 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
283 } 375 }
  376 + // 删除栏目设置
  377 + var columnSettingRepository domain.ColumnSettingRepository
  378 + if value, errFac := factory.CreateColumnSettingRepository(map[string]interface{}{
  379 + "transactionContext": transactionContext,
  380 + }); errFac != nil {
  381 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  382 + } else {
  383 + columnSettingRepository = value
  384 + }
  385 + var ids []int64
  386 + for _, d := range data.Ids {
  387 + ids = append(ids, d)
  388 + }
  389 + _, columnSettingsFound, err := columnSettingRepository.Find(domain.ColumnSettingFindQuery{
  390 + Ids: ids,
  391 + CompanyId: int(data.CompanyId),
  392 + })
  393 + if err != nil {
  394 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  395 + }
  396 + if len(columnSettingsFound) == 0 {
  397 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  398 + }
  399 + if _, _, errRm := columnSettingRepository.Remove(nil, columnSettingsFound); errRm != nil {
  400 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, errRm.Error())
  401 + }
284 err = transactionContext.CommitTransaction() 402 err = transactionContext.CommitTransaction()
285 return err 403 return err
286 } 404 }
@@ -295,7 +413,7 @@ func (service SyncEmployeeService) updateUsersStatus(data ForbidAllowUserData) e @@ -295,7 +413,7 @@ func (service SyncEmployeeService) updateUsersStatus(data ForbidAllowUserData) e
295 return err 413 return err
296 } 414 }
297 defer func() { 415 defer func() {
298 - transactionContext.RollbackTransaction() 416 + _ = transactionContext.RollbackTransaction()
299 }() 417 }()
300 var uDao *dao.UsersDao 418 var uDao *dao.UsersDao
301 if uDao, err = factory.CreateUsersDao(map[string]interface{}{ 419 if uDao, err = factory.CreateUsersDao(map[string]interface{}{
@@ -6,6 +6,7 @@ import ( @@ -6,6 +6,7 @@ import (
6 6
7 //PlatformAction 企业平台数据同步服务 动作接口设定 7 //PlatformAction 企业平台数据同步服务 动作接口设定
8 type SyncAction interface { 8 type SyncAction interface {
  9 + //DoAction(执行的动作,数据)
9 DoAction(string, []byte) error 10 DoAction(string, []byte) error
10 } 11 }
11 12
@@ -8,6 +8,7 @@ var LOG_LEVEL = "debug" @@ -8,6 +8,7 @@ var LOG_LEVEL = "debug"
8 var LOG_File = "./logs/partnermg.log" 8 var LOG_File = "./logs/partnermg.log"
9 var IMPORT_EXCEL = "./download/订单数据模板.xlsx" 9 var IMPORT_EXCEL = "./download/订单数据模板.xlsx"
10 var Log_PREFIX = "[partnermg_dev]" 10 var Log_PREFIX = "[partnermg_dev]"
  11 +var APP_NAME = ""
11 var ( 12 var (
12 UCENTER_HOST = "https://suplus-ucenter-test.fjmaimaimai.com" //统一用户中心地址 13 UCENTER_HOST = "https://suplus-ucenter-test.fjmaimaimai.com" //统一用户中心地址
13 UCENTER_SECRET = "cykbjnfqgctn" 14 UCENTER_SECRET = "cykbjnfqgctn"
@@ -15,11 +16,15 @@ var ( @@ -15,11 +16,15 @@ var (
15 UCENTER_CHECK_ALT = "rsF0pL!6DwjBO735" 16 UCENTER_CHECK_ALT = "rsF0pL!6DwjBO735"
16 ) 17 )
17 18
  19 +// 栏目常量设置
  20 +var ORDER_BASE = "order_base" // 订单管理栏目
  21 +
18 var ( 22 var (
19 BUSINESS_ADMIN_HOST = "http://suplus-business-admin-test.fjmaimaimai.com" //企业平台的地址 23 BUSINESS_ADMIN_HOST = "http://suplus-business-admin-test.fjmaimaimai.com" //企业平台的地址
20 ) 24 )
21 25
22 -var EXCEL_COLUMN = 12 26 +// 导入excel文件列总数
  27 +var EXCEL_COLUMN = 13
23 28
24 func init() { 29 func init() {
25 if os.Getenv("LOG_LEVEL") != "" { 30 if os.Getenv("LOG_LEVEL") != "" {
@@ -43,4 +48,7 @@ func init() { @@ -43,4 +48,7 @@ func init() {
43 if os.Getenv("Log_PREFIX") != "" { 48 if os.Getenv("Log_PREFIX") != "" {
44 Log_PREFIX = os.Getenv("Log_PREFIX") 49 Log_PREFIX = os.Getenv("Log_PREFIX")
45 } 50 }
  51 + if os.Getenv("APP_NAME") != "" {
  52 + APP_NAME = os.Getenv("APP_NAME")
  53 + }
46 } 54 }
@@ -4,10 +4,10 @@ import "os" @@ -4,10 +4,10 @@ import "os"
4 4
5 var POSTGRESQL_DB_NAME = "partner_test" 5 var POSTGRESQL_DB_NAME = "partner_test"
6 var POSTGRESQL_USER = "postgres" 6 var POSTGRESQL_USER = "postgres"
7 -var POSTGRESQL_PASSWORD = "1993618jack" // eagle1010  
8 -var POSTGRESQL_HOST = "127.0.0.1" // 114.55.200.59  
9 -var POSTGRESQL_PORT = "5432" // 31543  
10 -var DISABLE_CREATE_TABLE = true 7 +var POSTGRESQL_PASSWORD = "1993618jack" // eagle1010 1993618jack
  8 +var POSTGRESQL_HOST = "127.0.0.1" // 114.55.200.59 127.0.0.1
  9 +var POSTGRESQL_PORT = "5432" // 31543 5432
  10 +var DISABLE_CREATE_TABLE = false
11 var DISABLE_SQL_GENERATE_PRINT = false 11 var DISABLE_SQL_GENERATE_PRINT = false
12 12
13 func init() { 13 func init() {
  1 +/**
  2 + @author: stevechan
  3 + @date: 2021/1/26
  4 + @note:
  5 +**/
  6 +
  7 +package domain
  8 +
  9 +// 栏目项值对象
  10 +type Column struct {
  11 + // 列标记
  12 + Id string `json:"id"`
  13 + // 列标记中文
  14 + ParamCn string `json:"paramCn"`
  15 + // 列标记是否固定,1:固定,2:不固定
  16 + ParamFix int `json:"paramFix"`
  17 +}
  1 +package domain
  2 +
  3 +import "time"
  4 +
  5 +// 默认选中栏目
  6 +var DefaultColumns = []Column{
  7 + {
  8 + Id: "index",
  9 + ParamCn: "序号",
  10 + ParamFix: 1,
  11 + }, {
  12 + Id: "orderId",
  13 + ParamCn: "订单号",
  14 + ParamFix: 1,
  15 + }, {
  16 + Id: "shipmentsId",
  17 + ParamCn: "发货单号",
  18 + ParamFix: 2,
  19 + }, {
  20 + Id: "saleDate",
  21 + ParamCn: "销售日期",
  22 + ParamFix: 2,
  23 + }, {
  24 + Id: "orderNum",
  25 + ParamCn: "订单数量",
  26 + ParamFix: 2,
  27 + }, {
  28 + Id: "quantityControl",
  29 + ParamCn: "数量调整",
  30 + ParamFix: 2,
  31 + }, {
  32 + Id: "orderPrice",
  33 + ParamCn: "订单金额",
  34 + ParamFix: 2,
  35 + }, {
  36 + Id: "priceControl",
  37 + ParamCn: "金额调整",
  38 + ParamFix: 2,
  39 + }, {
  40 + Id: "orderDist",
  41 + ParamCn: "订单区域",
  42 + ParamFix: 2,
  43 + }, {
  44 + Id: "partnerCategory",
  45 + ParamCn: "合伙人类型",
  46 + ParamFix: 2,
  47 + }, {
  48 + Id: "buyer",
  49 + ParamCn: "客户",
  50 + ParamFix: 2,
  51 + }, {
  52 + Id: "partner",
  53 + ParamCn: "合伙人",
  54 + ParamFix: 2,
  55 + },
  56 +}
  57 +
  58 +// 默认未选中栏目
  59 +var DefaultInvalidColumns = []Column{
  60 + {
  61 + Id: "updateTime",
  62 + ParamCn: "更新时间",
  63 + ParamFix: 2,
  64 + }, {
  65 + Id: "createTime",
  66 + ParamCn: "创建时间",
  67 + ParamFix: 2,
  68 + },
  69 +}
  70 +
  71 +// 栏目设置
  72 +type ColumnSetting struct {
  73 + // 栏目设置id
  74 + Id int64 `json:"id"`
  75 + // 栏目设置关联用户公司id
  76 + CompanyId int `json:"companyId"`
  77 + // 栏目设置创建时间
  78 + CreatedAt time.Time `json:"createdAt"`
  79 + // 栏目设置描述
  80 + Description string `json:"description"`
  81 + // 栏目设置模块名称
  82 + Key string `json:"key"`
  83 + // 栏目设置关联用户uid
  84 + Uid int64 `json:"uid"`
  85 + // 栏目设置更新时间
  86 + UpdatedAt time.Time `json:"updatedAt"`
  87 + // 栏目设置关联用户名称
  88 + UserName string `json:"userName"`
  89 + // 有效栏目数组
  90 + Value []Column `json:"value"`
  91 + // 无效栏目数组
  92 + InvalidValue []Column `json:"invalidValue"`
  93 +}
  94 +
  95 +type ColumnSettingFindQuery struct {
  96 + Ids []int64
  97 + Uid int64
  98 + CompanyId int
  99 + Offset int
  100 + Limit int
  101 +}
  102 +
  103 +type ColumnSettingRepository interface {
  104 + Save(columnSetting *ColumnSetting) (*ColumnSetting, error)
  105 + Remove(columnSetting *ColumnSetting, columnSettings []*ColumnSetting) (*ColumnSetting, []*ColumnSetting, error)
  106 + FindOne(queryOptions map[string]interface{}) (*ColumnSetting, error)
  107 + //Find(queryOptions map[string]interface{}) (int64, []*ColumnSetting, error)
  108 + Find(queryOptions ColumnSettingFindQuery) (int64, []*ColumnSetting, error)
  109 +}
  110 +
  111 +func (columnSetting *ColumnSetting) Identify() interface{} {
  112 + if columnSetting.Id == 0 {
  113 + return nil
  114 + }
  115 + return columnSetting.Id
  116 +}
  117 +
  118 +func (columnSetting *ColumnSetting) Update(data map[string]interface{}) error {
  119 + if companyId, ok := data["companyId"]; ok {
  120 + columnSetting.CompanyId = companyId.(int)
  121 + }
  122 + if createdAt, ok := data["createdAt"]; ok {
  123 + columnSetting.CreatedAt = createdAt.(time.Time)
  124 + }
  125 + if description, ok := data["description"]; ok {
  126 + columnSetting.Description = description.(string)
  127 + }
  128 + if key, ok := data["key"]; ok {
  129 + columnSetting.Key = key.(string)
  130 + }
  131 + if uid, ok := data["uid"]; ok {
  132 + columnSetting.Uid = uid.(int64)
  133 + }
  134 + if updatedAt, ok := data["updatedAt"]; ok {
  135 + columnSetting.UpdatedAt = updatedAt.(time.Time)
  136 + }
  137 + if userName, ok := data["userName"]; ok {
  138 + columnSetting.UserName = userName.(string)
  139 + }
  140 + if value, ok := data["value"]; ok {
  141 + columnSetting.Value = value.([]Column)
  142 + }
  143 + if invalidValue, ok := data["invalidValue"]; ok {
  144 + columnSetting.InvalidValue = invalidValue.([]Column)
  145 + }
  146 + return nil
  147 +}
@@ -91,6 +91,7 @@ type OrderBase struct { @@ -91,6 +91,7 @@ type OrderBase struct {
91 RegionInfo RegionInfo `json:"regionInfo"` 91 RegionInfo RegionInfo `json:"regionInfo"`
92 //订单对应的合伙人 92 //订单对应的合伙人
93 PartnerId int64 `json:"partnerId"` 93 PartnerId int64 `json:"partnerId"`
  94 + //合伙人信息
94 PartnerInfo Partner `json:"partnerInfo"` 95 PartnerInfo Partner `json:"partnerInfo"`
95 //业务员抽成比例 96 //业务员抽成比例
96 SalesmanBonusPercent float64 `json:"salesmanBonusPercent"` 97 SalesmanBonusPercent float64 `json:"salesmanBonusPercent"`
@@ -116,6 +117,8 @@ type OrderBase struct { @@ -116,6 +117,8 @@ type OrderBase struct {
116 Remark OrderBaseRemark `json:"remark"` 117 Remark OrderBaseRemark `json:"remark"`
117 //合伙人类型 118 //合伙人类型
118 PartnerCategory PartnerCategory `json:"partnerCategory"` 119 PartnerCategory PartnerCategory `json:"partnerCategory"`
  120 + //销售日期
  121 + SaleDate time.Time `json:"saleDate"`
119 } 122 }
120 123
121 //GetCurrentPartnerBonus 获取当前合伙人应收分红 124 //GetCurrentPartnerBonus 获取当前合伙人应收分红
@@ -312,6 +315,7 @@ type OrderBaseFindQuery struct { @@ -312,6 +315,7 @@ type OrderBaseFindQuery struct {
312 Limit int 315 Limit int
313 OrderType int 316 OrderType int
314 CompanyId int64 317 CompanyId int64
  318 + PartnerCategoryIds []int64
315 } 319 }
316 320
317 // 导入错误信息 321 // 导入错误信息
@@ -327,7 +331,7 @@ type GoodErrInfo struct { @@ -327,7 +331,7 @@ type GoodErrInfo struct {
327 331
328 type OrderBaseRepository interface { 332 type OrderBaseRepository interface {
329 Save(order *OrderBase) error 333 Save(order *OrderBase) error
330 - FindOne(qureyOptions OrderBaseFindOneQuery) (*OrderBase, error) 334 + FindOne(queryOptions OrderBaseFindOneQuery) (*OrderBase, error)
331 Find(queryOptions OrderBaseFindQuery) ([]OrderBase, int, error) 335 Find(queryOptions OrderBaseFindQuery) ([]OrderBase, int, error)
332 Remove(id int64, companyId int64) error 336 Remove(id int64, companyId int64) error
333 } 337 }
@@ -21,7 +21,7 @@ type OrderBestShop struct { @@ -21,7 +21,7 @@ type OrderBestShop struct {
21 BuyerAddress string `json:"buyerAddress"` 21 BuyerAddress string `json:"buyerAddress"`
22 //买家备注 22 //买家备注
23 BuyerRemark string `json:"buyerRemark"` 23 BuyerRemark string `json:"buyerRemark"`
24 - // 24 + //客户id
25 BuyerId int64 `json:"buyerId"` 25 BuyerId int64 `json:"buyerId"`
26 //商品总数 26 //商品总数
27 OrderCount int `json:"orderCount"` 27 OrderCount int `json:"orderCount"`
@@ -31,11 +31,15 @@ type OrderBestShop struct { @@ -31,11 +31,15 @@ type OrderBestShop struct {
31 DeliveryTime string `json:"deliveryTime"` 31 DeliveryTime string `json:"deliveryTime"`
32 //创建时间 32 //创建时间
33 CreateTime time.Time `json:"createTime"` 33 CreateTime time.Time `json:"createTime"`
  34 + //合伙人id
34 PartnerId int64 `json:"partnerId"` 35 PartnerId int64 `json:"partnerId"`
  36 + //订单产品
35 Goods []OrderGoodBestShop `json:"goods"` 37 Goods []OrderGoodBestShop `json:"goods"`
36 //是否将数据同步到 order_base ,order_good 38 //是否将数据同步到 order_base ,order_good
37 IsCopy bool `json:"isCopy"` 39 IsCopy bool `json:"isCopy"`
  40 + //公司id
38 CompanyId int64 `json:"companyId"` 41 CompanyId int64 `json:"companyId"`
  42 + //订单区域
39 OrderArea string `json:"orderArea"` 43 OrderArea string `json:"orderArea"`
40 } 44 }
41 45
@@ -55,6 +59,7 @@ func (order OrderBestShop) CopyToOrderBase(o *OrderBase) { @@ -55,6 +59,7 @@ func (order OrderBestShop) CopyToOrderBase(o *OrderBase) {
55 o.OrderCompute.PlanOrderAmount = order.OrderAmount 59 o.OrderCompute.PlanOrderAmount = order.OrderAmount
56 o.OrderCompute.PlanOrderCount = order.OrderCount 60 o.OrderCompute.PlanOrderCount = order.OrderCount
57 o.DeliveryTime, _ = time.Parse("2006-01-02 15:04:05", order.DeliveryTime) 61 o.DeliveryTime, _ = time.Parse("2006-01-02 15:04:05", order.DeliveryTime)
  62 + o.SaleDate = order.CreateTime
58 o.RegionInfo.RegionName = order.OrderArea 63 o.RegionInfo.RegionName = order.OrderArea
59 return 64 return
60 } 65 }
@@ -172,5 +172,8 @@ type UsersRepository interface { @@ -172,5 +172,8 @@ type UsersRepository interface {
172 Edit(*Users) error 172 Edit(*Users) error
173 Remove([]int64) error 173 Remove([]int64) error
174 FindOne(queryOptions UsersFindOneQuery) (Users, error) 174 FindOne(queryOptions UsersFindOneQuery) (Users, error)
  175 + //FindOneWithExist 查询一个用户,
  176 + //当数据不存在时不返回错误,替代的是返回bool,true表示数据存在,false表示数据不存在
  177 + FindOneWithExist(queryOptions UsersFindOneQuery) (*Users, bool, error)
175 Find(queryOptions UsersFindQuery) (int, []Users, error) 178 Find(queryOptions UsersFindQuery) (int, []Users, error)
176 } 179 }
@@ -191,7 +191,7 @@ func (dao OrderBaseDao) OrderBonusListForExcel(companyId int64, orderType int, p @@ -191,7 +191,7 @@ func (dao OrderBaseDao) OrderBonusListForExcel(companyId int64, orderType int, p
191 //@param updateTime 订单更新时间范围"[开始时间,结束时间]",时间格式"2006-01-02 15:04:05+07" 191 //@param updateTime 订单更新时间范围"[开始时间,结束时间]",时间格式"2006-01-02 15:04:05+07"
192 //@param createTime 订单的创建时间范围"[开始时间,结束时间]" 时间格式"2006-01-02 15:04:05+07" 192 //@param createTime 订单的创建时间范围"[开始时间,结束时间]" 时间格式"2006-01-02 15:04:05+07"
193 func (dao OrderBaseDao) OrderListByCondition(companyId int64, orderType int, partnerName string, orderCode string, deliveryCode string, 193 func (dao OrderBaseDao) OrderListByCondition(companyId int64, orderType int, partnerName string, orderCode string, deliveryCode string,
194 - updateTime [2]string, createTime [2]string, partnerCategory int, limit, offset int) ([]models.OrderBase, int, error) { 194 + updateTime [2]string, createTime [2]string, saleDate [2]string, partnerCategory int, partnerCategoryName string, limit, offset int) ([]models.OrderBase, int, error) {
195 tx := dao.transactionContext.GetDB() 195 tx := dao.transactionContext.GetDB()
196 var orders []models.OrderBase 196 var orders []models.OrderBase
197 query := tx.Model(&orders).Where("order_base.company_id=?", companyId) 197 query := tx.Model(&orders).Where("order_base.company_id=?", companyId)
@@ -203,6 +203,9 @@ func (dao OrderBaseDao) OrderListByCondition(companyId int64, orderType int, par @@ -203,6 +203,9 @@ func (dao OrderBaseDao) OrderListByCondition(companyId int64, orderType int, par
203 if partnerCategory > 0 { 203 if partnerCategory > 0 {
204 query = query.Where(`order_base.partner_category@>'{"id":?}'`, partnerCategory) 204 query = query.Where(`order_base.partner_category@>'{"id":?}'`, partnerCategory)
205 } 205 }
  206 + if partnerCategoryName != "" {
  207 + query = query.Where(`order_base.partner_category->>'name' like ?`, "%"+partnerCategoryName+"%")
  208 + }
206 if len(updateTime[0]) > 0 { 209 if len(updateTime[0]) > 0 {
207 query = query.Where(`order_base.update_time>=?`, updateTime[0]) 210 query = query.Where(`order_base.update_time>=?`, updateTime[0])
208 } 211 }
@@ -215,6 +218,12 @@ func (dao OrderBaseDao) OrderListByCondition(companyId int64, orderType int, par @@ -215,6 +218,12 @@ func (dao OrderBaseDao) OrderListByCondition(companyId int64, orderType int, par
215 if len(createTime[1]) > 0 { 218 if len(createTime[1]) > 0 {
216 query = query.Where(`order_base.create_time<=?`, createTime[1]) 219 query = query.Where(`order_base.create_time<=?`, createTime[1])
217 } 220 }
  221 + if len(saleDate[0]) > 0 {
  222 + query = query.Where(`order_base.sale_date>=?`, saleDate[0])
  223 + }
  224 + if len(saleDate[1]) > 0 {
  225 + query = query.Where(`order_base.sale_date<=?`, saleDate[1])
  226 + }
218 if len(partnerName) > 0 { 227 if len(partnerName) > 0 {
219 query = query.Join("LEFT JOIN partner_info as p ON order_base.partner_id=p.id"). 228 query = query.Join("LEFT JOIN partner_info as p ON order_base.partner_id=p.id").
220 Where("p.partner_name like ? ", "%"+partnerName+"%") 229 Where("p.partner_name like ? ", "%"+partnerName+"%")
@@ -249,6 +258,7 @@ type CustomOrderListForExcel struct { @@ -249,6 +258,7 @@ type CustomOrderListForExcel struct {
249 DeliveryCode string //发货编号 258 DeliveryCode string //发货编号
250 UpdateTime string //更新时间 259 UpdateTime string //更新时间
251 CreateTime string //创建时间 260 CreateTime string //创建时间
  261 + SaleDate string // 销售时间
252 PlanOrderCount int64 //货品总数 262 PlanOrderCount int64 //货品总数
253 UseOrderCount int64 //货品总数调整 263 UseOrderCount int64 //货品总数调整
254 RegionName string //订单区域 264 RegionName string //订单区域
@@ -259,6 +269,13 @@ type CustomOrderListForExcel struct { @@ -259,6 +269,13 @@ type CustomOrderListForExcel struct {
259 PartnerName string //合伙人 269 PartnerName string //合伙人
260 } 270 }
261 271
  272 +/**
  273 + * @Author SteveChan
  274 + * @Description // 导出到excel
  275 + * @Date 23:45 2021/1/26
  276 + * @Param
  277 + * @return
  278 + **/
262 //OrderListForExcel 获取实际订单列表用于excel导出 279 //OrderListForExcel 获取实际订单列表用于excel导出
263 //@param companyId 公司id 280 //@param companyId 公司id
264 //@param orderType 订单类型 281 //@param orderType 订单类型
@@ -267,12 +284,13 @@ type CustomOrderListForExcel struct { @@ -267,12 +284,13 @@ type CustomOrderListForExcel struct {
267 //@param updateTime 订单更新时间范围"[开始时间,结束时间]",时间格式"2006-01-02 15:04:05+07" 284 //@param updateTime 订单更新时间范围"[开始时间,结束时间]",时间格式"2006-01-02 15:04:05+07"
268 //@param createTime 订单的创建时间范围"[开始时间,结束时间]" 时间格式"2006-01-02 15:04:05+07" 285 //@param createTime 订单的创建时间范围"[开始时间,结束时间]" 时间格式"2006-01-02 15:04:05+07"
269 func (dao OrderBaseDao) OrderListForExcel(companyId int64, partnerName string, orderCode string, deliveryCode string, 286 func (dao OrderBaseDao) OrderListForExcel(companyId int64, partnerName string, orderCode string, deliveryCode string,
270 - updateTime [2]string, createTime [2]string, partnerCategory int) ( 287 + updateTime [2]string, createTime [2]string, saleDate [2]string, partnerCategory int, partnerCategoryName string) (
271 result []CustomOrderListForExcel, err error) { 288 result []CustomOrderListForExcel, err error) {
272 sqlstr := ` 289 sqlstr := `
273 SELECT t1.order_code,t1.delivery_code 290 SELECT t1.order_code,t1.delivery_code
274 ,to_char(t1.create_time AT TIME ZONE 'CCT' ,'YYYY-MM-DD HH24:MI:SS') AS create_time 291 ,to_char(t1.create_time AT TIME ZONE 'CCT' ,'YYYY-MM-DD HH24:MI:SS') AS create_time
275 ,to_char(t1.update_time AT TIME ZONE 'CCT' ,'YYYY-MM-DD HH24:MI:SS') AS update_time 292 ,to_char(t1.update_time AT TIME ZONE 'CCT' ,'YYYY-MM-DD HH24:MI:SS') AS update_time
  293 + ,to_char(t1.sale_date AT TIME ZONE 'CCT' ,'YYYY-MM-DD HH24:MI:SS') AS sale_date
276 ,t1.plan_order_count,t1.use_order_count,t1.plan_order_amount,t1.use_order_amount 294 ,t1.plan_order_count,t1.use_order_count,t1.plan_order_amount,t1.use_order_amount
277 ,t1.region_info->'regionName' AS region_name,t1.buyer->'buyerName' AS buyer_name 295 ,t1.region_info->'regionName' AS region_name,t1.buyer->'buyerName' AS buyer_name
278 ,t1.partner_category->'name' AS partner_category 296 ,t1.partner_category->'name' AS partner_category
@@ -306,17 +324,19 @@ func (dao OrderBaseDao) OrderListForExcel(companyId int64, partnerName string, o @@ -306,17 +324,19 @@ func (dao OrderBaseDao) OrderListForExcel(companyId int64, partnerName string, o
306 params = append(params, partnerCategory) 324 params = append(params, partnerCategory)
307 sqlstr += ` AND t1.partner_category@>'{"id":?}' ` 325 sqlstr += ` AND t1.partner_category@>'{"id":?}' `
308 } 326 }
309 - 327 + if len(partnerCategoryName) > 0 {
  328 + like := "%" + partnerCategoryName + "%"
  329 + params = append(params, like)
  330 + sqlstr += ` AND t1.partner_category->> 'name' like ?`
  331 + }
310 if len(updateTime[0]) > 0 { 332 if len(updateTime[0]) > 0 {
311 params = append(params, updateTime[0]) 333 params = append(params, updateTime[0])
312 sqlstr += ` AND t1.update_time>=? ` 334 sqlstr += ` AND t1.update_time>=? `
313 } 335 }
314 -  
315 if len(updateTime[1]) > 0 { 336 if len(updateTime[1]) > 0 {
316 params = append(params, updateTime[1]) 337 params = append(params, updateTime[1])
317 sqlstr += ` AND t1.update_time<=? ` 338 sqlstr += ` AND t1.update_time<=? `
318 } 339 }
319 -  
320 if len(createTime[0]) > 0 { 340 if len(createTime[0]) > 0 {
321 params = append(params, createTime[0]) 341 params = append(params, createTime[0])
322 sqlstr += ` AND t1.create_time>=? ` 342 sqlstr += ` AND t1.create_time>=? `
@@ -325,6 +345,14 @@ func (dao OrderBaseDao) OrderListForExcel(companyId int64, partnerName string, o @@ -325,6 +345,14 @@ func (dao OrderBaseDao) OrderListForExcel(companyId int64, partnerName string, o
325 params = append(params, createTime[1]) 345 params = append(params, createTime[1])
326 sqlstr += ` AND t1.create_time<=? ` 346 sqlstr += ` AND t1.create_time<=? `
327 } 347 }
  348 + if len(saleDate[0]) > 0 {
  349 + params = append(params, saleDate[0])
  350 + sqlstr += ` AND t1.sale_date>=? `
  351 + }
  352 + if len(saleDate[1]) > 0 {
  353 + params = append(params, saleDate[1])
  354 + sqlstr += ` AND t1.sale_date<=? `
  355 + }
328 sqlstr += ` ORDER BY t1.create_time DESC limit 10000 ` 356 sqlstr += ` ORDER BY t1.create_time DESC limit 10000 `
329 tx := dao.transactionContext.GetDB() 357 tx := dao.transactionContext.GetDB()
330 _, err = tx.Query(&result, sqlstr, params...) 358 _, err = tx.Query(&result, sqlstr, params...)
@@ -5,7 +5,9 @@ import ( @@ -5,7 +5,9 @@ import (
5 "fmt" 5 "fmt"
6 6
7 "github.com/go-pg/pg/v10" 7 "github.com/go-pg/pg/v10"
  8 + "github.com/go-pg/pg/v10/orm"
8 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/constant" 9 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/constant"
  10 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/models"
9 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/log" 11 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/log"
10 ) 12 )
11 13
@@ -21,6 +23,31 @@ func init() { @@ -21,6 +23,31 @@ func init() {
21 if !constant.DISABLE_SQL_GENERATE_PRINT { 23 if !constant.DISABLE_SQL_GENERATE_PRINT {
22 DB.AddQueryHook(SqlGeneratePrintHook{}) 24 DB.AddQueryHook(SqlGeneratePrintHook{})
23 } 25 }
  26 + if !constant.DISABLE_CREATE_TABLE {
  27 + for _, model := range []interface{}{
  28 + &models.ColumnSetting{},
  29 + &models.AdminPermission{},
  30 + &models.BusinessBonus{},
  31 + &models.Company{},
  32 + &models.OrderBase{},
  33 + &models.OrderBestshop{},
  34 + &models.OrderGood{},
  35 + &models.OrderGoodBestshop{},
  36 + &models.OrderLog{},
  37 + &models.PartnerCategoryInfo{},
  38 + &models.PartnerInfo{},
  39 + &models.Users{},
  40 + } {
  41 + err := DB.Model(model).CreateTable(&orm.CreateTableOptions{
  42 + Temp: false,
  43 + IfNotExists: true,
  44 + FKConstraints: true,
  45 + })
  46 + if err != nil {
  47 + panic(err)
  48 + }
  49 + }
  50 + }
24 } 51 }
25 52
26 type SqlGeneratePrintHook struct{} 53 type SqlGeneratePrintHook struct{}
  1 +package models
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  5 + "time"
  6 +)
  7 +
  8 +type ColumnSetting struct {
  9 + // 栏目设置id
  10 + Id int64
  11 + // 栏目设置关联用户公司id
  12 + CompanyId int
  13 + // 栏目设置创建时间
  14 + CreatedAt time.Time
  15 + // 栏目设置描述
  16 + Description string
  17 + // 栏目设置模块名称
  18 + Key string
  19 + // 栏目设置关联用户uid
  20 + Uid int64
  21 + // 栏目设置更新时间
  22 + UpdatedAt time.Time
  23 + // 栏目设置关联用户名称
  24 + UserName string
  25 + // 栏目数组
  26 + Value []domain.Column `pg:",array"`
  27 + // 无效栏目数组
  28 + InvalidValue []domain.Column `pg:",array"`
  29 +}
@@ -45,6 +45,8 @@ type OrderBase struct { @@ -45,6 +45,8 @@ type OrderBase struct {
45 DeliveryTime time.Time 45 DeliveryTime time.Time
46 //更新时间 46 //更新时间
47 UpdateTime time.Time 47 UpdateTime time.Time
  48 + //销售时间
  49 + SaleDate time.Time
48 //合伙人应收分红 50 //合伙人应收分红
49 PlanPartnerBonus float64 `pg:",use_zero"` 51 PlanPartnerBonus float64 `pg:",use_zero"`
50 //调整后的合伙人应收分红 (初始值=-1); 52 //调整后的合伙人应收分红 (初始值=-1);
@@ -62,6 +64,7 @@ type OrderBase struct { @@ -62,6 +64,7 @@ type OrderBase struct {
62 IsDisable int `pg:",use_zero"` 64 IsDisable int `pg:",use_zero"`
63 //分红支付状态 65 //分红支付状态
64 BonusStatus int 66 BonusStatus int
  67 + //公司id
65 CompanyId int64 68 CompanyId int64
66 //数据来源 69 //数据来源
67 DataFrom domain.OrderDataFrom `` 70 DataFrom domain.OrderDataFrom ``
  1 +package repository
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/go-pg/pg/v10"
  6 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  7 +
  8 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/models"
  9 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/transaction"
  10 +)
  11 +
  12 +type ColumnSettingRepository struct {
  13 + transactionContext *transaction.TransactionContext
  14 +}
  15 +
  16 +//func (repository *ColumnSettingRepository) nextIdentify() (int64, error) {
  17 +// return 0, nil
  18 +//}
  19 +
  20 +func (repository *ColumnSettingRepository) Save(columnSetting *domain.ColumnSetting) (*domain.ColumnSetting, error) {
  21 + tx := repository.transactionContext.PgTx
  22 +
  23 + columnSettingModel := &models.ColumnSetting{
  24 + Id: columnSetting.Id,
  25 + CompanyId: columnSetting.CompanyId,
  26 + CreatedAt: columnSetting.CreatedAt,
  27 + Description: columnSetting.Description,
  28 + Key: columnSetting.Key,
  29 + Uid: columnSetting.Uid,
  30 + UpdatedAt: columnSetting.UpdatedAt,
  31 + UserName: columnSetting.UserName,
  32 + Value: columnSetting.Value,
  33 + InvalidValue: columnSetting.InvalidValue,
  34 + }
  35 +
  36 + if columnSetting.Identify() == nil {
  37 + _, err := tx.Model(columnSettingModel).Insert()
  38 + if err != nil {
  39 + return nil, err
  40 + }
  41 + } else {
  42 + _, err := tx.Model(columnSettingModel).WherePK().
  43 + Column("company_id", "created_at", "description", "key", "uid", "updated_at", "user_name", "value", "invalid_value").Update()
  44 + if err != nil {
  45 + return nil, err
  46 + }
  47 + }
  48 + return columnSetting, nil
  49 +}
  50 +
  51 +func (repository *ColumnSettingRepository) Remove(columnSetting *domain.ColumnSetting, columnSettings []*domain.ColumnSetting) (*domain.ColumnSetting, []*domain.ColumnSetting, error) {
  52 + tx := repository.transactionContext.PgTx
  53 +
  54 + // 单个删除
  55 + if columnSetting != nil {
  56 + columnSettingModel := new(models.ColumnSetting)
  57 + columnSettingModel.Id = columnSetting.Identify().(int64)
  58 + if _, err := tx.Model(&columnSettingModel).WherePK().Delete(); err != nil {
  59 + return columnSetting, nil, err
  60 + }
  61 + }
  62 +
  63 + // 批量删除
  64 + if len(columnSettings) > 0 {
  65 + var ids []int64
  66 + for _, setting := range columnSettings {
  67 + ids = append(ids, setting.Identify().(int64))
  68 + }
  69 + if _, err := tx.Model((*models.ColumnSetting)(nil)).Where("id IN (?)", pg.In(ids)).Delete(); err != nil {
  70 + return nil, columnSettings, err
  71 + }
  72 + }
  73 +
  74 + return columnSetting, columnSettings, nil
  75 +}
  76 +
  77 +func (repository *ColumnSettingRepository) FindOne(queryOptions map[string]interface{}) (*domain.ColumnSetting, error) {
  78 + tx := repository.transactionContext.PgTx
  79 + columnSettingModel := new(models.ColumnSetting)
  80 + query := tx.Model(columnSettingModel)
  81 + if columnSettingId, ok := queryOptions["column_settingId"]; ok {
  82 + query = query.Where("column_setting.id = ?", columnSettingId)
  83 + }
  84 + if uid, ok := queryOptions["uid"]; ok {
  85 + query = query.Where("column_setting.uid = ?", uid)
  86 + }
  87 + if companyId, ok := queryOptions["companyId"]; ok {
  88 + query = query.Where("column_setting.company_id = ?", companyId)
  89 + }
  90 + if err := query.First(); err != nil {
  91 + if err.Error() == "pg: no rows in result set" {
  92 + return nil, fmt.Errorf("没有此资源")
  93 + } else {
  94 + return nil, err
  95 + }
  96 + }
  97 + if columnSettingModel.Id == 0 {
  98 + return nil, nil
  99 + } else {
  100 + return repository.transformPgModelToDomainModel(columnSettingModel)
  101 + }
  102 +}
  103 +
  104 +func (repository *ColumnSettingRepository) Find(queryOptions domain.ColumnSettingFindQuery) (int64, []*domain.ColumnSetting, error) {
  105 + tx := repository.transactionContext.PgTx
  106 + var columnSettingModels []models.ColumnSetting
  107 + columnSettings := make([]*domain.ColumnSetting, 0)
  108 + query := tx.Model(&columnSettingModels)
  109 + if len(queryOptions.Ids) > 0 {
  110 + query = query.Where("column_setting.uid IN (?)", pg.In(queryOptions.Ids))
  111 + }
  112 + if queryOptions.Uid > 0 {
  113 + query = query.Where("column_setting.uid = ?", queryOptions.Uid)
  114 + }
  115 + if queryOptions.CompanyId > 0 {
  116 + query = query.Where("column_setting.company_id = ?", queryOptions.CompanyId)
  117 + }
  118 + if queryOptions.Offset > -1 {
  119 + query = query.Offset(queryOptions.Offset)
  120 + }
  121 + if queryOptions.Limit > 0 {
  122 + query = query.Limit(queryOptions.Limit)
  123 + } else {
  124 + query = query.Limit(20)
  125 + }
  126 + if count, err := query.Order("id DESC").SelectAndCount(); err != nil {
  127 + return 0, columnSettings, err
  128 + } else {
  129 + for _, columnSettingModel := range columnSettingModels {
  130 + if columnSetting, errTrans := repository.transformPgModelToDomainModel(&columnSettingModel); errTrans != nil {
  131 + return 0, columnSettings, errTrans
  132 + } else {
  133 + columnSettings = append(columnSettings, columnSetting)
  134 + }
  135 + }
  136 + return int64(count), columnSettings, nil
  137 + }
  138 +}
  139 +
  140 +func (repository *ColumnSettingRepository) transformPgModelToDomainModel(columnSettingModel *models.ColumnSetting) (*domain.ColumnSetting, error) {
  141 + return &domain.ColumnSetting{
  142 + Id: columnSettingModel.Id,
  143 + CompanyId: columnSettingModel.CompanyId,
  144 + CreatedAt: columnSettingModel.CreatedAt,
  145 + Description: columnSettingModel.Description,
  146 + Key: columnSettingModel.Key,
  147 + Uid: columnSettingModel.Uid,
  148 + UpdatedAt: columnSettingModel.UpdatedAt,
  149 + UserName: columnSettingModel.UserName,
  150 + Value: columnSettingModel.Value, // 有效栏目设置
  151 + InvalidValue: columnSettingModel.InvalidValue, // 无效栏目设置
  152 + }, nil
  153 +}
  154 +
  155 +func NewColumnSettingRepository(transactionContext *transaction.TransactionContext) (*ColumnSettingRepository, error) {
  156 + if transactionContext == nil {
  157 + return nil, fmt.Errorf("transactionContext参数不能为nil")
  158 + } else {
  159 + return &ColumnSettingRepository{
  160 + transactionContext: transactionContext,
  161 + }, nil
  162 + }
  163 +}
@@ -2,6 +2,7 @@ package repository @@ -2,6 +2,7 @@ package repository
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "github.com/go-pg/pg/v10"
5 6
6 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain" 7 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
7 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/models" 8 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/models"
@@ -23,12 +24,13 @@ func NewOrderBaseRepository(transactionContext *transaction.TransactionContext) @@ -23,12 +24,13 @@ func NewOrderBaseRepository(transactionContext *transaction.TransactionContext)
23 return &OrderBaseRepository{transactionContext: transactionContext}, nil 24 return &OrderBaseRepository{transactionContext: transactionContext}, nil
24 } 25 }
25 26
26 -func (reponsitory OrderBaseRepository) transformPgModelToDomainModel(orderModel *models.OrderBase) (order domain.OrderBase, err error) { 27 +func (repository OrderBaseRepository) transformPgModelToDomainModel(orderModel *models.OrderBase) (order domain.OrderBase, err error) {
27 order = domain.OrderBase{ 28 order = domain.OrderBase{
28 Id: orderModel.Id, OrderType: orderModel.OrderType, OrderCode: orderModel.OrderCode, 29 Id: orderModel.Id, OrderType: orderModel.OrderType, OrderCode: orderModel.OrderCode,
29 DeliveryCode: orderModel.DeliveryCode, Buyer: orderModel.Buyer, RegionInfo: orderModel.RegionInfo, 30 DeliveryCode: orderModel.DeliveryCode, Buyer: orderModel.Buyer, RegionInfo: orderModel.RegionInfo,
30 PartnerId: orderModel.PartnerId, SalesmanBonusPercent: orderModel.SalesmanBonusPercent, 31 PartnerId: orderModel.PartnerId, SalesmanBonusPercent: orderModel.SalesmanBonusPercent,
31 CreateTime: orderModel.CreateTime, DeliveryTime: orderModel.DeliveryTime, UpdateTime: orderModel.UpdateTime, 32 CreateTime: orderModel.CreateTime, DeliveryTime: orderModel.DeliveryTime, UpdateTime: orderModel.UpdateTime,
  33 + SaleDate: orderModel.SaleDate,
32 IsDisable: orderModel.IsDisable, 34 IsDisable: orderModel.IsDisable,
33 OrderCompute: domain.OrderCompute{ 35 OrderCompute: domain.OrderCompute{
34 PlanPartnerBonus: orderModel.PlanPartnerBonus, UsePartnerBonus: orderModel.UsePartnerBonus, 36 PlanPartnerBonus: orderModel.PlanPartnerBonus, UsePartnerBonus: orderModel.UsePartnerBonus,
@@ -55,18 +57,33 @@ func (repository OrderBaseRepository) Save(orderInfo *domain.OrderBase) error { @@ -55,18 +57,33 @@ func (repository OrderBaseRepository) Save(orderInfo *domain.OrderBase) error {
55 tx = repository.transactionContext.PgTx 57 tx = repository.transactionContext.PgTx
56 ) 58 )
57 m := &models.OrderBase{ 59 m := &models.OrderBase{
58 - Id: orderInfo.Id, OrderType: orderInfo.OrderType, OrderCode: orderInfo.OrderCode,  
59 - DeliveryCode: orderInfo.DeliveryCode, Buyer: orderInfo.Buyer, RegionInfo: orderInfo.RegionInfo,  
60 - PartnerId: orderInfo.PartnerId, SalesmanBonusPercent: orderInfo.SalesmanBonusPercent,  
61 - SalesmanBonus: orderInfo.OrderCompute.SalesmanBonus, PlanOrderCount: orderInfo.OrderCompute.PlanOrderCount,  
62 - PlanOrderAmount: orderInfo.OrderCompute.PlanOrderAmount, UseOrderCount: orderInfo.OrderCompute.UseOrderCount,  
63 - UseOrderAmount: orderInfo.OrderCompute.UseOrderAmount, DeliveryTime: orderInfo.DeliveryTime,  
64 - PlanPartnerBonus: orderInfo.OrderCompute.PlanPartnerBonus, UsePartnerBonus: orderInfo.OrderCompute.UsePartnerBonus,  
65 - PartnerBonusHas: orderInfo.OrderCompute.PartnerBonusHas, PartnerBonusNot: orderInfo.OrderCompute.PartnerBonusNot,  
66 - PartnerBonusExpense: orderInfo.OrderCompute.PartnerBonusExpense, IsDisable: orderInfo.IsDisable,  
67 - CreateTime: orderInfo.CreateTime, BonusStatus: orderInfo.BonusStatus,  
68 - CompanyId: orderInfo.CompanyId, DataFrom: orderInfo.DataFrom,  
69 - Remark: orderInfo.Remark, PartnerCategory: orderInfo.PartnerCategory, 60 + Id: orderInfo.Id,
  61 + OrderType: orderInfo.OrderType,
  62 + OrderCode: orderInfo.OrderCode,
  63 + DeliveryCode: orderInfo.DeliveryCode,
  64 + Buyer: orderInfo.Buyer,
  65 + RegionInfo: orderInfo.RegionInfo,
  66 + PartnerId: orderInfo.PartnerId,
  67 + SalesmanBonusPercent: orderInfo.SalesmanBonusPercent,
  68 + SalesmanBonus: orderInfo.OrderCompute.SalesmanBonus,
  69 + PlanOrderCount: orderInfo.OrderCompute.PlanOrderCount,
  70 + PlanOrderAmount: orderInfo.OrderCompute.PlanOrderAmount,
  71 + UseOrderCount: orderInfo.OrderCompute.UseOrderCount,
  72 + UseOrderAmount: orderInfo.OrderCompute.UseOrderAmount,
  73 + DeliveryTime: orderInfo.DeliveryTime,
  74 + PlanPartnerBonus: orderInfo.OrderCompute.PlanPartnerBonus,
  75 + UsePartnerBonus: orderInfo.OrderCompute.UsePartnerBonus,
  76 + PartnerBonusHas: orderInfo.OrderCompute.PartnerBonusHas,
  77 + PartnerBonusNot: orderInfo.OrderCompute.PartnerBonusNot,
  78 + PartnerBonusExpense: orderInfo.OrderCompute.PartnerBonusExpense,
  79 + IsDisable: orderInfo.IsDisable,
  80 + CreateTime: orderInfo.CreateTime,
  81 + SaleDate: orderInfo.SaleDate,
  82 + BonusStatus: orderInfo.BonusStatus,
  83 + CompanyId: orderInfo.CompanyId,
  84 + DataFrom: orderInfo.DataFrom,
  85 + Remark: orderInfo.Remark,
  86 + PartnerCategory: orderInfo.PartnerCategory,
70 } 87 }
71 if m.Id == 0 { 88 if m.Id == 0 {
72 _, err = tx.Model(m). 89 _, err = tx.Model(m).
@@ -75,6 +92,7 @@ func (repository OrderBaseRepository) Save(orderInfo *domain.OrderBase) error { @@ -75,6 +92,7 @@ func (repository OrderBaseRepository) Save(orderInfo *domain.OrderBase) error {
75 orderInfo.Id = m.Id 92 orderInfo.Id = m.Id
76 orderInfo.CreateTime = m.CreateTime 93 orderInfo.CreateTime = m.CreateTime
77 orderInfo.UpdateTime = m.UpdateTime 94 orderInfo.UpdateTime = m.UpdateTime
  95 + orderInfo.SaleDate = m.CreateTime
78 } else { 96 } else {
79 _, err = tx.Model(m). 97 _, err = tx.Model(m).
80 WherePK(). 98 WherePK().
@@ -104,6 +122,9 @@ func (repository OrderBaseRepository) Find(queryOption domain.OrderBaseFindQuery @@ -104,6 +122,9 @@ func (repository OrderBaseRepository) Find(queryOption domain.OrderBaseFindQuery
104 if queryOption.CompanyId > 0 { 122 if queryOption.CompanyId > 0 {
105 query = query.Where("company_id=?", queryOption.CompanyId) 123 query = query.Where("company_id=?", queryOption.CompanyId)
106 } 124 }
  125 + if len(queryOption.PartnerCategoryIds) > 0 {
  126 + query = query.Where(`(order_base.partner_category->>'id')::int IN (?)`, pg.In(queryOption.PartnerCategoryIds))
  127 + }
107 if queryOption.Offset > -1 { 128 if queryOption.Offset > -1 {
108 query = query.Offset(queryOption.Offset) 129 query = query.Offset(queryOption.Offset)
109 } 130 }
@@ -131,16 +152,16 @@ func (repository OrderBaseRepository) Find(queryOption domain.OrderBaseFindQuery @@ -131,16 +152,16 @@ func (repository OrderBaseRepository) Find(queryOption domain.OrderBaseFindQuery
131 return ordersReturn, count, nil 152 return ordersReturn, count, nil
132 } 153 }
133 154
134 -func (repository OrderBaseRepository) FindOne(qureyOptions domain.OrderBaseFindOneQuery) (*domain.OrderBase, error) { 155 +func (repository OrderBaseRepository) FindOne(queryOptions domain.OrderBaseFindOneQuery) (*domain.OrderBase, error) {
135 var ( 156 var (
136 err error 157 err error
137 tx = repository.transactionContext.PgDd 158 tx = repository.transactionContext.PgDd
138 ) 159 )
139 m := new(models.OrderBase) 160 m := new(models.OrderBase)
140 query := tx.Model(m). 161 query := tx.Model(m).
141 - Where("id=?", qureyOptions.OrderId)  
142 - if qureyOptions.CompanyId > 0 {  
143 - query = query.Where("company_id=?", qureyOptions.CompanyId) 162 + Where("id=?", queryOptions.OrderId)
  163 + if queryOptions.CompanyId > 0 {
  164 + query = query.Where("company_id=?", queryOptions.CompanyId)
144 } 165 }
145 err = query.First() 166 err = query.First()
146 if err != nil { 167 if err != nil {
@@ -5,6 +5,7 @@ import ( @@ -5,6 +5,7 @@ import (
5 "fmt" 5 "fmt"
6 "time" 6 "time"
7 7
  8 + "github.com/go-pg/pg/v10"
8 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain" 9 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
9 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/models" 10 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/models"
10 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/transaction" 11 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/transaction"
@@ -153,6 +154,47 @@ func (reponsitory UsersRepository) FindOne(queryOptions domain.UsersFindOneQuery @@ -153,6 +154,47 @@ func (reponsitory UsersRepository) FindOne(queryOptions domain.UsersFindOneQuery
153 return reponsitory.transformPgModelToDomainModel(&m) 154 return reponsitory.transformPgModelToDomainModel(&m)
154 } 155 }
155 156
  157 +//FindOneWithExist 查询一个用户,
  158 +//当数据不存在时不返回错误,替代的是返回bool,true表示数据存在,false表示数据不存在
  159 +func (reponsitory UsersRepository) FindOneWithExist(queryOptions domain.UsersFindOneQuery) (*domain.Users, bool, error) {
  160 + var (
  161 + err error
  162 + tx = reponsitory.transactionContext.PgTx
  163 + m models.Users
  164 + hasCondition bool
  165 + )
  166 + query := tx.Model(&m)
  167 + query = query.Where("delete_at ISNULL")
  168 + if queryOptions.Id > 0 {
  169 + hasCondition = true
  170 + query = query.Where("id=?", queryOptions.Id)
  171 + }
  172 + if len(queryOptions.Phone) > 0 {
  173 + hasCondition = true
  174 + query = query.Where("phone=?", queryOptions.Phone)
  175 + }
  176 + if queryOptions.CompanyId > 0 {
  177 + hasCondition = true
  178 + query = query.Where("company_id=?", queryOptions.CompanyId)
  179 + }
  180 + if queryOptions.OpenId > 0 {
  181 + hasCondition = true
  182 + query = query.Where("open_id=?", queryOptions.OpenId)
  183 + }
  184 + if !hasCondition {
  185 + return nil, false, errors.New("UsersRepository.FindOne 必须要有查询条件")
  186 + }
  187 + err = query.First()
  188 + if err != nil && err == pg.ErrNoRows {
  189 + return nil, false, nil
  190 + }
  191 + if err != nil {
  192 + return nil, false, err
  193 + }
  194 + searchResult, err := reponsitory.transformPgModelToDomainModel(&m)
  195 + return &searchResult, true, err
  196 +}
  197 +
156 func (reponsitory UsersRepository) Find(queryOption domain.UsersFindQuery) (int, []domain.Users, error) { 198 func (reponsitory UsersRepository) Find(queryOption domain.UsersFindQuery) (int, []domain.Users, error) {
157 db := reponsitory.transactionContext.PgTx 199 db := reponsitory.transactionContext.PgTx
158 usersModels := []models.Users{} 200 usersModels := []models.Users{}
@@ -47,3 +47,19 @@ func IsContain(items []string, item string) bool { @@ -47,3 +47,19 @@ func IsContain(items []string, item string) bool {
47 } 47 }
48 return false 48 return false
49 } 49 }
  50 +
  51 +/**
  52 + * @Author SteveChan
  53 + * @Description //TODO
  54 + * @Date 23:34 2021/2/2
  55 + * @Param
  56 + * @return
  57 + **/
  58 +func IsContainInt(items []int64, item int64) bool {
  59 + for _, eachItem := range items {
  60 + if eachItem == item {
  61 + return true
  62 + }
  63 + }
  64 + return false
  65 +}
  1 +package controllers
  2 +
  3 +import (
  4 + "encoding/json"
  5 + "errors"
  6 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  7 +
  8 + "github.com/astaxie/beego/logs"
  9 +
  10 + "github.com/linmadan/egglib-go/web/beego/utils"
  11 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/columnSetting/command"
  12 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/columnSetting/query"
  13 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/columnSetting/service"
  14 +)
  15 +
  16 +type ColumnSettingController struct {
  17 + BaseController
  18 +}
  19 +
  20 +////Prepare 重写 BaseController 的Prepare方法
  21 +func (controller *ColumnSettingController) Prepare() {
  22 + controller.BaseController.Prepare()
  23 + if ok := controller.ValidJWTToken(); !ok {
  24 + return
  25 + }
  26 + if ok := controller.ValidAdminPermission(domain.PERMISSION_ORDER); !ok {
  27 + return
  28 + }
  29 +}
  30 +
  31 +func (controller *ColumnSettingController) CreateColumnSetting() {
  32 + columnSettingService := service.NewColumnSettingService(nil)
  33 + createColumnSettingCommand := &command.CreateColumnSettingCommand{}
  34 + //_ = json.Unmarshal(controller.Ctx.Input.GetData("requestBody").([]byte), createColumnSettingCommand)
  35 + if err := controller.BindJsonData(&createColumnSettingCommand); err != nil {
  36 + logs.Error(err)
  37 + controller.ResponseError(errors.New("json数据解析失败"))
  38 + return
  39 + }
  40 + companyId := controller.GetUserCompany()
  41 + uid := controller.GetUserId()
  42 + createColumnSettingCommand.CompanyId = int(companyId)
  43 + createColumnSettingCommand.Uid = uid
  44 + data, err := columnSettingService.CreateColumnSetting(createColumnSettingCommand)
  45 + var response utils.JsonResponse
  46 + if err != nil {
  47 + response = utils.ResponseError(controller.Ctx, err)
  48 + } else {
  49 + response = utils.ResponseData(controller.Ctx, data)
  50 + }
  51 + controller.Data["json"] = response
  52 + controller.ServeJSON()
  53 +}
  54 +
  55 +/**
  56 + * @Author SteveChan
  57 + * @Description // 更新栏目设置
  58 + * @Date 22:52 2021/1/26
  59 + * @Param
  60 + * @return
  61 + **/
  62 +func (controller *ColumnSettingController) UpdateColumnSetting() {
  63 + columnSettingService := service.NewColumnSettingService(nil)
  64 + updateColumnSettingCommand := &command.UpdateColumnSettingCommand{}
  65 + //_ = json.Unmarshal(controller.Ctx.Input.GetData("requestBody").([]byte), updateColumnSettingCommand)
  66 + if err := controller.BindJsonData(&updateColumnSettingCommand); err != nil {
  67 + logs.Error(err)
  68 + controller.ResponseError(errors.New("json数据解析失败"))
  69 + return
  70 + }
  71 + //columnSettingId, _ := controller.GetInt64(":columnSettingId")
  72 + companyId := controller.GetUserCompany()
  73 + uid := controller.GetUserId()
  74 + //updateColumnSettingCommand.ColumnSettingId = columnSettingId
  75 + updateColumnSettingCommand.CompanyId = int(companyId)
  76 + updateColumnSettingCommand.Uid = uid
  77 + updateColumnSettingCommand.Selected = updateColumnSettingCommand.OrderBaseColumns.Selected
  78 + updateColumnSettingCommand.UnSelected = updateColumnSettingCommand.OrderBaseColumns.UnSelected
  79 + data, err := columnSettingService.UpdateColumnSetting(updateColumnSettingCommand)
  80 + var response utils.JsonResponse
  81 + if err != nil {
  82 + response = utils.ResponseError(controller.Ctx, err)
  83 + } else {
  84 + response = utils.ResponseData(controller.Ctx, data)
  85 + }
  86 + controller.Data["json"] = response
  87 + controller.ServeJSON()
  88 +}
  89 +
  90 +/**
  91 + * @Author SteveChan
  92 + * @Description // 获取栏目设置
  93 + * @Date 22:53 2021/1/26
  94 + * @Param
  95 + * @return
  96 + **/
  97 +func (controller *ColumnSettingController) GetColumnSetting() {
  98 + columnSettingService := service.NewColumnSettingService(nil)
  99 + getColumnSettingQuery := &query.GetColumnSettingQuery{}
  100 + //columnSettingId, _ := controller.GetInt64(":columnSettingId")
  101 + companyId := controller.GetUserCompany() // 公司id
  102 + uid := controller.GetUserId() // 用户id
  103 + //getColumnSettingQuery.ColumnSettingId = columnSettingId
  104 + getColumnSettingQuery.CompanyId = int(companyId)
  105 + getColumnSettingQuery.Uid = uid
  106 + data, err := columnSettingService.GetColumnSetting(getColumnSettingQuery)
  107 + var response utils.JsonResponse
  108 + if err != nil {
  109 + response = utils.ResponseError(controller.Ctx, err)
  110 + } else {
  111 + response = utils.ResponseData(controller.Ctx, data)
  112 + }
  113 + controller.Data["json"] = response
  114 + controller.ServeJSON()
  115 +}
  116 +
  117 +func (controller *ColumnSettingController) RemoveColumnSetting() {
  118 + columnSettingService := service.NewColumnSettingService(nil)
  119 + removeColumnSettingCommand := &command.RemoveColumnSettingCommand{}
  120 + _ = json.Unmarshal(controller.Ctx.Input.GetData("requestBody").([]byte), removeColumnSettingCommand)
  121 + columnSettingId, _ := controller.GetInt64(":columnSettingId")
  122 + removeColumnSettingCommand.ColumnSettingId = columnSettingId
  123 + data, err := columnSettingService.RemoveColumnSetting(removeColumnSettingCommand)
  124 + var response utils.JsonResponse
  125 + if err != nil {
  126 + response = utils.ResponseError(controller.Ctx, err)
  127 + } else {
  128 + response = utils.ResponseData(controller.Ctx, data)
  129 + }
  130 + controller.Data["json"] = response
  131 + controller.ServeJSON()
  132 +}
  133 +
  134 +/**
  135 + * @Author SteveChan
  136 + * @Description // 重置栏目设置
  137 + * @Date 22:52 2021/1/26
  138 + * @Param
  139 + * @return
  140 + **/
  141 +func (controller *ColumnSettingController) ResetColumn() {
  142 + columnSettingService := service.NewColumnSettingService(nil)
  143 + resetColumnCommand := &command.ResetColumnCommand{}
  144 + companyId := controller.GetUserCompany()
  145 + uid := controller.GetUserId()
  146 + //_ = json.Unmarshal(controller.Ctx.Input.GetData("requestBody").([]byte), resetColumnCommand)
  147 + resetColumnCommand.CompanyId = int(companyId)
  148 + resetColumnCommand.Uid = uid
  149 + resetColumnCommand.Value = domain.DefaultColumns // 还原默认栏目设置
  150 + resetColumnCommand.InvalidValue = domain.DefaultInvalidColumns // 还原默认无效栏目
  151 + data, err := columnSettingService.ResetColumn(resetColumnCommand)
  152 + var response utils.JsonResponse
  153 + if err != nil {
  154 + response = utils.ResponseError(controller.Ctx, err)
  155 + } else {
  156 + response = utils.ResponseData(controller.Ctx, data)
  157 + }
  158 + controller.Data["json"] = response
  159 + controller.ServeJSON()
  160 +}
  161 +
  162 +/**
  163 + * @Author SteveChan
  164 + * @Description // 获取栏目列表
  165 + * @Date 14:03 2021/2/1
  166 + * @Param
  167 + * @return
  168 + **/
  169 +func (controller *ColumnSettingController) ListColumnSetting() {
  170 + columnSettingService := service.NewColumnSettingService(nil)
  171 + listColumnSettingQuery := &query.ListColumnSettingQuery{}
  172 + offset, _ := controller.GetInt("offset")
  173 + listColumnSettingQuery.Offset = offset
  174 + limit, _ := controller.GetInt("limit")
  175 + listColumnSettingQuery.Limit = limit
  176 + data, err := columnSettingService.ListColumnSetting(listColumnSettingQuery)
  177 + var response utils.JsonResponse
  178 + if err != nil {
  179 + response = utils.ResponseError(controller.Ctx, err)
  180 + } else {
  181 + response = utils.ResponseData(controller.Ctx, data)
  182 + }
  183 + controller.Data["json"] = response
  184 + controller.ServeJSON()
  185 +}
  186 +
  187 +/**
  188 + * @Author SteveChan
  189 + * @Description //返回默认栏目设置
  190 + * @Date 14:06 2021/2/1
  191 + * @Param
  192 + * @return
  193 + **/
  194 +func (controller *ColumnSettingController) ListDefaultColumnSetting() {
  195 + data := map[string]interface{}{
  196 + "orderBaseColumns": map[string]interface{}{
  197 + "selected": domain.DefaultColumns,
  198 + "unselected": domain.DefaultInvalidColumns,
  199 + },
  200 + }
  201 + var response utils.JsonResponse
  202 + response = utils.ResponseData(controller.Ctx, data)
  203 + controller.Data["json"] = response
  204 + controller.ServeJSON()
  205 +}
@@ -292,16 +292,18 @@ func (c *OrderDividendController) EditOrderRemarkBonus() { @@ -292,16 +292,18 @@ func (c *OrderDividendController) EditOrderRemarkBonus() {
292 } 292 }
293 293
294 func (c *OrderDividendController) ListOrderBonusForExcel() { 294 func (c *OrderDividendController) ListOrderBonusForExcel() {
295 - type Parameter struct {  
296 - SearchWord string `json:"searchWord"`  
297 - OrderType int `json:"orderType"`  
298 - PageSize int `json:"pageSize"`  
299 - PageNumber int `json:"pageNumber"`  
300 - PartnerCategoryId int `json:"partnerCategoryId"`  
301 - CreateTime []string `json:"createTime"`  
302 - } 295 + //type Parameter struct {
  296 + // SearchWord string `json:"searchWord"`
  297 + // OrderType int `json:"orderType"`
  298 + // PageSize int `json:"pageSize"`
  299 + // PageNumber int `json:"pageNumber"`
  300 + // PartnerCategoryId int `json:"partnerCategoryId"`
  301 + // CreateTime []string `json:"createTime"`
  302 + //}
  303 +
303 var ( 304 var (
304 - param Parameter 305 + //param Parameter
  306 + param orderQuery.ListOrderBonusForExcelQuery
305 err error 307 err error
306 ) 308 )
307 if err = c.BindJsonData(&param); err != nil { 309 if err = c.BindJsonData(&param); err != nil {
@@ -309,9 +311,14 @@ func (c *OrderDividendController) ListOrderBonusForExcel() { @@ -309,9 +311,14 @@ func (c *OrderDividendController) ListOrderBonusForExcel() {
309 c.ResponseError(errors.New("json数据解析失败")) 311 c.ResponseError(errors.New("json数据解析失败"))
310 return 312 return
311 } 313 }
312 - if !(param.OrderType == 0 ||  
313 - param.OrderType == domain.OrderReal ||  
314 - param.OrderType == domain.OrderTypeBestShop) { 314 + if param.Type != "ORDER_DIVIDEND" {
  315 + logs.Error(err)
  316 + c.ResponseError(errors.New("错误的操作类型"))
  317 + return
  318 + }
  319 + if !(param.Where.OrderType == 0 ||
  320 + param.Where.OrderType == domain.OrderReal ||
  321 + param.Where.OrderType == domain.OrderTypeBestShop) {
315 c.ResponseError(errors.New("参数异常")) 322 c.ResponseError(errors.New("参数异常"))
316 return 323 return
317 } 324 }
@@ -319,9 +326,9 @@ func (c *OrderDividendController) ListOrderBonusForExcel() { @@ -319,9 +326,9 @@ func (c *OrderDividendController) ListOrderBonusForExcel() {
319 createTimeBegin string 326 createTimeBegin string
320 createTimeEnd string 327 createTimeEnd string
321 ) 328 )
322 - if len(param.CreateTime) > 0 {  
323 - if len(param.CreateTime[0]) > 0 {  
324 - t, err := time.ParseInLocation("2006-01-02", param.CreateTime[0], time.Local) 329 + if len(param.Where.CreateTime) > 0 {
  330 + if len(param.Where.CreateTime[0]) > 0 {
  331 + t, err := time.ParseInLocation("2006-01-02", param.Where.CreateTime[0], time.Local)
325 if err != nil { 332 if err != nil {
326 c.ResponseError(errors.New("UpdateTimeBegin 时间格式错误")) 333 c.ResponseError(errors.New("UpdateTimeBegin 时间格式错误"))
327 return 334 return
@@ -329,9 +336,9 @@ func (c *OrderDividendController) ListOrderBonusForExcel() { @@ -329,9 +336,9 @@ func (c *OrderDividendController) ListOrderBonusForExcel() {
329 createTimeBegin = t.Format("2006-01-02 15:04:05-07") 336 createTimeBegin = t.Format("2006-01-02 15:04:05-07")
330 } 337 }
331 } 338 }
332 - if len(param.CreateTime) > 1 {  
333 - if len(param.CreateTime[1]) > 0 {  
334 - t, err := time.ParseInLocation("2006-01-02", param.CreateTime[1], time.Local) 339 + if len(param.Where.CreateTime) > 1 {
  340 + if len(param.Where.CreateTime[1]) > 0 {
  341 + t, err := time.ParseInLocation("2006-01-02", param.Where.CreateTime[1], time.Local)
335 if err != nil { 342 if err != nil {
336 c.ResponseError(errors.New("UpdateTimeEnd 时间格式错误")) 343 c.ResponseError(errors.New("UpdateTimeEnd 时间格式错误"))
337 return 344 return
@@ -345,10 +352,10 @@ func (c *OrderDividendController) ListOrderBonusForExcel() { @@ -345,10 +352,10 @@ func (c *OrderDividendController) ListOrderBonusForExcel() {
345 orderSrv := orderService.NewOrderInfoService(nil) 352 orderSrv := orderService.NewOrderInfoService(nil)
346 dataResult, column, err := orderSrv.ListOrderBonusForExcel( 353 dataResult, column, err := orderSrv.ListOrderBonusForExcel(
347 orderQuery.ListOrderBonusQuery{ 354 orderQuery.ListOrderBonusQuery{
348 - OrderType: param.OrderType,  
349 - PartnerOrCode: param.SearchWord, 355 + OrderType: param.Where.OrderType,
  356 + PartnerOrCode: param.Where.SearchWord,
350 CompanyId: companyId, 357 CompanyId: companyId,
351 - PartnerCategory: param.PartnerCategoryId, 358 + PartnerCategory: param.Where.PartnerCategoryId,
352 CreateTimeBegin: createTimeBegin, 359 CreateTimeBegin: createTimeBegin,
353 CreateTimeEnd: createTimeEnd, 360 CreateTimeEnd: createTimeEnd,
354 }) 361 })
@@ -5,7 +5,6 @@ import ( @@ -5,7 +5,6 @@ import (
5 "encoding/hex" 5 "encoding/hex"
6 "errors" 6 "errors"
7 "fmt" 7 "fmt"
8 - "github.com/beego/beego/v2/client/httplib"  
9 "os" 8 "os"
10 "path" 9 "path"
11 "regexp" 10 "regexp"
@@ -14,6 +13,8 @@ import ( @@ -14,6 +13,8 @@ import (
14 "time" 13 "time"
15 "unicode/utf8" 14 "unicode/utf8"
16 15
  16 + "github.com/beego/beego/v2/client/httplib"
  17 +
17 "github.com/360EntSecGroup-Skylar/excelize/v2" 18 "github.com/360EntSecGroup-Skylar/excelize/v2"
18 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/constant" 19 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/constant"
19 20
@@ -160,15 +161,16 @@ func (postData *postOrderPurposeDelivery) Valid() error { @@ -160,15 +161,16 @@ func (postData *postOrderPurposeDelivery) Valid() error {
160 **/ 161 **/
161 func (c *OrderInfoController) PageListOrderReal() { 162 func (c *OrderInfoController) PageListOrderReal() {
162 type Parameter struct { 163 type Parameter struct {
163 - //SearchText string `json:"searchText"`  
164 PartnerName string `json:"partnerName"` // 合伙人姓名 164 PartnerName string `json:"partnerName"` // 合伙人姓名
165 OrderCode string `json:"orderCode"` // 订单号 165 OrderCode string `json:"orderCode"` // 订单号
166 DeliveryCode string `json:"deliveryCode"` // 发货单号 166 DeliveryCode string `json:"deliveryCode"` // 发货单号
167 - PartnerCategory int `json:"PartnerCategory"` 167 + PartnerCategory int `json:"partnerCategory"` // 合伙人类型id
  168 + PartnerCategoryName string `json:"partnerCategoryName"` // 合伙人类型名称
168 PageSize int `json:"pageSize"` 169 PageSize int `json:"pageSize"`
169 PageNumber int `json:"pageNumber"` 170 PageNumber int `json:"pageNumber"`
170 - UpdateTime []string `json:"updateTime"`  
171 - CreateTime []string `json:"createTime"` 171 + UpdateTime []string `json:"updateTime"` // 订单更新时间
  172 + CreateTime []string `json:"createTime"` // 订单创建时间
  173 + SaleDate []string `json:"saleDate"` // 销售时间
172 } 174 }
173 var ( 175 var (
174 param Parameter 176 param Parameter
@@ -185,6 +187,7 @@ func (c *OrderInfoController) PageListOrderReal() { @@ -185,6 +187,7 @@ func (c *OrderInfoController) PageListOrderReal() {
185 if param.PageSize == 0 { 187 if param.PageSize == 0 {
186 param.PageSize = 20 188 param.PageSize = 20
187 } 189 }
  190 + // 订单更新时间处理
188 var ( 191 var (
189 updateTimeBegin string 192 updateTimeBegin string
190 updateTimeEnd string 193 updateTimeEnd string
@@ -211,6 +214,7 @@ func (c *OrderInfoController) PageListOrderReal() { @@ -211,6 +214,7 @@ func (c *OrderInfoController) PageListOrderReal() {
211 updateTimeEnd = t.Format("2006-01-02 15:04:05-07") 214 updateTimeEnd = t.Format("2006-01-02 15:04:05-07")
212 } 215 }
213 } 216 }
  217 + // 订单创建时间处理
214 var ( 218 var (
215 createTimeBegin string 219 createTimeBegin string
216 createTimeEnd string 220 createTimeEnd string
@@ -237,11 +241,36 @@ func (c *OrderInfoController) PageListOrderReal() { @@ -237,11 +241,36 @@ func (c *OrderInfoController) PageListOrderReal() {
237 createTimeEnd = t.Format("2006-01-02 15:04:05-07") 241 createTimeEnd = t.Format("2006-01-02 15:04:05-07")
238 } 242 }
239 } 243 }
240 - 244 + // 订单销售时间处理
  245 + var (
  246 + saleDateBegin string
  247 + saleDateEnd string
  248 + )
  249 + if len(param.SaleDate) > 0 {
  250 + if len(param.SaleDate[0]) > 0 {
  251 + t, err := time.ParseInLocation("2006-01-02", param.SaleDate[0], time.Local)
  252 + if err != nil {
  253 + c.ResponseError(errors.New("销售开始时间格式错误"))
  254 + return
  255 + }
  256 + saleDateBegin = t.Format("2006-01-02 15:04:05-07")
  257 + }
  258 + }
  259 + if len(param.SaleDate) > 1 {
  260 + if len(param.SaleDate[1]) > 0 {
  261 + t, err := time.ParseInLocation("2006-01-02", param.SaleDate[1], time.Local)
  262 + if err != nil {
  263 + c.ResponseError(errors.New("销售结束时间格式错误"))
  264 + return
  265 + }
  266 + //设定时间边界
  267 + t = t.Add(86399 * time.Second)
  268 + saleDateEnd = t.Format("2006-01-02 15:04:05-07")
  269 + }
  270 + }
241 companyId := c.GetUserCompany() 271 companyId := c.GetUserCompany()
242 orderSrv := orderService.NewOrderInfoService(nil) 272 orderSrv := orderService.NewOrderInfoService(nil)
243 - orderinfos, cnt, err := orderSrv.PageListOrderBase(orderQuery.ListOrderBaseQuery{  
244 - //PartnerOrCode: param.SearchText, 273 + orderInfos, cnt, err := orderSrv.PageListOrderBase(orderQuery.ListOrderBaseQuery{
245 PartnerName: param.PartnerName, 274 PartnerName: param.PartnerName,
246 OrderCode: param.OrderCode, 275 OrderCode: param.OrderCode,
247 DeliveryCode: param.DeliveryCode, 276 DeliveryCode: param.DeliveryCode,
@@ -250,16 +279,19 @@ func (c *OrderInfoController) PageListOrderReal() { @@ -250,16 +279,19 @@ func (c *OrderInfoController) PageListOrderReal() {
250 Offset: (param.PageNumber - 1) * param.PageSize, 279 Offset: (param.PageNumber - 1) * param.PageSize,
251 CompanyId: companyId, 280 CompanyId: companyId,
252 PartnerCategory: param.PartnerCategory, 281 PartnerCategory: param.PartnerCategory,
  282 + PartnerCategoryName: param.PartnerCategoryName,
253 UpdateTimeBegin: updateTimeBegin, 283 UpdateTimeBegin: updateTimeBegin,
254 UpdateTimeEnd: updateTimeEnd, 284 UpdateTimeEnd: updateTimeEnd,
255 CreateTimeBegin: createTimeBegin, 285 CreateTimeBegin: createTimeBegin,
256 CreateTimeEnd: createTimeEnd, 286 CreateTimeEnd: createTimeEnd,
  287 + SaleDateBegin: saleDateBegin,
  288 + SaleDateEnd: saleDateEnd,
257 }) 289 })
258 if err != nil { 290 if err != nil {
259 c.ResponseError(err) 291 c.ResponseError(err)
260 return 292 return
261 } 293 }
262 - c.ResponsePageList(orderinfos, cnt, param.PageNumber) 294 + c.ResponsePageList(orderInfos, cnt, param.PageNumber)
263 return 295 return
264 } 296 }
265 297
@@ -299,7 +331,8 @@ func (c *OrderInfoController) GetOrderReal() { @@ -299,7 +331,8 @@ func (c *OrderInfoController) GetOrderReal() {
299 allGoods := []map[string]interface{}{} 331 allGoods := []map[string]interface{}{}
300 for _, v := range orderinfo.Goods { 332 for _, v := range orderinfo.Goods {
301 m := map[string]interface{}{ 333 m := map[string]interface{}{
302 - "id": fmt.Sprint(v.Id), 334 + //"id": fmt.Sprint(v.Id),
  335 + "id": v.Id,
303 "productName": v.GoodName, 336 "productName": v.GoodName,
304 "orderNum": v.PlanGoodNumber, 337 "orderNum": v.PlanGoodNumber,
305 "univalence": v.Price, 338 "univalence": v.Price,
@@ -330,8 +363,9 @@ func (c *OrderInfoController) GetOrderReal() { @@ -330,8 +363,9 @@ func (c *OrderInfoController) GetOrderReal() {
330 "orderNumCountControl": "", 363 "orderNumCountControl": "",
331 "orderAmountAdjustmentCountControl": "", 364 "orderAmountAdjustmentCountControl": "",
332 "product": allGoods, 365 "product": allGoods,
333 - "create_time": orderinfo.CreateTime.Local().Format("2006-01-02 15:04:06"),  
334 - "update_time": orderinfo.UpdateTime.Local().Format("2006-01-02 15:04:06"), 366 + "create_time": orderinfo.CreateTime.Local().Format("2006-01-02 15:04:05"),
  367 + "update_time": orderinfo.UpdateTime.Local().Format("2006-01-02 15:04:05"),
  368 + "saleDate": orderinfo.SaleDate.Local().Format("2006-01-02 15:04:05"),
335 "partnerCategoryId": orderinfo.PartnerCategory.Id, 369 "partnerCategoryId": orderinfo.PartnerCategory.Id,
336 "partnerCategoryName": orderinfo.PartnerCategory.Name, 370 "partnerCategoryName": orderinfo.PartnerCategory.Name,
337 } 371 }
@@ -350,6 +384,7 @@ type postRealOrderDetail struct { @@ -350,6 +384,7 @@ type postRealOrderDetail struct {
350 postPurposeOrderDetail 384 postPurposeOrderDetail
351 PartnerCategoryId int64 `json:"partnerCategoryId"` 385 PartnerCategoryId int64 `json:"partnerCategoryId"`
352 ShipmentsId string `json:"shipmentsId"` //发货单号 386 ShipmentsId string `json:"shipmentsId"` //发货单号
  387 + SaleDate string `json:"saleDate"` // 销售日期
353 } 388 }
354 389
355 func (postData *postRealOrderDetail) Valid() error { 390 func (postData *postRealOrderDetail) Valid() error {
@@ -380,10 +415,18 @@ func (c *OrderInfoController) UpdateOrderReal() { @@ -380,10 +415,18 @@ func (c *OrderInfoController) UpdateOrderReal() {
380 return 415 return
381 } 416 }
382 var orderDataReturn *domain.OrderBase 417 var orderDataReturn *domain.OrderBase
  418 + saleDate, err := time.ParseInLocation("2006-01-02 15:04:05", param.SaleDate, time.Local)
  419 + saleDateWithTz := time.Date(saleDate.Year(), saleDate.Month(), saleDate.Day(), time.Now().Hour(), time.Now().Minute(), time.Now().Second(), time.Now().Nanosecond(), time.Local)
  420 +
  421 + if err != nil {
  422 + e := lib.ThrowError(lib.ARG_ERROR, err.Error())
  423 + c.ResponseError(e)
  424 + return
  425 + }
383 if param.Id == 0 { 426 if param.Id == 0 {
384 - orderDataReturn, err = c.addOrderReal(param) 427 + orderDataReturn, err = c.addOrderReal(param, saleDateWithTz)
385 } else { 428 } else {
386 - err = c.editOrderReal(param) 429 + err = c.editOrderReal(param, saleDateWithTz)
387 } 430 }
388 if err != nil { 431 if err != nil {
389 c.ResponseError(err) 432 c.ResponseError(err)
@@ -399,7 +442,7 @@ func (c *OrderInfoController) UpdateOrderReal() { @@ -399,7 +442,7 @@ func (c *OrderInfoController) UpdateOrderReal() {
399 return 442 return
400 } 443 }
401 444
402 -func (c *OrderInfoController) addOrderReal(param postRealOrderDetail) (*domain.OrderBase, error) { 445 +func (c *OrderInfoController) addOrderReal(param postRealOrderDetail, saleDate time.Time) (*domain.OrderBase, error) {
403 orderSrv := orderService.NewOrderInfoService(nil) 446 orderSrv := orderService.NewOrderInfoService(nil)
404 newGoods := []orderCmd.OrderGoodData{} 447 newGoods := []orderCmd.OrderGoodData{}
405 for _, v := range param.Product { 448 for _, v := range param.Product {
@@ -423,12 +466,13 @@ func (c *OrderInfoController) addOrderReal(param postRealOrderDetail) (*domain.O @@ -423,12 +466,13 @@ func (c *OrderInfoController) addOrderReal(param postRealOrderDetail) (*domain.O
423 Goods: newGoods, 466 Goods: newGoods,
424 CompanyId: companyId, 467 CompanyId: companyId,
425 PartnerCategory: param.PartnerCategoryId, 468 PartnerCategory: param.PartnerCategoryId,
  469 + SaleDate: saleDate,
426 } 470 }
427 orderData, err := orderSrv.CreateNewOrder(createcmd) 471 orderData, err := orderSrv.CreateNewOrder(createcmd)
428 return orderData, err 472 return orderData, err
429 } 473 }
430 474
431 -func (c *OrderInfoController) editOrderReal(param postRealOrderDetail) error { 475 +func (c *OrderInfoController) editOrderReal(param postRealOrderDetail, saleDate time.Time) error {
432 476
433 newGoods := []orderCmd.OrderGoodData{} 477 newGoods := []orderCmd.OrderGoodData{}
434 for _, v := range param.Product { 478 for _, v := range param.Product {
@@ -453,6 +497,7 @@ func (c *OrderInfoController) editOrderReal(param postRealOrderDetail) error { @@ -453,6 +497,7 @@ func (c *OrderInfoController) editOrderReal(param postRealOrderDetail) error {
453 Goods: newGoods, 497 Goods: newGoods,
454 CompanyId: companyId, 498 CompanyId: companyId,
455 PartnerCategory: param.PartnerCategoryId, 499 PartnerCategory: param.PartnerCategoryId,
  500 + SaleDate: saleDate,
456 } 501 }
457 orderSrv := orderService.NewOrderInfoService(nil) 502 orderSrv := orderService.NewOrderInfoService(nil)
458 _, err := orderSrv.UpdateOrderData(updatecmd) 503 _, err := orderSrv.UpdateOrderData(updatecmd)
@@ -527,17 +572,20 @@ func (c *OrderInfoController) RemoveOrderReal() { @@ -527,17 +572,20 @@ func (c *OrderInfoController) RemoveOrderReal() {
527 572
528 //ListOrderForExcel excel 导出实际订单的列表 573 //ListOrderForExcel excel 导出实际订单的列表
529 func (c *OrderInfoController) ListOrderForExcel() { 574 func (c *OrderInfoController) ListOrderForExcel() {
530 - type Parameter struct {  
531 - //SearchText string `json:"searchText"`  
532 - PartnerName string `json:"partnerName"` // 合伙人姓名  
533 - OrderCode string `json:"orderCode"` // 订单号  
534 - DeliveryCode string `json:"deliveryCode"` // 发货单号  
535 - PartnerCategory int `json:"PartnerCategory"`  
536 - UpdateTime []string `json:"updateTime"`  
537 - CreateTime []string `json:"createTime"`  
538 - } 575 + //type Parameter struct {
  576 + // PartnerName string `json:"partnerName"` // 合伙人姓名
  577 + // OrderCode string `json:"orderCode"` // 订单号
  578 + // DeliveryCode string `json:"deliveryCode"` // 发货单号
  579 + // PartnerCategory int `json:"partnerCategory"` // 合伙人类型
  580 + // PartnerCategoryName string `json:"partnerCategoryName"` // 合伙人类型名称
  581 + // UpdateTime []string `json:"updateTime"` // 更新时间
  582 + // CreateTime []string `json:"createTime"` // 创建时间
  583 + // SaleDate []string `json:"saleDate"` // 销售日期
  584 + //}
  585 +
539 var ( 586 var (
540 - param Parameter 587 + //param Parameter
  588 + param orderQuery.ListOrderForExcelQuery
541 err error 589 err error
542 ) 590 )
543 if err = c.BindJsonData(&param); err != nil { 591 if err = c.BindJsonData(&param); err != nil {
@@ -545,13 +593,19 @@ func (c *OrderInfoController) ListOrderForExcel() { @@ -545,13 +593,19 @@ func (c *OrderInfoController) ListOrderForExcel() {
545 c.ResponseError(errors.New("json数据解析失败")) 593 c.ResponseError(errors.New("json数据解析失败"))
546 return 594 return
547 } 595 }
  596 + if param.Type != "ORDER_BASE" {
  597 + logs.Error(err)
  598 + c.ResponseError(errors.New("错误的操作类型"))
  599 + return
  600 + }
  601 + // 订单更新时间
548 var ( 602 var (
549 updateTimeBegin string 603 updateTimeBegin string
550 updateTimeEnd string 604 updateTimeEnd string
551 ) 605 )
552 - if len(param.UpdateTime) > 0 {  
553 - if len(param.UpdateTime[0]) > 0 {  
554 - t, err := time.ParseInLocation("2006-01-02", param.UpdateTime[0], time.Local) 606 + if len(param.Where.UpdateTime) > 0 {
  607 + if len(param.Where.UpdateTime[0]) > 0 {
  608 + t, err := time.ParseInLocation("2006-01-02", param.Where.UpdateTime[0], time.Local)
555 if err != nil { 609 if err != nil {
556 c.ResponseError(errors.New("UpdateTimeBegin 时间格式错误")) 610 c.ResponseError(errors.New("UpdateTimeBegin 时间格式错误"))
557 return 611 return
@@ -559,9 +613,9 @@ func (c *OrderInfoController) ListOrderForExcel() { @@ -559,9 +613,9 @@ func (c *OrderInfoController) ListOrderForExcel() {
559 updateTimeBegin = t.Format("2006-01-02 15:04:05-07") 613 updateTimeBegin = t.Format("2006-01-02 15:04:05-07")
560 } 614 }
561 } 615 }
562 - if len(param.UpdateTime) > 1 {  
563 - if len(param.UpdateTime[1]) > 0 {  
564 - t, err := time.ParseInLocation("2006-01-02", param.UpdateTime[1], time.Local) 616 + if len(param.Where.UpdateTime) > 1 {
  617 + if len(param.Where.UpdateTime[1]) > 0 {
  618 + t, err := time.ParseInLocation("2006-01-02", param.Where.UpdateTime[1], time.Local)
565 if err != nil { 619 if err != nil {
566 c.ResponseError(errors.New("UpdateTimeEnd 时间格式错误")) 620 c.ResponseError(errors.New("UpdateTimeEnd 时间格式错误"))
567 return 621 return
@@ -571,13 +625,14 @@ func (c *OrderInfoController) ListOrderForExcel() { @@ -571,13 +625,14 @@ func (c *OrderInfoController) ListOrderForExcel() {
571 updateTimeEnd = t.Format("2006-01-02 15:04:05-07") 625 updateTimeEnd = t.Format("2006-01-02 15:04:05-07")
572 } 626 }
573 } 627 }
  628 + // 订单创建时间
574 var ( 629 var (
575 createTimeBegin string 630 createTimeBegin string
576 createTimeEnd string 631 createTimeEnd string
577 ) 632 )
578 - if len(param.CreateTime) > 0 {  
579 - if len(param.CreateTime[0]) > 0 {  
580 - t, err := time.ParseInLocation("2006-01-02", param.CreateTime[0], time.Local) 633 + if len(param.Where.CreateTime) > 0 {
  634 + if len(param.Where.CreateTime[0]) > 0 {
  635 + t, err := time.ParseInLocation("2006-01-02", param.Where.CreateTime[0], time.Local)
581 if err != nil { 636 if err != nil {
582 c.ResponseError(errors.New("UpdateTimeBegin 时间格式错误")) 637 c.ResponseError(errors.New("UpdateTimeBegin 时间格式错误"))
583 return 638 return
@@ -585,9 +640,9 @@ func (c *OrderInfoController) ListOrderForExcel() { @@ -585,9 +640,9 @@ func (c *OrderInfoController) ListOrderForExcel() {
585 createTimeBegin = t.Format("2006-01-02 15:04:05-07") 640 createTimeBegin = t.Format("2006-01-02 15:04:05-07")
586 } 641 }
587 } 642 }
588 - if len(param.CreateTime) > 1 {  
589 - if len(param.CreateTime[1]) > 0 {  
590 - t, err := time.ParseInLocation("2006-01-02", param.CreateTime[1], time.Local) 643 + if len(param.Where.CreateTime) > 1 {
  644 + if len(param.Where.CreateTime[1]) > 0 {
  645 + t, err := time.ParseInLocation("2006-01-02", param.Where.CreateTime[1], time.Local)
591 if err != nil { 646 if err != nil {
592 c.ResponseError(errors.New("UpdateTimeEnd 时间格式错误")) 647 c.ResponseError(errors.New("UpdateTimeEnd 时间格式错误"))
593 return 648 return
@@ -597,21 +652,51 @@ func (c *OrderInfoController) ListOrderForExcel() { @@ -597,21 +652,51 @@ func (c *OrderInfoController) ListOrderForExcel() {
597 createTimeEnd = t.Format("2006-01-02 15:04:05-07") 652 createTimeEnd = t.Format("2006-01-02 15:04:05-07")
598 } 653 }
599 } 654 }
600 - 655 + // 订单销售时间处理
  656 + var (
  657 + saleDateBegin string
  658 + saleDateEnd string
  659 + )
  660 + if len(param.Where.SaleDate) > 0 {
  661 + if len(param.Where.SaleDate[0]) > 0 {
  662 + t, err := time.ParseInLocation("2006-01-02", param.Where.SaleDate[0], time.Local)
  663 + if err != nil {
  664 + c.ResponseError(errors.New("销售开始时间格式错误"))
  665 + return
  666 + }
  667 + saleDateBegin = t.Format("2006-01-02 15:04:05-07")
  668 + }
  669 + }
  670 + if len(param.Where.SaleDate) > 1 {
  671 + if len(param.Where.SaleDate[1]) > 0 {
  672 + t, err := time.ParseInLocation("2006-01-02", param.Where.SaleDate[1], time.Local)
  673 + if err != nil {
  674 + c.ResponseError(errors.New("销售结束时间格式错误"))
  675 + return
  676 + }
  677 + //设定时间边界
  678 + t = t.Add(86399 * time.Second)
  679 + saleDateEnd = t.Format("2006-01-02 15:04:05-07")
  680 + }
  681 + }
601 companyId := c.GetUserCompany() 682 companyId := c.GetUserCompany()
  683 + uid := c.GetUserId()
602 orderSrv := orderService.NewOrderInfoService(nil) 684 orderSrv := orderService.NewOrderInfoService(nil)
603 - orderinfos, columns, err := orderSrv.ListOrderForExcel(orderQuery.ListOrderBaseQuery{  
604 - //PartnerOrCode: param.SearchText,  
605 - PartnerName: param.PartnerName,  
606 - OrderCode: param.OrderCode,  
607 - DeliveryCode: param.DeliveryCode, 685 + orderInfos, columns, err := orderSrv.ListOrderForExcel(orderQuery.ListOrderBaseQuery{
  686 + PartnerName: param.Where.PartnerName,
  687 + OrderCode: param.Where.OrderCode,
  688 + DeliveryCode: param.Where.DeliveryCode,
608 OrderType: domain.OrderReal, 689 OrderType: domain.OrderReal,
609 CompanyId: companyId, 690 CompanyId: companyId,
610 - PartnerCategory: param.PartnerCategory, 691 + Uid: uid,
  692 + PartnerCategory: param.Where.PartnerCategory,
  693 + PartnerCategoryName: param.Where.PartnerCategoryName,
611 UpdateTimeBegin: updateTimeBegin, 694 UpdateTimeBegin: updateTimeBegin,
612 UpdateTimeEnd: updateTimeEnd, 695 UpdateTimeEnd: updateTimeEnd,
613 CreateTimeBegin: createTimeBegin, 696 CreateTimeBegin: createTimeBegin,
614 CreateTimeEnd: createTimeEnd, 697 CreateTimeEnd: createTimeEnd,
  698 + SaleDateBegin: saleDateBegin,
  699 + SaleDateEnd: saleDateEnd,
615 }) 700 })
616 if err != nil { 701 if err != nil {
617 c.ResponseError(err) 702 c.ResponseError(err)
@@ -627,8 +712,8 @@ func (c *OrderInfoController) ListOrderForExcel() { @@ -627,8 +712,8 @@ func (c *OrderInfoController) ListOrderForExcel() {
627 } 712 }
628 excelMaker := exceltool.NewExcelMaker() 713 excelMaker := exceltool.NewExcelMaker()
629 excelMaker.SetListHead(excelHeaders) 714 excelMaker.SetListHead(excelHeaders)
630 - excelMaker.MakeListExcel(orderinfos)  
631 - c.ResponseExcelByFile(c.Ctx, excelMaker) 715 + _ = excelMaker.MakeListExcel(orderInfos)
  716 + _ = c.ResponseExcelByFile(c.Ctx, excelMaker)
632 return 717 return
633 } 718 }
634 719
@@ -667,7 +752,7 @@ func (c *OrderInfoController) DownloadTemplate() { @@ -667,7 +752,7 @@ func (c *OrderInfoController) DownloadTemplate() {
667 } 752 }
668 753
669 // 获取导入模板 754 // 获取导入模板
670 - req := httplib.Get("http://suplus-file-dev.fjmaimaimai.com/upload/file/2021010803305336443.xlsx") 755 + req := httplib.Get("http://suplus-file-dev.fjmaimaimai.com/upload/file/2021020111293523855.xlsx")
671 err = req.ToFile(constant.IMPORT_EXCEL) 756 err = req.ToFile(constant.IMPORT_EXCEL)
672 if err != nil { 757 if err != nil {
673 logs.Error("could not save to file: ", err) 758 logs.Error("could not save to file: ", err)
@@ -682,7 +767,7 @@ func (c *OrderInfoController) DownloadTemplate() { @@ -682,7 +767,7 @@ func (c *OrderInfoController) DownloadTemplate() {
682 } else { 767 } else {
683 logs.Info(resp) 768 logs.Info(resp)
684 ret = map[string]interface{}{ 769 ret = map[string]interface{}{
685 - "url": "http://" + c.Ctx.Request.Host + "/mmm-partnermg/download/订单数据模板.xlsx", 770 + "url": "https://" + c.Ctx.Request.Host + "/" + constant.APP_NAME + "/download/订单数据模板.xlsx",
686 } 771 }
687 c.ResponseData(ret) 772 c.ResponseData(ret)
688 } 773 }
@@ -708,8 +793,8 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -708,8 +793,8 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
708 // 返回字段定义 793 // 返回字段定义
709 ret := map[string]interface{}{} 794 ret := map[string]interface{}{}
710 795
711 - // 返回信息表头定义 0: 订单号, 1: 发货单号, 2: 客户名称, 3: 订单区域, 4: 编号, 5: 合伙人, 6: 类型, 7: 业务员抽成比例, 8: 产品名称, 9: 数量, 10: 单价, 11: 合伙人分红比例  
712 - var tableHeader = []string{"错误详情", "行号", "订单号", "发货单号", "客户名称", "订单区域", "编号", "合伙人", "类型", "业务员抽成比例", "产品名称", "数量", "单价", "合伙人分红比例"} 796 + // 返回信息表头定义 0: 订单号, 1: 发货单号, 2: 客户名称, 3: 订单区域, 4: 销售日期, 5: 编号, 6: 合伙人, 7: 类型, 8: 业务员抽成比例, 9: 产品名称, 10: 数量, 11: 单价, 12: 合伙人分红比例
  797 + var tableHeader = []string{"错误详情", "行号", "订单号", "发货单号", "客户名称", "订单区域", "销售日期", "编号", "合伙人", "类型", "业务员抽成比例", "产品名称", "数量", "单价", "合伙人分红比例"}
713 798
714 // 文件后缀名校验 799 // 文件后缀名校验
715 ext := path.Ext(h.Filename) 800 ext := path.Ext(h.Filename)
@@ -781,7 +866,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -781,7 +866,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
781 nullCell := make([]interface{}, 0) 866 nullCell := make([]interface{}, 0)
782 var myRow []string 867 var myRow []string
783 for j, _ := range row { 868 for j, _ := range row {
784 - if j != 7 { // 业务员抽成比例非必填 869 + if j != 8 { // 业务员抽成比例非必填
785 if row[j] == "" || row[j] == " " { // 空字符补位 870 if row[j] == "" || row[j] == " " { // 空字符补位
786 tmpRow[j] = "" 871 tmpRow[j] = ""
787 col := strconv.Itoa(j + 1) 872 col := strconv.Itoa(j + 1)
@@ -847,7 +932,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -847,7 +932,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
847 col := strconv.Itoa(j + 1) 932 col := strconv.Itoa(j + 1)
848 933
849 switch j { 934 switch j {
850 - case 0, 1, 2, 3, 4, 5, 8: // 订单号、发货单号、客户名称、订单区域、编号、合伙人、产品名称长度校验 935 + case 0, 1, 2, 3, 5, 6, 9: // 订单号、发货单号、客户名称、订单区域、编号、合伙人、产品名称长度校验
851 { 936 {
852 cellStr := strings.TrimSpace(cell) 937 cellStr := strings.TrimSpace(cell)
853 lenCellStr := utf8.RuneCountInString(cellStr) 938 lenCellStr := utf8.RuneCountInString(cellStr)
@@ -860,7 +945,19 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -860,7 +945,19 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
860 myRow = tmpRow 945 myRow = tmpRow
861 } 946 }
862 } 947 }
863 - case 6: // 合伙人类型校验(事业合伙、业务合伙、研发合伙、业务-产品应用合伙) 948 + case 4: // 销售日期格式和有效性校验
  949 + {
  950 + regexpStr := `(\d{4})/(\d{2})/(\d{2})`
  951 + ok := regexp.MustCompile(regexpStr).MatchString(cell)
  952 + if !ok {
  953 + var tmpRow []string
  954 + tmpRow = append(tmpRow, "第"+r+"行第"+col+"列销售日期格式错误,请输入正确的销售日期") // 错误信息
  955 + tmpRow = append(tmpRow, r) // 行号
  956 + tmpRow = append(tmpRow, row...) // 错误行数据
  957 + myRow = tmpRow
  958 + }
  959 + }
  960 + case 7: // 合伙人类型校验(事业合伙、业务合伙、研发合伙、业务-产品应用合伙)
864 { 961 {
865 if !utils.IsContain(partnerType, cell) { 962 if !utils.IsContain(partnerType, cell) {
866 var tmpRow []string 963 var tmpRow []string
@@ -870,7 +967,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -870,7 +967,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
870 myRow = tmpRow 967 myRow = tmpRow
871 } 968 }
872 } 969 }
873 - case 7: // 业务员抽成比例,非必填,精确到小数点后两位 970 + case 8: // 业务员抽成比例,非必填,精确到小数点后两位
874 { 971 {
875 if len(cell) > 0 { 972 if len(cell) > 0 {
876 973
@@ -905,7 +1002,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -905,7 +1002,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
905 } 1002 }
906 } 1003 }
907 } 1004 }
908 - case 9: // 数量不超过16位正整数 1005 + case 10: // 产品数量不超过16位正整数
909 { 1006 {
910 //参数类型转换 1007 //参数类型转换
911 orderNum, err := strconv.ParseInt(cell, 10, 64) 1008 orderNum, err := strconv.ParseInt(cell, 10, 64)
@@ -926,7 +1023,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -926,7 +1023,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
926 myRow = tmpRow 1023 myRow = tmpRow
927 } 1024 }
928 } 1025 }
929 - case 10: // 单价,精确到小数点后两位,小数点左侧最多可输入16位数字 1026 + case 11: // 单价,精确到小数点后两位,小数点左侧最多可输入16位数字
930 { 1027 {
931 1028
932 // 参数类型转换 1029 // 参数类型转换
@@ -948,7 +1045,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -948,7 +1045,7 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
948 myRow = tmpRow 1045 myRow = tmpRow
949 } 1046 }
950 } 1047 }
951 - case 11: // 合伙人分红比例,精确到小数点后两位 1048 + case 12: // 合伙人分红比例,精确到小数点后两位
952 { 1049 {
953 //参数类型转换 1050 //参数类型转换
954 partnerRatio, parseErr := strconv.ParseFloat(cell, 64) 1051 partnerRatio, parseErr := strconv.ParseFloat(cell, 64)
@@ -1011,29 +1108,30 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -1011,29 +1108,30 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
1011 var orderCommands = make(map[string]*orderCmd.CreateOrderCommand, 0) 1108 var orderCommands = make(map[string]*orderCmd.CreateOrderCommand, 0)
1012 for i, row := range rows { 1109 for i, row := range rows {
1013 if i > 2 && len(row) == constant.EXCEL_COLUMN { 1110 if i > 2 && len(row) == constant.EXCEL_COLUMN {
1014 - hashValue := md5.Sum([]byte(row[0] + row[1] + row[4] + row[6])) // 根据:订单号+发货单号+合伙人编号+合伙类型计算哈希值 1111 + hashValue := md5.Sum([]byte(row[0] + row[1] + row[5] + row[7])) // 根据:订单号+发货单号+合伙人编号+合伙类型计算哈希值
1015 hashString := hex.EncodeToString(hashValue[:]) 1112 hashString := hex.EncodeToString(hashValue[:])
1016 1113
1017 if _, ok := orderCommands[hashString]; !ok { 1114 if _, ok := orderCommands[hashString]; !ok {
1018 - //订单相关,0: 订单号, 1: 发货单号, 2: 客户名称, 3: 订单区域, 4: 编号, 5: 合伙人, 6: 类型, 7: 业务抽成比例,  
1019 - sbPercent, _ := strconv.ParseFloat(row[7], 64) //业务抽成比例 1115 + //订单相关,0: 订单号, 1: 发货单号, 2: 客户名称, 3: 订单区域, 4: 销售日期, 5: 编号, 6: 合伙人, 7: 类型, 8: 业务抽成比例,
  1116 + sbPercent, _ := strconv.ParseFloat(row[8], 64) //业务抽成比例
1020 1117
1021 - //产品相关,8: 产品名称, 9: 数量, 10: 单价, 11: 合伙人分红比例  
1022 - amount, _ := strconv.ParseInt(row[9], 10, 64) // 数量  
1023 - price, _ := strconv.ParseFloat(row[10], 64) // 单价  
1024 - percent, _ := strconv.ParseFloat(row[11], 64) // 合伙人分红比例 1118 + //产品相关,9: 产品名称, 10: 数量, 11: 单价, 12: 合伙人分红比例
  1119 + amount, _ := strconv.ParseInt(row[10], 10, 64) // 数量
  1120 + price, _ := strconv.ParseFloat(row[11], 64) // 单价
  1121 + percent, _ := strconv.ParseFloat(row[12], 64) // 合伙人分红比例
1025 1122
1026 // 获取partnerId 1123 // 获取partnerId
1027 var partnerInfo *domain.PartnerInfo 1124 var partnerInfo *domain.PartnerInfo
1028 1125
  1126 + // 5: 合伙人编号
1029 orderQueryData := orderQuery.GetPartnerIdQuery{ 1127 orderQueryData := orderQuery.GetPartnerIdQuery{
1030 - Code: row[4], 1128 + Code: row[5],
1031 PartnerCategory: 0, 1129 PartnerCategory: 0,
1032 CompanyId: companyId, 1130 CompanyId: companyId,
1033 } 1131 }
1034 1132
1035 - // 1: 事业合伙、2: 业务合伙、3: 研发合伙、4: 业务-产品应用合伙  
1036 - switch row[6] { 1133 + // 7: 合伙人类型 1: 事业合伙、2: 业务合伙、3: 研发合伙、4: 业务-产品应用合伙
  1134 + switch row[7] {
1037 case "事业合伙": 1135 case "事业合伙":
1038 orderQueryData.PartnerCategory = 1 1136 orderQueryData.PartnerCategory = 1
1039 case "业务合伙": 1137 case "业务合伙":
@@ -1046,6 +1144,22 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -1046,6 +1144,22 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
1046 orderQueryData.PartnerCategory = 0 1144 orderQueryData.PartnerCategory = 0
1047 } 1145 }
1048 1146
  1147 + // 销售日期时间格式转换
  1148 + timeValue, err := time.ParseInLocation("2006/01/02", row[4], time.Local)
  1149 + if err != nil {
  1150 + var tmpRow []string
  1151 + tmpRow = append(tmpRow, "无效的销售日期") // 错误信息
  1152 + s := strconv.Itoa(i + 1)
  1153 + tmpRow = append(tmpRow, s) // 行号
  1154 + tmpRow = append(tmpRow, row...) // 错误行数据
  1155 + partnerDataList = append(partnerDataList, tmpRow)
  1156 + break
  1157 + }
  1158 +
  1159 + saleDateWithTz := time.Date(timeValue.Year(), timeValue.Month(), timeValue.Day(), time.Now().Hour(), time.Now().Minute(), time.Now().Second(), time.Now().Nanosecond(), time.Local)
  1160 +
  1161 + fmt.Print("销售日期:", saleDateWithTz, "\n")
  1162 +
1049 // 初始化建订单命令集 1163 // 初始化建订单命令集
1050 orderCommands[hashString] = &orderCmd.CreateOrderCommand{ 1164 orderCommands[hashString] = &orderCmd.CreateOrderCommand{
1051 OrderType: 0, 1165 OrderType: 0,
@@ -1053,11 +1167,12 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -1053,11 +1167,12 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
1053 DeliveryCode: row[1], 1167 DeliveryCode: row[1],
1054 BuyerName: row[2], 1168 BuyerName: row[2],
1055 OrderRegion: row[3], 1169 OrderRegion: row[3],
  1170 + SaleDate: saleDateWithTz,
1056 PartnerId: 0, // 根据合伙人类型+合伙人编号查找合伙人id 1171 PartnerId: 0, // 根据合伙人类型+合伙人编号查找合伙人id
1057 SalesmanBonusPercent: sbPercent, 1172 SalesmanBonusPercent: sbPercent,
1058 Goods: []orderCmd.OrderGoodData{ 1173 Goods: []orderCmd.OrderGoodData{
1059 { 1174 {
1060 - GoodName: row[8], 1175 + GoodName: row[9],
1061 PlanGoodNumber: int(amount), 1176 PlanGoodNumber: int(amount),
1062 Price: price, 1177 Price: price,
1063 PartnerBonusPercent: percent, 1178 PartnerBonusPercent: percent,
@@ -1082,14 +1197,14 @@ func (c *OrderInfoController) ImportOrderFromExcel() { @@ -1082,14 +1197,14 @@ func (c *OrderInfoController) ImportOrderFromExcel() {
1082 orderCommands[hashString].PartnerId = partnerInfo.Partner.Id 1197 orderCommands[hashString].PartnerId = partnerInfo.Partner.Id
1083 } 1198 }
1084 } else { 1199 } else {
1085 - //产品相关,8: 产品名称, 9: 数量, 10: 单价, 11: 合伙人分红比例  
1086 - amount, _ := strconv.ParseInt(row[9], 10, 64) // 数量  
1087 - price, _ := strconv.ParseFloat(row[10], 64) // 单价  
1088 - percent, _ := strconv.ParseFloat(row[11], 64) // 合伙人分红比例 1200 + //产品相关,9: 产品名称, 10: 数量, 11: 单价, 12: 合伙人分红比例
  1201 + amount, _ := strconv.ParseInt(row[10], 10, 64) // 数量
  1202 + price, _ := strconv.ParseFloat(row[11], 64) // 单价
  1203 + percent, _ := strconv.ParseFloat(row[12], 64) // 合伙人分红比例
1089 1204
1090 // 记录同一笔订单产品 1205 // 记录同一笔订单产品
1091 orderCommands[hashString].Goods = append(orderCommands[hashString].Goods, orderCmd.OrderGoodData{ 1206 orderCommands[hashString].Goods = append(orderCommands[hashString].Goods, orderCmd.OrderGoodData{
1092 - GoodName: row[8], 1207 + GoodName: row[9],
1093 PlanGoodNumber: int(amount), 1208 PlanGoodNumber: int(amount),
1094 Price: price, 1209 Price: price,
1095 PartnerBonusPercent: percent, 1210 PartnerBonusPercent: percent,
  1 +package routers
  2 +
  3 +import (
  4 + "github.com/astaxie/beego"
  5 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/port/beego/controllers"
  6 +)
  7 +
  8 +func init() {
  9 + beego.Router("/column-settings/", &controllers.ColumnSettingController{}, "Post:CreateColumnSetting")
  10 + beego.Router("/column-settings/:columnSettingId", &controllers.ColumnSettingController{}, "Put:UpdateColumnSetting")
  11 + beego.Router("/column-settings/:columnSettingId", &controllers.ColumnSettingController{}, "Get:GetColumnSetting")
  12 + beego.Router("/column-settings/:columnSettingId", &controllers.ColumnSettingController{}, "Delete:RemoveColumnSetting")
  13 + beego.Router("/column-settings/", &controllers.ColumnSettingController{}, "Post:ResetColumn")
  14 + beego.Router("/column-settings/", &controllers.ColumnSettingController{}, "Get:ListColumnSetting")
  15 +}
@@ -43,6 +43,11 @@ func init() { @@ -43,6 +43,11 @@ func init() {
43 beego.NSRouter("/actual/close", &controllers.OrderInfoController{}, "POST:OrderDisable"), 43 beego.NSRouter("/actual/close", &controllers.OrderInfoController{}, "POST:OrderDisable"),
44 beego.NSRouter("/fileImportTemplate", &controllers.OrderInfoController{}, "POST:DownloadTemplate"), // 下载导入模板 44 beego.NSRouter("/fileImportTemplate", &controllers.OrderInfoController{}, "POST:DownloadTemplate"), // 下载导入模板
45 beego.NSRouter("/fileImport", &controllers.OrderInfoController{}, "POST:ImportOrderFromExcel"), // 导入订单数据 45 beego.NSRouter("/fileImport", &controllers.OrderInfoController{}, "POST:ImportOrderFromExcel"), // 导入订单数据
  46 + beego.NSRouter("/actual/listColumn", &controllers.ColumnSettingController{}, "POST:GetColumnSetting"), // 返回栏目设置列表
  47 + beego.NSRouter("/actual/updateColumn", &controllers.ColumnSettingController{}, "POST:UpdateColumnSetting"), // 更新栏目设置
  48 + beego.NSRouter("/actual/resetColumn", &controllers.ColumnSettingController{}, "POST:ResetColumn"), // 重置栏目设置
  49 + beego.NSRouter("/actual/createColumn", &controllers.ColumnSettingController{}, "POST:CreateColumnSetting"), // 创建栏目设置,测试用
  50 + beego.NSRouter("/actual/listDefaultColumn", &controllers.ColumnSettingController{}, "POST:ListDefaultColumnSetting"), // 返回默认栏目设置
46 ), 51 ),
47 beego.NSNamespace("/common", 52 beego.NSNamespace("/common",
48 beego.NSRouter("/partner", &controllers.CommonController{}, "POST:GetPartnerList"), 53 beego.NSRouter("/partner", &controllers.CommonController{}, "POST:GetPartnerList"),
  1 +package column_setting
  2 +
  3 +import (
  4 + "net/http"
  5 + "net/http/httptest"
  6 + "testing"
  7 +
  8 + "github.com/astaxie/beego"
  9 + . "github.com/onsi/ginkgo"
  10 + . "github.com/onsi/gomega"
  11 + _ "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg"
  12 + _ "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/port/beego"
  13 +)
  14 +
  15 +func TestColumnSetting(t *testing.T) {
  16 + RegisterFailHandler(Fail)
  17 + RunSpecs(t, "Beego Port ColumnSetting Correlations Test Case Suite")
  18 +}
  19 +
  20 +var handler http.Handler
  21 +var server *httptest.Server
  22 +
  23 +var _ = BeforeSuite(func() {
  24 + handler = beego.BeeApp.Handlers
  25 + server = httptest.NewServer(handler)
  26 +})
  27 +
  28 +var _ = AfterSuite(func() {
  29 + server.Close()
  30 +})
  1 +package column_setting
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + . "github.com/onsi/ginkgo"
  8 + . "github.com/onsi/gomega"
  9 + pG "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg"
  10 +)
  11 +
  12 +var _ = Describe("创建栏目设置增删改查", func() {
  13 + Describe("提交数据创建栏目设置增删改查", func() {
  14 + Context("提交正确的新栏目设置数据", func() {
  15 + It("返回栏目设置数据", func() {
  16 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  17 + body := map[string]interface{}{
  18 + "description": "string",
  19 + "userName": "string",
  20 + }
  21 + httpExpect.POST("/column-settings/").
  22 + WithJSON(body).
  23 + Expect().
  24 + Status(http.StatusOK).
  25 + JSON().
  26 + Object().
  27 + ContainsKey("code").ValueEqual("code", 0).
  28 + ContainsKey("msg").ValueEqual("msg", "ok").
  29 + ContainsKey("data").Value("data").Object().
  30 + ContainsKey("id").ValueNotEqual("id", BeZero())
  31 + })
  32 + })
  33 + })
  34 + AfterEach(func() {
  35 + _, err := pG.DB.Exec("DELETE FROM column_settings WHERE true")
  36 + Expect(err).NotTo(HaveOccurred())
  37 + })
  38 +})
  1 +package column_setting
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + "github.com/go-pg/pg"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("返回栏目设置增删改查", func() {
  14 + var column_settingId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&column_settingId),
  18 + "INSERT INTO column_settings (column_setting_id, company_id, created_at, description, key, uid, updated_at, user_name, value) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
  19 + "testColumnSettingId", "testCompanyId", "testCreatedAt", "testDescription", "testKey", "testUid", "testUpdatedAt", "testUserName", "testValue")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据column_settingId参数返回栏目设置", func() {
  23 + Context("传入有效的column_settingId", func() {
  24 + It("返回栏目设置数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.GET("/column-settings/{columnSettingId}").
  27 + Expect().
  28 + Status(http.StatusOK).
  29 + JSON().
  30 + Object().
  31 + ContainsKey("code").ValueEqual("code", 0).
  32 + ContainsKey("msg").ValueEqual("msg", "ok").
  33 + ContainsKey("data").Value("data").Object()
  34 + })
  35 + })
  36 + })
  37 + AfterEach(func() {
  38 + _, err := pG.DB.Exec("DELETE FROM column_settings WHERE true")
  39 + Expect(err).NotTo(HaveOccurred())
  40 + })
  41 +})
  1 +package column_setting
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + "github.com/go-pg/pg"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("返回栏目设置增删改查列表", func() {
  14 + var column_settingId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&column_settingId),
  18 + "INSERT INTO column_settings (column_setting_id, company_id, created_at, description, key, uid, updated_at, user_name, value) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
  19 + "testColumnSettingId", "testCompanyId", "testCreatedAt", "testDescription", "testKey", "testUid", "testUpdatedAt", "testUserName", "testValue")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据参数返回栏目设置列表", func() {
  23 + Context("传入有效的参数", func() {
  24 + It("返回栏目设置数据列表", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.GET("/column-settings/").
  27 + WithQuery("offset", "int").
  28 + WithQuery("limit", "int").
  29 + Expect().
  30 + Status(http.StatusOK).
  31 + JSON().
  32 + Object().
  33 + ContainsKey("code").ValueEqual("code", 0).
  34 + ContainsKey("msg").ValueEqual("msg", "ok").
  35 + ContainsKey("data").Value("data").Object().
  36 + ContainsKey("count").ValueEqual("count", 1).
  37 + ContainsKey("column_settings").Value("column_settings").Array()
  38 + })
  39 + })
  40 + })
  41 + AfterEach(func() {
  42 + _, err := pG.DB.Exec("DELETE FROM column_settings WHERE true")
  43 + Expect(err).NotTo(HaveOccurred())
  44 + })
  45 +})
  1 +package column_setting
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + "github.com/go-pg/pg"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("移除栏目设置增删改查", func() {
  14 + var column_settingId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&column_settingId),
  18 + "INSERT INTO column_settings (column_setting_id, company_id, created_at, description, key, uid, updated_at, user_name, value) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
  19 + "testColumnSettingId", "testCompanyId", "testCreatedAt", "testDescription", "testKey", "testUid", "testUpdatedAt", "testUserName", "testValue")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据参数移除栏目设置增删改查", func() {
  23 + Context("传入有效的column_settingId", func() {
  24 + It("返回被移除栏目设置的数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.DELETE("/column-settings/{columnSettingId}").
  27 + Expect().
  28 + Status(http.StatusOK).
  29 + JSON().
  30 + Object().
  31 + ContainsKey("code").ValueEqual("code", 0).
  32 + ContainsKey("msg").ValueEqual("msg", "ok").
  33 + ContainsKey("data").Value("data").Object()
  34 + })
  35 + })
  36 + })
  37 + AfterEach(func() {
  38 + _, err := pG.DB.Exec("DELETE FROM column_settings WHERE true")
  39 + Expect(err).NotTo(HaveOccurred())
  40 + })
  41 +})
  1 +package column_setting
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + "github.com/go-pg/pg"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("重置栏目设置", func() {
  14 + var column_settingId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&column_settingId),
  18 + "INSERT INTO column_settings (column_setting_id, company_id, created_at, description, key, uid, updated_at, user_name, value) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
  19 + "testColumnSettingId", "testCompanyId", "testCreatedAt", "testDescription", "testKey", "testUid", "testUpdatedAt", "testUserName", "testValue")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("重置栏目设置", func() {
  23 + Context("", func() {
  24 + It("", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + body := map[string]interface{}{}
  27 + httpExpect.POST("/column-settings/").
  28 + WithJSON(body).
  29 + Expect().
  30 + Status(http.StatusOK).
  31 + JSON().
  32 + Object().
  33 + ContainsKey("code").ValueEqual("code", 0).
  34 + ContainsKey("msg").ValueEqual("msg", "ok").
  35 + ContainsKey("data").Value("data").Object()
  36 + })
  37 + })
  38 + })
  39 + AfterEach(func() {
  40 + _, err := pG.DB.Exec("DELETE FROM column_settings WHERE true")
  41 + Expect(err).NotTo(HaveOccurred())
  42 + })
  43 +})
  1 +package column_setting
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + "github.com/go-pg/pg"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("更新栏目设置增删改查", func() {
  14 + var column_settingId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&column_settingId),
  18 + "INSERT INTO column_settings (column_setting_id, company_id, created_at, description, key, uid, updated_at, user_name, value) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
  19 + "testColumnSettingId", "testCompanyId", "testCreatedAt", "testDescription", "testKey", "testUid", "testUpdatedAt", "testUserName", "testValue")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("提交数据更新栏目设置增删改查", func() {
  23 + Context("提交正确的栏目设置数据", func() {
  24 + It("返回更新后的栏目设置数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + body := map[string]interface{}{}
  27 + httpExpect.PUT("/column-settings/{columnSettingId}").
  28 + WithJSON(body).
  29 + Expect().
  30 + Status(http.StatusOK).
  31 + JSON().
  32 + Object().
  33 + ContainsKey("code").ValueEqual("code", 0).
  34 + ContainsKey("msg").ValueEqual("msg", "ok").
  35 + ContainsKey("data").Value("data").Object().
  36 + ContainsKey("id").ValueEqual("id", column_settingId)
  37 + })
  38 + })
  39 + })
  40 + AfterEach(func() {
  41 + _, err := pG.DB.Exec("DELETE FROM column_settings WHERE true")
  42 + Expect(err).NotTo(HaveOccurred())
  43 + })
  44 +})
  1 +validation
  2 +==============
  3 +
  4 +validation is a form validation for a data validation and error collecting using Go.
  5 +
  6 +## Installation and tests
  7 +
  8 +Install:
  9 +
  10 + go get github.com/astaxie/beego/validation
  11 +
  12 +Test:
  13 +
  14 + go test github.com/astaxie/beego/validation
  15 +
  16 +## Example
  17 +
  18 +Direct Use:
  19 +
  20 + import (
  21 + "github.com/astaxie/beego/validation"
  22 + "log"
  23 + )
  24 +
  25 + type User struct {
  26 + Name string
  27 + Age int
  28 + }
  29 +
  30 + func main() {
  31 + u := User{"man", 40}
  32 + valid := validation.Validation{}
  33 + valid.Required(u.Name, "name")
  34 + valid.MaxSize(u.Name, 15, "nameMax")
  35 + valid.Range(u.Age, 0, 140, "age")
  36 + if valid.HasErrors() {
  37 + // validation does not pass
  38 + // print invalid message
  39 + for _, err := range valid.Errors {
  40 + log.Println(err.Key, err.Message)
  41 + }
  42 + }
  43 + // or use like this
  44 + if v := valid.Max(u.Age, 140, "ageMax"); !v.Ok {
  45 + log.Println(v.Error.Key, v.Error.Message)
  46 + }
  47 + }
  48 +
  49 +Struct Tag Use:
  50 +
  51 + import (
  52 + "github.com/astaxie/beego/validation"
  53 + )
  54 +
  55 + // validation function follow with "valid" tag
  56 + // functions divide with ";"
  57 + // parameters in parentheses "()" and divide with ","
  58 + // Match function's pattern string must in "//"
  59 + type user struct {
  60 + Id int
  61 + Name string `valid:"Required;Match(/^(test)?\\w*@;com$/)"`
  62 + Age int `valid:"Required;Range(1, 140)"`
  63 + }
  64 +
  65 + func main() {
  66 + valid := validation.Validation{}
  67 + // ignore empty field valid
  68 + // see CanSkipFuncs
  69 + // valid := validation.Validation{RequiredFirst:true}
  70 + u := user{Name: "test", Age: 40}
  71 + b, err := valid.Valid(u)
  72 + if err != nil {
  73 + // handle error
  74 + }
  75 + if !b {
  76 + // validation does not pass
  77 + // blabla...
  78 + }
  79 + }
  80 +
  81 +Use custom function:
  82 +
  83 + import (
  84 + "github.com/astaxie/beego/validation"
  85 + )
  86 +
  87 + type user struct {
  88 + Id int
  89 + Name string `valid:"Required;IsMe"`
  90 + Age int `valid:"Required;Range(1, 140)"`
  91 + }
  92 +
  93 + func IsMe(v *validation.Validation, obj interface{}, key string) {
  94 + name, ok:= obj.(string)
  95 + if !ok {
  96 + // wrong use case?
  97 + return
  98 + }
  99 +
  100 + if name != "me" {
  101 + // valid false
  102 + v.SetError("Name", "is not me!")
  103 + }
  104 + }
  105 +
  106 + func main() {
  107 + valid := validation.Validation{}
  108 + if err := validation.AddCustomFunc("IsMe", IsMe); err != nil {
  109 + // hadle error
  110 + }
  111 + u := user{Name: "test", Age: 40}
  112 + b, err := valid.Valid(u)
  113 + if err != nil {
  114 + // handle error
  115 + }
  116 + if !b {
  117 + // validation does not pass
  118 + // blabla...
  119 + }
  120 + }
  121 +
  122 +Struct Tag Functions:
  123 +
  124 + Required
  125 + Min(min int)
  126 + Max(max int)
  127 + Range(min, max int)
  128 + MinSize(min int)
  129 + MaxSize(max int)
  130 + Length(length int)
  131 + Alpha
  132 + Numeric
  133 + AlphaNumeric
  134 + Match(pattern string)
  135 + AlphaDash
  136 + Email
  137 + IP
  138 + Base64
  139 + Mobile
  140 + Tel
  141 + Phone
  142 + ZipCode
  143 +
  144 +
  145 +## LICENSE
  146 +
  147 +BSD License http://creativecommons.org/licenses/BSD/
  1 +// Copyright 2014 beego Author. All Rights Reserved.
  2 +//
  3 +// Licensed under the Apache License, Version 2.0 (the "License");
  4 +// you may not use this file except in compliance with the License.
  5 +// You may obtain a copy of the License at
  6 +//
  7 +// http://www.apache.org/licenses/LICENSE-2.0
  8 +//
  9 +// Unless required by applicable law or agreed to in writing, software
  10 +// distributed under the License is distributed on an "AS IS" BASIS,
  11 +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12 +// See the License for the specific language governing permissions and
  13 +// limitations under the License.
  14 +
  15 +package validation
  16 +
  17 +import (
  18 + "fmt"
  19 + "reflect"
  20 + "regexp"
  21 + "strconv"
  22 + "strings"
  23 +)
  24 +
  25 +const (
  26 + // ValidTag struct tag
  27 + ValidTag = "valid"
  28 +
  29 + LabelTag = "label"
  30 +
  31 + wordsize = 32 << (^uint(0) >> 32 & 1)
  32 +)
  33 +
  34 +var (
  35 + // key: function name
  36 + // value: the number of parameters
  37 + funcs = make(Funcs)
  38 +
  39 + // doesn't belong to validation functions
  40 + unFuncs = map[string]bool{
  41 + "Clear": true,
  42 + "HasErrors": true,
  43 + "ErrorMap": true,
  44 + "Error": true,
  45 + "apply": true,
  46 + "Check": true,
  47 + "Valid": true,
  48 + "NoMatch": true,
  49 + }
  50 + // ErrInt64On32 show 32 bit platform not support int64
  51 + ErrInt64On32 = fmt.Errorf("not support int64 on 32-bit platform")
  52 +)
  53 +
  54 +func init() {
  55 + v := &Validation{}
  56 + t := reflect.TypeOf(v)
  57 + for i := 0; i < t.NumMethod(); i++ {
  58 + m := t.Method(i)
  59 + if !unFuncs[m.Name] {
  60 + funcs[m.Name] = m.Func
  61 + }
  62 + }
  63 +}
  64 +
  65 +// CustomFunc is for custom validate function
  66 +type CustomFunc func(v *Validation, obj interface{}, key string)
  67 +
  68 +// AddCustomFunc Add a custom function to validation
  69 +// The name can not be:
  70 +// Clear
  71 +// HasErrors
  72 +// ErrorMap
  73 +// Error
  74 +// Check
  75 +// Valid
  76 +// NoMatch
  77 +// If the name is same with exists function, it will replace the origin valid function
  78 +func AddCustomFunc(name string, f CustomFunc) error {
  79 + if unFuncs[name] {
  80 + return fmt.Errorf("invalid function name: %s", name)
  81 + }
  82 +
  83 + funcs[name] = reflect.ValueOf(f)
  84 + return nil
  85 +}
  86 +
  87 +// ValidFunc Valid function type
  88 +type ValidFunc struct {
  89 + Name string
  90 + Params []interface{}
  91 +}
  92 +
  93 +// Funcs Validate function map
  94 +type Funcs map[string]reflect.Value
  95 +
  96 +// Call validate values with named type string
  97 +func (f Funcs) Call(name string, params ...interface{}) (result []reflect.Value, err error) {
  98 + defer func() {
  99 + if r := recover(); r != nil {
  100 + err = fmt.Errorf("%v", r)
  101 + }
  102 + }()
  103 + if _, ok := f[name]; !ok {
  104 + err = fmt.Errorf("%s does not exist", name)
  105 + return
  106 + }
  107 + if len(params) != f[name].Type().NumIn() {
  108 + err = fmt.Errorf("The number of params is not adapted")
  109 + return
  110 + }
  111 + in := make([]reflect.Value, len(params))
  112 + for k, param := range params {
  113 + in[k] = reflect.ValueOf(param)
  114 + }
  115 + result = f[name].Call(in)
  116 + return
  117 +}
  118 +
  119 +func isStruct(t reflect.Type) bool {
  120 + return t.Kind() == reflect.Struct
  121 +}
  122 +
  123 +func isStructPtr(t reflect.Type) bool {
  124 + return t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct
  125 +}
  126 +
  127 +func getValidFuncs(f reflect.StructField) (vfs []ValidFunc, err error) {
  128 + tag := f.Tag.Get(ValidTag)
  129 + label := f.Tag.Get(LabelTag)
  130 + if len(tag) == 0 {
  131 + return
  132 + }
  133 + if vfs, tag, err = getRegFuncs(tag, f.Name); err != nil {
  134 + return
  135 + }
  136 + fs := strings.Split(tag, ";")
  137 + for _, vfunc := range fs {
  138 + var vf ValidFunc
  139 + if len(vfunc) == 0 {
  140 + continue
  141 + }
  142 + vf, err = parseFunc(vfunc, f.Name, label)
  143 + if err != nil {
  144 + return
  145 + }
  146 + vfs = append(vfs, vf)
  147 + }
  148 + return
  149 +}
  150 +
  151 +// Get Match function
  152 +// May be get NoMatch function in the future
  153 +func getRegFuncs(tag, key string) (vfs []ValidFunc, str string, err error) {
  154 + tag = strings.TrimSpace(tag)
  155 + index := strings.Index(tag, "Match(/")
  156 + if index == -1 {
  157 + str = tag
  158 + return
  159 + }
  160 + end := strings.LastIndex(tag, "/)")
  161 + if end < index {
  162 + err = fmt.Errorf("invalid Match function")
  163 + return
  164 + }
  165 + reg, err := regexp.Compile(tag[index+len("Match(/") : end])
  166 + if err != nil {
  167 + return
  168 + }
  169 + vfs = []ValidFunc{{"Match", []interface{}{reg, key + ".Match"}}}
  170 + str = strings.TrimSpace(tag[:index]) + strings.TrimSpace(tag[end+len("/)"):])
  171 + return
  172 +}
  173 +
  174 +func parseFunc(vfunc, key string, label string) (v ValidFunc, err error) {
  175 + defer func() {
  176 + if r := recover(); r != nil {
  177 + err = fmt.Errorf("%v", r)
  178 + }
  179 + }()
  180 +
  181 + vfunc = strings.TrimSpace(vfunc)
  182 + start := strings.Index(vfunc, "(")
  183 + var num int
  184 +
  185 + // doesn't need parameter valid function
  186 + if start == -1 {
  187 + if num, err = numIn(vfunc); err != nil {
  188 + return
  189 + }
  190 + if num != 0 {
  191 + err = fmt.Errorf("%s require %d parameters", vfunc, num)
  192 + return
  193 + }
  194 + v = ValidFunc{vfunc, []interface{}{key + "." + vfunc + "." + label}}
  195 + return
  196 + }
  197 +
  198 + end := strings.Index(vfunc, ")")
  199 + if end == -1 {
  200 + err = fmt.Errorf("invalid valid function")
  201 + return
  202 + }
  203 +
  204 + name := strings.TrimSpace(vfunc[:start])
  205 + if num, err = numIn(name); err != nil {
  206 + return
  207 + }
  208 +
  209 + params := strings.Split(vfunc[start+1:end], ",")
  210 + // the num of param must be equal
  211 + if num != len(params) {
  212 + err = fmt.Errorf("%s require %d parameters", name, num)
  213 + return
  214 + }
  215 +
  216 + tParams, err := trim(name, key+"."+ name + "." + label, params)
  217 + if err != nil {
  218 + return
  219 + }
  220 + v = ValidFunc{name, tParams}
  221 + return
  222 +}
  223 +
  224 +func numIn(name string) (num int, err error) {
  225 + fn, ok := funcs[name]
  226 + if !ok {
  227 + err = fmt.Errorf("doesn't exists %s valid function", name)
  228 + return
  229 + }
  230 + // sub *Validation obj and key
  231 + num = fn.Type().NumIn() - 3
  232 + return
  233 +}
  234 +
  235 +func trim(name, key string, s []string) (ts []interface{}, err error) {
  236 + ts = make([]interface{}, len(s), len(s)+1)
  237 + fn, ok := funcs[name]
  238 + if !ok {
  239 + err = fmt.Errorf("doesn't exists %s valid function", name)
  240 + return
  241 + }
  242 + for i := 0; i < len(s); i++ {
  243 + var param interface{}
  244 + // skip *Validation and obj params
  245 + if param, err = parseParam(fn.Type().In(i+2), strings.TrimSpace(s[i])); err != nil {
  246 + return
  247 + }
  248 + ts[i] = param
  249 + }
  250 + ts = append(ts, key)
  251 + return
  252 +}
  253 +
  254 +// modify the parameters's type to adapt the function input parameters' type
  255 +func parseParam(t reflect.Type, s string) (i interface{}, err error) {
  256 + switch t.Kind() {
  257 + case reflect.Int:
  258 + i, err = strconv.Atoi(s)
  259 + case reflect.Int64:
  260 + if wordsize == 32 {
  261 + return nil, ErrInt64On32
  262 + }
  263 + i, err = strconv.ParseInt(s, 10, 64)
  264 + case reflect.Int32:
  265 + var v int64
  266 + v, err = strconv.ParseInt(s, 10, 32)
  267 + if err == nil {
  268 + i = int32(v)
  269 + }
  270 + case reflect.Int16:
  271 + var v int64
  272 + v, err = strconv.ParseInt(s, 10, 16)
  273 + if err == nil {
  274 + i = int16(v)
  275 + }
  276 + case reflect.Int8:
  277 + var v int64
  278 + v, err = strconv.ParseInt(s, 10, 8)
  279 + if err == nil {
  280 + i = int8(v)
  281 + }
  282 + case reflect.String:
  283 + i = s
  284 + case reflect.Ptr:
  285 + if t.Elem().String() != "regexp.Regexp" {
  286 + err = fmt.Errorf("not support %s", t.Elem().String())
  287 + return
  288 + }
  289 + i, err = regexp.Compile(s)
  290 + default:
  291 + err = fmt.Errorf("not support %s", t.Kind().String())
  292 + }
  293 + return
  294 +}
  295 +
  296 +func mergeParam(v *Validation, obj interface{}, params []interface{}) []interface{} {
  297 + return append([]interface{}{v, obj}, params...)
  298 +}