sys_dept.go 10 KB

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