lanjianrong 4 年之前
父節點
當前提交
a6a740daec

+ 110 - 42
dao/approver_dao.go

@@ -151,7 +151,7 @@ func (d *ApproverDao) GetLastAuditor(bid int, dataType int, dataId int) (*models
 }
 
 // 初始化审批流程状态
-func (d *ApproverDao) InitStatus(bid int, dataType int, dataId int, auditId int, times int, progress int, opinion string) error {
+func (d *ApproverDao) InitStatus(auditType string, bid int, dataType int, dataId int, auditId int, times int, progress int, opinion string) error {
 	session := d.engine.NewSession()
 	defer session.Close()
 	err := session.Begin()
@@ -165,23 +165,42 @@ func (d *ApproverDao) InitStatus(bid int, dataType int, dataId int, auditId int,
 		session.Rollback()
 		return err
 	}
-	_, err = session.Exec("update cm_safe set status = ?, times = ? where id = ?", 0, times+1, dataId)
-	if err != nil {
-		session.Rollback()
-		return err
-	}
-	// 增加审批日志
-	safeAudit := &models.CmSafeAudit{BidsectionId: bid, SafeId: dataId, Times: times, AuditId: auditId, Status: 1, Progress: 0, CreateTime: time.Now(), Opinion: opinion}
-	_, err = session.Insert(safeAudit)
-	if err != nil {
-		session.Rollback()
-		return err
+	if auditType == "safe" {
+		_, err = session.Exec("update cm_safe set status = ?, times = ? where id = ?", 0, times+1, dataId)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		// 增加审批日志
+		safeAudit := &models.CmSafeAudit{BidsectionId: bid, SafeId: dataId, Times: times, AuditId: auditId, Status: 1, Progress: progress, CreateTime: time.Now(), Opinion: opinion}
+		_, err = session.Insert(safeAudit)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		// 说明本身除于整改人流程,退回原报,要将整改总数-1,未整改总数+1
+		if progress-1 != 0 {
+			_, err = session.Exec("update cm_tree set safe_rectification = safe_rectification + 1, safe_rectification_in = if(safe_rectification_in >= 1, safe_rectification_in - 1, 0) where bidsection_id = ?", bid)
+		}
+	} else {
+		_, err = session.Exec("update cm_quality set status = ?, times = ? where id = ?", 0, times+1, dataId)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		// 增加审批日志
+		qualityAudit := &models.CmQualityAudit{BidsectionId: bid, QualityId: dataId, Times: times, AuditId: auditId, Status: 1, Progress: progress, CreateTime: time.Now(), Opinion: opinion}
+		_, err = session.Insert(qualityAudit)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		if progress-1 != 0 {
+			_, err = session.Exec("update cm_tree set quality_rectification = quality_rectification + 1, quality_rectification_in = if(quality_rectification_in >= 1, quality_rectification_in - 1, 0) where bidsection_id = ?", bid)
+		}
 	}
 	err = session.Commit()
-	if err != nil {
-		return err
-	}
-	return nil
+	return err
 }
 
 // 审批通过
@@ -272,7 +291,7 @@ func (d *ApproverDao) PassHandler(auditType string, id int, uid int, auditId int
 						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)
+					_, err := session.Exec("update cm_tree set safe_rectification_finish = safe_rectification_finish + 1,  safe_rectification_in = if(safe_rectification_in >= 1, safe_rectification_in - 1, 0)where bidsection_id = ?", auditor.BidsectionId)
 					if err != nil {
 						session.Rollback()
 						return err
@@ -355,7 +374,7 @@ func (d *ApproverDao) PassHandler(auditType string, id int, uid int, auditId int
 						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)
+					_, err := session.Exec("update cm_tree set quality_rectification_finish = quality_rectification_finish + 1, quality_rectification_in = if(quality_rectification_in >= 1, quality_rectification_in - 1, 0) where bidsection_id = ?", auditor.BidsectionId)
 					if err != nil {
 						session.Rollback()
 						return err
@@ -370,12 +389,10 @@ func (d *ApproverDao) PassHandler(auditType string, id int, uid int, auditId int
 }
 
 // 审批流程-退回
-func (d *ApproverDao) BackHandlerWithId(id int, uid int, times int, progress int, opinion string) error {
+func (d *ApproverDao) BackHandlerWithId(auditType string, id int, uid int, times int, progress int, opinion string) error {
 	session := d.engine.NewSession()
 	defer session.Close()
-	// add Begin() before any action
 	err := session.Begin()
-	// auditor, err := d.FindApproverById(id)
 	auditor := &models.CmApprover{}
 	_, err = session.ID(id).Get(auditor)
 	data := &models.CmApprover{Status: 0}
@@ -393,17 +410,46 @@ func (d *ApproverDao) BackHandlerWithId(id int, uid int, times int, progress int
 		return err
 	}
 	// 增加审批日志
-	safeAudit := &models.CmSafeAudit{BidsectionId: auditor.BidsectionId, SafeId: auditor.DataId, Times: times, AuditId: uid, Status: 1, Progress: progress, CreateTime: time.Now(), Opinion: opinion}
-	_, err = session.Insert(safeAudit)
+	if auditType == "safe" {
+		safeAudit := &models.CmSafeAudit{BidsectionId: auditor.BidsectionId, SafeId: auditor.DataId, Times: times, AuditId: uid, Status: 1, Progress: progress, CreateTime: time.Now(), Opinion: opinion}
+		_, err = session.Insert(safeAudit)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+	} else {
+		qualityAudit := &models.CmQualityAudit{BidsectionId: auditor.BidsectionId, QualityId: auditor.DataId, Times: times, AuditId: uid, Status: 1, Progress: progress, CreateTime: time.Now(), Opinion: opinion}
+		_, err = session.Insert(qualityAudit)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+	}
+	curAuditor := &models.CmApprover{}
+	_, err = session.ID(uid).Get(curAuditor)
 	if err != nil {
 		session.Rollback()
 		return err
 	}
+	// 当前审批人是整改或者复查流程的并且退回的是审批流程的
+	if curAuditor.Progress >= 1 && auditor.Progress == 0 {
+		var sql string
+		if auditType == "safe" {
+			sql = "update cm_tree set safe_rectification = safe_rectification_in + 1 and safe_rectification_in = if(safe_rectification_in >= 1, safe_rectification_in - 1, 0) where bidseciont_id = ?"
+		} else {
+			sql = "update cm_tree set quality_rectification = quality_rectification_in + 1 and quality_rectification_in = if(quality_rectification_in >= 1, quality_rectification_in - 1, 0) where bidseciont_id = ?"
+		}
+		_, err = session.Exec(sql, auditor.BidsectionId)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+	}
 	err = session.Commit()
 	return err
 }
 
-func (d *ApproverDao) CloseHandler(id int, opinion string, curUid int, saveId int) error {
+func (d *ApproverDao) CloseHandler(auditType string, id int, opinion string, curUid int, saveId int) error {
 	session := d.engine.NewSession()
 	defer session.Close()
 	// add Begin() before any action
@@ -412,24 +458,46 @@ func (d *ApproverDao) CloseHandler(id int, opinion string, curUid int, saveId in
 	if auditor.AuditId != curUid {
 		return errors.New("该用户没有审批权限!")
 	}
-	safe := &models.CmSafe{}
-	_, err = session.ID(saveId).Get(safe)
-	if err != nil {
-		session.Rollback()
-		return err
-	}
-	// 增加审批日志
-	safeAudit := &models.CmSafeAudit{BidsectionId: auditor.BidsectionId, SafeId: auditor.DataId, Times: safe.Times, AuditId: auditor.AuditId, Status: 2, Progress: auditor.Progress, CreateTime: time.Now(), Opinion: opinion}
-	_, err = session.Insert(safeAudit)
-	if err != nil {
-		session.Rollback()
-		return err
-	}
-	// 更改cm_safe的记录
-	_, err = session.Exec("update `cm_safe` set status = ? where id = ? ", 5, saveId)
-	if err != nil {
-		session.Rollback()
-		return err
+	if auditType == "safe" {
+		safe := &models.CmSafe{}
+		_, err = session.ID(saveId).Get(safe)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		// 增加审批日志
+		safeAudit := &models.CmSafeAudit{BidsectionId: auditor.BidsectionId, SafeId: auditor.DataId, Times: safe.Times, AuditId: auditor.AuditId, Status: 2, Progress: auditor.Progress, CreateTime: time.Now(), Opinion: opinion}
+		_, err = session.Insert(safeAudit)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		// 更改cm_safe的记录
+		_, err = session.Exec("update `cm_safe` set status = ? where id = ? ", 5, saveId)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+	} else {
+		quality := &models.CmQuality{}
+		_, err = session.ID(saveId).Get(quality)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		// 增加审批日志
+		qualityAudit := &models.CmQualityAudit{BidsectionId: auditor.BidsectionId, QualityId: auditor.DataId, Times: quality.Times, AuditId: auditor.AuditId, Status: 2, Progress: auditor.Progress, CreateTime: time.Now(), Opinion: opinion}
+		_, err = session.Insert(qualityAudit)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
+		// 更改cm_quality的记录
+		_, err = session.Exec("update `cm_quality` set status = ? where id = ? ", 5, saveId)
+		if err != nil {
+			session.Rollback()
+			return err
+		}
 	}
 	// 更改cm_approver的记录
 	_, err = session.Exec("update `cm_approver` set status = ? where id = ? ", 3, id)

+ 71 - 7
dao/quality_dao.go

@@ -8,7 +8,9 @@
 package dao
 
 import (
+	"errors"
 	"fmt"
+	"time"
 
 	"github.com/go-xorm/xorm"
 	"go.mod/models"
@@ -60,10 +62,35 @@ func (d *QualityDao) InsertRecord(data models.CmQuality) (bool, error) {
 }
 
 // 删除记录
-func (d *QualityDao) DeleteRecord(id int) (bool, error) {
-	Quality := models.CmQuality{}
-	affected, err := d.engine.Id(id).Delete(Quality)
-	return affected > 0, err
+func (d *QualityDao) DeleteRecord(id int) error {
+	session := d.engine.NewSession()
+	defer session.Close()
+	err := session.Begin()
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+
+	quality := &models.CmQuality{Id: id}
+	_, err = session.Get(quality)
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	bidsectionId := quality.BidsectionId
+	_, err = session.ID(id).Delete(quality)
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	// 计算当前安全巡检总数
+	_, err = session.Exec("update `cm_tree` set `quality_total` = if(`quality_total` >= 1, `quality_total` - 1, 0),  `quality_rectification` = if(`quality_rectification` >= 1, `quality_rectification` - 1, 0) where `bidsection_id` = ?", bidsectionId)
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	err = session.Commit()
+	return err
 }
 
 // 根据code获取记录
@@ -84,9 +111,9 @@ func (d *QualityDao) CountRuleCode(bid int) (int64, error) {
 }
 
 // 更改status
-func (d *QualityDao) ChangeStatus(id int, status int) error {
-	data := &models.CmQuality{Status: status}
-	_, err := d.engine.ID(id).Update(data)
+func (d *QualityDao) ChangeStatus(id int, status int, inspection string, inspectionDetail string, demand string, createTime time.Time) error {
+	data := &models.CmQuality{Status: status, Inspection: inspection, InspectionDetail: inspectionDetail, Demand: demand, CreateTime: createTime}
+	_, err := d.engine.ID(id).Cols("status", " inspection", "inspection_detail", "demand", "create_time").Update(data)
 	return err
 }
 
@@ -129,3 +156,40 @@ func (d *QualityDao) GetStatusByProjectAndAccount(projectId int, projectAccountI
 		Find(&datalist)
 	return datalist
 }
+
+// 事务-创建新的安全巡检记录
+func (d *QualityDao) CreateQuality(data models.CmQuality) 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中的quality_total、quality_rectification
+	_, err = session.Exec("update `cm_tree` set `quality_total` = `quality_total` + 1 , `quality_rectification` = `quality_rectification` + 1 where `bidsection_id` = ?", data.BidsectionId)
+	if err != nil {
+		session.Rollback()
+		return err
+	}
+	err = session.Commit()
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 1 - 1
dao/safe_dao.go

@@ -84,7 +84,7 @@ func (d *SafeDao) DeleteRecord(id int) error {
 		return err
 	}
 	// 计算当前安全巡检总数
-	_, err = session.Exec("update `cm_tree` set `safe_total` = if(`safe_total` >= 1, `safe_total` - 1, 0) where `bidsection_id` = ?", bidsectionId)
+	_, err = session.Exec("update `cm_tree` set `safe_total` = if(`safe_total` >= 1, `safe_total` - 1, 0), `safe_rectification` = if(`safe_rectification` >= 1, `safe_rectification` - 1, 0) where `bidsection_id` = ?", bidsectionId)
 	if err != nil {
 		session.Rollback()
 		return err

+ 24 - 11
services/quality_audit.service.go

@@ -9,6 +9,7 @@ package services
 import (
 	"errors"
 	"log"
+	"time"
 
 	"github.com/kataras/iris/v12"
 	"go.mod/dao"
@@ -23,7 +24,7 @@ type QualityAuditService interface {
 	CloseAudit(id int, opinion string, curUid int, saveId int) error
 	BackAudit(id int, opinion string, curUid int, saveId int, auditId int) error
 	PassAudit(id int, uid int, auditId int, opinion string, rectifiedInfo string) error
-	StartAudit(safeId int, bidsectionId int, auditors []int, reAuditors []int, uid int, pid int) error
+	StartAudit(safeId int, bidsectionId int, auditors []int, reAuditors []int, uid int, pid int, inspection string, inspectionDetail string, demand string, createTime time.Time) error
 }
 
 type qualityAuditService struct {
@@ -51,7 +52,7 @@ func NewQualityAuditService() QualityAuditService {
 
 // 关闭审批流程
 func (s *qualityAuditService) CloseAudit(id int, opinion string, curUid int, saveId int) error {
-	err := s.daoApprover.CloseHandler(id, opinion, curUid, saveId)
+	err := s.daoApprover.CloseHandler("quality", id, opinion, curUid, saveId)
 	return err
 }
 
@@ -66,10 +67,10 @@ func (s *qualityAuditService) BackAudit(id int, opinion string, curUid int, save
 	// 退回到了检查人
 	if auditId == 0 {
 		// 初始化审批流程
-		err = s.daoApprover.InitStatus(auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditId, safe.Times, auditor.Progress+1, opinion)
+		err = s.daoApprover.InitStatus("quality", auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditId, safe.Times, auditor.Progress+1, opinion)
 	} else {
 		// 退回到审批流程中的某一个人
-		err = s.daoApprover.BackHandlerWithId(auditId, auditor.AuditId, safe.Times, auditor.Progress+1, opinion)
+		err = s.daoApprover.BackHandlerWithId("quality", auditId, auditor.AuditId, safe.Times, auditor.Progress+1, opinion)
 	}
 	return err
 
@@ -81,19 +82,31 @@ func (s *qualityAuditService) PassAudit(id int, uid int, auditId int, opinion st
 	return err
 }
 
-func (s *qualityAuditService) StartAudit(safeId int, bidsectionId int, auditors []int, reAuditors []int, uid int, pid int) error {
-	safe := s.daoQuality.FindById(safeId)
-	if safe.Uid != uid {
+func (s *qualityAuditService) StartAudit(qualityId int, bidsectionId int, auditors []int, reAuditors []int, uid int, pid int, inspection string, inspectionDetail string, demand string, createTime time.Time) error {
+	quality := s.daoQuality.FindById(qualityId)
+	if quality.Uid != uid {
 		return errors.New("该用户没有操作权限!")
 	}
 	// 清除可能有的旧的审批流程
-	err := s.daoApprover.DeleteOldAuditors(bidsectionId, 1, safeId)
+	err := s.daoApprover.DeleteOldAuditors(bidsectionId, 1, qualityId)
+	if err != nil {
+		return err
+	}
 	// 增加审批日志
-	err = s.daoQualityAudit.AddAuditRecord(safeId, bidsectionId, uid, safe.Times, 0, 0, "", "")
+	err = s.daoQualityAudit.AddAuditRecord(qualityId, bidsectionId, uid, quality.Times, 0, 0, "", "")
+	if err != nil {
+		return err
+	}
 	// 改变安全巡检表的状态
-	err = s.daoQuality.ChangeStatus(safeId, 1)
+	err = s.daoQuality.ChangeStatus(qualityId, 1, inspection, inspectionDetail, demand, createTime)
+	if err != nil {
+		return err
+	}
 	// 创建审批流程
-	err = s.daoApprover.InsertData(bidsectionId, pid, 1, safeId, auditors, reAuditors)
+	err = s.daoApprover.InsertData(bidsectionId, pid, 1, qualityId, auditors, reAuditors)
+	if err != nil {
+		return err
+	}
 	return err
 }
 

+ 10 - 13
services/quality_service.go

@@ -1,7 +1,6 @@
 package services
 
 import (
-	"errors"
 	"fmt"
 	"log"
 	"strconv"
@@ -74,23 +73,21 @@ func (s *qualityService) Get(id int, pid int, pageNo int, pageSize int) ([]viewm
 
 // post请求,插入单条数据
 func (s *qualityService) Post(data models.CmQuality) error {
-	has := s.daoQuality.FindByCode(data.Code)
-	if has {
-		return errors.New("该编号已存在!")
-	}
-	Inserted, err := s.daoQuality.InsertRecord(data)
-	if Inserted == true {
-		return nil
-	}
+	// has := s.daoQuality.FindByCode(data.Code)
+	// if has {
+	// 	return errors.New("该编号已存在!")
+	// }
+	// Inserted, err := s.daoQuality.InsertRecord(data)
+	// if Inserted == true {
+	// 	return nil
+	// }
+	err := s.daoQuality.CreateQuality(data)
 	return err
 }
 
 // delete请求,删除数据
 func (s *qualityService) Del(id int) error {
-	Deleted, err := s.daoQuality.DeleteRecord(id)
-	if Deleted == true {
-		return nil
-	}
+	err := s.daoQuality.DeleteRecord(id)
 	return err
 }
 

+ 3 - 3
services/safe_audit.service.go

@@ -54,7 +54,7 @@ func NewSafeAuditService() SafeAuditService {
 
 // 关闭审批流程
 func (s *safeAuditService) CloseAudit(id int, opinion string, curUid int, saveId int) error {
-	err := s.daoApprover.CloseHandler(id, opinion, curUid, saveId)
+	err := s.daoApprover.CloseHandler("safe", id, opinion, curUid, saveId)
 	return err
 }
 
@@ -69,10 +69,10 @@ func (s *safeAuditService) BackAudit(id int, opinion string, curUid int, saveId
 	// 退回到了检查人
 	if auditId == 0 {
 		// 初始化审批流程
-		err = s.daoApprover.InitStatus(auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditId, safe.Times, auditor.Progress+1, opinion)
+		err = s.daoApprover.InitStatus("safe", auditor.BidsectionId, auditor.DataType, auditor.DataId, auditor.AuditId, safe.Times, auditor.Progress+1, opinion)
 	} else {
 		// 退回到审批流程中的某一个人
-		err = s.daoApprover.BackHandlerWithId(auditId, auditor.AuditId, safe.Times, auditor.Progress+1, opinion)
+		err = s.daoApprover.BackHandlerWithId("safe", auditId, auditor.AuditId, safe.Times, auditor.Progress+1, opinion)
 	}
 	return err
 

+ 1 - 1
web/api/quality_audit_api.go

@@ -78,7 +78,7 @@ func (c *QualityAuditApi) PostStart() {
 		return
 	}
 	// 7.执行sql
-	err = c.QualityAuditService.StartAudit(qualityId, bidsectionId, auditors, reAuditors, uid, pid)
+	err = c.QualityAuditService.StartAudit(qualityId, bidsectionId, auditors, reAuditors, uid, pid, qualityAuditData.Inspection, qualityAuditData.InspectionDetail, qualityAuditData.Demand, qualityAuditData.CreateTime)
 	if err != nil {
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
 		return

+ 13 - 5
web/viewmodels/quality_audit.go

@@ -67,11 +67,15 @@ func (l QualityAudit) ValidateQualityPass() error {
 }
 
 type QualityAuditStart struct {
-	QualityId    string   `form:"quality_id" json:"quality_id"`
-	BidsectionId string   `form:"bidsection_id" json:"bidsection_id"`
-	Times        int      `form:"times" json:"times"`
-	Auditors     []string `form:"auditors" json:"auditors"`
-	ReAuditors   []string `form:"reAuditors" json:"reAuditors"`
+	QualityId        string    `form:"quality_id" json:"quality_id"`
+	BidsectionId     string    `form:"bidsection_id" json:"bidsection_id"`
+	Times            int       `form:"times" json:"times"`
+	Auditors         []string  `form:"auditors" json:"auditors"`
+	ReAuditors       []string  `form:"reAuditors" json:"reAuditors"`
+	Inspection       string    `from:"inspection" json:"inspection"`
+	InspectionDetail string    `from:"inspectionDetail" json:"inspectionDetail"`
+	Demand           string    `from:"demand" json:"demand"`
+	CreateTime       time.Time `from:"createTime" json:"createTime"`
 }
 
 func (l QualityAuditStart) ValidateQualityStart() error {
@@ -81,5 +85,9 @@ func (l QualityAuditStart) ValidateQualityStart() error {
 		validation.Field(&l.Times, validation.Required.Error("审批次数不能为空")),
 		validation.Field(&l.Auditors, validation.Required.Error("审批组不能为空")),
 		validation.Field(&l.ReAuditors, validation.Required.Error("复查组不能为空")),
+		validation.Field(&l.Inspection, validation.Required.Error("检查项目不能为空")),
+		validation.Field(&l.InspectionDetail, validation.Required.Error("现场检查不能为空")),
+		validation.Field(&l.Demand, validation.Required.Error("处理措施不能为空")),
+		validation.Field(&l.CreateTime, validation.Required.Error("检查日期不能为空")),
 	)
 }