MOrderStatistics.Class.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. /**
  3. * 订单,后台首页缓存数据统计
  4. * Created by PhpStorm.
  5. * User: XiaoMing
  6. * Date: 2020/1/6
  7. * Time: 17:23
  8. */
  9. namespace Jobs\Model\MTopic\Order;
  10. use Jobs\Cache\CustomerCache;
  11. use Jobs\Cache\OverviewCache;
  12. use Jobs\Dao\BaseDao;
  13. use Jobs\Dao\DGoodsBasic;
  14. use Jobs\Dao\Order\DOrder;
  15. use Jobs\Dao\Order\DOrderGoods;
  16. use Jobs\Dao\Order\DOrderReceive;
  17. class MOrderStatistics
  18. {
  19. private $enterpriseId;
  20. private $userCenterId;
  21. private $objOverviewCache;
  22. private $objCustomerCache;
  23. private $objDGoodsBasic;
  24. private $objDOrder;
  25. private $objDOrderGoods;
  26. private $objDOrderReceive;
  27. private $cutTable = 200000;
  28. /**
  29. * MGrantCoupon constructor.
  30. * @throws \Exception
  31. */
  32. public function __construct()
  33. {
  34. $this->objCustomerCache = new CustomerCache();
  35. $this->objOverviewCache = new OverviewCache();
  36. $this->objDGoodsBasic = new DGoodsBasic();
  37. $this->objDOrder = new DOrder();
  38. $this->objDOrderGoods = new DOrderGoods();
  39. $this->objDOrderReceive = new DOrderReceive();
  40. echo '统计订单信息:' . date('Y-d-d H:i:s') . ':' . PHP_EOL;
  41. }
  42. /**
  43. * 订单统计项
  44. * @param $params
  45. * @throws \Exception
  46. */
  47. public function push($params)
  48. {
  49. if (empty($params['no'])) die('订单数据为空');
  50. $this->enterpriseId = $params['enterpriseId'];
  51. $this->userCenterId = $params['userCenterId'];
  52. self::orderSubTable($this->objDOrder);//切换订单分表
  53. self::orderSubTable($this->objDOrderGoods);//切换订单商品分表
  54. self::orderSubTable($this->objDOrderReceive);//切换订单收货分表
  55. $formatData = self::getOrderInfo($params);//获取订单信息
  56. switch ($params['noticeType']) {
  57. case 'create'://创建订单
  58. $allOrder = $formatData['orderData']['masterOrder'];
  59. foreach ($allOrder as $order) {
  60. $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderTotalMoney', $order['payAmount']);//下单金额
  61. $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderTotalMoney', $order['payAmount'], $order['shopId']);
  62. }
  63. break;
  64. case 'audit'://确认订单
  65. if(isset($formatData['orderData']['masterOrder'][0]['createTime']) && $formatData['orderData']['masterOrder'][0]['createTime'] < strtotime(date("Y-m-d",time()))){
  66. echo '这不是今天的订单, 不缓存数据___________________________________________________________________________________';
  67. break;
  68. }
  69. echo '进入审核订单-------------------------------------------------------------------------------------------------------';
  70. //var_dump($formatData);
  71. $allOrder = $formatData['orderData']['masterOrder'][0];//订单主数据
  72. $allOrderGoods = self::getBasicInfo($formatData['orderData']['orderGoods']);//订单商品数据
  73. $allOrderReceive = $formatData['orderData']['orderReceive'][0];//订单收货信息
  74. $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderConfirmedMoney', $allOrder['payAmount']);//营业额
  75. $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderConfirmedMoney', $allOrder['payAmount'], $allOrder['shopId']);
  76. $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'todayConfirmedOrderNum', 1);//今日订单
  77. $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'todayConfirmedOrderNum', 1, $allOrder['shopId']);
  78. $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderNumOfNotOutOfStock', 1);//未出库订单
  79. $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderNumOfNotOutOfStock', '1', $allOrder['shopId']);
  80. $this->objCustomerCache->cacheCustomerOrderInfo($this->enterpriseId, $allOrderReceive['provinceCode'], $allOrderReceive['cityCode'], $allOrderReceive['districtCode'], $allOrder['customerId']);//下单客户数
  81. $this->objCustomerCache->cacheCustomerOrderInfo($this->enterpriseId, $allOrderReceive['provinceCode'], $allOrderReceive['cityCode'], $allOrderReceive['districtCode'], $allOrder['customerId'], $allOrder['shopId']);//下单客户数
  82. $this->objOverviewCache->saveOrderTrend($this->enterpriseId, $allOrder['payAmount'], $allOrder['buyTotal']);//趋势图订单数量
  83. foreach ($allOrderGoods as $goods) {
  84. //商品的大分类
  85. $this->objOverviewCache->saveRanking($this->enterpriseId, 'categoryRanking', $goods['parentCategoryId'], $goods['buyNum']);//销量
  86. $this->objOverviewCache->saveRanking($this->enterpriseId, 'categoryRanking', $goods['parentCategoryId'], $goods['buyNum'], $allOrder['shopId']);
  87. $this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'categoryRanking', $goods['parentCategoryId'], $goods['totalMoney']);//销额
  88. $this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'categoryRanking', $goods['parentCategoryId'], $goods['totalMoney'], $allOrder['shopId']);
  89. //查询商品
  90. $this->objOverviewCache->saveRanking($this->enterpriseId, 'goodsRanking', $goods['goodsBasicId'], $goods['buyNum']);//销量
  91. $this->objOverviewCache->saveRanking($this->enterpriseId, 'goodsRanking', $goods['goodsBasicId'], $goods['buyNum'], $allOrder['shopId']);
  92. $this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'goodsRanking', $goods['goodsBasicId'], $goods['totalMoney']);//销额
  93. $this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'goodsRanking', $goods['goodsBasicId'], $goods['totalMoney'], $allOrder['shopId']);
  94. //客户
  95. $this->objOverviewCache->saveRanking($this->enterpriseId, 'customerRanking', $allOrder['customerId'], $goods['buyNum']);//销量
  96. $this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'customerRanking', $allOrder['customerId'], $goods['totalMoney']);//销售额
  97. }
  98. //供应商
  99. //$this->objOverviewCache->saveRanking($this->enterpriseId, 'supplierRanking', $allOrder['supplierId'], 1);//销量
  100. //$this->objOverviewCache->saveRanking($this->enterpriseId, 'supplierRanking', $allOrder['supplierId'], 1, $allOrder['shopId']);
  101. //$this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'supplierRanking', $allOrder['supplierId'], $allOrder['payAmount']);//销额
  102. //$this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'supplierRanking', $allOrder['supplierId'], $allOrder['payAmount'], $allOrder['shopId']);
  103. //TODO
  104. $this->objCustomerCache->delCustomerAfterPlaceOrder($allOrder['customerId'], $this->enterpriseId);
  105. break;
  106. case 'close'://取消订单
  107. $allOrder = $formatData['orderData']['masterOrder'][0];
  108. $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'todayCanceledOrder', 1);//取消订单数
  109. $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'todayCanceledOrder', 1, $allOrder['shopId']);
  110. break;
  111. }
  112. echo '统计订单信息成功' . PHP_EOL;
  113. }
  114. /**
  115. * @param $allOrderGoods
  116. * @return mixed
  117. * @throws \Exception
  118. */
  119. private function getBasicInfo($allOrderGoods)
  120. {
  121. $this->objDGoodsBasic->setTable($this->objDGoodsBasic->get_Table() . '_' . $this->enterpriseId);
  122. $dbResult = $this->objDGoodsBasic->select(['id' => array_column($allOrderGoods, 'goodsBasicId')], 'categoryPath,brandId,id');
  123. if ($dbResult === false) {
  124. echo '查询商品信息时发生错误' . $this->objDGoodsBasic->error() . PHP_EOL;
  125. die;
  126. }
  127. if (empty($dbResult)) echo '查询商品信息为空' . PHP_EOL;
  128. $allGoodsInfo = [];
  129. foreach ($dbResult as &$val) {
  130. $categoryArr = explode(',', $val['categoryPath']);
  131. $val['parentCategoryId'] = array_shift($categoryArr);
  132. $allGoodsInfo[$val['id']] = $val;
  133. }
  134. foreach ($allOrderGoods as &$goods) {
  135. $goods['parentCategoryId'] = isset($allGoodsInfo[$goods['goodsBasicId']]['parentCategoryId']) ? $allGoodsInfo[$goods['goodsBasicId']]['parentCategoryId'] : 0;
  136. $goods['brandId'] = isset($allGoodsInfo[$goods['goodsBasicId']]['brandId']) ? $allGoodsInfo[$goods['goodsBasicId']]['brandId'] : '';
  137. }
  138. return $allOrderGoods;
  139. }
  140. /**
  141. * 获取订单信息
  142. * @param $data
  143. * @return mixed
  144. */
  145. private function getOrderInfo($data)
  146. {
  147. $no = $data['no'];//订单编号
  148. $orderMaster = $this->objDOrder->select(['no' => $no]);
  149. if ($orderMaster === false) {
  150. echo '获取订单数据时出错' . $this->objDOrder->error() . PHP_EOL;
  151. die;
  152. }
  153. if (empty($orderMaster)) {
  154. echo '获取订单数据为空' . PHP_EOL;
  155. die;
  156. }
  157. $data['orderData']['masterOrder'] = $orderMaster;
  158. $orderGoods = $this->objDOrderGoods->select(['no' => $no]);
  159. if ($orderGoods === false) {
  160. echo '获取订单商品数据时出错' . $this->objDOrderGoods->error() . PHP_EOL;
  161. die;
  162. }
  163. if (empty($orderGoods)) {
  164. echo '获取订单商品数据为空' . PHP_EOL;
  165. die;
  166. }
  167. $data['orderData']['orderGoods'] = $orderGoods;
  168. $orderReceive = $this->objDOrderReceive->select(['no' => $no]);
  169. if ($orderReceive === false) {
  170. echo '获取订单收货数据时出错' . $this->objDOrderReceive->error() . PHP_EOL;
  171. die;
  172. }
  173. if (empty($orderReceive)) {
  174. echo '获取订单收货数据为空' . PHP_EOL;
  175. die;
  176. }
  177. $data['orderData']['orderReceive'] = $orderReceive;
  178. // echo '订单数据:';
  179. // print_r($data);
  180. return $data;
  181. }
  182. /**
  183. * 切换分表
  184. * @param BaseDao $object
  185. * @throws \Exception
  186. */
  187. public function orderSubTable($object)
  188. {
  189. $tableName = $object->getTableName($object->get_Table() . '_' . $this->enterpriseId, $this->userCenterId, $this->cutTable);
  190. $object->setTable($tableName);
  191. }
  192. }