xcx_mobile_api_service.go 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package service
  2. import (
  3. "Xcx_New/models"
  4. "crypto/aes"
  5. "crypto/cipher"
  6. "encoding/base64"
  7. "encoding/json"
  8. "errors"
  9. "github.com/jinzhu/gorm"
  10. "strings"
  11. )
  12. func GetXcxMobileInformation(mobile string) (*models.XcxAdminUserRole, error) {
  13. role := models.XcxAdminUserRole{}
  14. err := UserReadDB().Model(&role).Where("mobile = ? and status = 1", mobile).Find(&role).Error
  15. if err == gorm.ErrRecordNotFound {
  16. return nil, err
  17. }
  18. if err != nil {
  19. return nil, err
  20. }
  21. return &role, nil
  22. }
  23. func CreateXcxAdminUser(role models.XcxAdminUserRole) error {
  24. err := UserReadDB().Create(&role).Error
  25. return err
  26. }
  27. func GetLoginInfor(mobile string) (models.XcxAdminUserRole, error) {
  28. role := models.XcxAdminUserRole{}
  29. err := UserReadDB().Model(&role).Where("mobile = ? and status = 1", mobile).Find(&role).Error
  30. return role, err
  31. }
  32. func GetMobilePatientInfo(mobile string) (models.XcxPatients, error) {
  33. patients := models.XcxPatients{}
  34. err := XTReadDB().Model(&patients).Where("(phone = ? or home_telephone = ? ) and status = 1", mobile, mobile).Find(&patients).Error
  35. return patients, err
  36. }
  37. func GetPatientListByPatientId(id int64) (models.XcxPatients, error) {
  38. patients := models.XcxPatients{}
  39. err := XTReadDB().Model(&patients).Where("id = ? and status = 1", id).Find(&patients).Error
  40. return patients, err
  41. }
  42. func DecryptData(app_id, session_key, iv, encrypted_data string) (map[string]interface{}, error) {
  43. if len := strings.Count(session_key, "") - 1; len != 24 {
  44. return nil, errors.New("Invalid value session_key!")
  45. }
  46. aesKey, err := base64.StdEncoding.DecodeString(session_key)
  47. if err != nil {
  48. return nil, err
  49. }
  50. if len := strings.Count(iv, "") - 1; len != 24 {
  51. return nil, errors.New("Invalid value iv!")
  52. }
  53. ivKey, err := base64.StdEncoding.DecodeString(iv)
  54. if err != nil {
  55. return nil, err
  56. }
  57. decodeData, err := base64.StdEncoding.DecodeString(encrypted_data)
  58. if err != nil {
  59. return nil, err
  60. }
  61. dataBytes, err := AesDecrypt(decodeData, aesKey, ivKey)
  62. if err != nil {
  63. return nil, err
  64. }
  65. var result map[string]interface{}
  66. err = json.Unmarshal(dataBytes, &result)
  67. watermark := result["watermark"].(map[string]interface{})
  68. if watermark["appid"] != app_id {
  69. return nil, errors.New("Invalid appid data!")
  70. }
  71. return result, err
  72. }
  73. func AesDecrypt(crypted, key, iv []byte) ([]byte, error) {
  74. block, err := aes.NewCipher(key)
  75. if err != nil {
  76. return nil, err
  77. }
  78. blockMode := cipher.NewCBCDecrypter(block, iv)
  79. origData := make([]byte, len(crypted))
  80. blockMode.CryptBlocks(origData, crypted)
  81. // 去除填充
  82. length := len(origData)
  83. unp := int(origData[length-1])
  84. return origData[:(length - unp)], nil
  85. }