sys_dept.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package model
  2. import (
  3. "database/sql/driver"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. model2 "gas-cylinder-api/common/model"
  8. "github.com/gin-gonic/gin"
  9. log "gogs.baozhida.cn/zoie/OAuth-core/logger"
  10. "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
  11. "strings"
  12. "gogs.baozhida.cn/zoie/OAuth-core/sdk"
  13. "gogs.baozhida.cn/zoie/OAuth-core/sdk/config"
  14. "gorm.io/gorm"
  15. )
  16. const (
  17. TypeStore = 1 // 销售门店
  18. TypeTruckEnterprise = 2 // 运输企业
  19. )
  20. // 省平台运输企业
  21. type ProvTruckEnterprise struct {
  22. SocialCode string `json:"socialCode,omitempty" gorm:"size:32;"` // 社会信用代码
  23. Name string `json:"name,omitempty" gorm:"size:32;" vd:"@:len($)>0;msg:'运输企业名称不能为空'"` // 企业名称
  24. EnterPhone string `json:"enterPhone,omitempty" gorm:"size:32;"` // 企业联系电话
  25. Address string `json:"address,omitempty" gorm:"size:255;"` // 联系地址
  26. LicenceNo string `json:"licenceNo,omitempty" gorm:"size:32;"` // 运管许可证号
  27. IssueAuthority string `json:"issueAuthority,omitempty" gorm:"size:128;"` // 发证单位
  28. IssueTime string `json:"issueTime,omitempty" gorm:"size:10;"` // 发证日期
  29. BusinessScope string `json:"businessScope,omitempty" gorm:"size:255;"` // 经营范围
  30. QualifyImg string `json:"qualifyImg,omitempty" gorm:"size:255;"` // 资质图片
  31. QualifyStartTime string `json:"qualifyStartTime,omitempty" gorm:"size:10;"` // 资质开始时间
  32. QualifyEndTime string `json:"qualifyEndTime,omitempty" gorm:"size:10;"` // 资质截止时间
  33. LegalPerson string `json:"legalPerson,omitempty" gorm:"size:64;"` // 法人代表
  34. LegalPersonPhone string `json:"legalPersonPhone,omitempty" gorm:"size:32;"` // 法人代表电话
  35. SecurityPerson string `json:"securityPerson,omitempty" gorm:"size:64;"` // 安全管理员
  36. SecurityPersonPhone string `json:"securityPersonPhone,omitempty" gorm:"size:32;"` // 安全管理员电话
  37. City string `json:"city,omitempty" gorm:"size:6;"` // 所在地市
  38. Area string `json:"area,omitempty" gorm:"size:6;"` // 所在区/县
  39. EnterAccount string `json:"enterAccount,omitempty" gorm:"size:36;"` // 账号 (非必填)
  40. Remark string `json:"remark,omitempty" gorm:"size:255;"` // 备注 (非必填)
  41. }
  42. // 省平台销售门店
  43. type ProvStore struct {
  44. CmpCode string `json:"cmpCode,omitempty" gorm:"size:4;"` // 所属企业登记编码(社会信用代码)
  45. Name string `json:"name,omitempty" gorm:"size:128;" vd:"@:len($)>0;msg:'门店名称不能为空'"` // 门店名称
  46. Contact string `json:"contact,omitempty" gorm:"size:128;"` // 联系人
  47. ContactPhone string `json:"contactPhone,omitempty" gorm:"size:32;"` // 联系人电话
  48. City string `json:"city,omitempty" gorm:"size:6;"` // 所在地市
  49. District string `json:"district,omitempty" gorm:"size:6;"` // 所在区/县
  50. Address string `json:"address,omitempty" gorm:"size:128;"` // 地址
  51. Lng float64 `json:"lng,omitempty" gorm:"size:9;"` // 经度
  52. Lat float64 `json:"lat,omitempty" gorm:"size:9;"` // 纬度
  53. CertificateNo string `json:"certificateNo,omitempty" gorm:"size:32;"` // 许可证编号
  54. Type int `json:"type,omitempty" gorm:"size:4;"` // 经营类别
  55. BusinessArea string `json:"businessArea,omitempty" gorm:"size:128;"` // 经营区域
  56. LegalPerson string `json:"legalPerson,omitempty" gorm:"size:64;"` // 法人姓名
  57. IssueAuthority string `json:"issueAuthority,omitempty" gorm:"size:64;"` // 发证部门
  58. IssueTime string `json:"issueTime,omitempty" gorm:"size:10;"` // 发证时间
  59. StartTime string `json:"startTime,omitempty" gorm:"size:10;"` // 开始时间
  60. ExpireTime string `json:"expireTime,omitempty" gorm:"size:10;"` // 证件有效期
  61. Description string `json:"description,omitempty" gorm:"size:255;"` // 描述
  62. }
  63. type SysDept struct {
  64. model2.Model
  65. ParentId int `json:"parentId" gorm:""` // 上级部门
  66. Path string `json:"path,omitempty" gorm:"size:255;" swaggerignore:"true"` // 路径
  67. Name string `json:"name" gorm:"size:128;"` // 部门名称
  68. Sort int `json:"sort,omitempty" gorm:"size:4;"` // 排序
  69. Status int `json:"status,omitempty" gorm:"size:4;"` // 状态 1-停用 2-正常
  70. ProvStore ProvStore `json:"provStore,omitempty" gorm:"type:json;comment:省平台销售门店信息"` // 销售门店
  71. ProvTruckEnterprise ProvTruckEnterprise `json:"provTruckEnterprise,omitempty" gorm:"type:json;comment:省平台运输企业信息"` // 运输企业
  72. Children []SysDept `json:"children" gorm:"-"`
  73. UploadTime model2.Time `json:"uploadTime,omitempty" gorm:"size:128;"` // 省平台上传时间
  74. Type int `json:"type,omitempty" gorm:"size:4;"` // 1-销售门店 2-运输企业
  75. CmpCode string `json:"cmpCode" gorm:"size:128;"` // 省中心唯一编码
  76. model2.ControlBy
  77. model2.ModelTime
  78. }
  79. func (SysDept) TableName() string {
  80. return "sys_dept"
  81. }
  82. type SysDeptOmit struct {
  83. Id int `json:"id,omitempty"`
  84. Path string `json:"path,omitempty"` // 路径
  85. Name string `json:"name,omitempty"` // 部门名称
  86. CmpCode string `json:"cmpCode,omitempty"` // 省中心唯一编码
  87. }
  88. func (SysDeptOmit) TableName() string {
  89. return "sys_dept"
  90. }
  91. func (e *SysDept) Generate() model2.ActiveRecord {
  92. o := *e
  93. return &o
  94. }
  95. func (e *SysDept) GetId() interface{} {
  96. return e.Id
  97. }
  98. func (e ProvTruckEnterprise) Value() (driver.Value, error) {
  99. d, err := json.Marshal(e)
  100. return string(d), err
  101. }
  102. func (e *ProvTruckEnterprise) Scan(src interface{}) error {
  103. return json.Unmarshal(src.([]byte), e)
  104. }
  105. func (e ProvStore) Value() (driver.Value, error) {
  106. d, err := json.Marshal(e)
  107. return string(d), err
  108. }
  109. func (e *ProvStore) Scan(src interface{}) error {
  110. return json.Unmarshal(src.([]byte), e)
  111. }
  112. func (e *SysDept) BeforeDelete(_ *gorm.DB) (err error) {
  113. if e.Id == 1 {
  114. return errors.New("禁止删除系统部门")
  115. }
  116. return
  117. }
  118. func GetEnterDeptCacheKey(c *gin.Context) string {
  119. userId := user.GetUserId(c)
  120. tokenId := ""
  121. list := strings.Split(c.Request.Header.Get("Authorization"), ".")
  122. if len(list) > 0 {
  123. tokenId = list[len(list)-1]
  124. }
  125. return fmt.Sprintf("enter-dept-%s-%d", tokenId, userId)
  126. }
  127. func GetEnterDeptNameCacheKey(c *gin.Context) string {
  128. userId := user.GetUserId(c)
  129. tokenId := ""
  130. list := strings.Split(c.Request.Header.Get("Authorization"), ".")
  131. if len(list) > 0 {
  132. tokenId = list[len(list)-1]
  133. }
  134. return fmt.Sprintf("enter-dept-name-%s-%d", tokenId, userId)
  135. }
  136. func GetProvCodeById(id int) (SysDept, error) {
  137. var err error
  138. var deptModel SysDept
  139. //准备db
  140. db := sdk.Runtime.GetDbByKey(config.ApplicationConfig.Host)
  141. if db == nil {
  142. err = errors.New("db not exist")
  143. log.Errorf("host[%s]'s %s", err.Error())
  144. return deptModel, err
  145. }
  146. err = db.First(&deptModel, id).Error
  147. if err != nil {
  148. log.Errorf("db error: %s", err)
  149. err = errors.New("获取企业信息失败")
  150. return deptModel, err
  151. }
  152. return deptModel, nil
  153. }
  154. func GetDeptByCmpCode(CmpCode string) (SysDept, error) {
  155. var err error
  156. var deptModel SysDept
  157. //准备db
  158. db := sdk.Runtime.GetDbByKey(config.ApplicationConfig.Host)
  159. if db == nil {
  160. err = errors.New("db not exist")
  161. log.Errorf("host[%s]'s %s", err.Error())
  162. return deptModel, err
  163. }
  164. err = db.Where("cmp_code = ?", CmpCode).First(&deptModel).Error
  165. if err != nil {
  166. log.Errorf("db error: %s", err)
  167. err = errors.New("获取企业信息失败")
  168. return deptModel, err
  169. }
  170. return deptModel, nil
  171. }