store_id = $params['store_id'] ?? 0; $this->mall_id = $params['mall_id'] ?? 0; } //获取门店财务数据 public function getStoreFinanceList($params) { try { $where = [ ['mall_id' => $this->mall_id], ['check_status' => StoreEnum::CHECK_ADOPT], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]] ]; if (!empty($params['keyword'])) $where[] = ['or', ['like', 'id', $params['keyword']], ['like', 'store_name', $params['keyword']], ['like', 'shop_mobile', $params['keyword']]]; $orderBy = 'id desc'; $store_params = [ 'select' => 'id,mall_id,user_id,shop_owner,shop_mobile,store_name,c_id,province_id,check_status,city_id,district_id,address,logo_img,total_money,balance,expire_time,user_nums,status,created_at,is_freeze,total_order_money,total_settled_amount,unsettled_amount,total_num,street_id,community_id,is_sync,sync_status', 'where' => $where, 'order' => $orderBy, 'page' => $params['page'] ?? 1, 'limit' => $params['limit'] ?? 10, ]; $store_list = Store::listPage($store_params); $order_total_arr = []; $order_total_arr2 = []; if (!empty($store_list['list'])) { foreach ($store_list['list'] as &$item) { $store_total_data = $this->getStoreFinanceData(['mall_id' => $this->mall_id, 'store_id' => $item['id'], 'date' => $params['date']]); $item['total_data'] = $store_total_data; } } // $store_list['order_total_arr'] = $order_total_arr; // $store_list['order_total_arr2'] = $order_total_arr2; return $store_list; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } public function getStoreStatics($params) { try { $params['mall_id'] = $this->mall_id; $total_data = $this->getStoreFinanceData($params); $order_total_arr[] = ['type' => 'today_pay_money', 'name' => '今日成交金额', 'value' => $total_data['today_pay_money'] ?: 0, 'prompt' => '']; $order_total_arr[] = ['type' => 'today_refund_money', 'name' => '今日退款金额', 'value' => $total_data['today_refund_money'] ?: 0, 'prompt' => '']; $order_total_arr[] = ['type' => 'today_commission_money', 'name' => '今日预计到账金额', 'value' => $total_data['today_commission_money'] ?: 0, 'prompt' => '']; $order_total_arr[] = ['type' => 'today_order_num', 'name' => '今日订单数量', 'value' => $total_data['today_order_num'] ?: 0, 'prompt' => '']; $order_total_arr2[] = ['type' => 'total_pay_money', 'name' => '累计成交金额', 'value' => $total_data['total_pay_money'] ?: 0, 'prompt' => '']; $order_total_arr2[] = ['type' => 'total_refund_money', 'name' => '累计退款金额', 'value' => $total_data['total_refund_money'] ?: 0, 'prompt' => '']; $order_total_arr2[] = ['type' => 'total_commission_money', 'name' => '累计到账金额', 'value' => $total_data['total_commission_money'] ?: 0, 'prompt' => '']; $order_total_arr2[] = ['type' => 'total_order_num', 'name' => '累计已付款订单数量', 'value' => $total_data['total_order_num'] ?: 0, 'prompt' => '']; return ['order_total_arr' => $order_total_arr, 'order_total_arr2' => $order_total_arr2]; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } //获取门店累计数据 public function getStoreFinanceData($params = []) { try { $where = [ ['mall_id' => $params['mall_id']], ['status' => StatusEnum::ENABLED], ]; if (!empty($params['store_id'])) $where[] = ['store_id' => $params['store_id']]; if (!empty($params['date'][0])) $where[] = ['>=', 'created_at', strtotime($params['date'][0])]; if (!empty($params['date'][1])) $where[] = ['<=', 'created_at', strtotime($params['date'][1].' 23:59:59')]; $today = date('Y-m-d', time()); $today_pay_money = 0; $today_order_num = 0; $total_pay_money = 0; $total_order_num = 0; $today_refund_money = 0; $total_refund_money = 0; $today_commission_money = 0; $total_commission_money = 0; //获取门店总数据 $store_census_list = StoreCensus::lists([ 'where' => $where, // 'index' => 'date_time', 'order' => 'id desc', ]); if (!empty($store_census_list)) { $total_pay_money = bcadd(array_sum(array_column($store_census_list, 'sales_money')), array_sum(array_column($store_census_list, 'cashier_sales_money')), 2); $total_order_num = bcadd(array_sum(array_column($store_census_list, 'order_nums')), array_sum(array_column($store_census_list, 'cashier_order_nums'))); // $total_commission_money = array_sum(array_column($store_census_list, 'settlement_commission')); $total_refund_money = array_sum(array_column($store_census_list, 'order_refund_money')); } //获取今日门店数据 $where = [ ['mall_id' => $params['mall_id']], ['status' => StatusEnum::ENABLED], ]; if (!empty($params['store_id'])) $where[] = ['store_id' => $params['store_id']]; $where[] = ['date_time' => $today]; $store_census_today_list = StoreCensus::lists([ 'where' => $where, // 'index' => 'date_time', 'order' => 'id desc', ]); if (!empty($store_census_today_list)) { $today_pay_money = bcadd(array_sum(array_column($store_census_today_list, 'sales_money')), array_sum(array_column($store_census_today_list, 'cashier_sales_money')), 2); $today_order_num = bcadd(array_sum(array_column($store_census_today_list, 'order_nums')), array_sum(array_column($store_census_today_list, 'cashier_order_nums'))); // $today_commission_money = array_sum(array_column($store_census_today_list, 'settlement_commission')); $today_refund_money = array_sum(array_column($store_census_today_list, 'order_refund_money')); } $total_refund_money = bcmul($total_refund_money, 1, 2); $today_refund_money = bcmul($today_refund_money, 1, 2); //获取订单结算金额数据 $where = [ 'mall_id' => $params['mall_id'], 'status' => StatusEnum::ENABLED, ]; if (!empty($params['store_id'])) $where['store_id'] = $params['store_id']; $today_commission_money = StoreCommission::find()->where($where)->andWhere(['>=', 'created_at', strtotime($today)])->andWhere(['is_settlement' => [StatusEnum::DISABLED, StatusEnum::ENABLED]])->sum('amount_received'); $sql = StoreCommission::find()->where($where)->andWhere(['is_settlement' => StatusEnum::ENABLED]); if (!empty($params['date'][0])) $sql->andWhere(['>=', 'updated_at', strtotime($params['date'][0])]); if (!empty($params['date'][1])) $sql->andWhere(['<=', 'updated_at', strtotime($params['date'][1].' 23:59:59')]); $total_commission_money = $sql->sum('amount_received'); $total_commission_money = bcmul($total_commission_money, 1, 2); $today_commission_money = bcmul($today_commission_money, 1, 2); $data = [ 'today_pay_money' => $today_pay_money ?? 0, 'today_order_num' => $today_order_num ?? 0, 'total_pay_money' => $total_pay_money ?? 0, 'total_order_num' => $total_order_num ?? 0, 'today_refund_money' => $today_refund_money ?? 0, 'total_refund_money' => $total_refund_money ?? 0, 'today_commission_money' => $today_commission_money ?? 0, 'total_commission_money' => $total_commission_money ?? 0, ]; return $data; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } //门店财务明细 public function getStoreFinanceDetail($params) { try { $where = [ ['mall_id' => $this->mall_id], ['>', 'order_status', 0], ['status' => 1], ]; if (!empty($params['store_id'])) $where[] = ['store_id' => $params['store_id']]; if (isset($params['order_status']) && $params['order_status'] != '') $where[] = ['order_status' => $params['order_status']]; if (!empty($params['goods_keyword'])) $where[] = ['or', ['like', 'goods_id', $params['goods_keyword']], ['like', 'goods_name', $params['goods_keyword']]]; //查找下单用户 if (!empty($params['keyword'])) { $user = User::lists([ 'where' => [ ['mall_id' => $this->mall_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], ['or', ['like', 'id', $params['keyword']], ['like', 'nickname', $params['keyword']], ['like', 'mobile', $params['keyword']]] ], ]); if (!empty($user)) { $user_ids = array_column($user, 'id'); $where[] = ['user_id' => $user_ids]; } else { $where[] = ['user_id' => []]; } } //查找订单 if (!empty($params['order_no']) || !empty($params['date'])) { $order_where = [ ['mall_id' => $this->mall_id], ['>', 'order_status', 0], ]; if (!empty($params['order_no'])) $order_where[] = ['order_no' => $params['order_no']]; if (!empty($params['date'][0])) $order_where[] = ['>=', 'pay_time', strtotime($params['date'][0])]; if (!empty($params['date'][1])) $order_where[] = ['<=', 'pay_time', strtotime($params['date'][1]. ' 23:59:59')]; $order_list = StoreOrder::lists([ 'where' => $order_where, 'select' => 'id,mall_id,order_no,order_status,pay_time', ]); if (!empty($order_list)) { $order_ids = array_column($order_list, 'id'); $where[] = ['order_id' => $order_ids]; } else { $where[] = ['order_id' => []]; } } //查找门店 if (!empty($params['store_keyword'])) { $store_where = [ ['mall_id' => $this->mall_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]] ]; if ($params['store_keyword']) $store_where[] = ['or', ['like', 'id', $params['store_keyword']], ['like', 'shop_mobile', $params['store_keyword']], ['like', 'store_name', $params['store_keyword']]]; $store_list = Store::lists([ 'where' => $store_where, 'select' => 'id,mall_id,status,shop_mobile,store_name', ]); if (!empty($store_list)) { $store_ids = array_column($store_list, 'id'); $where[] = ['store_id' => $store_ids]; } else { $where[] = ['store_id' => []]; } } $detail_params = [ 'where' => $where, 'with' => ['user', 'order', 'store'], 'page' => $params['page'] ?? 1, 'limit' => $params['limit'] ?? 20, 'order' => 'id desc', ]; $list = StoreOrderDetail::listPage($detail_params); if (!empty($list['list'])) { $order_list = array_column($list['list'], 'order', 'id'); $order_no_list = array_column($order_list, 'order_no', 'id'); //获取订单结算数据 $commission_list = StoreCommission::lists([ 'where' => [ ['mall_id' => $this->mall_id], ['order_no' => $order_no_list], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], ], 'index' => 'order_no', ]); foreach ($list['list'] as &$item) { $item['commission_data'] = $commission_list[$item['order']['order_no']]; } } return $list; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } public function getCashierFinanceDetail($params) { try { $where = [ ['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED], ['pay_status' => 1], ]; if (!empty($params['store_id'])) $where[] = ['store_id' => $params['store_id']]; if (!empty($params['order_no'])) $where[] = ['order_no' => $params['order_no']]; if (!empty($params['date'][0])) $where[] = ['>=', 'pay_time', strtotime($params['date'][0])]; if (!empty($params['date'][1])) $where[] = ['<=', 'pay_time', strtotime($params['date'][1]. ' 23:59:59')]; //查找下单用户 if (!empty($params['keyword'])) { $user = User::lists([ 'where' => [ ['mall_id' => $this->mall_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], ['or', ['like', 'id', $params['keyword']], ['like', 'nickname', $params['keyword']], ['like', 'mobile', $params['keyword']]] ], ]); if (!empty($user)) { $user_ids = array_column($user, 'id'); $where[] = ['user_id' => $user_ids]; } else { $where[] = ['user_id' => []]; } } //查找门店 if (!empty($params['store_keyword'])) { $store_where = [ ['mall_id' => $this->mall_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]] ]; if ($params['store_keyword']) $store_where[] = ['or', ['like', 'id', $params['store_keyword']], ['like', 'shop_mobile', $params['store_keyword']], ['like', 'store_name', $params['store_keyword']]]; $store_list = Store::lists([ 'where' => $store_where, 'select' => 'id,mall_id,status,shop_mobile,store_name', ]); if (!empty($store_list)) { $store_ids = array_column($store_list, 'id'); $where[] = ['store_id' => $store_ids]; } else { $where[] = ['store_id' => []]; } } $detail_params = [ 'where' => $where, 'with' => ['user', 'store'], 'page' => $params['page'] ?? 1, 'limit' => $params['limit'] ?? 20, 'order' => 'id desc', ]; $list = StoreCashierOrder::listPage($detail_params); if (!empty($list['list'])) { $order_no_list = array_column($list['list'], 'order_no', 'id'); //获取订单结算数据 $commission_list = StoreCommission::lists([ 'where' => [ ['mall_id' => $this->mall_id], ['order_no' => $order_no_list], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], ], 'index' => 'order_no', ]); foreach ($list['list'] as &$item) { $item['commission_data'] = $commission_list[$item['order_no']]; } } return $list; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } //独立门店获取门店财务数据 public function getClientFinanceData($params) { try { if ($params['tabname'] == 'order-detail') { $list = $this->getStoreFinanceDetail($params); } else { $list = $this->getCashierFinanceDetail($params); } return $list; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } //门店财务数据 public function storeFinanceFieldList($field = null) { try { $fields = [ 'store_id' => '门店ID', 'store_name' => '门店名称', 'shop_mobile' => '手机号', 'today_pay_money' => '今日成交金额', 'today_refund_money' => '今日退款金额', 'today_commission_money' => '今日预计到账金额', 'today_order_num' => '今日订单数量', 'total_pay_money' => '累计成交金额', 'total_refund_money' => '累计退款金额', 'total_commission_money' => '累计到账金额', 'total_order_num' => '累计已付款订单数量', ]; if ($field === null) return $fields; $temp = []; foreach ($field as $val) { if (isset($fields[$val])) $temp[$val] = $fields[$val]; } return $temp; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } //门店财务明细 public function storeFinanceDetailFieldList($field = null) { try { $fields = [ 'nickname' => '消费者昵称', 'user_id' => '消费者ID', 'mobile' => '手机号', 'order_money' => '订单金额', 'discount_money' => '优惠金额', 'pay_money' => '支付金额', 'order_no' => '订单编号', 'goods_name' => '商品名称', 'goods_attr_name' => '商品规格', 'score_deduction_bear' => '积分抵扣承担', 'addons_bonus' => '插件(佣金)', 'settle_type' => '佣金来源', 'price' => '价格', 'num' => '数量', 'goods_price' => '成交金额(元)', 'store_send_commission' => '门店股东(佣金)', 'higo_reward' => '嗨呗不足抵扣', 'service_charge' => '服务费', 'pay_time' => '成交时间', 'order_status' => '订单状态', 'amount_received' => '到账金额(元)', 'store_contributing_money' => '会员折扣金额', 'amount_received_score' => '到账积分', 'store_id' => '门店ID', 'store_name' => '门店名称', ]; if ($field === null) return $fields; $temp = []; foreach ($field as $val) { if (isset($fields[$val])) $temp[$val] = $fields[$val]; } return $temp; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } //门店财务明细 public function cashierFinanceDetailFieldList($field = null) { try { $fields = [ 'nickname' => '消费者昵称', 'user_id' => '消费者ID', 'mobile' => '手机号', 'order_money' => '订单金额', 'discount_money' => '优惠金额', 'pay_money' => '支付金额', 'order_no' => '订单编号', 'score_deduction_bear' => '积分抵扣承担', 'addons_bonus' => '插件(佣金)', 'settle_type' => '佣金来源', 'store_send_commission' => '门店股东(佣金)', 'higo_reward' => '嗨呗不足抵扣', 'service_charge' => '服务费', 'pay_time' => '成交时间', 'amount_received' => '到账金额(元)', 'store_contributing_money' => '会员折扣金额', 'amount_received_score' => '到账积分', 'store_id' => '门店ID', 'store_name' => '门店名称', ]; if ($field === null) return $fields; $temp = []; foreach ($field as $val) { if (isset($fields[$val])) $temp[$val] = $fields[$val]; } return $temp; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } public function exportStoreFinance($data) { try { date_default_timezone_set('Asia/Shanghai'); $download = Download::getOne([ ['id' => $data['download_id']] ]); if (empty($download)) throw new Exception('查无此导出数据'); $params = json_decode($download['params'], true); $filename = $download['name']; $type = $download['type']; $where = [ ['mall_id' => $params['mall_id']], ['check_status' => StoreEnum::CHECK_ADOPT], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]] ]; if (!empty($params['keyword'])) $where[] = ['or', ['like', 'id', $params['keyword']], ['like', 'store_name', $params['keyword']], ['like', 'shop_mobile', $params['keyword']]]; $orderBy = 'id desc'; $store_params = [ 'select' => 'id,mall_id,user_id,shop_owner,shop_mobile,store_name,c_id,province_id,check_status,city_id,district_id,address,logo_img,total_money,balance,expire_time,user_nums,status,created_at,is_freeze,total_order_money,total_settled_amount,unsettled_amount,total_num,street_id,community_id,is_sync,sync_status', 'where' => $where, 'order' => $orderBy, ]; $list = Store::lists($store_params); $fields = $params['fields']; $fields_arr = $this->storeFinanceFieldList(); $have_select_field_arr = []; foreach ($fields as $value) { if (isset($fields_arr[$value])) $have_select_field_arr[] = $fields_arr[$value]; } $csv = new CsvTool(); $csv->filename = $filename; $csv->file_dirname = DownloadEnum::getTypeStorageDirMap($type); $csv->export_mode = CsvTool::EXPORT_MODE_ASYNC; $csv->header = $have_select_field_arr; $rows = []; if ($list) { foreach ($list as $item) { $store_total_data = $this->getStoreFinanceData(['mall_id' => $params['mall_id'], 'store_id' => $item['id']]); $row = []; foreach ($fields as $field) { switch (true) { case ($field == 'store_id'): $row[] = $item['id'] ?? ''; break; case ($field == 'store_name'): $row[] = $item['store_name'] ?? ''; break; case ($field == 'shop_mobile'): $row[] = $item['shop_mobile'] ?? ''; break; case ($field == 'today_pay_money'): $row[] = $store_total_data['today_pay_money'] ?? '0.00'; break; case ($field == 'today_refund_money'): $row[] = $store_total_data['today_refund_money'] ?? '0.00'; break; case ($field == 'today_commission_money'): $row[] = $store_total_data['today_commission_money'] ?? '0.00'; break; case ($field == 'today_order_num'): $row[] = $store_total_data['today_order_num'] ?? '0.00'; break; case ($field == 'total_pay_money'): $row[] = $store_total_data['total_pay_money'] ?? '0.00'; break; case ($field == 'total_refund_money'): $row[] = $store_total_data['total_refund_money'] ?? '0.00'; break; case ($field == 'total_commission_money'): $row[] = $store_total_data['total_commission_money'] ?? '0.00'; break; case ($field == 'total_order_num'): $row[] = $store_total_data['total_order_num'] ?? '0.00'; break; default: $row[] = !empty($item[$field]) ? $item[$field] : ''; } } $rows[] = $row; } } $csv->data = $rows; $csv->export(); $csv->updateDown($download, $params['mall_id']); return true; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } public function exportStoreFinanceData($data) { try { date_default_timezone_set('Asia/Shanghai'); $download = Download::getOne([ ['id' => $data['download_id']] ]); if (empty($download)) throw new Exception('查无此导出数据'); $params = json_decode($download['params'], true); $filename = $download['name']; $type = $download['type']; $where = [ ['mall_id' => $params['mall_id']], ['>', 'order_status', 0], ['status' => 1], ]; if (!empty($params['store_id'])) $where[] = ['store_id' => $params['store_id']]; if (isset($parms['status']) && $params['status'] != '') $where[] = ['status' => $params['status']]; if (!empty($params['goods_keyword'])) $where[] = ['or', ['like', 'goods_id', $params['goods_keyword']], ['like', 'goods_name', $params['goods_keyword']]]; //查找下单用户 if (!empty($params['keyword'])) { $user = User::lists([ 'where' => [ ['mall_id' => $params['mall_id']], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], ['or', ['like', 'id', $params['keyword']], ['like', 'nickname', $params['keyword']], ['like', 'mobile', $params['keyword']]] ], ]); if (!empty($user)) { $user_ids = array_column($user, 'id'); $where[] = ['user_id' => $user_ids]; } else { $where[] = ['user_id' => []]; } } //查找订单 if (!empty($params['order_no']) || !empty($params['date'])) { $order_where = [ ['mall_id' => $params['mall_id']], ['>', 'order_status', 0], ]; if (!empty($params['order_no'])) $order_where[] = ['order_no' => $params['order_no']]; if (!empty($params['date'][0])) $order_where[] = ['>=', 'pay_time', strtotime($params['date'][0])]; if (!empty($params['date'][1])) $order_where[] = ['<=', 'pay_time', strtotime($params['date'][1]. ' 23:59:59')]; $order_list = StoreOrder::lists([ 'where' => $order_where, 'select' => 'id,mall_id,order_no,order_status,pay_time', ]); if (!empty($order_list)) { $order_ids = array_column($order_list, 'id'); $where[] = ['order_id' => $order_ids]; } else { $where[] = ['order_id' => []]; } } //查找门店 if (!empty($params['store_keyword'])) { $store_where = [ ['mall_id' => $params['mall_id']], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]] ]; if ($params['store_keyword']) $store_where[] = ['or', ['like', 'id', $params['store_keyword']], ['like', 'shop_mobile', $params['store_keyword']], ['like', 'store_name', $params['store_keyword']]]; $store_list = Store::lists([ 'where' => $store_where, 'select' => 'id,mall_id,status,shop_mobile,store_name', ]); if (!empty($store_list)) { $store_ids = array_column($store_list, 'id'); $where[] = ['store_id' => $store_ids]; } else { $where[] = ['store_id' => []]; } } $detail_params = [ 'where' => $where, 'with' => ['user', 'order', 'store'], // 'page' => $params['page'] ?? 1, // 'limit' => $params['limit'] ?? 20, 'order' => 'id desc', ]; $list = StoreOrderDetail::lists($detail_params); $fields = $params['fields']; $fields_arr = $this->storeFinanceDetailFieldList(); $have_select_field_arr = []; foreach ($fields as $value) { if (isset($fields_arr[$value])) $have_select_field_arr[] = $fields_arr[$value]; } $csv = new CsvTool(); $csv->filename = $filename; $csv->file_dirname = DownloadEnum::getTypeStorageDirMap($type); $csv->export_mode = CsvTool::EXPORT_MODE_ASYNC; $csv->header = $have_select_field_arr; $rows = []; $order_status_list = OrderStatusEnum::getMap(); if ($list) { // $order_list = array_column($list['list'], 'order', 'id'); // $order_no_list = array_column($order_list, 'order_no', 'id'); // //获取订单结算数据 // $commission_list = StoreCommission::lists([ // 'where' => [ // ['mall_id' => $params['mall_id']], // ['order_no' => $order_no_list], // ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], // ], // 'index' => 'order_no', // ]); foreach ($list as $item) { $commission_data = StoreCommission::getOne([ ['mall_id' => $params['mall_id']], ['order_no' => $item['order']['order_no']], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], ], true); $item['commission_data'] = $commission_data; $row = []; foreach ($fields as $field) { switch (true) { case ($field == 'nickname'): $row[] = $item['user']['nickname'] ?? ''; break; case ($field == 'user_id'): $row[] = $item['user_id'] ?? ''; break; case ($field == 'mobile'): $row[] = $item['user']['mobile'] ?? ''; break; case ($field == 'order_money'): $row[] = $item['commission_data']['order_money'] ?? '0.00'; break; case ($field == 'discount_money'): $row[] = $item['commission_data']['discount_money'] ?? '0.00'; break; case ($field == 'pay_money'): $row[] = $item['commission_data']['pay_money'] ?? '0.00'; break; case ($field == 'order_no'): $row[] = $item['order']['order_no'] ?? ''; break; case ($field == 'goods_name'): $row[] = $item['goods_name'] ?? ''; break; case ($field == 'goods_attr_name'): $row[] = $item['goods_attr_name'] ?? '默认规格'; break; case ($field == 'score_deduction_bear'): if ($item['commission_data']['score_deduction_bear'] == 0) { $row[] = '平台'; } else if ($item['commission_data']['score_deduction_bear'] == 1) { $row[] = '门店'; } else { $row[] = '暂无'; } break; case ($field == 'addons_bonus'): $row[] = $item['commission_data']['addons_bonus'] ?? '0.00'; break; case ($field == 'settle_type'): if ($item['commission_data']['settle_type'] == 4) { $row[] = '门店承担'; } else { $row[] = '平台承担'; } break; case ($field == 'price'): $row[] = $item['price'] ?? '0.00'; break; case ($field == 'num'): $row[] = $item['num'] ?? '0.00'; break; case ($field == 'goods_price'): $row[] = $item['goods_price'] ?? '0.00'; break; case ($field == 'store_send_commission'): $row[] = $item['commission_data']['store_send_commission'] ?? '0.00'; break; case ($field == 'higo_reward'): $row[] = $item['commission_data']['higo_reward'] ?? '0.00'; break; case ($field == 'service_charge'): $service_charge = $item['commission_data']['service_charge'] ?? '0.00'; $row[] = $service_charge.'%'; break; case ($field == 'pay_time'): $row[] = date('Y-m-d H:i:s', $item['order']['pay_time']); break; case ($field == 'order_status'): $row[] = $order_status_list[$item['order_status']] ?? ''; break; case ($field == 'amount_received'): $row[] = $item['commission_data']['amount_received'] ?? '0.00'; break; case ($field == 'store_contributing_money'): $row[] = $item['commission_data']['store_contributing_money'] ?? '0.00'; break; case ($field == 'amount_received_score'): $row[] = $item['commission_data']['amount_received_score'] ?? '0.00'; break; case ($field == 'store_id'): $row[] = $item['store']['id'] ?? ''; break; case ($field == 'store_name'): $row[] = $item['store']['store_name'] ?? ''; break; default: $row[] = !empty($item[$field]) ? $item[$field] : ''; } } $rows[] = $row; } } $csv->data = $rows; $csv->export(); $csv->updateDown($download, $params['mall_id']); return true; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } public function exportCashierFinanceData($data) { try { date_default_timezone_set('Asia/Shanghai'); $download = Download::getOne([ ['id' => $data['download_id']] ]); if (empty($download)) throw new Exception('查无此导出数据'); $params = json_decode($download['params'], true); $filename = $download['name']; $type = $download['type']; $where = [ ['mall_id' => $params['mall_id']], ['status' => StatusEnum::ENABLED], ['pay_status' => 1], ]; if (!empty($params['order_no'])) $where[] = ['order_no' => $params['order_no']]; if (!empty($params['store_id'])) $where[] = ['store_id' => $params['store_id']]; if (!empty($params['date'][0])) $where[] = ['>=', 'pay_time', strtotime($params['date'][0])]; if (!empty($params['date'][1])) $where[] = ['<=', 'pay_time', strtotime($params['date'][1]. ' 23:59:59')]; //查找下单用户 if (!empty($params['keyword'])) { $user = User::lists([ 'where' => [ ['mall_id' => $params['mall_id']], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], ['or', ['like', 'id', $params['keyword']], ['like', 'nickname', $params['keyword']], ['like', 'mobile', $params['keyword']]] ], ]); if (!empty($user)) { $user_ids = array_column($user, 'id'); $where[] = ['user_id' => $user_ids]; } else { $where[] = ['user_id' => []]; } } //查找门店 if (!empty($params['store_keyword'])) { $store_where = [ ['mall_id' => $params['mall_id']], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]] ]; if ($params['store_keyword']) $store_where[] = ['or', ['like', 'id', $params['store_keyword']], ['like', 'shop_mobile', $params['store_keyword']], ['like', 'store_name', $params['store_keyword']]]; $store_list = Store::lists([ 'where' => $store_where, 'select' => 'id,mall_id,status,shop_mobile,store_name', ]); if (!empty($store_list)) { $store_ids = array_column($store_list, 'id'); $where[] = ['store_id' => $store_ids]; } else { $where[] = ['store_id' => []]; } } $detail_params = [ 'where' => $where, 'with' => ['user', 'store'], // 'page' => $params['page'] ?? 1, // 'limit' => $params['limit'] ?? 20, 'order' => 'id desc', ]; $list = StoreCashierOrder::lists($detail_params); $fields = $params['fields']; $fields_arr = $this->cashierFinanceDetailFieldList(); $have_select_field_arr = []; foreach ($fields as $value) { if (isset($fields_arr[$value])) $have_select_field_arr[] = $fields_arr[$value]; } $csv = new CsvTool(); $csv->filename = $filename; $csv->file_dirname = DownloadEnum::getTypeStorageDirMap($type); $csv->export_mode = CsvTool::EXPORT_MODE_ASYNC; $csv->header = $have_select_field_arr; $rows = []; $order_status_list = OrderStatusEnum::getMap(); if ($list) { // $order_list = array_column($list['list'], 'order', 'id'); // $order_no_list = array_column($order_list, 'order_no', 'id'); // //获取订单结算数据 // $commission_list = StoreCommission::lists([ // 'where' => [ // ['mall_id' => $params['mall_id']], // ['order_no' => $order_no_list], // ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], // ], // 'index' => 'order_no', // ]); foreach ($list as $item) { $commission_data = StoreCommission::getOne([ ['mall_id' => $params['mall_id']], ['order_no' => $item['order_no']], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]], ], true); $item['commission_data'] = $commission_data; $row = []; foreach ($fields as $field) { switch (true) { case ($field == 'nickname'): $row[] = $item['user']['nickname'] ?? ''; break; case ($field == 'user_id'): $row[] = $item['user_id'] ?? ''; break; case ($field == 'mobile'): $row[] = $item['user']['mobile'] ?? ''; break; case ($field == 'order_money'): $row[] = $item['commission_data']['order_money'] ?? '0.00'; break; case ($field == 'discount_money'): $row[] = $item['commission_data']['discount_money'] ?? '0.00'; break; case ($field == 'pay_money'): $row[] = $item['commission_data']['pay_money'] ?? '0.00'; break; case ($field == 'order_no'): $row[] = $item['order_no'] ?? ''; break; case ($field == 'score_deduction_bear'): if ($item['commission_data']['score_deduction_bear'] == 0) { $row[] = '平台'; } else if ($item['commission_data']['score_deduction_bear'] == 1) { $row[] = '门店'; } else { $row[] = '暂无'; } break; case ($field == 'addons_bonus'): $row[] = $item['commission_data']['addons_bonus'] ?? '0.00'; break; case ($field == 'settle_type'): if ($item['commission_data']['settle_type'] == 4) { $row[] = '门店承担'; } else { $row[] = '平台承担'; } break; case ($field == 'store_send_commission'): $row[] = $item['commission_data']['store_send_commission'] ?? '0.00'; break; case ($field == 'higo_reward'): $row[] = $item['commission_data']['higo_reward'] ?? '0.00'; break; case ($field == 'service_charge'): $service_charge = $item['commission_data']['service_charge'] ?? '0.00'; $row[] = $service_charge.'%'; break; case ($field == 'pay_time'): $row[] = date('Y-m-d H:i:s', $item['pay_time']); break; case ($field == 'amount_received'): $row[] = $item['commission_data']['amount_received'] ?? '0.00'; break; case ($field == 'store_contributing_money'): $row[] = $item['commission_data']['store_contributing_money'] ?? '0.00'; break; case ($field == 'amount_received_score'): $row[] = $item['commission_data']['amount_received_score'] ?? '0.00'; break; case ($field == 'store_id'): $row[] = $item['store']['id'] ?? ''; break; case ($field == 'store_name'): $row[] = $item['store']['store_name'] ?? ''; break; default: $row[] = !empty($item[$field]) ? $item[$field] : ''; } } $rows[] = $row; } } $csv->data = $rows; $csv->export(); $csv->updateDown($download, $params['mall_id']); return true; } catch (\Exception $e) { throw new Exception($e->getMessage()); } } //数据迁移,累加历史收银台订单数量 public function staticsCashierOrderNum() { try { $malls = Mall::getEnableMallList(); foreach ($malls as $mall) { $mall_id = $mall['id']; //获取收银台订单 $cashier_order_list = StoreCashierOrder::lists([ 'where' => [ ['mall_id' => $mall_id], ['pay_status' => 1], ['status' => StatusEnum::ENABLED] ], 'order' => 'id desc', ]); if (!empty($cashier_order_list)) { foreach ($cashier_order_list as $key => $value) { $date = date('Y-m-d', $value['pay_time']); $data = [ 'mall_id' => $mall_id, 'store_id' => $value['store_id'], 'date_time' => $date, 'cashier_order_nums' => 1, ]; StoreCensus::setData($data); } } } } catch (\Exception $e) { throw new Exception($e->getMessage()); } } }