StoreRecordsService.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Laravel框架 [ Laravel ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2017~2021 Laravel研发中心
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://www.laravel.cn
  8. // +----------------------------------------------------------------------
  9. // | Author: wesmiler <12345678@qq.com>
  10. // +----------------------------------------------------------------------
  11. namespace App\Services;
  12. use App\Models\StoresModel;
  13. use App\Models\StoresRecordsModel;
  14. /**
  15. * 商品出入库管理-服务类
  16. * @author wesmiler
  17. * @since 2020/11/11
  18. * Class StoreRecordsService
  19. * @package App\Services
  20. */
  21. class StoreRecordsService extends BaseService
  22. {
  23. protected $storeModel = null;
  24. /**
  25. * 构造函数
  26. * @author wesmiler
  27. * @since 2020/11/11
  28. * StoreRecordsService constructor.
  29. */
  30. public function __construct()
  31. {
  32. $this->model = new StoresRecordsModel();
  33. $this->storeModel = new StoresModel();
  34. }
  35. /**
  36. * 获取列表
  37. * @return array
  38. * @since 2020/11/11
  39. * @author wesmiler
  40. */
  41. public function getList()
  42. {
  43. $params = request()->all();
  44. $page = isset($params['pageSize']) ? intval($params['pageSize']) : PAGE;
  45. $pageSize = isset($params['pageSize']) ? intval($params['pageSize']) : PERPAGE;
  46. $dataList = $this->model::from('store_records as sr')
  47. ->leftJoin('stores as s', 's.id', '=', 'sr.store_id')
  48. ->where(function ($query) use ($params) {
  49. $query->where('sr.mark', 1);
  50. $type = isset($params['type']) ? intval($params['type']) : 0;
  51. if ($type > 0) {
  52. $query->where('sr.cate_id', $type);
  53. }
  54. $status = isset($params['status']) ? $params['status'] : 0;
  55. if ($status > 0) {
  56. $query->where('sr.status', $status);
  57. } else {
  58. $query->whereIn('sr.status', [1, 2]);
  59. }
  60. })
  61. ->where(function ($query) use ($params) {
  62. $keyword = isset($params['keyword']) ? trim($params['keyword']) : '';
  63. if (!empty($keyword)) {
  64. $query->where('s.title', 'like', "%{$keyword}%")
  65. ->orWhere('s.source','like',"%{$keyword}%");
  66. }
  67. })
  68. ->select(['sr.id', 'sr.store_id', 's.title as goods_name','sr.stock', 'sr.type', 'sr.description', 'sr.create_time', 'sr.update_time'])
  69. ->orderBy('sr.update_time', 'desc')
  70. ->paginate($pageSize);
  71. $dataList = $dataList ? $dataList->toArray() : [];
  72. if ($dataList) {
  73. foreach ($dataList['data'] as &$item) {
  74. $item['create_time'] = $item['create_time'] ? datetime($item['create_time'],'Y-m-d H:i:s') : '';
  75. }
  76. unset($item);
  77. }
  78. return [
  79. 'code' => 0,
  80. 'success'=> true,
  81. 'msg' => '操作成功',
  82. 'count' => isset($dataList['total']) ? $dataList['total'] : 0,
  83. 'data' => isset($dataList['data']) ? $dataList['data'] : 0,
  84. ];
  85. }
  86. /**
  87. * 添加或编辑
  88. * @return array
  89. * @since 2020/11/11
  90. * @author wesmiler
  91. */
  92. public function edit()
  93. {
  94. $data = request()->all();
  95. $data['update_time'] = time();
  96. $storeId = isset($data['store_id'])? $data['store_id'] : 0;
  97. $type = isset($data['type'])? $data['type'] : 0;
  98. $stock = isset($data['stock'])? $data['stock'] : 0;
  99. if(!in_array($type, [1,2])){
  100. return message('出入库类型错误', false);
  101. }
  102. if(empty($storeId)){
  103. return message('操作商品参数错误', false);
  104. }
  105. if($stock<=0){
  106. return message('出入库数量错误', false);
  107. }
  108. $storeInfo = $this->storeModel->where(['id'=> $storeId,'status'=> 1])->first();
  109. if(!$storeInfo){
  110. return message('操作商品不存在或状态不可操作', false);
  111. }
  112. // 出库
  113. if($storeInfo->stock < $stock && $type == 2){
  114. return message('出库数量超出商品库存', false);
  115. }
  116. if($type==1){
  117. $res = $this->storeModel::where(['id'=> $storeId])->increment('stock', $stock);
  118. }else{
  119. $res = $this->storeModel::where(['id'=> $storeId])->decrement('stock', $stock);
  120. }
  121. $data = [
  122. 'store_id'=> $storeId,
  123. 'type'=> $type,
  124. 'stock'=> $stock,
  125. 'description'=> isset($data['description'])? $data['description'] : '',
  126. 'create_time'=> time(),
  127. 'update_time'=> time(),
  128. 'status'=> 1,
  129. ];
  130. if($res && $this->model->insert($data)){
  131. return message();
  132. }else{
  133. return message(MESSAGE_FAILED, false);
  134. }
  135. }
  136. }