order.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. package service
  2. import (
  3. "errors"
  4. "fmt"
  5. "gas-cylinder-api/app/admin/model"
  6. "gas-cylinder-api/app/admin/service/dto"
  7. "gas-cylinder-api/common/actions"
  8. cDto "gas-cylinder-api/common/dto"
  9. "gas-cylinder-api/common/global"
  10. common "gas-cylinder-api/common/model"
  11. "gogs.baozhida.cn/zoie/OAuth-core/service"
  12. "gorm.io/gorm"
  13. "time"
  14. )
  15. type Order struct {
  16. service.Service
  17. }
  18. // GetPage 获取Order列表
  19. func (e *Order) GetPage(c *dto.OrderGetPageReq, list *[]model.Order, count *int64, p *actions.DataPermission) error {
  20. var err error
  21. var data model.Order
  22. err = e.Orm.Model(&data).
  23. Scopes(
  24. cDto.MakeCondition(c.GetNeedSearch()),
  25. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  26. actions.Permission(data.TableName(), p),
  27. ).
  28. Preload("Customer").Preload("Store").Preload("User").Preload("Goods").Preload("Spec").
  29. Find(list).Limit(-1).Offset(-1).
  30. Count(count).Error
  31. if err != nil {
  32. e.Log.Errorf("db error: %s", err)
  33. return global.GetFailedErr
  34. }
  35. return nil
  36. }
  37. func (e *Order) GetDeliveryPage(c *dto.OrderGetDeliveryPageReq, list *[]model.Order, count *int64, p *actions.DataPermission) error {
  38. var err error
  39. var data model.Order
  40. err = e.Orm.Model(&data).
  41. Scopes(
  42. cDto.MakeCondition(c.GetNeedSearch()),
  43. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  44. ).
  45. Where("user_id = ?", p.UserId).
  46. Preload("Customer").Preload("Store").Preload("Goods").Preload("Spec").
  47. Find(list).Limit(-1).Offset(-1).
  48. Count(count).Error
  49. if err != nil {
  50. e.Log.Errorf("db error: %s", err)
  51. return global.GetFailedErr
  52. }
  53. return nil
  54. }
  55. // Get 获取Order对象
  56. func (e *Order) Get(d *dto.OrderGetReq, orderModel *model.Order, p *actions.DataPermission) error {
  57. err := e.Orm.
  58. Scopes(actions.Permission(orderModel.TableName(), p)).
  59. First(orderModel, d.GetId()).Error
  60. if err != nil {
  61. e.Log.Errorf("db error: %s", err)
  62. if errors.Is(err, gorm.ErrRecordNotFound) {
  63. return global.GetNotFoundOrNoPermissionErr
  64. }
  65. return global.GetFailedErr
  66. }
  67. return nil
  68. }
  69. // Insert 创建Order对象
  70. func (e *Order) Insert(c *dto.OrderInsertReq) error {
  71. var err error
  72. var data model.Order
  73. tx := e.Orm.Begin()
  74. defer func() {
  75. if err != nil {
  76. tx.Rollback()
  77. } else {
  78. tx.Commit()
  79. }
  80. }()
  81. // 添加订单
  82. c.Generate(&data)
  83. err = tx.Create(&data).Error
  84. if err != nil {
  85. e.Log.Errorf("db error: %s", err)
  86. return global.CreateFailedErr
  87. }
  88. c.Id = data.Id
  89. return nil
  90. }
  91. // Update 修改Order对象
  92. func (e *Order) Update(c *dto.OrderUpdateReq, p *actions.DataPermission) error {
  93. var err error
  94. tx := e.Orm.Begin()
  95. defer func() {
  96. if err != nil {
  97. tx.Rollback()
  98. } else {
  99. tx.Commit()
  100. }
  101. }()
  102. var orderModel = model.Order{}
  103. // 查询订单是否存在
  104. err = e.Orm.Scopes(actions.Permission(orderModel.TableName(), p)).
  105. First(&orderModel, c.GetId()).Error
  106. if err != nil {
  107. e.Log.Errorf("db error: %s", err)
  108. if errors.Is(err, gorm.ErrRecordNotFound) {
  109. return global.UpdateNotFoundOrNoPermissionErr
  110. }
  111. return global.UpdateFailedErr
  112. }
  113. // 订单为未派送才可以取消
  114. c.Generate(&orderModel)
  115. err = tx.Save(&orderModel).Error
  116. if err != nil {
  117. e.Log.Errorf("db error: %s", err)
  118. return global.UpdateFailedErr
  119. }
  120. c.Id = orderModel.Id
  121. return nil
  122. }
  123. // Remove 删除Order
  124. func (e *Order) Remove(c *dto.OrderDeleteReq, p *actions.DataPermission) error {
  125. var err error
  126. tx := e.Orm.Begin()
  127. defer func() {
  128. if err != nil {
  129. tx.Rollback()
  130. } else {
  131. tx.Commit()
  132. }
  133. }()
  134. var orderModel model.Order
  135. // 查询订单是否存在
  136. err = e.Orm.Scopes(actions.Permission(orderModel.TableName(), p)).
  137. First(&orderModel, c.GetId()).Error
  138. if err != nil {
  139. e.Log.Errorf("db error: %s", err)
  140. if errors.Is(err, gorm.ErrRecordNotFound) {
  141. return nil
  142. }
  143. return global.DeleteFailedErr
  144. }
  145. if orderModel.State != model.OrderStateOrder && orderModel.State != model.OrderStateCancel {
  146. err = errors.New(fmt.Sprintf("订单状态为%s,无法删除", model.OrderStateMap[orderModel.State]))
  147. return err
  148. }
  149. db := tx.Delete(&orderModel)
  150. if err = db.Error; err != nil {
  151. e.Log.Errorf("db error: %s", err)
  152. return global.DeleteFailedErr
  153. }
  154. if db.RowsAffected == 0 {
  155. return global.DeleteNotFoundOrNoPermissionErr
  156. }
  157. return nil
  158. }
  159. func (e *Order) Cancel(c *dto.OrderCancelReq, p *actions.DataPermission) error {
  160. var err error
  161. tx := e.Orm.Begin()
  162. defer func() {
  163. if err != nil {
  164. tx.Rollback()
  165. } else {
  166. tx.Commit()
  167. }
  168. }()
  169. var orderModel model.Order
  170. // 查询订单是否存在
  171. err = e.Orm.Scopes(actions.Permission(orderModel.TableName(), p)).
  172. First(&orderModel, c.GetId()).Error
  173. if err != nil {
  174. e.Log.Errorf("db error: %s", err)
  175. if errors.Is(err, gorm.ErrRecordNotFound) {
  176. return global.UpdateNotFoundOrNoPermissionErr
  177. }
  178. return global.UpdateFailedErr
  179. }
  180. if orderModel.State == model.OrderStateCancel {
  181. return nil
  182. }
  183. if orderModel.State != model.OrderStateOrder {
  184. return errors.New(fmt.Sprintf("订单状态为%s,禁止取消", model.OrderStateMap[orderModel.State]))
  185. }
  186. orderModel.State = model.OrderStateCancel
  187. orderModel.CancelTime = common.Time(time.Now())
  188. db := tx.Save(&orderModel)
  189. if err = db.Error; err != nil {
  190. e.Log.Errorf("db error: %s", err)
  191. return global.UpdateFailedErr
  192. }
  193. if db.RowsAffected == 0 {
  194. return global.UpdateNotFoundOrNoPermissionErr
  195. }
  196. return nil
  197. }
  198. // Delivery 派单
  199. func (e *Order) Delivery(c *dto.OrderDeliveryReq, p *actions.DataPermission) error {
  200. var err error
  201. var orderModel = model.Order{}
  202. // 查询订单是否存在
  203. err = e.Orm.Scopes(actions.Permission(orderModel.TableName(), p)).
  204. First(&orderModel, c.GetId()).Error
  205. if err != nil {
  206. e.Log.Errorf("db error: %s", err)
  207. if errors.Is(err, gorm.ErrRecordNotFound) {
  208. return global.UpdateNotFoundOrNoPermissionErr
  209. }
  210. return global.UpdateFailedErr
  211. }
  212. c.Generate(&orderModel)
  213. err = e.Orm.Save(&orderModel).Error
  214. if err != nil {
  215. e.Log.Errorf("db error: %s", err)
  216. return global.UpdateFailedErr
  217. }
  218. c.Id = orderModel.Id
  219. return nil
  220. }
  221. // UpdateState 修改订单状态
  222. func (e *Order) UpdateState(c *dto.OrderUpdateStateReq, p *actions.DataPermission) error {
  223. var err error
  224. var orderModel = model.Order{}
  225. // 查询订单是否存在
  226. err = e.Orm.Scopes(actions.Permission(orderModel.TableName(), p)).
  227. Preload("User").Preload("Store").Preload("Dept").
  228. First(&orderModel, c.GetId()).Error
  229. if err != nil {
  230. e.Log.Errorf("db error: %s", err)
  231. if errors.Is(err, gorm.ErrRecordNotFound) {
  232. return global.UpdateNotFoundOrNoPermissionErr
  233. }
  234. return global.UpdateFailedErr
  235. }
  236. tx := e.Orm.Begin()
  237. defer func() {
  238. if err != nil {
  239. tx.Rollback()
  240. } else {
  241. tx.Commit()
  242. }
  243. }()
  244. c.Generate(&orderModel)
  245. // 配送中
  246. if c.State == model.OrderStateInDelivery {
  247. orderModel.DeliveryTime = common.Time(time.Now())
  248. }
  249. // 已送达
  250. if c.State == model.OrderStateArrive {
  251. orderModel.ArriveTime = common.Time(time.Now())
  252. err = InsertOperationLogByOptType26Or36(tx, "26", c.ChipUid, orderModel)
  253. if err != nil {
  254. e.Log.Errorf("db error: %s", err)
  255. return global.UpdateFailedErr
  256. }
  257. }
  258. // 已取消
  259. if c.State == model.OrderStateCancel && orderModel.State == model.OrderStateArrive {
  260. orderModel.CancelTime = common.Time(time.Now())
  261. err = InsertOperationLogByOptType26Or36(tx, "36", c.ChipUid, orderModel)
  262. if err != nil {
  263. e.Log.Errorf("db error: %s", err)
  264. return global.UpdateFailedErr
  265. }
  266. }
  267. err = e.Orm.Save(&orderModel).Error
  268. if err != nil {
  269. e.Log.Errorf("db error: %s", err)
  270. return global.UpdateFailedErr
  271. }
  272. c.Id = orderModel.Id
  273. return nil
  274. }