소스 검색

feat: 安全巡检状态数据写入tree树

lanjianrong 4 년 전
부모
커밋
4b048049aa
7개의 변경된 파일276개의 추가작업 그리고 67개의 파일을 삭제
  1. 145 45
      dao/approver_dao.go
  2. 82 7
      dao/safe_dao.go
  3. 9 0
      dao/tree_dao.go
  4. 1 1
      services/quality_audit.service.go
  5. 12 1
      services/safe_audit.service.go
  6. 21 13
      services/safe_service.go
  7. 6 0
      web/api/safe_api.go

+ 145 - 45
dao/approver_dao.go

@@ -185,7 +185,7 @@ func (d *ApproverDao) InitStatus(bid int, dataType int, dataId int, auditId int,
 }
 
 // 审批通过
-func (d *ApproverDao) PassHandler(id int, uid int, auditId int, opinion string, rectifiedInfo string) error {
+func (d *ApproverDao) PassHandler(auditType string, id int, uid int, auditId int, opinion string, rectifiedInfo string) error {
 	session := d.engine.NewSession()
 	defer session.Close()
 	// add Begin() before any action
@@ -197,74 +197,174 @@ func (d *ApproverDao) PassHandler(id int, uid int, auditId int, opinion string,
 	if auditor.AuditId != uid {
 		return errors.New("该用户没有审批权限!")
 	}
-	safe := &models.CmSafe{}
-	_, err = session.ID(auditor.DataId).Get(safe)
-	if err != nil {
-		session.Rollback()
-		return err
-	}
-	// 增加审批日志
-	auditReacord := &models.CmSafeAudit{BidsectionId: auditor.BidsectionId, SafeId: auditor.DataId, AuditId: auditor.AuditId, Times: safe.Times, CreateTime: time.Now(), Status: 0, Progress: auditor.Progress + 1, Opinion: opinion, Rectifiedinfo: rectifiedInfo}
-	_, err = session.Insert(auditReacord)
-	if err != nil {
-		session.Rollback()
-		return err
-	}
-	// 改变审批流程中当前审批人以及下一个审批人的审批流程状态
-	curData := &models.CmApprover{Status: 2}
-	_, err = session.ID(id).Cols("status").Update(curData)
-	if err != nil {
-		session.Rollback()
-		return err
-	}
-	nextData := &models.CmApprover{Status: 1}
-	_, err = session.Where("bidsection_id = ? and data_type = ? and data_id = ? and audit_order = ?", auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditOrder+1).Cols("status").Update(nextData)
-	if err != nil {
-		session.Rollback()
-		return err
-	}
-	if auditId != 0 {
-		// 审批人选择了整改人
-		// 修改cm_safe表的status状态为待整改
-		_, err = session.Exec("update `cm_safe` set status = ? where id = ?", 2, auditor.DataId)
+	// 安全巡检
+	if auditType == "safe" {
+		safe := &models.CmSafe{}
+		_, err = session.ID(auditor.DataId).Get(safe)
 		if err != nil {
 			session.Rollback()
 			return err
 		}
-		// 改变审批流程中的整改人id
-		_, err = session.Exec("update `cm_approver` set `audit_id` = ? where `bidsection_id` = ? and `data_type` = ? and `data_id` = ? and `audit_order` = ?", auditId, auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditOrder+1)
+		// 增加审批日志
+		auditReacord := &models.CmSafeAudit{BidsectionId: auditor.BidsectionId, SafeId: auditor.DataId, AuditId: auditor.AuditId, Times: safe.Times, CreateTime: time.Now(), Status: 0, Progress: auditor.Progress + 1, Opinion: opinion, Rectifiedinfo: rectifiedInfo}
+		_, err = session.Insert(auditReacord)
 		if err != nil {
 			session.Rollback()
 			return err
 		}
-	} else {
-		if auditor.Progress == 1 {
-			// 整改人审批流程
-			// 修改cm_safe表的status状态为待复查
-			_, err = session.Exec("update `cm_safe` set status = ? where id = ?", 3, auditor.DataId)
+		// 改变审批流程中当前审批人以及下一个审批人的审批流程状态
+		curData := &models.CmApprover{Status: 2}
+		_, err = session.ID(id).Cols("status").Update(curData)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		nextData := &models.CmApprover{Status: 1}
+		_, err = session.Where("bidsection_id = ? and data_type = ? and data_id = ? and audit_order = ?", auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditOrder+1).Cols("status").Update(nextData)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		if auditId != 0 {
+			// 审批人选择了整改人
+			// 修改cm_safe表的status状态为待整改
+			_, err = session.Exec("update `cm_safe` set status = ? where id = ?", 2, auditor.DataId)
+			if err != nil {
+				session.Rollback()
+				return err
+			}
+
+			// 将cm_tree的safe_rectification待整改+1
+			_, err := session.Exec("update cm_tree set safe_rectification_in = safe_rectification_in + 1, safe_rectification = if(safe_rectification >= 1, safe_rectification - 1, 0) where bidsection_id = ?", auditor.BidsectionId)
+			if err != nil {
+				session.Rollback()
+				return err
+			}
+			// 改变审批流程中的整改人id
+			_, err = session.Exec("update `cm_approver` set `audit_id` = ? where `bidsection_id` = ? and `data_type` = ? and `data_id` = ? and `audit_order` = ?", auditId, auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditOrder+1)
 			if err != nil {
 				session.Rollback()
 				return err
 			}
 		} else {
-			// 复查流程
-			// 查找最后一个审批人
-			lastAuditor := &models.CmApprover{BidsectionId: auditor.BidsectionId, DataType: auditor.DataType, DataId: auditor.DataId}
-			_, err = session.Desc("audit_order").Limit(1).Get(lastAuditor)
+			if auditor.Progress == 1 {
+				// 整改人审批流程
+				// 修改cm_safe表的status状态为待复查
+				_, err = session.Exec("update `cm_safe` set status = ? where id = ?", 3, auditor.DataId)
+				if err != nil {
+					session.Rollback()
+					return err
+				}
+			} else {
+				// 复查流程
+				// 查找最后一个审批人
+				lastAuditor := &models.CmApprover{BidsectionId: auditor.BidsectionId, DataType: auditor.DataType, DataId: auditor.DataId}
+				_, err = session.Desc("audit_order").Limit(1).Get(lastAuditor)
+				if err != nil {
+					session.Rollback()
+					return err
+				}
+				if lastAuditor.AuditId == auditor.AuditId {
+					// 说明审批流程已经走完
+					_, err = session.Exec("update `cm_safe` set status = ? where id = ?", 4, auditor.DataId)
+					if err != nil {
+						session.Rollback()
+						return err
+					}
+					// 将cm_tree的safe_rectification_finish待整改+1
+					_, err := session.Exec("update cm_tree set safe_rectification_finish = safe_rectification_finish + 1,  safe_rectification_finish = if(safe_rectification_finish >= 1, safe_rectification_finish - 1, 0)where bidsection_id = ?", auditor.BidsectionId)
+					if err != nil {
+						session.Rollback()
+						return err
+					}
+				}
+			}
+		}
+	} else {
+		// 质量巡检
+		quality := &models.CmQuality{}
+		_, err = session.ID(auditor.DataId).Get(quality)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		// 增加审批日志
+		auditReacord := &models.CmQualityAudit{BidsectionId: auditor.BidsectionId, QualityId: auditor.DataId, AuditId: auditor.AuditId, Times: quality.Times, CreateTime: time.Now(), Status: 0, Progress: auditor.Progress + 1, Opinion: opinion, Rectifiedinfo: rectifiedInfo}
+		_, err = session.Insert(auditReacord)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		// 改变审批流程中当前审批人以及下一个审批人的审批流程状态
+		curData := &models.CmApprover{Status: 2}
+		_, err = session.ID(id).Cols("status").Update(curData)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		nextData := &models.CmApprover{Status: 1}
+		_, err = session.Where("bidsection_id = ? and data_type = ? and data_id = ? and audit_order = ?", auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditOrder+1).Cols("status").Update(nextData)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		if auditId != 0 {
+			// 审批人选择了整改人
+			// 修改cm_quality表的status状态为待整改
+			_, err = session.Exec("update `cm_quality` set status = ? where id = ?", 2, auditor.DataId)
+			if err != nil {
+				session.Rollback()
+				return err
+			}
+
+			// 将cm_tree的quality_rectification待整改+1
+			_, err := session.Exec("update cm_tree set quality_rectification_in = quality_rectification_in + 1, quality_rectification = if(quality_rectification >= 1, quality_rectification - 1, 0) where bidsection_id = ?", auditor.BidsectionId)
+			if err != nil {
+				session.Rollback()
+				return err
+			}
+			// 改变审批流程中的整改人id
+			_, err = session.Exec("update `cm_approver` set `audit_id` = ? where `bidsection_id` = ? and `data_type` = ? and `data_id` = ? and `audit_order` = ?", auditId, auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditOrder+1)
 			if err != nil {
 				session.Rollback()
 				return err
 			}
-			if lastAuditor.AuditId == auditor.AuditId {
-				// 说明审批流程已经走完
-				_, err = session.Exec("update `cm_safe` set status = ? where id = ?", 4, auditor.DataId)
+		} else {
+			if auditor.Progress == 1 {
+				// 整改人审批流程
+				// 修改cm_quality表的status状态为待复查
+				_, err = session.Exec("update `cm_quality` set status = ? where id = ?", 3, auditor.DataId)
+				if err != nil {
+					session.Rollback()
+					return err
+				}
+			} else {
+				// 复查流程
+				// 查找最后一个审批人
+				lastAuditor := &models.CmApprover{BidsectionId: auditor.BidsectionId, DataType: auditor.DataType, DataId: auditor.DataId}
+				_, err = session.Desc("audit_order").Limit(1).Get(lastAuditor)
 				if err != nil {
 					session.Rollback()
 					return err
 				}
+				if lastAuditor.AuditId == auditor.AuditId {
+					// 说明审批流程已经走完
+					_, err = session.Exec("update `cm_quality` set status = ? where id = ?", 4, auditor.DataId)
+					if err != nil {
+						session.Rollback()
+						return err
+					}
+					// 将cm_tree的quality_rectification_finish待整改+1
+					_, err := session.Exec("update cm_tree set quality_rectification_finish = quality_rectification_finish + 1, quality_rectification_finish = if(quality_rectification_finish >= 1, quality_rectification_finish - 1, 0) where bidsection_id = ?", auditor.BidsectionId)
+					if err != nil {
+						session.Rollback()
+						return err
+					}
+				}
 			}
 		}
 	}
+
 	err = session.Commit()
 	return err
 }

+ 82 - 7
dao/safe_dao.go

@@ -8,6 +8,7 @@
 package dao
 
 import (
+	"errors"
 	"fmt"
 	"time"
 
@@ -61,17 +62,42 @@ func (d *SafeDao) InsertRecord(data models.CmSafe) (bool, error) {
 }
 
 // 删除记录
-func (d *SafeDao) DeleteRecord(id int) (bool, error) {
-	safe := models.CmSafe{}
-	affected, err := d.engine.Id(id).Delete(safe)
-	return affected > 0, err
+func (d *SafeDao) DeleteRecord(id int) error {
+	session := d.engine.NewSession()
+	defer session.Close()
+	err := session.Begin()
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+
+	safe := &models.CmSafe{Id: id}
+	_, err = session.Get(safe)
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	bidsectionId := safe.BidsectionId
+	_, err = session.ID(id).Delete(safe)
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	// 计算当前安全巡检总数
+	_, err = session.Exec("update `cm_tree` set `safe_total` = if(`safe_total` >= 1, `safe_total` - 1, 0) where `bidsection_id` = ?", bidsectionId)
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	err = session.Commit()
+	return err
 }
 
 // 根据code获取记录
-func (d *SafeDao) FindByCode(code string) bool {
+func (d *SafeDao) FindByCode(code string) (bool, error) {
 	data := &models.CmSafe{Code: code}
-	has, _ := d.engine.Get(data)
-	return has
+	has, err := d.engine.Get(data)
+	return has, err
 }
 
 // 筛选出应用了当前规则的条数
@@ -126,3 +152,52 @@ func (d *SafeDao) GetTypeYear(bidsectionId int, year int) []viewmodels.SafeSurve
 		Find(&datalist)
 	return datalist
 }
+
+// 根据bid
+func (d *SafeDao) GetCountsByBid(bidsectionId int, status int, isAll bool) (int64, error) {
+	data := &models.CmSafe{}
+	if isAll == true {
+		counts, err := d.engine.Where("bidsection_id = ?", bidsectionId).Count(data)
+		return counts, err
+	} else {
+		counts, err := d.engine.Where("bidsection_id = ? and status = ?", bidsectionId, status).Count(data)
+		return counts, err
+	}
+}
+
+// 事务-创建新的安全巡检记录
+func (d *SafeDao) CreateSafe(data models.CmSafe) error {
+	session := d.engine.NewSession()
+	defer session.Close()
+	err := session.Begin()
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	has, err := session.Where("code = ?", data.Code).Get(&data)
+	// err或者code存在都回滚
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	if has == true {
+		session.Rollback()
+		return errors.New("该编号已存在!")
+	}
+	_, err = session.Insert(data)
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	// 更新cm_tree中的safe_total、safe_rectification
+	_, err = session.Exec("update `cm_tree` set `safe_total` = `safe_total` + 1 , `safe_rectification` = `safe_rectification` + 1 where `bidsection_id` = ?", data.BidsectionId)
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	err = session.Commit()
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 9 - 0
dao/tree_dao.go

@@ -402,3 +402,12 @@ func (d *TreeDao) replaceContractAttribution(session *xorm.Session, attributionC
 	}
 	return nil
 }
+
+// 根据bid更新记录中的安全、质量巡检相关字段
+
+func (d *TreeDao) UpdateCounts(key string, value int64, bid int) error {
+	attributionSql := fmt.Sprintf("%s = %d ", key, value)
+	sql := "update cm_tree set  " + attributionSql + "where bidsection_id = ?"
+	_, err := d.engine.Exec(sql, bid)
+	return err
+}

+ 1 - 1
services/quality_audit.service.go

@@ -77,7 +77,7 @@ func (s *qualityAuditService) BackAudit(id int, opinion string, curUid int, save
 
 // 审批通过
 func (s *qualityAuditService) PassAudit(id int, uid int, auditId int, opinion string, rectifiedInfo string) error {
-	err := s.daoApprover.PassHandler(id, uid, auditId, opinion, rectifiedInfo)
+	err := s.daoApprover.PassHandler("quality", id, uid, auditId, opinion, rectifiedInfo)
 	return err
 }
 

+ 12 - 1
services/safe_audit.service.go

@@ -35,6 +35,7 @@ type safeAuditService struct {
 	daoSafeAudit *dao.SafeAuditDao
 	daoSafe      *dao.SafeDao
 	daoApprover  *dao.ApproverDao
+	daoTree      *dao.TreeDao
 }
 
 //创建项目用户service
@@ -47,6 +48,7 @@ func NewSafeAuditService() SafeAuditService {
 		daoSafeAudit: dao.NewSafeAuditDao(datasource.InstanceDbMaster()),
 		daoSafe:      dao.NewSafeDao(datasource.InstanceDbMaster()),
 		daoApprover:  dao.NewApproverDao(datasource.InstanceDbMaster()),
+		daoTree:      dao.NewTreeDao(datasource.InstanceDbMaster()),
 	}
 }
 
@@ -78,7 +80,7 @@ func (s *safeAuditService) BackAudit(id int, opinion string, curUid int, saveId
 
 // 审批通过
 func (s *safeAuditService) PassAudit(id int, uid int, auditId int, opinion string, rectifiedInfo string) error {
-	err := s.daoApprover.PassHandler(id, uid, auditId, opinion, rectifiedInfo)
+	err := s.daoApprover.PassHandler("safe", id, uid, auditId, opinion, rectifiedInfo)
 	return err
 }
 
@@ -89,10 +91,19 @@ func (s *safeAuditService) StartAudit(safeId int, bidsectionId int, auditors []i
 	}
 	// 清除可能有的旧的审批流程
 	err := s.daoApprover.DeleteOldAuditors(bidsectionId, 1, safeId)
+	if err != nil {
+		return err
+	}
 	// 增加审批日志
 	err = s.daoSafeAudit.AddAuditRecord(safeId, bidsectionId, uid, safe.Times, 0, 0, "", "")
+	if err != nil {
+		return err
+	}
 	// 改变安全巡检表的状态
 	err = s.daoSafe.ChangeStatus(safeId, 1, inspection, inspectionDetail, demand, createTime)
+	if err != nil {
+		return err
+	}
 	// 创建审批流程
 	err = s.daoApprover.InsertData(bidsectionId, pid, 1, safeId, auditors, reAuditors)
 	return err

+ 21 - 13
services/safe_service.go

@@ -1,7 +1,6 @@
 package services
 
 import (
-	"errors"
 	"fmt"
 	"log"
 	"strconv"
@@ -36,6 +35,7 @@ type safeService struct {
 	daoAnnex          *dao.AnnexDao
 	daoRule           *dao.RuleDao
 	daoApprover       *dao.ApproverDao
+	daoTree           *dao.TreeDao
 	validDetail       string
 }
 
@@ -48,6 +48,7 @@ func NewSafeService() SafeService {
 		daoSafeAudit:      dao.NewSafeAuditDao(datasource.InstanceDbMaster()),
 		daoProjectAccount: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
 		daoApprover:       dao.NewApproverDao(datasource.InstanceDbMaster()),
+		daoTree:           dao.NewTreeDao(datasource.InstanceDbMaster()),
 	}
 }
 func (s *safeService) Get(id int, pid int, pageNo int, pageSize int) ([]viewmodels.SafeList, int64) {
@@ -75,23 +76,30 @@ func (s *safeService) Get(id int, pid int, pageNo int, pageSize int) ([]viewmode
 
 // post请求,插入单条数据
 func (s *safeService) Post(data models.CmSafe) error {
-	has := s.daoSafe.FindByCode(data.Code)
-	if has {
-		return errors.New("该编号已存在!")
-	}
-	Inserted, err := s.daoSafe.InsertRecord(data)
-	if Inserted == true {
-		return nil
-	}
+	// has, err := s.daoSafe.FindByCode(data.Code)
+	// if err != nil {
+	// 	return err
+	// }
+	// if has {
+	// 	return errors.New("该编号已存在!")
+	// }
+	// _, err = s.daoSafe.InsertRecord(data)
+	// if err != nil {
+	// 	return err
+	// }
+	// counts, err := s.daoSafe.GetCountsByBid(data.BidsectionId, data.Status, true)
+	// err = s.daoTree.UpdateCounts("safe_total", counts, data.BidsectionId)
+	// if err != nil {
+	// 	return err
+	// }
+	// return nil
+	err := s.daoSafe.CreateSafe(data)
 	return err
 }
 
 // delete请求,删除数据
 func (s *safeService) Del(id int) error {
-	Deleted, err := s.daoSafe.DeleteRecord(id)
-	if Deleted == true {
-		return nil
-	}
+	err := s.daoSafe.DeleteRecord(id)
 	return err
 }
 

+ 6 - 0
web/api/safe_api.go

@@ -104,6 +104,12 @@ func (c *SafeApi) Post() {
 		return
 	}
 	data.Uid = uid
+	pid, err := utils.GetProjectId(c.Ctx)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+	data.ProjectId = pid
 	createTime, err := time.Parse(conf.SysTimeform, safeData.CreateTime)
 	if err != nil {
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": "日期转换异常,请检查参数"})