cust_customer.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. package cust
  2. import (
  3. "context"
  4. "strconv"
  5. "github.com/gogf/gf/errors/gerror"
  6. "github.com/gogf/gf/frame/g"
  7. "github.com/gogf/gf/os/gtime"
  8. "github.com/gogf/gf/util/gconv"
  9. "dashoo.cn/micro/app/dao/cust"
  10. model "dashoo.cn/micro/app/model/cust"
  11. "dashoo.cn/micro/app/service"
  12. )
  13. type customerService struct {
  14. *service.ContextService
  15. Dao *cust.CustCustomerDao
  16. BelongDao *cust.CustCustomerBelongDao
  17. DynamicsDao *cust.CustCustomerDynamicsDao
  18. }
  19. var isPublic, noPublic = "10", "20" // 公海,非公海
  20. var isTransfer int8 = 1 //转移
  21. var isAllocation int8 = 2 //分配 Allocation
  22. func NewCustomerService(ctx context.Context) (svc *customerService, err error) {
  23. svc = new(customerService)
  24. if svc.ContextService, err = svc.Init(ctx); err != nil {
  25. return nil, err
  26. }
  27. svc.Dao = cust.NewCustCustomerDao(svc.Tenant)
  28. svc.BelongDao = cust.NewCustCustomerBelongDao(svc.Tenant)
  29. svc.DynamicsDao = cust.NewCustCustomerDynamicsDao(svc.Tenant)
  30. return svc, nil
  31. }
  32. //创建客户
  33. func (c *customerService) Create(req *model.Customer) (insertId int64, err error) {
  34. cusTomer := new(model.CustCustomer)
  35. if err = gconv.Struct(req, cusTomer); err != nil {
  36. g.Log().Info("error", err)
  37. return
  38. }
  39. g.Log().Info(err)
  40. Model := c.Dao.M
  41. record, err := Model.Where(g.Map{"cust_name": req.CustName}).One()
  42. g.Log().Info("recordE", record.IsEmpty())
  43. if err != nil || !record.IsEmpty() {
  44. err = gerror.New("该客户信息已存在,不可重复添加")
  45. return
  46. }
  47. //OpnPeopleId int ` json:"opnPeopleId"` // 操作人ID
  48. //OpnPeople string ` json:"opnPeople"` // 操作人
  49. //OpnDate *gtime.Time ` json:"opnDate"` // 操作日期
  50. //OpnType string ` json:"opnType"` // 操作类型
  51. //OpnContent string ` json:"opnContent"` // 操作内容
  52. //c.OperationLog()
  53. g.Log().Info("部门ID", c.CxtUser.DeptId)
  54. service.SetCreatedInfo(cusTomer, c.GetCxtUserId(), c.GetCxtUserName())
  55. cusTomer.CustCode = strconv.Itoa(int(gtime.Timestamp()))
  56. cusTomer.IsPublic = isPublic
  57. //if c.CxtUser.DeptId == 2 {
  58. // cusTomer.IsPublic = noPublic // 非公海用户
  59. // cusTomer.DeptId = c.GetCxtUserDeptId() // 部门id
  60. // cusTomer.DeptId = c.GetCxtUserDeptId() // 部门名称
  61. // cusTomer.SalesId = c.GetCxtUserId() // 销售id
  62. // cusTomer.SalesName = c.GetCxtUserName() // 销售名称
  63. //}
  64. res, err := Model.Insert(cusTomer)
  65. if err != nil {
  66. g.Log().Error(err)
  67. err = gerror.New("创建失败")
  68. return
  69. }
  70. insertId, _ = res.LastInsertId()
  71. //销售人员创建条件成立 同步belong 表
  72. //custBelong := new(model.AddCustomerBelong)
  73. //custBelong.CustId = int(insertId)
  74. //custBelong.SaleName = "xxx"
  75. //custBelong.OpnPeople = "xxxx"
  76. //custBelong.OpnDatetime = gtime.Now()
  77. //err = c.CreateBelong()
  78. return
  79. }
  80. //销售人员创建 直接认领客户
  81. func (c *customerService) CreateBelong(req *model.AddCustomerBelong) (err error) {
  82. cusTomerBelong := new(model.CustCustomerBelong)
  83. if err = gconv.Struct(req, cusTomerBelong); err != nil {
  84. g.Log().Info("error", err)
  85. return
  86. }
  87. service.SetCreatedInfo(cusTomerBelong, c.GetCxtUserId(), c.GetCxtUserName())
  88. cusTomerBelong.OpnType = isPublic
  89. cusTomerBelong.OpnDatetime = gtime.Now()
  90. service.SetCreatedInfo(cusTomerBelong, c.GetCxtUserId(), c.GetCxtUserName())
  91. _, err = c.BelongDao.Insert(cusTomerBelong)
  92. if err != nil {
  93. g.Log().Error(err)
  94. err = gerror.New("创建失败")
  95. return
  96. }
  97. return nil
  98. }
  99. //客户列表列表
  100. func (c *customerService) GetList(req *model.CustCustomerSearchReq) (total int, customerList []*model.CustList, err error) {
  101. g.Log().Info("serverS", req)
  102. Model := c.Dao.M
  103. if !req.IsPublic {
  104. Model = Model.Where(c.Dao.Columns.SalesId, c.CxtUser.Id).Where(c.Dao.Columns.IsPublic, noPublic)
  105. } else {
  106. g.Log().Info("serverS", req)
  107. Model = Model.Where(c.Dao.Columns.IsPublic, isPublic)
  108. }
  109. //客户名称
  110. if req.CustName != "" {
  111. Model = Model.Where(c.Dao.Columns.CustName+" like ?", "%"+req.CustName+"%")
  112. }
  113. //客户编码
  114. if req.CustCode != "" {
  115. Model = Model.Where(c.Dao.Columns.CustCode+" like ?", "%"+req.CustCode+"%")
  116. }
  117. //客户行业
  118. if req.CustIndustry != "" {
  119. Model = Model.Where(c.Dao.Columns.CustIndustry+" like ?", "%"+req.CustIndustry+"%")
  120. }
  121. //客户级别
  122. if req.CustLevel != "" {
  123. Model = Model.Where(c.Dao.Columns.CustLevel, req.CustLevel)
  124. }
  125. total, err = Model.Fields().Count()
  126. if err != nil {
  127. g.Log().Error(err)
  128. err = gerror.New("获取总行数失败")
  129. return
  130. }
  131. if req.PageNum == 0 {
  132. req.PageNum = 1
  133. }
  134. err = Model.Page(req.PageNum, req.PageSize).Order("id desc").Scan(&customerList)
  135. return
  136. }
  137. //
  138. //分配客户
  139. func (c *customerService) DistriCustomer(req *model.DistriCustomer) error {
  140. /**
  141. 待写逻辑(销售总监或销售助理将公海客户分配给指定销售工程师)
  142. if c.user.id != 销售总监 || c.user.id!=销售助理 {
  143. err = gerror.New("该账号无权限操作!")
  144. return
  145. }
  146. */
  147. custModel := c.Dao.M
  148. rep, err := custModel.Where(cust.CustCustomer.Columns.Id+" in (?) ", req.Ids).Where(cust.CustCustomer.Columns.IsPublic, isPublic).All()
  149. if err != nil || rep.IsEmpty() {
  150. err = gerror.New("该数据不存在")
  151. return err
  152. }
  153. err = c.UpdateCustomer(req.Ids, req.SalesId, isAllocation)
  154. if err != nil {
  155. err = gerror.New("可配客户失败")
  156. return err
  157. }
  158. return nil
  159. }
  160. //客户详情
  161. func (c *customerService) GetEntityById(id int64) (entityInfo []*model.CustCustomer, err error) {
  162. Model := c.Dao.M
  163. err = Model.Where(cust.CustCustomer.Columns.Id, id).WithAll().Scan(&entityInfo)
  164. if err != nil {
  165. g.Log().Error(err)
  166. return nil, gerror.New("获取用户数据失败")
  167. }
  168. return
  169. }
  170. //转移客户
  171. func (c *customerService) UpdateBytransfer(req *model.CustSalesReq) (entityInfo []*model.CustCustomer, err error) {
  172. custModel := c.Dao.M
  173. rep, err := custModel.Fields("sales_id,sales_name,id").Where(cust.CustCustomer.Columns.Id+" in (?)", req.Ids).All()
  174. if err != nil || rep.IsEmpty() {
  175. err = gerror.New("该数据不存在")
  176. return
  177. }
  178. err = c.UpdateCustomer(req.Ids, req.SalesIds, isTransfer)
  179. if err != nil {
  180. err = gerror.New("转移客户失败")
  181. return
  182. }
  183. belongModel := c.BelongDao.M
  184. maps := []map[string]interface{}{}
  185. date_time := gtime.Now()
  186. for _, v := range rep {
  187. old_id := v.GMap().Get("id")
  188. orig_sale_name := v.GMap().Get("sales_name")
  189. g.Log().Info("orig_sale_name", orig_sale_name)
  190. belong := map[string]interface{}{}
  191. belong["cust_id"] = old_id.(int)
  192. belong["sale_name"] = ""
  193. belong["orig_sale_name"] = orig_sale_name
  194. belong["opn_type"] = "20"
  195. belong["opn_people"] = 1
  196. belong["opn_datetime"] = date_time
  197. belong["created_by"] = 1
  198. belong["remark"] = req.Remark
  199. belong["created_name"] = "admin"
  200. belong["created_time"] = date_time
  201. belong["opn_datetime"] = date_time
  202. maps = append(maps, belong)
  203. }
  204. _, err = belongModel.Insert(maps)
  205. if err != nil {
  206. err = gerror.New("转移客户失败")
  207. return
  208. }
  209. return
  210. }
  211. //变更客户所属关系
  212. func (c *customerService) UpdateCustomer(ids []int64, salesId int64, behavior int8) error {
  213. custModel := c.Dao.M
  214. custCustomerData := new(model.CustCustomer)
  215. custCustomerData.SalesId = int(salesId)
  216. switch behavior {
  217. case 1:
  218. custCustomerData.SalesName = "转移销售"
  219. custCustomerData.IsPublic = isPublic
  220. case 2:
  221. custCustomerData.SalesName = "分配销售"
  222. custCustomerData.IsPublic = noPublic
  223. }
  224. service.SetUpdatedInfo(custCustomerData, c.GetCxtUserId(), c.GetCxtUserName())
  225. _, err := custModel.FieldsEx(
  226. cust.CustCustomer.Columns.CustCode,
  227. cust.CustCustomer.Columns.CustName,
  228. cust.CustCustomer.Columns.AbbrName,
  229. cust.CustCustomer.Columns.CustLocation,
  230. cust.CustCustomer.Columns.Id,
  231. cust.CustCustomer.Columns.CustAddress,
  232. cust.CustCustomer.Columns.CreatedTime,
  233. cust.CustCustomer.Columns.CustStatus,
  234. cust.CustCustomer.Columns.CreatedBy,
  235. cust.CustCustomer.Columns.CreatedName).
  236. WherePri(cust.CustCustomer.Columns.Id+" in (?)", ids).Update(custCustomerData)
  237. if err != nil {
  238. g.Log().Error(err)
  239. err = gerror.New("变更失败")
  240. return err
  241. }
  242. return nil
  243. }
  244. //客户操作日志
  245. func (c *customerService) OperationLog(req *model.AddCustomerDynameicsReq) (err error) {
  246. cusDynameics := new(model.CustCustomerDynamics)
  247. if err = gconv.Struct(req, cusDynameics); err != nil {
  248. g.Log().Info("error", err)
  249. return
  250. }
  251. Model := c.Dao.M
  252. service.SetCreatedInfo(cusDynameics, c.GetCxtUserId(), c.GetCxtUserName())
  253. _, err = Model.Insert(cusDynameics)
  254. if err != nil {
  255. g.Log().Error(err)
  256. err = gerror.New("创建失败")
  257. return
  258. }
  259. return
  260. }
  261. //日志详情
  262. func (c *customerService) OperationLogInfo(id int64) (dynamics *model.CustomerDynameicsRep, err error) {
  263. Model := c.Dao.M
  264. err = Model.Where(cust.CustCustomerDynamics.Columns.Id, id).Scan(&dynamics)
  265. if err != nil {
  266. g.Log().Error(err)
  267. return nil, gerror.New("获取用户数据失败")
  268. }
  269. return
  270. }