AgentGoodsController.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: wniu
  5. * Date: 2022/2/28
  6. * Time: 5:46 下午
  7. */
  8. namespace addons\CloudStock\backend\controllers;
  9. use addons\CloudStock\common\models\CloudStockAgent;
  10. use addons\CloudStock\common\models\CloudStockAgentGoods;
  11. use addons\CloudStock\common\models\CloudStockFillOrder;
  12. use addons\CloudStock\common\models\CloudStockGoods;
  13. use addons\CloudStock\common\models\CloudStockImportStockFailLog;
  14. use addons\CloudStock\common\models\CloudStockImportStockLog;
  15. use common\enums\StatusEnum;
  16. use common\models\goods\Goods;
  17. use common\components\CsvExport;
  18. use Yii;
  19. class AgentGoodsController extends BaseController
  20. {
  21. public $enableCsrfValidation = false;
  22. public function actionIndexBak()
  23. {
  24. if (\Yii::$app->request->isAjax) {
  25. $get = Yii::$app->request->get();
  26. $stock_agent = CloudStockAgent::getOne([['user_id' => $get['user_id']]]);
  27. if (!$stock_agent) {
  28. return $this->error('没有该代理商');
  29. }
  30. $wheres[] = ['mall_id' => $this->mall_id, 'user_id' => $get['user_id'], 'status' => StatusEnum::ENABLED];
  31. $params = [
  32. 'select' => 'id,mall_id,user_id,goods_id,num as agent_stock,created_at',
  33. 'where' => $wheres,
  34. 'order' => 'created_at desc',
  35. 'page' => $get['page'] ?? 1,
  36. 'limit' => $get['limit'] ?? $this->pageSize,
  37. ];
  38. $list = CloudStockAgentGoods::listPage($params);
  39. if (empty($list['list'])) {
  40. if (!is_array($list['list'])) return $this->error(CloudStockAgentGoods::getStaticError());
  41. return $this->success('success', $list);
  42. }
  43. $good_ids = array_column($list['list'], 'goods_id');
  44. $cloud_stock_goods = CloudStockGoods::find()
  45. ->select('goods_id,agent_price')
  46. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'goods_id' => $good_ids])
  47. ->asArray()
  48. ->indexBy('goods_id')
  49. ->all();
  50. $mall_goods = Goods::find()
  51. ->select('id,goods_name,price,cover_pic')
  52. ->where(['mall_id' => $this->mall_id,'id' => $good_ids])
  53. ->asArray()
  54. ->indexBy('id')
  55. ->all();
  56. $agent_goods = CloudStockAgentGoods::find()
  57. ->select('goods_id,num')
  58. ->where(['user_id' => $get['user_id'], 'status' => StatusEnum::ENABLED, 'goods_id' => $good_ids])
  59. ->asArray()
  60. ->indexBy('goods_id')
  61. ->all();
  62. foreach ($list['list'] as $lk => &$lv) {
  63. $could_goods = $cloud_stock_goods[$lv['goods_id']] ?? [];
  64. if (empty($could_goods)) {
  65. unset($list['list'][$lk]);
  66. continue;
  67. }
  68. // dd($lv, $could_goods, $stock_agent->level);
  69. $lv['agent_goods_num'] = $agent_goods[$lv['goods_id']] ? $agent_goods[$lv['goods_id']]['num'] : 0;
  70. $lv['level_agent_price'] = CloudStockAgentGoods::getGoodsAgentPrice($could_goods, $stock_agent->level);
  71. $mall_good = $mall_goods[$lv['goods_id']] ?? [];
  72. $price = $mall_good['price'] ?? 0;
  73. $lv['goods_name'] = $mall_good['goods_name'] ?? '';
  74. $lv['cover_pic'] = $mall_good['cover_pic'] ?? '';
  75. // 平台价格,零售价
  76. $lv['goods_price'] = $price;
  77. $lv['profit'] = $price - $lv['level_agent_price'];
  78. }
  79. $list['list'] = array_values($list['list']);
  80. return $this->success('success', $list);
  81. }
  82. return $this->render('index');
  83. }
  84. public function actionIndex()
  85. {
  86. if (\Yii::$app->request->isAjax) {
  87. $page = \Yii::$app->request->get('page', 1);
  88. $limit = \Yii::$app->request->get('limit', $this->pageSize);
  89. $get = Yii::$app->request->get();
  90. $stock_agent = CloudStockAgent::getOne([['user_id' => $get['user_id']],['status'=>StatusEnum::ENABLED]]);
  91. if (!$stock_agent) {
  92. return $this->error('没有该代理商');
  93. }
  94. $wheres[] = ['mall_id' => $this->mall_id];
  95. $wheres[] = ['status' => StatusEnum::ENABLED];
  96. $params = [
  97. 'select' => 'mall_id,goods_id,agent_price',
  98. 'where' => $wheres,
  99. 'order' => 'created_at desc',
  100. 'page' => $page,
  101. 'limit' => $limit,
  102. ];
  103. $cloud_stock_goods = CloudStockGoods::listPage($params);
  104. if (false === $cloud_stock_goods) {
  105. return $this->error(CloudStockGoods::getStaticError());
  106. }
  107. if (empty($cloud_stock_goods['list'])) {
  108. return $this->success('success', $cloud_stock_goods);
  109. }
  110. $good_ids = array_column($cloud_stock_goods['list'], 'goods_id');
  111. $mall_goods = Goods::find()
  112. ->select('id,goods_name,price,cover_pic')
  113. ->where(['mall_id' => $this->mall_id,'id' => $good_ids])
  114. ->asArray()
  115. ->indexBy('id')
  116. ->all();
  117. $agent_goods = CloudStockAgentGoods::find()
  118. ->select('goods_id,num,created_at')
  119. ->where(['user_id' => $get['user_id'], 'status' => StatusEnum::ENABLED, 'goods_id' => $good_ids])
  120. ->asArray()
  121. ->indexBy('goods_id')
  122. ->all();
  123. foreach ($cloud_stock_goods['list'] as $lk => &$lv) {
  124. $mall_good = $mall_goods[$lv['goods_id']] ?? [];
  125. $agent_good = $agent_goods[$lv['goods_id']] ?? [];
  126. $lv['user_id'] = $get['user_id'];
  127. $lv['level_agent_price'] = CloudStockAgentGoods::getGoodsAgentPrice($lv, $stock_agent->level);
  128. $price = $mall_good['price'] ?? 0;
  129. $lv['goods_name'] = $mall_good['goods_name'] ?? '';
  130. $lv['cover_pic'] = $mall_good['cover_pic'] ?? '';
  131. // 平台价格,零售价
  132. $lv['goods_price'] = $price;
  133. $lv['profit'] = bcsub($price, $lv['level_agent_price'], 2);
  134. if (!empty($agent_good)) {
  135. $lv['agent_goods_num'] = $agent_good['num'] ?? 0;
  136. $lv['created_at'] = $agent_good['created_at'] ?? 0;
  137. } else {
  138. $lv['agent_goods_num'] = 0;
  139. $lv['created_at'] = 0;
  140. }
  141. }
  142. return $this->success('success', $cloud_stock_goods);
  143. }
  144. return $this->render('index');
  145. }
  146. /**
  147. * 导入日志记录
  148. * @return mixed|void
  149. */
  150. public function actionGetImportStockLog()
  151. {
  152. $params = \Yii::$app->request->get();
  153. $params['where'] = [
  154. ['mall_id'=>$this->mall_id]
  155. ];
  156. $params['order'] = 'id desc';
  157. $data = CloudStockImportStockLog::listPage($params, false, true);
  158. if (!empty($data['list'])) {
  159. foreach ($data['list'] as &$v) {
  160. $v['url'] = '';
  161. if ($v['fail_counts']) $v['url'] = \Yii::$app->urlManager->createUrl(['cloud-stock/agent-goods/export-stock-fail', 'log_id' => $v['id']]);
  162. }
  163. }
  164. return $this->success('操作成功', $data);
  165. }
  166. /**
  167. * 导出失败日志
  168. */
  169. public function actionExportStockFail()
  170. {
  171. CloudStockImportStockFailLog::exportFailLog(\Yii::$app->request->get());
  172. }
  173. /**
  174. * 批量导入模板下载
  175. */
  176. public function actionImportStockModel()
  177. {
  178. $csv = new CsvExport();
  179. $file_name = '批量导入代理库存模板-' . date('YmdHis', time());
  180. $head_list = array_column(CloudStockAgentGoods::$head_list, 'field_name');
  181. return $csv->export([], $head_list, $file_name);
  182. }
  183. /**
  184. * 批量导入等级
  185. * @return mixed|string|void
  186. */
  187. public function actionImportStock()
  188. {
  189. set_time_limit(0);
  190. if (\Yii::$app->request->isAjax) {
  191. $params = \Yii::$app->request->post();
  192. $res = Yii::$app->services->validate->validate($params, [
  193. [['current_num'], 'required'],
  194. [['file'], 'file', 'extensions' => ['csv']],
  195. [['file_path'], 'string'],
  196. [['sync'], 'safe'],
  197. ]);
  198. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  199. $params['mall_id'] = $this->mall_id;
  200. if(!empty($params['sync'])){
  201. $res = CloudStockAgentGoods::importStockSync($params);
  202. }else{
  203. $res = CloudStockAgentGoods::importStock($params);
  204. }
  205. if (empty($res['fail_counts'])) return $this->success('操作成功', $res);
  206. if (!empty($res['fail_counts'])) return $this->error('导入失败'.$res['fail_counts'].'条');
  207. return $this->error(CloudStockAgentGoods::getStaticError());
  208. } else {
  209. return $this->render($this->action->id);
  210. }
  211. }
  212. }