123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839 |
- // 统计后台的 service
-
- package service
-
- import (
- "XT_Admin_Api/models"
- "XT_Admin_Api/models/admin_models"
- "database/sql"
- "fmt"
- "github.com/jinzhu/gorm"
- "strconv"
- "strings"
- "time"
- )
-
- func GetAdminAccount(account string, password string) (*admin_models.AdminAccount, error) {
- var model admin_models.AdminAccount
- err := readChargeDb.Where("mobile = ? AND password = ? AND status = 1", account, password).First(&model).Error
- if err != nil {
- if err == gorm.ErrRecordNotFound {
- return nil, nil
- }
- return nil, err
- }
- return &model, nil
- }
-
- // 获取总机构数
- func GetTotalOrgCount() (int, error) {
- var count int
- err := readUserDb.Model(&models.Org{}).Where("status <> 0 AND import <> 1").Count(&count).Error
- if err != nil {
- return 0, err
- }
- return count, nil
- }
-
- func GetAdminUserSpecialPermission(orgID int64, appID int64, adminUserID int64, permissionType models.SpecialPermissionType) (*models.AdminUserSpecialPermission, error) {
- var record models.AdminUserSpecialPermission
- 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
- if err != nil {
- if err == gorm.ErrRecordNotFound {
- return nil, nil
- } else {
- return nil, err
- }
- }
- return &record, nil
- }
-
- // 获取一段时间内新增病人数量
- func GetNewPatientCount(from int64, to int64) (int, error) {
- var count int
- db := 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, err := db.Rows()
- defer rows.Close()
-
- //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()
- if err != nil {
- return 0, err
- }
- if rows.Next() {
- rows.Scan(&count)
- }
- return count, nil
- }
-
- // 获取所有机构病人数量
- func GetPatientTotalCount() (int64, error) {
-
- var count int64
- db := readDb.Raw("SELECT COUNT(DISTINCT id_card_no) AS count FROM xt_patients")
- rows, err := db.Rows()
- defer rows.Close()
-
- //rows, err := readDb.Raw("SELECT COUNT(DISTINCT id_card_no) AS count FROM xt_patients").Rows()
- if err != nil {
- return 0, err
- }
- if rows.Next() {
- rows.Scan(&count)
- }
- return count, nil
-
- }
-
- // 获取一段时间内的活跃账户数
- func GetActiveAdminUserCount(from int64, to int64) (int64, error) {
- var count int64
- db := 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, err := db.Rows()
- defer rows.Close()
-
- //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()
- if err != nil {
- return 0, err
- }
- if rows.Next() {
- rows.Scan(&count)
- }
- return count, nil
- }
-
- // 获取所有机构账户数量
- func GetAdminUserTotalCount() (int64, error) {
- var count int64
- db := 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, err := db.Rows()
- defer rows.Close()
-
- //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()
- if err != nil {
- return 0, err
- }
- if rows.Next() {
- rows.Scan(&count)
- }
- return count, nil
- }
-
- // 获取一段时间内注册的机构数量
- func GetRegistedOrgCount(from int64, to int64) (int64, error) {
-
- var count int64
-
- err := readUserDb.Model(&models.Org{}).Where("status <> 0 AND ctime >= ? AND ctime <= ? AND import <> 1", from, to).Count(&count).Error
- if err != nil {
- return 0, err
- }
- return count, nil
- }
-
- // 获取一段时间内的活跃机构数
- func GetActiveOrgCount(from int64, to int64) (int64, error) {
- var org []*Org
- //readUserDb.Raw("Select count(DISTINCT(org_id)) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m-%d') as times from sgj_user_admin_login_log log JOIN (Select d.user_org_id from (Select new_role.user_org_id from (Select count(*) as count,org_id as user_org_id from sgj_users.sgj_user_admin_role role where role.`user_type` = 2 OR role.`user_type` = 3 Group by role.org_id) new_role where new_role.count > 2) d JOIN (Select user_org_id from (Select count(*) as count,user_org_id from sgj_xt.xt_patients where status = 1 Group by user_org_id) new_patient where new_patient.count > 3) c On d.user_org_id = c.user_org_id) new_user_org ON new_user_org.user_org_id = log.org_id where ctime >= ? AND ctime <= ? Group by log.org_id", from, to).Scan(&org)
- readUserDb.Raw("Select org_id from sgj_user_admin_login_log log JOIN (Select d.user_org_id from (Select new_role.user_org_id from (Select count(*) as count,org_id as user_org_id from sgj_users.sgj_user_admin_role role where role.`user_type` = 2 OR role.`user_type` = 3 Group by role.org_id) new_role where new_role.count > 2) d JOIN (Select user_org_id from (Select count(*) as count,user_org_id from sgj_xt.xt_patients where status = 1 Group by user_org_id) new_patient where new_patient.count > 3) c On d.user_org_id = c.user_org_id) new_user_org ON new_user_org.user_org_id = log.org_id where ctime >= ? AND ctime <= ? Group by log.org_id", from, to).Scan(&org)
- return int64(len(org)), nil
- }
-
- type Org struct {
- OrgId int64
- }
-
- // 获取所有活跃机构数
- func GetActiveOrgTotalCount() (int64, error) {
- var org []*Org
- readUserDb.Raw("Select org_id from sgj_user_admin_login_log log JOIN (Select d.user_org_id from (Select new_role.user_org_id from (Select count(*) as count,org_id as user_org_id from sgj_users.sgj_user_admin_role role where role.`user_type` = 2 OR role.`user_type` = 3 Group by role.org_id) new_role where new_role.count > 2) d JOIN (Select user_org_id from (Select count(*) as count,user_org_id from sgj_xt.xt_patients where status = 1 Group by user_org_id) new_patient where new_patient.count > 3) c On d.user_org_id = c.user_org_id) new_user_org ON new_user_org.user_org_id = log.org_id Group by log.org_id").Scan(&org)
- fmt.Println(org)
- return int64(len(org)), nil
- }
-
- // 获取昨天的注册机构总量
- func GetYesterDayRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近昨天的的机构活跃总量
- func GetYesterDayActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- db := readUserDb.Raw(" Select count(DISTINCT(org_id)) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m-%d') as times from sgj_user_admin_login_log log JOIN (Select d.user_org_id from (Select new_role.user_org_id from (Select count(*) as count,org_id as user_org_id from sgj_users.sgj_user_admin_role role where role.`user_type` = 2 OR role.`user_type` = 3 Group by role.org_id) new_role where new_role.count > 2) d JOIN (Select user_org_id from (Select count(*) as count,user_org_id from sgj_xt.xt_patients where status = 1 Group by user_org_id) new_patient where new_patient.count > 3) c On d.user_org_id = c.user_org_id) new_user_org ON new_user_org.user_org_id = log.org_id where DATE_SUB(CURDATE(), INTERVAL 1 DAY) = date(from_unixtime(ctime)) Group by date(from_unixtime(ctime))")
- err = db.Scan(&weekStatistics).Error
- return
- }
-
- // 获取昨天的的机构活跃账号总量
- func GetYesterDayActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取昨天的的机构新增病人总量
- func GetYesterDayNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近七天每天的注册机构总量
- func GetWeekRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- //func GetWeekActiveOrgCount() (weekStatistics []*admin_models.WeekStatistics, err error) {
- // 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
- // return
- //}
-
- // 获取近七天每天的机构活跃总量
- func GetWeekActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- //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));")
- db := readUserDb.Raw(" Select count(DISTINCT(org_id)) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m-%d') as times from sgj_user_admin_login_log log JOIN (Select d.user_org_id from (Select new_role.user_org_id from (Select count(*) as count,org_id as user_org_id from sgj_users.sgj_user_admin_role role where role.`user_type` = 2 OR role.`user_type` = 3 Group by role.org_id) new_role where new_role.count > 2) d JOIN (Select user_org_id from (Select count(*) as count,user_org_id from sgj_xt.xt_patients where status = 1 Group by user_org_id) new_patient where new_patient.count > 3) c On d.user_org_id = c.user_org_id) new_user_org ON new_user_org.user_org_id = log.org_id where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(from_unixtime(ctime)) Group by date(from_unixtime(ctime))")
-
- err = db.Scan(&weekStatistics).Error
- return
- }
-
- // 获取近七天每天的机构活跃账号总量
- func GetWeekActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近七天每天的机构新增病人总量
- func GetWeekNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近30天每天的注册机构总量
- func GetMonthRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近30天每天的机构活跃总量
- func GetMonthActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- err = readUserDb.Raw("Select count(DISTINCT(org_id)) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m-%d') as times from sgj_user_admin_login_log log JOIN (Select d.user_org_id from (Select new_role.user_org_id from (Select count(*) as count,org_id as user_org_id from sgj_users.sgj_user_admin_role role where role.`user_type` = 2 OR role.`user_type` = 3 Group by role.org_id) new_role where new_role.count > 2) d JOIN (Select user_org_id from (Select count(*) as count,user_org_id from sgj_xt.xt_patients where status = 1 Group by user_org_id) new_patient where new_patient.count > 3) c On d.user_org_id = c.user_org_id) new_user_org ON new_user_org.user_org_id = log.org_id where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(from_unixtime(ctime)) Group by date(from_unixtime(ctime))").Scan(&weekStatistics).Error
- return
- }
-
- // 获取近30天每天的机构活跃账号总量
- func GetMonthActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近30天每天的机构新增病人总量
- func GetMonthNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近3个月每个月的注册机构总量
- func GetThreeMonthRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近3个月每个月的机构活跃账号总量
- func GetThreeMonthActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近3个月每个月的机构活跃总量
- func GetThreeMonthActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- err = readUserDb.Raw(" Select count(DISTINCT(org_id)) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m') as times from sgj_user_admin_login_log log JOIN (Select d.user_org_id from (Select new_role.user_org_id from (Select count(*) as count,org_id as user_org_id from sgj_users.sgj_user_admin_role role where role.`user_type` = 2 OR role.`user_type` = 3 Group by role.org_id) new_role where new_role.count > 2) d JOIN (Select user_org_id from (Select count(*) as count,user_org_id from sgj_xt.xt_patients where status = 1 Group by user_org_id) new_patient where new_patient.count > 3) c On d.user_org_id = c.user_org_id) new_user_org ON new_user_org.user_org_id = log.org_id where DATE_FORMAT(date(from_unixtime(ctime)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 3 month),'%Y-%m') Group by times").Scan(&weekStatistics).Error
- return
- }
-
- // 获取近3个月每个月机构新增病人总量
- func GetThreeMonthNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近半年每个月的注册机构总量
- func GetSixMonthRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近半年每个月的机构活跃账号总量
- func GetSixMonthActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近半年每个月的机构活跃总量
- func GetSixMonthActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- err = readUserDb.Raw(" Select count(DISTINCT(org_id)) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m') as times from sgj_user_admin_login_log log JOIN (Select d.user_org_id from (Select new_role.user_org_id from (Select count(*) as count,org_id as user_org_id from sgj_users.sgj_user_admin_role role where role.`user_type` = 2 OR role.`user_type` = 3 Group by role.org_id) new_role where new_role.count > 2) d JOIN (Select user_org_id from (Select count(*) as count,user_org_id from sgj_xt.xt_patients where status = 1 Group by user_org_id) new_patient where new_patient.count > 3) c On d.user_org_id = c.user_org_id) new_user_org ON new_user_org.user_org_id = log.org_id where DATE_FORMAT(date(from_unixtime(ctime)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 6 month),'%Y-%m') Group by times").Scan(&weekStatistics).Error
- return
- }
-
- // 获取近半年每个月机构新增病人总量
- func GetSixMonthNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近1年每个月的注册机构总量
- func GetYearRegistedOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近1年每个月的机构活跃账号总量
- func GetYearActiveAdminUserCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- // 获取近1年每个月的机构活跃总量
- func GetYearActiveOrgCount() (weekStatistics []*admin_models.Statistics, err error) {
- err = readUserDb.Raw(" Select count(DISTINCT(org_id)) as count, DATE_FORMAT(date(from_unixtime(ctime)) ,'%Y-%m') as times from sgj_user_admin_login_log log JOIN (Select d.user_org_id from (Select new_role.user_org_id from (Select count(*) as count,org_id as user_org_id from sgj_users.sgj_user_admin_role role where role.`user_type` = 2 OR role.`user_type` = 3 Group by role.org_id) new_role where new_role.count > 2) d JOIN (Select user_org_id from (Select count(*) as count,user_org_id from sgj_xt.xt_patients where status = 1 Group by user_org_id) new_patient where new_patient.count > 3) c On d.user_org_id = c.user_org_id) new_user_org ON new_user_org.user_org_id = log.org_id where DATE_FORMAT(date(from_unixtime(ctime)),'%Y-%m')>=DATE_FORMAT(date_sub(curdate(), interval 12 month),'%Y-%m') Group by times").Scan(&weekStatistics).Error
- return
- }
-
- // 获取近1年每个月机构新增病人总量
- func GetYearNewPatientCount() (weekStatistics []*admin_models.Statistics, err error) {
- 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
- return
- }
-
- //func GetAllAdmin() (admin []*admin_models.AdminAccount, err error) {
- // err = readChargeDb.Model(&admin_models.AdminAccount{}).Where("is_admin <> 1 AND (status = 1 OR status = 2)").Find(&admin).Error
- // return
- //}
-
- func GetAllAdmin() (admin []*admin_models.AdminAccount, err error) {
- err = readChargeDb.Model(&admin_models.AdminAccount{}).Where("is_admin <> 1 AND (status = 1 OR status = 2)").Find(&admin).Error
- return
- }
-
- func CreateAdmin(admin *admin_models.AdminAccount) (err error) {
- err = readChargeDb.Model(&admin_models.AdminAccount{}).Create(&admin).Error
- return
- }
-
- func FindUserInfoByAccount(account string) (admin admin_models.AdminAccount, err error) {
- err = readChargeDb.Model(&admin_models.AdminAccount{}).Where("mobile = ? AND status = 1", account).First(&admin).Error
- return
- }
-
- func FindAdminById(id int64) (admin admin_models.AdminAccount, err error) {
- err = readChargeDb.Model(&admin_models.AdminAccount{}).Where("id = ?", id).First(&admin).Error
- return
- }
-
- func UpdateAdmin(admin *admin_models.AdminAccount) (err error) {
- err = readChargeDb.Model(&admin_models.AdminAccount{}).Save(&admin).Error
- return
- }
-
- func DeleteAdmin(id int64) (err error) {
- err = readChargeDb.Model(&admin_models.AdminAccount{}).Where("id = ?", id).Updates(map[string]interface{}{"status": 0}).Error
- //err = readChargeDb.Model(&models.OrgFollow{}).Where("admin_user_id = ?", id).Updates(map[string]interface{}{"status": 0}).Error
-
- return
-
- }
-
- func UpdateAdminTwo(id int64) (err error) {
- err = readChargeDb.Model(&admin_models.AdminAccount{}).Where("id = ?", id).Updates(map[string]interface{}{"status": 1}).Error
- //err = readChargeDb.Model(&models.OrgFollow{}).Where("admin_user_id = ?", id).Updates(map[string]interface{}{"status": 0}).Error
-
- return
-
- }
-
- func FindAllOrg() (org []*models.Org, err error) {
- err = readUserDb.Select("id, org_name").Where("status = 1").Find(&org).Error
-
- return
- }
-
- type FollowViewModel struct {
- models.OrgFollow
- OrgName string `gorm:"column:org_name" json:"org_name"`
- }
-
- func FindFollowOrg(admin_id int64) ([]*FollowViewModel, error) {
- var vms []*FollowViewModel = make([]*FollowViewModel, 0)
- 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()
- defer rows.Close()
- if err != nil {
- return nil, err
- }
- for rows.Next() {
- var vm FollowViewModel
- readDb.ScanRows(rows, &vm)
- vms = append(vms, &vm)
- }
- fmt.Println(vms)
- return vms, nil
- }
-
- type OrgViewModel struct {
- Id int64 `gorm:"PRIMARY_KEY;AUTO_INCREMENT" json:"id"` // 机构 ID
- OrgName string `gorm:"column:org_name" json:"org_name"`
- }
-
- func FindUnFollowOrgByIds(id int64) (orgViewModel []*OrgViewModel, err error) {
- 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
- return
-
- }
-
- func CreateFollowInfo(Follows []*models.OrgFollow) (err error) {
- if len(Follows) > 0 {
- utx := writeUserDb.Begin()
- if len(Follows) > 0 {
- thisSQL := "INSERT INTO sgj_org_follow (org_id,admin_user_id,ctime,mtime,status) VALUES "
- insertParams := make([]string, 0)
- insertData := make([]interface{}, 0)
- for _, info := range Follows {
- insertParams = append(insertParams, "(?,?,?,?,?)")
- insertData = append(insertData, info.OrgId)
- insertData = append(insertData, info.AdminUserId)
- insertData = append(insertData, info.Ctime)
- insertData = append(insertData, info.Mtime)
- insertData = append(insertData, info.Status)
- }
- thisSQL += strings.Join(insertParams, ", ")
- err = utx.Exec(thisSQL, insertData...).Error
- if err != nil {
- utx.Rollback()
- return
- }
- }
- utx.Commit()
- }
- return
-
- }
-
- func UpdateFollow(follow *models.OrgFollow) (err error) {
- err = readUserDb.Model(&models.OrgFollow{}).Save(follow).Error
- return
- }
-
- func FindFollowRecordByID(follow *models.OrgFollow) (info models.OrgFollow, err error) {
- err = readUserDb.Model(&models.OrgFollow{}).Where("org_id = ? AND admin_user_id = ?", follow.OrgId, follow.AdminUserId).First(&info).Error
- return
- }
-
- func FindFollowInfoById(org_id int64, admin_user_id int64) (info models.OrgFollow, err error) {
- err = readUserDb.Model(&models.OrgFollow{}).Where("org_id = ? AND status = 1 AND admin_user_id = ?", org_id, admin_user_id).First(&info).Error
- return
- }
-
- func GetAllWaitFollowOrgList(keyword string, page int64, limit int64, id int64) (orgViewModel []*OrgViewModel, err error, total int64) {
- type Total struct {
- Count int64
- }
- var totals Total
- offset := (page - 1) * limit
- db := readUserDb
- if len(keyword) > 0 {
- likeKey := "%" + keyword + "%"
- 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 ?) AND status = 1 ORDER BY sgj_user_org.ctime DESC", id, likeKey, likeKey).Offset(offset).Limit(limit).Scan(&orgViewModel).Error
- 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 ?) AND status = 1", id, likeKey, likeKey).Scan(&totals)
-
- } else {
- 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 AND status = 1 ORDER BY sgj_user_org.ctime DESC", id)
- err = db.Offset(offset).Limit(limit).Scan(&orgViewModel).Error
- 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 status = 1", id).Scan(&totals)
-
- }
-
- return orgViewModel, err, totals.Count
- }
-
- func FindAllFollowOrg(keyword string, page int64, limit int64, admin_id int64) (follow []*FollowViewModel, err error, total int64) {
- type Total struct {
- Count int64
- }
- var totals Total
-
- offset := (page - 1) * limit
-
- if len(keyword) > 0 {
- var vms []*FollowViewModel = make([]*FollowViewModel, 0)
- var rows *sql.Rows
- var errs error
- likeKey := "%" + keyword + "%"
- rows, errs = readUserDb.Raw("SELECT follow.*, org.org_name as org_name, org.ctime as time 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 AND org.status = 1 WHERE (follow.admin_user_id = ? AND follow.status = 1) ORDER BY time DESC", likeKey, likeKey, admin_id).Offset(offset).Limit(limit).Rows()
- 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 AND org.status = 1 WHERE follow.admin_user_id = ? AND follow.status = 1", likeKey, likeKey, admin_id).Scan(&totals)
-
- defer rows.Close()
- if errs != nil {
- return nil, errs, totals.Count
- }
- for rows.Next() {
- var vm FollowViewModel
- readDb.ScanRows(rows, &vm)
- vms = append(vms, &vm)
- }
-
- return vms, nil, totals.Count
- } else {
- var vms []*FollowViewModel = make([]*FollowViewModel, 0)
- var rows *sql.Rows
- var errs error
- rows, errs = readUserDb.Raw("SELECT follow.*, org.org_name as org_name, org.ctime as time FROM sgj_org_follow as follow join sgj_user_org as org on org.id = follow.org_id AND org.import <> 1 AND org.status = 1 WHERE follow.admin_user_id = ? AND follow.status = 1 ORDER BY time DESC", admin_id).Offset(offset).Limit(limit).Rows()
- 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 AND org.status = 1 WHERE follow.admin_user_id = ? AND follow.status = 1", admin_id).Scan(&totals)
-
- defer rows.Close()
- if errs != nil {
- return nil, errs, totals.Count
- }
- for rows.Next() {
- var vm FollowViewModel
- readDb.ScanRows(rows, &vm)
- vms = append(vms, &vm)
- }
-
- return vms, nil, totals.Count
- }
-
- }
-
- // 获取累积客户数
- func GetCustomCount() (int64, error) {
- var count int64
- err := ChargeReadDB().Model(&models.KyyChargeCustom{}).Where("status = 1").Count(&count).Error
- if err != nil {
- return 0, err
- }
- return count, nil
- }
-
- // 本年新增收费客户
- func GetCurYearCustomCount() (int64, error) {
- var count int64
- err := ChargeReadDB().Model(&models.KyyChargeCustom{}).Where("status = 1 and YEAR(sign_time) = YEAR(CURDATE())").Count(&count).Error
- if err != nil {
- return 0, err
- }
- return count, nil
- }
-
- // 统计本年新增标准版客户
- func GetCurYearStandCustomCount() (int64, error) {
- var count int64
- err := ChargeReadDB().Model(&models.KyyChargeCustom{}).Where("status = 1 and YEAR(sign_time) = YEAR(CURDATE()) and custom_type = 1").Count(&count).Error
- if err != nil {
- return 0, err
- }
- return count, nil
- }
-
- // 统计本年新增尊享版客户
- func GetCurYearDeluxeCustomCount() (int64, error) {
- var count int64
- err := ChargeReadDB().Model(&models.KyyChargeCustom{}).Where("status = 1 and YEAR(sign_time) = YEAR(CURDATE()) and custom_type = 2").Count(&count).Error
- if err != nil {
- return 0, err
- }
- return count, nil
- }
-
- // 统计本年新增专业版客户
- func GetCurYearProfessionalCustomCount() (int64, error) {
- var count int64
- err := ChargeReadDB().Model(&models.KyyChargeCustom{}).Where("status = 1 and YEAR(sign_time) = YEAR(CURDATE()) and custom_type = 3").Count(&count).Error
- if err != nil {
- return 0, err
- }
- return count, nil
- }
-
- // 统计本年新增其他版客户
- func GetCurYearOtherCustomCount() (int64, error) {
- var count int64
- err := ChargeReadDB().Model(&models.KyyChargeCustom{}).Where("status = 1 and YEAR(sign_time) = YEAR(CURDATE()) and custom_type = 4").Count(&count).Error
- if err != nil {
- return 0, err
- }
- return count, nil
- }
-
- func GetCurYearContractPriceCount() (float64, error) {
- type Count struct {
- Count float64
- }
- var count Count
- err := ChargeReadDB().Model(&models.KyyChargeContract{}).Select("sum(sumamt) as count").Where("status = 1 and YEAR(start_time) = YEAR(CURDATE())").Scan(&count).Error
- if err != nil {
- return 0, err
- }
- return count.Count, nil
- }
-
- func GetCurYearSoftwarePriceCount() (float64, error) {
- type Count struct {
- Count float64
- }
- var count Count
- err := ChargeReadDB().Model(&models.KyyChargeContract{}).Select("sum(software_price) as count").Where("status = 1 and YEAR(start_time) = YEAR(CURDATE())").Scan(&count).Error
- if err != nil {
- return 0, err
- }
- return count.Count, nil
- }
-
- func GetCurYearHardwarePriceCount() (float64, error) {
- type Count struct {
- Count float64
- }
- var count Count
- err := ChargeReadDB().Model(&models.KyyChargeContract{}).Select("sum(hardware_price) as count").Where("status = 1 and YEAR(start_time) = YEAR(CURDATE())").Scan(&count).Error
- if err != nil {
- return 0, err
- }
- return count.Count, nil
- }
-
- func GetCurYearPaymentCollectionSumamtPriceCount() (float64, error) {
- type Count struct {
- Count float64
- }
- var count Count
- err := ChargeReadDB().Model(&models.KyyChargePaymentCollection{}).Select("sum(payment_collection_sumamt) as count").Where("status = 1 and YEAR(payment_collection_date) = YEAR(CURDATE())").Scan(&count).Error
- if err != nil {
- return 0, err
- }
- return count.Count, nil
- }
-
- func GetCurYearPaymentCollectionSoftwarePriceCount() (float64, error) {
- type Count struct {
- Count float64
- }
- var count Count
- err := ChargeReadDB().Model(&models.KyyChargePaymentCollection{}).Select("sum(software_sumamt) as count").Where("status = 1 and YEAR(payment_collection_date) = YEAR(CURDATE())").Scan(&count).Error
- if err != nil {
- return 0, err
- }
- return count.Count, nil
- }
-
- func GetCurYearPaymentCollectionHardwarePriceCount() (float64, error) {
- type Count struct {
- Count float64
- }
- var count Count
- err := ChargeReadDB().Model(&models.KyyChargePaymentCollection{}).Select("sum(hardware_sumamt) as count").Where("status = 1 and YEAR(payment_collection_date) = YEAR(CURDATE())").Scan(&count).Error
- if err != nil {
- return 0, err
- }
- return count.Count, nil
- }
-
- type ChargeCustom struct {
- ID uint
- Name string
- SignTime string
- SignEndTime string
- ContractPrice string
- SoftwarePrice string
- HardwarePrice string
- Address string
- IsImplement int
- Remark string
- }
-
- type ChargeRenewal struct {
- ID uint
- CustomID uint
- SignEndTime string
- }
-
- type Results struct {
- ChargeCustom
- SignEndTime string
- }
-
- func GetOneMonthEndDate() (results []Results) {
- currentDate := time.Now()
- //threeMonthsLater := currentDate.AddDate(0, 3, 0)
- oneMonthLater := currentDate.AddDate(0, 1, 0)
- ChargeReadDB().Table("kyy_charge_custom as kc").
- Select("kc.*, COALESCE(kr.end_time, kc.sign_end_time) as sign_end_time").
- Joins("LEFT JOIN kyy_charge_renewal as kr ON kc.id = kr.custom_id").
- Where("(kr.end_time BETWEEN ? AND ?) OR (kr.end_time BETWEEN ? AND ?) OR (kr.end_time IS NULL AND kc.sign_end_time BETWEEN ? AND ?) OR (kr.end_time IS NULL AND kc.sign_end_time BETWEEN ? AND ?)",
- currentDate, oneMonthLater,
- currentDate, oneMonthLater,
- currentDate, oneMonthLater,
-
- currentDate, oneMonthLater).
- Scan(&results)
- return
- }
-
- func GetThreeMonthEndDate() (results []Results) {
- currentDate := time.Now()
- threeMonthsLater := currentDate.AddDate(0, 3, 0)
- ChargeReadDB().Table("kyy_charge_custom as kc").
- Select("kc.*, COALESCE(kr.end_time, kc.sign_end_time) as sign_end_time").
- Joins("LEFT JOIN kyy_charge_renewal as kr ON kc.id = kr.custom_id").
- Where("(kr.end_time BETWEEN ? AND ?) OR (kr.end_time BETWEEN ? AND ?) OR (kr.end_time IS NULL AND kc.sign_end_time BETWEEN ? AND ?) OR (kr.end_time IS NULL AND kc.sign_end_time BETWEEN ? AND ?)",
- currentDate, threeMonthsLater,
- currentDate, threeMonthsLater,
- currentDate, threeMonthsLater,
-
- currentDate, threeMonthsLater).
- Scan(&results)
- return
-
- }
-
- func GetCurYearRenewal() (err error, count int64) {
- currentYear := time.Now().Year()
- err = ChargeReadDB().Model(&models.KyyChargeRenewal{}).Where("YEAR(start_time) = ?", currentYear).Count(&count).Error
- if err != nil {
- fmt.Println(err)
- }
- return
- }
-
- func GetCurYearPaymentCollection() (err error, count int64) {
- currentYear := time.Now().Year()
- var kpc []models.KyyChargePaymentCollection
- err = ChargeReadDB().Model(&models.KyyChargePaymentCollection{}).Where("YEAR(payment_collection_date) = ? and payment_collection_type = 1", currentYear).Find(&kpc).Error
- if err != nil {
- fmt.Println(err)
- }
- count = 0
- for _, item := range kpc {
- pcs, _ := strconv.ParseInt(item.PaymentCollectionSumamt, 10, 64)
- count = count + pcs
- }
- return
- }
-
- func GetCurYearWaitPutIntoEffect() (count int64, err error) {
- currentYear := time.Now().Year()
- err = ChargeReadDB().Model(&models.KyyChargeCustom{}).Where("YEAR(sign_time) = ? and is_implement = 0", currentYear).Count(&count).Error
- if err != nil {
- fmt.Println(err)
- }
- return
- }
-
- func GetCurYearWaitAbutment() (count int64, err error) {
- currentYear := time.Now().Year()
- err = ChargeReadDB().Model(&models.KyyChargeCustom{}).Where("(YEAR(sign_time) = ? and lis_status = 0) or (YEAR(sign_time) = ? and qc_status = 0) or (YEAR(sign_time) = ? and yb_status = 0)", currentYear, currentYear, currentYear).Count(&count).Error
- if err != nil {
- fmt.Println(err)
- }
- return
- }
-
- type ContractData struct {
- Month int `json:"month"`
- TotalContractAmount float64 `json:"total_contract_amount"`
- SoftwareContractAmount float64 `json:"software_contract_amount"`
- HardwareContractAmount float64 `json:"hardware_contract_amount"`
- }
-
- type PaymentData struct {
- Month int `json:"month"`
- TotalPaymentAmount float64 `json:"total_payment_amount"`
- SoftwarePaymentAmount float64 `json:"software_payment_amount"`
- HardwarePaymentAmount float64 `json:"hardware_payment_amount"`
- }
-
- type MonthlyData struct {
- Month int `json:"month"`
- TotalContractAmount float64 `json:"total_contract_amount"`
- SoftwareContractAmount float64 `json:"software_contract_amount"`
- HardwareContractAmount float64 `json:"hardware_contract_amount"`
- TotalPaymentAmount float64 `json:"total_payment_amount"`
- SoftwarePaymentAmount float64 `json:"software_payment_amount"`
- HardwarePaymentAmount float64 `json:"hardware_payment_amount"`
-
- RenewalPrice float64 `json:"renewal_price"`
- }
-
- type MonthlyRenewalData struct {
- Month int `json:"month"`
- RenewalPrice float64 `json:"renewal_price"`
- }
-
- func GetCurePrice() (aa map[int]*MonthlyData) {
- // 查询合同金额
- var contractResults []ContractData
- ChargeReadDB().Raw(`
- SELECT
- MONTH(sign_time) AS month,
- SUM(CAST(contract_price AS DECIMAL(10, 2))) AS total_contract_amount,
- SUM(CAST(software_price AS DECIMAL(10, 2))) AS software_contract_amount,
- SUM(CAST(hardware_price AS DECIMAL(10, 2))) AS hardware_contract_amount
- FROM kyy_charge_custom
- GROUP BY MONTH((sign_time))
- ORDER BY MONTH((sign_time));
- `).Scan(&contractResults)
-
- // 查询回款金额
- var paymentResults []PaymentData
- ChargeReadDB().Raw(`
- SELECT
- MONTH(payment_collection_date) AS month,
- SUM(CAST(payment_collection_sumamt AS DECIMAL(10, 2))) AS total_payment_amount,
- SUM(CAST(software_sumamt AS DECIMAL(10, 2))) AS software_payment_amount,
- SUM(CAST(hardware_sumamt AS DECIMAL(10, 2))) AS hardware_payment_amount
- FROM kyy_charge_payment_collection
- GROUP BY MONTH(payment_collection_date)
- ORDER BY MONTH(payment_collection_date);
- `).Scan(&paymentResults)
-
- // 查询续约总汇款金额
- var paymentRenewalResults []MonthlyRenewalData
- ChargeReadDB().Raw(`
- SELECT
- MONTH(sign_time) AS month,
- SUM(CAST(renewal_price AS DECIMAL(10, 2))) AS renewal_price
- FROM kyy_charge_renewal
- GROUP BY MONTH(sign_time)
- ORDER BY MONTH(sign_time)
- `).Scan(&paymentRenewalResults)
-
- // 合并结果
- monthlyData := make(map[int]*MonthlyData)
- for _, c := range contractResults {
- monthlyData[c.Month] = &MonthlyData{
- Month: c.Month,
- TotalContractAmount: c.TotalContractAmount,
- SoftwareContractAmount: c.SoftwareContractAmount,
- HardwareContractAmount: c.HardwareContractAmount,
- }
- }
- for _, p := range paymentResults {
- if md, ok := monthlyData[p.Month]; ok {
- md.TotalPaymentAmount = p.TotalPaymentAmount
- md.SoftwarePaymentAmount = p.SoftwarePaymentAmount
- md.HardwarePaymentAmount = p.HardwarePaymentAmount
- } else {
- monthlyData[p.Month] = &MonthlyData{
- Month: p.Month,
- TotalPaymentAmount: p.TotalPaymentAmount,
- SoftwarePaymentAmount: p.SoftwarePaymentAmount,
- HardwarePaymentAmount: p.HardwarePaymentAmount,
- }
- }
- }
-
- for _, c := range paymentRenewalResults {
- monthlyData[c.Month] = &MonthlyData{
- Month: c.Month,
- RenewalPrice: c.RenewalPrice,
- }
- }
-
- return monthlyData
- }
|