rule_service.go 5.0 KB

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