english_report_email.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. package models
  2. import (
  3. "eta_gn/eta_api/global"
  4. "eta_gn/eta_api/utils"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "time"
  7. )
  8. // EnglishReportEmail 英文研报-邮箱/客户联系人
  9. type EnglishReportEmail struct {
  10. Id int `gorm:"column:id;primaryKey" description:"邮箱ID"`
  11. CompanyId int `gorm:"column:company_id" description:"客户ID"`
  12. Name string `gorm:"column:name" description:"联系人名称"`
  13. Email string `gorm:"column:email" description:"邮箱地址"`
  14. Mobile string `gorm:"column:mobile" description:"手机号"`
  15. CountryCode string `gorm:"column:country_code" description:"区号,86、852、886等"`
  16. BusinessCardUrl string `gorm:"column:business_card_url" description:"名片"`
  17. ViewTotal int `gorm:"column:view_total" description:"累计点击量/阅读量"`
  18. LastViewTime time.Time `gorm:"column:last_view_time" description:"最后阅读时间"`
  19. IsDeleted int `gorm:"column:is_deleted" description:"删除状态:0-正常;1-已删除"`
  20. Enabled int `gorm:"column:enabled" description:"邮箱状态:1:有效,0:禁用"`
  21. AdminId int `gorm:"column:admin_id" description:"创建人ID"`
  22. AdminName string `gorm:"column:admin_name" description:"创建人姓名"`
  23. Status int `gorm:"column:status" description:"1:正式,2:临时,3:终止"`
  24. CompanyName string `gorm:"column:company_name" description:"公司名称"`
  25. CreateTime time.Time `gorm:"column:create_time" description:"创建时间"`
  26. ModifyTime time.Time `gorm:"column:modify_time" description:"更新时间"`
  27. RegisterTime time.Time `gorm:"column:register_time" description:"注册时间"`
  28. }
  29. func (item *EnglishReportEmail) TableName() string {
  30. return "english_report_email"
  31. }
  32. // EnglishReportEmailSaveReq 保存邮箱请求体
  33. type EnglishReportEmailSaveReq struct {
  34. Id int `description:"邮箱ID, 大于0为编辑"`
  35. CompanyId int `description:"客户ID"`
  36. Name string `description:"客户名称"`
  37. Email string `description:"邮箱地址"`
  38. Mobile string `description:"手机号"`
  39. CountryCode string `description:"区号,86、852、886等"`
  40. BusinessCardUrl string `description:"名片"`
  41. Enabled int `description:"邮箱状态:1:有效,0:禁用"`
  42. }
  43. func (item *EnglishReportEmail) Create() (err error) {
  44. err = global.DmSQL["rddp"].Create(item).Error
  45. return
  46. }
  47. func (item *EnglishReportEmail) Update(cols []string) (err error) {
  48. err = global.DmSQL["rddp"].Select(cols).Updates(item).Error
  49. return
  50. }
  51. // GetEnglishReportEmailById 主键获取邮箱
  52. func GetEnglishReportEmailById(id int) (item *EnglishReportEmail, err error) {
  53. sql := `SELECT * FROM english_report_email WHERE is_deleted = 0 AND id = ? LIMIT 1`
  54. err = global.DmSQL["rddp"].Raw(sql, id).First(&item).Error
  55. return
  56. }
  57. // EnglishReportEmailPageListResp 分页列表响应体
  58. type EnglishReportEmailPageListResp struct {
  59. List []*EnglishReportEmailResp
  60. Paging *paging.PagingItem `description:"分页数据"`
  61. }
  62. // EnglishReportEmailResp 邮箱响应体
  63. type EnglishReportEmailResp struct {
  64. Id int `description:"邮箱ID"`
  65. CompanyId int `description:"客户ID"`
  66. Name string `description:"客户名称"`
  67. Email string `description:"邮箱地址"`
  68. Mobile string `description:"手机号"`
  69. CountryCode string `description:"区号,86、852、886等"`
  70. BusinessCardUrl string `description:"名片"`
  71. AdminName string `description:"创建人姓名"`
  72. CreateTime string `description:"创建时间"`
  73. ViewTotal int `description:"累计点击量"`
  74. Enabled int `description:"邮箱状态:1:有效,0:禁用"`
  75. CompanyName string `description:"公司名称"`
  76. RegisterCompanyName string `description:"注册公司名称"`
  77. Status int `description:"1:正式,2:临时,3:终止"`
  78. LastViewTime time.Time `description:"最后阅读时间"`
  79. IsDeleted int `description:"删除状态:0-正常;1-已删除"`
  80. AdminId int `description:"创建人ID"`
  81. ModifyTime string `description:"更新时间"`
  82. RegisterTime string `description:"注册时间"`
  83. }
  84. // EnglishReportEmailRespItem 邮箱响应体
  85. type EnglishReportEmailRespItem struct {
  86. Id int `description:"邮箱ID"`
  87. Name string `description:"客户名称"`
  88. Email string `description:"邮箱地址"`
  89. Mobile string `description:"手机号"`
  90. CountryCode string `description:"区号,86、852、886等"`
  91. BusinessCardUrl string `description:"名片"`
  92. AdminName string `description:"创建人姓名"`
  93. CreateTime time.Time `description:"创建时间"`
  94. ViewTotal int `description:"累计点击量"`
  95. Enabled int `description:"邮箱状态:1:有效,0:禁用"`
  96. CompanyName string `description:"公司名称"`
  97. RegisterCompanyName string `description:"注册公司名称"`
  98. RegisterTime time.Time `description:"注册时间"`
  99. }
  100. // GetEnglishReportEmailPageList 获取邮箱列表-分页
  101. func GetEnglishReportEmailPageList(condition string, pars []interface{}, order string, startSize, pageSize int) (total int, list []*EnglishReportEmailRespItem, err error) {
  102. //o := orm.NewOrmUsingDB("rddp")
  103. sql := `SELECT a.id,a.name,a.email,a.mobile,a.country_code,a.business_card_url,a.view_total,a.company_id,
  104. a.last_view_time,a.admin_id,a.admin_name,a.create_time,a.modify_time,a.enabled,a.status,a.is_deleted,a.register_time,
  105. b.company_name AS company_name,a.company_name AS register_company_name FROM english_report_email AS a LEFT JOIN
  106. english_company AS b ON a.company_id = b.company_id
  107. WHERE a.is_deleted = 0 `
  108. sql += condition
  109. if order != "" {
  110. sql += order
  111. } else {
  112. sql += ` ORDER BY a.create_time DESC`
  113. }
  114. totalSQl := `SELECT COUNT(1) total FROM (` + sql + `) z`
  115. if err = global.DmSQL["rddp"].Raw(totalSQl, pars...).Scan(&total).Error; err != nil {
  116. return
  117. }
  118. sql += ` LIMIT ?,?`
  119. pars = append(pars, startSize)
  120. pars = append(pars, pageSize)
  121. err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&list).Error
  122. return
  123. }
  124. // GetEnglishReportEmailList 获取邮箱列表
  125. func GetEnglishReportEmailList(condition string, pars []interface{}, order string) (list []*EnglishReportEmail, err error) {
  126. sql := `SELECT * FROM english_report_email WHERE is_deleted = 0`
  127. sql += condition
  128. if order != "" {
  129. sql += order
  130. } else {
  131. sql += ` ORDER BY create_time DESC`
  132. }
  133. err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&list).Error
  134. return
  135. }
  136. // GetEnglishReportEmailByEmail 地址获取邮箱
  137. func GetEnglishReportEmailByEmail(email string) (item *EnglishReportEmailResp, err error) {
  138. sql := `SELECT a.id,a.name,a.email,a.mobile,a.country_code,a.business_card_url,a.view_total,
  139. a.last_view_time,a.admin_id,a.admin_name,a.create_time,a.modify_time,a.enabled,a.status,
  140. b.company_name AS company_name,a.company_name AS register_company_name FROM english_report_email AS a LEFT JOIN
  141. english_company AS b ON a.company_id = b.company_id WHERE a.is_deleted = 0 AND a.email = ? LIMIT 1`
  142. err = global.DmSQL["rddp"].Raw(sql, email).First(&item).Error
  143. return
  144. }
  145. // EnglishReportEmailDelReq 删除邮箱请求体
  146. type EnglishReportEmailDelReq struct {
  147. EmailId int `description:"邮箱ID"`
  148. }
  149. // EnglishReportEmailDelReq 删除邮箱请求体
  150. type EnglishReportEditEnabledReq struct {
  151. EmailId int `description:"邮箱ID"`
  152. Enabled int `description:"1:有效,0:禁用"`
  153. }
  154. // EnglishReportEmailSendReq 群发邮件请求体
  155. type EnglishReportEmailSendReq struct {
  156. ReportId int `description:"报告ID"`
  157. EmailIds string `description:"邮箱IDs"`
  158. Theme string `description:"邮件主题"`
  159. EnPermissions []int `description:"品种权限IDs"`
  160. NoCompanyIds []int `description:"禁止接收邮件的英文客户IDs"`
  161. }
  162. // EnglishReportEmailConf 英文研报邮件配置
  163. type EnglishReportEmailConf struct {
  164. FromAlias string `description:"发信人昵称" json:"from_alias"`
  165. SendAuthGroup string `description:"群发邮件权限组, 英文逗号分隔" json:"send_auth_group"`
  166. }
  167. // GetEnglishCompanyViewPageList 获取联系人点击量列表-分页
  168. func GetEnglishCompanyViewPageList(condition string, pars []interface{}, order string, startSize, pageSize int) (total int, list []*EnglishReportEmail, err error) {
  169. sql := `SELECT * FROM english_report_email WHERE view_total > 0 `
  170. sql += condition
  171. if order != "" {
  172. sql += order
  173. } else {
  174. sql += ` ORDER BY create_time DESC`
  175. }
  176. totalSQl := `SELECT COUNT(1) total FROM (` + sql + `) z`
  177. if err = global.DmSQL["rddp"].Raw(totalSQl, pars...).Scan(&total).Error; err != nil {
  178. return
  179. }
  180. sql += ` LIMIT ?,?`
  181. pars = append(pars, startSize)
  182. pars = append(pars, pageSize)
  183. err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&list).Error
  184. return
  185. }
  186. // MultiCreateEnglishEmail 批量新增英文邮箱/联系人
  187. func MultiCreateEnglishEmail(items []*EnglishReportEmail, logs []*EnglishReportEmailOpLog) (err error) {
  188. tx := global.DmSQL["rddp"].Begin()
  189. defer func() {
  190. if err != nil {
  191. _ = tx.Rollback()
  192. } else {
  193. _ = tx.Commit()
  194. }
  195. }()
  196. // 新增联系人
  197. err = tx.CreateInBatches(items, utils.MultiAddNum).Error
  198. if err != nil {
  199. return
  200. }
  201. // 新增日志
  202. err = tx.CreateInBatches(logs, utils.MultiAddNum).Error
  203. return
  204. }
  205. // EnglishReportEmailResendReq 邮件重发请求体
  206. type EnglishReportEmailResendReq struct {
  207. ReportId int `description:"报告ID"`
  208. SendId int `description:"发送ID, 0表示批量发送全部失败邮件"`
  209. }
  210. // UpdateEnglishEmailEnabledByCompanyId 更新客户下所有联系人状态
  211. func UpdateEnglishEmailEnabledByCompanyId(companyId, enabled int) (err error) {
  212. sql := `UPDATE english_report_email SET enabled = ? WHERE company_id = ?`
  213. err = global.DmSQL["rddp"].Exec(sql, enabled, companyId).Error
  214. return
  215. }
  216. // EnglishReportMoveReq 移动至当前客户请求体
  217. type EnglishReportMoveReq struct {
  218. EmailId int `description:"邮箱ID"`
  219. CompanyId int `description:"公司id"`
  220. }
  221. // GetEnCompanyIdsByKeyword 关键词获取英文客户IDs
  222. func GetEnCompanyIdsByKeyword(keyword string) (companyIds []int, err error) {
  223. sql := `SELECT DISTINCT
  224. a.company_id
  225. FROM
  226. english_report_email AS a
  227. JOIN english_company AS b ON a.company_id = b.company_id AND b.is_deleted = 0
  228. WHERE
  229. a.is_deleted = 0 AND a.status = 1 AND (a.email LIKE ? OR a.mobile LIKE ? OR b.company_name LIKE ?)`
  230. err = global.DmSQL["rddp"].Raw(sql, utils.GetLikeKeyword(keyword), utils.GetLikeKeyword(keyword), utils.GetLikeKeyword(keyword)).Find(&companyIds).Error
  231. return
  232. }