customer.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  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. )
  13. type Customer struct {
  14. service.Service
  15. }
  16. // GetPage 获取Customer列表
  17. func (e *Customer) GetPage(c *dto.CustomerGetPageReq, list *[]model.Customer, count *int64, p *actions.DataPermission) error {
  18. var err error
  19. var data model.Customer
  20. err = e.Orm.Model(&data).
  21. Scopes(
  22. cDto.MakeCondition(c.GetNeedSearch()),
  23. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  24. actions.Permission(data.TableName(), p),
  25. ).
  26. Find(list).Limit(-1).Offset(-1).
  27. Count(count).Error
  28. if err != nil {
  29. e.Log.Errorf("db error: %s", err)
  30. return global.GetFailedErr
  31. }
  32. return nil
  33. }
  34. // Get 获取Customer对象
  35. func (e *Customer) Get(d *dto.CustomerGetReq, CustomerModel *model.Customer) error {
  36. err := e.Orm.
  37. Where("id = ?", d.GetId()).
  38. First(CustomerModel).Error
  39. if err != nil {
  40. e.Log.Errorf("db error: %s", err)
  41. if errors.Is(err, gorm.ErrRecordNotFound) {
  42. return global.GetNotFoundOrNoPermissionErr
  43. }
  44. return global.GetFailedErr
  45. }
  46. return nil
  47. }
  48. func (e *Customer) GetByPhone(d *dto.CustomerGetByPhoneReq, CustomerModel *model.Customer, p *actions.DataPermission) error {
  49. err := e.Orm.
  50. Scopes(actions.Permission(CustomerModel.TableName(), p)).
  51. Where("principal_phone = ? and dept_id = ?", d.Phone, p.DeptId).
  52. First(CustomerModel).Error
  53. if err != nil {
  54. e.Log.Errorf("db error: %s", err)
  55. if errors.Is(err, gorm.ErrRecordNotFound) {
  56. return global.GetNotFoundErr
  57. }
  58. return global.GetFailedErr
  59. }
  60. return nil
  61. }
  62. func (e *Customer) GetBorrowGasCylinder(d *dto.CustomerGetBorrowGasCylinderReq, list *[]model.CustomerGasCylinder) error {
  63. var err error
  64. var data model.CustomerGasCylinder
  65. err = e.Orm.Model(&data).
  66. Where("customer_id = ?", d.CustomerId).
  67. Find(list).Error
  68. if err != nil {
  69. e.Log.Errorf("db error: %s", err)
  70. return global.GetFailedErr
  71. }
  72. return nil
  73. }
  74. // Insert 创建Customer对象
  75. func (e *Customer) Insert(c *dto.CustomerInsertReq) error {
  76. var err error
  77. var data model.Customer
  78. tx := e.Orm.Begin()
  79. defer func() {
  80. if err != nil {
  81. tx.Rollback()
  82. } else {
  83. tx.Commit()
  84. }
  85. }()
  86. var id string
  87. for {
  88. var count int64
  89. id = utils.GetUUID()
  90. var i int64
  91. err = tx.Model(&data).Where("id = ?", id).Count(&count).Error
  92. if err != nil {
  93. continue
  94. }
  95. if i == 0 {
  96. break
  97. }
  98. }
  99. // 添加客户
  100. c.Generate(&data)
  101. data.Id = id
  102. err = tx.Create(&data).Error
  103. if err != nil {
  104. e.Log.Errorf("db error: %s", err)
  105. return global.CreateFailedErr
  106. }
  107. // TODO 1.1.1.16新增客户信息
  108. c.Id = data.Id
  109. return nil
  110. }
  111. func (e *Customer) InsertOrUpdate(c *dto.CustomerInsertReq, p *actions.DataPermission) error {
  112. var err error
  113. var data model.Customer
  114. tx := e.Orm.Begin()
  115. defer func() {
  116. if err != nil {
  117. tx.Rollback()
  118. } else {
  119. tx.Commit()
  120. }
  121. }()
  122. err = e.Orm.
  123. Scopes(actions.Permission(data.TableName(), p)).
  124. Where("principal_phone = ? and dept_id = ?", c.PrincipalPhone, p.DeptId).
  125. First(&data).Error
  126. if err != nil {
  127. e.Log.Errorf("db error: %s", err)
  128. if errors.Is(err, gorm.ErrRecordNotFound) {
  129. // TODO 1.1.1.16新增客户信息
  130. // 添加客户
  131. var id string
  132. for {
  133. var count int64
  134. id = utils.GetUUID()
  135. var i int64
  136. err = tx.Model(&data).Where("id = ?", id).Count(&count).Error
  137. if err != nil {
  138. continue
  139. }
  140. if i == 0 {
  141. break
  142. }
  143. }
  144. c.Generate(&data)
  145. data.Id = id
  146. data.IsSyncProv = true
  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 e.CheckDataConsistency(*c, data) {
  159. c.Id = data.Id
  160. return nil
  161. }
  162. dataIntegrity := e.CheckDataIntegrity(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 = e.Orm.Scopes(actions.Permission(CustomerModel.TableName(), p)).
  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. c.Generate(&CustomerModel)
  203. // 检查数据完整性
  204. dataIntegrity := e.CheckDataIntegrity(CustomerModel)
  205. if dataIntegrity {
  206. CustomerModel.IsSyncProv = true
  207. }
  208. err = tx.Save(&CustomerModel).Error
  209. if err != nil {
  210. e.Log.Errorf("db error: %s", err)
  211. return global.UpdateFailedErr
  212. }
  213. // 检查数据完整性
  214. if dataIntegrity {
  215. // TODO 1.1.1.17更新客户信息
  216. }
  217. c.Id = CustomerModel.Id
  218. return nil
  219. }
  220. // Remove 删除Customer
  221. func (e *Customer) Remove(c *dto.CustomerDeleteReq, p *actions.DataPermission) error {
  222. var err error
  223. tx := e.Orm.Begin()
  224. defer func() {
  225. if err != nil {
  226. tx.Rollback()
  227. } else {
  228. tx.Commit()
  229. }
  230. }()
  231. var CustomerModel model.Customer
  232. // 查询客户是否存在
  233. err = e.Orm.Scopes(actions.Permission(CustomerModel.TableName(), p)).
  234. Where("id = ?", c.GetId()).
  235. First(&CustomerModel).Error
  236. if err != nil {
  237. e.Log.Errorf("db error: %s", err)
  238. if errors.Is(err, gorm.ErrRecordNotFound) {
  239. return global.DeleteNotFoundOrNoPermissionErr
  240. }
  241. return global.DeleteFailedErr
  242. }
  243. // TODO 1.1.1.18注销客户信息
  244. db := tx.Delete(&CustomerModel)
  245. if err = db.Error; err != nil {
  246. e.Log.Errorf("db error: %s", err)
  247. return global.DeleteFailedErr
  248. }
  249. if db.RowsAffected == 0 {
  250. return global.DeleteNotFoundOrNoPermissionErr
  251. }
  252. return nil
  253. }
  254. // 检查数据完整性,数据完整之后再上传省平台
  255. func (e *Customer) CheckDataIntegrity(customer model.Customer) bool {
  256. flag := true
  257. if customer.Address == "" {
  258. flag = false
  259. }
  260. if customer.AddressImg == "" {
  261. flag = false
  262. }
  263. if customer.Lng == 0 {
  264. flag = false
  265. }
  266. if customer.Lat == 0 {
  267. flag = false
  268. }
  269. switch customer.Type {
  270. case 0:
  271. if customer.ShopName == "" {
  272. flag = false
  273. }
  274. case 1:
  275. if customer.PrincipalName == "" {
  276. flag = false
  277. }
  278. }
  279. if customer.City == "" {
  280. flag = false
  281. }
  282. if customer.Area == "" {
  283. flag = false
  284. }
  285. return flag
  286. }
  287. // 检查数据一致性,数据一致则不更新,不上传省平台
  288. func (e *Customer) CheckDataConsistency(req dto.CustomerInsertReq, customer model.Customer) bool {
  289. flag := true
  290. // 0-商户 1-私人
  291. if customer.Type == 1 {
  292. if req.Name != customer.PrincipalName {
  293. flag = false
  294. }
  295. }
  296. if customer.Type == 0 {
  297. if req.Name != customer.ShopName {
  298. flag = false
  299. }
  300. }
  301. if req.PrincipalPhone != customer.PrincipalPhone {
  302. flag = false
  303. }
  304. if req.Address != customer.Address {
  305. flag = false
  306. }
  307. if req.Lng != customer.Lng {
  308. flag = false
  309. }
  310. if req.Lat != customer.Lat {
  311. flag = false
  312. }
  313. if req.Type != customer.Type {
  314. flag = false
  315. }
  316. if req.City != customer.City {
  317. flag = false
  318. }
  319. if req.Area != customer.Area {
  320. flag = false
  321. }
  322. if req.Remark != customer.Remark {
  323. flag = false
  324. }
  325. if req.StoreCode != customer.StoreCode {
  326. flag = false
  327. }
  328. return flag
  329. }