| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999 |
- <?php
- namespace addons\Store\common\services;
- use addons\Store\common\enums\StoreEnum;
- use addons\Store\common\models\Store;
- use addons\Store\common\models\StoreCashierOrder;
- use addons\Store\common\models\StoreCensus;
- use addons\Store\common\models\StoreCommission;
- use addons\Store\common\models\StoreCommissionCheck;
- use addons\Store\common\models\StoreOrder;
- use addons\Store\common\models\StoreOrderDetail;
- use common\components\export\CsvTool;
- use common\enums\DownloadEnum;
- use common\enums\OrderStatusEnum;
- use common\enums\StatusEnum;
- use common\models\common\Download;
- use common\models\mall\Mall;
- use common\models\order\OrderRefund;
- use common\models\user\User;
- use Exception;
- /**
- * 资产统计service
- */
- class StoreFinanceService extends BaseService
- {
- public function __construct($params = [])
- {
- parent::__construct();
- $this->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());
- }
- }
- }
|