作者 唐旭辉

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

# Conflicts:
#	controllers/base.go
@@ -23,6 +23,7 @@ func (this *BaseController) Prepare() { @@ -23,6 +23,7 @@ func (this *BaseController) Prepare() {
23 this.Ctx.ResponseWriter.Header().Set("Access-Control-Allow-Origin", "*") 23 this.Ctx.ResponseWriter.Header().Set("Access-Control-Allow-Origin", "*")
24 this.Ctx.ResponseWriter.Header().Set("Access-Control-Allow-Headers", "*") 24 this.Ctx.ResponseWriter.Header().Set("Access-Control-Allow-Headers", "*")
25 if this.Ctx.Input.Method() == "OPTIONS" { 25 if this.Ctx.Input.Method() == "OPTIONS" {
  26 + this.Ctx.ResponseWriter.WriteHeader(204)
26 this.Ctx.ResponseWriter.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") 27 this.Ctx.ResponseWriter.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
27 //this.Ctx.WriteString("") 28 //this.Ctx.WriteString("")
28 return 29 return
@@ -11,7 +11,7 @@ type TemplateController struct { @@ -11,7 +11,7 @@ type TemplateController struct {
11 BaseController 11 BaseController
12 } 12 }
13 13
14 -//TemplateAdd 14 +//TemplateAdd 模板新增
15 //@router /templateAdd [post] 15 //@router /templateAdd [post]
16 func (this *TemplateController) TemplateAdd() { 16 func (this *TemplateController) TemplateAdd() {
17 var msg *protocol.ResponseMessage 17 var msg *protocol.ResponseMessage
@@ -46,7 +46,7 @@ func (this *TemplateController) TemplateAdd() { @@ -46,7 +46,7 @@ func (this *TemplateController) TemplateAdd() {
46 return 46 return
47 } 47 }
48 48
49 -//TemplateUpdate 49 +//TemplateUpdate 模板更新
50 //@router /templateUpdate [post] 50 //@router /templateUpdate [post]
51 func (this *TemplateController) TemplateUpdate() { 51 func (this *TemplateController) TemplateUpdate() {
52 var msg *protocol.ResponseMessage 52 var msg *protocol.ResponseMessage
@@ -76,7 +76,7 @@ func (this *TemplateController) TemplateUpdate() { @@ -76,7 +76,7 @@ func (this *TemplateController) TemplateUpdate() {
76 return 76 return
77 } 77 }
78 78
79 -//TemplateList 79 +//TemplateList 模板列表
80 //@router /templateList [post] 80 //@router /templateList [post]
81 func (this *TemplateController) TemplateList() { 81 func (this *TemplateController) TemplateList() {
82 var msg *protocol.ResponseMessage 82 var msg *protocol.ResponseMessage
@@ -106,7 +106,7 @@ func (this *TemplateController) TemplateList() { @@ -106,7 +106,7 @@ func (this *TemplateController) TemplateList() {
106 return 106 return
107 } 107 }
108 108
109 -//TemplateGet 109 +//TemplateGet 模板获取
110 //@router /templateGet [post] 110 //@router /templateGet [post]
111 func (this *TemplateController) TemplateGet() { 111 func (this *TemplateController) TemplateGet() {
112 var msg *protocol.ResponseMessage 112 var msg *protocol.ResponseMessage
@@ -135,7 +135,7 @@ func (this *TemplateController) TemplateGet() { @@ -135,7 +135,7 @@ func (this *TemplateController) TemplateGet() {
135 msg = protocol.NewReturnResponse(rsp, err) 135 msg = protocol.NewReturnResponse(rsp, err)
136 } 136 }
137 137
138 -//TemplateEditVisible 138 +//TemplateEditVisible 编辑模板可见范围
139 //@router /templateEditVisible [post] 139 //@router /templateEditVisible [post]
140 func (this *TemplateController) TemplateEditVisible() { 140 func (this *TemplateController) TemplateEditVisible() {
141 var msg *protocol.ResponseMessage 141 var msg *protocol.ResponseMessage
@@ -193,7 +193,7 @@ func (this *TemplateController) TemplateEditSort() { @@ -193,7 +193,7 @@ func (this *TemplateController) TemplateEditSort() {
193 msg = protocol.NewReturnResponse(rsp, err) 193 msg = protocol.NewReturnResponse(rsp, err)
194 } 194 }
195 195
196 -//TemplateOperateCategory 196 +//TemplateOperateCategory 编辑一级分类
197 //@router /templateOperateCategory [post] 197 //@router /templateOperateCategory [post]
198 func (this *TemplateController) TemplateOperateCategory() { 198 func (this *TemplateController) TemplateOperateCategory() {
199 var msg *protocol.ResponseMessage 199 var msg *protocol.ResponseMessage
@@ -221,3 +221,119 @@ func (this *TemplateController) TemplateOperateCategory() { @@ -221,3 +221,119 @@ func (this *TemplateController) TemplateOperateCategory() {
221 rsp, err := audit.TemplateOperateCategory(uid, companyId, request) 221 rsp, err := audit.TemplateOperateCategory(uid, companyId, request)
222 msg = protocol.NewReturnResponse(rsp, err) 222 msg = protocol.NewReturnResponse(rsp, err)
223 } 223 }
  224 +
  225 +//TemplateDeleteCategory 删除一级分类
  226 +//@router /templateDeleteCategory [post]
  227 +func (this *TemplateController) TemplateDeleteCategory() {
  228 + var msg *protocol.ResponseMessage
  229 + defer func() {
  230 + this.ResposeJson(msg)
  231 + }()
  232 + var request *protocol.TemplateDeleteCategoryRequest
  233 +
  234 + if err := json.Unmarshal(this.Ctx.Input.RequestBody, &request); err != nil {
  235 + log.Error("json 解析失败", err)
  236 + msg = protocol.BadRequestParam("1")
  237 + return
  238 + }
  239 + uid := this.GetUserId()
  240 + companyId := this.GetCompanyId()
  241 + if companyId <= 0 {
  242 + log.Debug("companyId:%d err", companyId)
  243 + msg = protocol.BadRequestParam("1")
  244 + return
  245 + }
  246 + if b, m := this.Valid(request); !b {
  247 + msg = m
  248 + return
  249 + }
  250 + rsp, err := audit.TemplateDeleteCategory(uid, companyId, request)
  251 + msg = protocol.NewReturnResponse(rsp, err)
  252 +}
  253 +
  254 +//TemplateDelete 模板删除
  255 +//@router /templateDelete [post]
  256 +func (this *TemplateController) TemplateDelete() {
  257 + var msg *protocol.ResponseMessage
  258 + defer func() {
  259 + this.ResposeJson(msg)
  260 + }()
  261 + var request *protocol.TemplateDeleteRequest
  262 +
  263 + if err := json.Unmarshal(this.Ctx.Input.RequestBody, &request); err != nil {
  264 + log.Error("json 解析失败", err)
  265 + msg = protocol.BadRequestParam("1")
  266 + return
  267 + }
  268 + uid := this.GetUserId()
  269 + companyId := this.GetCompanyId()
  270 + if companyId <= 0 {
  271 + log.Debug("companyId:%d err", companyId)
  272 + msg = protocol.BadRequestParam("1")
  273 + return
  274 + }
  275 + if b, m := this.Valid(request); !b {
  276 + msg = m
  277 + return
  278 + }
  279 + rsp, err := audit.TemplateDelete(uid, companyId, request)
  280 + msg = protocol.NewReturnResponse(rsp, err)
  281 +}
  282 +
  283 +//TemplateEditEnable 模板启用
  284 +//@router /templateEditEnable [post]
  285 +func (this *TemplateController) TemplateEditEnable() {
  286 + var msg *protocol.ResponseMessage
  287 + defer func() {
  288 + this.ResposeJson(msg)
  289 + }()
  290 + var request *protocol.TemplateEditEnableRequest
  291 +
  292 + if err := json.Unmarshal(this.Ctx.Input.RequestBody, &request); err != nil {
  293 + log.Error("json 解析失败", err)
  294 + msg = protocol.BadRequestParam("1")
  295 + return
  296 + }
  297 + uid := this.GetUserId()
  298 + companyId := this.GetCompanyId()
  299 + if companyId <= 0 {
  300 + log.Debug("companyId:%d err", companyId)
  301 + msg = protocol.BadRequestParam("1")
  302 + return
  303 + }
  304 + if b, m := this.Valid(request); !b {
  305 + msg = m
  306 + return
  307 + }
  308 + rsp, err := audit.TemplateEditEnable(uid, companyId, request)
  309 + msg = protocol.NewReturnResponse(rsp, err)
  310 +}
  311 +
  312 +//CategoryEditSort 一级分类排序
  313 +//@router /categoryEditSort [post]
  314 +func (this *TemplateController) CategoryEditSort() {
  315 + var msg *protocol.ResponseMessage
  316 + defer func() {
  317 + this.ResposeJson(msg)
  318 + }()
  319 + var request *protocol.CategoryEditSortRequest
  320 +
  321 + if err := json.Unmarshal(this.Ctx.Input.RequestBody, &request); err != nil {
  322 + log.Error("json 解析失败", err)
  323 + msg = protocol.BadRequestParam("1")
  324 + return
  325 + }
  326 + uid := this.GetUserId()
  327 + companyId := this.GetCompanyId()
  328 + if companyId <= 0 {
  329 + log.Debug("companyId:%d err", companyId)
  330 + msg = protocol.BadRequestParam("1")
  331 + return
  332 + }
  333 + if b, m := this.Valid(request); !b {
  334 + msg = m
  335 + return
  336 + }
  337 + rsp, err := audit.CategoryEditSort(uid, companyId, request)
  338 + msg = protocol.NewReturnResponse(rsp, err)
  339 +}
@@ -175,3 +175,32 @@ type SortItem struct { @@ -175,3 +175,32 @@ type SortItem struct {
175 Id int `json:"id"` 175 Id int `json:"id"`
176 SortNum int `json:"sort_num"` 176 SortNum int `json:"sort_num"`
177 } 177 }
  178 +
  179 +/*TemplateEditEnable 模板启用*/
  180 +type TemplateEditEnableRequest struct {
  181 + TemplateId int `json:"id" valid:"Required"`
  182 + Enabled int8 `json:"enabled"` //启用状态 1 启用 0 禁用
  183 +}
  184 +type TemplateEditEnableResponse struct {
  185 +}
  186 +
  187 +/*TemplateDelete 删除模板*/
  188 +type TemplateDeleteRequest struct {
  189 + TemplateId int `json:"id" valid:"Required"`
  190 +}
  191 +type TemplateDeleteResponse struct {
  192 +}
  193 +
  194 +/*TemplateDeleteCategory 删除一级分类*/
  195 +type TemplateDeleteCategoryRequest struct {
  196 + ChanceTypeId int `json:"id" valid:"Required"`
  197 +}
  198 +type TemplateDeleteCategoryResponse struct {
  199 +}
  200 +
  201 +/*CategoryEditSort 一级分类排序*/
  202 +type CategoryEditSortRequest struct {
  203 + List []SortItem `json:"list"` //需要排序的列表
  204 +}
  205 +type CategoryEditSortResponse struct {
  206 +}
@@ -37,6 +37,10 @@ var errmessge ErrorMap = map[string]string{ @@ -37,6 +37,10 @@ var errmessge ErrorMap = map[string]string{
37 "10047": "只能删除没有成员的部门,需要先删除部门下的员工,再删除该部门", 37 "10047": "只能删除没有成员的部门,需要先删除部门下的员工,再删除该部门",
38 //用户中心相关 38 //用户中心相关
39 "10051": "无法从远端接口获取公司数据", 39 "10051": "无法从远端接口获取公司数据",
  40 + //模板相关
  41 + "10061": "请先删除该分类下的二级分类",
  42 + "10062": "该分类已被使用无法删除",
  43 + "10063": "该分类已被使用无法禁用",
40 } 44 }
41 45
42 //错误码转换 ,兼容需要 46 //错误码转换 ,兼容需要
@@ -70,9 +70,13 @@ func init() { @@ -70,9 +70,13 @@ func init() {
70 beego.NSRouter("/list", &controllers.TemplateController{}, "post:TemplateList"), 70 beego.NSRouter("/list", &controllers.TemplateController{}, "post:TemplateList"),
71 beego.NSRouter("/get", &controllers.TemplateController{}, "post:TemplateGet"), 71 beego.NSRouter("/get", &controllers.TemplateController{}, "post:TemplateGet"),
72 beego.NSRouter("/update", &controllers.TemplateController{}, "post:TemplateUpdate"), 72 beego.NSRouter("/update", &controllers.TemplateController{}, "post:TemplateUpdate"),
  73 + beego.NSRouter("/delete", &controllers.TemplateController{}, "post:TemplateDelete"),
73 beego.NSRouter("/editVisible", &controllers.TemplateController{}, "post:TemplateEditVisible"), 74 beego.NSRouter("/editVisible", &controllers.TemplateController{}, "post:TemplateEditVisible"),
  75 + beego.NSRouter("/editEnable", &controllers.TemplateController{}, "post:TemplateEditEnable"),
74 beego.NSRouter("/editSort", &controllers.TemplateController{}, "post:TemplateEditSort"), 76 beego.NSRouter("/editSort", &controllers.TemplateController{}, "post:TemplateEditSort"),
75 beego.NSRouter("/operateCategory", &controllers.TemplateController{}, "post:TemplateOperateCategory"), 77 beego.NSRouter("/operateCategory", &controllers.TemplateController{}, "post:TemplateOperateCategory"),
  78 + beego.NSRouter("/deleteCategory", &controllers.TemplateController{}, "post:TemplateDeleteCategory"),
  79 + beego.NSRouter("/sortCategory", &controllers.TemplateController{}, "post:CategoryEditSort"),
76 ), 80 ),
77 ) 81 )
78 82
@@ -297,6 +297,111 @@ func TemplateEditSort(uid, companyId int64, request *protocol.TemplateEditSortRe @@ -297,6 +297,111 @@ func TemplateEditSort(uid, companyId int64, request *protocol.TemplateEditSortRe
297 return 297 return
298 } 298 }
299 299
  300 +//获取模板详情
  301 +func TemplateGet(uid, companyId int64, request *protocol.TemplateGetRequest) (rsp *protocol.TemplateGetResponse, err error) {
  302 + var (
  303 + template *models.AuditTemplate
  304 + auditForm []*models.AuditForm
  305 + )
  306 + rsp = &protocol.TemplateGetResponse{}
  307 + if template, err = models.GetAuditTemplateById(int64(request.Id)); err != nil {
  308 + log.Error("template_id:%v 不存在 ,err:%v", request.Id, err.Error())
  309 + return
  310 + }
  311 +
  312 + {
  313 + rsp.Template = protocol.Template{
  314 + Id: template.Id,
  315 + ChanceTypeId: template.ChanceTypeId,
  316 + Name: template.Name,
  317 + Doc: template.Doc,
  318 + Icon: template.Icon,
  319 + }
  320 + rsp.Example = template.Example
  321 +
  322 + if auditForm, err = models.GetAuditFormByTemplateId(int(template.Id)); err != nil {
  323 + if err == sql.ErrNoRows {
  324 + err = nil
  325 + }
  326 + return
  327 + }
  328 + for i := range auditForm {
  329 + input := auditForm[i]
  330 + rsp.Template.InputList = append(rsp.Template.InputList, &protocol.InputElement{
  331 + Id: input.Id,
  332 + Sort: input.SortNum,
  333 + Lable: input.InputType,
  334 + Required: int(input.Required),
  335 + SectionType: input.Section,
  336 + })
  337 + }
  338 + }
  339 + return
  340 +}
  341 +
  342 +//模板删除
  343 +func TemplateDelete(uid, companyId int64, request *protocol.TemplateDeleteRequest) (rsp *protocol.TemplateDeleteResponse, err error) {
  344 + var (
  345 + template *models.AuditTemplate
  346 + num int
  347 + sql1 string = `select count(0) from chance where chance_type_id = ? limit 1`
  348 + )
  349 + if template, err = models.GetAuditTemplateById(int64(request.TemplateId)); err != nil {
  350 + log.Error(err.Error())
  351 + return
  352 + }
  353 + if template.CompanyId != int(companyId) {
  354 + err = protocol.NewErrWithMessage("10027")
  355 + return
  356 + }
  357 + //2.判断是否有对应已经发布的机会
  358 + if err = utils.ExecuteQueryOne(&num, sql1, request.TemplateId); err == nil && num > 0 {
  359 + err = protocol.NewErrWithMessage("10062")
  360 + return
  361 + }
  362 +
  363 + //删除数据
  364 + if err = models.DeleteAuditTemplate(int64(request.TemplateId)); err != nil {
  365 + log.Error(err.Error())
  366 + return
  367 + }
  368 + rsp = &protocol.TemplateDeleteResponse{}
  369 + return
  370 +}
  371 +
  372 +//模板启用
  373 +func TemplateEditEnable(uid, companyId int64, request *protocol.TemplateEditEnableRequest) (rsp *protocol.TemplateEditEnableResponse, err error) {
  374 + var (
  375 + template *models.AuditTemplate
  376 + num int
  377 + sql1 string = `select count(0) from chance where chance_type_id = ? limit 1`
  378 + )
  379 + if template, err = models.GetAuditTemplateById(int64(request.TemplateId)); err != nil {
  380 + log.Error(err.Error())
  381 + return
  382 + }
  383 + if template.EnableStatus == request.Enabled {
  384 + return
  385 + }
  386 + if template.CompanyId != int(companyId) {
  387 + err = protocol.NewErrWithMessage("10027")
  388 + return
  389 + }
  390 + //2.判断是否有对应已经发布的机会
  391 + if request.Enabled == 0 {
  392 + if err = utils.ExecuteQueryOne(&num, sql1, request.TemplateId); err == nil && num > 0 {
  393 + err = protocol.NewErrWithMessage("10063")
  394 + return
  395 + }
  396 + }
  397 + rsp = &protocol.TemplateEditEnableResponse{}
  398 + if err = utils.UpdateTableByMap(template, map[string]interface{}{"EnableStatus": request.Enabled}); err != nil {
  399 + log.Error(err.Error())
  400 + return
  401 + }
  402 + return
  403 +}
  404 +
300 //操作一级分类 405 //操作一级分类
301 func TemplateOperateCategory(uid, companyId int64, request *protocol.TemplateOperateCategoryRequest) (rsp *protocol.TemplateOperateCategoryResponse, err error) { 406 func TemplateOperateCategory(uid, companyId int64, request *protocol.TemplateOperateCategoryRequest) (rsp *protocol.TemplateOperateCategoryResponse, err error) {
302 var ( 407 var (
@@ -312,7 +417,7 @@ func TemplateOperateCategory(uid, companyId int64, request *protocol.TemplateOpe @@ -312,7 +417,7 @@ func TemplateOperateCategory(uid, companyId int64, request *protocol.TemplateOpe
312 err = protocol.NewErrWithMessage("10027") 417 err = protocol.NewErrWithMessage("10027")
313 log.Error("template_id:%v companyId:%v want:%v not equal.", request.Id, companyId, chanceType.CompanyId) 418 log.Error("template_id:%v companyId:%v want:%v not equal.", request.Id, companyId, chanceType.CompanyId)
314 } 419 }
315 - if err = utils.UpdateTableByMap(chanceType, map[string]interface{}{"Name": request.Name, "Icon": request.Icon, "UpdateAt": time.Now()}); err != nil { 420 + if err = utils.UpdateTableByMap(chanceType, map[string]interface{}{"Name": request.Name, "Icon": request.Icon, "SortNum": chanceType.SortNum, "UpdateAt": time.Now()}); err != nil {
316 log.Error(err.Error()) 421 log.Error(err.Error())
317 return 422 return
318 } 423 }
@@ -332,44 +437,70 @@ func TemplateOperateCategory(uid, companyId int64, request *protocol.TemplateOpe @@ -332,44 +437,70 @@ func TemplateOperateCategory(uid, companyId int64, request *protocol.TemplateOpe
332 return 437 return
333 } 438 }
334 439
335 -//获取模板详情  
336 -func TemplateGet(uid, companyId int64, request *protocol.TemplateGetRequest) (rsp *protocol.TemplateGetResponse, err error) { 440 +//删除一级分类
  441 +func TemplateDeleteCategory(uid, companyId int64, request *protocol.TemplateDeleteCategoryRequest) (rsp *protocol.TemplateDeleteCategoryResponse, err error) {
337 var ( 442 var (
338 - template *models.AuditTemplate  
339 - auditForm []*models.AuditForm 443 + chanceType *models.ChanceType
  444 + num int
  445 + sql1 string = `select count(0) from from audit_template where chance_type_id =? limit 1`
  446 + sql2 string = `select count(0) from chance where chance_type_id = ? limit 1`
340 ) 447 )
341 - rsp = &protocol.TemplateGetResponse{}  
342 - if template, err = models.GetAuditTemplateById(int64(request.Id)); err != nil {  
343 - log.Error("template_id:%v 不存在 ,err:%v", request.Id, err.Error()) 448 + if chanceType, err = models.GetChanceTypeById(request.ChanceTypeId); err != nil {
  449 + log.Error(err.Error())
  450 + return
  451 + }
  452 + if chanceType.CompanyId != int(companyId) {
  453 + err = protocol.NewErrWithMessage("10027")
344 return 454 return
345 } 455 }
346 456
347 - {  
348 - rsp.Template = protocol.Template{  
349 - Id: template.Id,  
350 - ChanceTypeId: template.ChanceTypeId,  
351 - Name: template.Name,  
352 - Doc: template.Doc,  
353 - Icon: template.Icon,  
354 - }  
355 - rsp.Example = template.Example 457 + //1.判断分类下面是否有模板
  458 + if err = utils.ExecuteQueryOne(&num, sql1, request.ChanceTypeId); err == nil && num > 0 {
  459 + err = protocol.NewErrWithMessage("10061")
  460 + return
  461 + }
  462 + //2.判断是否有对应已经发布的机会
  463 + if err = utils.ExecuteQueryOne(&num, sql2, request.ChanceTypeId); err == nil && num > 0 {
  464 + err = protocol.NewErrWithMessage("10062")
  465 + return
  466 + }
356 467
357 - if auditForm, err = models.GetAuditFormByTemplateId(int(template.Id)); err != nil {  
358 - if err == sql.ErrNoRows {  
359 - err = nil  
360 - } 468 + //删除数据
  469 + if err = models.DeleteChanceType(request.ChanceTypeId); err != nil {
  470 + log.Error(err.Error())
  471 + return
  472 + }
  473 + rsp = &protocol.TemplateDeleteCategoryResponse{}
  474 + return
  475 +}
  476 +
  477 +//一级分类排序
  478 +func CategoryEditSort(uid, companyId int64, request *protocol.CategoryEditSortRequest) (rsp *protocol.CategoryEditSortResponse, err error) {
  479 + var (
  480 + template *models.ChanceType
  481 + )
  482 + orm := orm2.NewOrm()
  483 + for i := range request.List {
  484 + item := request.List[i]
  485 + if template, err = models.GetChanceTypeById(item.Id); err != nil {
  486 + log.Error(err.Error())
  487 + continue
  488 + }
  489 + if template.CompanyId != int(companyId) {
  490 + log.Debug(fmt.Sprintf("template.companyId input:%v want:%v not equal.", companyId, template.CompanyId))
  491 + err = protocol.NewErrWithMessage("10027")
361 return 492 return
362 } 493 }
363 - for i := range auditForm {  
364 - input := auditForm[i]  
365 - rsp.Template.InputList = append(rsp.Template.InputList, &protocol.InputElement{  
366 - Id: input.Id,  
367 - Sort: input.SortNum,  
368 - Lable: input.InputType,  
369 - Required: int(input.Required),  
370 - SectionType: input.Section,  
371 - }) 494 + if item.SortNum == template.SortNum {
  495 + continue
  496 + }
  497 + if err = utils.UpdateTableByMapWithOrmer(orm, template, map[string]interface{}{"SortNum": item.SortNum}); err != nil {
  498 + log.Error(err.Error())
  499 + orm.Rollback()
  500 + return
372 } 501 }
373 } 502 }
  503 + orm.Commit()
  504 + rsp = &protocol.CategoryEditSortResponse{}
374 return 505 return
375 } 506 }