Procházet zdrojové kódy

fix: 自动编号组件顺序错乱

lanjianrong před 4 roky
rodič
revize
37ea029eb8
3 změnil soubory, kde provedl 43 přidání a 128 odebrání
  1. 37 125
      services/rule_service.go
  2. 6 2
      web/api/rule_api.go
  3. 0 1
      web/utils/utils.go

+ 37 - 125
services/rule_service.go

@@ -3,9 +3,7 @@ package services
 import (
 	"encoding/json"
 	"errors"
-	"fmt"
 	"log"
-	"reflect"
 	"strconv"
 
 	"go.mod/web/utils"
@@ -19,7 +17,7 @@ import (
 type RuleService interface {
 	Get(pid int, id int) viewmodels.ViewRule
 	Post(pid int, id int, key string, value string) error
-	AutoCode(bid int, pid int, codeType string) (string, error)
+	AutoCode(bid int, pid int, codeType string) (string, string, error)
 	ValidRule(ctx iris.Context) (viewmodels.ValidField, error)
 }
 
@@ -56,161 +54,75 @@ func (s *ruleService) Post(pid int, id int, key string, value string) error {
 }
 
 // 生成code
-func (s *ruleService) AutoCode(bid int, pid int, codeType string) (string, error) {
+func (s *ruleService) AutoCode(bid int, pid int, codeType string) (string, string, error) {
 	// 获取该标段的规则
 	rule := s.daoRule.FindByPidWithBid(pid, bid)
 	if codeType == "safeRule" {
 		if rule.SafeRule == "" {
-			return "", errors.New("该标段未设置编号规则!")
+			return "", "", errors.New("该标段未设置编号规则!")
 		}
 		var code viewmodels.RuleCode
 		err := json.Unmarshal([]byte(rule.SafeRule), &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
-		}
+		total, err := s.daoSafe.CountRuleCode(bid)
+		k, _ := strconv.Atoi(code.Code)
+		newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
+		return rule.SafeRule, newCode, err
+
 	} else if codeType == "contractReturnRule" {
 		if rule.ContractReturnRule == "" {
-			return "", errors.New("该标段未设置编号规则!")
+			return "", "", errors.New("该标段未设置编号规则!")
 		}
 		var code viewmodels.RuleCode
 		err := json.Unmarshal([]byte(rule.ContractReturnRule), &code)
-		if err == nil {
-			total, err := s.daoContract.CountRuleCode(bid, 0)
-			if err != nil {
-				return "", err
-			}
-			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
-		}
+		total, err := s.daoContract.CountRuleCode(bid, 0)
+		k, _ := strconv.Atoi(code.Code)
+		newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
+		return rule.ContractReturnRule, newCode, err
+
 	} else if codeType == "contractPaidRule" {
 		if rule.ContractPaidRule == "" {
-			return "", errors.New("该标段未设置编号规则!")
+			return "", "", errors.New("该标段未设置编号规则!")
 		}
 		var code viewmodels.RuleCode
 		err := json.Unmarshal([]byte(rule.ContractPaidRule), &code)
-		if err == nil {
-			total, err := s.daoContract.CountRuleCode(bid, 1)
-			if err != nil {
-				return "", err
-			}
-			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
-		}
+		total, err := s.daoContract.CountRuleCode(bid, 1)
+		k, _ := strconv.Atoi(code.Code)
+		newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
+		return rule.ContractPaidRule, newCode, err
+
 	} else if codeType == "contractPaidRule" {
 		if rule.ContractPaidRule == "" {
-			return "", errors.New("该标段未设置编号规则!")
+			return "", "", errors.New("该标段未设置编号规则!")
 		}
 		var code viewmodels.RuleCode
 		err := json.Unmarshal([]byte(rule.ContractPaidRule), &code)
-		if err == nil {
-			total, err := s.daoContractPaid.CountPaidRuleCode(bid)
-			if err != nil {
-				return "", err
-			}
-			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
-		}
+		total, err := s.daoContractPaid.CountPaidRuleCode(bid)
+		k, _ := strconv.Atoi(code.Code)
+		newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
+		return rule.ContractPaidRule, newCode, err
+
 	} else if codeType == "contractPaidRule" {
 		if rule.ContractPaidRule == "" {
-			return "", errors.New("该标段未设置编号规则!")
+			return "", "", errors.New("该标段未设置编号规则!")
 		}
 		var code viewmodels.RuleCode
 		err := json.Unmarshal([]byte(rule.ContractPaidRule), &code)
-		if err == nil {
-			total, err := s.daoContractPaid.CountPaidRuleCode(bid)
-			if err != nil {
-				return "", err
-			}
-			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
-		}
+		total, err := s.daoContractPaid.CountPaidRuleCode(bid)
+		k, _ := strconv.Atoi(code.Code)
+		newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
+		return rule.ContractPaidRule, newCode, err
 	} else {
 		if rule.QualityRule == "" {
-			return "", errors.New("该标段未设置编号规则!")
+			return "", "", errors.New("该标段未设置编号规则!")
 		}
 		var code viewmodels.RuleCode
 		err := json.Unmarshal([]byte(rule.QualityRule), &code)
-		if err == nil {
-			total, err := s.daoQuality.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
-		}
+		total, err := s.daoQuality.CountRuleCode(bid)
+		k, _ := strconv.Atoi(code.Code)
+		newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
+		return rule.QualityRule, newCode, err
 	}
-	return "", errors.New("生成code失败")
+	return "", "", errors.New("生成code失败")
 }
 
 func (s *ruleService) ValidRule(ctx iris.Context) (viewmodels.ValidField, error) {

+ 6 - 2
web/api/rule_api.go

@@ -132,7 +132,11 @@ func (c *RuleApi) PostAuto() {
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
 		return
 	}
-	code, err := c.RuleService.AutoCode(bidsectionId, pid, safeData.Type)
+	rule, newCode, err := c.RuleService.AutoCode(bidsectionId, pid, safeData.Type)
+	data := map[string]interface{}{
+		"rule":    rule,
+		"newCode": newCode,
+	}
 	if err != nil {
 		c.Ctx.JSON(iris.Map{
 			"code": -1,
@@ -142,7 +146,7 @@ func (c *RuleApi) PostAuto() {
 		c.Ctx.JSON(iris.Map{
 			"code": 0,
 			"msg":  "请求成功",
-			"data": code,
+			"data": data,
 		})
 	}
 }

+ 0 - 1
web/utils/utils.go

@@ -75,7 +75,6 @@ func GetDecryptId(id string) (int, error) {
 
 // 生成code
 func CreateRuleCode(code int64, count int64, len int) string {
-	fmt.Println("code:", code, "count", count, "len", len)
 	// fmt.Println("rule", rule, "counts", count)
 	// egRule := strings.Split(rule.Eg, "-")
 	// for _, value := range egRule {