car_info.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  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/service"
  10. "gorm.io/gorm"
  11. )
  12. type CarInfo struct {
  13. service.Service
  14. }
  15. func CarInfoStartTransportTimeScopes(startTransportTime string) func(db *gorm.DB) *gorm.DB {
  16. return func(db *gorm.DB) *gorm.DB {
  17. if len(startTransportTime) == 0 {
  18. return db
  19. }
  20. return db.Where("JSON_EXTRACT(prov_car_info, '$.transportTime') >= ? ", startTransportTime)
  21. }
  22. }
  23. func CarInfoEndTransportTimeScopes(endTransportTime string) func(db *gorm.DB) *gorm.DB {
  24. return func(db *gorm.DB) *gorm.DB {
  25. if len(endTransportTime) == 0 {
  26. return db
  27. }
  28. return db.Where("JSON_EXTRACT(prov_car_info, '$.transportTime') <= ? ", endTransportTime)
  29. }
  30. }
  31. // GetPage 获取CarInfo列表
  32. func (e *CarInfo) GetPage(c *dto.CarInfoGetPageReq, list *[]model.CarInfo, count *int64, p *actions.DataPermission) error {
  33. var err error
  34. var data model.CarInfo
  35. err = e.Orm.Model(&data).
  36. Scopes(
  37. CarInfoStartTransportTimeScopes(c.StartTransportTime),
  38. CarInfoEndTransportTimeScopes(c.EndTransportTime),
  39. cDto.MakeCondition(c.GetNeedSearch()),
  40. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  41. actions.Permission(data.TableName(), p),
  42. ).Preload("TruckUserCarInfo.User").
  43. Find(list).Limit(-1).Offset(-1).
  44. Count(count).Error
  45. if err != nil {
  46. e.Log.Errorf("db error: %s", err)
  47. return global.GetFailedErr
  48. }
  49. return nil
  50. }
  51. // Get 获取CarInfo对象
  52. func (e *CarInfo) Get(d *dto.CarInfoGetReq, carInfoModel *model.CarInfo, p *actions.DataPermission) error {
  53. err := e.Orm.
  54. Scopes(actions.Permission(carInfoModel.TableName(), p)).
  55. First(carInfoModel, d.GetId()).Error
  56. if err != nil {
  57. e.Log.Errorf("db error: %s", err)
  58. if errors.Is(err, gorm.ErrRecordNotFound) {
  59. return global.GetNotFoundOrNoPermissionErr
  60. }
  61. return global.GetFailedErr
  62. }
  63. return nil
  64. }
  65. // Insert 创建CarInfo对象
  66. func (e *CarInfo) Insert(c *dto.CarInfoInsertReq) error {
  67. var err error
  68. var data model.CarInfo
  69. tx := e.Orm.Begin()
  70. defer func() {
  71. if err != nil {
  72. tx.Rollback()
  73. } else {
  74. tx.Commit()
  75. }
  76. }()
  77. // TODO 1.1.1.12新运输增车辆信息
  78. // 查询车辆信息是否存在
  79. err = e.Orm.Where("car_no = ?", c.ProvCarInfo.CarNo).First(&data).Error
  80. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  81. e.Log.Errorf("db error: %s", err)
  82. return global.CreateFailedErr
  83. }
  84. if data.Id > 0 {
  85. return errors.New("车辆信息已存在")
  86. }
  87. // 添加车辆信息
  88. c.Generate(&data)
  89. err = tx.Create(&data).Error
  90. if err != nil {
  91. e.Log.Errorf("db error: %s", err)
  92. return global.CreateFailedErr
  93. }
  94. c.Id = data.Id
  95. return nil
  96. }
  97. // Update 修改CarInfo对象
  98. func (e *CarInfo) Update(c *dto.CarInfoUpdateReq, p *actions.DataPermission) error {
  99. var err error
  100. tx := e.Orm.Begin()
  101. defer func() {
  102. if err != nil {
  103. tx.Rollback()
  104. } else {
  105. tx.Commit()
  106. }
  107. }()
  108. var carInfoModel = model.CarInfo{}
  109. // 查询车辆信息是否存在
  110. err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
  111. First(&carInfoModel, c.GetId()).Error
  112. if err != nil {
  113. e.Log.Errorf("db error: %s", err)
  114. if errors.Is(err, gorm.ErrRecordNotFound) {
  115. return global.UpdateNotFoundOrNoPermissionErr
  116. }
  117. return global.UpdateFailedErr
  118. }
  119. // TODO 1.1.1.13更新车辆信息
  120. c.Generate(&carInfoModel)
  121. err = tx.Save(&carInfoModel).Error
  122. if err != nil {
  123. e.Log.Errorf("db error: %s", err)
  124. return global.UpdateFailedErr
  125. }
  126. c.Id = carInfoModel.Id
  127. return nil
  128. }
  129. // Remove 删除CarInfo
  130. func (e *CarInfo) Remove(c *dto.CarInfoDeleteReq, p *actions.DataPermission) error {
  131. var err error
  132. tx := e.Orm.Begin()
  133. defer func() {
  134. if err != nil {
  135. tx.Rollback()
  136. } else {
  137. tx.Commit()
  138. }
  139. }()
  140. var carInfoModel model.CarInfo
  141. // 查询车辆信息是否存在
  142. err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
  143. First(&carInfoModel, c.GetId()).Error
  144. if err != nil {
  145. e.Log.Errorf("db error: %s", err)
  146. if errors.Is(err, gorm.ErrRecordNotFound) {
  147. return global.DeleteNotFoundOrNoPermissionErr
  148. }
  149. return global.DeleteFailedErr
  150. }
  151. // TODO 1.1.1.14注销车辆信息
  152. db := tx.Delete(&carInfoModel)
  153. if err = db.Error; err != nil {
  154. e.Log.Errorf("db error: %s", err)
  155. return global.DeleteFailedErr
  156. }
  157. if db.RowsAffected == 0 {
  158. return global.DeleteNotFoundOrNoPermissionErr
  159. }
  160. return nil
  161. }
  162. func (e *CarInfo) BindTruckUser(c *dto.CarInfoBindTruckUserReq) error {
  163. var err error
  164. var data model.TruckUserCarInfo
  165. tx := e.Orm.Begin()
  166. defer func() {
  167. if err != nil {
  168. tx.Rollback()
  169. } else {
  170. tx.Commit()
  171. }
  172. }()
  173. // 查询车辆是否绑定了其他货车司机
  174. var truckUserCarInfo = model.TruckUserCarInfo{}
  175. // 查询车辆信息是否存在
  176. err = e.Orm.Where("car_no = ?", c.CarNo).First(&truckUserCarInfo).Error
  177. if err != nil {
  178. e.Log.Errorf("db error: %s", err)
  179. if errors.Is(err, gorm.ErrRecordNotFound) {
  180. data.ProvUserId = c.UserId
  181. data.CarNo = c.CarNo
  182. err = tx.Create(&data).Error
  183. if err != nil {
  184. e.Log.Errorf("db error: %s", err)
  185. return global.CreateFailedErr
  186. }
  187. // TODO 1.1.1.15货车司机绑定车辆信息
  188. c.CarNo = data.CarNo
  189. return nil
  190. }
  191. return global.UpdateFailedErr
  192. }
  193. // TODO 1.1.1.15货车司机绑定车辆信息
  194. truckUserCarInfo.ProvUserId = c.UserId
  195. err = tx.Updates(&truckUserCarInfo).Error
  196. if err != nil {
  197. e.Log.Errorf("db error: %s", err)
  198. return global.CreateFailedErr
  199. }
  200. c.CarNo = data.CarNo
  201. return nil
  202. }