company_share.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736
  1. package controllers
  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/system"
  9. "hongze/hz_crm_api/services"
  10. "hongze/hz_crm_api/utils"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. // @Title 设置共享客户
  16. // @Description 设置共享客户接口
  17. // @Param request body company.CompanyShareReq true "type json string"
  18. // @Success Ret=200 设置成功
  19. // @router /share [post]
  20. func (this *CompanyController) CompanyShare() {
  21. br := new(models.BaseResponse).Init()
  22. defer func() {
  23. this.Data["json"] = br
  24. this.ServeJSON()
  25. }()
  26. sysUser := this.SysUser
  27. if sysUser == nil {
  28. br.Msg = "请登录"
  29. br.ErrMsg = "请登录,SysUser Is Empty"
  30. br.Ret = 408
  31. return
  32. }
  33. var req company.CompanyShareReq
  34. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  35. if err != nil {
  36. br.Msg = "参数解析异常!"
  37. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  38. return
  39. }
  40. if req.CompanyId <= 0 {
  41. br.Msg = "参数异常!"
  42. br.ErrMsg = "CompanyId:" + strconv.Itoa(req.CompanyId)
  43. return
  44. }
  45. if req.IsShare < 0 {
  46. br.Msg = "参数异常!"
  47. br.ErrMsg = "IsShare:" + strconv.Itoa(req.IsShare)
  48. return
  49. }
  50. //查询该客户
  51. companyItem, err := company.GetCompanyById(req.CompanyId)
  52. if err != nil {
  53. br.Msg = "查找客户失败"
  54. br.ErrMsg = "查找客户失败,Err:" + err.Error()
  55. return
  56. }
  57. //待更新字段
  58. updateCol := make([]string, 0)
  59. companyItem.IsShare = req.IsShare
  60. updateCol = append(updateCol, "IsShare")
  61. if req.IsShare == 0 {
  62. companyItem.ShareSeller = ""
  63. companyItem.ShareSellerId = 0
  64. updateCol = append(updateCol, "ShareSeller", "ShareSellerId")
  65. }
  66. err = companyItem.Update(updateCol)
  67. if err != nil {
  68. br.Msg = "修改客户信息失败"
  69. br.ErrMsg = "修改客户信息失败,Err:" + err.Error()
  70. return
  71. }
  72. //新增操作记录
  73. //{
  74. // remark := "移动到:" + seller.RealName
  75. // operation := "move_seller"
  76. // services.AddCompanyOperationRecord(req.CompanyId, seller.AdminId, sysUser.AdminId, productId, sysUser.AdminId, cp.CompanyName,
  77. // cp.ProductName, sysUser.RealName, remark, operation, "", sysUser.RealName, "", cp.Status)
  78. //}
  79. br.Ret = 200
  80. br.Success = true
  81. br.Msg = "设置成功"
  82. }
  83. // @Title 共享客户列表
  84. // @Description 共享客户列表接口
  85. // @Param SellerId query string false "选择的销售id"
  86. // @Param Keyword query string true "搜索关键词"
  87. // @Param ListParam query int false "筛选字段参数,用来筛选的字段, 枚举值:0:全部 、 1:已分配 、 2:未分配 "
  88. // @Param SortParam query string false "排序字段参数,用来排序的字段, 枚举值:'viewTotal':总阅读次数 、 'viewTime':阅读时间 、 'roadShowTotal':累计路演次数 、`expireDay:到期时间` 、 `createTime:创建时间` 、 'formalTime': 转正时间 、 'freezeTime':冻结时间 、'lossTime':流失时间 、'tryOutDay':试用天数"
  89. // @Param SortType query string true "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
  90. // @Param PageSize query int true "每页数据条数"
  91. // @Param CurrentIndex query int true "当前页页码,从1开始"
  92. // @Success Ret=200 设置成功
  93. // @router /share/list [get]
  94. func (this *CompanyController) CompanyShareList() {
  95. br := new(models.BaseResponse).Init()
  96. defer func() {
  97. this.Data["json"] = br
  98. this.ServeJSON()
  99. }()
  100. sysUser := this.SysUser
  101. if sysUser == nil {
  102. br.Msg = "请登录"
  103. br.ErrMsg = "请登录,SysUser Is Empty"
  104. br.Ret = 408
  105. return
  106. }
  107. pageSize, _ := this.GetInt("PageSize")
  108. currentIndex, _ := this.GetInt("CurrentIndex")
  109. sellerIds := this.GetString("SellerId")
  110. keyword := this.GetString("Keyword")
  111. //排序参数
  112. sortParam := this.GetString("SortParam")
  113. listParam, _ := this.GetInt("ListParam")
  114. sortType := this.GetString("SortType")
  115. var total int
  116. page := paging.GetPaging(currentIndex, pageSize, total)
  117. var startSize int
  118. if pageSize <= 0 {
  119. pageSize = utils.PageSize20
  120. }
  121. if currentIndex <= 0 {
  122. currentIndex = 1
  123. }
  124. startSize = paging.StartIndex(currentIndex, pageSize)
  125. var condition string
  126. var pars []interface{}
  127. if keyword != "" {
  128. companyIdStr, err := company.GetCompanyIdByKeyWord(keyword)
  129. if err != nil {
  130. br.Msg = "获取客户信息失败"
  131. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  132. return
  133. }
  134. if companyIdStr != "" {
  135. condition += ` AND (a.company_name LIKE '%` + keyword + `%' OR a.credit_code LIKE '%` + keyword + `%' OR a.company_id IN(` + companyIdStr + `)) `
  136. } else {
  137. condition += ` AND (a.company_name LIKE '%` + keyword + `%' OR a.credit_code LIKE '%` + keyword + `%' ) `
  138. }
  139. }
  140. roleTypeCode := sysUser.RoleTypeCode
  141. productId := services.GetProductId(roleTypeCode)
  142. //权限控制
  143. {
  144. //如果不是超级管理员或者财务
  145. if roleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && roleTypeCode != utils.ROLE_TYPE_CODE_FINANCE {
  146. //如果是部门管理员
  147. if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
  148. condition += ` AND b.product_id=? `
  149. pars = append(pars, productId)
  150. } else {
  151. condition += ` AND b.product_id=? `
  152. pars = append(pars, productId)
  153. }
  154. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && sysUser.AdminId != 66 && sysUser.AdminId != 15 {
  155. condition += ` AND a.share_seller_id=? `
  156. pars = append(pars, sysUser.AdminId)
  157. }
  158. }
  159. }
  160. if listParam == 1 {
  161. condition += ` AND a.share_seller <> '' AND a.is_share=1 `
  162. } else if listParam == 2 {
  163. condition += ` AND a.share_seller = '' AND a.is_share=1 `
  164. } else {
  165. condition += ` AND a.is_share=1 `
  166. }
  167. if sellerIds != "" {
  168. condition += ` AND a.share_seller_id IN (` + sellerIds + `) `
  169. }
  170. total, err := company.GetShareCompanyListCount(condition, pars)
  171. if err != nil {
  172. br.Msg = "获取失败"
  173. br.ErrMsg = "获取数据总数失败,Err:" + err.Error()
  174. return
  175. }
  176. sortStr := ``
  177. if sortParam != "" && sortType != "" {
  178. if sortParam == "expireDay" {
  179. if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
  180. if sortType == "asc" {
  181. sortStr = " ORDER BY min_end_date"
  182. } else {
  183. sortStr = " ORDER BY max_end_date"
  184. }
  185. } else {
  186. sortStr = " ORDER BY b.end_date "
  187. }
  188. } else if sortParam == "createTime" {
  189. sortStr = " ORDER BY a.created_time "
  190. } else if sortParam == "viewTotal" {
  191. if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
  192. sortStr = " ORDER BY all_view_total"
  193. } else {
  194. sortStr = " ORDER BY b.view_total "
  195. }
  196. } else if sortParam == "viewTime" {
  197. if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
  198. if sortType == "asc" {
  199. sortStr = " ORDER BY min_last_view_time"
  200. } else {
  201. sortStr = " ORDER BY max_last_view_time"
  202. }
  203. } else {
  204. sortStr = " ORDER BY b.last_view_time "
  205. }
  206. } else if sortParam == "roadShowTotal" {
  207. sortStr = " ORDER BY b.road_show_total "
  208. } else if sortParam == "formalTime" {
  209. sortStr = " ORDER BY b.formal_time "
  210. } else if sortParam == "freezeTime" {
  211. sortStr = " ORDER BY b.freeze_time "
  212. } else if sortParam == "lossTime" {
  213. sortStr = " ORDER BY b.loss_time "
  214. } else if sortParam == "todoCreateTime" {
  215. sortStr = " ORDER BY b.todo_create_time "
  216. } else if sortParam == "todoApproveTime" {
  217. sortStr = " ORDER BY b.todo_approve_time "
  218. } else if sortParam == "tryOutDay" {
  219. if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
  220. sortStr = " ORDER BY all_try_out_day_total "
  221. } else {
  222. sortStr = " ORDER BY b.try_out_day_total "
  223. }
  224. } else if sortParam == "lastServiceTime" {
  225. // 最新服务时间
  226. sortStr = ` ORDER BY last_service_time `
  227. } else if sortParam == "serviceTimes" {
  228. // 服务次数
  229. sortStr = ` ORDER BY service_times `
  230. } else {
  231. br.Msg = "获取失败"
  232. br.ErrMsg = "排序字段传入数据异常:" + sortParam
  233. return
  234. }
  235. sortStr += fmt.Sprintf(` %s`, sortType)
  236. } else {
  237. if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
  238. sortStr = " ORDER BY sort_status asc, all_view_total desc, a.created_time "
  239. } else {
  240. sortStr = " ORDER BY sort_status asc, b.view_total desc, a.created_time "
  241. }
  242. sortStr += " DESC "
  243. }
  244. list, err := company.GetShareCompanyList(condition, sortStr, pars, startSize, pageSize)
  245. if err != nil {
  246. br.Msg = "获取失败"
  247. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  248. return
  249. }
  250. //企业用户数组切片
  251. companyIds := make([]int, 0)
  252. companyIdSlice := make([]string, 0)
  253. for _, v := range list {
  254. companyIds = append(companyIds, v.CompanyId)
  255. companyIdSlice = append(companyIdSlice, strconv.Itoa(v.CompanyId))
  256. }
  257. //企业用户产品开通数
  258. companyIdStr := strings.Join(companyIdSlice, ",")
  259. companyProductTotalList, _ := company.GetCountProductByCompanyIds(companyIdStr)
  260. companyProductTotalMap := make(map[int]*company.CompanyProductTotalSlice)
  261. for _, companyProductTotal := range companyProductTotalList {
  262. companyProductTotalMap[companyProductTotal.CompanyId] = companyProductTotal
  263. }
  264. lenList := len(list)
  265. // 客户产品详细信息
  266. companyProductMap := make(map[string]*company.CompanyProduct)
  267. var companyProductCondition string
  268. var companyProductPars []interface{}
  269. companyProductList, err := company.GetCompanyProductsByCompanyIds(companyIdStr, companyProductCondition, companyProductPars)
  270. if err != nil {
  271. br.Msg = "获取失败"
  272. br.ErrMsg = "获取客户产品数据失败,Err:" + err.Error()
  273. return
  274. }
  275. for _, companyProduct := range companyProductList {
  276. key := fmt.Sprint(companyProduct.CompanyId, "_", companyProduct.ProductId)
  277. companyProductMap[key] = companyProduct
  278. }
  279. // 查询当前销售是否有领取客户的权限
  280. receiveEnabled, _ := services.CheckCompanyReceiveButton(sysUser.AdminId)
  281. for i := 0; i < lenList; i++ {
  282. item := list[i]
  283. //校验该客户是否存在多个产品,如果是,那么代表是共享客户
  284. if companyProductTotal, ok := companyProductTotalMap[int(item.CompanyId)]; ok {
  285. if companyProductTotal.Total > 1 {
  286. list[i].IsShared = true
  287. }
  288. }
  289. var expireDay string
  290. itemStatus := item.Status
  291. if itemStatus != "" {
  292. if !strings.Contains(item.Status, "/") {
  293. if itemStatus == utils.COMPANY_STATUS_FOREVER { //永续
  294. expireDay = "-"
  295. } else if itemStatus == utils.COMPANY_STATUS_TRY_OUT || itemStatus == utils.COMPANY_STATUS_FORMAL { //试用/正式
  296. if item.StartDate != "" && item.EndDate != "" {
  297. endDateTime, _ := time.Parse(utils.FormatDate, item.EndDate)
  298. endDateTime = endDateTime.AddDate(0, 0, 1)
  299. sub := endDateTime.Sub(time.Now())
  300. if sub < 0 {
  301. sub = 0
  302. }
  303. expireDay = fmt.Sprintf("%v", int(sub.Hours()/24))
  304. } else {
  305. expireDay = "-"
  306. }
  307. } else if itemStatus == utils.COMPANY_STATUS_LOSE {
  308. expireDay = "-"
  309. } else if itemStatus == utils.COMPANY_STATUS_FREEZE {
  310. if item.StartDate != "" && item.EndDate != "" {
  311. endDateTime, _ := time.Parse(utils.FormatDate, item.EndDate)
  312. endDateTime = endDateTime.AddDate(0, 0, 0)
  313. sub := endDateTime.Sub(time.Now())
  314. if sub < 0 {
  315. sub = 0
  316. }
  317. expireDay = fmt.Sprintf("%v", int(sub.Hours()/24))
  318. } else {
  319. expireDay = "-"
  320. }
  321. } else {
  322. expireDay = "-"
  323. }
  324. } else {
  325. tmpStatusArr := strings.Split(item.Status, "/")
  326. ficcStatus := tmpStatusArr[0]
  327. raiStatus := tmpStatusArr[1]
  328. var ficcEndDate, tryEndDate string
  329. var ficcExpireDay, tryExpireDay string
  330. if item.EndDate != "" {
  331. endDateArr := strings.Split(item.EndDate, "/")
  332. if len(endDateArr) == 1 {
  333. ficcEndDate = endDateArr[0]
  334. } else if len(endDateArr) > 1 {
  335. ficcEndDate = endDateArr[0]
  336. tryEndDate = endDateArr[1]
  337. }
  338. if ficcStatus == utils.COMPANY_STATUS_FOREVER { //永续
  339. ficcExpireDay = "-"
  340. } else if ficcStatus == utils.COMPANY_STATUS_TRY_OUT || ficcStatus == utils.COMPANY_STATUS_FORMAL { //试用/正式
  341. if ficcEndDate != "" {
  342. endDateTime, _ := time.Parse(utils.FormatDate, ficcEndDate)
  343. endDateTime = endDateTime.AddDate(0, 0, 1)
  344. sub := endDateTime.Sub(time.Now())
  345. if sub < 0 {
  346. sub = 0
  347. }
  348. ficcExpireDay = fmt.Sprintf("%v", int(sub.Hours()/24))
  349. } else {
  350. ficcExpireDay = "-"
  351. }
  352. } else if ficcStatus == utils.COMPANY_STATUS_LOSE { //流失
  353. ficcExpireDay = "-"
  354. } else if ficcStatus == utils.COMPANY_STATUS_FREEZE { //冻结
  355. if item.StartDate != "" && item.EndDate != "" {
  356. endDateTime, _ := time.Parse(utils.FormatDate, ficcEndDate)
  357. endDateTime = endDateTime.AddDate(0, 0, 0)
  358. sub := endDateTime.Sub(time.Now())
  359. if sub < 0 {
  360. sub = 0
  361. }
  362. ficcExpireDay = fmt.Sprintf("%v", int(sub.Hours()/24))
  363. } else {
  364. ficcExpireDay = "-"
  365. }
  366. } else {
  367. ficcExpireDay = "-"
  368. }
  369. if raiStatus == utils.COMPANY_STATUS_FOREVER { //永续
  370. tryExpireDay = "-"
  371. } else if raiStatus == utils.COMPANY_STATUS_TRY_OUT || raiStatus == utils.COMPANY_STATUS_FORMAL { //试用/正式
  372. if tryEndDate != "" {
  373. endDateTime, _ := time.Parse(utils.FormatDate, tryEndDate)
  374. endDateTime = endDateTime.AddDate(0, 0, 1)
  375. sub := endDateTime.Sub(time.Now())
  376. if sub < 0 {
  377. sub = 0
  378. }
  379. tryExpireDay = fmt.Sprintf("%v", int(sub.Hours()/24))
  380. } else {
  381. tryExpireDay = "-"
  382. }
  383. } else if raiStatus == utils.COMPANY_STATUS_LOSE { //流失
  384. tryExpireDay = "-"
  385. } else if raiStatus == utils.COMPANY_STATUS_FREEZE { //冻结
  386. if item.StartDate != "" && item.EndDate != "" {
  387. endDateTime, _ := time.Parse(utils.FormatDate, tryEndDate)
  388. endDateTime = endDateTime.AddDate(0, 0, 0)
  389. sub := endDateTime.Sub(time.Now())
  390. if sub < 0 {
  391. sub = 0
  392. }
  393. tryExpireDay = fmt.Sprintf("%v", int(sub.Hours()/24))
  394. } else {
  395. tryExpireDay = "-"
  396. }
  397. } else {
  398. tryExpireDay = "-"
  399. }
  400. }
  401. expireDay = ficcExpireDay + "/" + tryExpireDay
  402. }
  403. }
  404. list[i].ExpireDay = expireDay
  405. //按钮显示控制
  406. btnItem := new(company.ButtonPermission)
  407. if item.CompanyId != 1 {
  408. *btnItem = services.GetCompanyPermissionButton(roleTypeCode, itemStatus, item.GroupIds, item.GroupIds, item.GroupId, sysUser.GroupId, item.SellerId, sysUser.AdminId, sysUser.Authority, item.ProductId, item.ShareSellerId)
  409. //根据销售"领取客户"的权限对部分按钮做限制
  410. btnItem = services.GetCompanyPermissionButtonByReceiveEnabled(btnItem, receiveEnabled)
  411. }
  412. list[i].BtnItem = btnItem
  413. if item.FreezeStartDate != "" && item.FreezeEndDate != "" && item.Status == utils.COMPANY_STATUS_FREEZE {
  414. freezeEndDate, _ := time.Parse(utils.FormatDate, item.FreezeEndDate)
  415. if time.Now().Before(freezeEndDate) {
  416. expireDays := freezeEndDate.Sub(time.Now()).Hours() / 24
  417. list[i].FreezeExpireDays = int(expireDays) + 1
  418. }
  419. }
  420. ficcKey := fmt.Sprint(item.CompanyId, "_", 1)
  421. //ficc
  422. if tmpCompanyProduct, ok := companyProductMap[ficcKey]; ok {
  423. //套餐类型
  424. item.FiccPackageType = tmpCompanyProduct.PackageType
  425. //总试用天数
  426. item.FiccTryOutDay = tmpCompanyProduct.TryOutDayTotal
  427. //总阅读次数
  428. item.FiccView = tmpCompanyProduct.ViewTotal
  429. if !tmpCompanyProduct.LastViewTime.IsZero() {
  430. //最近一次阅读时间
  431. item.FiccLastViewTime = tmpCompanyProduct.LastViewTime.Format(utils.FormatDateTime)
  432. }
  433. }
  434. //权益
  435. raiKey := fmt.Sprint(item.CompanyId, "_", 2)
  436. if tmpCompanyProduct, ok := companyProductMap[raiKey]; ok {
  437. //总阅读次数
  438. item.RaiView = tmpCompanyProduct.ViewTotal
  439. //总试用天数
  440. item.RaiTryOutDay = tmpCompanyProduct.TryOutDayTotal
  441. if !tmpCompanyProduct.LastViewTime.IsZero() {
  442. //最近一次阅读时间
  443. item.RaiLastViewTime = tmpCompanyProduct.LastViewTime.Format(utils.FormatDateTime)
  444. }
  445. }
  446. }
  447. companyLists := make([]*company.CompanyListItem, 0)
  448. //查询阅读次数
  449. if list == nil {
  450. companyLists = make([]*company.CompanyListItem, 0)
  451. } else {
  452. for _, v := range list {
  453. //viewTotal:=GetviewTotal(v.CompanyId)
  454. //活跃(客户状态)
  455. tmpStatus := v.Status
  456. if v.IsShare == 1 {
  457. tmpStatus = v.Status + "(共享)"
  458. }
  459. companyList := &company.CompanyListItem{
  460. CompanyId: v.CompanyId,
  461. CompanyName: v.CompanyName,
  462. CreditCode: v.CreditCode,
  463. CompanyCode: v.CompanyCode,
  464. StartDate: v.StartDate,
  465. EndDate: v.EndDate,
  466. LoseReason: v.LoseReason,
  467. RenewalReason: v.RenewalReason,
  468. FreezeReason: v.FreezeReason,
  469. LossTime: v.LossTime,
  470. Status: tmpStatus,
  471. CompanyType: v.CompanyType,
  472. ApproveStatus: v.ApproveStatus,
  473. SellerName: v.SellerName,
  474. SellerId: v.SellerId,
  475. SellerIds: v.SellerIds,
  476. ExpireDay: v.ExpireDay,
  477. FreezeTime: v.FreezeTime,
  478. GroupId: v.GroupId,
  479. GroupIds: v.GroupIds,
  480. DepartmentId: v.DepartmentId,
  481. IndustryName: v.IndustryName,
  482. IsSuspend: v.IsSuspend,
  483. CreatedTime: v.CreatedTime,
  484. Source: v.Source,
  485. Province: v.Province,
  486. City: v.City,
  487. Address: v.Address,
  488. Reasons: v.Reasons,
  489. FreezeStartDate: v.FreezeStartDate,
  490. FreezeEndDate: v.FreezeEndDate,
  491. FreezeExpireDays: v.FreezeExpireDays,
  492. BtnItem: v.BtnItem,
  493. ProductId: v.ProductId,
  494. FormalTime: v.FormalTime,
  495. IsShared: v.IsShared,
  496. RegionType: v.RegionType,
  497. FiccPackageType: v.FiccPackageType,
  498. FiccLastViewTime: v.FiccLastViewTime,
  499. RaiLastViewTime: v.RaiLastViewTime,
  500. //FiccView: viewTotal[0],
  501. //RaiView: viewTotal[1],
  502. //FiccView: ficcViewTotal,
  503. //RaiView: raiViewTotal,
  504. FiccView: v.FiccView,
  505. RaiView: v.RaiView,
  506. FiccTryOutDay: v.FiccTryOutDay,
  507. RaiTryOutDay: v.RaiTryOutDay,
  508. AllViewTotal: v.AllViewTotal,
  509. RoadShowTotal: v.RoadShowTotal,
  510. TryStageSlice: v.TryStageSlice,
  511. Deadline: v.Deadline,
  512. WeekViewActive: v.WeekViewActive,
  513. IsShare: v.IsShare,
  514. ShareSeller: v.ShareSeller,
  515. ShareSellerId: v.ShareSellerId,
  516. LastServiceTime: v.LastServiceTime,
  517. ServiceTimes: v.ServiceTimes,
  518. }
  519. companyLists = append(companyLists, companyList)
  520. }
  521. }
  522. if companyLists == nil {
  523. companyLists = make([]*company.CompanyListItem, 0)
  524. }
  525. page = paging.GetPaging(currentIndex, pageSize, total)
  526. resp := new(company.CompanyListResp)
  527. resp.List = companyLists
  528. resp.Paging = page
  529. br.Ret = 200
  530. br.Success = true
  531. br.Msg = "获取成功"
  532. br.Data = resp
  533. }
  534. // @Title 分配共享销售
  535. // @Description 分配共享销售接口
  536. // @Param request body company.MoveShareSellerReq true "type json string"
  537. // @Success Ret=200 分配成功
  538. // @router /share/moveSeller [post]
  539. func (this *CompanyController) MoveShareSeller() {
  540. br := new(models.BaseResponse).Init()
  541. defer func() {
  542. this.Data["json"] = br
  543. this.ServeJSON()
  544. }()
  545. sysUser := this.SysUser
  546. if sysUser == nil {
  547. br.Msg = "请登录"
  548. br.ErrMsg = "请登录,SysUser Is Empty"
  549. br.Ret = 408
  550. return
  551. }
  552. var req company.MoveShareSellerReq
  553. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  554. if err != nil {
  555. br.Msg = "参数解析异常!"
  556. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  557. return
  558. }
  559. if req.CompanyId <= 0 {
  560. br.Msg = "参数异常!"
  561. br.ErrMsg = "CompanyId:" + strconv.Itoa(req.CompanyId)
  562. return
  563. }
  564. if req.SellsId <= 0 {
  565. br.Msg = "参数异常!"
  566. br.ErrMsg = "SellsId:" + strconv.Itoa(req.SellsId)
  567. return
  568. }
  569. seller, err := system.GetSysAdminById(req.SellsId)
  570. if err != nil {
  571. br.Msg = "获取销售信息失败"
  572. br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
  573. return
  574. }
  575. //查询该客户
  576. companyItem, err := company.GetCompanyById(req.CompanyId)
  577. if err != nil {
  578. br.Msg = "查找客户失败"
  579. br.ErrMsg = "查找客户失败,Err:" + err.Error()
  580. return
  581. }
  582. //待更新字段
  583. updateCol := make([]string, 0)
  584. companyItem.ShareSeller = seller.RealName
  585. companyItem.ShareSellerId = seller.AdminId
  586. updateCol = append(updateCol, "ShareSeller", "ShareSellerId")
  587. err = companyItem.Update(updateCol)
  588. if err != nil {
  589. br.Msg = "修改客户信息失败"
  590. br.ErrMsg = "修改客户信息失败,Err:" + err.Error()
  591. return
  592. }
  593. //新增操作记录
  594. //{
  595. // remark := "移动到:" + seller.RealName
  596. // operation := "move_seller"
  597. // services.AddCompanyOperationRecord(req.CompanyId, seller.AdminId, sysUser.AdminId, productId, sysUser.AdminId, cp.CompanyName,
  598. // cp.ProductName, sysUser.RealName, remark, operation, "", sysUser.RealName, "", cp.Status)
  599. //}
  600. //变更销售员与联系人关系
  601. //_ = models.UpdateUserSellerRelationByCompanyId(req.CompanyId, productId, seller.AdminId, seller.RealName)
  602. br.Ret = 200
  603. br.Success = true
  604. br.Msg = "分配成功"
  605. }
  606. // CompanyShareAddRemark
  607. // @Title 新增客户备注
  608. // @Description 新增客户备注
  609. // @Param request body company.RemarkReq true "type json string"
  610. // @Success 200 编辑成功
  611. // @router /share/remark/add [post]
  612. func (this *CompanyController) CompanyShareAddRemark() {
  613. br := new(models.BaseResponse).Init()
  614. defer func() {
  615. this.Data["json"] = br
  616. this.ServeJSON()
  617. }()
  618. sysUser := this.SysUser
  619. if sysUser == nil {
  620. br.Msg = "请登录"
  621. br.ErrMsg = "请登录,SysUser Is Empty"
  622. br.Ret = 408
  623. return
  624. }
  625. var req company.RemarkReq
  626. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  627. if err != nil {
  628. br.Msg = "参数解析异常!"
  629. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  630. return
  631. }
  632. if req.CompanyId <= 0 {
  633. br.Msg = "参数缺失"
  634. br.ErrMsg = "参数缺失,客户编号未传!"
  635. return
  636. }
  637. if req.Remark == "" {
  638. br.Msg = "参数缺失"
  639. br.ErrMsg = "参数缺失,备注说明未传!"
  640. return
  641. }
  642. var productId int
  643. groupFicc := []string{
  644. utils.ROLE_TYPE_CODE_FICC_SELLER, utils.ROLE_TYPE_CODE_FICC_TEAM, utils.ROLE_TYPE_CODE_FICC_GROUP,
  645. utils.ROLE_TYPE_CODE_FICC_DEPARTMENT, utils.ROLE_TYPE_CODE_FICC_ADMIN,
  646. }
  647. groupRai := []string{
  648. utils.ROLE_TYPE_CODE_RAI_SELLER, utils.ROLE_TYPE_CODE_RAI_GROUP, utils.ROLE_TYPE_CODE_RAI_GROUP,
  649. utils.ROLE_TYPE_CODE_RAI_DEPARTMENT, utils.ROLE_TYPE_CODE_RAI_ADMIN,
  650. }
  651. if utils.InArrayByStr(groupFicc, sysUser.RoleTypeCode) {
  652. productId = 1
  653. }
  654. if utils.InArrayByStr(groupRai, sysUser.RoleTypeCode) {
  655. productId = 2
  656. }
  657. if productId == 0 {
  658. br.Msg = "该角色不可添加备注"
  659. return
  660. }
  661. companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  662. if err != nil {
  663. br.Msg = "查询客户异常"
  664. br.ErrMsg = "查询客户异常,Err:" + err.Error()
  665. }
  666. remark := company.CompanyProductRemark{
  667. CompanyProductRemakrId: 0,
  668. CompanyId: companyProduct.CompanyId,
  669. ProductId: companyProduct.ProductId,
  670. ProductName: companyProduct.ProductName,
  671. Remark: req.Remark,
  672. CreateTime: time.Now(),
  673. }
  674. err = company.AddCompanyRemark(&remark)
  675. if err != nil {
  676. br.Msg = "操作失败"
  677. br.ErrMsg = "新增共享客户备注失败, Err: " + err.Error()
  678. return
  679. }
  680. go func() {
  681. approveContent := req.Remark
  682. remark := "新增备注"
  683. operation := "add_remark"
  684. _ = services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, companyProduct.ProductId, sysUser.AdminId, companyProduct.CompanyName,
  685. companyProduct.ProductName, sysUser.RealName, remark, operation, approveContent, sysUser.RealName, "", companyProduct.Status)
  686. }()
  687. br.Ret = 200
  688. br.Success = true
  689. br.Msg = "编辑成功"
  690. }