objCustomerCache = new CustomerCache(); $this->objOverviewCache = new OverviewCache(); $this->objDGoodsBasic = new DGoodsBasic(); $this->objDOrder = new DOrder(); $this->objDOrderGoods = new DOrderGoods(); $this->objDOrderReceive = new DOrderReceive(); echo '统计订单信息:' . date('Y-d-d H:i:s') . ':' . PHP_EOL; } /** * 订单统计项 * @param $params * @throws \Exception */ public function push($params) { if (empty($params['no'])) die('订单数据为空'); $this->enterpriseId = $params['enterpriseId']; $this->userCenterId = $params['userCenterId']; self::orderSubTable($this->objDOrder);//切换订单分表 self::orderSubTable($this->objDOrderGoods);//切换订单商品分表 self::orderSubTable($this->objDOrderReceive);//切换订单收货分表 $formatData = self::getOrderInfo($params);//获取订单信息 switch ($params['noticeType']) { case 'create'://创建订单 $allOrder = $formatData['orderData']['masterOrder']; foreach ($allOrder as $order) { $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderTotalMoney', $order['payAmount']);//下单金额 $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderTotalMoney', $order['payAmount'], $order['shopId']); } break; case 'audit'://确认订单 if(isset($formatData['orderData']['masterOrder'][0]['createTime']) && $formatData['orderData']['masterOrder'][0]['createTime'] < strtotime(date("Y-m-d",time()))){ echo '这不是今天的订单, 不缓存数据___________________________________________________________________________________'; break; } echo '进入审核订单-------------------------------------------------------------------------------------------------------'; //var_dump($formatData); $allOrder = $formatData['orderData']['masterOrder'][0];//订单主数据 $allOrderGoods = self::getBasicInfo($formatData['orderData']['orderGoods']);//订单商品数据 $allOrderReceive = $formatData['orderData']['orderReceive'][0];//订单收货信息 $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderConfirmedMoney', $allOrder['payAmount']);//营业额 $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderConfirmedMoney', $allOrder['payAmount'], $allOrder['shopId']); $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'todayConfirmedOrderNum', 1);//今日订单 $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'todayConfirmedOrderNum', 1, $allOrder['shopId']); $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderNumOfNotOutOfStock', 1);//未出库订单 $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'orderNumOfNotOutOfStock', '1', $allOrder['shopId']); $this->objCustomerCache->cacheCustomerOrderInfo($this->enterpriseId, $allOrderReceive['provinceCode'], $allOrderReceive['cityCode'], $allOrderReceive['districtCode'], $allOrder['customerId']);//下单客户数 $this->objCustomerCache->cacheCustomerOrderInfo($this->enterpriseId, $allOrderReceive['provinceCode'], $allOrderReceive['cityCode'], $allOrderReceive['districtCode'], $allOrder['customerId'], $allOrder['shopId']);//下单客户数 $this->objOverviewCache->saveOrderTrend($this->enterpriseId, $allOrder['payAmount'], $allOrder['buyTotal']);//趋势图订单数量 foreach ($allOrderGoods as $goods) { //商品的大分类 $this->objOverviewCache->saveRanking($this->enterpriseId, 'categoryRanking', $goods['parentCategoryId'], $goods['buyNum']);//销量 $this->objOverviewCache->saveRanking($this->enterpriseId, 'categoryRanking', $goods['parentCategoryId'], $goods['buyNum'], $allOrder['shopId']); $this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'categoryRanking', $goods['parentCategoryId'], $goods['totalMoney']);//销额 $this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'categoryRanking', $goods['parentCategoryId'], $goods['totalMoney'], $allOrder['shopId']); //查询商品 $this->objOverviewCache->saveRanking($this->enterpriseId, 'goodsRanking', $goods['goodsBasicId'], $goods['buyNum']);//销量 $this->objOverviewCache->saveRanking($this->enterpriseId, 'goodsRanking', $goods['goodsBasicId'], $goods['buyNum'], $allOrder['shopId']); $this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'goodsRanking', $goods['goodsBasicId'], $goods['totalMoney']);//销额 $this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'goodsRanking', $goods['goodsBasicId'], $goods['totalMoney'], $allOrder['shopId']); //客户 $this->objOverviewCache->saveRanking($this->enterpriseId, 'customerRanking', $allOrder['customerId'], $goods['buyNum']);//销量 $this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'customerRanking', $allOrder['customerId'], $goods['totalMoney']);//销售额 } //供应商 //$this->objOverviewCache->saveRanking($this->enterpriseId, 'supplierRanking', $allOrder['supplierId'], 1);//销量 //$this->objOverviewCache->saveRanking($this->enterpriseId, 'supplierRanking', $allOrder['supplierId'], 1, $allOrder['shopId']); //$this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'supplierRanking', $allOrder['supplierId'], $allOrder['payAmount']);//销额 //$this->objOverviewCache->saveSalesMoneyRanking($this->enterpriseId, 'supplierRanking', $allOrder['supplierId'], $allOrder['payAmount'], $allOrder['shopId']); //TODO $this->objCustomerCache->delCustomerAfterPlaceOrder($allOrder['customerId'], $this->enterpriseId); break; case 'close'://取消订单 $allOrder = $formatData['orderData']['masterOrder'][0]; $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'todayCanceledOrder', 1);//取消订单数 $this->objOverviewCache->saveBusinessOverview($this->enterpriseId, 'todayCanceledOrder', 1, $allOrder['shopId']); break; } echo '统计订单信息成功' . PHP_EOL; } /** * @param $allOrderGoods * @return mixed * @throws \Exception */ private function getBasicInfo($allOrderGoods) { $this->objDGoodsBasic->setTable($this->objDGoodsBasic->get_Table() . '_' . $this->enterpriseId); $dbResult = $this->objDGoodsBasic->select(['id' => array_column($allOrderGoods, 'goodsBasicId')], 'categoryPath,brandId,id'); if ($dbResult === false) { echo '查询商品信息时发生错误' . $this->objDGoodsBasic->error() . PHP_EOL; die; } if (empty($dbResult)) echo '查询商品信息为空' . PHP_EOL; $allGoodsInfo = []; foreach ($dbResult as &$val) { $categoryArr = explode(',', $val['categoryPath']); $val['parentCategoryId'] = array_shift($categoryArr); $allGoodsInfo[$val['id']] = $val; } foreach ($allOrderGoods as &$goods) { $goods['parentCategoryId'] = isset($allGoodsInfo[$goods['goodsBasicId']]['parentCategoryId']) ? $allGoodsInfo[$goods['goodsBasicId']]['parentCategoryId'] : 0; $goods['brandId'] = isset($allGoodsInfo[$goods['goodsBasicId']]['brandId']) ? $allGoodsInfo[$goods['goodsBasicId']]['brandId'] : ''; } return $allOrderGoods; } /** * 获取订单信息 * @param $data * @return mixed */ private function getOrderInfo($data) { $no = $data['no'];//订单编号 $orderMaster = $this->objDOrder->select(['no' => $no]); if ($orderMaster === false) { echo '获取订单数据时出错' . $this->objDOrder->error() . PHP_EOL; die; } if (empty($orderMaster)) { echo '获取订单数据为空' . PHP_EOL; die; } $data['orderData']['masterOrder'] = $orderMaster; $orderGoods = $this->objDOrderGoods->select(['no' => $no]); if ($orderGoods === false) { echo '获取订单商品数据时出错' . $this->objDOrderGoods->error() . PHP_EOL; die; } if (empty($orderGoods)) { echo '获取订单商品数据为空' . PHP_EOL; die; } $data['orderData']['orderGoods'] = $orderGoods; $orderReceive = $this->objDOrderReceive->select(['no' => $no]); if ($orderReceive === false) { echo '获取订单收货数据时出错' . $this->objDOrderReceive->error() . PHP_EOL; die; } if (empty($orderReceive)) { echo '获取订单收货数据为空' . PHP_EOL; die; } $data['orderData']['orderReceive'] = $orderReceive; // echo '订单数据:'; // print_r($data); return $data; } /** * 切换分表 * @param BaseDao $object * @throws \Exception */ public function orderSubTable($object) { $tableName = $object->getTableName($object->get_Table() . '_' . $this->enterpriseId, $this->userCenterId, $this->cutTable); $object->setTable($tableName); } }