文件
mashangyoujiu/Application/Common/Business/ShoppingMall.class.php

189 行
8.4 KiB
PHP
可执行文件

<?php
namespace Common\Business;
//商城公共类
use Common\Model\RetailBillOrderModel;
use Common\Model\RetailPayOrderModel;
use Common\Model\RetailRechargeOrderModel;
//[1.9.14]
class ShoppingMall
{
/**
* 门店商城销售金额统计
* @param $param
* $param['store_id'] 门店ID
* $param['start_time'] 统计的开始时间戳
* $param['end_time'] 统计的结束时间戳
* $param['need_sub_card'] 是否需要统计次卡的金额
* @return array
*/
public function getShopAmountTotal($param)
{
if (empty($param) || empty($param['store_id'])) {
$result = [
'place_count' => 0,
'xcx_wx_payment' => 0,
'xcx_member_payment' => 0,
'xcx_amount_total' => 0,
'xcx_wx_refund' => 0,
'xcx_member_refund' => 0,
'xcx_amount_refund_total' => 0,
'xcx_wx_actual_received' => 0,
'xcx_member_actual_received' => 0,
'xcx_amount_actual_received_total' => 0
];
return $result;
}
if (!empty($param['start_time']) && !empty($param['end_time'])) {
$where['add_time'] = ['between', [$param['start_time'], $param['end_time']]];
}
$where['pay_state'] = 1; //已支付
$where['store_id'] = $param['store_id'];
$where['type'] = 1; //商城
$where['pay_type'] = ['in', '5,6,8']; //商城的支付方式会员支付微信支付组合支付
$billOrderModel = new RetailBillOrderModel();
$list = $billOrderModel->getSelect($where, "", 'id asc');
$place_count = 0; //下单总笔数不包含退款
$xcx_wx_payment = 0; //微信支付
$xcx_member_payment = 0; //会员支付
$xcx_wx_refund = 0; //微信退款
$xcx_member_refund = 0; //会员退款
$xcx_amount_total = 0; //下单总金额不减退款金额
$xcx_wx_actual_received = 0; //微信支付金额减去退款金额的剩余金额
$xcx_member_actual_received = 0; //会员支付金额减去退款金额的剩余金额
$xcx_amount_payment_total = 0; //减去退款的总金额
$xcx_amount_refund_total = 0; //退款的总金额
$sub_card_total = 0; //次卡销售金额
$combined_id = []; //组合支付的订单id集合
if (!empty($list)) {
foreach ($list as $val) {
switch ($val['order_type']) {
case 1:
//购买订单
switch ($val['pay_type']) {
case 5:
//会员支付
$xcx_member_payment += $val['all_money'];
break;
case 6:
//微信支付
$xcx_wx_payment += $val['all_money'];
break;
case 8:
//组合支付
$combined_id[] = $val['id'];
break;
}
$place_count++;
break;
case 2:
//退款订单
switch ($val['pay_type']) {
case 5:
//会员支付
$xcx_member_refund += $val['refund_money'];
break;
case 6:
//微信支付
$xcx_wx_refund += $val['refund_money'];
break;
case 8:
//组合支付
$combined_id[] = $val['id'];
break;
}
break;
}
}
$PayOrderModel = new RetailPayOrderModel();
if (!empty($combined_id)) {
//查询组合支付的支付详情
$map = array(
'order_state' => array('in', 'SUCCESS,REFUND'),
'bill_id' => array('in', $combined_id)
);
$payList = $PayOrderModel->getSelect($map, "trade_amount,pay_type,order_state");
if (!empty($payList)) {
foreach ($payList as $value) {
switch ($value['order_state']) {
case 'SUCCESS':
switch ($value['pay_type']) {
case 4:
//微信支付
$xcx_wx_payment += $value['trade_amount'];
break;
case 6:
//会员支付
$xcx_member_payment += $value['trade_amount'];
break;
}
break;
case 'REFUND':
switch ($value['pay_type']) {
case 4:
//微信退款
$xcx_wx_refund += $value['trade_amount'];
break;
case 6:
//会员退款
$xcx_member_refund += $value['trade_amount'];
break;
}
break;
}
}
}
}
$xcx_amount_total = round($xcx_wx_payment + $xcx_wx_refund, 2);
$xcx_wx_actual_received = round($xcx_wx_payment - $xcx_wx_refund, 2);
$xcx_member_actual_received = round($xcx_member_payment - $xcx_member_refund, 2);
$xcx_amount_payment_total = round($xcx_wx_actual_received + $xcx_member_actual_received, 2);
$xcx_amount_refund_total = round($xcx_wx_refund + $xcx_member_refund, 2);
if ($param['need_sub_card']) {
// 次卡销售金额统计
$subCardMap = [
'store_id' => $param['store_id'],
'scene_type' => 1, //付款订单
'order_type' => 7, //购买次卡
'pay_type' => 4, //小程序微信支付
'trade_date' => ['between', [$param['start_time'], $param['end_time']]],
];
$sub_card_total = $PayOrderModel->getSum($subCardMap, 'trade_amount'); //次卡没有退款
$xcx_amount_total += $sub_card_total; //下单总金额不减退款金额 加上次卡销售金额
$xcx_amount_payment_total += $sub_card_total; //减去退款的总金额 加上次卡销售金额
}
}
$RechargeOrderModel = new RetailRechargeOrderModel();
//会员充值金额
$rMap = [
'store_id' => $param['store_id'],
'status' => 1,
'type' => 1,
'scene_type' => 4,
'refund_status' => 1,
];
if (!empty($param['start_time']) && !empty($param['end_time'])) {
$rMap['add_time'] = ['between', [$param['start_time'], $param['end_time']]];
}
$recharge_total = $RechargeOrderModel->getSum($rMap,'money');
$result = [
'place_count' => $place_count,
'xcx_wx_payment' => $xcx_wx_payment,
'xcx_member_payment' => $xcx_member_payment,
'xcx_amount_total' => $xcx_amount_total,
'xcx_wx_refund' => $xcx_wx_refund,
'xcx_member_refund' => $xcx_member_refund,
'xcx_amount_refund_total' => $xcx_amount_refund_total,
'xcx_wx_actual_received' => $xcx_wx_actual_received,
'xcx_member_actual_received' => $xcx_member_actual_received,
'xcx_amount_actual_received_total' => $xcx_amount_payment_total,
'sub_card_total' => $sub_card_total,
'recharge_total' => $recharge_total,
];
return $result;
}
}