customer.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. package service
  2. import (
  3. "errors"
  4. "gas-cylinder-api/app/admin/model"
  5. "gas-cylinder-api/app/admin/service/dto"
  6. "gas-cylinder-api/common/actions"
  7. cDto "gas-cylinder-api/common/dto"
  8. "gas-cylinder-api/common/global"
  9. "gogs.baozhida.cn/zoie/OAuth-core/pkg/utils"
  10. "gogs.baozhida.cn/zoie/OAuth-core/service"
  11. "gorm.io/gorm"
  12. "strings"
  13. )
  14. type Customer struct {
  15. service.Service
  16. }
  17. // GetPage 获取Customer列表
  18. func (e *Customer) GetPage(c *dto.CustomerGetPageReq, list *[]model.Customer, count *int64, p *actions.DataPermission) error {
  19. var err error
  20. var data model.Customer
  21. err = e.Orm.Model(&data).
  22. Scopes(
  23. cDto.MakeCondition(c.GetNeedSearch()),
  24. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  25. InDeptIdScopes(p.DeptId),
  26. ).
  27. Find(list).Limit(-1).Offset(-1).
  28. Count(count).Error
  29. if err != nil {
  30. e.Log.Errorf("db error: %s", err)
  31. return global.GetFailedErr
  32. }
  33. return nil
  34. }
  35. // Get 获取Customer对象
  36. func (e *Customer) Get(d *dto.CustomerGetReq, CustomerModel *model.Customer) error {
  37. err := e.Orm.
  38. Where("id = ?", d.GetId()).
  39. First(CustomerModel).Error
  40. if err != nil {
  41. e.Log.Errorf("db error: %s", err)
  42. if errors.Is(err, gorm.ErrRecordNotFound) {
  43. return global.GetNotFoundOrNoPermissionErr
  44. }
  45. return global.GetFailedErr
  46. }
  47. return nil
  48. }
  49. func (e *Customer) GetByPhone(d *dto.CustomerGetByPhoneReq, CustomerModel *model.Customer, p *actions.DataPermission) error {
  50. err := e.Orm.
  51. Scopes(actions.Permission(CustomerModel.TableName(), p)).
  52. Where("principal_phone = ? and dept_id = ?", d.Phone, p.DeptId).
  53. First(CustomerModel).Error
  54. if err != nil {
  55. e.Log.Errorf("db error: %s", err)
  56. if errors.Is(err, gorm.ErrRecordNotFound) {
  57. return global.GetNotFoundErr
  58. }
  59. return global.GetFailedErr
  60. }
  61. return nil
  62. }
  63. func (e *Customer) GetBorrowGasCylinder(d *dto.CustomerGetBorrowGasCylinderReq, list *[]model.CustomerGasCylinder) error {
  64. var err error
  65. var data model.CustomerGasCylinder
  66. err = e.Orm.Model(&data).
  67. Where("customer_id = ?", d.CustomerId).
  68. Find(list).Error
  69. if err != nil {
  70. e.Log.Errorf("db error: %s", err)
  71. return global.GetFailedErr
  72. }
  73. return nil
  74. }
  75. // Insert 创建Customer对象
  76. func (e *Customer) Insert(c *dto.CustomerInsertReq) error {
  77. var err error
  78. var data model.Customer
  79. tx := e.Orm.Begin()
  80. defer func() {
  81. if err != nil {
  82. tx.Rollback()
  83. } else {
  84. tx.Commit()
  85. }
  86. }()
  87. var id string
  88. for {
  89. var count int64
  90. id = utils.GetUUID()
  91. var i int64
  92. err = tx.Model(&data).Where("id = ?", id).Count(&count).Error
  93. if err != nil {
  94. continue
  95. }
  96. if i == 0 {
  97. break
  98. }
  99. }
  100. // 添加客户
  101. c.Generate(&data)
  102. data.Id = id
  103. err = tx.Create(&data).Error
  104. if err != nil {
  105. e.Log.Errorf("db error: %s", err)
  106. return global.CreateFailedErr
  107. }
  108. // TODO 1.1.1.16新增客户信息
  109. c.Id = data.Id
  110. return nil
  111. }
  112. func (e *Customer) InsertOrUpdate(c *dto.CustomerInsertReq, p *actions.DataPermission) error {
  113. var err error
  114. var data model.Customer
  115. tx := e.Orm.Begin()
  116. defer func() {
  117. if err != nil {
  118. tx.Rollback()
  119. } else {
  120. tx.Commit()
  121. }
  122. }()
  123. err = e.Orm.
  124. Scopes(actions.Permission(data.TableName(), p)).
  125. Where("principal_phone = ? and dept_id = ?", c.PrincipalPhone, p.DeptId).
  126. First(&data).Error
  127. if err != nil {
  128. e.Log.Errorf("db error: %s", err)
  129. if errors.Is(err, gorm.ErrRecordNotFound) {
  130. // TODO 1.1.1.16新增客户信息
  131. // 添加客户
  132. var id string
  133. for {
  134. var count int64
  135. id = utils.GetUUID()
  136. var i int64
  137. err = tx.Model(&data).Where("id = ?", id).Count(&count).Error
  138. if err != nil {
  139. continue
  140. }
  141. if i == 0 {
  142. break
  143. }
  144. }
  145. c.Generate(&data)
  146. data.Id = id
  147. err = tx.Create(&data).Error
  148. if err != nil {
  149. e.Log.Errorf("db error: %s", err)
  150. return global.CreateFailedErr
  151. }
  152. c.Id = data.Id
  153. return nil
  154. }
  155. return global.GetFailedErr
  156. }
  157. // 数据一致则不更新
  158. if CustomerCheckDataConsistency(*c, data) {
  159. c.Id = data.Id
  160. return nil
  161. }
  162. dataIntegrity := CustomerCheckDataIntegrity(data)
  163. if dataIntegrity {
  164. data.IsSyncProv = true
  165. }
  166. // 更新客户信息
  167. c.Generate(&data)
  168. err = tx.Save(&data).Error
  169. if err != nil {
  170. e.Log.Errorf("db error: %s", err)
  171. return global.UpdateFailedErr
  172. }
  173. c.Id = data.Id
  174. if dataIntegrity {
  175. // TODO 1.1.1.17更新客户信息
  176. }
  177. return nil
  178. }
  179. // Update 修改Customer对象
  180. func (e *Customer) Update(c *dto.CustomerUpdateReq, p *actions.DataPermission) error {
  181. var err error
  182. tx := e.Orm.Begin()
  183. defer func() {
  184. if err != nil {
  185. tx.Rollback()
  186. } else {
  187. tx.Commit()
  188. }
  189. }()
  190. var CustomerModel = model.Customer{}
  191. // 查询客户是否存在
  192. err = tx.Scopes(InDeptIdScopes(p.DeptId)).
  193. Where("id = ?", c.GetId()).
  194. First(&CustomerModel).Error
  195. if err != nil {
  196. e.Log.Errorf("db error: %s", err)
  197. if errors.Is(err, gorm.ErrRecordNotFound) {
  198. return global.UpdateNotFoundOrNoPermissionErr
  199. }
  200. return global.UpdateFailedErr
  201. }
  202. if strings.Contains(c.Id, "_") {
  203. // 小程序下单用户
  204. customer_id := strings.Split(c.Id, "_")[0]
  205. if len(c.AddressImg) > 0 {
  206. err = tx.Model(model.Address{}).Where("customer_id like ? and city = ? and area = ? and address = ?",
  207. customer_id+"%", c.City, c.Area, c.Address).Update("address_img", c.AddressImg).Error
  208. }
  209. }
  210. c.Generate(&CustomerModel)
  211. // 检查数据完整性
  212. dataIntegrity := CustomerCheckDataIntegrity(CustomerModel)
  213. if dataIntegrity {
  214. CustomerModel.IsSyncProv = true
  215. }
  216. err = tx.Save(&CustomerModel).Error
  217. if err != nil {
  218. e.Log.Errorf("db error: %s", err)
  219. return global.UpdateFailedErr
  220. }
  221. // 检查数据完整性
  222. if dataIntegrity {
  223. // TODO 1.1.1.17更新客户信息
  224. }
  225. c.Id = CustomerModel.Id
  226. return nil
  227. }
  228. // Remove 删除Customer
  229. func (e *Customer) Remove(c *dto.CustomerDeleteReq, p *actions.DataPermission) error {
  230. var err error
  231. tx := e.Orm.Begin()
  232. defer func() {
  233. if err != nil {
  234. tx.Rollback()
  235. } else {
  236. tx.Commit()
  237. }
  238. }()
  239. var CustomerModel model.Customer
  240. // 查询客户是否存在
  241. err = e.Orm.Scopes(actions.Permission(CustomerModel.TableName(), p)).
  242. Where("id = ?", c.GetId()).
  243. First(&CustomerModel).Error
  244. if err != nil {
  245. e.Log.Errorf("db error: %s", err)
  246. if errors.Is(err, gorm.ErrRecordNotFound) {
  247. return global.DeleteNotFoundOrNoPermissionErr
  248. }
  249. return global.DeleteFailedErr
  250. }
  251. // TODO 1.1.1.18注销客户信息
  252. db := tx.Delete(&CustomerModel)
  253. if err = db.Error; err != nil {
  254. e.Log.Errorf("db error: %s", err)
  255. return global.DeleteFailedErr
  256. }
  257. if db.RowsAffected == 0 {
  258. return global.DeleteNotFoundOrNoPermissionErr
  259. }
  260. return nil
  261. }
  262. // 检查数据完整性,数据完整之后再上传省平台
  263. func CustomerCheckDataIntegrity(customer model.Customer) bool {
  264. flag := true
  265. if customer.Address == "" {
  266. flag = false
  267. }
  268. if customer.AddressImg == "" {
  269. flag = false
  270. }
  271. if customer.Lng == 0 {
  272. flag = false
  273. }
  274. if customer.Lat == 0 {
  275. flag = false
  276. }
  277. switch customer.Type {
  278. case 0:
  279. if customer.ShopName == "" {
  280. flag = false
  281. }
  282. case 1:
  283. if customer.PrincipalName == "" {
  284. flag = false
  285. }
  286. }
  287. if customer.City == "" {
  288. flag = false
  289. }
  290. if customer.Area == "" {
  291. flag = false
  292. }
  293. return flag
  294. }
  295. // 检查数据一致性,数据一致则不更新,不上传省平台
  296. func CustomerCheckDataConsistency(req dto.CustomerInsertReq, customer model.Customer) bool {
  297. flag := true
  298. // 0-商户 1-私人
  299. if customer.Type == 1 {
  300. if req.Name != customer.PrincipalName {
  301. flag = false
  302. }
  303. }
  304. if customer.Type == 0 {
  305. if req.Name != customer.ShopName {
  306. flag = false
  307. }
  308. }
  309. if req.PrincipalPhone != customer.PrincipalPhone {
  310. flag = false
  311. }
  312. if req.Address != customer.Address {
  313. flag = false
  314. }
  315. if req.Lng != customer.Lng {
  316. flag = false
  317. }
  318. if req.Lat != customer.Lat {
  319. flag = false
  320. }
  321. if req.Type != customer.Type {
  322. flag = false
  323. }
  324. if req.City != customer.City {
  325. flag = false
  326. }
  327. if req.Area != customer.Area {
  328. flag = false
  329. }
  330. if req.Remark != customer.Remark {
  331. flag = false
  332. }
  333. if req.StoreCode != customer.StoreCode {
  334. flag = false
  335. }
  336. return flag
  337. }
  338. // Update 修改Customer对象
  339. func (e *Customer) AppletUpdate(c *dto.AppletCustomerUpdateReq) error {
  340. var err error
  341. tx := e.Orm.Begin()
  342. defer func() {
  343. if err != nil {
  344. tx.Rollback()
  345. } else {
  346. tx.Commit()
  347. }
  348. }()
  349. var CustomerModel = model.Customer{}
  350. // 查询客户是否存在
  351. err = e.Orm.Where("id = ?", c.GetId()).
  352. First(&CustomerModel).Error
  353. if err != nil {
  354. e.Log.Errorf("db error: %s", err)
  355. if errors.Is(err, gorm.ErrRecordNotFound) {
  356. return global.UpdateNotFoundOrNoPermissionErr
  357. }
  358. return global.UpdateFailedErr
  359. }
  360. // 同步该手机用户在其他公司下的客户信息
  361. customerList := make([]model.Customer, 0)
  362. // 查询客户是否存在
  363. err = tx.Where("id like ?", c.Id+"%").
  364. Find(&customerList).Error
  365. if err != nil {
  366. e.Log.Errorf("db error: %s", err)
  367. return global.UpdateFailedErr
  368. }
  369. for _, customer := range customerList {
  370. customer.Name = c.Name
  371. customer.PrincipalPhone = c.PrincipalPhone
  372. customer.Type = c.Type
  373. if c.Type == 0 {
  374. customer.ShopName = c.Name
  375. }
  376. if c.Type == 1 {
  377. customer.PrincipalName = c.Name
  378. }
  379. // 检查数据完整性
  380. dataIntegrity := CustomerCheckDataIntegrity(customer)
  381. if dataIntegrity {
  382. // TODO 同步省平台 更新客户信息
  383. CustomerModel.IsSyncProv = true
  384. }
  385. err = tx.Save(&customer).Error
  386. if err != nil {
  387. e.Log.Errorf("db error: %s", err)
  388. return global.UpdateFailedErr
  389. }
  390. }
  391. c.Id = CustomerModel.Id
  392. return nil
  393. }