rule_service.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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. daoQuality *dao.QualityDao
  26. daoContract *dao.ContractDao
  27. validAutoPath string
  28. }
  29. //创建项目用户service
  30. func NewRuleService() RuleService {
  31. return &ruleService{
  32. validAutoPath: "/api/rule/auto",
  33. daoRule: dao.NewRuleDao(datasource.InstanceDbMaster()),
  34. daoSafe: dao.NewSafeDao(datasource.InstanceDbMaster()),
  35. daoQuality: dao.NewQualityDao(datasource.InstanceDbMaster()),
  36. daoContract: dao.NewContractDao(datasource.InstanceDbMaster()),
  37. }
  38. }
  39. func (s *ruleService) Get(pid int, id int) viewmodels.ViewRule {
  40. data := s.daoRule.FindByPidWithBid(pid, id)
  41. viewData := viewmodels.ViewRule{SafeRule: data.SafeRule, QualityRule: data.QualityRule, ContractPaidRule: data.ContractPaidRule, ContractReturnRule: data.ContractReturnRule}
  42. return viewData
  43. }
  44. func (s *ruleService) Post(pid int, id int, key string, value string) error {
  45. err := s.daoRule.UpdateOrCreate(pid, id, key, value)
  46. return err
  47. }
  48. // 生成code
  49. func (s *ruleService) AutoCode(bid int, pid int, codeType string) (string, error) {
  50. fmt.Println("codeType---------------------------------------", codeType)
  51. // 获取该标段的规则
  52. rule := s.daoRule.FindByPidWithBid(pid, bid)
  53. if codeType == "safeRule" {
  54. if rule.SafeRule == "" {
  55. return "", errors.New("该标段未设置编号规则!")
  56. }
  57. var code viewmodels.RuleCode
  58. err := json.Unmarshal([]byte(rule.SafeRule), &code)
  59. if err == nil {
  60. total, err := s.daoSafe.CountRuleCode(bid)
  61. value := reflect.ValueOf(code)
  62. for i := 0; i < value.NumField(); i++ {
  63. b := fmt.Sprint(value.Field(i))
  64. if b == code.Code {
  65. k, _ := strconv.Atoi(b)
  66. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  67. }
  68. }
  69. e, err := json.Marshal(code)
  70. if err != nil {
  71. return "", err
  72. }
  73. return string(e), err
  74. }
  75. } else if codeType == "contractReturnRule" {
  76. if rule.ContractReturnRule == "" {
  77. return "", errors.New("该标段未设置编号规则!")
  78. }
  79. var code viewmodels.RuleCode
  80. err := json.Unmarshal([]byte(rule.ContractReturnRule), &code)
  81. if err == nil {
  82. total, err := s.daoContract.CountRuleCode(bid, 0)
  83. if err != nil {
  84. return "", err
  85. }
  86. value := reflect.ValueOf(code)
  87. for i := 0; i < value.NumField(); i++ {
  88. b := fmt.Sprint(value.Field(i))
  89. if b == code.Code {
  90. k, _ := strconv.Atoi(b)
  91. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  92. }
  93. }
  94. e, err := json.Marshal(code)
  95. if err != nil {
  96. return "", err
  97. }
  98. return string(e), err
  99. }
  100. } else if codeType == "contractPaidRule" {
  101. if rule.ContractReturnRule == "" {
  102. return "", errors.New("该标段未设置编号规则!")
  103. }
  104. var code viewmodels.RuleCode
  105. err := json.Unmarshal([]byte(rule.ContractPaidRule), &code)
  106. if err == nil {
  107. total, err := s.daoContract.CountRuleCode(bid, 1)
  108. if err != nil {
  109. return "", err
  110. }
  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. } else {
  126. if rule.QualityRule == "" {
  127. return "", errors.New("该标段未设置编号规则!")
  128. }
  129. var code viewmodels.RuleCode
  130. err := json.Unmarshal([]byte(rule.QualityRule), &code)
  131. if err == nil {
  132. total, err := s.daoQuality.CountRuleCode(bid)
  133. value := reflect.ValueOf(code)
  134. for i := 0; i < value.NumField(); i++ {
  135. b := fmt.Sprint(value.Field(i))
  136. if b == code.Code {
  137. k, _ := strconv.Atoi(b)
  138. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  139. }
  140. }
  141. e, err := json.Marshal(code)
  142. if err != nil {
  143. return "", err
  144. }
  145. return string(e), err
  146. }
  147. }
  148. return "", errors.New("生成code失败")
  149. }
  150. func (s *ruleService) ValidRule(ctx iris.Context) (viewmodels.ValidField, error) {
  151. safeVaild := viewmodels.ValidField{}
  152. if ctx.Method() == "GET" {
  153. err := ctx.ReadForm(&safeVaild)
  154. if err != nil {
  155. log.Println("safe-ValidRule-ReadForm转换异常, error=", err)
  156. return safeVaild, err
  157. }
  158. err = safeVaild.Validate()
  159. return safeVaild, err
  160. }
  161. if ctx.Method() == "POST" {
  162. err := ctx.ReadJSON(&safeVaild)
  163. if err != nil {
  164. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  165. return safeVaild, err
  166. }
  167. if ctx.Path() == s.validAutoPath {
  168. err = safeVaild.ValidateAuto()
  169. } else {
  170. err = safeVaild.Validate()
  171. }
  172. }
  173. return safeVaild, nil
  174. }