Quellcode durchsuchen

feat: 增加审批相关接口

lanjianrong vor 4 Jahren
Ursprung
Commit
534a238eaf

+ 32 - 5
dao/safe_audit_dao.go

@@ -9,8 +9,10 @@ package dao
 
 import (
 	"fmt"
+	"time"
 
 	"github.com/go-xorm/xorm"
+	"go.mod/models"
 	"go.mod/web/viewmodels"
 )
 
@@ -26,6 +28,26 @@ func NewSafeAuditDao(engine *xorm.Engine) *SafeAuditDao {
 	}
 }
 
+// 添加审批人
+func (d *SafeAuditDao) AddAuditor(safeId int, bId int, auditId int, times int) error {
+	auditOrder := d.GetNewOrder(safeId, times)
+	auditor := &models.CmSafeAudit{SafeId: safeId, BidsectionId: bId, AuditId: auditId, Times: times, AuditOrder: auditOrder, CreateTime: time.Now()}
+	_, err := d.engine.InsertOne(auditor)
+	return err
+}
+
+// 获取最新审批顺序
+func (d *SafeAuditDao) GetNewOrder(safeId int, times int) int {
+	var max_order int
+	_, err := d.engine.Sql("select Max(`audit_order`) as max_order from cm_safe_audit where safe_id = ? and times = ?", safeId, times).Get(&max_order)
+	fmt.Println(err)
+	if max_order == 0 {
+		return 1
+	} else {
+		return max_order + 1
+	}
+}
+
 // 根据当前times,获取审批人(包括原报)
 func (d *SafeAuditDao) GetAuditors(id int, times int, cur_uid int) []viewmodels.Auditors {
 	auditors := make([]viewmodels.Auditors, 0)
@@ -44,8 +66,13 @@ func (d *SafeAuditDao) GetAuditors(id int, times int, cur_uid int) []viewmodels.
 	return auditors
 }
 
-// times从0开始循环,往history里面push
-// func (d *SafeAuditDao) GetAuditHistory(id int, times int) {
-// 	auditorHistory := make([]models.CmSafeAudit, 0)
-// 	d.engine.Sql("select pa.`name`, pa.`position`,ca.`create_time`, ca.`end_time`, ca.`opinion`, ca.`status`,  from `cm_project_account` as pa, `cm_safe_audit` as ca where ca.`safe_id` = ? and ca.audit_id = pa.id order by `audit_order`", id, times).Find(&auditors)
-// }
+// times从1开始循环,往history里面push
+func (d *SafeAuditDao) GetAuditHistory(id int, times int) map[int][]viewmodels.HistorySafeAudit {
+	auditorHistory := make(map[int][]viewmodels.HistorySafeAudit, 0)
+	for i := 1; i <= times; i++ {
+		auditors := make([]viewmodels.HistorySafeAudit, 0)
+		d.engine.Sql("select pa.`name`, pa.`position`, ca.`create_time` as createTime, ca.`end_time` as endTime, ca.`opinion`, ca.`status` from `cm_project_account` as pa, `cm_safe_audit` as ca where ca.`safe_id` = ? and ca.audit_id = pa.id and times = ? order by `audit_order`", id, times).Find(&auditors)
+		auditorHistory[i] = auditors
+	}
+	return auditorHistory
+}

+ 53 - 0
services/safe_audit.service.go

@@ -0,0 +1,53 @@
+/*
+ * @description: 安全巡检审批相关
+ * @Author: LanJianRong
+ * @Date: 2020-12-18
+ * @FilePath: \construction_management\web\api\safe_rpc_api.go
+ */
+package services
+
+import (
+	"log"
+
+	"github.com/kataras/iris/v12"
+	"go.mod/dao"
+	"go.mod/datasource"
+	"go.mod/web/viewmodels"
+)
+
+type SafeAuditService interface {
+	ValidRule(ctx iris.Context) (viewmodels.SafeAudit, error)
+	AddAuditor(safeId int, bId int, auditId int, times int) error
+}
+
+type safeAuditService struct {
+	daoSafeAudit *dao.SafeAuditDao
+}
+
+//创建项目用户service
+func NewSafeAuditService() SafeAuditService {
+	return &safeAuditService{
+		daoSafeAudit: dao.NewSafeAuditDao(datasource.InstanceDbMaster()),
+	}
+}
+
+// 增加审批人
+func (s *safeAuditService) AddAuditor(safeId int, bId int, auditId int, times int) error {
+	err := s.daoSafeAudit.AddAuditor(safeId, bId, auditId, times)
+	return err
+}
+
+// 规则校验
+func (s *safeAuditService) ValidRule(ctx iris.Context) (viewmodels.SafeAudit, error) {
+	safeAuditVaild := viewmodels.SafeAudit{}
+	if ctx.Method() == "POST" {
+		err := ctx.ReadJSON(&safeAuditVaild)
+		if err != nil {
+			log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
+			return safeAuditVaild, err
+		}
+		err = safeAuditVaild.ValidateAddAuditor()
+		return safeAuditVaild, err
+	}
+	return safeAuditVaild, nil
+}

