cust_customer.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703
  1. package cust
  2. import (
  3. "bytes"
  4. "context"
  5. "fmt"
  6. "math"
  7. "strconv"
  8. "strings"
  9. "dashoo.cn/opms_libary/myerrors"
  10. "github.com/360EntSecGroup-Skylar/excelize"
  11. "github.com/gogf/gf/database/gdb"
  12. "github.com/gogf/gf/encoding/gjson"
  13. "github.com/gogf/gf/frame/g"
  14. "github.com/gogf/gf/os/gtime"
  15. "github.com/gogf/gf/util/gconv"
  16. "github.com/mozillazg/go-pinyin"
  17. "dashoo.cn/micro/app/dao/cust"
  18. platdao "dashoo.cn/micro/app/dao/plat"
  19. model "dashoo.cn/micro/app/model/cust"
  20. "dashoo.cn/micro/app/service"
  21. )
  22. type CustomerService struct {
  23. *service.ContextService
  24. Dao *cust.CustCustomerDao
  25. BelongDao *cust.CustCustomerBelongDao
  26. DynamicsDao *cust.CustCustomerDynamicsDao
  27. ContactDao *cust.CustCustomerContactDao
  28. FollowDao *platdao.PlatFollowupDao
  29. BelongServer *CustomerbelongService
  30. ContanctServer *CustomercontactService
  31. }
  32. var isPublic, noPublic = "10", "20" // 公海,非公海
  33. var AllocaTion, OperaTion, Receive, Merge = "10", "20", "30", "40" // 10分配20转移30领取40合并
  34. type OpnType struct {
  35. OperaTion string
  36. }
  37. func NewCustomerService(ctx context.Context) (svc *CustomerService, err error) {
  38. svc = new(CustomerService)
  39. if svc.ContextService, err = svc.Init(ctx); err != nil {
  40. return nil, err
  41. }
  42. svc.Dao = cust.NewCustCustomerDao(svc.Tenant)
  43. svc.BelongDao = cust.NewCustCustomerBelongDao(svc.Tenant)
  44. svc.DynamicsDao = cust.NewCustCustomerDynamicsDao(svc.Tenant)
  45. svc.ContactDao = cust.NewCustCustomerContactDao(svc.Tenant)
  46. svc.FollowDao = platdao.NewPlatFollowupDao(svc.Tenant)
  47. svc.BelongServer, _ = NewCustomerBelongService(ctx)
  48. svc.ContanctServer, _ = NewCustomerContactService(ctx)
  49. return svc, nil
  50. }
  51. // GetList 客户列表列表
  52. func (s *CustomerService) GetList(req *model.CustCustomerSearchReq) (total int, customerList []*model.CustList, err error) {
  53. Model := s.Dao.M
  54. if req.TargetType == "" {
  55. if !req.IsPublic {
  56. Model = Model.Where(s.Dao.Columns.SalesId, s.CxtUser.Id).Where(s.Dao.Columns.IsPublic, noPublic)
  57. } else {
  58. Model = Model.Where(s.Dao.Columns.IsPublic, isPublic)
  59. }
  60. }
  61. //客户名称
  62. if req.CustName != "" {
  63. Model = Model.Where(s.Dao.Columns.CustName+" like ?", "%"+req.CustName+"%")
  64. }
  65. //客户编码
  66. if req.CustCode != "" {
  67. Model = Model.Where(s.Dao.Columns.CustCode+" like ?", "%"+req.CustCode+"%")
  68. }
  69. //客户行业
  70. if req.CustIndustry != "" {
  71. Model = Model.Where(s.Dao.Columns.CustIndustry+" like ?", "%"+req.CustIndustry+"%")
  72. }
  73. //客户级别
  74. if req.CustLevel != "" {
  75. Model = Model.Where(s.Dao.Columns.CustLevel, req.CustLevel)
  76. }
  77. //
  78. if req.FollowUpDate != "" {
  79. Model = Model.Where(s.Dao.Columns.FollowUpDate+" like ? ", req.FollowUpDate+"%")
  80. }
  81. if req.IsRemovePage {
  82. Model = Model
  83. } else {
  84. Model = Model.Page(req.GetPage())
  85. }
  86. total, err = Model.Count()
  87. if err != nil {
  88. g.Log().Error(err)
  89. err = myerrors.DbError("获取总行数失败。")
  90. return
  91. }
  92. err = Model.Order("id desc").Scan(&customerList)
  93. if err != nil {
  94. g.Log().Error(err)
  95. return
  96. }
  97. return
  98. }
  99. func (s *CustomerService) customerCode(province, industry string) (string, error) {
  100. sequence, err := service.Sequence(s.Dao.DB, "customer_code")
  101. if err != nil {
  102. return "", err
  103. }
  104. return s.customerProvinceCode(province) + industry + sequence, nil
  105. }
  106. func (s *CustomerService) customerProvinceCode(province string) string {
  107. province = strings.Trim(province, "市")
  108. province = strings.Trim(province, "省")
  109. province = strings.Trim(province, "特别行政区")
  110. province = strings.Trim(province, "自治区")
  111. province = strings.Trim(province, "壮族")
  112. province = strings.Trim(province, "回族")
  113. province = strings.Trim(province, "维吾尔")
  114. pinyinArg := pinyin.NewArgs()
  115. pinyinArg.Style = pinyin.FIRST_LETTER
  116. provincePinyin := pinyin.Pinyin(province, pinyinArg)
  117. provinceFirstletter := []string{}
  118. for _, i := range provincePinyin {
  119. provinceFirstletter = append(provinceFirstletter, i[0])
  120. }
  121. provinceCode := strings.Join(provinceFirstletter, "")
  122. provinceCode = strings.ToUpper(provinceCode)
  123. fmt.Println(provincePinyin, provinceFirstletter, provinceCode)
  124. return provinceCode
  125. }
  126. // Create 创建客户
  127. func (s *CustomerService) Create(req *model.CustomerAddSeq) (insertId int64, err error) {
  128. cusTomer := new(model.CustCustomer)
  129. count, err := s.Dao.Where(s.Dao.Columns.CustName, req.CustName).Count()
  130. if err != nil {
  131. g.Log().Error(err)
  132. return
  133. }
  134. if count > 0 {
  135. return 0, myerrors.TipsError("该客户信息已存在,不可重复添加")
  136. }
  137. if err = gconv.Struct(req, cusTomer); err != nil {
  138. return
  139. }
  140. service.SetCreatedInfo(cusTomer, s.GetCxtUserId(), s.CxtUser.NickName)
  141. custCode, err := s.customerCode(req.CustProvince, req.CustIndustryCode)
  142. if err != nil {
  143. return 0, err
  144. }
  145. cusTomer.CustCode = custCode
  146. cusTomer.CustStatus = "10"
  147. roles := s.GetCxtUserRoles()
  148. isSales := false
  149. for _, v := range roles {
  150. if v == "Sales" { // 销售角色
  151. isSales = true
  152. break
  153. }
  154. }
  155. // 销售角色
  156. if isSales {
  157. cusTomer.IsPublic = noPublic
  158. cusTomer.SalesId = s.GetCxtUserId()
  159. cusTomer.SalesName = s.CxtUser.NickName
  160. insertId, err = s.Dao.InsertAndGetId(cusTomer)
  161. if err != nil {
  162. g.Log().Error(err)
  163. return 0, err
  164. }
  165. s.CreateBelong(gconv.Int(insertId))
  166. return
  167. } else {
  168. cusTomer.IsPublic = isPublic
  169. insertId, err = s.Dao.InsertAndGetId(cusTomer)
  170. if err != nil {
  171. g.Log().Error(err)
  172. return 0, err
  173. }
  174. }
  175. return insertId, err
  176. }
  177. // CreateBelong 创建客户归属信息
  178. func (s *CustomerService) CreateBelong(custId int) (err error) {
  179. belong := new(model.CustomerBelongAddSeq)
  180. belong.CustId = custId
  181. belong.SaleName = s.CxtUser.NickName
  182. belong.OpnType = AllocaTion
  183. belong.OpnPeople = s.CxtUser.NickName
  184. err = s.BelongServer.Create(belong)
  185. if err != nil {
  186. g.Log().Error(err)
  187. return
  188. }
  189. return
  190. }
  191. // 删除客户
  192. func (s *CustomerService) DeleteByIds(Ids []int64) (err error) {
  193. customerCount, err := s.Dao.Where(" id in (?)", Ids).Count()
  194. if err != nil {
  195. g.Log().Error(err)
  196. return
  197. }
  198. if customerCount == 0 {
  199. err = myerrors.TipsError("客户信息不存在")
  200. return
  201. }
  202. //删除客户表
  203. s.Dao.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  204. //客户表
  205. _, err = s.Dao.TX(tx).Where("id in (?)", Ids).Delete()
  206. if err != nil {
  207. g.Log().Error(err)
  208. return err
  209. }
  210. //客户联系人表
  211. _, err = s.ContactDao.Where("cust_id in (?)", Ids).Delete()
  212. if err != nil {
  213. g.Log().Error(err)
  214. return err
  215. }
  216. //客户归属表
  217. _, err = s.BelongDao.Where("cust_id in (?)", Ids).Delete()
  218. if err != nil {
  219. g.Log().Error(err)
  220. return err
  221. }
  222. return nil
  223. })
  224. return
  225. }
  226. // UpdateById 修改客户
  227. func (s *CustomerService) UpdateById(req *model.UpdateCustomer) (err error) {
  228. //判断数据是否存在
  229. count, err := s.Dao.Where("id = ", req.Id).Count()
  230. if err != nil {
  231. g.Log().Error(err)
  232. return
  233. }
  234. if count == 0 {
  235. return
  236. }
  237. //新的客户名字是否存在
  238. num, err := s.Dao.Where(s.Dao.Columns.CustName, req.CustName).WhereNot(s.Dao.Columns.Id, req.Id).Count()
  239. if err != nil {
  240. g.Log().Error(err)
  241. return err
  242. }
  243. if num > 0 {
  244. return myerrors.TipsError(fmt.Sprintf("客户名称[%s]已存在", req.CustName))
  245. }
  246. CustomertData := new(model.CustomerAddSeq)
  247. if err = gconv.Struct(req, CustomertData); err != nil {
  248. return
  249. }
  250. service.SetUpdatedInfo(CustomertData, s.GetCxtUserId(), s.CxtUser.NickName)
  251. _, err = s.Dao.FieldsEx(s.Dao.Columns.CreatedTime, s.Dao.Columns.CreatedBy, s.Dao.Columns.CreatedName, s.Dao.Columns.Id, s.Dao.Columns.CustCode, s.Dao.Columns.SalesName, s.Dao.Columns.SalesId).
  252. WherePri(s.Dao.Columns.Id, req.Id).Update(CustomertData)
  253. if err != nil {
  254. g.Log().Error(err)
  255. return
  256. }
  257. return
  258. }
  259. // MoveToPubic 移入公海
  260. func (s *CustomerService) MoveToPubic(Ids []int64) (err error) {
  261. count, err := s.Dao.WhereIn(s.Dao.Columns.Id, Ids).Count()
  262. if err != nil {
  263. g.Log().Error(err)
  264. return
  265. }
  266. if count == 0 {
  267. err = myerrors.TipsError("没有要移除的数据")
  268. return
  269. }
  270. userName := s.GetCxtUserName()
  271. currentTime := gtime.Now() // 当前时间
  272. s.Dao.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  273. //更新客户信息
  274. _, err = s.Dao.TX(tx).Data(g.Map{
  275. "is_public": isPublic,
  276. "sales_id": 0,
  277. "dept_id": 0,
  278. "dept_name": "",
  279. "create_time": currentTime,
  280. "updated_by": s.GetCxtUserId(),
  281. "updated_name": userName,
  282. "updated_time": currentTime,
  283. }).WhereIn(s.ContactDao.Columns.Id, Ids).Update()
  284. if err != nil {
  285. g.Log().Error(err)
  286. return err
  287. }
  288. //更新销售归属表结束时间
  289. _, err = s.BelongDao.TX(tx).Data(
  290. g.Map{
  291. "updated_by": s.GetCxtUserId(),
  292. "updated_name": userName,
  293. "end_date": currentTime,
  294. }).WhereIn(s.BelongDao.Columns.CustId, Ids).Update()
  295. if err != nil {
  296. g.Log().Error(err)
  297. return err
  298. }
  299. return nil
  300. })
  301. return
  302. }
  303. // AssignCustomer 分配客户
  304. func (s *CustomerService) AssignCustomer(req *model.AssignCustomerReq) (err error) {
  305. data, err := s.Dao.Where("id in (?)", req.Ids).LockShared().All()
  306. if err != nil {
  307. g.Log().Error(err)
  308. return
  309. }
  310. if len(data) == 0 {
  311. return myerrors.TipsError("无可分配客户")
  312. }
  313. for _, v := range data {
  314. if v.SalesId != 0 {
  315. return myerrors.TipsError(fmt.Sprintf("客户名称[%s]已被领取或分配", v.CustName))
  316. }
  317. }
  318. err = s.ChangeCustBelong(req.Ids, req.SalesId, req.SalesName)
  319. if err != nil {
  320. return
  321. }
  322. if req.Receive != "" {
  323. req.Receive = Receive
  324. } else {
  325. req.Receive = AllocaTion
  326. }
  327. s.BatchCreatebelong(data, req)
  328. return
  329. }
  330. // GetEntityById 客户详情
  331. func (s *CustomerService) GetEntityById(Ids []int64) (entityInfo []*model.CustList, err error) {
  332. Model := s.Dao //
  333. err = Model.Where(" id in (?)", Ids).Scan(&entityInfo)
  334. if err != nil {
  335. g.Log().Error(err)
  336. return
  337. }
  338. return
  339. }
  340. // GetCustNameIsExist 判断客户名称是否存在
  341. func (s *CustomerService) GetCustNameIsExist(req *model.IsExistsCustName) (exist bool, err error) {
  342. custDao := s.Dao.M
  343. if req.Id > 0 {
  344. custDao = custDao.Where("cust_name = ", req.CustName).WhereNot(" id ", req.Id)
  345. } else {
  346. custDao = custDao.Where("cust_name = ", req.CustName)
  347. }
  348. count, err := custDao.Count()
  349. if err != nil {
  350. g.Log().Error(err)
  351. return
  352. }
  353. exist = false
  354. if count > 0 {
  355. exist = true
  356. }
  357. return
  358. }
  359. // CustAbstract 客户摘要
  360. func (s *CustomerService) CustAbstract(Id int64) (followInfo *model.Follow, err error) {
  361. count, err := s.FollowDao.Where(s.FollowDao.Columns.CustId, Id).Count()
  362. if err != nil {
  363. g.Log().Error(err)
  364. return
  365. }
  366. followInfo = new(model.Follow)
  367. followInfo.FollowCount = count
  368. followTime, err := s.Dao.Fields(s.Dao.Columns.FollowUpDate, s.Dao.Columns.CreatedTime).FindOne(Id)
  369. if err != nil {
  370. g.Log().Error(err)
  371. return
  372. }
  373. if followTime == nil {
  374. err = myerrors.TipsError("获取客户信息不存在")
  375. return
  376. }
  377. now := gtime.Now()
  378. var hours float64
  379. if followTime.FollowUpDate == nil {
  380. poor := now.Sub(gtime.New(followTime.CreatedTime))
  381. hours = float64(poor.Hours() / 24)
  382. } else {
  383. poor := now.Sub(gtime.New(followTime.FollowUpDate))
  384. hours = float64(poor.Hours() / 24)
  385. }
  386. if hours < 0 {
  387. followInfo.NotFollowDay = 0
  388. } else {
  389. followInfo.NotFollowDay = int(math.Floor(hours))
  390. }
  391. return
  392. }
  393. // TransCustomer 转移客户
  394. func (s *CustomerService) TransCustomer(req *model.AssignCustomerReq) (err error) {
  395. data, err := s.Dao.Fields("sales_id,sales_name,id").Where("id in (?)", req.Ids).All()
  396. if err != nil {
  397. g.Log().Error(err)
  398. return err
  399. }
  400. if len(data) == 0 {
  401. return myerrors.TipsError("数据不存在")
  402. }
  403. err = s.ChangeCustBelong(req.Ids, req.SalesId, req.SalesName)
  404. if err != nil {
  405. g.Log().Error(err)
  406. return
  407. }
  408. req.Receive = OperaTion
  409. s.BatchCreatebelong(data, req)
  410. return
  411. }
  412. // ChangeCustBelong 变更客户所属关系
  413. func (s *CustomerService) ChangeCustBelong(Ids []int64, salesId int64, salesName string) (err error) {
  414. _, err = s.Dao.Data(g.Map{
  415. "sales_id": salesId,
  416. "is_public": noPublic,
  417. "sales_name": salesName,
  418. "updated_by": s.GetCxtUserId(),
  419. "updated_name": s.GetCxtUserName(),
  420. "updated_time": gtime.Now(),
  421. }).Where("id in (?)", Ids).Update()
  422. if err != nil {
  423. g.Log().Error(err)
  424. return
  425. }
  426. return
  427. }
  428. // CreateDynamics 创建客户动态信息
  429. func (s *CustomerService) CreateDynamics(opnTpye string, content interface{}, ids ...int64) (err error) {
  430. datas := make([]*model.CustCustomerDynamics, 0)
  431. for _, id := range ids {
  432. dynameics := new(model.CustCustomerDynamics)
  433. dynameics.CustId = int(id)
  434. dynameics.OpnPeopleId = s.GetCxtUserId()
  435. dynameics.OpnPeople = s.GetCxtUserName()
  436. dynameics.OpnDate = gtime.Now()
  437. dynameics.OpnType = opnTpye
  438. v, _ := gjson.Encode(content)
  439. dynameics.OpnContent = gconv.String(v)
  440. service.SetCreatedInfo(dynameics, s.GetCxtUserId(), s.GetCxtUserName())
  441. datas = append(datas, dynameics)
  442. }
  443. _, err = s.DynamicsDao.Insert(datas)
  444. if err != nil {
  445. g.Log().Error(err)
  446. return
  447. }
  448. return
  449. }
  450. // GetDynamicsList 客户动态
  451. func (s *CustomerService) GetDynamicsList(req *model.CustomerDynameicsReq) (total int, result []interface{}, err error) {
  452. total, err = s.DynamicsDao.Where("cust_id = ", req.CustId).Count()
  453. if err != nil {
  454. g.Log().Error(err)
  455. return
  456. }
  457. dynamics := []*model.CustomerDynameicsRep{}
  458. err = s.DynamicsDao.Where("cust_id = ", req.CustId).Order("created_time desc").Scan(&dynamics)
  459. if err != nil {
  460. g.Log().Error(err)
  461. return
  462. }
  463. dynamicsList := make(map[string][]*model.CustomerDynameicsRep)
  464. for _, v := range dynamics {
  465. opnDate := gtime.New(v.OpnDate).Format("Y-m-d")
  466. dynamicsList[opnDate] = append(dynamicsList[opnDate], &model.CustomerDynameicsRep{
  467. OpnPeople: v.OpnPeople,
  468. OpnDate: v.OpnDate,
  469. OpnType: v.OpnType,
  470. OpnContent: v.OpnContent,
  471. })
  472. }
  473. result = append(result, dynamicsList)
  474. return
  475. }
  476. // MergeCustomer 合并客户
  477. func (s *CustomerService) MergeCustomer(req *model.MergeCustomerRep) (err error) {
  478. //当前目标客户是否存在并取出合并前的销售
  479. customer, err := s.Dao.Where("id = ", req.Id).One()
  480. if err != nil {
  481. g.Log().Error(err)
  482. return
  483. }
  484. if customer == nil {
  485. return myerrors.TipsError("该客户不存在")
  486. }
  487. _, err = s.ContactDao.Where(" cust_id in (?)", req.ChooseId).Delete()
  488. if err != nil {
  489. g.Log().Error(err)
  490. return
  491. }
  492. CustomertData := new(model.CustomerAddSeq)
  493. if err = gconv.Struct(req, CustomertData); err != nil {
  494. g.Log().Error(err)
  495. return
  496. }
  497. service.SetUpdatedInfo(CustomertData, s.GetCxtUserId(), s.GetCxtUserName())
  498. _, err = s.Dao.FieldsEx(s.Dao.Columns.CreatedTime, s.Dao.Columns.CreatedBy,
  499. s.Dao.Columns.CreatedName, s.Dao.Columns.Id,
  500. s.Dao.Columns.CustCode).WherePri(s.Dao.Columns.Id, req.Id).Update(CustomertData)
  501. if err != nil {
  502. g.Log().Error(err)
  503. return
  504. }
  505. //删除被合并的客户信息
  506. _, err = s.Dao.Where(" id in (?)", req.ChooseId).Delete()
  507. if err != nil {
  508. g.Log().Error(err)
  509. return
  510. }
  511. //删除 所选客户销售联系人
  512. _, err = s.BelongDao.Where(" cust_id in (?)", req.ChooseId).Delete()
  513. if err != nil {
  514. g.Log().Error(err)
  515. return
  516. }
  517. //插入一条合并成功的归属记录
  518. //更新销售归属表销售结束时间
  519. _, err = s.BelongDao.Data(
  520. g.Map{
  521. "updated_by": s.GetCxtUserId(),
  522. "updated_name": s.GetCxtUserName(),
  523. "end_date": gtime.Now(),
  524. }).WhereIn(s.BelongDao.Columns.CustId, req.Id).Update()
  525. if err != nil {
  526. g.Log().Error(err)
  527. return
  528. }
  529. req.CustomerBelongAddSeq.CustId = int(req.Id)
  530. req.CustomerBelongAddSeq.OpnType = Merge
  531. req.CustomerBelongAddSeq.OpnPeople = s.GetCxtUserName()
  532. req.CustomerBelongAddSeq.OrigSaleName = customer.SalesName
  533. req.CustomerBelongAddSeq.SaleName = req.SalesName
  534. s.BelongServer.Create(req.CustomerBelongAddSeq)
  535. return
  536. }
  537. // CreateContact 联系人(合并)预留
  538. func (s *CustomerService) CreateContact(Ids []int64, req *model.CustCustomerContactSeq) (err error) {
  539. _, err = s.ContactDao.Where(" cust_id in (?)", Ids).Delete()
  540. if err != nil {
  541. g.Log().Error(err)
  542. return
  543. }
  544. s.ContanctServer.Create(req)
  545. return
  546. }
  547. // BatchCreatebelong 批量插入客户归属记录表
  548. func (s *CustomerService) BatchCreatebelong(rep []*model.CustCustomer, req *model.AssignCustomerReq, n ...interface{}) (err error) {
  549. //更新销售归属表销售结束时间
  550. _, err = s.BelongDao.Data(
  551. g.Map{
  552. "updated_by": s.GetCxtUserId(),
  553. "updated_name": s.GetCxtUserName(),
  554. "end_date": gtime.Now(),
  555. }).WhereIn(s.BelongDao.Columns.CustId, req.Ids).Update()
  556. if err != nil {
  557. g.Log().Error(err)
  558. return
  559. }
  560. var belongData []*model.CustCustomerBelong
  561. userName := s.GetCxtUserName()
  562. for _, v := range rep {
  563. orig_sale_name := v.SalesName
  564. belong := new(model.CustCustomerBelong)
  565. belong.CustId = v.Id
  566. belong.SaleName = req.SalesName
  567. belong.OrigSaleName = orig_sale_name
  568. belong.OpnType = req.Receive
  569. belong.OpnPeople = userName
  570. belong.CreatedName = userName
  571. belong.StartDate = gtime.Now() //新增开始时间
  572. belong.OpnDatetime = gtime.Now()
  573. belong.Remark = req.Remark
  574. belong.CreatedBy = s.GetCxtUserId()
  575. belongData = append(belongData, belong)
  576. }
  577. _, err = s.BelongDao.Insert(belongData)
  578. if err != nil {
  579. g.Log().Error(err)
  580. return
  581. }
  582. return
  583. }
  584. // 导出数据
  585. func (s *CustomerService) Export(req *model.CustCustomerExport) (content *model.CustExport, err error) {
  586. var con model.CustExport
  587. req.IsRemovePage = true // 去掉分页标识
  588. total, data, err := s.GetList(&req.CustCustomerSearchReq)
  589. if err != nil {
  590. return
  591. }
  592. f := excelize.NewFile()
  593. index := f.NewSheet("Sheet1")
  594. for index, item := range req.Columns {
  595. sheetPosition := service.Div(index+1) + "1"
  596. f.SetCellValue("Sheet1", sheetPosition, item)
  597. }
  598. if total > 0 {
  599. for ck, item := range data {
  600. for index, v := range req.Columns {
  601. if v == "客户编码" {
  602. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.CustCode)
  603. }
  604. if v == "客户名称" {
  605. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.CustName)
  606. }
  607. if v == "助记名" {
  608. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.AbbrName)
  609. }
  610. if v == "助记名" {
  611. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.AbbrName)
  612. }
  613. if v == "所在地区" {
  614. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.CustLocation)
  615. }
  616. if v == "客户行业" {
  617. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.CustIndustry)
  618. }
  619. if v == "客户级别" {
  620. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.CustLevel)
  621. }
  622. if v == "客户状态" {
  623. var CustStatus string
  624. CustStatus = "正常"
  625. if item.CustStatus != "10" {
  626. CustStatus = "异常"
  627. }
  628. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), CustStatus)
  629. }
  630. if v == "创建人" {
  631. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.CreatedName)
  632. }
  633. if v == "最后跟进时间" {
  634. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.FollowUpDate)
  635. }
  636. if v == "创建时间" {
  637. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.CreatedTime)
  638. }
  639. }
  640. }
  641. }
  642. f.SetActiveSheet(index)
  643. var buffer *bytes.Buffer
  644. buffer, _ = f.WriteToBuffer()
  645. con.Content = buffer.Bytes()
  646. return &con, err
  647. }