sso

org_service.go 8.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package service
  2. import (
  3. "SSO/models"
  4. "strconv"
  5. "time"
  6. "github.com/jinzhu/gorm"
  7. )
  8. func CreateOrg(org *models.Org, mobile string, openXT bool, openCDM bool, openSCRM bool, openMall bool, user_name string) error {
  9. now := time.Now()
  10. tx_admin := writeUserDb.Begin()
  11. if err := tx_admin.Create(org).Error; err != nil {
  12. tx_admin.Rollback()
  13. return err
  14. }
  15. role := models.Role{
  16. RoleName: "超级管理员",
  17. RoleIntro: "",
  18. Creator: org.Creator,
  19. OrgId: org.Id,
  20. AppId: 0,
  21. IsSuperAdmin: true,
  22. Status: 1,
  23. CreateTime: now.Unix(),
  24. ModifyTime: now.Unix(),
  25. }
  26. if err := tx_admin.Create(&role).Error; err != nil {
  27. tx_admin.Rollback()
  28. return err
  29. }
  30. // app 的创建顺序也决定了登录后前往 app 的优先级
  31. if err := createOrgApp(tx_admin, &role, user_name, 3, openXT); err != nil {
  32. tx_admin.Rollback()
  33. return err
  34. }
  35. nextMonthDate := now.AddDate(0, 0, 30)
  36. subscibe := models.ServeSubscibe{
  37. OrgId: int64(org.Id),
  38. PeriodStart: now.Unix(),
  39. PeriodEnd: nextMonthDate.Unix(),
  40. Status: 1,
  41. CreatedTime: now.Unix(),
  42. UpdatedTime: now.Unix(),
  43. State: 9,
  44. }
  45. if err := tx_admin.Create(&subscibe).Error; err != nil {
  46. tx_admin.Rollback()
  47. return err
  48. }
  49. tx_patient := writeDb.Begin()
  50. if err := tx_patient.Exec("INSERT INTO sgj_patient_articles_menu (name, status, type, user_org_id, ctime, mtime) VALUES(?, ?, ?, ?, ?, ?);", "科普教育", 1, 1, org.Id, now.Unix(), now.Unix()).Error; err != nil {
  51. tx_patient.Rollback()
  52. tx_admin.Rollback()
  53. return err
  54. }
  55. if err := tx_patient.Exec("INSERT INTO sgj_patient_good_category (user_org_id, category_name, status, created_time, updated_time) VALUES(?, ?, ?, ?, ?);", org.Id, "普通商品", 1, now.Unix(), now.Unix()).Error; err != nil {
  56. tx_patient.Rollback()
  57. tx_admin.Rollback()
  58. return err
  59. }
  60. if err := tx_admin.Exec("INSERT INTO sgj_user_membership_card (user_org_id, card_name, card_level, upgrade_integral, card_right, use_notice, background_type, background, service_phone, status, created_time, updated_time) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);", org.Id, "普通会员", 0, 0, "", "", 1, "#CACA41", "", 1, now.Unix(), now.Unix()).Error; err != nil {
  61. tx_admin.Rollback()
  62. tx_patient.Rollback()
  63. return err
  64. }
  65. tx_admin.Commit()
  66. tx_patient.Commit()
  67. return nil
  68. }
  69. func GetOrgWithAdminUserID(adminUserID int) (*models.Org, error) {
  70. var org models.Org
  71. err := readUserDb.Where("creator = ? AND status <> 0", adminUserID).First(&org).Error
  72. if err == gorm.ErrRecordNotFound {
  73. err = nil
  74. }
  75. if err != nil {
  76. return nil, err
  77. } else {
  78. return &org, nil
  79. }
  80. }
  81. func GetOrgApps(adminUserID int, orgID int) ([]*models.OrgApp, error) {
  82. var apps []*models.OrgApp
  83. err := readUserDb.Model(&models.OrgApp{}).Where("creator = ? AND org_id = ? AND status = 1", adminUserID, orgID).Find(&apps).Error
  84. if err == gorm.ErrRecordNotFound {
  85. err = nil
  86. }
  87. if err != nil {
  88. return nil, err
  89. } else {
  90. return apps, nil
  91. }
  92. }
  93. func DidOrgDidCreateAppWithType(orgID int, appType int) (bool, error) {
  94. var count int
  95. err := readUserDb.Model(&models.OrgApp{}).Where("org_id = ? AND app_type = ? AND status = 1", orgID, appType).Count(&count).Error
  96. if err != nil {
  97. return false, err
  98. } else {
  99. return count == 1, nil
  100. }
  101. }
  102. func CreateOrgApp(adminUserID int, orgID int, appType int, open bool) error {
  103. var user models.AdminUser
  104. err := readUserDb.Where("id = ? AND status = 1", adminUserID).Find(&user).Error
  105. if err != nil {
  106. return err
  107. }
  108. openStatus := 0
  109. if open {
  110. openStatus = 1
  111. }
  112. now := time.Now().Unix()
  113. tx := writeUserDb.Begin()
  114. app := models.OrgApp{
  115. Creator: adminUserID,
  116. OrgId: orgID,
  117. AppType: appType,
  118. OpenStatus: openStatus,
  119. Status: 1,
  120. CreateTime: now,
  121. ModifyTime: now,
  122. }
  123. if createAppErr := tx.Create(&app).Error; createAppErr != nil {
  124. tx.Rollback()
  125. return createAppErr
  126. }
  127. var role models.Role
  128. getRoleErr := readUserDb.Where("creator = ? AND org_id = ? AND is_super_admin = 1", adminUserID, orgID).First(&role).Error
  129. if getRoleErr != nil {
  130. tx.Rollback()
  131. return getRoleErr
  132. }
  133. app_role := models.App_Role{
  134. AdminUserId: adminUserID,
  135. OrgId: orgID,
  136. AppId: app.Id,
  137. RoleId: role.Id,
  138. Avatar: "",
  139. UserName: user.Mobile,
  140. Intro: "",
  141. UserType: 1,
  142. UserTitle: 1,
  143. Status: 1,
  144. CreateTime: now,
  145. ModifyTime: now,
  146. }
  147. if createApp_RoleErr := tx.Create(&app_role).Error; createApp_RoleErr != nil {
  148. tx.Rollback()
  149. return createApp_RoleErr
  150. }
  151. return tx.Commit().Error
  152. }
  153. // 如果出错,没有 rollback,需自行 rollback
  154. func createOrgApp(tx *gorm.DB, superAdminRole *models.Role, userName string, appType int, open bool) error {
  155. //创建应用
  156. now := time.Now().Unix()
  157. var app_id int64
  158. apps, _ := FindSystemOrgApp()
  159. for _, item := range apps {
  160. app := &VMOrgApp{
  161. AppType: item.AppType,
  162. Creator: int(superAdminRole.Creator),
  163. OrgId: int(superAdminRole.OrgId),
  164. OpenStatus: item.OpenStatus,
  165. Status: 1,
  166. CreateTime: now,
  167. ModifyTime: now,
  168. Name: item.Name,
  169. Url: item.Url,
  170. Number: item.Number,
  171. Pid: 0,
  172. }
  173. writeUserDb.Create(&app)
  174. if app.AppType == 3 {
  175. app_id = app.ID
  176. }
  177. for _, subItem := range item.VMOrgApp {
  178. app := &VMOrgApp{
  179. AppType: subItem.AppType,
  180. Creator: int(superAdminRole.Creator),
  181. OrgId: int(superAdminRole.OrgId),
  182. OpenStatus: subItem.OpenStatus,
  183. Status: 1,
  184. CreateTime: now,
  185. ModifyTime: now,
  186. Name: subItem.Name,
  187. Url: subItem.Url,
  188. Number: subItem.Number,
  189. Pid: app.ID,
  190. }
  191. writeUserDb.Create(&app)
  192. }
  193. }
  194. app_role := models.App_Role{
  195. AdminUserId: superAdminRole.Creator,
  196. OrgId: superAdminRole.OrgId,
  197. AppId: int(app_id),
  198. RoleId: superAdminRole.Id,
  199. Avatar: "",
  200. RoleIds: strconv.Itoa(superAdminRole.Id),
  201. UserName: userName,
  202. Intro: "",
  203. UserType: 1,
  204. UserTitle: 1,
  205. Status: 1,
  206. CreateTime: now,
  207. ModifyTime: now,
  208. }
  209. if createApp_RoleErr := tx.Create(&app_role).Error; createApp_RoleErr != nil {
  210. return createApp_RoleErr
  211. }
  212. return nil
  213. }
  214. func GetIllness() ([]*models.Illness, error) {
  215. var illness []*models.Illness
  216. err := readUserDb.Model(&models.Illness{}).Where("status = 1").Find(&illness).Error
  217. if err != nil {
  218. return nil, err
  219. } else {
  220. return illness, nil
  221. }
  222. }
  223. func GetOrgCategoriesByPid(pid int64) ([]*models.OrgType, error) {
  224. var cats []*models.OrgType
  225. err := readUserDb.Model(&models.OrgType{}).Where("pid = ? AND status = 1", pid).Order("sort_no asc").Find(&cats).Error
  226. if err != nil {
  227. return nil, err
  228. } else {
  229. return cats, nil
  230. }
  231. }
  232. func GetOrgServeSubscibe(orgID int) (*models.ServeSubscibe, error) {
  233. var model models.ServeSubscibe
  234. err := readUserDb.Model(&models.ServeSubscibe{}).Where("org_id = ? AND status = 1", orgID).First(&model).Error
  235. if err != nil {
  236. if err == gorm.ErrRecordNotFound {
  237. return nil, nil
  238. } else {
  239. return nil, err
  240. }
  241. }
  242. return &model, nil
  243. }
  244. func CreateOrgServeSubscibe(subscibe *models.ServeSubscibe) error {
  245. err := writeUserDb.Create(subscibe).Error
  246. return err
  247. }
  248. func GetOrgAppWithType(adminUserID int, orgID int, appType int) (*models.OrgApp, error) {
  249. var app models.OrgApp
  250. err := readUserDb.Model(&models.OrgApp{}).Where("creator = ? AND org_id = ? AND app_type = ? AND status = 1", adminUserID, orgID, appType).First(&app).Error
  251. if err == gorm.ErrRecordNotFound {
  252. err = nil
  253. }
  254. if err != nil {
  255. return nil, err
  256. } else {
  257. return &app, nil
  258. }
  259. }
  260. func SaveOrgApp(app *models.OrgApp) error {
  261. return writeUserDb.Save(app).Error
  262. }
  263. type VMOrgApp struct {
  264. ID int64 `gorm:"PRIMARY_KEY;AUTO_INCREMENT" json:"id"` // ID
  265. AppType int `gorm:"column:app_type" json:"app_type"`
  266. Creator int `json:"creator"` // 创建者,即管理员用户的 id
  267. OrgId int `gorm:"column:org_id" json:"org_id"`
  268. OpenStatus int `gorm:"column:open_status" json:"open_status"`
  269. Status int8 `json:"status"` // 状态 0.无效 1.有效 2.禁用
  270. CreateTime int64 `gorm:"column:ctime" json:"ctime"` // 创建时间
  271. ModifyTime int64 `gorm:"column:mtime" json:"mtime"` // 修改时间
  272. Name string `gorm:"column:name" json:"name" form:"name"`
  273. Url string `gorm:"column:url" json:"url" form:"url"`
  274. Pid int64 `gorm:"column:pid" json:"pid" form:"pid"`
  275. Number int64 `gorm:"column:number" json:"order" form:"number"`
  276. VMOrgApp []*VMOrgApp `gorm:"ForeignKey:Pid;AssociationForeignKey:Id" `
  277. }
  278. func (VMOrgApp) TableName() string {
  279. return "sgj_user_org_app"
  280. }
  281. func FindSystemOrgApp() (app []*VMOrgApp, err error) {
  282. err = readUserDb.Model(&VMOrgApp{}).Preload("VMOrgApp", "org_id = 0 AND status =1 AND pid > 0").Where("status = 1 AND org_id = 0 AND pid = 0").Find(&app).Error
  283. return
  284. }