+ 5 - 3
services/safe_service.go

@@ -18,7 +18,7 @@ type SafeService interface {
 	Get(id int, pid int, pageNo int, pageSize int) ([]viewmodels.SafeList, int64)
 	Post(data models.CmSafe) error
 	Del(id int) error
-	GetDetail(id int, pid int) viewmodels.SafeDetail
+	GetDetail(id int, pid int) (viewmodels.SafeDetail, map[int][]viewmodels.HistorySafeAudit)
 	ValidRule(ctx iris.Context) (viewmodels.Safe, error)
 }
 
@@ -88,7 +88,7 @@ func (s *safeService) Del(id int) error {
 }
 
 // 详情页数据拼装
-func (s *safeService) GetDetail(id int, pid int) viewmodels.SafeDetail {
+func (s *safeService) GetDetail(id int, pid int) (viewmodels.SafeDetail, map[int][]viewmodels.HistorySafeAudit) {
 
 	safeData := s.daoSafe.FindById(id)
 	// fmt.Println(safeData)
@@ -124,8 +124,10 @@ func (s *safeService) GetDetail(id int, pid int) viewmodels.SafeDetail {
 	fileVM.Total = total
 	data.File = fileVM
 	auditors := s.daoSafeAudit.GetAuditors(safeData.Id, safeData.Times, account.Id)
+	auditHistory := s.daoSafeAudit.GetAuditHistory(safeData.Id, safeData.Times)
 	data.Auditors = auditors
-	return data
+
+	return data, auditHistory
 }
 
 // 规则校验

+ 6 - 4
web/api/safe_api.go

@@ -96,6 +96,7 @@ func (c *SafeApi) Post() {
 	data.BidsectionId = bidsectionId
 	data.Code = safeData.Code
 	data.Inspection = safeData.Inspection
+	data.Times = 1
 	uid, err := utils.GetProjectAccountId(c.Ctx)
 	if err != nil {
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": "未登录或账号失效,请重新登录"})
@@ -183,11 +184,12 @@ func (c *SafeApi) GetDetail() {
 		return
 	}
 	pid, _ := utils.GetProjectId(c.Ctx)
-	SafeData := c.ServiceSafe.GetDetail(id, pid)
+	SafeData, History := c.ServiceSafe.GetDetail(id, pid)
 
 	c.Ctx.JSON(iris.Map{
-		"code": 0,
-		"msg":  "请求成功",
-		"data": SafeData,
+		"code":         0,
+		"msg":          "请求成功",
+		"data":         SafeData,
+		"auditHistory": History,
 	})
 }

+ 70 - 0
web/api/safe_audit_api.go

@@ -0,0 +1,70 @@
+/*
+ * @description: 安全巡检审批相关
+ * @Author: LanJianRong
+ * @Date: 2020-12-18
+ * @FilePath: \construction_management\web\api\safe_rpc_api.go
+ */
+
+package api
+
+import (
+	"fmt"
+
+	"github.com/kataras/iris/v12"
+	"go.mod/services"
+	"go.mod/web/utils"
+)
+
+type SafeAuditApi struct {
+	//框架-web应用上下文环境
+	Ctx iris.Context
+	// 需要用的service
+	SafeAuditService services.SafeAuditService
+}
+
+// @Summary 添加审批流程
+// @Tags 安全巡检-审批
+// @Description 增加审批人进审批流程
+// @Accept  json
+// @Produce  json
+// @Security ApiKeyAuth
+// @Param   safe_id     body    string     true        "质量巡检id"
+// @Param   bidsection_id     body    string     true        "标段id"
+// @Param   times     body    string     true        "审批次数"
+// @Param   audit_id     body    string     true        "审批人id"
+// @Success 200 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
+// @Failure 400 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
+// @Router /api/safe_audit/add [post]
+func (c *SafeAuditApi) PostAdd() {
+	// 1.规则验证
+	safeAuditData, err := c.SafeAuditService.ValidRule(c.Ctx)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+	bidsectionId, err := utils.GetDecryptId(safeAuditData.BidsectionId)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
+		return
+	}
+
+	auditId, err := utils.GetDecryptId(safeAuditData.AuditId)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
+		return
+	}
+	safeId, err := utils.GetDecryptId(safeAuditData.SafeId)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
+		return
+	}
+	err = c.SafeAuditService.AddAuditor(safeId, bidsectionId, auditId, safeAuditData.Times)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+	c.Ctx.JSON(iris.Map{
+		"code": 0,
+		"msg":  "插入成功",
+	})
+}

+ 1 - 1
web/main.go

