custom.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. package overseas_custom
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/company"
  8. "hongze/hz_crm_api/models/overseas_custom"
  9. "hongze/hz_crm_api/utils"
  10. "time"
  11. )
  12. // @Title 获取海外客户列表数据
  13. // @Description 获取海外客户列表数据
  14. // @Param PageSize query int true "每页数据条数"
  15. // @Param CurrentIndex query int true "当前页页码,从1开始"
  16. // @Param Keywords query string false "关键词:客户名称/社会信用码/联系人手机号/邮箱"
  17. // @Param CompanyStatus query string false "状态:全部,正式,试用,关闭"
  18. // @Param SellerId query int false "销售ID"
  19. // @Param CustomType query int false "1:海外客户,2:隐藏客户"
  20. // @Param SortField query string false "排序字段:ViewTotal,RoadShowTotal,CreateTime"
  21. // @Param SortDesc query int false "1:降序,默认,2:升序"
  22. // @Param OverseasLabel query int false "海外客户试用子标签:1未分类、2 推进、3 跟踪、4 预备、"
  23. // @Success 200 {object} models.EnglishCompanyPageListResp
  24. // @router /custom/list [get]
  25. func (this *OverseasCustomController) CustomList() {
  26. br := new(models.BaseResponse).Init()
  27. br.IsSendEmail = false
  28. defer func() {
  29. this.Data["json"] = br
  30. this.ServeJSON()
  31. }()
  32. sysUser := this.SysUser
  33. if sysUser == nil {
  34. br.Msg = "请登录"
  35. br.ErrMsg = "请登录,SysUser Is Empty"
  36. br.Ret = 408
  37. return
  38. }
  39. pageSize, _ := this.GetInt("PageSize")
  40. currentIndex, _ := this.GetInt("CurrentIndex")
  41. keywords := this.GetString("Keywords", "")
  42. sellerId, _ := this.GetInt("SellerId", 0)
  43. companyStatus := this.GetString("CompanyStatus")
  44. sortField := this.GetString("SortField")
  45. sortDesc, _ := this.GetInt("SortDesc")
  46. overseasLabel, _ := this.GetInt("OverseasLabel", 0)
  47. customType, _ := this.GetInt("CustomType", 0)
  48. var startSize int
  49. if pageSize <= 0 {
  50. pageSize = utils.PageSize20
  51. }
  52. if currentIndex <= 0 {
  53. currentIndex = 1
  54. }
  55. startSize = paging.StartIndex(currentIndex, pageSize)
  56. obj := new(overseas_custom.Custom)
  57. var condition string
  58. var pars []interface{}
  59. if keywords != "" {
  60. k := "%" + keywords + "%"
  61. enCompanyIds, e := models.GetEnCompanyIdsByKeyword(k)
  62. if e != nil {
  63. br.Msg = "获取失败"
  64. br.ErrMsg = "关键词获取英文客户IDs失败, Err: " + e.Error()
  65. return
  66. }
  67. //获取中文客户
  68. companyIds, err := obj.GetCompanyIdsByKeyword(k)
  69. if err != nil {
  70. br.Msg = "获取失败"
  71. br.ErrMsg = "关键词获取客户IDs失败, Err: " + err.Error()
  72. return
  73. }
  74. companyIds = append(companyIds, enCompanyIds...)
  75. if len(companyIds) > 0 {
  76. condition += fmt.Sprintf(` AND m.company_id IN (%s) `, utils.GetOrmInReplace(len(companyIds)))
  77. pars = append(pars, companyIds)
  78. }
  79. }
  80. if sellerId > 0 {
  81. condition += ` AND m.seller_id=? `
  82. pars = append(pars, sellerId)
  83. }
  84. if overseasLabel > 0 {
  85. condition += ` AND m.overseas_label=? `
  86. pars = append(pars, overseasLabel)
  87. }
  88. if customType == 2 {
  89. condition += ` AND m.is_hide=? `
  90. pars = append(pars, 1)
  91. }
  92. total, err := obj.GetCustomListCount(condition, pars, companyStatus)
  93. if err != nil {
  94. br.Msg = "获取失败"
  95. br.ErrMsg = "获取数据总数失败, Err: " + err.Error()
  96. return
  97. }
  98. list, err := obj.GetCustomList(condition, pars, companyStatus, sortField, startSize, pageSize, sortDesc)
  99. if err != nil {
  100. br.Msg = "获取失败"
  101. br.ErrMsg = "获取数据失败, Err: " + err.Error()
  102. return
  103. }
  104. for _, v := range list {
  105. if v.Source == 1 && v.OverseasStatus != "" {
  106. v.CompanyStatus = v.OverseasStatus
  107. }
  108. }
  109. statisticsDataList, err := obj.GetCustomTotal(condition, pars)
  110. if err != nil {
  111. br.Msg = "获取失败"
  112. br.ErrMsg = "获取各状态总数失败, Err: " + err.Error()
  113. return
  114. }
  115. statisticsDataStatusList := make([]*overseas_custom.CustomTotal, 0)
  116. statisticsDataMap := make(map[string]int)
  117. for _, v := range statisticsDataList {
  118. statisticsDataMap[v.CompanyStatus] = v.Total
  119. }
  120. var statusArr = [3]string{"试用", "正式", "关闭"}
  121. for _, v := range statusArr {
  122. item := new(overseas_custom.CustomTotal)
  123. item.CompanyStatus = v
  124. if val, ok := statisticsDataMap[v]; ok {
  125. item.Total = val
  126. }
  127. statisticsDataStatusList = append(statisticsDataStatusList, item)
  128. }
  129. overseasLabelDataList, err := obj.GetCustomOverseasLabelTotal(condition, pars)
  130. if err != nil {
  131. br.Msg = "获取失败"
  132. br.ErrMsg = "获取子标签总数失败, Err: " + err.Error()
  133. return
  134. }
  135. labelDataMap := make(map[int]int)
  136. for _, v := range overseasLabelDataList {
  137. labelDataMap[v.OverseasLabel] = v.Total
  138. }
  139. var labelArr = [4]int{1, 2, 3, 4}
  140. labelList := make([]*overseas_custom.OverseasLabelTotal, 0)
  141. for _, v := range labelArr {
  142. item := new(overseas_custom.OverseasLabelTotal)
  143. item.OverseasLabel = v
  144. if val, ok := labelDataMap[v]; ok {
  145. item.Total = val
  146. }
  147. labelList = append(labelList, item)
  148. }
  149. page := paging.GetPaging(currentIndex, pageSize, total)
  150. resp := new(overseas_custom.CustomListResp)
  151. resp.Paging = page
  152. resp.List = list
  153. resp.StatisticsData = statisticsDataStatusList
  154. resp.OverseasLabelData = labelList
  155. br.Ret = 200
  156. br.Success = true
  157. br.Msg = "获取成功"
  158. br.Data = resp
  159. }
  160. // @Title 客户隐藏
  161. // @Description 客户隐藏
  162. // @Param request body overseas_custom.CustomHideReq true "type json string"
  163. // @Success 200 string "操作成功"
  164. // @router /custom/hide [post]
  165. func (this *OverseasCustomController) CustomHide() {
  166. br := new(models.BaseResponse).Init()
  167. br.IsSendEmail = false
  168. defer func() {
  169. this.Data["json"] = br
  170. this.ServeJSON()
  171. }()
  172. sysUser := this.SysUser
  173. if sysUser == nil {
  174. br.Msg = "请登录"
  175. br.ErrMsg = "请登录,SysUser Is Empty"
  176. br.Ret = 408
  177. return
  178. }
  179. var req overseas_custom.CustomHideReq
  180. if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
  181. br.Msg = "参数解析异常!"
  182. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  183. return
  184. }
  185. if req.CompanyId <= 0 {
  186. br.Msg = "参数错误!"
  187. return
  188. }
  189. //if req.CompanyId > utils.EnCompanyIdStep {
  190. // req.CompanyId = req.CompanyId - utils.EnCompanyIdStep
  191. //}
  192. obj := new(overseas_custom.Custom)
  193. item, err := obj.GetCustomByCompanyId(req.CompanyId)
  194. if err != nil {
  195. if err.Error() == utils.ErrNoRow() {
  196. br.Msg = "隐藏失败,客户信息不存在!"
  197. br.ErrMsg = "隐藏失败,Err:" + err.Error()
  198. return
  199. }
  200. br.Msg = "隐藏失败!"
  201. br.ErrMsg = "隐藏失败,Err:" + err.Error()
  202. return
  203. }
  204. //是否隐藏:0:不隐藏,1:隐藏
  205. var isHide int
  206. if item.IsHide == 1 {
  207. isHide = 0
  208. } else {
  209. isHide = 1
  210. }
  211. if req.CompanyId > 1000000 {
  212. enCompanyObj := new(models.EnglishCompany)
  213. // 更新客户
  214. nowTime := time.Now().Local()
  215. enCompanyObj.CompanyId = req.CompanyId - utils.EnCompanyIdStep
  216. enCompanyObj.IsHide = isHide
  217. enCompanyObj.ModifyTime = nowTime
  218. updateCols := []string{"IsHide", "ModifyTime"}
  219. if err = enCompanyObj.Update(updateCols); err != nil {
  220. br.Msg = "隐藏失败"
  221. br.ErrMsg = "更新英文客户隐藏状态失败, Err:" + err.Error()
  222. return
  223. }
  224. } else {
  225. companyObj := new(company.Company)
  226. companyObj.CompanyId = req.CompanyId
  227. companyObj.IsHide = isHide
  228. updateCols := []string{"IsHide"}
  229. err = companyObj.Update(updateCols)
  230. if err != nil {
  231. br.Msg = "隐藏失败"
  232. br.ErrMsg = "更新客户隐藏状态失败, Err:" + err.Error()
  233. return
  234. }
  235. }
  236. br.Ret = 200
  237. br.Success = true
  238. br.Msg = "隐藏成功"
  239. }
  240. // @Title 客户状态设置
  241. // @Description 客户状态设置
  242. // @Param request body overseas_custom.CustomHideReq true "type json string"
  243. // @Success 200 string "操作成功"
  244. // @router /custom/status_set [post]
  245. func (this *OverseasCustomController) CustomStatusSet() {
  246. br := new(models.BaseResponse).Init()
  247. br.IsSendEmail = false
  248. defer func() {
  249. this.Data["json"] = br
  250. this.ServeJSON()
  251. }()
  252. sysUser := this.SysUser
  253. if sysUser == nil {
  254. br.Msg = "请登录"
  255. br.ErrMsg = "请登录,SysUser Is Empty"
  256. br.Ret = 408
  257. return
  258. }
  259. var req overseas_custom.CustomHideReq
  260. if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
  261. br.Msg = "参数解析异常!"
  262. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  263. return
  264. }
  265. if req.CompanyId <= 0 {
  266. br.Msg = "参数错误!"
  267. return
  268. }
  269. obj := new(overseas_custom.Custom)
  270. item, err := obj.GetCustomByCompanyId(req.CompanyId)
  271. if err != nil {
  272. br.Msg = "隐藏失败!"
  273. br.ErrMsg = "隐藏失败,Err:" + err.Error()
  274. return
  275. }
  276. //是否隐藏:0:不隐藏,1:隐藏
  277. var overseasStatus string
  278. if item.OverseasStatus == "" {
  279. overseasStatus = "正式"
  280. } else {
  281. overseasStatus = ""
  282. }
  283. if req.CompanyId > 1000000 {
  284. enCompanyObj := new(models.EnglishCompany)
  285. // 更新客户
  286. nowTime := time.Now().Local()
  287. enCompanyObj.CompanyId = req.CompanyId - utils.EnCompanyIdStep
  288. enCompanyObj.OverseasStatus = overseasStatus
  289. enCompanyObj.ModifyTime = nowTime
  290. updateCols := []string{"OverseasStatus", "ModifyTime"}
  291. if err = enCompanyObj.Update(updateCols); err != nil {
  292. br.Msg = "隐藏失败"
  293. br.ErrMsg = "更新英文客户转正式状态失败, Err:" + err.Error()
  294. return
  295. }
  296. } else {
  297. companyObj := new(company.Company)
  298. companyObj.CompanyId = req.CompanyId
  299. companyObj.OverseasStatus = overseasStatus
  300. updateCols := []string{"OverseasStatus"}
  301. err = companyObj.Update(updateCols)
  302. if err != nil {
  303. br.Msg = "隐藏失败"
  304. br.ErrMsg = "更新客户转正式状态失败, Err:" + err.Error()
  305. return
  306. }
  307. }
  308. br.Ret = 200
  309. br.Success = true
  310. br.Msg = "操作成功"
  311. }
  312. // @Title 客户子标签设置
  313. // @Description 客户子标签设置
  314. // @Param request body overseas_custom.CustomOverseasLabelSetReq true "type json string"
  315. // @Success 200 string "操作成功"
  316. // @router /custom/overseas_label_set [post]
  317. func (this *OverseasCustomController) CustomOverseasLabelSet() {
  318. br := new(models.BaseResponse).Init()
  319. br.IsSendEmail = false
  320. defer func() {
  321. this.Data["json"] = br
  322. this.ServeJSON()
  323. }()
  324. //海外客户试用子标签:1未分类、2 推进、3 跟踪、4 预备、
  325. sysUser := this.SysUser
  326. if sysUser == nil {
  327. br.Msg = "请登录"
  328. br.ErrMsg = "请登录,SysUser Is Empty"
  329. br.Ret = 408
  330. return
  331. }
  332. var req overseas_custom.CustomOverseasLabelSetReq
  333. if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
  334. br.Msg = "参数解析异常!"
  335. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  336. return
  337. }
  338. if req.CompanyId <= 0 {
  339. br.Msg = "参数错误!"
  340. return
  341. }
  342. if req.CompanyId > 1000000 {
  343. enCompanyObj := new(models.EnglishCompany)
  344. // 更新客户
  345. nowTime := time.Now().Local()
  346. enCompanyObj.CompanyId = req.CompanyId - utils.EnCompanyIdStep
  347. enCompanyObj.OverseasLabel = req.OverseasLabel
  348. enCompanyObj.ModifyTime = nowTime
  349. updateCols := []string{"OverseasLabel", "ModifyTime"}
  350. if err := enCompanyObj.Update(updateCols); err != nil {
  351. br.Msg = "设置失败"
  352. br.ErrMsg = "设置英文客户标签状态失败, Err:" + err.Error()
  353. return
  354. }
  355. } else {
  356. companyObj := new(company.CompanyProduct)
  357. companyObj.CompanyId = req.CompanyId
  358. companyObj.OverseasLabel = req.OverseasLabel
  359. updateCols := []string{"OverseasLabel"}
  360. err := companyObj.Update(updateCols)
  361. if err != nil {
  362. br.Msg = "设置失败"
  363. br.ErrMsg = "设置客户标签状态失败, Err:" + err.Error()
  364. return
  365. }
  366. }
  367. br.Ret = 200
  368. br.Success = true
  369. br.Msg = "设置成功"
  370. }