StoreCensusController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. <?php
  2. namespace addons\Happiness\console\controllers;
  3. use addons\Store\common\enums\StoreEnum;
  4. use addons\Happiness\common\logic\store\StoreCensus;
  5. use addons\Store\common\models\StoreCommission;
  6. use addons\Happiness\common\enums\HappinessEnum;
  7. use addons\Happiness\common\models\HappinessGoodsRanking;
  8. use addons\Happiness\common\models\HappinessOrder;
  9. use addons\Happiness\common\models\HappinessStoreCommission;
  10. use addons\Happiness\common\models\HappinessStoreUser;
  11. use common\enums\StatusEnum;
  12. use common\helpers\DateHelper;
  13. use common\models\mall\Mall;
  14. use common\models\order\Order;
  15. use yii\console\Controller;
  16. use yii\console\ExitCode;
  17. use yii;
  18. class StoreCensusController extends Controller
  19. {
  20. //初始化
  21. public function actionIndex()
  22. {
  23. try {
  24. $malls = Mall::getEnableMallList();
  25. foreach ($malls as $mall) {
  26. $obj = new StoreCensus($mall['id']);
  27. $pay_order_numbers = $obj->getPayOrderNumbers();
  28. $pay_people_numbers = $obj->getPayPeopleNumbers();
  29. $real_pay_amounts = $obj->getRealPayAmounts();
  30. $not_settle_amounts = $obj->getNotSettleAmounts();
  31. // $settle_amounts = $obj->getSettleAmounts();
  32. $key = HappinessEnum::STORE_REAL_PAY_AMOUNTS . ':' . $mall['id'];
  33. Yii::$app->redis->set($key, $real_pay_amounts);//实收金额
  34. $key = HappinessEnum::STORE_NOT_SETTLE_AMOUNTS . ':' . $mall['id'];
  35. Yii::$app->redis->set($key, $not_settle_amounts);//待结算
  36. // $key = HappinessEnum::STORE_SETTLE_AMOUNTS . ':' . $mall['id'];
  37. // Yii::$app->redis->set($key, $settle_amounts);//给会员的佣金
  38. $key = HappinessEnum::STORE_PAY_ORDER_NUMBERS . ':' . $mall['id'];
  39. Yii::$app->redis->set($key, $pay_order_numbers);//支付订单数
  40. $key = HappinessEnum::STORE_PAY_PEOPLE_NUMBERS . ':' . $mall['id'];
  41. Yii::$app->redis->set($key, $pay_people_numbers);//支付人数
  42. $page = 1;
  43. $limit = 200;
  44. $query_com = HappinessStoreCommission::find()->where(['mall_id' => $mall['id'], 'status' => StatusEnum::ENABLED]);
  45. $key = HappinessEnum::STORE_PAY_PEOPLE_NUMBERS_SET . ':' . $mall['id'];
  46. do {
  47. $offset = ($page - 1) * $limit;
  48. $page++;
  49. $commissions = $query_com->limit($limit)->offset($offset)->all();
  50. if (!empty($commissions)) {
  51. foreach ($commissions as $commission) {
  52. Yii::$app->redis->setbit($key, $commission['user_id'], 1);
  53. }
  54. }
  55. } while ($commissions);
  56. }
  57. return ExitCode::OK;
  58. } catch (\Exception $e) {
  59. \Yii::getLogger()->flush(true);
  60. return false;
  61. }
  62. }
  63. /**
  64. * 统计实时概况-昨天数据
  65. **/
  66. public function actionYesterdayIndex()
  67. {
  68. try {
  69. $yesterday = date('Y-m-d',strtotime("-1 days"));
  70. $time_nodes = DateHelper::yesterDay();
  71. $malls = Mall::getEnableMallList();
  72. foreach ($malls as $mall) {
  73. $obj = new StoreCensus($mall['id'], $time_nodes['start'], $time_nodes['end']);
  74. $yesterday_pay_order_numbers = $obj->getPayOrderNumbers();
  75. $yesterday_pay_people_numbers = $obj->getPayPeopleNumbers();
  76. $yesterday_real_pay_amounts = $obj->getRealPayAmounts();
  77. $yesterday_not_settle_amounts = $obj->getNotSettleAmounts();
  78. // $yesterday_settle_amounts = $obj->getSettleAmounts();
  79. list($yesterday_waiting_audit_withdraw_amounts, $yesterday_waiting_pay_withdraw_amounts) = $obj->getWithdrawData();
  80. // $yesterday_waiting_audit_store_numbers = $obj->getWaitingAuditStoreNumbers();
  81. $data = [
  82. 'yesterday_pay_order_numbers' => $yesterday_pay_order_numbers,
  83. 'yesterday_pay_people_numbers' => $yesterday_pay_people_numbers,
  84. 'yesterday_real_pay_amounts' => $yesterday_real_pay_amounts,
  85. 'yesterday_not_settle_amounts' => $yesterday_not_settle_amounts,
  86. // 'yesterday_settle_amounts' => $yesterday_settle_amounts,
  87. 'yesterday_waiting_audit_withdraw_amounts' => $yesterday_waiting_audit_withdraw_amounts,
  88. 'yesterday_waiting_pay_withdraw_amounts' => $yesterday_waiting_pay_withdraw_amounts,
  89. // 'yesterday_waiting_audit_store_numbers' => $yesterday_waiting_audit_store_numbers,
  90. ];
  91. $key = StoreEnum::STORE_GLOBAL_STATISTICS_YESTERDAY . ':' . $mall['id'].':'.$yesterday;
  92. \Yii::$app->redis->set($key, json_encode($data));
  93. }
  94. return ExitCode::OK;
  95. } catch (\Exception $e) {
  96. \Yii::getLogger()->flush(true);
  97. return false;
  98. }
  99. }
  100. //统计商品销量
  101. public function actionSetGoodsRanking()
  102. {
  103. $malls = Mall::getEnableMallList();
  104. foreach ($malls as $mall) {
  105. $mall_id = $mall['id'];
  106. //获取门店订单数据
  107. $order_list = HappinessOrder::lists([
  108. 'alias' => 'yo',
  109. 'where' => [
  110. ['o.mall_id' => $mall_id],
  111. ['>=', 'o.status', StatusEnum::DISABLED],
  112. ['>', 'yo.store_id', 0],
  113. ['o.order_status' => [1,2,3,4,6]]
  114. ],
  115. 'with' => ['detail'],
  116. 'join' => [['LEFT JOIN', Order::tableName(). ' as o', "o.id = yo.order_id"]],
  117. 'select' => 'o.*,yo.store_id',
  118. ]);
  119. // print_r($order_list);exit;
  120. $ranking_data = [];
  121. if (!empty($order_list)) {
  122. foreach ($order_list as $key => $value) {
  123. $ranking_data[$value['store_id']];
  124. foreach ($value['detail'] as $k => $val) {
  125. if (empty($ranking_data[$value['store_id']][$val['goods_id']])) {
  126. $ranking_data[$value['store_id']][$val['goods_id']] = [
  127. 'store_id' => $value['store_id'],
  128. 'mall_id' => $mall_id,
  129. 'goods_id' => $val['goods_id'],
  130. 'sales_money' => $val['goods_price'],
  131. ];
  132. } else {
  133. $ranking_data[$value['store_id']][$val['goods_id']]['sales_money'] += $val['goods_price'];
  134. }
  135. }
  136. }
  137. }
  138. if (!empty($ranking_data)) {
  139. //记录数据
  140. foreach ($ranking_data as $rk => $rv) {
  141. foreach ($rv as &$item) {
  142. // print_r($item);exit;
  143. //查找是否已存在该商品数据
  144. $goods_ranking = HappinessGoodsRanking::getOne([
  145. ['mall_id' => $mall_id],
  146. ['store_id' => $item['store_id']],
  147. ['goods_id' => $item['goods_id']],
  148. ]);
  149. if (empty($goods_ranking)) {
  150. $goods_ranking = new HappinessGoodsRanking();
  151. $goods_ranking->mall_id = $mall_id;
  152. $goods_ranking->store_id = $item['store_id'];
  153. $goods_ranking->goods_id = $item['goods_id'];
  154. $goods_ranking->loadDefaultValues();
  155. }
  156. $goods_ranking->sales_money = $item['sales_money'];
  157. // $res = $goods_ranking->save();
  158. if (!$goods_ranking->save()) {
  159. // print_r($item);exit;
  160. print_r($goods_ranking);
  161. continue;
  162. }
  163. }
  164. }
  165. }
  166. }
  167. }
  168. //统计商品销量
  169. public function actionSetStoreUser()
  170. {
  171. $malls = Mall::getEnableMallList();
  172. foreach ($malls as $mall) {
  173. $mall_id = $mall['id'];
  174. //获取门店订单数据
  175. $order_list = HappinessOrder::lists([
  176. 'alias' => 'yo',
  177. 'where' => [
  178. ['o.mall_id' => $mall_id],
  179. ['>=', 'o.status', StatusEnum::DISABLED],
  180. ['>', 'yo.store_id', 0],
  181. ['o.order_status' => [-4,1,2,3,4,6]]
  182. ],
  183. 'with' => ['detail'],
  184. 'join' => [['LEFT JOIN', Order::tableName(). ' as o', "o.id = yo.order_id"]],
  185. 'select' => 'o.*,yo.store_id',
  186. ]);
  187. // print_r($order_list);exit;
  188. $ranking_data = [];
  189. if (!empty($order_list)) {
  190. foreach ($order_list as $key => $value) {
  191. $ranking_data[$value['store_id']];
  192. if (empty($ranking_data[$value['store_id']][$value['user_id']])) {
  193. $ranking_data[$value['store_id']][$value['user_id']] = [
  194. 'store_id' => $value['store_id'],
  195. 'mall_id' => $mall_id,
  196. 'user_id' => $value['user_id'],
  197. 'order_nums' => 0,
  198. 'pay_nums' => 0,
  199. 'pay_money' => 0,
  200. 'refund_nums' => 0,
  201. 'refund_money' => 0,
  202. ];
  203. if ($value['order_status'] == -4 && $value['is_feedback'] == 2) {
  204. $ranking_data[$value['store_id']][$value['user_id']]['order_nums'] = 1;
  205. $ranking_data[$value['store_id']][$value['user_id']]['pay_nums'] = 1;
  206. $ranking_data[$value['store_id']][$value['user_id']]['pay_money'] = $value['pay_money'];
  207. $ranking_data[$value['store_id']][$value['user_id']]['refund_nums'] = 1;
  208. $ranking_data[$value['store_id']][$value['user_id']]['refund_money'] = $value['pay_money'];
  209. } else if ($value['order_status'] >= 1) {
  210. $ranking_data[$value['store_id']][$value['user_id']]['order_nums'] = 1;
  211. $ranking_data[$value['store_id']][$value['user_id']]['pay_nums'] = 1;
  212. $ranking_data[$value['store_id']][$value['user_id']]['pay_money'] = $value['pay_money'];
  213. }
  214. } else {
  215. if ($value['order_status'] == -4 && $value['is_feedback'] == 2) {
  216. $ranking_data[$value['store_id']][$value['user_id']]['order_nums'] += 1;
  217. $ranking_data[$value['store_id']][$value['user_id']]['pay_nums'] += 1;
  218. $ranking_data[$value['store_id']][$value['user_id']]['pay_money'] += $value['pay_money'];
  219. $ranking_data[$value['store_id']][$value['user_id']]['refund_nums'] += 1;
  220. $ranking_data[$value['store_id']][$value['user_id']]['refund_money'] += $value['pay_money'];
  221. } else if ($value['order_status'] >= 1) {
  222. $ranking_data[$value['store_id']][$value['user_id']]['order_nums'] += 1;
  223. $ranking_data[$value['store_id']][$value['user_id']]['pay_nums'] += 1;
  224. $ranking_data[$value['store_id']][$value['user_id']]['pay_money'] += $value['pay_money'];
  225. }
  226. }
  227. }
  228. }
  229. if (!empty($ranking_data)) {
  230. //记录数据
  231. foreach ($ranking_data as $rk => $rv) {
  232. foreach ($rv as &$item) {
  233. if ($item['order_nums'] == 0 && $item['pay_nums'] == 0) continue;
  234. // print_r($item);exit;
  235. //查找是否已存在该商品数据
  236. $store_user = HappinessStoreUser::getOne([
  237. ['mall_id' => $mall_id],
  238. ['store_id' => $item['store_id']],
  239. ['user_id' => $item['user_id']],
  240. ]);
  241. if (empty($store_user)) {
  242. $store_user = new HappinessStoreUser();
  243. $store_user->mall_id = $mall_id;
  244. $store_user->store_id = $item['store_id'];
  245. $store_user->user_id = $item['user_id'];
  246. $store_user->loadDefaultValues();
  247. }
  248. $store_user->order_nums = $item['order_nums'];
  249. $store_user->pay_nums = $item['pay_nums'];
  250. $store_user->pay_money = $item['pay_money'];
  251. $store_user->refund_nums = $item['refund_nums'];
  252. $store_user->refund_money = $item['refund_money'];
  253. // $res = $store_user->save();
  254. if (!$store_user->save()) {
  255. // print_r($item);exit;
  256. print_r($store_user);exit;
  257. continue;
  258. }
  259. }
  260. }
  261. echo true;
  262. }
  263. }
  264. }
  265. }