Merge branch 'dev' of http://gitlab.fjmaimaimai.com/mmm-go/oppmg into dev
正在显示
9 个修改的文件
包含
142 行增加
和
35 行删除
| @@ -5,9 +5,11 @@ import ( | @@ -5,9 +5,11 @@ import ( | ||
| 5 | "fmt" | 5 | "fmt" |
| 6 | "oppmg/common/log" | 6 | "oppmg/common/log" |
| 7 | "oppmg/protocol" | 7 | "oppmg/protocol" |
| 8 | + "oppmg/utils/exceltool" | ||
| 8 | "strconv" | 9 | "strconv" |
| 9 | 10 | ||
| 10 | "github.com/astaxie/beego" | 11 | "github.com/astaxie/beego" |
| 12 | + "github.com/astaxie/beego/context" | ||
| 11 | "github.com/astaxie/beego/validation" | 13 | "github.com/astaxie/beego/validation" |
| 12 | ) | 14 | ) |
| 13 | 15 | ||
| @@ -85,3 +87,16 @@ func (this *BaseController) Valid(obj interface{}) (result bool, msg *protocol.R | @@ -85,3 +87,16 @@ func (this *BaseController) Valid(obj interface{}) (result bool, msg *protocol.R | ||
| 85 | 87 | ||
| 86 | return | 88 | return |
| 87 | } | 89 | } |
| 90 | + | ||
| 91 | +func (this *BaseController) ResponseExcelByFile(ctx *context.Context, excelMaker *exceltool.ExcelMaker) error { | ||
| 92 | + ctx.Output.Header("Content-Disposition", "attachment; filename="+excelMaker.FileName) | ||
| 93 | + ctx.Output.Header("Content-Description", "File Transfer") | ||
| 94 | + ctx.Output.Header("Content-Type", "application/octet-stream") | ||
| 95 | + ctx.Output.Header("Content-Transfer-Encoding", "binary") | ||
| 96 | + ctx.Output.Header("Expires", "0") | ||
| 97 | + ctx.Output.Header("Cache-Control", "must-revalidate") | ||
| 98 | + ctx.Output.Header("Pragma", "public") | ||
| 99 | + //跳过保存文件,直接写入ctx.ResponseWriter | ||
| 100 | + excelMaker.Xlsx.Write(ctx.ResponseWriter) | ||
| 101 | + return nil | ||
| 102 | +} |
| @@ -175,3 +175,39 @@ func (this *BulletinController) BulletinFeedbacks() { | @@ -175,3 +175,39 @@ func (this *BulletinController) BulletinFeedbacks() { | ||
| 175 | rsp, err := bulletin.BulletinFeedbacks(companyId, request) | 175 | rsp, err := bulletin.BulletinFeedbacks(companyId, request) |
| 176 | msg = protocol.NewPageDataResponse(rsp, err) | 176 | msg = protocol.NewPageDataResponse(rsp, err) |
| 177 | } | 177 | } |
| 178 | + | ||
| 179 | +//ExportFeedBacks | ||
| 180 | +//@router /exportFeedBacks [post] | ||
| 181 | +func (this *BulletinController) ExportFeedBacks() { | ||
| 182 | + var msg *protocol.ResponseMessage | ||
| 183 | + defer func() { | ||
| 184 | + this.ResposeJson(msg) | ||
| 185 | + }() | ||
| 186 | + var request *protocol.ExportFeedBacksRequest | ||
| 187 | + if err := json.Unmarshal(this.Ctx.Input.RequestBody, &request); err != nil { | ||
| 188 | + log.Error("json 解析失败", err) | ||
| 189 | + msg = protocol.BadRequestParam("1") | ||
| 190 | + return | ||
| 191 | + } | ||
| 192 | + if b, m := this.Valid(request); !b { | ||
| 193 | + msg = m | ||
| 194 | + return | ||
| 195 | + } | ||
| 196 | + companyId := this.GetCompanyId() | ||
| 197 | + if companyId <= 0 { | ||
| 198 | + msg = protocol.BadRequestParam("1") | ||
| 199 | + return | ||
| 200 | + } | ||
| 201 | + excel, err := bulletin.ExportFeedBacks(companyId, request) | ||
| 202 | + if err != nil { | ||
| 203 | + log.Error(err.Error()) | ||
| 204 | + msg = protocol.BadRequestParam("1") | ||
| 205 | + return | ||
| 206 | + } | ||
| 207 | + if err = this.ResponseExcelByFile(this.Ctx, excel); err != nil { | ||
| 208 | + log.Error(err.Error()) | ||
| 209 | + msg = protocol.BadRequestParam("1") | ||
| 210 | + return | ||
| 211 | + } | ||
| 212 | + msg = protocol.NewReturnResponse(nil, err) | ||
| 213 | +} |
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | export PATH=/root/local/bin:$PATH | 2 | export PATH=/root/local/bin:$PATH |
| 3 | -kubectl -n mmm-suplus-dev get pods | grep -q oppmg | 3 | +kubectl -n mmm-suplus-dev get pods | grep -q mmm-oppmg |
| 4 | if [ "$?" == "1" ];then | 4 | if [ "$?" == "1" ];then |
| 5 | kubectl create -f /tmp/dev/mmm-go-oppmg/oppmg.yaml --record | 5 | kubectl create -f /tmp/dev/mmm-go-oppmg/oppmg.yaml --record |
| 6 | - kubectl -n mmm-suplus-dev get svc | grep -q oppmg | 6 | + kubectl -n mmm-suplus-dev get svc | grep -q mmm-oppmg |
| 7 | if [ "$?" == "0" ];then | 7 | if [ "$?" == "0" ];then |
| 8 | - echo "oppmg service install success!" | 8 | + echo "mmm-oppmg service install success!" |
| 9 | else | 9 | else |
| 10 | - echo "oppmg service install fail!" | 10 | + echo "mmm-oppmg service install fail!" |
| 11 | fi | 11 | fi |
| 12 | - kubectl -n mmm-suplus-dev get pods | grep -q oppmg | 12 | + kubectl -n mmm-suplus-dev get pods | grep -q mmm-oppmg |
| 13 | if [ "$?" == "0" ];then | 13 | if [ "$?" == "0" ];then |
| 14 | - echo "oppmg deployment install success!" | 14 | + echo "mmm-oppmg deployment install success!" |
| 15 | else | 15 | else |
| 16 | - echo "oppmg deployment install fail!" | 16 | + echo "mmm-oppmg deployment install fail!" |
| 17 | fi | 17 | fi |
| 18 | else | 18 | else |
| 19 | kubectl delete -f /tmp/dev/mmm-go-oppmg/oppmg.yaml | 19 | kubectl delete -f /tmp/dev/mmm-go-oppmg/oppmg.yaml |
| 20 | - kubectl -n mmm-suplus-dev get svc | grep -q oppmg | 20 | + kubectl -n mmm-suplus-dev get svc | grep -q mmm-oppmg |
| 21 | while [ "$?" == "0" ] | 21 | while [ "$?" == "0" ] |
| 22 | do | 22 | do |
| 23 | - kubectl -n mmm-suplus-dev get svc | grep -q oppmg | 23 | + kubectl -n mmm-suplus-dev get svc | grep -q mmm-oppmg |
| 24 | done | 24 | done |
| 25 | - kubectl -n mmm-suplus-dev get pods | grep -q oppmg | 25 | + kubectl -n mmm-suplus-dev get pods | grep -q mmm-oppmg |
| 26 | while [ "$?" == "0" ] | 26 | while [ "$?" == "0" ] |
| 27 | do | 27 | do |
| 28 | - kubectl -n mmm-suplus-dev get pods | grep -q oppmg | 28 | + kubectl -n mmm-suplus-dev get pods | grep -q mmm-oppmg |
| 29 | done | 29 | done |
| 30 | kubectl create -f /tmp/dev/mmm-go-oppmg/oppmg.yaml --record | 30 | kubectl create -f /tmp/dev/mmm-go-oppmg/oppmg.yaml --record |
| 31 | - kubectl -n mmm-suplus-dev get svc | grep -q oppmg | 31 | + kubectl -n mmm-suplus-dev get svc | grep -q mmm-oppmg |
| 32 | if [ "$?" == "0" ];then | 32 | if [ "$?" == "0" ];then |
| 33 | - echo "oppmg service update success!" | 33 | + echo "mmm-oppmg service update success!" |
| 34 | else | 34 | else |
| 35 | - echo "oppmg service update fail!" | 35 | + echo "mmm-oppmg service update fail!" |
| 36 | fi | 36 | fi |
| 37 | - kubectl -n mmm-suplus-dev get pods | grep -q oppmg | 37 | + kubectl -n mmm-suplus-dev get pods | grep -q mmm-oppmg |
| 38 | if [ "$?" == "0" ];then | 38 | if [ "$?" == "0" ];then |
| 39 | - echo "oppmg deployment update success!" | 39 | + echo "mmm-oppmg deployment update success!" |
| 40 | else | 40 | else |
| 41 | - echo "oppmg deployment update fail!" | 41 | + echo "mmm-oppmg deployment update fail!" |
| 42 | fi | 42 | fi |
| 43 | fi | 43 | fi |
| 1 | apiVersion: v1 | 1 | apiVersion: v1 |
| 2 | kind: Service | 2 | kind: Service |
| 3 | metadata: | 3 | metadata: |
| 4 | - name: oppmg | 4 | + name: mmm-oppmg |
| 5 | namespace: mmm-suplus-dev | 5 | namespace: mmm-suplus-dev |
| 6 | labels: | 6 | labels: |
| 7 | - k8s-app: oppmg | 7 | + k8s-app: mmm-oppmg |
| 8 | spec: | 8 | spec: |
| 9 | ports: | 9 | ports: |
| 10 | - name: "http" | 10 | - name: "http" |
| 11 | port: 80 | 11 | port: 80 |
| 12 | targetPort: 8080 | 12 | targetPort: 8080 |
| 13 | selector: | 13 | selector: |
| 14 | - k8s-app: oppmg | 14 | + k8s-app: mmm-oppmg |
| 15 | --- | 15 | --- |
| 16 | apiVersion: extensions/v1beta1 | 16 | apiVersion: extensions/v1beta1 |
| 17 | kind: Deployment | 17 | kind: Deployment |
| 18 | metadata: | 18 | metadata: |
| 19 | - name: oppmg | 19 | + name: mmm-oppmg |
| 20 | namespace: mmm-suplus-dev | 20 | namespace: mmm-suplus-dev |
| 21 | labels: | 21 | labels: |
| 22 | - k8s-app: oppmg | 22 | + k8s-app: mmm-oppmg |
| 23 | spec: | 23 | spec: |
| 24 | replicas: 1 | 24 | replicas: 1 |
| 25 | template: | 25 | template: |
| 26 | metadata: | 26 | metadata: |
| 27 | labels: | 27 | labels: |
| 28 | - k8s-app: oppmg | 28 | + k8s-app: mmm-oppmg |
| 29 | spec: | 29 | spec: |
| 30 | affinity: | 30 | affinity: |
| 31 | nodeAffinity: | 31 | nodeAffinity: |
| @@ -43,8 +43,8 @@ spec: | @@ -43,8 +43,8 @@ spec: | ||
| 43 | - cn-hangzhou.i-bp1euf5u1ph9kbhtndhb | 43 | - cn-hangzhou.i-bp1euf5u1ph9kbhtndhb |
| 44 | - cn-hangzhou.i-bp1hyp5oips9cdwxxgxy | 44 | - cn-hangzhou.i-bp1hyp5oips9cdwxxgxy |
| 45 | containers: | 45 | containers: |
| 46 | - - name: oppmg | ||
| 47 | - image: 192.168.0.243:5000/mmm/oppmg:dev | 46 | + - name: mmm-oppmg |
| 47 | + image: 192.168.0.243:5000/mmm/mmm-oppmg:dev | ||
| 48 | imagePullPolicy: Always | 48 | imagePullPolicy: Always |
| 49 | volumeMounts: | 49 | volumeMounts: |
| 50 | - mountPath: /opt/logs | 50 | - mountPath: /opt/logs |
| @@ -86,17 +86,16 @@ select answer,update_at,uid from bulletin_question_answer where bulletin_id =? | @@ -86,17 +86,16 @@ select answer,update_at,uid from bulletin_question_answer where bulletin_id =? | ||
| 86 | sqlCount += where | 86 | sqlCount += where |
| 87 | 87 | ||
| 88 | sql += where | 88 | sql += where |
| 89 | - sql += ` limit ?,?` | ||
| 90 | - if v != nil { | ||
| 91 | if err = utils.ExecuteQueryOne(&total, sqlCount, id); err != nil { | 89 | if err = utils.ExecuteQueryOne(&total, sqlCount, id); err != nil { |
| 92 | return | 90 | return |
| 93 | } | 91 | } |
| 92 | + if page > 0 { | ||
| 93 | + sql += fmt.Sprintf(` limit %v,%v`, (page-1)*pageSize, pageSize) | ||
| 94 | } | 94 | } |
| 95 | - if page == 0 { | ||
| 96 | - page = 1 | ||
| 97 | - } | ||
| 98 | - if err = utils.ExecuteQueryAll(v, sql, id, (page-1)*pageSize, pageSize); err != nil { | 95 | + if v != nil { |
| 96 | + if err = utils.ExecuteQueryAll(v, sql, id); err != nil { | ||
| 99 | return | 97 | return |
| 100 | } | 98 | } |
| 99 | + } | ||
| 101 | return | 100 | return |
| 102 | } | 101 | } |
| @@ -128,3 +128,10 @@ type Answer struct { | @@ -128,3 +128,10 @@ type Answer struct { | ||
| 128 | VoteResults []int `json:"voteResults"` | 128 | VoteResults []int `json:"voteResults"` |
| 129 | EditContent string `json:"editContent"` | 129 | EditContent string `json:"editContent"` |
| 130 | } | 130 | } |
| 131 | + | ||
| 132 | +/*ExportFeedBacks */ | ||
| 133 | +type ExportFeedBacksRequest struct { | ||
| 134 | + Id int `json:"id"` //公告编号 | ||
| 135 | +} | ||
| 136 | +type ExportFeedBacksResponse struct { | ||
| 137 | +} |
| @@ -56,6 +56,7 @@ func init() { | @@ -56,6 +56,7 @@ func init() { | ||
| 56 | beego.NSRouter("/update", &controllers.BulletinController{}, "post:UpdateBulletin"), | 56 | beego.NSRouter("/update", &controllers.BulletinController{}, "post:UpdateBulletin"), |
| 57 | beego.NSRouter("/operate", &controllers.BulletinController{}, "post:OperateBulletin"), | 57 | beego.NSRouter("/operate", &controllers.BulletinController{}, "post:OperateBulletin"), |
| 58 | beego.NSRouter("/feedbacks", &controllers.BulletinController{}, "post:BulletinFeedbacks"), | 58 | beego.NSRouter("/feedbacks", &controllers.BulletinController{}, "post:BulletinFeedbacks"), |
| 59 | + beego.NSRouter("/exportFeedBacks", &controllers.BulletinController{}, "post:ExportFeedBacks"), | ||
| 59 | ), | 60 | ), |
| 60 | beego.NSNamespace("/common", | 61 | beego.NSNamespace("/common", |
| 61 | beego.NSRouter("/department", &controllers.CommonController{}, "post:SelectorDepartment"), | 62 | beego.NSRouter("/department", &controllers.CommonController{}, "post:SelectorDepartment"), |
| @@ -9,6 +9,7 @@ import ( | @@ -9,6 +9,7 @@ import ( | ||
| 9 | "oppmg/protocol" | 9 | "oppmg/protocol" |
| 10 | "oppmg/services/agg" | 10 | "oppmg/services/agg" |
| 11 | "oppmg/utils" | 11 | "oppmg/utils" |
| 12 | + "oppmg/utils/exceltool" | ||
| 12 | "strconv" | 13 | "strconv" |
| 13 | "strings" | 14 | "strings" |
| 14 | "time" | 15 | "time" |
| @@ -452,3 +453,37 @@ func BulletinFeedbacks(companyId int64, request *protocol.BulletinFeedbacksReque | @@ -452,3 +453,37 @@ func BulletinFeedbacks(companyId int64, request *protocol.BulletinFeedbacksReque | ||
| 452 | } | 453 | } |
| 453 | return | 454 | return |
| 454 | } | 455 | } |
| 456 | + | ||
| 457 | +//导出反馈详情 | ||
| 458 | +func ExportFeedBacks(companyId int64, request *protocol.ExportFeedBacksRequest) (excel *exceltool.ExcelMaker, err error) { | ||
| 459 | + var ( | ||
| 460 | + feedbackRsp *protocol.BulletinFeedbacksResponse | ||
| 461 | + sourceData []map[string]string | ||
| 462 | + ) | ||
| 463 | + if feedbackRsp, err = BulletinFeedbacks(companyId, &protocol.BulletinFeedbacksRequest{Id: request.Id}); err != nil { | ||
| 464 | + //if err == orm2.ErrNoRows { | ||
| 465 | + // err = nil | ||
| 466 | + //} | ||
| 467 | + //无数据 | ||
| 468 | + return | ||
| 469 | + } | ||
| 470 | + excel = exceltool.NewExcelMaker() | ||
| 471 | + headTitle := [][]string{ | ||
| 472 | + []string{"time", "时间"}, | ||
| 473 | + []string{"name", "姓名"}, | ||
| 474 | + []string{"content", "选项"}, | ||
| 475 | + } | ||
| 476 | + for i := range feedbackRsp.List { | ||
| 477 | + item := feedbackRsp.List[i] | ||
| 478 | + row := make(map[string]string) | ||
| 479 | + row["time"] = time.Unix(item.Time, 0).Format("2006-01-02 15:04:05") | ||
| 480 | + row["name"] = item.Name | ||
| 481 | + row["content"] = item.Content | ||
| 482 | + sourceData = append(sourceData, row) | ||
| 483 | + } | ||
| 484 | + if err = excel.MakeListExcel(sourceData, headTitle); err != nil { | ||
| 485 | + log.Error(err.Error()) | ||
| 486 | + return | ||
| 487 | + } | ||
| 488 | + return | ||
| 489 | +} |
| @@ -39,10 +39,11 @@ func (e *ExcelMaker) MakeListExcel(sourData []map[string]string, xlsxHeader [][] | @@ -39,10 +39,11 @@ func (e *ExcelMaker) MakeListExcel(sourData []map[string]string, xlsxHeader [][] | ||
| 39 | } | 39 | } |
| 40 | headEn = append(headEn, xlsxHeader[key][0]) | 40 | headEn = append(headEn, xlsxHeader[key][0]) |
| 41 | headCn = append(headCn, xlsxHeader[key][1]) | 41 | headCn = append(headCn, xlsxHeader[key][1]) |
| 42 | - alpha, err := excelize.ColumnNumberToName(key) | ||
| 43 | - if err != nil { | ||
| 44 | - return err | ||
| 45 | - } | 42 | + //alpha, err := excelize.ColumnNumberToName(key) |
| 43 | + //if err != nil { | ||
| 44 | + // return err | ||
| 45 | + //} | ||
| 46 | + alpha := ToAlphaString(key) | ||
| 46 | alphaSlice = append(alphaSlice, alpha) | 47 | alphaSlice = append(alphaSlice, alpha) |
| 47 | } | 48 | } |
| 48 | 49 | ||
| @@ -119,3 +120,16 @@ func GetRandomString(lenght int) string { | @@ -119,3 +120,16 @@ func GetRandomString(lenght int) string { | ||
| 119 | } | 120 | } |
| 120 | return string(result) | 121 | return string(result) |
| 121 | } | 122 | } |
| 123 | + | ||
| 124 | +func ToAlphaString(value int) string { | ||
| 125 | + if value < 0 { | ||
| 126 | + return "" | ||
| 127 | + } | ||
| 128 | + var ans string | ||
| 129 | + i := value + 1 | ||
| 130 | + for i > 0 { | ||
| 131 | + ans = string((i-1)%26+65) + ans | ||
| 132 | + i = (i - 1) / 26 | ||
| 133 | + } | ||
| 134 | + return ans | ||
| 135 | +} |
-
请 注册 或 登录 后发表评论