custom.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. package overseas_custom
  2. import (
  3. "fmt"
  4. "github.com/beego/beego/v2/client/orm"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "hongze/hz_crm_api/utils"
  7. )
  8. type Custom struct {
  9. CompanyId int `description:"客户id"`
  10. CompanyName string `description:"客户名称"`
  11. Nation string `description:"国家"`
  12. SellerId int `description:"销售id"`
  13. SellerName string `description:"销售名称"`
  14. CompanyStatus string `description:"状态"`
  15. ViewTotal int `description:"累计点击量"`
  16. RoadShowTotal int `description:"路演数量"`
  17. LastViewTime string `description:"最近阅读时间"`
  18. CreateTime string `description:"创建时间"`
  19. IsHide int `description:"是否隐藏:0:不隐藏,1:隐藏"`
  20. OverseasStatus string `description:"海外客户状态:'正式','试用','关闭'"`
  21. Source int `description:"来源:1,英文客户,2:客户列表"`
  22. OverseasLabel int `description:"海外客户试用子标签:1未分类、2 推进、3 跟踪、4 预备、"`
  23. }
  24. type CustomTotal struct {
  25. CompanyStatus string `description:"状态"`
  26. Total int `description:"总数"`
  27. }
  28. func (obj *Custom) GetCustomTotal(condition string, pars []interface{}) (list []*CustomTotal, err error) {
  29. o := orm.NewOrm()
  30. sql := ``
  31. var databaseName string
  32. if utils.RunMode == "debug" {
  33. databaseName = "test_v2_hongze_rddp"
  34. } else {
  35. databaseName = "hongze_rddp"
  36. }
  37. sql = `SELECT company_status,COUNT(1) AS total,is_hide FROM (
  38. SELECT a.company_id,a.company_name,a.nation,b.seller_id,b.seller_name,
  39. CASE b.status
  40. WHEN '正式' THEN '正式'
  41. WHEN '永续' THEN '正式'
  42. WHEN '试用' THEN '试用'
  43. ELSE '关闭' END AS company_status,
  44. b.view_total,b.road_show_total,a.created_time AS create_time,b.last_view_time,a.is_hide,a.overseas_status,b.overseas_label
  45. FROM company AS a
  46. INNER JOIN company_product AS b ON a.company_id=b.company_id
  47. INNER JOIN overseas_custom_seller AS c ON b.seller_id=c.seller_id
  48. WHERE b.is_overseas = 0
  49. UNION ALL
  50. SELECT t.company_id+10000000,t.company_name,t.nation,t.seller_id,t.seller_name,
  51. CASE t.enabled
  52. WHEN 0 THEN '关闭'
  53. ELSE '试用' END AS company_status,
  54. t.view_total,0 AS road_show_total,t.create_time,'' AS last_view_time,t.is_hide,t.overseas_status,t.overseas_label
  55. FROM %s.english_company AS t
  56. INNER JOIN overseas_custom_seller AS n ON t.seller_id=n.seller_id
  57. WHERE 1=1 AND t.is_deleted=0
  58. )AS m
  59. WHERE 1=1
  60. `
  61. if condition != "" {
  62. sql += condition
  63. }
  64. sql += ` GROUP BY m.company_status `
  65. sql = fmt.Sprintf(sql, databaseName)
  66. _, err = o.Raw(sql, pars).QueryRows(&list)
  67. return
  68. }
  69. func (obj *Custom) GetCustomOverseasStatusTotal(condition string, pars []interface{}) (total int, err error) {
  70. o := orm.NewOrm()
  71. sql := ``
  72. var databaseName string
  73. if utils.RunMode == "debug" {
  74. databaseName = "test_v2_hongze_rddp"
  75. } else {
  76. databaseName = "hongze_rddp"
  77. }
  78. sql = `SELECT COUNT(1) AS total FROM (
  79. SELECT a.company_id,a.company_name,a.nation,b.seller_id,b.seller_name,
  80. CASE b.status
  81. WHEN '正式' THEN '正式'
  82. WHEN '永续' THEN '正式'
  83. WHEN '试用' THEN '试用'
  84. ELSE '关闭' END AS company_status,
  85. b.view_total,b.road_show_total,a.created_time AS create_time,b.last_view_time,a.is_hide,a.overseas_status,b.overseas_label
  86. FROM company AS a
  87. INNER JOIN company_product AS b ON a.company_id=b.company_id
  88. INNER JOIN overseas_custom_seller AS c ON b.seller_id=c.seller_id
  89. WHERE b.is_overseas = 0
  90. UNION ALL
  91. SELECT t.company_id+10000000,t.company_name,t.nation,t.seller_id,t.seller_name,
  92. CASE t.enabled
  93. WHEN 0 THEN '关闭'
  94. ELSE '试用' END AS company_status,
  95. t.view_total,0 AS road_show_total,t.create_time,'' AS last_view_time,t.is_hide,t.overseas_status,t.overseas_label
  96. FROM %s.english_company AS t
  97. INNER JOIN overseas_custom_seller AS n ON t.seller_id=n.seller_id
  98. WHERE 1=1 AND t.is_deleted=0
  99. )AS m
  100. WHERE 1=1
  101. AND m.is_hide=0
  102. AND m. overseas_status='正式' `
  103. if condition != "" {
  104. sql += condition
  105. }
  106. sql += ` GROUP BY m.overseas_status `
  107. sql = fmt.Sprintf(sql, databaseName)
  108. err = o.Raw(sql, pars).QueryRow(&total)
  109. return
  110. }
  111. // GetCompanyIdsByKeyword 关键词获取客户IDs
  112. func (obj *Custom) GetCompanyIdsByKeyword(keyword string) (companyIds []int, err error) {
  113. o := orm.NewOrm()
  114. sql := ` SELECT DISTINCT b.company_id FROM wx_user AS a
  115. INNER JOIN company AS b ON a.company_id=b.company_id
  116. WHERE 1=1 AND (a.email LIKE ? OR a.mobile LIKE ? OR b.company_name LIKE ? OR b.credit_code LIKE ? ) `
  117. _, err = o.Raw(sql, keyword, keyword, keyword, keyword).QueryRows(&companyIds)
  118. return
  119. }
  120. func (obj *Custom) GetCustomListCount(condition string, pars []interface{}, companyStatus string) (count int, err error) {
  121. o := orm.NewOrm()
  122. sql := ``
  123. var databaseName string
  124. if utils.RunMode == "debug" {
  125. databaseName = "test_v2_hongze_rddp"
  126. } else {
  127. databaseName = "hongze_rddp"
  128. }
  129. sql = `SELECT COUNT(1) AS count FROM (
  130. SELECT a.company_id,a.company_name,a.nation,b.seller_id,b.seller_name,
  131. CASE b.status
  132. WHEN '正式' THEN '正式'
  133. WHEN '永续' THEN '正式'
  134. WHEN '试用' THEN '试用'
  135. ELSE '关闭' END AS company_status,
  136. b.view_total,b.road_show_total,a.created_time AS create_time,b.last_view_time,a.is_hide,a.overseas_status,b.overseas_label
  137. FROM company AS a
  138. INNER JOIN company_product AS b ON a.company_id=b.company_id
  139. INNER JOIN overseas_custom_seller AS c ON b.seller_id=c.seller_id
  140. WHERE b.is_overseas = 0`
  141. if companyStatus == "正式" {
  142. sql += ` AND b.status IN('正式','永续') `
  143. } else if companyStatus == "试用" {
  144. sql += ` AND b.status='试用' `
  145. } else if companyStatus == "关闭" {
  146. sql += ` AND b.status IN('冻结','流失','关闭') `
  147. }
  148. sql += `
  149. UNION ALL
  150. SELECT t.company_id+10000000,t.company_name,t.nation,t.seller_id,t.seller_name,
  151. CASE t.enabled
  152. WHEN 0 THEN '关闭'
  153. ELSE '试用' END AS company_status,
  154. t.view_total,0 AS road_show_total,t.create_time,'' AS last_view_time,t.is_hide,t.overseas_status,t.overseas_label
  155. FROM %s.english_company AS t
  156. INNER JOIN overseas_custom_seller AS n ON t.seller_id=n.seller_id
  157. WHERE 1=1 AND t.is_deleted=0 `
  158. if companyStatus == "试用" {
  159. sql += ` AND t.enabled IN(1,2)`
  160. } else if companyStatus == "禁用" {
  161. sql += ` AND t.enabled = 0 `
  162. }
  163. sql += ` )AS m
  164. WHERE 1=1 `
  165. if condition != "" {
  166. sql += condition
  167. }
  168. sql = fmt.Sprintf(sql, databaseName)
  169. err = o.Raw(sql, pars).QueryRow(&count)
  170. return
  171. }
  172. func (obj *Custom) GetCustomList(condition string, pars []interface{}, companyStatus, sortField string, startSize, pageSize, sortDesc int) (list []*Custom, err error) {
  173. o := orm.NewOrm()
  174. sql := ``
  175. var databaseName string
  176. if utils.RunMode == "debug" {
  177. databaseName = "test_v2_hongze_rddp"
  178. } else {
  179. databaseName = "hongze_rddp"
  180. }
  181. sql = `SELECT * FROM (
  182. SELECT a.company_id,a.company_name,a.nation,b.seller_id,b.seller_name,
  183. CASE b.status
  184. WHEN '正式' THEN '正式'
  185. WHEN '永续' THEN '正式'
  186. WHEN '试用' THEN '试用'
  187. ELSE '关闭' END AS company_status,
  188. b.view_total,b.road_show_total,a.created_time AS create_time,b.last_view_time,a.is_hide,a.overseas_status,
  189. 2 AS source,b.overseas_label
  190. FROM company AS a
  191. INNER JOIN company_product AS b ON a.company_id=b.company_id
  192. INNER JOIN overseas_custom_seller AS c ON b.seller_id=c.seller_id
  193. WHERE b.product_id=1 AND b.is_overseas = 0`
  194. if companyStatus == "正式" {
  195. sql += ` AND b.status IN('正式','永续') `
  196. } else if companyStatus == "试用" {
  197. sql += ` AND b.status='试用' `
  198. } else if companyStatus == "关闭" {
  199. sql += ` AND b.status IN('冻结','流失','关闭') `
  200. }
  201. sql += `
  202. UNION ALL
  203. SELECT t.company_id+10000000,t.company_name,t.nation,t.seller_id,t.seller_name,
  204. CASE t.enabled
  205. WHEN 0 THEN '关闭'
  206. ELSE '试用' END AS company_status,
  207. t.view_total,t.road_show_total,t.create_time,t.last_view_time,t.is_hide,t.overseas_status,
  208. 1 AS source,t.overseas_label
  209. FROM %s.english_company AS t
  210. INNER JOIN overseas_custom_seller AS n ON t.seller_id=n.seller_id
  211. WHERE 1=1 AND t.is_deleted=0 `
  212. if companyStatus == "试用" {
  213. sql += ` AND t.enabled IN(1,2)`
  214. } else if companyStatus == "禁用" {
  215. sql += ` AND t.enabled = 0 `
  216. }
  217. sql += ` )AS m WHERE 1=1 `
  218. if condition != "" {
  219. sql += condition
  220. }
  221. var sortFieldStr, sortDescStr string
  222. if sortField != "" {
  223. if sortField == "ViewTotal" {
  224. sortFieldStr = "view_total"
  225. } else if sortField == "RoadShowTotal" {
  226. sortFieldStr = "road_show_total"
  227. } else if sortField == "CreateTime" {
  228. sortFieldStr = "create_time"
  229. } else if sortField == "LastViewTime" {
  230. sortFieldStr = "last_view_time"
  231. }
  232. }
  233. if sortDesc == 1 {
  234. sortDescStr = "DESC"
  235. } else {
  236. sortDescStr = "ASC"
  237. }
  238. sql += ` ORDER BY %s %s`
  239. sql += ` LIMIT ?,? `
  240. sql = fmt.Sprintf(sql, databaseName, sortFieldStr, sortDescStr)
  241. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
  242. return
  243. }
  244. type CustomListResp struct {
  245. Paging *paging.PagingItem
  246. List []*Custom
  247. }
  248. type CustomHideReq struct {
  249. CompanyId int `description:"客户ID"`
  250. }
  251. func (obj *Custom) GetCustomByCompanyId(companyId int) (item *Custom, err error) {
  252. o := orm.NewOrm()
  253. sql := ``
  254. var databaseName string
  255. if utils.RunMode == "debug" {
  256. databaseName = "test_v2_hongze_rddp"
  257. } else {
  258. databaseName = "hongze_rddp"
  259. }
  260. //if companyId > utils.EnCompanyIdStep {
  261. // companyId = companyId - utils.EnCompanyIdStep
  262. //}
  263. sql = `SELECT * FROM (
  264. SELECT a.company_id,a.company_name,a.nation,b.seller_id,b.seller_name,
  265. CASE b.status
  266. WHEN '正式' THEN '正式'
  267. WHEN '永续' THEN '正式'
  268. WHEN '试用' THEN '试用'
  269. ELSE '关闭' END AS company_status,
  270. b.view_total,b.road_show_total,a.created_time AS create_time,b.last_view_time,a.is_hide,a.overseas_status
  271. FROM company AS a
  272. INNER JOIN company_product AS b ON a.company_id=b.company_id
  273. INNER JOIN overseas_custom_seller AS c ON b.seller_id=c.seller_id
  274. WHERE b.is_overseas = 0`
  275. sql += ` UNION ALL
  276. SELECT t.company_id+10000000,t.company_name,t.nation,t.seller_id,t.seller_name,
  277. CASE t.enabled
  278. WHEN 0 THEN '关闭'
  279. ELSE '试用' END AS company_status,
  280. t.view_total,0 AS road_show_total,t.create_time,'' AS last_view_time,t.is_hide,t.overseas_status
  281. FROM %s.english_company AS t
  282. INNER JOIN overseas_custom_seller AS n ON t.seller_id=n.seller_id
  283. WHERE 1=1 `
  284. sql += ` )AS m WHERE 1=1 `
  285. sql += ` AND m.company_id=? `
  286. sql = fmt.Sprintf(sql, databaseName)
  287. err = o.Raw(sql, companyId).QueryRow(&item)
  288. return
  289. }
  290. type OverseasLabelTotal struct {
  291. OverseasLabel int `description:"海外客户试用子标签:1未分类、2 推进、3 跟踪、4 预备、"`
  292. Total int `description:"总数"`
  293. }
  294. func (obj *Custom) GetCustomOverseasLabelTotal(condition string, pars []interface{}) (list []*OverseasLabelTotal, err error) {
  295. o := orm.NewOrm()
  296. sql := ``
  297. var databaseName string
  298. if utils.RunMode == "debug" {
  299. databaseName = "test_v2_hongze_rddp"
  300. } else {
  301. databaseName = "hongze_rddp"
  302. }
  303. sql = `SELECT overseas_label,COUNT(1) AS total FROM (
  304. SELECT a.company_id,a.company_name,a.nation,b.seller_id,b.seller_name,
  305. CASE b.status
  306. WHEN '正式' THEN '正式'
  307. WHEN '永续' THEN '正式'
  308. WHEN '试用' THEN '试用'
  309. ELSE '关闭' END AS company_status,
  310. b.view_total,b.road_show_total,a.created_time AS create_time,b.last_view_time,a.is_hide,a.overseas_status,b.overseas_label
  311. FROM company AS a
  312. INNER JOIN company_product AS b ON a.company_id=b.company_id
  313. INNER JOIN overseas_custom_seller AS c ON b.seller_id=c.seller_id
  314. WHERE b.is_overseas = 0
  315. UNION ALL
  316. SELECT t.company_id+10000000,t.company_name,t.nation,t.seller_id,t.seller_name,
  317. CASE t.enabled
  318. WHEN 0 THEN '关闭'
  319. ELSE '试用' END AS company_status,
  320. t.view_total,0 AS road_show_total,t.create_time,'' AS last_view_time,t.is_hide,t.overseas_status,t.overseas_label
  321. FROM %s.english_company AS t
  322. INNER JOIN overseas_custom_seller AS n ON t.seller_id=n.seller_id
  323. WHERE 1=1 AND t.is_deleted=0
  324. )AS m
  325. WHERE 1=1
  326. `
  327. if condition != "" {
  328. sql += condition
  329. }
  330. sql += ` GROUP BY m.overseas_label `
  331. sql = fmt.Sprintf(sql, databaseName)
  332. _, err = o.Raw(sql, pars).QueryRows(&list)
  333. return
  334. }
  335. type CustomOverseasLabelSetReq struct {
  336. CompanyId int `description:"客户ID"`
  337. OverseasLabel int `description:"海外客户试用子标签:1未分类、2 推进、3 跟踪、4 预备、"`
  338. }