operation_log.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  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. cModel "gas-cylinder-api/common/model"
  10. log "gogs.baozhida.cn/zoie/OAuth-core/logger"
  11. "gogs.baozhida.cn/zoie/OAuth-core/service"
  12. "gorm.io/gorm/utils"
  13. "gorm.io/gorm"
  14. "time"
  15. )
  16. type OperationLog struct {
  17. service.Service
  18. }
  19. // GetPage 获取OperationLog列表
  20. func (e *OperationLog) GetPage(c *dto.OperationLogGetPageReq, list *[]model.OperationLog, count *int64, p *actions.DataPermission) error {
  21. var err error
  22. var data model.OperationLog
  23. err = e.Orm.Model(&data).
  24. Scopes(
  25. cDto.MakeCondition(c.GetNeedSearch()),
  26. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  27. actions.Permission(data.TableName(), p),
  28. ).
  29. Preload("OptUserObj").
  30. Preload("ObjectUserObj").
  31. Preload("ObjectCustomerObj").
  32. Preload("OptCustomerObj").
  33. Preload("CompanyObj").
  34. Preload("CurrentEnterpriseObj").
  35. Preload("CurrentStationObj").
  36. Preload("CurrentStoreObj").
  37. Preload("CurrentTruckObj").
  38. Preload("CurrentAddressObj").
  39. Find(list).Limit(-1).Offset(-1).
  40. Count(count).Error
  41. if err != nil {
  42. e.Log.Errorf("db error: %s", err)
  43. return global.GetFailedErr
  44. }
  45. return nil
  46. }
  47. // Get 获取OperationLog对象
  48. func (e *OperationLog) Get(d *dto.OperationLogGetReq, carInfoModel *model.OperationLog, p *actions.DataPermission) error {
  49. err := e.Orm.
  50. Scopes(actions.Permission(carInfoModel.TableName(), p)).
  51. First(carInfoModel, d.GetId()).Error
  52. if err != nil {
  53. e.Log.Errorf("db error: %s", err)
  54. if errors.Is(err, gorm.ErrRecordNotFound) {
  55. return global.GetNotFoundOrNoPermissionErr
  56. }
  57. return global.GetFailedErr
  58. }
  59. return nil
  60. }
  61. // Insert 创建OperationLog对象
  62. func (e *OperationLog) Insert(c *dto.OperationLogInsertReq, p *actions.DataPermission) error {
  63. var err error
  64. data := make([]model.OperationLog, 0)
  65. //company, err := model.GetProvCodeById(p.DeptId)
  66. if err != nil {
  67. e.Log.Errorf("db error: %s", err)
  68. return global.CreateFailedErr
  69. }
  70. user, err := model.GetUserCode(p.UserId)
  71. if err != nil {
  72. e.Log.Errorf("db error: %s", err)
  73. return global.CreateFailedErr
  74. }
  75. tx := e.Orm.Begin()
  76. defer func() {
  77. if err != nil {
  78. tx.Rollback()
  79. } else {
  80. tx.Commit()
  81. }
  82. }()
  83. switch c.OptType {
  84. case "25", "27":
  85. // 送气员领重瓶
  86. // 查询门店
  87. store, err := model.GetDeptByCmpCode(c.CurrentEnterprise)
  88. if err != nil {
  89. tx.Rollback()
  90. log.Errorf("db error: %s", err)
  91. return errors.New("获取门店信息失败")
  92. }
  93. for _, chipUid := range c.ChipUidList {
  94. // 1、通过高频ID查询气瓶内编码
  95. var gasCylinder model.GasCylinder
  96. err = tx.Where("uid = ?", chipUid).First(&gasCylinder).Error
  97. if err != nil {
  98. tx.Rollback()
  99. log.Errorf("db error: %s", err)
  100. return global.CreateFailedErr
  101. }
  102. operationLog := model.OperationLog{
  103. ProvOperationLog: model.ProvOperationLog{
  104. InnerCode: gasCylinder.InnerCode,
  105. OptType: c.OptType,
  106. OptUser: user.ProvUserId,
  107. CompanyId: user.ProvUser.CmpCode,
  108. CurrentEnterprise: user.ProvUser.CmpCode,
  109. CurrentStore: store.CmpCode,
  110. Lng: utils.ToString(store.ProvStore.Lng),
  111. Lat: utils.ToString(store.ProvStore.Lat),
  112. OptTime: time.Now().Format("2006-01-02 15:04:05"),
  113. },
  114. ControlBy: cModel.ControlBy{
  115. CreateBy: p.UserId,
  116. },
  117. DeptBy: cModel.DeptBy{
  118. DeptId: p.DeptId,
  119. },
  120. }
  121. data = append(data, operationLog)
  122. if c.OptType == "27" {
  123. // 修改用户关联的气瓶信息
  124. var cgc model.CustomerGasCylinder
  125. err = tx.Where("inner_code = ? and state = 1", gasCylinder.InnerCode).First(&cgc).Error
  126. if err != nil {
  127. tx.Rollback()
  128. log.Errorf("db error: %s", err)
  129. return global.CreateFailedErr
  130. }
  131. cgc.ReturnTime = cModel.Time(time.Now())
  132. cgc.State = 2
  133. err = tx.Save(&cgc).Error
  134. if err != nil {
  135. tx.Rollback()
  136. log.Errorf("db error: %s", err)
  137. return global.CreateFailedErr
  138. }
  139. }
  140. }
  141. case "6", "10", "21", "31", "33", "34", "35", "37":
  142. // 门店端
  143. for _, chipUid := range c.ChipUidList {
  144. // 1、通过高频ID查询气瓶内编码
  145. var gasCylinder model.GasCylinder
  146. err = tx.Where("uid = ?", chipUid).First(&gasCylinder).Error
  147. if err != nil {
  148. tx.Rollback()
  149. log.Errorf("db error: %s", err)
  150. return global.CreateFailedErr
  151. }
  152. if c.OptType == "21" {
  153. err = tx.Model(&model.OperationLog{}).Where("inner_code = ? and state = 1", gasCylinder.InnerCode).Updates(map[string]int{
  154. "state": 2,
  155. }).Error
  156. if err != nil {
  157. tx.Rollback()
  158. log.Errorf("db error: %s", err)
  159. return global.CreateFailedErr
  160. }
  161. }
  162. operationLog := model.OperationLog{
  163. ProvOperationLog: model.ProvOperationLog{
  164. InnerCode: gasCylinder.InnerCode,
  165. OptType: c.OptType,
  166. OptUser: user.ProvUserId,
  167. CompanyId: user.ProvUser.CmpCode,
  168. CurrentEnterprise: user.ProvUser.CmpCode,
  169. CurrentStore: user.ProvUser.CmpCode,
  170. Lng: utils.ToString(user.Dept.ProvStore.Lng),
  171. Lat: utils.ToString(user.Dept.ProvStore.Lat),
  172. OptTime: time.Now().Format("2006-01-02 15:04:05"),
  173. },
  174. ControlBy: cModel.ControlBy{
  175. CreateBy: p.UserId,
  176. },
  177. DeptBy: cModel.DeptBy{
  178. DeptId: p.DeptId,
  179. },
  180. }
  181. data = append(data, operationLog)
  182. }
  183. case "11", "12", "16", "17", "19":
  184. // 司机端
  185. for _, chipUid := range c.ChipUidList {
  186. // 1、通过高频ID查询气瓶内编码
  187. var gasCylinder model.GasCylinder
  188. err = tx.Where("uid = ?", chipUid).First(&gasCylinder).Error
  189. if err != nil {
  190. tx.Rollback()
  191. e.Log.Errorf("获取气瓶信息失败: %s", err)
  192. return errors.New("获取气瓶信息失败")
  193. }
  194. var truckUserCarInfo model.TruckUserCarInfo
  195. err = tx.Where("prov_user_id = ?", user.ProvUserId).First(&truckUserCarInfo).Error
  196. if err != nil {
  197. tx.Rollback()
  198. e.Log.Errorf("获取车辆信息失败: %s", err)
  199. return errors.New("获取车辆信息失败")
  200. }
  201. operationLog := model.OperationLog{
  202. ProvOperationLog: model.ProvOperationLog{
  203. InnerCode: gasCylinder.InnerCode,
  204. OptType: c.OptType,
  205. OptUser: user.ProvUserId,
  206. CompanyId: user.ProvUser.CmpCode,
  207. CurrentEnterprise: user.ProvUser.CmpCode,
  208. CurrentStore: user.ProvUser.CmpCode,
  209. CurrentTruck: user.ProvUserId,
  210. CurrentMotor: truckUserCarInfo.CarNo,
  211. OptTime: time.Now().Format("2006-01-02 15:04:05"),
  212. },
  213. ControlBy: cModel.ControlBy{
  214. CreateBy: p.UserId,
  215. },
  216. DeptBy: cModel.DeptBy{
  217. DeptId: p.DeptId,
  218. },
  219. }
  220. data = append(data, operationLog)
  221. }
  222. }
  223. provList := make([]model.ProvOperationLog, 0)
  224. for _, datum := range data {
  225. provList = append(provList, datum.GenProvOperationLog())
  226. }
  227. // TODO 同步省平台 1.1.1.22 批量新增操作记录
  228. err = tx.Create(&data).Error
  229. if err != nil {
  230. tx.Rollback()
  231. e.Log.Errorf("db error: %s", err)
  232. return global.CreateFailedErr
  233. }
  234. return nil
  235. }
  236. func (e *OperationLog) InsertForGasStation(c *dto.OperationLogInsertForGasStationReq) error {
  237. var err error
  238. tx := e.Orm.Begin()
  239. defer func() {
  240. if err != nil {
  241. tx.Rollback()
  242. } else {
  243. tx.Commit()
  244. }
  245. }()
  246. // 通过sn查询设备信息
  247. var device model.Device
  248. err = tx.Where("sn = ?", c.Sn).Preload("User").First(&device).Error
  249. if err != nil {
  250. tx.Rollback()
  251. e.Log.Errorf("db error: %s", err)
  252. return global.CreateFailedErr
  253. }
  254. // 1、通过高频ID查询气瓶内编码
  255. var gasCylinder model.GasCylinder
  256. err = tx.Where("uid = ?", c.ChipUid).First(&gasCylinder).Error
  257. operationLog := model.OperationLog{
  258. ProvOperationLog: model.ProvOperationLog{
  259. OptType: device.OptType,
  260. OptTime: time.Now().Format("2006-01-02 15:04:05"),
  261. OptUser: device.ProvUserId,
  262. InnerCode: gasCylinder.InnerCode,
  263. CompanyId: device.ProvCmpCode,
  264. CurrentEnterprise: device.ProvCmpCode,
  265. CurrentStation: device.ProvCmpCode,
  266. },
  267. DeptBy: cModel.DeptBy{
  268. DeptId: device.DeptId,
  269. },
  270. }
  271. // TODO 同步省平台 1.1.1.20 新增操作记录
  272. //ipr := data.GenProvOperationLog()
  273. err = tx.Create(&operationLog).Error
  274. if err != nil {
  275. tx.Rollback()
  276. log.Errorf("db error: %s", err)
  277. return global.CreateFailedErr
  278. }
  279. return nil
  280. }
  281. // 送气员送达重瓶,送气订单取消
  282. func InsertOperationLogByOptType26Or36(tx *gorm.DB, OptType string, chipUid string, order model.Order) error {
  283. var err error
  284. // 1、通过高频ID查询气瓶内编码
  285. var gasCylinder model.GasCylinder
  286. err = tx.Where("uid = ?", chipUid).First(&gasCylinder).Error
  287. if err != nil {
  288. return errors.New("获取气瓶信息失败")
  289. }
  290. operationLog := model.OperationLog{
  291. ProvOperationLog: model.ProvOperationLog{
  292. OptType: OptType,
  293. OptTime: time.Now().Format("2006-01-02 15:04:05"),
  294. OptUser: order.User.ProvUserId,
  295. InnerCode: gasCylinder.InnerCode,
  296. ObjectCustomer: order.CustomerId,
  297. OptCustomer: order.CustomerId,
  298. CompanyId: order.Dept.CmpCode,
  299. CurrentEnterprise: order.Store.CmpCode,
  300. CurrentAddress: order.CustomerId,
  301. },
  302. ControlBy: cModel.ControlBy{
  303. CreateBy: order.UserId,
  304. },
  305. DeptBy: cModel.DeptBy{
  306. DeptId: order.DeptId,
  307. },
  308. }
  309. // TODO 同步省平台 1.1.1.20 新增操作记录
  310. //ipr := data.GenProvOperationLog()
  311. err = tx.Create(&operationLog).Error
  312. if err != nil {
  313. tx.Rollback()
  314. log.Errorf("db error: %s", err)
  315. return global.CreateFailedErr
  316. }
  317. if OptType == "26" {
  318. // 新增客户气瓶信息
  319. err = tx.Create(&model.CustomerGasCylinder{
  320. CustomerId: order.CustomerId,
  321. InnerCode: gasCylinder.InnerCode,
  322. State: 1,
  323. BorrowTime: cModel.Time(time.Now()),
  324. }).Error
  325. if err != nil {
  326. tx.Rollback()
  327. log.Errorf("db error: %s", err)
  328. return global.CreateFailedErr
  329. }
  330. }
  331. if OptType == "36" {
  332. // 查询气瓶信息
  333. var cgc model.CustomerGasCylinder
  334. err = tx.Where("inner_code = ? and state = 1", gasCylinder.InnerCode, order.CustomerId).First(&cgc).Error
  335. if err != nil {
  336. tx.Rollback()
  337. log.Errorf("db error: %s", err)
  338. return global.CreateFailedErr
  339. }
  340. cgc.ReturnTime = cModel.Time(time.Now())
  341. cgc.State = 2
  342. err = tx.Save(&cgc).Error
  343. if err != nil {
  344. tx.Rollback()
  345. log.Errorf("db error: %s", err)
  346. return global.CreateFailedErr
  347. }
  348. }
  349. return nil
  350. }
  351. // ListByUid 通过uid获取OperationLog列表
  352. func (e *OperationLog) ListByUid(InnerCode string, list *[]model.OperationLog) error {
  353. var err error
  354. var data model.OperationLog
  355. err = e.Orm.Model(&data).
  356. Where("inner_code = ? and state = 1", InnerCode).
  357. Preload("OptUserObj").
  358. Preload("ObjectUserObj").
  359. Preload("ObjectCustomerObj").
  360. Preload("OptCustomerObj").
  361. Preload("CompanyObj").
  362. Preload("CurrentEnterpriseObj").
  363. Preload("CurrentStationObj").
  364. Preload("CurrentStoreObj").
  365. Preload("CurrentTruckObj").
  366. Preload("CurrentAddressObj").
  367. Find(list).Order("opt_time").Error
  368. if err != nil {
  369. e.Log.Errorf("db error: %s", err)
  370. return global.GetFailedErr
  371. }
  372. return nil
  373. }