english_report_email.go 12 KB

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