Explorar el Código

feat: 新增合同自动编号

lanjianrong hace 4 años
padre
commit
bed53bb587
Se han modificado 2 ficheros con 57 adiciones y 0 borrados
  1. 10 0
      dao/contract_dao.go
  2. 47 0
      services/rule_service.go

+ 10 - 0
dao/contract_dao.go

@@ -263,3 +263,13 @@ func (d *ContractDao) Unlock(projectId int, bidsectionId int, treeId int, id int
 	}
 	return nil
 }
+
+// 筛选出应用了当前规则的条数
+func (d *ContractDao) CountRuleCode(bid int) (int64, error) {
+	data := &models.CmContracts{}
+	total, err := d.engine.Where("`bidsection_id` = ?", bid).Count(data)
+	if err != nil {
+		total = 0
+	}
+	return total, err
+}

+ 47 - 0
services/rule_service.go

@@ -27,6 +27,7 @@ type RuleService interface {
 type ruleService struct {
 	daoRule       *dao.RuleDao
 	daoSafe       *dao.SafeDao
+	daoContract   *dao.ContractDao
 	validAutoPath string
 }
 
@@ -84,6 +85,52 @@ func (s *ruleService) AutoCode(bid int, pid int, codeType string) (string, error
 			}
 			return string(e), err
 		}
+	} else if codeType == "contractRule" {
+		if rule.ContractRule == "" {
+			return "", errors.New("该标段未设置编号规则!")
+		}
+		var code viewmodels.RuleCode
+		err := json.Unmarshal([]byte(rule.ContractRule), &code)
+		if err == nil {
+			total, err := s.daoContract.CountRuleCode(bid)
+			value := reflect.ValueOf(code)
+			for i := 0; i < value.NumField(); i++ {
+				b := fmt.Sprint(value.Field(i))
+				if b == code.Code {
+					k, _ := strconv.Atoi(b)
+					code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
+				}
+			}
+
+			e, err := json.Marshal(code)
+			if err != nil {
+				return "", err
+			}
+			return string(e), err
+		}
+	} else {
+		if rule.QualityRule == "" {
+			return "", errors.New("该标段未设置编号规则!")
+		}
+		var code viewmodels.RuleCode
+		err := json.Unmarshal([]byte(rule.QualityRule), &code)
+		if err == nil {
+			total, err := s.daoSafe.CountRuleCode(bid)
+			value := reflect.ValueOf(code)
+			for i := 0; i < value.NumField(); i++ {
+				b := fmt.Sprint(value.Field(i))
+				if b == code.Code {
+					k, _ := strconv.Atoi(b)
+					code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
+				}
+			}
+
+			e, err := json.Marshal(code)
+			if err != nil {
+				return "", err
+			}
+			return string(e), err
+		}
 	}
 	return "", errors.New("生成code失败")
 }