123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- <?php
- /**
- * 订单,后台首页缓存数据统计
- * Created by PhpStorm.
- * User: XiaoMing
- * Date: 2020/1/6
- * Time: 17:23
- */
- namespace Jobs\Model\MTopic\Order;
- use Jobs\Cache\CustomerCache;
- use Jobs\Cache\OverviewCache;
- use Jobs\Dao\BaseDao;
- use Jobs\Dao\DGoodsBasic;
- use Jobs\Dao\Order\DOrder;
- use Jobs\Dao\Order\DOrderGoods;
- use Jobs\Dao\Order\DOrderReceive;
- class MOrderStatistics
- {
- private $enterpriseId;
- private $userCenterId;
- private $objOverviewCache;
- private $objCustomerCache;
- private $objDGoodsBasic;
- private $objDOrder;
- private $objDOrderGoods;
- private $objDOrderReceive;
- private $cutTable = 200000;
- /**
- * MGrantCoupon constructor.
- * @throws \Exception
- */
- public function __construct()
- {
- $this->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);
- }
- }
|