admin_service.go 38KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781
  1. // 统计后台的 service
  2. package service
  3. import (
  4. "XT_Admin_Api/models"
  5. "XT_Admin_Api/models/admin_models"
  6. "database/sql"
  7. "fmt"
  8. "strings"
  9. "time"
  10. "github.com/jinzhu/gorm"
  11. )
  12. func GetAdminAccount(account string, password string) (*admin_models.AdminAccount, error) {
  13. var model admin_models.AdminAccount
  14. err := readUserDb.Where("account = ? AND pwd = ? AND status = 1", account, password).First(&model).Error
  15. if err != nil {
  16. if err == gorm.ErrRecordNotFound {
  17. return nil, nil
  18. }
  19. return nil, err
  20. }
  21. return &model, nil
  22. }
  23. // 获取总机构数
  24. func GetTotalOrgCount() (int, error) {
  25. var count int
  26. err := readUserDb.Model(&models.Org{}).Where("status <> 0 AND import <> 1").Count(&count).Error
  27. if err != nil {
  28. return 0, err
  29. }
  30. return count, nil
  31. }
  32. // 获取一段时间内注册的机构数量
  33. func GetRegistedOrgCountFromDayToDay(from time.Time, to time.Time) (int, error) {
  34. var count int
  35. err := readUserDb.Model(&models.Org{}).Where("status <> 0 AND ctime >= ? AND ctime <= ?", from.Unix(), to.Unix()).Count(&count).Error
  36. if err != nil {
  37. return 0, err
  38. }
  39. return count, nil
  40. }
  41. // 获取一段时间内注册的机构
  42. func GetRegistedOrgsFromDayToDay(from time.Time, to time.Time) ([]*models.Org, error) {
  43. var orgs []*models.Org
  44. err := readUserDb.Model(&models.Org{}).Where("status <> 0 AND ctime >= ? AND ctime <= ?", from.Unix(), to.Unix()).Find(&orgs).Error
  45. if err != nil {
  46. return nil, err
  47. }
  48. return orgs, nil
  49. }
  50. // 获取一段时间内的活跃机构数
  51. func GetActiveOrgCountFromDayToDay(from time.Time, to time.Time) (int, error) {
  52. var count int
  53. rows, err := readUserDb.Raw("SELECT COUNT(DISTINCT org_id) AS count FROM sgj_user_admin_login_log WHERE ctime >= ? AND ctime <= ?", from.Unix(), to.Unix()).Rows()
  54. if err != nil {
  55. return 0, err
  56. }
  57. if rows.Next() {
  58. rows.Scan(&count)
  59. }
  60. return count, nil
  61. }
  62. type ActiveOrgListVM struct {
  63. models.Org
  64. ActiveTime int64 `gorm:"column:active_time" json:"active_time"`
  65. }
  66. // 获取一段时间内的活跃机构
  67. func GetActiveOrgsFromDayToDay(from time.Time, to time.Time) ([]*ActiveOrgListVM, error) {
  68. var orgs []*ActiveOrgListVM
  69. err := readUserDb.Raw("select * from (select log.org_id, org.*, log.ctime as active_time from sgj_user_admin_login_log as log left join sgj_user_org as org on log.org_id = org.id where log.ctime >= ? AND log.ctime <= ? AND org.status <> 0 order by log.ctime desc) as t group by t.org_id;", from.Unix(), to.Unix()).Scan(&orgs).Error
  70. if err != nil {
  71. return nil, err
  72. }
  73. return orgs, nil
  74. }
  75. // 获取一段时间内的活跃账户数
  76. func GetActiveAdminUserCountFromDayToDay(from time.Time, to time.Time) (int, error) {
  77. var count int
  78. rows, err := readUserDb.Raw("SELECT COUNT(DISTINCT admin_user_id) AS count FROM sgj_user_admin_login_log WHERE ctime >= ? AND ctime <= ? AND operate_type = 1", from.Unix(), to.Unix()).Rows()
  79. if err != nil {
  80. return 0, err
  81. }
  82. if rows.Next() {
  83. rows.Scan(&count)
  84. }
  85. return count, nil
  86. }
  87. type ActiveAdminUserListVM struct {
  88. models.App_Role
  89. OrgName string `gorm:"column:org_name" json:"org_name"`
  90. ActiveTime int64 `gorm:"column:active_time" json:"active_time"`
  91. }
  92. // 获取一段时间内的活跃账户
  93. func GetActiveAdminUsersFromDayToDay(from time.Time, to time.Time) ([]*ActiveAdminUserListVM, error) {
  94. var users []*ActiveAdminUserListVM
  95. err := readUserDb.Raw("select * from (select log.admin_user_id as uid, admin.*, org.org_name, log.ctime as active_time from sgj_user_admin_login_log as log left join sgj_user_admin_role as admin on log.admin_user_id = admin.admin_user_id left join sgj_user_org as org on log.org_id = org.id where log.ctime >= ? AND log.ctime <= ? AND log.operate_type = 1 AND admin.status > 0 order by log.ctime desc) as t group by t.uid;", from.Unix(), to.Unix()).Scan(&users).Error
  96. if err != nil {
  97. return nil, err
  98. }
  99. return users, nil
  100. }
  101. // 获取即将到期机构数
  102. func GetWillExpireOrgCountFromDayToDay(from time.Time, to time.Time) (int, error) {
  103. var count int
  104. rows, err := readUserDb.Raw("SELECT COUNT(DISTINCT org_id) AS count FROM sgj_serve_subscibe WHERE period_end >= ? AND period_end <= ? AND state <> 9 GROUP BY org_id;", from.Unix(), to.Unix()).Rows()
  105. if err != nil {
  106. return 0, err
  107. }
  108. if rows.Next() {
  109. rows.Scan(&count)
  110. }
  111. return count, nil
  112. }
  113. // 获取已到期机构数
  114. func GetDidExpiredOrgCountFromDayToDay(from time.Time, to time.Time) (int, error) {
  115. var count int
  116. rows, err := readUserDb.Raw("SELECT COUNT(DISTINCT org_id) AS count FROM sgj_serve_subscibe WHERE period_end >= ? AND period_end <= ? AND state <> 9 GROUP BY org_id;", from.Unix(), to.Unix()).Rows()
  117. if err != nil {
  118. return 0, err
  119. }
  120. if rows.Next() {
  121. rows.Scan(&count)
  122. }
  123. return count, nil
  124. }
  125. type ExpireOrgListVM struct {
  126. OrgID int64 `gorm:"column:org_id" json:"org_id"`
  127. OrgName string `gorm:"column:org_name" json:"org_name"`
  128. PeriodEnd int64 `gorm:"column:period_end" json:"period_end"`
  129. Telephone string `gorm:"column:telephone" json:"telephone"`
  130. ExpireDays int `gorm:"-" json:"expire_days"`
  131. }
  132. // 获取即将到期机构
  133. func GetWillExpireOrgsFromDayToDay(from time.Time, to time.Time) ([]*ExpireOrgListVM, error) {
  134. var vms []*ExpireOrgListVM
  135. err := readUserDb.Raw("select s_o.org_id, s_o.period_end, o.org_name, o.telephone from (select ss.* from (select s.org_id as org_id, s.id as sid, s.period_end from sgj_serve_subscibe as s where s.period_end <= ? AND s.period_end >= ? AND s.state <> 9 order by s.id desc) as ss group by ss.org_id) as s_o left join sgj_user_org as o on o.id = s_o.org_id", to.Unix(), from.Unix()).Scan(&vms).Error
  136. if err != nil {
  137. return nil, err
  138. }
  139. for _, vm := range vms {
  140. vm.ExpireDays = time.Unix(vm.PeriodEnd, 0).Day() - from.Day()
  141. }
  142. return vms, nil
  143. }
  144. // 获取已到期机构
  145. func GetDidExpireOrgsFromDayToDay(from time.Time, to time.Time) ([]*ExpireOrgListVM, error) {
  146. var vms []*ExpireOrgListVM
  147. err := readUserDb.Raw("select s_o.org_id, s_o.period_end, o.org_name, o.telephone from (select ss.* from (select s.org_id as org_id, s.id as sid, s.period_end from sgj_serve_subscibe as s where s.period_end >= ? AND s.period_end <= ? AND s.state <> 9 order by s.id desc) as ss group by ss.org_id) as s_o left join sgj_user_org as o on o.id = s_o.org_id", from.Unix(), to.Unix()).Scan(&vms).Error
  148. if err != nil {
  149. return nil, err
  150. }
  151. for _, vm := range vms {
  152. vm.ExpireDays = to.Day() - time.Unix(vm.PeriodEnd, 0).Day()
  153. }
  154. return vms, nil
  155. }
  156. // 获取一段时间内的透析次数
  157. func GetDialysisTimesFromDayToDay(from time.Time, to time.Time) (int, error) {
  158. var count int
  159. err := readDb.Model(&models.DialysisOrder{}).Where("status > 0 AND dialysis_date >= ? AND dialysis_date <= ?", from.Unix(), to.Unix()).Count(&count).Error
  160. if err != nil {
  161. return 0, err
  162. }
  163. return count, nil
  164. }
  165. // 获取一段时间内的监控次数
  166. func GetMonitoringTimesFromDayToDay(from time.Time, to time.Time) (int, error) {
  167. var count int
  168. err := readDb.Model(&models.MonitoringRecord{}).Where("status > 0 AND monitoring_date >= ? AND monitoring_date <= ?", from.Unix(), to.Unix()).Count(&count).Error
  169. if err != nil {
  170. return 0, err
  171. }
  172. return count, nil
  173. }
  174. // 获取一段时间内新增病人数量
  175. func GetNewPatientCountFromDayToDay(from time.Time, to time.Time) (int, error) {
  176. var count int
  177. err := readDb.Model(&models.Patients{}).Where("status > 0 AND created_time >= ? AND created_time <= ?", from.Unix(), to.Unix()).Count(&count).Error
  178. if err != nil {
  179. return 0, err
  180. }
  181. return count, nil
  182. }
  183. // 获取病人性别分布
  184. func GetPatientGenderDistribution() (int, int, int, error) {
  185. var maleCount, femaleCount, unknowGenderCount int
  186. rows, err := readDb.Raw("SELECT count(id), gender FROM xt_patients WHERE (status > 0) group by gender;").Rows()
  187. if err != nil {
  188. return 0, 0, 0, err
  189. }
  190. for rows.Next() {
  191. var gender, count int
  192. rows.Scan(&count, &gender)
  193. if gender == 1 {
  194. maleCount = count
  195. } else if gender == 2 {
  196. femaleCount = count
  197. } else {
  198. unknowGenderCount = count
  199. }
  200. }
  201. return maleCount, femaleCount, unknowGenderCount, nil
  202. }
  203. // 获取某种传染病的病人数,diseaseType = 0时为没有传染病
  204. // 1乙肝 2丙肝 3艾滋病 4肺结核 5梅毒
  205. func GetInfectiousDiseasePatientCount(diseaseType int) (int, error) {
  206. if diseaseType == 0 {
  207. var count int
  208. rows, err := readDb.Raw("select count(p.id) from xt_patients as p where id not in (select p_d.patient_id from xt_patients_infectious_diseases as p_d where status = 1 group by p_d.patient_id) and status = 1;").Rows()
  209. if err != nil {
  210. return 0, err
  211. }
  212. if rows.Next() {
  213. rows.Scan(&count)
  214. }
  215. return count, nil
  216. } else {
  217. var count int
  218. rows, err := readDb.Raw("select count(distinct patient_id) from xt_patients_infectious_diseases where status = 1 and disease_id = ?;", diseaseType).Rows()
  219. if err != nil {
  220. return 0, err
  221. }
  222. if rows.Next() {
  223. rows.Scan(&count)
  224. }
  225. return count, nil
  226. }
  227. }
  228. // 获取患者年龄分布
  229. func GetPatientAgeDistribution() ([]*PatientAgeCountStruct, error) {
  230. var counts []*PatientAgeCountStruct
  231. err := readDb.Raw(`SELECT nnd AS 'age',COUNT(*) AS 'count' FROM (
  232. SELECT
  233. CASE
  234. WHEN (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d'))<10 THEN '10'
  235. WHEN (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )>=10 AND (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )<20 THEN '20'
  236. WHEN (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )>=20 AND (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )<30 THEN '30'
  237. WHEN (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )>=30 AND (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )<40 THEN '40'
  238. WHEN (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )>=40 AND (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )<50 THEN '50'
  239. WHEN (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )>=50 AND (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )<60 THEN '60'
  240. WHEN (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )>=60 AND (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )<70 THEN '70'
  241. WHEN (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )>=70 AND (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )<80 THEN '80'
  242. WHEN (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )>=80 AND (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )<90 THEN '90'
  243. WHEN (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )>=90 AND (YEAR(NOW())-DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%Y')-1) + (DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL birthday SECOND),'%m%d') <= DATE_FORMAT(NOW(), '%m%d') )<100 THEN '100'
  244. ELSE '-1'
  245. END
  246. AS nnd FROM xt_patients where status=1
  247. ) a GROUP BY nnd;`).Scan(&counts).Error
  248. if err != nil {
  249. return nil, err
  250. }
  251. return counts, nil
  252. }
  253. func GetAdminUserElectronicSignature(orgID int64, appID int64, userID int64) (*models.AdminUserElectronicSignature, error) {
  254. var es models.AdminUserElectronicSignature
  255. err := readUserDb.Model(&models.AdminUserElectronicSignature{}).Where("org_id=? and app_id=? and creator=? and status=1", orgID, appID, userID).First(&es).Error
  256. if err == gorm.ErrRecordNotFound {
  257. return nil, nil
  258. }
  259. if err != nil {
  260. return nil, err
  261. }
  262. return &es, nil
  263. }
  264. func CreateAdminUserElectronicSignature(es *models.AdminUserElectronicSignature) error {
  265. err := writeUserDb.Create(es).Error
  266. return err
  267. }
  268. func SaveAdminUserElectronicSignature(es *models.AdminUserElectronicSignature) error {
  269. err := writeUserDb.Save(es).Error
  270. return err
  271. }
  272. func GetAdminUserSpecialPermission(orgID int64, appID int64, adminUserID int64, permissionType models.SpecialPermissionType) (*models.AdminUserSpecialPermission, error) {
  273. var record models.AdminUserSpecialPermission
  274. err := readDb.Model(&models.AdminUserSpecialPermission{}).Where("org_id = ? AND app_id = ? AND admin_user_id = ? AND permission = ? AND status = 1", orgID, appID, adminUserID, permissionType).First(&record).Error
  275. if err != nil {
  276. if err == gorm.ErrRecordNotFound {
  277. return nil, nil
  278. } else {
  279. return nil, err
  280. }
  281. }
  282. return &record, nil
  283. }
  284. func SaveAdminUserSpecialPermission(permission *models.AdminUserSpecialPermission) error {
  285. err := writeDb.Save(permission).Error
  286. return err
  287. }
  288. func GetAllValidAdminUsersWithSpecialPermission(orgID int64, appID int64, permissionType models.SpecialPermissionType) ([]*models.AdminUserSpecialPermission, error) {
  289. var records []*models.AdminUserSpecialPermission
  290. err := readDb.Model(&models.AdminUserSpecialPermission{}).Where("org_id = ? AND app_id = ? AND permission = ? AND status = 1", orgID, appID, permissionType).Find(&records).Error
  291. if err != nil {
  292. return nil, err
  293. }
  294. return records, nil
  295. }
  296. func GetAllSpecialPermissionAdminUsersWithoutStatus(orgID int64, appID int64, permissionType models.SpecialPermissionType) ([]*models.AdminUserSpecialPermission, error) {
  297. var records []*models.AdminUserSpecialPermission
  298. err := readDb.Model(&models.AdminUserSpecialPermission{}).Where("org_id = ? AND app_id = ? AND permission = ?", orgID, appID, permissionType).Find(&records).Error
  299. if err != nil {
  300. return nil, err
  301. }
  302. return records, nil
  303. }
  304. func CancelAllSpecialPermissionAdminUsers(orgID int64, appID int64, permissionType models.SpecialPermissionType) error {
  305. tx := writeDb.Begin()
  306. updateTime := time.Now().Unix()
  307. err := tx.Model(&models.AdminUserSpecialPermission{}).Where("org_id = ? AND app_id = ? AND status = 1 AND permission = ?", orgID, appID, permissionType).Updates(map[string]interface{}{"status": 0, "mtime": updateTime}).Error
  308. if err != nil {
  309. tx.Rollback()
  310. return err
  311. }
  312. tx.Commit()
  313. return nil
  314. }
  315. func BatchSaveSpecialPermissionAdminUsers(users []*models.AdminUserSpecialPermission) error {
  316. tx := writeDb.Begin()
  317. for _, user := range users {
  318. tx.Save(user)
  319. }
  320. return tx.Commit().Error
  321. }
  322. // 获取一段时间内新增病人数量
  323. func GetNewPatientCount(from int64, to int64) (int, error) {
  324. var count int
  325. rows, err := readDb.Raw("SELECT COUNT(DISTINCT id_card_no) AS count FROM xt_patients WHERE status > 0 AND created_time >= ? AND created_time <= ?", from, to).Rows()
  326. if err != nil {
  327. return 0, err
  328. }
  329. if rows.Next() {
  330. rows.Scan(&count)
  331. }
  332. return count, nil
  333. }
  334. // 获取所有机构病人数量
  335. func GetPatientTotalCount() (int64, error) {
  336. var count int64
  337. rows, err := readDb.Raw("SELECT COUNT(DISTINCT id_card_no) AS count FROM xt_patients").Rows()
  338. if err != nil {
  339. return 0, err
  340. }
  341. if rows.Next() {
  342. rows.Scan(&count)
  343. }
  344. return count, nil
  345. }
  346. // 获取一段时间内的活跃账户数
  347. func GetActiveAdminUserCount(from int64, to int64) (int64, error) {
  348. var count int64
  349. rows, err := readUserDb.Raw("SELECT COUNT(DISTINCT admin_user_id) AS count FROM sgj_user_admin_login_log WHERE ctime >= ? AND ctime <= ? AND operate_type = 1 AND app_type = 3", from, to).Rows()
  350. if err != nil {
  351. return 0, err
  352. }
  353. if rows.Next() {
  354. rows.Scan(&count)
  355. }
  356. return count, nil
  357. }
  358. // 获取所有机构账户数量
  359. func GetAdminUserTotalCount() (int64, error) {
  360. var count int64
  361. rows, err := readUserDb.Raw("SELECT COUNT(DISTINCT admin_user_id) AS count FROM sgj_user_admin_login_log WHERE operate_type = 1 AND app_type = 3").Rows()
  362. if err != nil {
  363. return 0, err
  364. }
  365. if rows.Next() {
  366. rows.Scan(&count)
  367. }
  368. return count, nil
  369. }
  370. // 获取一段时间内注册的机构数量
  371. func GetRegistedOrgCount(from int64, to int64) (int64, error) {
  372. var count int64
  373. err := readUserDb.Model(&models.Org{}).Where("status <> 0 AND ctime >= ? AND ctime <= ? AND AND import <> 1", from, to).Count(&count).Error
  374. if err != nil {
  375. return 0, err
  376. }
  377. return count, nil
  378. }
  379. // 获取一段时间内的活跃机构数
  380. func GetActiveOrgCount(from int64, to int64) (int64, error) {
  381. var count int64
  382. rows, err := readDb.Raw("SELECT COUNT(DISTINCT user_org_id) AS count FROM xt_dialysis_order where created_time >= ? AND created_time <= ? AND status = 1 ", from, to).Rows()
  383. if err != nil {
  384. return 0, err
  385. }
  386. if rows.Next() {
  387. rows.Scan(&count)
  388. }
  389. return count, nil
  390. }
  391. // 获取所有活跃机构数
  392. func GetActiveOrgTotalCount() (int64, error) {
  393. var count int64
  394. rows, err := readDb.Raw("SELECT COUNT(DISTINCT user_org_id) AS count FROM sgj_xt.xt_dialysis_order Where status = 1").Rows()
  395. if err != nil {
  396. return 0, err
  397. }
  398. if rows.Next() {
  399. rows.Scan(&count)
  400. }
  401. return count, nil
  402. }
  403. //获取昨天的注册机构总量
  404. func GetYesterDayRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  405. err = readUserDb.Raw("select count(id) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m-%d') as times from sgj_user_org where DATE_SUB(CURDATE(), INTERVAL 1 DAY) = date(from_unixtime(sgj_user_org.ctime)) AND sgj_user_org.status = 1 AND sgj_user_org.import <> 1 GROUP BY date(from_unixtime(ctime));").Scan(&weekStatistics).Error
  406. return
  407. }
  408. //获取近昨天的的机构活跃总量
  409. func GetYesterDayActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  410. db := readDb.Raw("select count(DISTINCT(user_org_id)) as count, DATE_FORMAT(date(from_unixtime(created_time)) ,'%Y-%m-%d') as times from xt_dialysis_order where DATE_SUB(CURDATE(), INTERVAL 1 DAY) = date(from_unixtime(created_time)) AND status = 1 GROUP BY date(from_unixtime(created_time));")
  411. err = db.Scan(&weekStatistics).Error
  412. return
  413. }
  414. //获取昨天的的机构活跃账号总量
  415. func GetYesterDayActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
  416. err = readUserDb.Raw("select count(DISTINCT(admin_user_id)) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m-%d') as times from sgj_user_admin_login_log where DATE_SUB(CURDATE(), INTERVAL 1 DAY) = date(from_unixtime(sgj_user_admin_login_log.ctime)) AND operate_type = 1 AND app_type = 3 GROUP BY date(from_unixtime(ctime));").Scan(&weekStatistics).Error
  417. return
  418. }
  419. //获取昨天的的机构新增病人总量
  420. func GetYesterDayNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
  421. err = readDb.Raw("select count(DISTINCT(id_card_no)) as count, DATE_FORMAT(date(from_unixtime(created_time)) ,'%Y-%m-%d') as times from xt_patients where DATE_SUB(CURDATE(), INTERVAL 1 DAY) = date(from_unixtime(created_time)) GROUP BY date(from_unixtime(created_time));").Scan(&weekStatistics).Error
  422. return
  423. }
  424. //获取近七天每天的注册机构总量
  425. func GetWeekRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  426. err = readUserDb.Raw("select count(id) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m-%d') as times from sgj_user_org where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(from_unixtime(sgj_user_org.ctime)) AND sgj_user_org.status = 1 AND sgj_user_org.import <> 1 GROUP BY date(from_unixtime(ctime));").Scan(&weekStatistics).Error
  427. return
  428. }
  429. //func GetWeekActiveOrgCount() (weekStatistics []*admin_models.WeekStatistics, err error) {
  430. // err = readUserDb.Raw("select count(id) as count, date(from_unixtime(ctime)) as times from sgj_user_org where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(from_unixtime(sgj_user_org.ctime)) GROUP BY date(from_unixtime(ctime));").Scan(&weekStatistics).Error
  431. // return
  432. //}
  433. //获取近七天每天的机构活跃总量
  434. func GetWeekActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  435. db := readDb.Raw("select count(DISTINCT(user_org_id)) as count, DATE_FORMAT(date(from_unixtime(created_time)) ,'%Y-%m-%d') as times from xt_dialysis_order where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(from_unixtime(created_time)) AND status = 1 GROUP BY date(from_unixtime(created_time));")
  436. err = db.Scan(&weekStatistics).Error
  437. return
  438. }
  439. //获取近七天每天的机构活跃账号总量
  440. func GetWeekActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
  441. err = readUserDb.Raw("select count(DISTINCT(admin_user_id)) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m-%d') as times from sgj_user_admin_login_log where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(from_unixtime(sgj_user_admin_login_log.ctime)) AND operate_type = 1 AND app_type = 3 GROUP BY date(from_unixtime(ctime));").Scan(&weekStatistics).Error
  442. return
  443. }
  444. //获取近七天每天的机构新增病人总量
  445. func GetWeekNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
  446. err = readDb.Raw("select count(DISTINCT(id_card_no)) as count, DATE_FORMAT(date(from_unixtime(created_time)) ,'%Y-%m-%d') as times from xt_patients where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(from_unixtime(created_time)) GROUP BY date(from_unixtime(created_time));").Scan(&weekStatistics).Error
  447. return
  448. }
  449. //获取近30天每天的注册机构总量
  450. func GetMonthRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  451. err = readUserDb.Raw("select count(id) as count,DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m-%d') as times from sgj_user_org where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(from_unixtime(sgj_user_org.ctime)) AND sgj_user_org.status = 1 AND sgj_user_org.import <> 1 GROUP BY date(from_unixtime(ctime));").Scan(&weekStatistics).Error
  452. return
  453. }
  454. //获取近30天每天的机构活跃总量
  455. func GetMonthActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  456. err = readDb.Raw("select count(DISTINCT(user_org_id)) as count, DATE_FORMAT(date(from_unixtime(created_time)) ,'%Y-%m-%d') as times from xt_dialysis_order where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(from_unixtime(created_time)) AND status = 1 GROUP BY date(from_unixtime(created_time));").Scan(&weekStatistics).Error
  457. return
  458. }
  459. //获取近30天每天的机构活跃账号总量
  460. func GetMonthActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
  461. err = readUserDb.Raw("select count(DISTINCT(admin_user_id)) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m-%d')as times from sgj_user_admin_login_log where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(from_unixtime(sgj_user_admin_login_log.ctime)) AND sgj_user_admin_login_log.app_type = 3 AND sgj_user_admin_login_log.operate_type = 1 GROUP BY date(from_unixtime(ctime));").Scan(&weekStatistics).Error
  462. return
  463. }
  464. //获取近30天每天的机构新增病人总量
  465. func GetMonthNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
  466. err = readDb.Raw("select count(DISTINCT(id_card_no)) as count, DATE_FORMAT(date(from_unixtime(created_time)) ,'%Y-%m-%d') as times from xt_patients where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(from_unixtime(created_time)) GROUP BY date(from_unixtime(created_time));").Scan(&weekStatistics).Error
  467. return
  468. }
  469. //获取近3个月每个月的注册机构总量
  470. func GetThreeMonthRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  471. err = readUserDb.Raw("select DATE_FORMAT(date(from_unixtime(sgj_user_org.ctime)) ,'%Y-%m') as times,count(DISTINCT(id)) as count from sgj_user_org where DATE_FORMAT(date(from_unixtime(sgj_user_org.ctime)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 3 month),'%Y-%m') AND sgj_user_org.status = 1 AND sgj_user_org.import <> 1 group by times").Scan(&weekStatistics).Error
  472. return
  473. }
  474. //获取近3个月每个月的机构活跃账号总量
  475. func GetThreeMonthActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
  476. err = readUserDb.Raw("select DATE_FORMAT(date(from_unixtime(sgj_user_admin_login_log.ctime)) ,'%Y-%m') as times,count(DISTINCT(admin_user_id)) as count from sgj_user_admin_login_log where DATE_FORMAT(date(from_unixtime(sgj_user_admin_login_log.ctime)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 3 month),'%Y-%m') AND sgj_user_admin_login_log.app_type = 3 AND sgj_user_admin_login_log.operate_type = 1 group by times").Scan(&weekStatistics).Error
  477. return
  478. }
  479. //获取近3个月每个月的机构活跃总量
  480. func GetThreeMonthActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  481. err = readDb.Raw("select DATE_FORMAT(date(from_unixtime(created_time)) ,'%Y-%m') as times,count(DISTINCT(user_org_id)) as count From xt_dialysis_order where DATE_FORMAT(date(from_unixtime(created_time)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 3 month),'%Y-%m') AND status = 1 group by times").Scan(&weekStatistics).Error
  482. return
  483. }
  484. //获取近3个月每个月机构新增病人总量
  485. func GetThreeMonthNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
  486. err = readDb.Raw("select DATE_FORMAT(date(from_unixtime(xt_patients.created_time)) ,'%Y-%m') as times,count(DISTINCT(id_card_no)) as count from xt_patients where DATE_FORMAT(date(from_unixtime(xt_patients.created_time)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 3 month),'%Y-%m') group by times").Scan(&weekStatistics).Error
  487. return
  488. }
  489. //获取近半年每个月的注册机构总量
  490. func GetSixMonthRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  491. err = readUserDb.Raw("select DATE_FORMAT(date(from_unixtime(sgj_user_org.ctime)) ,'%Y-%m') as times,count(DISTINCT(id)) as count from sgj_user_org where DATE_FORMAT(date(from_unixtime(sgj_user_org.ctime)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 6 month),'%Y-%m') AND sgj_user_org.status = 1 AND sgj_user_org.import <> 1 group by times").Scan(&weekStatistics).Error
  492. return
  493. }
  494. //获取近半年每个月的机构活跃账号总量
  495. func GetSixMonthActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
  496. err = readUserDb.Raw("select DATE_FORMAT(date(from_unixtime(sgj_user_admin_login_log.ctime)) ,'%Y-%m') as times,count(DISTINCT(admin_user_id)) as count from sgj_user_admin_login_log where DATE_FORMAT(date(from_unixtime(sgj_user_admin_login_log.ctime)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 6 month),'%Y-%m') AND sgj_user_admin_login_log.app_type = 3 AND sgj_user_admin_login_log.operate_type = 1 group by times").Scan(&weekStatistics).Error
  497. return
  498. }
  499. //获取近半年每个月的机构活跃总量
  500. func GetSixMonthActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  501. err = readDb.Raw("select DATE_FORMAT(date(from_unixtime(created_time)) ,'%Y-%m') as times,count(DISTINCT(user_org_id)) as count From xt_dialysis_order where DATE_FORMAT(date(from_unixtime(created_time)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 6 month),'%Y-%m') AND status = 1 group by times").Scan(&weekStatistics).Error
  502. return
  503. }
  504. //获取近半年每个月机构新增病人总量
  505. func GetSixMonthNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
  506. err = readDb.Raw("select DATE_FORMAT(date(from_unixtime(xt_patients.created_time)) ,'%Y-%m') as times,count(DISTINCT(id_card_no)) as count from xt_patients where DATE_FORMAT(date(from_unixtime(xt_patients.created_time)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 6 month),'%Y-%m') group by times").Scan(&weekStatistics).Error
  507. return
  508. }
  509. //获取近1年每个月的注册机构总量
  510. func GetYearRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  511. err = readUserDb.Raw("select DATE_FORMAT(date(from_unixtime(sgj_user_org.ctime)) ,'%Y-%m') as times,count(DISTINCT(id)) as count from sgj_user_org where DATE_FORMAT(date(from_unixtime(sgj_user_org.ctime)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 12 month),'%Y-%m') AND sgj_user_org.status = 1 AND sgj_user_org.import <> 1 group by times").Scan(&weekStatistics).Error
  512. return
  513. }
  514. //获取近1年每个月的机构活跃账号总量
  515. func GetYearActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
  516. err = readUserDb.Raw("select DATE_FORMAT(date(from_unixtime(sgj_user_admin_login_log.ctime)) ,'%Y-%m') as times,count(DISTINCT(admin_user_id)) as count from sgj_user_admin_login_log where DATE_FORMAT(date(from_unixtime(sgj_user_admin_login_log.ctime)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 12 month),'%Y-%m') AND sgj_user_admin_login_log.app_type = 3 AND sgj_user_admin_login_log.operate_type = 1 group by times").Scan(&weekStatistics).Error
  517. return
  518. }
  519. //获取近1年每个月的机构活跃总量
  520. func GetYearActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
  521. err = readDb.Raw("select DATE_FORMAT(date(from_unixtime(created_time)) ,'%Y-%m') as times,count(DISTINCT(user_org_id)) as count From xt_dialysis_order where DATE_FORMAT(date(from_unixtime(created_time)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 12 month),'%Y-%m') AND status = 1 group by times").Scan(&weekStatistics).Error
  522. return
  523. }
  524. //获取近1年每个月机构新增病人总量
  525. func GetYearNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
  526. err = readDb.Raw("select DATE_FORMAT(date(from_unixtime(xt_patients.created_time)) ,'%Y-%m') as times,count(DISTINCT(id_card_no)) as count from xt_patients where DATE_FORMAT(date(from_unixtime(xt_patients.created_time)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 12 month),'%Y-%m') AND status > 0 group by times").Scan(&weekStatistics).Error
  527. return
  528. }
  529. func GetAllAdmin() (admin []*admin_models.AdminAccount, err error) {
  530. err = readUserDb.Model(&admin_models.AdminAccount{}).Where("is_super_admin <> 1 AND (status = 1 OR status = 2)").Find(&admin).Error
  531. return
  532. }
  533. func CreateAdmin(admin *admin_models.AdminAccount) (err error) {
  534. err = readUserDb.Model(&admin_models.AdminAccount{}).Create(&admin).Error
  535. return
  536. }
  537. func FindUserInfoByAccount(account string) (admin admin_models.AdminAccount, err error) {
  538. err = readUserDb.Model(&admin_models.AdminAccount{}).Where("account = ?", account).First(&admin).Error
  539. return
  540. }
  541. func FindAdminById(id int64) (admin admin_models.AdminAccount, err error) {
  542. err = readUserDb.Model(&admin_models.AdminAccount{}).Where("id = ?", id).First(&admin).Error
  543. return
  544. }
  545. func UpdateAdmin(admin *admin_models.AdminAccount) (err error) {
  546. err = readUserDb.Model(&admin_models.AdminAccount{}).Save(&admin).Error
  547. return
  548. }
  549. func DeleteAdmin(id int64) (err error) {
  550. err = readUserDb.Model(&admin_models.AdminAccount{}).Where("id = ?", id).Updates(map[string]interface{}{"status": 0}).Error
  551. return
  552. }
  553. func FindAllOrg() (org []*models.Org, err error) {
  554. err = readUserDb.Select("id, org_name").Where("status = 1").Find(&org).Error
  555. return
  556. }
  557. type FollowViewModel struct {
  558. models.OrgFollow
  559. OrgName string `gorm:"column:org_name" json:"org_name"`
  560. }
  561. func FindFollowOrg(admin_id int64) ([]*FollowViewModel, error) {
  562. var vms []*FollowViewModel = make([]*FollowViewModel, 0)
  563. rows, err := readUserDb.Raw("SELECT follow.*, org.org_name as org_name FROM sgj_org_follow as follow join sgj_user_org as org on org.id = follow.org_id WHERE (follow.admin_user_id = ? AND follow.status = 1)", admin_id).Rows()
  564. defer rows.Close()
  565. if err != nil {
  566. return nil, err
  567. }
  568. for rows.Next() {
  569. var vm FollowViewModel
  570. readDb.ScanRows(rows, &vm)
  571. vms = append(vms, &vm)
  572. }
  573. fmt.Println(vms)
  574. return vms, nil
  575. }
  576. type OrgViewModel struct {
  577. Id int64 `gorm:"PRIMARY_KEY;AUTO_INCREMENT" json:"id"` // 机构 ID
  578. OrgName string `gorm:"column:org_name" json:"org_name"`
  579. }
  580. func FindUnFollowOrgByIds(id int64) (orgViewModel []*OrgViewModel, err error) {
  581. err = readUserDb.Raw("Select id, org_name From sgj_user_org Where NOT EXISTS (Select id, org_name FROM sgj_org_follow Where sgj_org_follow.org_id = sgj_user_org.id AND sgj_org_follow.admin_user_id = ? AND sgj_org_follow.status = 1)", id).Scan(&orgViewModel).Error
  582. return
  583. }
  584. func CreateFollowInfo(Follows []*models.OrgFollow) (err error) {
  585. if len(Follows) > 0 {
  586. utx := writeUserDb.Begin()
  587. if len(Follows) > 0 {
  588. thisSQL := "INSERT INTO sgj_org_follow (org_id,admin_user_id,ctime,mtime,status) VALUES "
  589. insertParams := make([]string, 0)
  590. insertData := make([]interface{}, 0)
  591. for _, info := range Follows {
  592. insertParams = append(insertParams, "(?,?,?,?,?)")
  593. insertData = append(insertData, info.OrgId)
  594. insertData = append(insertData, info.AdminUserId)
  595. insertData = append(insertData, info.Ctime)
  596. insertData = append(insertData, info.Mtime)
  597. insertData = append(insertData, info.Status)
  598. }
  599. thisSQL += strings.Join(insertParams, ", ")
  600. err = utx.Exec(thisSQL, insertData...).Error
  601. if err != nil {
  602. utx.Rollback()
  603. return
  604. }
  605. }
  606. utx.Commit()
  607. }
  608. return
  609. }
  610. func UpdateFollow(follow *models.OrgFollow) (err error) {
  611. err = readUserDb.Model(&models.OrgFollow{}).Save(follow).Error
  612. return
  613. }
  614. func FindFollowRecordByID(follow *models.OrgFollow) (info models.OrgFollow, err error) {
  615. err = readUserDb.Model(&models.OrgFollow{}).Where("org_id = ? AND admin_user_id = ?", follow.OrgId, follow.AdminUserId).First(&info).Error
  616. return
  617. }
  618. func FindFollowInfoById(org_id int64, admin_user_id int64) (info models.OrgFollow, err error) {
  619. err = readUserDb.Model(&models.OrgFollow{}).Where("org_id = ? AND status = 1 AND admin_user_id = ?", org_id, admin_user_id).First(&info).Error
  620. return
  621. }
  622. func GetAllWaitFollowOrgList(keyword string, page int64, limit int64, id int64) (orgViewModel []*OrgViewModel, err error, total int64) {
  623. type Total struct {
  624. Count int64
  625. }
  626. var totals Total
  627. offset := (page - 1) * limit
  628. db := readUserDb
  629. if len(keyword) > 0 {
  630. likeKey := "%" + keyword + "%"
  631. err = db.Raw("Select id, org_name From sgj_user_org Where NOT EXISTS (Select id, org_name FROM sgj_org_follow Where sgj_org_follow.org_id = sgj_user_org.id AND sgj_org_follow.admin_user_id = ? AND sgj_org_follow.status = 1 ) AND import <> 1 AND (sgj_user_org.org_name Like ? OR sgj_user_org.org_short_name Like ?)", id, likeKey, likeKey).Offset(offset).Limit(limit).Scan(&orgViewModel).Error
  632. readUserDb.Raw("Select count(id) as count From sgj_user_org Where NOT EXISTS (Select id, org_name FROM sgj_org_follow Where sgj_org_follow.org_id = sgj_user_org.id AND sgj_org_follow.admin_user_id = ? AND sgj_org_follow.status = 1) AND import <> 1 AND (sgj_user_org.org_name Like ? OR sgj_user_org.org_short_name Like ?)", id, likeKey, likeKey).Scan(&totals)
  633. } else {
  634. db = db.Raw("Select id, org_name From sgj_user_org Where NOT EXISTS (Select id, org_name FROM sgj_org_follow Where sgj_org_follow.org_id = sgj_user_org.id AND sgj_org_follow.admin_user_id = ? AND sgj_org_follow.status = 1) AND import <> 1", id)
  635. err = db.Offset(offset).Limit(limit).Scan(&orgViewModel).Error
  636. readUserDb.Raw("Select count(id) as count From sgj_user_org Where NOT EXISTS (Select id, org_name FROM sgj_org_follow Where sgj_org_follow.org_id = sgj_user_org.id AND sgj_org_follow.admin_user_id = ? AND sgj_org_follow.status = 1) AND import <> 1", id).Scan(&totals)
  637. }
  638. return orgViewModel, err, totals.Count
  639. }
  640. func FindAllFollowOrg(keyword string, page int64, limit int64, admin_id int64) (follow []*FollowViewModel, err error, total int64) {
  641. type Total struct {
  642. Count int64
  643. }
  644. var totals Total
  645. offset := (page - 1) * limit
  646. if len(keyword) > 0 {
  647. var vms []*FollowViewModel = make([]*FollowViewModel, 0)
  648. var rows *sql.Rows
  649. var errs error
  650. likeKey := "%" + keyword + "%"
  651. rows, errs = readUserDb.Raw("SELECT follow.*, org.org_name as org_name FROM sgj_org_follow as follow join sgj_user_org as org on org.id = follow.org_id AND (org.org_name Like ? OR org.org_short_name Like ?) AND org.import <> 1 WHERE (follow.admin_user_id = ? AND follow.status = 1)", likeKey, likeKey, admin_id).Offset(offset).Limit(limit).Rows()
  652. readUserDb.Raw("SELECT count(follow.id) as count FROM sgj_org_follow as follow join sgj_user_org as org on org.id = follow.org_id AND (org.org_name Like ? OR org.org_short_name Like ?) AND org.import <> 1 WHERE follow.admin_user_id = ? AND follow.status = 1", likeKey, likeKey, admin_id).Scan(&totals)
  653. defer rows.Close()
  654. if errs != nil {
  655. return nil, errs, totals.Count
  656. }
  657. for rows.Next() {
  658. var vm FollowViewModel
  659. readDb.ScanRows(rows, &vm)
  660. vms = append(vms, &vm)
  661. }
  662. return vms, nil, totals.Count
  663. } else {
  664. var vms []*FollowViewModel = make([]*FollowViewModel, 0)
  665. var rows *sql.Rows
  666. var errs error
  667. rows, errs = readUserDb.Raw("SELECT follow.*, org.org_name as org_name FROM sgj_org_follow as follow join sgj_user_org as org on org.id = follow.org_id AND org.import <> 1 WHERE follow.admin_user_id = ? AND follow.status = 1", admin_id).Offset(offset).Limit(limit).Rows()
  668. readUserDb.Raw("SELECT count(follow.id) as count FROM sgj_org_follow as follow join sgj_user_org as org on org.id = follow.org_id AND org.import <> 1 WHERE follow.admin_user_id = ? AND follow.status = 1", admin_id).Scan(&totals)
  669. defer rows.Close()
  670. if errs != nil {
  671. return nil, errs, totals.Count
  672. }
  673. for rows.Next() {
  674. var vm FollowViewModel
  675. readDb.ScanRows(rows, &vm)
  676. vms = append(vms, &vm)
  677. }
  678. return vms, nil, totals.Count
  679. }
  680. }