cust_customer.go 19 KB

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