rule_service.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "log"
  7. "reflect"
  8. "strconv"
  9. "go.mod/web/utils"
  10. "github.com/kataras/iris/v12"
  11. "go.mod/dao"
  12. "go.mod/datasource"
  13. "go.mod/web/viewmodels"
  14. )
  15. type RuleService interface {
  16. Get(pid int, id int) viewmodels.ViewRule
  17. Post(pid int, id int, key string, value string) error
  18. AutoCode(bid int, pid int, codeType string) (string, error)
  19. ValidRule(ctx iris.Context) (viewmodels.ValidField, error)
  20. }
  21. // //返回service操作类
  22. type ruleService struct {
  23. daoRule *dao.RuleDao
  24. daoSafe *dao.SafeDao
  25. daoContract *dao.ContractDao
  26. validAutoPath string
  27. }
  28. //创建项目用户service
  29. func NewRuleService() RuleService {
  30. return &ruleService{
  31. validAutoPath: "/api/rule/auto",
  32. daoRule: dao.NewRuleDao(datasource.InstanceDbMaster()),
  33. daoSafe: dao.NewSafeDao(datasource.InstanceDbMaster()),
  34. daoContract: dao.NewContractDao(datasource.InstanceDbMaster()),
  35. }
  36. }
  37. func (s *ruleService) Get(pid int, id int) viewmodels.ViewRule {
  38. data := s.daoRule.FindByPidWithBid(pid, id)
  39. viewData := viewmodels.ViewRule{SafeRule: data.SafeRule, QualityRule: data.QualityRule, ContractRule: data.ContractRule}
  40. return viewData
  41. }
  42. func (s *ruleService) Post(pid int, id int, key string, value string) error {
  43. err := s.daoRule.UpdateOrCreate(pid, id, key, value)
  44. return err
  45. }
  46. // type Code struct {
  47. // Date string `from:"date" json:"date"`
  48. // Text string `from:"text" json:"text"`
  49. // Name string `from:"name" json:"name"`
  50. // Code string `from:"code" json:"code"`
  51. // }
  52. // 生成code
  53. func (s *ruleService) AutoCode(bid int, pid int, codeType string) (string, error) {
  54. // 获取该标段的规则
  55. rule := s.daoRule.FindByPidWithBid(pid, bid)
  56. if codeType == "safeRule" {
  57. if rule.SafeRule == "" {
  58. return "", errors.New("该标段未设置编号规则!")
  59. }
  60. var code viewmodels.RuleCode
  61. err := json.Unmarshal([]byte(rule.SafeRule), &code)
  62. if err == nil {
  63. total, err := s.daoSafe.CountRuleCode(bid)
  64. value := reflect.ValueOf(code)
  65. for i := 0; i < value.NumField(); i++ {
  66. b := fmt.Sprint(value.Field(i))
  67. if b == code.Code {
  68. k, _ := strconv.Atoi(b)
  69. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  70. }
  71. }
  72. e, err := json.Marshal(code)
  73. if err != nil {
  74. return "", err
  75. }
  76. return string(e), err
  77. }
  78. } else if codeType == "contractRule" {
  79. if rule.ContractRule == "" {
  80. return "", errors.New("该标段未设置编号规则!")
  81. }
  82. var code viewmodels.RuleCode
  83. err := json.Unmarshal([]byte(rule.ContractRule), &code)
  84. if err == nil {
  85. total, err := s.daoContract.CountRuleCode(bid)
  86. if err != nil {
  87. return "", err
  88. }
  89. value := reflect.ValueOf(code)
  90. for i := 0; i < value.NumField(); i++ {
  91. b := fmt.Sprint(value.Field(i))
  92. if b == code.Code {
  93. k, _ := strconv.Atoi(b)
  94. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  95. }
  96. }
  97. e, err := json.Marshal(code)
  98. if err != nil {
  99. return "", err
  100. }
  101. return string(e), err
  102. }
  103. } else {
  104. if rule.QualityRule == "" {
  105. return "", errors.New("该标段未设置编号规则!")
  106. }
  107. var code viewmodels.RuleCode
  108. err := json.Unmarshal([]byte(rule.QualityRule), &code)
  109. if err == nil {
  110. total, err := s.daoSafe.CountRuleCode(bid)
  111. value := reflect.ValueOf(code)
  112. for i := 0; i < value.NumField(); i++ {
  113. b := fmt.Sprint(value.Field(i))
  114. if b == code.Code {
  115. k, _ := strconv.Atoi(b)
  116. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  117. }
  118. }
  119. e, err := json.Marshal(code)
  120. if err != nil {
  121. return "", err
  122. }
  123. return string(e), err
  124. }
  125. }
  126. return "", errors.New("生成code失败")
  127. }
  128. func (s *ruleService) ValidRule(ctx iris.Context) (viewmodels.ValidField, error) {
  129. safeVaild := viewmodels.ValidField{}
  130. if ctx.Method() == "GET" {
  131. err := ctx.ReadForm(&safeVaild)
  132. if err != nil {
  133. log.Println("safe-ValidRule-ReadForm转换异常, error=", err)
  134. return safeVaild, err
  135. }
  136. err = safeVaild.Validate()
  137. return safeVaild, err
  138. }
  139. if ctx.Method() == "POST" {
  140. err := ctx.ReadJSON(&safeVaild)
  141. if err != nil {
  142. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  143. return safeVaild, err
  144. }
  145. if ctx.Path() == s.validAutoPath {
  146. err = safeVaild.ValidateAuto()
  147. } else {
  148. err = safeVaild.Validate()
  149. }
  150. }
  151. return safeVaild, nil
  152. }