浏览代码

ETA商家首次签约优化

hsun 1 年之前
父节点
当前提交
4875aa2232
共有 2 个文件被更改,包括 52 次插入4 次删除
  1. 10 4
      controllers/eta_business/eta_business.go
  2. 42 0
      models/eta_business/eta_business_contract.go

+ 10 - 4
controllers/eta_business/eta_business.go

@@ -699,7 +699,7 @@ func (this *EtaBusinessController) Signing() {
 	cond := fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessContractColumns.EtaBusinessId)
 	pars := make([]interface{}, 0)
 	pars = append(pars, req.EtaBusinessId)
-	contracts, e := contract.GetItemsByCondition(cond, pars, []string{}, "")
+	contracts, e := contract.GetItemsByCondition(cond, pars, []string{}, "signing_time ASC")
 	if e != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "获取商家签约列表失败, Err: " + e.Error()
@@ -707,10 +707,11 @@ func (this *EtaBusinessController) Signing() {
 	}
 
 	// 校验签约时间是否重叠
-	isFirst := true // 是否为首次签约
+	isFirst := true      // 是否为首次签约
+	changeFirst := false // 是否需要更新首次签约合同
 	if len(contracts) > 0 {
 		isFirst = false
-		for _, c := range contracts {
+		for k, c := range contracts {
 			pass := false
 			if expiredTime.Before(c.SigningTime) {
 				pass = true
@@ -722,6 +723,11 @@ func (this *EtaBusinessController) Signing() {
 				br.Msg = "签约时间在存续期内, 请检查"
 				return
 			}
+			// 若该合同签约时间早于第一份合同(业务上未限制所以可能会出现这种情况, contracts已排序), 则更新为首次签约合同
+			if k == 0 && signTime.Before(c.SigningTime) {
+				changeFirst = true
+				isFirst = true
+			}
 		}
 	}
 
@@ -734,7 +740,7 @@ func (this *EtaBusinessController) Signing() {
 	if isFirst {
 		contract.IsFirst = 1
 	}
-	if e = contract.Create(); e != nil {
+	if e = contract.CreateMaybeUpdateFirst(contract, changeFirst); e != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "新增签约失败, Err: " + e.Error()
 		return

+ 42 - 0
models/eta_business/eta_business_contract.go

@@ -112,6 +112,48 @@ func (m *EtaBusinessContract) GetItemsByCondition(condition string, pars []inter
 	return
 }
 
+// CreateMaybeUpdateFirst 新增签约合同, 或同时更新首次签约合同
+func (m *EtaBusinessContract) CreateMaybeUpdateFirst(item *EtaBusinessContract, changeFirst bool) (err error) {
+	// 直接新增
+	o := orm.NewOrm()
+	if !changeFirst {
+		id, e := o.Insert(item)
+		if e != nil {
+			return e
+		}
+		item.EtaBusinessContractId = int(id)
+		return
+	}
+
+	// 更新签约合同
+	tx, e := o.Begin()
+	if e != nil {
+		return e
+	}
+	defer func() {
+		if err != nil {
+			_ = tx.Rollback()
+			return
+		}
+		_ = tx.Commit()
+	}()
+
+	id, e := tx.Insert(item)
+	if e != nil {
+		err = fmt.Errorf("contract insert err: %s", e.Error())
+		return
+	}
+	item.EtaBusinessContractId = int(id)
+
+	sql := fmt.Sprintf(`UPDATE %s SET %s = 0 WHERE %s = ? AND %s <> ?`, m.TableName(), EtaBusinessContractColumns.IsFirst, EtaBusinessContractColumns.EtaBusinessId, EtaBusinessContractColumns.EtaBusinessContractId)
+	_, e = tx.Raw(sql, item.EtaBusinessId, item.EtaBusinessContractId).Exec()
+	if e != nil {
+		err = fmt.Errorf("update first contract err: %s", e.Error())
+		return
+	}
+	return
+}
+
 // EtaBusinessContractItem 商家签约信息
 type EtaBusinessContractItem struct {
 	EtaBusinessContractId int