cust_customer.go 19 KB

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