gas_cylinder_status.go 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  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. cModel "gas-cylinder-api/common/model"
  11. "gogs.baozhida.cn/zoie/OAuth-core/service"
  12. "gorm.io/gorm"
  13. "gorm.io/gorm/utils"
  14. "strings"
  15. "time"
  16. )
  17. type GasCylinderStatus struct {
  18. service.Service
  19. }
  20. func GasCylinderStatusScopes(status string) func(db *gorm.DB) *gorm.DB {
  21. return func(db *gorm.DB) *gorm.DB {
  22. if len(status) == 0 {
  23. return db
  24. }
  25. if status == model.GasCylinderStatusUnqualified {
  26. return db.Where("status = ? or status = ?", model.GasCylinderStatusScrap, model.GasCylinderStatusExtended)
  27. }
  28. if strings.Contains(status, model.GasCylinderStatusScrap) {
  29. return db.Where("status = ?", model.GasCylinderStatusScrap)
  30. }
  31. if strings.Contains(status, model.GasCylinderStatusExtended) {
  32. return db.Where("status = ?", model.GasCylinderStatusExtended)
  33. }
  34. return db.Where("status = ? ", status)
  35. }
  36. }
  37. // GetPage 获取GasCylinderStatus列表
  38. func (e *GasCylinderStatus) GetPage(c *dto.GasCylinderStatusGetPageReq, list *[]model.GasCylinderStatus, count *int64, p *actions.DataPermission) error {
  39. var err error
  40. var data model.GasCylinderStatus
  41. err = e.Orm.Model(&data).
  42. Scopes(
  43. cDto.MakeCondition(c.GetNeedSearch()),
  44. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  45. //actions.Permission(data.TableName(), p),
  46. GasCylinderStatusScopes(c.Status),
  47. ).
  48. Where("company_id = ? AND user_id = 0", p.DeptId).
  49. Find(list).Limit(-1).Offset(-1).
  50. Count(count).Error
  51. if err != nil {
  52. e.Log.Errorf("db error: %s", err)
  53. return global.GetFailedErr
  54. }
  55. return nil
  56. }
  57. // GetPage 获取GasCylinderStatus列表
  58. func (e *GasCylinderStatus) GetUserPage(c *dto.GasCylinderStatusGetPageReq, list *[]model.GasCylinderStatus, count *int64, p *actions.DataPermission) error {
  59. var err error
  60. var data model.GasCylinderStatus
  61. err = e.Orm.Model(&data).
  62. Scopes(
  63. cDto.MakeCondition(c.GetNeedSearch()),
  64. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  65. //actions.Permission(data.TableName(), p),
  66. GasCylinderStatusScopes(c.Status),
  67. ).
  68. Where("user_id = ?", p.UserId).
  69. Find(list).Limit(-1).Offset(-1).
  70. Count(count).Error
  71. if err != nil {
  72. e.Log.Errorf("db error: %s", err)
  73. return global.GetFailedErr
  74. }
  75. return nil
  76. }
  77. // Get 获取GasCylinderStatus对象
  78. func (e *GasCylinderStatus) Get(d *dto.GasCylinderStatusGetReq, gasCylinderStatusModel *model.GasCylinderStatus, p *actions.DataPermission) error {
  79. err := e.Orm.
  80. Scopes(actions.Permission(gasCylinderStatusModel.TableName(), p)).
  81. First(gasCylinderStatusModel, d.GetId()).Error
  82. if err != nil {
  83. e.Log.Errorf("db error: %s", err)
  84. if errors.Is(err, gorm.ErrRecordNotFound) {
  85. return global.GetNotFoundOrNoPermissionErr
  86. }
  87. return global.GetFailedErr
  88. }
  89. return nil
  90. }
  91. // Insert 创建GasCylinderStatus对象
  92. func (e *GasCylinderStatus) Insert(c *dto.GasCylinderStatusInsertReq, 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. inDeptIdScopes := InRootCompanyIdsScopes(p.DeptId)
  103. for _, innerCode := range c.InnerCodeList {
  104. // 查询钢瓶档案
  105. var gasCylinder = model.GasCylinder{}
  106. // 查询订单是否存在
  107. err = e.Orm.
  108. Scopes(inDeptIdScopes).
  109. Where("inner_code = ?", innerCode).
  110. First(&gasCylinder).Error
  111. if err != nil {
  112. e.Log.Errorf("db error: %s", err)
  113. if errors.Is(err, gorm.ErrRecordNotFound) {
  114. return errors.New(fmt.Sprintf("钢瓶%s不存在,请先在钢瓶档案添加!", innerCode))
  115. }
  116. return errors.New(fmt.Sprintf("查询钢瓶%s失败,请检查!", innerCode))
  117. }
  118. var data model.GasCylinderStatus
  119. err = e.Orm.
  120. Where("inner_code = ? ", innerCode).
  121. Preload("Company").
  122. Preload("User").
  123. First(&data).Error
  124. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  125. e.Log.Errorf("db error: %s", err)
  126. return global.GetFailedErr
  127. }
  128. if data.Id > 0 {
  129. if data.UserId > 0 && data.UserId != p.UserId {
  130. err = errors.New(fmt.Sprintf("钢瓶%s被【%s】关联,请检查!", innerCode, data.User.NickName))
  131. return err
  132. }
  133. if data.CompanyId == p.DeptId {
  134. if data.Status != c.Status {
  135. if data.Status != c.Status {
  136. err = errors.New(fmt.Sprintf("钢瓶%s状态为【%s】,请检查!", innerCode, model.GasCylinderStatusState2Map[data.Status]))
  137. return err
  138. }
  139. }
  140. } else {
  141. err = errors.New(fmt.Sprintf("钢瓶%s被【%s】关联,请检查!", innerCode, data.Company.Name))
  142. return err
  143. }
  144. }
  145. // 添加调拨信息
  146. data.CompanyId = p.DeptId
  147. c.Generate(innerCode, &data)
  148. err = tx.Create(&data).Error
  149. if err != nil {
  150. e.Log.Errorf("db error: %s", err)
  151. return global.CreateFailedErr
  152. }
  153. }
  154. return nil
  155. }
  156. func (e *GasCylinderStatus) UserInsert(c *dto.GasCylinderStatusInsertReq, p *actions.DataPermission, isorders bool) error {
  157. //Isorders 是否是送气员
  158. var err error
  159. tx := e.Orm.Begin()
  160. defer func() {
  161. if err != nil {
  162. tx.Rollback()
  163. } else {
  164. tx.Commit()
  165. }
  166. }()
  167. inDeptIdScopes := InRootCompanyIdsScopes(p.DeptId)
  168. for _, innerCode := range c.InnerCodeList {
  169. // 查询钢瓶档案
  170. var gasCylinder = model.GasCylinder{}
  171. // 查询订单是否存在
  172. err = e.Orm.
  173. Scopes(inDeptIdScopes).
  174. Where("inner_code = ?", innerCode).
  175. First(&gasCylinder).Error
  176. if err != nil {
  177. e.Log.Errorf("db error: %s", err)
  178. if errors.Is(err, gorm.ErrRecordNotFound) {
  179. return errors.New(fmt.Sprintf("钢瓶%s不存在,请先在钢瓶档案添加!", innerCode))
  180. }
  181. return errors.New(fmt.Sprintf("查询钢瓶%s失败,请检查!", innerCode))
  182. }
  183. var data model.GasCylinderStatus
  184. err = e.Orm.
  185. Where("inner_code = ? ", innerCode).
  186. Preload("Company").
  187. Preload("User").
  188. First(&data).Error
  189. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  190. e.Log.Errorf("db error: %s", err)
  191. return global.GetFailedErr
  192. }
  193. if data.Id > 0 {
  194. if data.UserId == p.UserId {
  195. if data.Status != c.Status {
  196. err = errors.New(fmt.Sprintf("钢瓶%s状态为【%s】,请检查!", innerCode, model.GasCylinderStatusState2Map[data.Status]))
  197. return err
  198. }
  199. } else {
  200. err = errors.New(fmt.Sprintf("钢瓶%s被【%s】%s关联,请检查!", innerCode, data.Company.Name, data.User.NickName))
  201. return err
  202. }
  203. }
  204. // 添加调拨信息
  205. data.UserId = p.UserId
  206. data.CompanyId = p.DeptId
  207. c.Generate(innerCode, &data)
  208. err = tx.Create(&data).Error
  209. if err != nil {
  210. e.Log.Errorf("db error: %s", err)
  211. return global.CreateFailedErr
  212. }
  213. if isorders && c.Status == model.GasCylinderStatusWeighty {
  214. // 27 送气员回收空瓶
  215. log := make([]model.OperationLog, 0)
  216. var user model.SysUser
  217. user, err = model.GetUserCode(p.UserId)
  218. if err != nil {
  219. e.Log.Errorf("db error: %s", err)
  220. return global.CreateFailedErr
  221. }
  222. // 修改用户关联的气瓶信息
  223. var cgc model.CustomerGasCylinder
  224. err = tx.Where("inner_code = ? and state = 1", innerCode).First(&cgc).Error
  225. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  226. e.Log.Errorf("db error: %s", err)
  227. return global.CreateFailedErr
  228. }
  229. operationLog := model.OperationLog{
  230. ProvOperationLog: model.ProvOperationLog{
  231. InnerCode: innerCode,
  232. OptType: "27",
  233. ObjectCustomer: cgc.CustomerId,
  234. OptCustomer: cgc.CustomerId,
  235. OptUser: user.ProvUserId,
  236. ObjectUser: user.ProvUserId,
  237. CompanyId: user.ProvUser.CmpCode,
  238. CurrentEnterprise: user.ProvUser.CmpCode,
  239. CurrentStore: user.Dept.CmpCode,
  240. Lng: utils.ToString(user.Dept.ProvStore.Lng),
  241. Lat: utils.ToString(user.Dept.ProvStore.Lat),
  242. OptTime: time.Now().Format("2006-01-02 15:04:05"),
  243. },
  244. ControlBy: cModel.ControlBy{
  245. CreateBy: p.UserId,
  246. },
  247. DeptBy: cModel.DeptBy{
  248. DeptId: p.DeptId,
  249. },
  250. }
  251. log = append(log, operationLog)
  252. // TODO 同步省平台 1.1.1.22 批量新增操作记录
  253. err = tx.Create(&log).Error
  254. if err != nil {
  255. e.Log.Errorf("db error: %s", err)
  256. return global.CreateFailedErr
  257. }
  258. if cgc.Id > 0 {
  259. cgc.ReturnTime = cModel.Time(time.Now())
  260. cgc.State = 2
  261. err = tx.Save(&cgc).Error
  262. if err != nil {
  263. e.Log.Errorf("db error: %s", err)
  264. return global.CreateFailedErr
  265. }
  266. }
  267. }
  268. }
  269. return nil
  270. }
  271. // Remove 删除GasCylinderStatus
  272. func (e *GasCylinderStatus) Remove(c *dto.GasCylinderStatusDeleteReq, p *actions.DataPermission) error {
  273. var err error
  274. tx := e.Orm.Begin()
  275. defer func() {
  276. if err != nil {
  277. tx.Rollback()
  278. } else {
  279. tx.Commit()
  280. }
  281. }()
  282. var gasCylinderStatusModel model.GasCylinderStatus
  283. // 查询钢瓶是否存在
  284. err = e.Orm.Scopes(actions.Permission(gasCylinderStatusModel.TableName(), p)).
  285. First(&gasCylinderStatusModel, c.GetId()).Error
  286. if err != nil {
  287. e.Log.Errorf("db error: %s", err)
  288. if errors.Is(err, gorm.ErrRecordNotFound) {
  289. return global.DeleteNotFoundOrNoPermissionErr
  290. }
  291. return global.DeleteFailedErr
  292. }
  293. db := tx.Delete(&gasCylinderStatusModel)
  294. if err = db.Error; err != nil {
  295. e.Log.Errorf("db error: %s", err)
  296. return global.DeleteFailedErr
  297. }
  298. if db.RowsAffected == 0 {
  299. return global.DeleteNotFoundOrNoPermissionErr
  300. }
  301. return nil
  302. }
  303. // Update 创建GasCylinderStatus对象
  304. func (e *GasCylinderStatus) Update(c *dto.GasCylinderStatusUpdateReq, p *actions.DataPermission) error {
  305. var err error
  306. tx := e.Orm.Begin()
  307. defer func() {
  308. if err != nil {
  309. tx.Rollback()
  310. } else {
  311. tx.Commit()
  312. }
  313. }()
  314. for _, innerCode := range c.InnerCodeList {
  315. var data model.GasCylinderStatus
  316. err = e.Orm.
  317. Where("inner_code = ? ", innerCode).
  318. First(&data).Error
  319. if err != nil {
  320. e.Log.Errorf("db error: %s", err)
  321. return global.GetFailedErr
  322. }
  323. if data.Status != c.Status {
  324. data.Status = c.Status
  325. data.UpdateBy = c.UpdateBy
  326. err = tx.Save(&data).Error
  327. if err != nil {
  328. e.Log.Errorf("db error: %s", err)
  329. return global.CreateFailedErr
  330. }
  331. }
  332. }
  333. return nil
  334. }