rule_service.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  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. daoContractPaid *dao.ContractPaidDao
  28. validAutoPath string
  29. }
  30. //创建项目用户service
  31. func NewRuleService() RuleService {
  32. return &ruleService{
  33. validAutoPath: "/api/rule/auto",
  34. daoRule: dao.NewRuleDao(datasource.InstanceDbMaster()),
  35. daoSafe: dao.NewSafeDao(datasource.InstanceDbMaster()),
  36. daoQuality: dao.NewQualityDao(datasource.InstanceDbMaster()),
  37. daoContract: dao.NewContractDao(datasource.InstanceDbMaster()),
  38. }
  39. }
  40. func (s *ruleService) Get(pid int, id int) viewmodels.ViewRule {
  41. data := s.daoRule.FindByPidWithBid(pid, id)
  42. viewData := viewmodels.ViewRule{SafeRule: data.SafeRule, QualityRule: data.QualityRule, ContractPaidRule: data.ContractPaidRule, ContractReturnRule: data.ContractReturnRule}
  43. return viewData
  44. }
  45. func (s *ruleService) Post(pid int, id int, key string, value string) error {
  46. err := s.daoRule.UpdateOrCreate(pid, id, key, value)
  47. return err
  48. }
  49. // 生成code
  50. func (s *ruleService) AutoCode(bid int, pid int, codeType string) (string, error) {
  51. fmt.Println("codeType---------------------------------------", codeType)
  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. } else if codeType == "contractReturnRule" {
  77. if rule.ContractReturnRule == "" {
  78. return "", errors.New("该标段未设置编号规则!")
  79. }
  80. var code viewmodels.RuleCode
  81. err := json.Unmarshal([]byte(rule.ContractReturnRule), &code)
  82. if err == nil {
  83. total, err := s.daoContract.CountRuleCode(bid, 0)
  84. if err != nil {
  85. return "", err
  86. }
  87. value := reflect.ValueOf(code)
  88. for i := 0; i < value.NumField(); i++ {
  89. b := fmt.Sprint(value.Field(i))
  90. if b == code.Code {
  91. k, _ := strconv.Atoi(b)
  92. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  93. }
  94. }
  95. e, err := json.Marshal(code)
  96. if err != nil {
  97. return "", err
  98. }
  99. return string(e), err
  100. }
  101. } else if codeType == "contractPaidRule" {
  102. if rule.ContractReturnRule == "" {
  103. return "", errors.New("该标段未设置编号规则!")
  104. }
  105. var code viewmodels.RuleCode
  106. err := json.Unmarshal([]byte(rule.ContractPaidRule), &code)
  107. if err == nil {
  108. total, err := s.daoContract.CountRuleCode(bid, 1)
  109. if err != nil {
  110. return "", err
  111. }
  112. value := reflect.ValueOf(code)
  113. for i := 0; i < value.NumField(); i++ {
  114. b := fmt.Sprint(value.Field(i))
  115. if b == code.Code {
  116. k, _ := strconv.Atoi(b)
  117. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  118. }
  119. }
  120. e, err := json.Marshal(code)
  121. if err != nil {
  122. return "", err
  123. }
  124. return string(e), err
  125. }
  126. } else if codeType == "contractPaidRule" {
  127. if rule.ContractPaidRule == "" {
  128. return "", errors.New("该标段未设置编号规则!")
  129. }
  130. var code viewmodels.RuleCode
  131. err := json.Unmarshal([]byte(rule.ContractPaidRule), &code)
  132. if err == nil {
  133. total, err := s.daoContractPaid.CountPaidRuleCode(bid)
  134. if err != nil {
  135. return "", err
  136. }
  137. value := reflect.ValueOf(code)
  138. for i := 0; i < value.NumField(); i++ {
  139. b := fmt.Sprint(value.Field(i))
  140. if b == code.Code {
  141. k, _ := strconv.Atoi(b)
  142. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  143. }
  144. }
  145. e, err := json.Marshal(code)
  146. if err != nil {
  147. return "", err
  148. }
  149. return string(e), err
  150. }
  151. } else if codeType == "contractPaidRule" {
  152. if rule.ContractPaidRule == "" {
  153. return "", errors.New("该标段未设置编号规则!")
  154. }
  155. var code viewmodels.RuleCode
  156. err := json.Unmarshal([]byte(rule.ContractPaidRule), &code)
  157. if err == nil {
  158. total, err := s.daoContractPaid.CountPaidRuleCode(bid)
  159. if err != nil {
  160. return "", err
  161. }
  162. value := reflect.ValueOf(code)
  163. for i := 0; i < value.NumField(); i++ {
  164. b := fmt.Sprint(value.Field(i))
  165. if b == code.Code {
  166. k, _ := strconv.Atoi(b)
  167. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  168. }
  169. }
  170. e, err := json.Marshal(code)
  171. if err != nil {
  172. return "", err
  173. }
  174. return string(e), err
  175. }
  176. } else {
  177. if rule.QualityRule == "" {
  178. return "", errors.New("该标段未设置编号规则!")
  179. }
  180. var code viewmodels.RuleCode
  181. err := json.Unmarshal([]byte(rule.QualityRule), &code)
  182. if err == nil {
  183. total, err := s.daoQuality.CountRuleCode(bid)
  184. value := reflect.ValueOf(code)
  185. for i := 0; i < value.NumField(); i++ {
  186. b := fmt.Sprint(value.Field(i))
  187. if b == code.Code {
  188. k, _ := strconv.Atoi(b)
  189. code.Code = utils.CreateRuleCode(int64(k), total, len(code.Code))
  190. }
  191. }
  192. e, err := json.Marshal(code)
  193. if err != nil {
  194. return "", err
  195. }
  196. return string(e), err
  197. }
  198. }
  199. return "", errors.New("生成code失败")
  200. }
  201. func (s *ruleService) ValidRule(ctx iris.Context) (viewmodels.ValidField, error) {
  202. safeVaild := viewmodels.ValidField{}
  203. if ctx.Method() == "GET" {
  204. err := ctx.ReadForm(&safeVaild)
  205. if err != nil {
  206. log.Println("safe-ValidRule-ReadForm转换异常, error=", err)
  207. return safeVaild, err
  208. }
  209. err = safeVaild.Validate()
  210. return safeVaild, err
  211. }
  212. if ctx.Method() == "POST" {
  213. err := ctx.ReadJSON(&safeVaild)
  214. if err != nil {
  215. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  216. return safeVaild, err
  217. }
  218. if ctx.Path() == s.validAutoPath {
  219. err = safeVaild.ValidateAuto()
  220. } else {
  221. err = safeVaild.Validate()
  222. }
  223. }
  224. return safeVaild, nil
  225. }