rule_service.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "log"
  7. "strconv"
  8. "go.mod/web/utils"
  9. "github.com/kataras/iris/v12"
  10. "go.mod/dao"
  11. "go.mod/datasource"
  12. "go.mod/web/viewmodels"
  13. )
  14. type RuleService interface {
  15. Get(pid int, id int) viewmodels.ViewRule
  16. Post(pid int, id int, key string, value string) error
  17. AutoCode(bid int, pid int, codeType string) (string, string, error)
  18. ValidRule(ctx iris.Context) (viewmodels.ValidField, error)
  19. }
  20. // //返回service操作类
  21. type ruleService struct {
  22. daoRule *dao.RuleDao
  23. daoSafe *dao.SafeDao
  24. daoQuality *dao.QualityDao
  25. daoContract *dao.ContractDao
  26. daoContractPaid *dao.ContractPaidDao
  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, string, error) {
  50. // 获取该标段的规则
  51. rule := s.daoRule.FindByPidWithBid(pid, bid)
  52. if codeType == "safeRule" {
  53. if rule.SafeRule == "" {
  54. return "", "", errors.New("该标段未设置编号规则")
  55. }
  56. var code viewmodels.RuleCode
  57. err := json.Unmarshal([]byte(rule.SafeRule), &code)
  58. total, err := s.daoSafe.CountRuleCode(bid)
  59. k, _ := strconv.Atoi(code.Code)
  60. newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
  61. return rule.SafeRule, newCode, err
  62. } else if codeType == "contractReturnRule" {
  63. if rule.ContractReturnRule == "" {
  64. return "", "", errors.New("该标段未设置编号规则")
  65. }
  66. var code viewmodels.RuleCode
  67. err := json.Unmarshal([]byte(rule.ContractReturnRule), &code)
  68. total, err := s.daoContract.CountRuleCode(bid, 1)
  69. fmt.Printf("-----------------------", total)
  70. k, _ := strconv.Atoi(code.Code)
  71. newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
  72. return rule.ContractReturnRule, newCode, err
  73. } else if codeType == "contractPaidRule" {
  74. if rule.ContractPaidRule == "" {
  75. return "", "", errors.New("该标段未设置编号规则")
  76. }
  77. var code viewmodels.RuleCode
  78. err := json.Unmarshal([]byte(rule.ContractPaidRule), &code)
  79. total, err := s.daoContract.CountRuleCode(bid, 2)
  80. k, _ := strconv.Atoi(code.Code)
  81. newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
  82. return rule.ContractPaidRule, newCode, err
  83. } else if codeType == "contractPaidRule" {
  84. if rule.ContractPaidRule == "" {
  85. return "", "", errors.New("该标段未设置编号规则")
  86. }
  87. var code viewmodels.RuleCode
  88. err := json.Unmarshal([]byte(rule.ContractPaidRule), &code)
  89. total, err := s.daoContractPaid.CountPaidRuleCode(bid)
  90. k, _ := strconv.Atoi(code.Code)
  91. newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
  92. return rule.ContractPaidRule, newCode, err
  93. } else if codeType == "contractPaidRule" {
  94. if rule.ContractPaidRule == "" {
  95. return "", "", errors.New("该标段未设置编号规则")
  96. }
  97. var code viewmodels.RuleCode
  98. err := json.Unmarshal([]byte(rule.ContractPaidRule), &code)
  99. total, err := s.daoContractPaid.CountPaidRuleCode(bid)
  100. k, _ := strconv.Atoi(code.Code)
  101. newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
  102. return rule.ContractPaidRule, newCode, err
  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. total, err := s.daoQuality.CountRuleCode(bid)
  110. k, _ := strconv.Atoi(code.Code)
  111. newCode := utils.CreateRuleCode(int64(k), total, len(code.Code))
  112. return rule.QualityRule, newCode, err
  113. }
  114. }
  115. func (s *ruleService) ValidRule(ctx iris.Context) (viewmodels.ValidField, error) {
  116. safeVaild := viewmodels.ValidField{}
  117. if ctx.Method() == "GET" {
  118. err := ctx.ReadForm(&safeVaild)
  119. if err != nil {
  120. log.Println("safe-ValidRule-ReadForm转换异常, error=", err)
  121. return safeVaild, err
  122. }
  123. err = safeVaild.Validate()
  124. return safeVaild, err
  125. }
  126. if ctx.Method() == "POST" {
  127. err := ctx.ReadJSON(&safeVaild)
  128. if err != nil {
  129. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  130. return safeVaild, err
  131. }
  132. if ctx.Path() == s.validAutoPath {
  133. err = safeVaild.ValidateAuto()
  134. } else {
  135. err = safeVaild.Validate()
  136. }
  137. }
  138. return safeVaild, nil
  139. }