cust_customer.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665
  1. package cust
  2. import (
  3. "bytes"
  4. "context"
  5. "math"
  6. "strconv"
  7. "time"
  8. "github.com/360EntSecGroup-Skylar/excelize"
  9. "github.com/gogf/gf/errors/gerror"
  10. "github.com/gogf/gf/frame/g"
  11. "github.com/gogf/gf/os/gtime"
  12. "github.com/gogf/gf/util/gconv"
  13. "dashoo.cn/micro/app/dao/cust"
  14. platdao "dashoo.cn/micro/app/dao/plat"
  15. model "dashoo.cn/micro/app/model/cust"
  16. "dashoo.cn/micro/app/service"
  17. )
  18. const TIME_LAYOUT = "2006-01-02 15:04:05"
  19. type CustomerService struct {
  20. *service.ContextService
  21. Dao *cust.CustCustomerDao
  22. BelongDao *cust.CustCustomerBelongDao
  23. DynamicsDao *cust.CustCustomerDynamicsDao
  24. ContactDao *cust.CustCustomerContactDao
  25. FollowDao *platdao.PlatFollowupDao
  26. }
  27. var isPublic, noPublic = "10", "20" // 公海,非公海
  28. var isTransfer int8 = 1 //转移
  29. var isAllocation int8 = 2 //分配 Allocation
  30. var OperaTion, AllocaTion = "20", "10"
  31. type OpnType struct {
  32. OperaTion string
  33. }
  34. func NewCustomerService(ctx context.Context) (svc *CustomerService, err error) {
  35. svc = new(CustomerService)
  36. if svc.ContextService, err = svc.Init(ctx); err != nil {
  37. return nil, err
  38. }
  39. svc.Dao = cust.NewCustCustomerDao(svc.Tenant)
  40. svc.BelongDao = cust.NewCustCustomerBelongDao(svc.Tenant)
  41. svc.DynamicsDao = cust.NewCustCustomerDynamicsDao(svc.Tenant)
  42. svc.ContactDao = cust.NewCustCustomerContactDao(svc.Tenant)
  43. svc.FollowDao = platdao.NewPlatFollowupDao(svc.Tenant)
  44. return svc, nil
  45. }
  46. //导出数据
  47. func (c *CustomerService) Derive(req *model.CustCustomerExport) (content *model.CustExport, err error) {
  48. var con model.CustExport
  49. req.CustCustomerSearchReq.TargetType = "11"
  50. total, data, err := c.GetList(req.CustCustomerSearchReq)
  51. if err != nil {
  52. return
  53. }
  54. f := excelize.NewFile()
  55. index := f.NewSheet("Sheet1")
  56. for index, item := range req.Columns {
  57. sheetPosition := service.Div(index+1) + "1"
  58. f.SetCellValue("Sheet1", sheetPosition, item)
  59. }
  60. if total > 0 {
  61. for ck, item := range data {
  62. for index, v := range req.Columns {
  63. if v == "经销商编码" {
  64. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.CustCode)
  65. }
  66. if v == "经销商名称" {
  67. f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(ck+2), item.CustName)
  68. }
  69. //if v == "" {
  70. // f.SetCe
  71. //}
  72. }
  73. }
  74. }
  75. f.SetActiveSheet(index)
  76. var buffer *bytes.Buffer
  77. buffer, _ = f.WriteToBuffer()
  78. con.Content = buffer.Bytes()
  79. return &con, err
  80. //bytesBuffer = &bytes.Buffer{}
  81. //bytesBuffer.WriteString("xEFxBBxBF")
  82. //
  83. //w := csv.NewWriter(bytesBuffer)
  84. //// 写入数据
  85. //w.Write(derivetable)
  86. //w.Flush()
  87. //// Map写入
  88. //m := make(map[int][]string)
  89. //for k, v := range data {
  90. // m[k] = []string{v.CustCode, v.CustName, v.AbbrName, v.CustLocation, v.CustIndustry, v.CustLevel, v.CustStatus,
  91. // gconv.String(v.FollowUpDate), v.CreatedName, gconv.String(v.CreatedTime)}
  92. //}
  93. //// 按照key排序
  94. //var keys []int
  95. //for k := range m {
  96. // keys = append(keys, k)
  97. //}
  98. //sort.Ints(keys)
  99. //for _, key := range keys {
  100. // w.Write(m[key])
  101. // // 刷新缓冲
  102. //}
  103. //w.Flush()
  104. //return
  105. }
  106. //创建客户
  107. func (c *CustomerService) Create(req *model.Customer) (insertId int64, err error) {
  108. cusTomer := new(model.CustCustomer)
  109. g.Log().Info(err)
  110. Model := c.Dao.M
  111. record, err := Model.Where(g.Map{"cust_name": req.CustName}).One()
  112. g.Log().Info("recordE", record.IsEmpty())
  113. if err != nil || !record.IsEmpty() {
  114. err = gerror.New("该客户信息已存在,不可重复添加")
  115. return
  116. }
  117. //OpnPeopleId int ` json:"opnPeopleId"` // 操作人ID
  118. //OpnPeople string ` json:"opnPeople"` // 操作人
  119. //OpnDate *gtime.Time ` json:"opnDate"` // 操作日期
  120. //OpnType string ` json:"opnType"` // 操作类型
  121. //OpnContent string ` json:"opnContent"` // 操作内容
  122. //c.OperationLog()
  123. if err = gconv.Struct(req, cusTomer); err != nil {
  124. return
  125. }
  126. g.Log().Info("部门ID", c.CxtUser.DeptId)
  127. service.SetCreatedInfo(cusTomer, c.GetCxtUserId(), c.GetCxtUserName())
  128. cusTomer.CustCode = strconv.Itoa(int(gtime.Timestamp()))
  129. cusTomer.IsPublic = isPublic
  130. cusTomer.CustStatus = "10"
  131. //if c.CxtUser.DeptId == 2 {
  132. // cusTomer.IsPublic = noPublic // 非公海用户
  133. // cusTomer.DeptId = c.GetCxtUserDeptId() // 部门id
  134. // cusTomer.DeptId = c.GetCxtUserDeptId() // 部门名称
  135. // cusTomer.SalesId = c.GetCxtUserId() // 销售id
  136. // cusTomer.SalesName = c.GetCxtUserName() // 销售名称
  137. //}
  138. res, err := Model.Insert(cusTomer)
  139. if err != nil {
  140. g.Log().Error(err)
  141. err = gerror.New("创建失败")
  142. return
  143. }
  144. //
  145. insertId, _ = res.LastInsertId()
  146. //销售人员创建条件成立 同步belong 表
  147. //custBelong := new(model.AddCustomerBelong)
  148. //custBelong.CustId = int(insertId)
  149. //custBelong.SaleName = "xxx"
  150. //custBelong.OpnPeople = "xxxx"
  151. //custBelong.OpnDatetime = gtime.Now()
  152. //err = c.CreateBelong()
  153. return
  154. }
  155. //销售人员创建 直接认领客户
  156. func (c *CustomerService) CreateBelong(req *model.AddCustomerBelong) (err error) {
  157. cusTomerBelong := new(model.CustCustomerBelong)
  158. if err = gconv.Struct(req, cusTomerBelong); err != nil {
  159. g.Log().Info("error", err)
  160. return
  161. }
  162. service.SetCreatedInfo(cusTomerBelong, c.GetCxtUserId(), c.GetCxtUserName())
  163. cusTomerBelong.OpnType = isPublic
  164. cusTomerBelong.OpnDatetime = gtime.Now()
  165. service.SetCreatedInfo(cusTomerBelong, c.GetCxtUserId(), c.GetCxtUserName())
  166. _, err = c.BelongDao.Insert(cusTomerBelong)
  167. if err != nil {
  168. g.Log().Error(err)
  169. err = gerror.New("创建失败")
  170. return
  171. }
  172. return nil
  173. }
  174. //客户列表列表
  175. func (c *CustomerService) GetList(req *model.CustCustomerSearchReq) (total int, customerList []*model.CustList, err error) {
  176. g.Log().Info("serverS", req)
  177. Model := c.Dao.M
  178. Model = Model.Where(c.Dao.Columns.DeletedTime + " is null")
  179. if req.TargetType == "" {
  180. if !req.IsPublic {
  181. g.Log().Info("ISPUblic", "xxxxxx")
  182. Model = Model.Where(c.Dao.Columns.SalesId, c.CxtUser.Id).Where(c.Dao.Columns.IsPublic, noPublic)
  183. } else {
  184. g.Log().Info("serverS", req)
  185. Model = Model.Where(c.Dao.Columns.IsPublic, isPublic)
  186. }
  187. }
  188. //客户名称
  189. if req.CustName != "" {
  190. Model = Model.Where(c.Dao.Columns.CustName+" like ?", "%"+req.CustName+"%")
  191. }
  192. //客户编码
  193. if req.CustCode != "" {
  194. Model = Model.Where(c.Dao.Columns.CustCode+" like ?", "%"+req.CustCode+"%")
  195. }
  196. //客户行业
  197. if req.CustIndustry != "" {
  198. Model = Model.Where(c.Dao.Columns.CustIndustry+" like ?", "%"+req.CustIndustry+"%")
  199. }
  200. //客户级别
  201. if req.CustLevel != "" {
  202. g.Log().Info("level", req.CustLevel)
  203. Model = Model.Where(c.Dao.Columns.CustLevel, req.CustLevel)
  204. }
  205. total, err = Model.Count()
  206. if err != nil {
  207. g.Log().Error(err)
  208. err = gerror.New("获取总行数失败")
  209. return
  210. }
  211. if req.PageNum == 0 {
  212. req.PageNum = 1
  213. }
  214. err = Model.Page(req.PageNum, req.PageSize).Order("id desc").Scan(&customerList)
  215. return
  216. }
  217. //删除客户
  218. func (c *CustomerService) DeleteById(id int) error {
  219. Model := c.Dao.M
  220. ContactModel := c.ContactDao //联系人
  221. regionDetail := new(model.CustCustomer)
  222. err := Model.Where(c.Dao.Columns.Id, id).Scan(&regionDetail)
  223. //g.Log().Info("DeleteByIds", one)
  224. if err != nil {
  225. g.Log().Error(err)
  226. err = gerror.New("没有要删除的数据")
  227. return err
  228. }
  229. deleteTime := gtime.Now()
  230. //删除客户表
  231. _, err = Model.Data(g.Map{
  232. "deleted_time": deleteTime,
  233. }).Where(c.Dao.Columns.Id, id).Update()
  234. // 删除客户联系人表
  235. _, err = ContactModel.Data(g.Map{
  236. "deleted_time": deleteTime,
  237. }).Where(c.ContactDao.Columns.CustId, id).Update()
  238. if err != nil {
  239. g.Log().Error(err)
  240. err = gerror.New("删除数据失败")
  241. return err
  242. }
  243. return nil
  244. }
  245. //修改客户
  246. func (c *CustomerService) UpdateById(req *model.UpdateCustomer) (err error) {
  247. db := c.Dao.M
  248. record, err := db.FindOne(c.Dao.Columns.Id, req.Id)
  249. if err != nil || record.IsEmpty() {
  250. err = gerror.New("该数据不存在")
  251. return err
  252. }
  253. CustomertData := new(model.Customer)
  254. if err = gconv.Struct(req, CustomertData); err != nil {
  255. return
  256. }
  257. service.SetUpdatedInfo(CustomertData, c.GetCxtUserId(), c.GetCxtUserName())
  258. _, err = db.FieldsEx(c.Dao.Columns.CreatedTime, c.Dao.Columns.CreatedBy, c.Dao.Columns.CreatedName, c.Dao.Columns.Id, c.Dao.Columns.CustCode, c.Dao.Columns.SalesName, c.Dao.Columns.SalesId).
  259. WherePri(c.Dao.Columns.Id, req.Id).Update(CustomertData)
  260. if err != nil {
  261. g.Log().Error(err)
  262. err = gerror.New("修改用户信息失败")
  263. return
  264. }
  265. return
  266. }
  267. //移入公海
  268. func (c *CustomerService) MoveToPubic(ids []int64) error {
  269. Model := c.Dao.M
  270. //Cust := new(model.CustCustomer)
  271. list, err := Model.Fields(c.Dao.Columns.CreatedTime).Where(c.Dao.Columns.Id+" in (?) ", ids).All()
  272. if err != nil || list.Len() <= 0 {
  273. g.Log().Error(err)
  274. err = gerror.New("没有要移除的数据")
  275. return err
  276. }
  277. _, err = Model.Data(g.Map{
  278. "is_public": isPublic,
  279. "sales_id": 0,
  280. "sales_name": "",
  281. "dept_id": 0,
  282. "dept_name": "",
  283. "create_time": gtime.Now(),
  284. "updated_by": c.GetCxtUserId(),
  285. "updated_name": c.GetCxtUserName(),
  286. "updated_time": gtime.Now(),
  287. }).Where(c.ContactDao.Columns.Id+" in (?)", ids).Update()
  288. if err != nil {
  289. g.Log().Error(err)
  290. err = gerror.New("移入公海失败")
  291. return err
  292. }
  293. return nil
  294. }
  295. //分配客户
  296. func (c *CustomerService) DistriCustomer(req *model.DistriCustomer) error {
  297. /**
  298. 待写逻辑(销售总监或销售助理将公海客户分配给指定销售工程师)
  299. if c.user.id != 销售总监 || c.user.id!=销售助理 {
  300. err = gerror.New("该账号无权限操作!")
  301. return
  302. }
  303. */
  304. custModel := c.Dao.M
  305. rep, err := custModel.Where(cust.CustCustomer.Columns.Id+" in (?) ", req.Ids).Where(cust.CustCustomer.Columns.IsPublic, isPublic).All()
  306. if err != nil || rep.IsEmpty() {
  307. err = gerror.New("该数据不存在")
  308. return err
  309. }
  310. err = c.updateCustomer(req.Ids, req.SalesId, req.SalesName)
  311. if err != nil {
  312. err = gerror.New("可配客户失败")
  313. return err
  314. }
  315. var maps = make(map[string]string)
  316. maps["remark"] = req.Remark
  317. maps["opn_type"] = AllocaTion
  318. maps["sale_name"] = req.SalesName
  319. err = c.belongInsters(rep.List(), maps)
  320. if err != nil {
  321. err = gerror.New("转移客户失败")
  322. return err
  323. }
  324. return nil
  325. }
  326. //客户详情
  327. func (c *CustomerService) GetEntityById(ids []int64) (entityInfo []*model.CustList, err error) {
  328. Model := c.Dao.M //
  329. //FollowModel := c.FollowDao.M
  330. err = Model.Where(cust.CustCustomer.Columns.Id+" in (?)", ids).Scan(&entityInfo)
  331. if err != nil {
  332. g.Log().Error(err)
  333. return nil, gerror.New("获取用户数据失败")
  334. }
  335. return
  336. }
  337. //客户摘要
  338. func (c *CustomerService) CustAbstract(id int64) (followInfo *model.Follow, err error) {
  339. custModel := c.Dao.M //
  340. Model := c.FollowDao.M
  341. count, err := Model.Where(c.FollowDao.Columns.CustId, id).Count()
  342. g.Log().Info("count", count)
  343. if err != nil {
  344. g.Log().Error(err)
  345. return nil, gerror.New("获取用户数据失败")
  346. }
  347. followInfo = new(model.Follow)
  348. followInfo.FollowCount = count
  349. //
  350. find, err := custModel.Fields(c.Dao.Columns.FollowUpDate).Where(c.Dao.Columns.Id, id).FindOne()
  351. g.Log().Info("find", find)
  352. if err != nil {
  353. g.Log().Error(err)
  354. return nil, gerror.New("获取用户数据失败")
  355. }
  356. findOne := find.Map()
  357. if findOne["follow_up_date"] == "" {
  358. followInfo.NotFollowDay = 0
  359. return
  360. }
  361. upDate := gconv.String(findOne["follow_up_date"])
  362. follow_up, err1 := time.Parse(TIME_LAYOUT, upDate)
  363. now := gtime.Now()
  364. follow_next, err2 := time.Parse(TIME_LAYOUT, gconv.String(now))
  365. if err1 != nil || err2 != nil {
  366. followInfo.NotFollowDay = 0
  367. return
  368. }
  369. poor := follow_next.Sub(follow_up)
  370. g.Log().Info("xxxxfdsaf", follow_up)
  371. hours := float64(poor.Hours() / 24)
  372. if hours < 0 {
  373. followInfo.NotFollowDay = 0
  374. } else {
  375. followInfo.NotFollowDay = int(math.Floor(hours))
  376. }
  377. return
  378. }
  379. //转移客户
  380. func (c *CustomerService) UpdateBytransfer(req *model.CustSalesReq) (entityInfo []*model.CustCustomer, err error) {
  381. custModel := c.Dao.M
  382. rep, err := custModel.Fields("sales_id,sales_name,id").Where(cust.CustCustomer.Columns.Id+" in (?)", req.Ids).All()
  383. if err != nil || rep.IsEmpty() {
  384. err = gerror.New("该数据不存在")
  385. return
  386. }
  387. err = c.updateCustomer(req.Ids, req.SalesIds, req.SalesName)
  388. if err != nil {
  389. err = gerror.New("转移客户失败")
  390. return
  391. }
  392. var maps = make(map[string]string)
  393. maps["remark"] = req.Remark
  394. maps["opn_type"] = OperaTion
  395. maps["sale_name"] = req.SalesName
  396. err = c.belongInsters(rep.List(), maps)
  397. if err != nil {
  398. err = gerror.New("转移客户失败")
  399. return
  400. }
  401. return
  402. }
  403. //变更客户所属关系
  404. func (c *CustomerService) updateCustomer(ids []int64, salesId int64, salesName string) error {
  405. custModel := c.Dao.M
  406. _, err := custModel.Data(g.Map{
  407. "sales_id": salesId,
  408. "is_public": noPublic,
  409. "sales_name": salesName,
  410. "updated_by": c.GetCxtUserId(),
  411. "updated_name": c.GetCxtUserName(),
  412. "updated_time": gtime.Now(),
  413. }).Where(cust.CustCustomer.Columns.Id+" in (?)", ids).Update()
  414. if err != nil {
  415. g.Log().Error(err)
  416. err = gerror.New("变更失败")
  417. return err
  418. }
  419. return nil
  420. }
  421. //客户操作日志
  422. func (c *CustomerService) OperationLog(ctx context.Context, ids []int64, req *model.AddCustomerDynameicsReq) (err error) {
  423. g.Log("fdasfsa", gconv.String(ctx))
  424. cusDynameics := new(model.CustCustomerDynamics)
  425. if err = gconv.Struct(req, cusDynameics); err != nil {
  426. g.Log().Info("error", err)
  427. return
  428. }
  429. Model := c.DynamicsDao.M
  430. g.Log().Info("IDS", ids)
  431. maps := []map[string]interface{}{}
  432. for _, v := range ids {
  433. contact := map[string]interface{}{}
  434. contact["cust_id"] = v
  435. contact["opn_people_id"] = c.GetCxtUserId()
  436. contact["opn_people"] = c.GetCxtUserName()
  437. contact["opn_date"] = req.OpnDate
  438. contact["opn_type"] = req.OpnType
  439. contact["remark"] = ""
  440. contact["created_by"] = c.GetCxtUserId()
  441. contact["created_name"] = c.GetCxtUserName()
  442. contact["created_by"] = c.GetCxtUserId()
  443. contact["created_time"] = gtime.Now()
  444. contact["opn_content"] = req.OpnContent
  445. maps = append(maps, contact)
  446. }
  447. _, err = Model.Insert(maps)
  448. if err != nil {
  449. g.Log().Error(err)
  450. err = gerror.New("创建失败")
  451. return
  452. }
  453. return
  454. }
  455. //客户动态
  456. func (c *CustomerService) DynamicsList(req *model.CustomerDynameicsReq) (total int, result []interface{}, err error) {
  457. Model := c.DynamicsDao.M
  458. total, err = Model.Fields().Count()
  459. if err != nil {
  460. g.Log().Error(err)
  461. err = gerror.New("获取总行数失败")
  462. return
  463. }
  464. if req.PageNum == 0 {
  465. req.PageNum = 1
  466. }
  467. dynamics := []*model.CustomerDynameicsRep{}
  468. err = Model.Page(req.PageNum, req.PageSize).Where("cust_id = ", req.CustId).Order("id desc").Scan(&dynamics)
  469. dynamicsList := make(map[string][]*model.CustomerDynameicsRep)
  470. for _, v := range dynamics {
  471. gt1 := gtime.New(v.OpnDate)
  472. opnDate := gt1.Format("Y-m-d")
  473. dynamicsList[opnDate] = append(dynamicsList[opnDate], &model.CustomerDynameicsRep{
  474. OpnPeople: v.OpnPeople,
  475. OpnDate: v.OpnDate,
  476. OpnType: v.OpnType,
  477. OpnContent: v.OpnContent,
  478. })
  479. }
  480. g.Log().Info("DynamicsList----", dynamicsList)
  481. result = append(result, dynamicsList)
  482. return
  483. }
  484. //合并客户
  485. func (c *CustomerService) Mergecustomer(req *model.MergecustomerRep) (err error) {
  486. Model := c.Dao.M
  487. ContactModel := c.ContactDao.M
  488. BelongDao := c.BelongDao.M
  489. //当前目标客户是否存在
  490. FindOne, err := Model.Where(c.Dao.Columns.DeletedTime+" is null").Where(c.Dao.Columns.Id, req.Id).FindOne()
  491. if err != nil || FindOne.IsEmpty() {
  492. err = gerror.New("该数据不存在")
  493. return
  494. }
  495. //所选客户联系人信息
  496. List, err := ContactModel.Where(c.ContactDao.Columns.CustId+" in (?)", req.ChooseId).All()
  497. g.Log().Info("list", List.List())
  498. CustomertData := new(model.Customer)
  499. if err = gconv.Struct(req, CustomertData); err != nil {
  500. return
  501. }
  502. service.SetUpdatedInfo(CustomertData, c.GetCxtUserId(), c.GetCxtUserName())
  503. _, err = Model.FieldsEx(c.Dao.Columns.CreatedTime, c.Dao.Columns.CreatedBy,
  504. c.Dao.Columns.CreatedName, c.Dao.Columns.Id,
  505. c.Dao.Columns.CustCode,
  506. c.Dao.Columns.SalesName,
  507. c.Dao.Columns.SalesId).WherePri(c.Dao.Columns.Id, req.Id).Update(CustomertData)
  508. if err != nil {
  509. err = gerror.New("合并失败")
  510. return
  511. }
  512. Model.Data(g.Map{"deleted_time": gtime.Now()}).Where(c.ContactDao.Columns.Id+" in (?)", req.ChooseId).Update()
  513. if err != nil || List.Len() > 0 {
  514. err = c.contactInster(req.Id, req.ChooseId, List.List())
  515. if err != nil {
  516. err = gerror.New("合并失败")
  517. return
  518. }
  519. }
  520. ////所选客户销售联系人信息
  521. BelongList, err := BelongDao.Where(c.BelongDao.Columns.CustId+" in (?)", req.ChooseId).All()
  522. if err != nil || BelongList.Len() > 0 {
  523. err = c.belongInster(req.Id, req.ChooseId, req.Customer.SalesName)
  524. if err != nil {
  525. err = gerror.New("合并失败")
  526. return
  527. }
  528. }
  529. return
  530. }
  531. //联系人
  532. func (c *CustomerService) contactInster(id int, Ids []int64, list []map[string]interface{}) (err error) {
  533. ContactModel := c.ContactDao.M
  534. ContactModel.Data(g.Map{"deleted_time": gtime.Now()}).Where(c.ContactDao.Columns.CustId+" in (?)", Ids).Update()
  535. maps := []map[string]interface{}{}
  536. for _, v := range list {
  537. contact := map[string]interface{}{}
  538. contact["cust_id"] = id
  539. contact["cuct_name"] = v["cuct_name"]
  540. contact["cuct_gender"] = v["cuct_gender"]
  541. contact["postion"] = v["postion"]
  542. contact["telephone"] = v["telephone"]
  543. contact["wechat"] = v["wechat"]
  544. contact["email"] = v["email"]
  545. contact["policy"] = v["policy"]
  546. contact["remark"] = v["remark"]
  547. contact["created_by"] = v["created_by"]
  548. contact["created_name"] = v["created_name"]
  549. contact["created_time"] = v["created_time"]
  550. maps = append(maps, contact)
  551. }
  552. _, err = ContactModel.Insert(maps)
  553. if err != nil {
  554. err = gerror.New("操作失败")
  555. g.Log().Info("contactInster", err)
  556. return
  557. }
  558. return
  559. }
  560. //销售
  561. func (c *CustomerService) belongInster(Id int, BelongIds []int64, SaleName string) (err error) {
  562. BelongDao := c.BelongDao.M
  563. BelongDao.Data(g.Map{"deleted_time": gtime.Now()}).Where(c.BelongDao.Columns.CustId+" in (?)", BelongIds).Update()
  564. BelongData := new(model.CustCustomerBelong)
  565. BelongData.CustId = Id
  566. service.SetCreatedInfo(BelongData, c.GetCxtUserId(), c.GetCxtUserName())
  567. BelongData.SaleName = SaleName
  568. BelongData.OpnType = AllocaTion
  569. BelongData.OrigSaleName = ""
  570. BelongData.OpnPeople = "admin"
  571. BelongData.OpnDatetime = gtime.Now()
  572. _, err = BelongDao.Insert(BelongData)
  573. if err != nil {
  574. g.Log().Info("BeloongInster", err)
  575. err = gerror.New("操作失败")
  576. return
  577. }
  578. return
  579. }
  580. //批量插入客户归属记录表
  581. func (c *CustomerService) belongInsters(rep []map[string]interface{}, parameter map[string]string) (err error) {
  582. belongModel := c.BelongDao.M
  583. maps := []map[string]interface{}{}
  584. date_time := gtime.Now()
  585. for _, v := range rep {
  586. orig_sale_name := v["sales_name"]
  587. belong := map[string]interface{}{}
  588. belong["cust_id"] = v["id"].(int)
  589. belong["sale_name"] = parameter["sale_name"]
  590. belong["orig_sale_name"] = orig_sale_name
  591. belong["opn_type"] = parameter["opn_type"]
  592. belong["opn_people"] = 1
  593. belong["opn_datetime"] = date_time
  594. belong["created_by"] = 1
  595. belong["remark"] = parameter["remark"]
  596. belong["created_name"] = "admin"
  597. belong["created_time"] = date_time
  598. belong["opn_datetime"] = date_time
  599. maps = append(maps, belong)
  600. }
  601. _, err = belongModel.Insert(maps)
  602. if err != nil {
  603. err = gerror.New("插入失败")
  604. return err
  605. }
  606. return
  607. }