作者 唐旭辉

Merge branch 'dev' of http://gitlab.fjmaimaimai.com/mmm-go/oppmg into dev

@@ -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 +}