123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. package models
  2. import (
  3. "errors"
  4. "spaceofcheng/services/models/model"
  5. "strings"
  6. "time"
  7. "github.com/yl10/kit/guid"
  8. )
  9. // GetPureUserInfo 获取用户基本信息
  10. func GetPureUserInfo(id string) (*model.SysUser, error) {
  11. user := model.SysUser{}
  12. has, err := DBEngine.Where("user_id=?", id).Get(&user)
  13. if err != nil {
  14. return nil, err
  15. }
  16. if !has {
  17. return nil, errors.New("没有查询到 ID (" + id + ") 对应的用户")
  18. }
  19. if user.Status != STATUS_NORMAL {
  20. return nil, errors.New("用户状态不正确")
  21. }
  22. return &user, nil
  23. }
  24. // GetUserMenu 获取用户菜单
  25. func GetUserMenu(userID string) ([]model.SysMenu, error) {
  26. query := `
  27. SELECT t.*
  28. FROM sys_menu t
  29. JOIN sys_user_menu s ON t.menu_id = s.menu_id
  30. WHERE s.user_id = ?
  31. AND t.status = ?
  32. ORDER BY t.order_no ASC
  33. `
  34. var menus []model.SysMenu
  35. if err := DBEngine.SQL(query, userID, STATUS_NORMAL).Find(&menus); err != nil {
  36. return nil, err
  37. }
  38. return menus, nil
  39. }
  40. // GetUserCase 获取用户案场
  41. func GetUserCase(userID string) ([]model.SysUserCase, error) {
  42. query := `
  43. SELECT t.*
  44. FROM sys_user_case t
  45. inner join sys_case b on t.case_id=b.case_id
  46. WHERE t.user_id = ?
  47. AND t.status = ? and b.case_id>?
  48. `
  49. var cases []model.SysUserCase
  50. if err := DBEngine.SQL(query, userID, STATUS_NORMAL, STATUS_DEL).Find(&cases); err != nil {
  51. return nil, err
  52. }
  53. return cases, nil
  54. }
  55. // GetOrg 获取机构信息
  56. func GetOrg(orgID string) (*model.SysOrg, error) {
  57. var org model.SysOrg
  58. has, err := DBEngine.Where("org_id=?", orgID).And("status=?", STATUS_NORMAL).Get(&org)
  59. if err != nil {
  60. return nil, err
  61. }
  62. if !has {
  63. return nil, errors.New("没有查询到机构信息")
  64. }
  65. return &org, nil
  66. }
  67. // GetCustomer 获取用户信息
  68. // 暂时无法解决 一个用户 多组织架构的问题
  69. func GetCustomer(custID string) (*model.TaCustomer, error) {
  70. var cust model.TaCustomer
  71. has, err := DBEngine.Where("customer_id=?", custID).And("status=?", STATUS_NORMAL).Get(&cust)
  72. if err != nil {
  73. return nil, err
  74. }
  75. if !has {
  76. return nil, errors.New("没有查询到客户 (id: " + custID + ") 信息")
  77. }
  78. return &cust, nil
  79. }
  80. // GetUserMappingByOpenID 获取用户映射信息
  81. func GetUserMappingByOpenID(openID string) ([]model.TaUserMapping, error) {
  82. var users []model.TaUserMapping
  83. err := DBEngine.Where("openid=?", openID).Find(&users)
  84. return users, err
  85. }
  86. // EditUserMapping 保存用户映射信息
  87. func EditUserMapping(user *model.TaUserMapping) error {
  88. // 如果没有映射ID, 则新增记录
  89. if user.MappingId == "" {
  90. user.MappingId = guid.NewGUIDString()
  91. _, err := DBEngine.Insert(user)
  92. return err
  93. }
  94. // 否则更新记录
  95. cols := []string{
  96. "account_info",
  97. }
  98. _, err := DBEngine.Cols(cols...).
  99. Where("account_type=?", user.AccountType).
  100. And("openid=?", user.Openid).
  101. Update(user)
  102. return err
  103. }
  104. // GetWeChatConfig 获取微信配置
  105. func GetWeChatConfig(org, cliType string) (map[string]string, error) {
  106. conf := new(model.SysWechatConf)
  107. if _, err := DBEngine.Where("org_id=?", org).And("type=?", cliType).Get(conf); err != nil {
  108. return nil, err
  109. }
  110. if conf.ConfId == "" {
  111. return nil, nil
  112. }
  113. cert := map[string]string{
  114. "appid": conf.Appid,
  115. "secret": conf.Secret,
  116. "token": conf.Token,
  117. "aeskey": conf.Aeskey,
  118. "wxid": conf.Wxid,
  119. }
  120. return cert, nil
  121. }
  122. // InsertToken 插入 token 生成记录
  123. func InsertToken(token, uid, batchNo string, expire time.Time) error {
  124. tk := model.SysTokenLog{
  125. Token: token,
  126. Uid: uid,
  127. BatchNo: batchNo,
  128. ExpireDate: expire,
  129. Status: STATUS_NORMAL,
  130. CreateDate: time.Now().Local(),
  131. }
  132. if _, err := DBEngine.Insert(&tk); err != nil {
  133. return err
  134. }
  135. return nil
  136. }
  137. // UpdateTokenExpire 设置 token 过期
  138. func UpdateTokenExpire(token, uid string) error {
  139. tk := model.SysTokenLog{
  140. Status: STATUS_DEL,
  141. }
  142. // 检索相同批次
  143. var tkLogs []model.SysTokenLog
  144. if err := DBEngine.Where("token=?", token).Find(&tkLogs); err != nil {
  145. return err
  146. }
  147. // 如果有相同批次的, 则更新本批次为失效
  148. if tkLogs != nil && len(tkLogs) > 0 {
  149. batchNo := []string{}
  150. for _, t := range tkLogs {
  151. if t.BatchNo != "" {
  152. batchNo = append(batchNo, t.BatchNo)
  153. }
  154. }
  155. if len(batchNo) > 0 {
  156. if _, err := DBEngine.Cols("status").
  157. Where("token=?", token).
  158. Or("batch_no in ('" + strings.Join(batchNo, "','") + "')").
  159. Update(&tk); err != nil {
  160. return err
  161. }
  162. return nil
  163. }
  164. }
  165. if _, err := DBEngine.Cols("status").Where("token=?", token).Or("uid=?", uid).Update(&tk); err != nil {
  166. return err
  167. }
  168. return nil
  169. }
  170. // GetToken 获取 token
  171. func GetToken(token string) (*model.SysTokenLog, error) {
  172. tk := model.SysTokenLog{}
  173. if _, err := DBEngine.Where("token=?", token).Get(&tk); err != nil {
  174. return nil, err
  175. }
  176. return &tk, nil
  177. }
  178. // GetCustomerByID 依据ID获取客户
  179. func GetCustomerByID(id string) (*model.TaCustomer, error) {
  180. cust := new(model.TaCustomer)
  181. if _, err := DBEngine.Where("customer_id=?", id).Get(cust); err != nil {
  182. return nil, err
  183. }
  184. return cust, nil
  185. }
  186. func SaveCustomer(cust *model.TaCustomer) error {
  187. cust.CustomerId = guid.NewGUIDString()
  188. cust.CreateDate = time.Now().Local()
  189. cust.Status = STATUS_NORMAL
  190. _, err := DBEngine.Insert(cust)
  191. return err
  192. }
  193. // SaveAccount 保存账户信息
  194. func SaveAccount(account *model.TaCustomerAccount) error {
  195. if account.CustomerId == "" {
  196. return errors.New("账户未关联人员")
  197. }
  198. account.Status = STATUS_NORMAL
  199. account.CreateDate = time.Now().Local()
  200. account.AccountId = guid.NewGUIDString()
  201. _, err := DBEngine.Insert(account)
  202. return err
  203. }
  204. // UpdateUserMapping 更新用户映射
  205. func UpdateUserMapping(userMap *model.TaUserMapping, cols []string) error {
  206. if userMap.MappingId == "" {
  207. return errors.New("用户映射信息不存在")
  208. }
  209. _, err := DBEngine.Where("mapping_id=?", userMap.MappingId).Cols(cols...).Update(userMap)
  210. return err
  211. }
  212. // GetAllCases 获取所有有效案场
  213. func GetAllCases() ([]model.SysCase, error) {
  214. var cases []model.SysCase
  215. err := DBEngine.Where("status=?", STATUS_NORMAL).Asc("org_id").Find(&cases)
  216. return cases, err
  217. }
  218. // GetCaseByID 获取案场
  219. func GetCaseByID(caseID string) (cs *model.SysCase, err error) {
  220. cs = new(model.SysCase)
  221. _, err = DBEngine.Where("case_id=?", caseID).Get(cs)
  222. return cs, err
  223. }
  224. // GetAllOrgs 获取所有机构
  225. func GetAllOrgs() ([]model.SysOrg, error) {
  226. var orgs []model.SysOrg
  227. err := DBEngine.Where("status=?", STATUS_NORMAL).Asc("org_id").Find(&orgs)
  228. return orgs, err
  229. }
  230. func GetSeqID(key string) (string, error) {
  231. query := "select nextval('" + key + "') as seqid"
  232. res, err := DBEngine.QueryString(query)
  233. if err != nil {
  234. return "", err
  235. }
  236. return res[0]["seqid"], nil
  237. }