@@ -51,7 +51,7 @@ func main() {
 
 	// api接口文档配置
 	config := &swagger.Config{
-		URL: "http://cm.com/docs/swagger.json", //The url pointing to API definition
+		URL: "http://localhost:6060/docs/swagger.json", //The url pointing to API definition
 	}
 
 	app.Get("/swagger/{any:path}", swagger.CustomWrapHandler(config, swaggerFiles.Handler))

+ 6 - 0
web/routes/routes.go

@@ -28,6 +28,7 @@ func Configure(b *bootstrap.Bootstrapper) {
 	SafeService := services.NewSafeService()
 	RuleService := services.NewRuleService()
 	AnnexService := services.NewAnnexService()
+	SafeAuditService := services.NewSafeAuditService()
 	//CSRF相关
 	b.Use(middleware.SetCsrf)
 
@@ -146,6 +147,11 @@ func Configure(b *bootstrap.Bootstrapper) {
 	apiSafe.Router.Use(middleware.AccessAuth)
 	apiSafe.Handle(new(api.SafeApi))
 
+	apiSafeAudit := mvc.New(b.Party("/api/safe_audit"))
+	apiSafeAudit.Register(SafeAuditService)
+	apiSafeAudit.Router.Use(middleware.SessionsAuth)
+	apiSafeAudit.Router.Use(middleware.AccessAuth)
+	apiSafeAudit.Handle(new(api.SafeAuditApi))
 	// rule
 	apiRule := mvc.New(b.Party("/api/rule"))
 	apiRule.Register(RuleService)

+ 10 - 12
web/viewmodels/safe.go

@@ -10,7 +10,6 @@ import (
 	"time"
 
 	validation "github.com/go-ozzo/ozzo-validation/v3"
-	"go.mod/models"
 )
 
 type Safe struct {
@@ -46,17 +45,16 @@ type SafeDetail struct {
 	Id           string `form:"id" json:"id" `
 	BidsectionId string `form:"bidsectionId" json:"bidsectionId"`
 
-	Code             string               `form:"code" json:"code"`
-	CreateTime       time.Time            `form:"createTime" json:"createTime"`
-	Position         string               `form:"position" json:"position"`
-	Inspection       string               `form:"inspection" json:"inspection"`
-	InspectionDetail string               `form:"inspectionDetail" json:"inspectionDetail"`
-	Demand           string               `form:"demand" json:"demand"`
-	Status           int                  `form:"status" json:"status"`
-	AuditName        string               `form:"auditName" json:"auditName"`
-	File             FileStruct           `form:"file" json:"file"`
-	Auditors         []Auditors           `form:"auditors" json:"auditors"`
-	auditorHistory   []models.CmSafeAudit `form:"auditorHistory" json:"auditorHistory"`
+	Code             string     `form:"code" json:"code"`
+	CreateTime       time.Time  `form:"createTime" json:"createTime"`
+	Position         string     `form:"position" json:"position"`
+	Inspection       string     `form:"inspection" json:"inspection"`
+	InspectionDetail string     `form:"inspectionDetail" json:"inspectionDetail"`
+	Demand           string     `form:"demand" json:"demand"`
+	Status           int        `form:"status" json:"status"`
+	AuditName        string     `form:"auditName" json:"auditName"`
+	File             FileStruct `form:"file" json:"file"`
+	Auditors         []Auditors `form:"auditors" json:"auditors"`
 }
 
 // 单独出一个struct方便分页使用

+ 44 - 0
web/viewmodels/safe_audit.go

@@ -0,0 +1,44 @@
+/*
+ * @description: 质量巡检-审批
+ * @Author: LanJianRong
+ * @Date: 2020-12-18
+ * @FilePath: \construction_management\web\viewmodels\safe_audit.go
+ */
+package viewmodels
+
+import (
+	"time"
+
+	validation "github.com/go-ozzo/ozzo-validation/v3"
+)
+
+type SafeAudit struct {
+	Id           string    `form:"id" json:"id" `
+	SafeId       string    `form:"safe_id" json:"safe_id" `
+	BidsectionId string    `form:"bidsection_id" json:"bidsection_id" `
+	Times        int       `form:"times" json:"times" `
+	AuditId      string    `form:"audit_id" json:"audit_id" `
+	AuditOrder   int       `form:"audit_order" json:"audit_order" `
+	Status       int       `form:"status" json:"status" `
+	CreateTime   time.Time `form:"create_time" json:"create_time" `
+	EndTime      time.Time `form:"end_time" json:"end_time" `
+	Opinion      string    `form:"opinion" json:"opinion" `
+}
+
+type HistorySafeAudit struct {
+	Name       string    `from:"name" json:"name"`
+	Position   string    `from:"position" json:"position"`
+	Createtime time.Time `from:"create_time" json:"create_time"`
+	EndTime    time.Time `from:"end_time" json:"end_time"`
+	Opinion    string    `from:"opinion" json:"opinion"`
+	Status     int       `fron:"status" json:"status"`
+}
+
+func (l SafeAudit) ValidateAddAuditor() error {
+	return validation.ValidateStruct(&l,
+		validation.Field(&l.BidsectionId, validation.Required.Error("标段ID不能为空")),
+		validation.Field(&l.SafeId, validation.Required.Error("巡检ID不能为空")),
+		validation.Field(&l.Times, validation.Required.Error("times不能为空")),
+		validation.Field(&l.AuditId, validation.Required.Error("审核人不能为空")),
+	)
+}