Ohio-HYF 2 éve
szülő
commit
3bc3e870f2
1 módosított fájl, 53 hozzáadás és 0 törlés
  1. 53 0
      db/operate.go

+ 53 - 0
db/operate.go

@@ -13,6 +13,7 @@ import (
 
 	"github.com/caixw/lib.go/conv"
 	"github.com/sirupsen/logrus"
+	"gorm.io/gorm"
 )
 
 func CreatePricingStrategy(ctx context.Context, req *http_model.AddPricingRequest) (string, string, error) {
@@ -597,6 +598,58 @@ func GetAutoCaseCloseTask() error {
 			}
 		}
 	}
+
+	// 4. 判断是否全部任务已结案,若已全部结案则触发项目结案
+	// 查询 task_stage<15 的任务数量
+	for _, projectInfo := range projectInfos {
+		var unFinishedTaskNumber int64
+		db8 := GetReadDB(context.Background())
+		err = db8.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage < 15", projectInfo.ProjectID).Count(&unFinishedTaskNumber).Error
+		if err != nil {
+			log.Println("DB GetAutoCaseCloseTask error in data:", err)
+			return err
+		}
+		// var finishedNum int64
+		// db8.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage >= 15", projectInfo.ProjectID).Count(&finishedNum)
+		if unFinishedTaskNumber == 0 {
+			// 若为0则触发项目结案
+			db9 := GetReadDB(context.Background())
+			// 1. 更新项目状态为已结束
+			err := db9.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectInfo.ProjectID).Updates(map[string]interface{}{"project_status": 10}).Error
+			if err != nil {
+				log.Println("DB GetAutoCaseCloseTask error in data:", err)
+				return err
+			}
+			// 2. 释放企业账户因项目冻结的资金
+			// 	1). 计算剩余资金
+			var allPayment float64
+			var realPayment float64
+			err = db9.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage >= 15", projectInfo.ProjectID).
+				Pluck("COALESCE(SUM(all_payment), 0) as allPayment", &allPayment).Error
+			if err != nil {
+				log.Println("DB GetAutoCaseCloseTask error in data:", err)
+				return err
+			}
+			err = db9.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage >= 15", projectInfo.ProjectID).
+				Pluck("COALESCE(SUM(real_payment), 0) as realPayment", &realPayment).Error
+			if err != nil {
+				log.Println("DB GetAutoCaseCloseTask error in data:", err)
+				return err
+			}
+			fmt.Println("企业应支付金额总计:", allPayment, "实际支付总计:", realPayment)
+
+			// 	2). 释放剩余资金
+			err = db9.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", projectInfo.EnterpriseID).Updates(
+				map[string]interface{}{
+					"frozen_balance":    gorm.Expr("frozen_balance - ?", allPayment),
+					"balance":           gorm.Expr("balance - ?", realPayment),
+					"available_balance": gorm.Expr("available_balance + ?", allPayment-realPayment)}).Error
+			if err != nil {
+				log.Println("DB GetAutoCaseCloseTask error in data:", err)
+				return err
+			}
+		}
+	}
 	return nil
 }