ソースを参照

fix: 报告审批配置切换;新增分类是否有审批接口

hsun 1 年間 前
コミット
c0a1c42202

+ 32 - 0
controllers/business_conf.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"encoding/json"
 	"eta/eta_api/models"
+	"eta/eta_api/services"
 	"eta/eta_api/utils"
 	"fmt"
 	"html"
@@ -62,6 +63,9 @@ func (this *BusinessConfController) Save() {
 		confMap[c.ConfKey] = c
 	}
 
+	openApprove := ""
+	approveType := ""
+
 	// 根据配置类型取值
 	updates := make([]models.BusinessConfUpdate, 0)
 	for k, v := range req {
@@ -86,6 +90,14 @@ func (this *BusinessConfController) Save() {
 				ConfKey: k,
 				ConfVal: str,
 			})
+
+			// 取出审批参数
+			if k == models.BusinessConfIsReportApprove {
+				openApprove = str
+			}
+			if k == models.BusinessConfReportApproveType {
+				approveType = str
+			}
 		case 2: // 数值
 			num, ok := v.(float64)
 			if !ok {
@@ -138,6 +150,26 @@ func (this *BusinessConfController) Save() {
 		}
 	}
 
+	// 校验报告审批是否可以切换
+	confOpenApprove := confMap[models.BusinessConfIsReportApprove]
+	confApproveType := confMap[models.BusinessConfReportApproveType]
+	if confOpenApprove != nil && confApproveType != nil {
+		// 仅校验有审批->无审批, 或是有审批->切换审批方式的情况
+		if openApprove == "false" && confOpenApprove.ConfVal == "true" || (openApprove == "true" && openApprove == confOpenApprove.ConfVal && confApproveType.ConfVal != approveType) {
+			ok, e := services.CheckCloseReportApproveConf()
+			fmt.Println(ok)
+			if e != nil {
+				br.Msg = "保存失败"
+				br.ErrMsg = "校验是否可以关闭报告审批失败, Err: " + e.Error()
+				return
+			}
+			if !ok {
+				br.Msg = "当前有未走完流程的报告,请走完流程后再做变更"
+				return
+			}
+		}
+	}
+
 	if len(updates) > 0 {
 		if e = models.UpdateBusinessConfMulti(updates); e != nil {
 			br.Msg = "保存失败"

+ 43 - 0
controllers/report_approve/report_approve.go

@@ -881,3 +881,46 @@ func (this *ReportApproveController) MessageRead() {
 	br.Success = true
 	br.Msg = "操作成功"
 }
+
+// CheckApproveOpen
+// @Title 校验分类是否开启审批
+// @Description 校验分类是否开启审批
+// @Param	request	body report_approve.ReportApproveCheckApproveOpenReq true "type json string"
+// @Success 200 string "操作成功"
+// @router /classify/check_open [post]
+func (this *ReportApproveController) CheckApproveOpen() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req report_approve.ReportApproveCheckApproveOpenReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数有误"
+		br.ErrMsg = "参数解析失败, Err: " + e.Error()
+		return
+	}
+
+	// 校验是否开启了审批流
+	opening, e := services.CheckReportOpenApprove(req.ReportType, req.ClassifyFirstId, req.ClassifySecondId)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "校验报告是否开启审批流失败, Err: " + e.Error()
+		return
+	}
+
+	br.Data = opening
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 8 - 0
models/english_report.go

@@ -849,3 +849,11 @@ func GetEnglishClassifies() (list []*EnglishClassify, err error) {
 	_, err = o.Raw(sql).QueryRows(&list)
 	return
 }
+
+// GetEnglishReportStateCount 获取指定状态的报告数量
+func GetEnglishReportStateCount(state int) (count int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT COUNT(1) AS count FROM english_report WHERE state = ?`
+	err = o.Raw(sql, state).QueryRow(&count)
+	return
+}

+ 8 - 0
models/report.go

@@ -1098,3 +1098,11 @@ func (m *Report) GetItemById(id int) (item *Report, err error) {
 	err = o.Raw(sql, id).QueryRow(&item)
 	return
 }
+
+// GetReportStateCount 获取指定状态的报告数量
+func GetReportStateCount(state int) (count int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT COUNT(1) AS count FROM report WHERE state = ?`
+	err = o.Raw(sql, state).QueryRow(&count)
+	return
+}

+ 7 - 0
models/report_approve/report_approve.go

@@ -436,3 +436,10 @@ type ReportApproveRefuseReq struct {
 type ReportApproveCancelReq struct {
 	ReportApproveId int `description:"审批ID"`
 }
+
+// ReportApproveCheckApproveOpenReq 校验分类是否打开审批请求体
+type ReportApproveCheckApproveOpenReq struct {
+	ReportType       int `description:"报告类型:1-中文研报;2-英文研报;3-智能研报"`
+	ClassifyFirstId  int `description:"一级分类ID"`
+	ClassifySecondId int `description:"二级分类ID"`
+}

+ 9 - 0
routers/commentsRouter.go

@@ -4399,6 +4399,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/report_approve:ReportApproveController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/report_approve:ReportApproveController"],
+        beego.ControllerComments{
+            Method: "CheckApproveOpen",
+            Router: `/classify/check_open`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/report_approve:ReportApproveController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/report_approve:ReportApproveController"],
         beego.ControllerComments{
             Method: "Detail",

+ 35 - 0
services/report_approve.go

@@ -807,3 +807,38 @@ func AfterReportApprovePass(reportType, reportId int) (err error) {
 	}
 	return
 }
+
+// CheckCloseReportApproveConf 校验是否可以关闭报告审批
+func CheckCloseReportApproveConf() (yes bool, err error) {
+	// 查询待审批中的报告数量
+	count, e := models.GetReportStateCount(models.ReportStateWaitApprove)
+	if e != nil {
+		err = fmt.Errorf("查询审批中的报告数量失败, Err: %s", e.Error())
+		return
+	}
+	if count > 0 {
+		return
+	}
+	count, e = models.GetEnglishReportStateCount(models.ReportStateWaitApprove)
+	if e != nil {
+		err = fmt.Errorf("查询审批中的英文报告数量失败, Err: %s", e.Error())
+		return
+	}
+	if count > 0 {
+		return
+	}
+	smartOb := new(smart_report.SmartReport)
+	cond := ` AND state = ?`
+	pars := make([]interface{}, 0)
+	pars = append(pars, models.ReportStateWaitApprove)
+	count, e = smartOb.GetCountByCondition(cond, pars)
+	if e != nil {
+		err = fmt.Errorf("查询审批中的智能报告数量失败, Err: %s", e.Error())
+		return
+	}
+	if count > 0 {
+		return
+	}
+	yes = true
+	return
+}