rule_service.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. validAutoPath string
  26. }
  27. //创建项目用户service
  28. func NewRuleService() RuleService {
  29. return &ruleService{
  30. validAutoPath: "/api/rule/auto",
  31. daoRule: dao.NewRuleDao(datasource.InstanceDbMaster()),
  32. daoSafe: dao.NewSafeDao(datasource.InstanceDbMaster()),
  33. }
  34. }
  35. func (s *ruleService) Get(pid int, id int) viewmodels.ViewRule {
  36. data := s.daoRule.FindByPidWithBid(pid, id)
  37. viewData := viewmodels.ViewRule{SafeRule: data.SafeRule, QualityRule: data.QualityRule, ContractRule: data.ContractRule}
  38. return viewData
  39. }
  40. func (s *ruleService) Post(pid int, id int, key string, value string) error {
  41. err := s.daoRule.UpdateOrCreate(pid, id, key, value)
  42. return err
  43. }
  44. // type Code struct {
  45. // Date string `from:"date" json:"date"`
  46. // Text string `from:"text" json:"text"`
  47. // Name string `from:"name" json:"name"`
  48. // Code string `from:"code" json:"code"`
  49. // }
  50. // 生成code
  51. func (s *ruleService) AutoCode(bid int, pid int, codeType string) (string, error) {
  52. // 获取该标段的规则
  53. rule := s.daoRule.FindByPidWithBid(pid, bid)
  54. if codeType == "safeRule" {
  55. if rule.SafeRule == "" {
  56. return "", errors.New("该标段未设置编号规则!")
  57. }
  58. var code viewmodels.RuleCode
  59. err := json.Unmarshal([]byte(rule.SafeRule), &code)
  60. if err == nil {
  61. total, err := s.daoSafe.CountRuleCode(bid)
  62. value := reflect.ValueOf(code)
  63. for i := 0; i < value.NumField(); i++ {
  64. b := fmt.Sprint(value.Field(i))
  65. if b == code.Code {
  66. k, _ := strconv.Atoi(b)
  67. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  68. }
  69. }
  70. e, err := json.Marshal(code)
  71. if err != nil {
  72. return "", err
  73. }
  74. return string(e), err
  75. }
  76. }
  77. return "", errors.New("生成code失败")
  78. }
  79. func (s *ruleService) ValidRule(ctx iris.Context) (viewmodels.ValidField, error) {
  80. safeVaild := viewmodels.ValidField{}
  81. if ctx.Method() == "GET" {
  82. err := ctx.ReadForm(&safeVaild)
  83. if err != nil {
  84. log.Println("safe-ValidRule-ReadForm转换异常, error=", err)
  85. return safeVaild, err
  86. }
  87. err = safeVaild.Validate()
  88. return safeVaild, err
  89. }
  90. if ctx.Method() == "POST" {
  91. err := ctx.ReadJSON(&safeVaild)
  92. if err != nil {
  93. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  94. return safeVaild, err
  95. }
  96. if ctx.Path() == s.validAutoPath {
  97. err = safeVaild.ValidateAuto()
  98. } else {
  99. err = safeVaild.Validate()
  100. }
  101. }
  102. return safeVaild, nil
  103. }