1582 行
68 KiB
PHP
可执行文件
1582 行
68 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Common\Order;
|
||
|
||
use Common\Business\Plug;
|
||
use Common\Model\RetailVipModel;
|
||
use Common\Model\RetailStoreModel;
|
||
use Common\Model\RetailPayOrderModel;
|
||
use Common\Model\RetailBillOrderModel;
|
||
use Common\Model\RetailMerchantConfigModel;
|
||
use Common\Model\RetailOtherPayModel;
|
||
use Common\Model\RetailRechargeOrderModel;
|
||
use Common\Model\RetailSellModel;
|
||
use Common\Model\SSaleMGoodsModel;
|
||
use Common\Model\SWarehousingGoodsModel;
|
||
|
||
//[1.9.6]
|
||
|
||
/**
|
||
* 门店/商户概况数据统计
|
||
* Class Statistics [
|
||
* getMerchantStatisticsList 获取商户概况数据统计
|
||
* getStoreStatisticsList 获取门店概况数据统计
|
||
* getPayOrderData 订单处理
|
||
* getStoreSaleDataList 销售统计
|
||
* ]
|
||
* @package Common\Order
|
||
* @author GuYunQinFeng
|
||
*/
|
||
class Statistics
|
||
{
|
||
/**
|
||
* 获取商户概况数据统计
|
||
*/
|
||
public function getMerchantStatisticsList($merchant_id)
|
||
{
|
||
$RetailStoreModel = new RetailStoreModel();
|
||
|
||
$storeIdArr = $RetailStoreModel->getFindField(['merchantid' => $merchant_id, 'state' => 0], 'id', true);
|
||
|
||
$today_begin = strtotime(date('Y-m-d 00:00:00'));
|
||
$today_end = strtotime(date('Y-m-d 23:59:59'));
|
||
|
||
$map = [
|
||
'merchant_id' => $merchant_id,
|
||
'store_id' => ['in', $storeIdArr],
|
||
'add_time' => ['between', [$today_begin, $today_end]],
|
||
];
|
||
|
||
$vipMap = [
|
||
'merchantid' => $merchant_id,
|
||
'storeid' => ['in', $storeIdArr],
|
||
'addtime' => ['between', [$today_begin, $today_end]],
|
||
];
|
||
|
||
$list = $this->getPayOrderData($map, $vipMap, $merchant_id);
|
||
|
||
if (!empty($list)) {
|
||
return ['status' => 1, 'msg' => '数据获取成功', 'data' => $list];
|
||
} else {
|
||
return ['status' => 0, 'msg' => '暂无数据'];
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取门店概况数据统计
|
||
*/
|
||
public function getStoreStatisticsList($merchant_id, $store_id)
|
||
{
|
||
$RetailStoreModel = new RetailStoreModel();
|
||
$SSaleMGoodsModel = new SSaleMGoodsModel();
|
||
$RetailSellModel = new RetailSellModel();
|
||
$SWarehousingGoodsModel = new SWarehousingGoodsModel();
|
||
|
||
$today_begin = strtotime(date('Y-m-d 00:00:00'));
|
||
$today_end = strtotime(date('Y-m-d 23:59:59'));
|
||
|
||
$map = [
|
||
'merchant_id' => $merchant_id,
|
||
'store_id' => $store_id,
|
||
'add_time' => ['between', [$today_begin, $today_end]],
|
||
];
|
||
|
||
$vipMap = [
|
||
'merchantid' => $merchant_id,
|
||
'storeid' => $store_id,
|
||
'addtime' => ['between', [$today_begin, $today_end]],
|
||
];
|
||
|
||
$list = $this->getPayOrderData($map, $vipMap, $merchant_id);
|
||
|
||
//商品总数
|
||
$list['goodsCount'] = $SSaleMGoodsModel->getCount(['store_id' => $store_id, 'status' => ['in', '0,1']]);
|
||
//出售的商品
|
||
$sellMap['pay_type'] = ['neq', 0];
|
||
$sellMap['store_id'] = $store_id;
|
||
$sellMap['add_time'] = ['between', [$today_begin, $today_end]];
|
||
$dead_info = $RetailSellModel->getGroupFindField($sellMap, 'goods_id', 'goods_id', true);
|
||
$dead_info = $dead_info ? $dead_info : array(0);
|
||
//所有商品
|
||
$saleMap['store_id'] = $store_id;
|
||
$saleMap['status'] = 0;
|
||
$saleMap['goods_id'] = ['not in', $dead_info];
|
||
// 滞销商品(最近30天没有出售数据的)
|
||
$list['goodInfo'] = $SSaleMGoodsModel->getCount($saleMap);
|
||
// 上架商品
|
||
$list['sjGoodsCount'] = $SSaleMGoodsModel->getCount(['store_id' => $store_id, 'status' => 0]);
|
||
|
||
$store_warning = $RetailStoreModel->getFind(['id' => $store_id]);
|
||
$time_shelf = $today_end + ($store_warning['warning'] * 86400);
|
||
$goodsMap = [
|
||
'store_id' => $store_id,
|
||
'surplus_num' => ['gt', 0],
|
||
'build_date' => [['neq', ''], ['elt', $today_end], 'and'],
|
||
'quality_guarantee_period' => ['neq', ''],
|
||
'_string' => "build_date + (quality_guarantee_period * 86400) <= $time_shelf",
|
||
];
|
||
$list['shelfGoods'] = $SWarehousingGoodsModel->getCount($goodsMap);
|
||
//商品总库存
|
||
$mgoodsMap['merchant_id'] = $merchant_id;
|
||
$mgoodsMap['store_id'] = $store_id;
|
||
$mgoodsMap['status'] = ['in', '0,1'];
|
||
$list['allGoodsNum'] = $SSaleMGoodsModel->getSum($mgoodsMap, "goods_num");
|
||
|
||
//超量商品
|
||
$mgoodsMap['_string'] = "goods_num >= more_num";
|
||
$list['moreGoods'] = $SSaleMGoodsModel->getCount($mgoodsMap);
|
||
//预警商品
|
||
$mgoodsMap['_string'] = "goods_num <= less_num";
|
||
$list['lessGoods'] = $SSaleMGoodsModel->getCount($mgoodsMap);
|
||
|
||
if (!empty($list)) {
|
||
return ['status' => 1, 'msg' => '数据获取成功', 'data' => $list];
|
||
} else {
|
||
return ['status' => 0, 'msg' => '暂无数据'];
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 订单处理
|
||
* @param map 条件
|
||
*/
|
||
private function getPayOrderData($map, $vipMap, $merchant_id)
|
||
{
|
||
$RetailVipModel = new RetailVipModel();
|
||
$RetailPayOrderModel = new RetailPayOrderModel();
|
||
$RetailBillOrderModel = new RetailBillOrderModel();
|
||
$RetailRechargeModel = new RetailRechargeOrderModel();
|
||
$bill_map = $map;
|
||
$map['order_state'] = ['in', ['SUCCESS', 'REFUND']];
|
||
$list = $RetailPayOrderModel->getSelect($map);
|
||
unset($map['order_state']);
|
||
$retailCashMoney = 0; //零售现金
|
||
$retailAliMoney = 0; //零售支付宝
|
||
$retailWxMoney = 0; //零售微信
|
||
$retailAppletMoney = 0; //零售小程序商城微信
|
||
$vipCardMoney = 0; //会员卡支付
|
||
$otherPayMoney = 0; //其他支付
|
||
$toRefundMoney = 0; //今日待退款金额
|
||
$refundMoney = 0; //今日退款金额
|
||
$creditArrMoney = 0; //赊账金额
|
||
$creditRepayMoney = 0; //赊账还款金额
|
||
$vipIncNum = 0; //新增会员数
|
||
$vipRechargeMoney = 0; //今日会员充值
|
||
$vipGainMoney = 0; //今日会员获得余额
|
||
$credit = false; //是否含有赊权限
|
||
// var_dump($list);
|
||
foreach ($list as &$value) {
|
||
// 购买订单
|
||
if ($value['order_type'] == 1) {
|
||
switch ($value['scene_type']) {
|
||
case 1:
|
||
// 付款订单
|
||
switch ($value['pay_type']) {
|
||
case 1: //微信
|
||
$retailWxMoney += $value['trade_amount'];
|
||
break;
|
||
case 2: //支付宝
|
||
$retailAliMoney += $value['trade_amount'];
|
||
break;
|
||
case 3: //现金
|
||
$retailCashMoney += $value['trade_amount'];
|
||
break;
|
||
case 4: //小程序微信
|
||
$retailAppletMoney += $value['trade_amount'];
|
||
break;
|
||
case 5: //其他支付方式
|
||
$otherPayMoney += $value['trade_amount'];
|
||
break;
|
||
case 6: //会员余额
|
||
$vipCardMoney += $value['trade_amount'];
|
||
break;
|
||
}
|
||
break;
|
||
case 2:
|
||
// 退款订单
|
||
//退款金额
|
||
$refundMoney += $value['trade_amount'];
|
||
break;
|
||
}
|
||
// 会员充值
|
||
} else if ($value['order_type'] == 2 && $value['scene_type'] == 1 && $value['order_state'] == 'SUCCESS') {
|
||
$vipRecharge = $value['trade_amount'] - $value['refund_money'];
|
||
$vipRechargeMoney += $vipRecharge;
|
||
}
|
||
}
|
||
|
||
//赊账还款金额
|
||
$Plug = new Plug();
|
||
$result = $Plug->PlugPermissions(['merchant_id' => $merchant_id, 'identification_arr' => ['credit']]);
|
||
if ($result['data']['plug']['credit']) {
|
||
$map['status'] = 1;
|
||
$creditArrModel = new \Credit\Model\CreditArrearageModel();
|
||
$creditArrMoney = $creditArrModel->getSum($map, 'bill_money');
|
||
$creditRepayMoney = $creditArrModel->getSum($map, 'money');
|
||
$credit = true;
|
||
}
|
||
|
||
//新增会员数
|
||
$vipIncNum = $RetailVipModel->getCount($vipMap);
|
||
//获得余额
|
||
$map['state'] = 1; //正常
|
||
$map['type'] = 1; //充值
|
||
$map['status'] = 1; //支付成功
|
||
$vipGainMoney = $RetailRechargeModel->getSum($map, 'all_money');
|
||
$map['refund_status'] = 2;
|
||
$vipRefundGainMoney = $RetailRechargeModel->getSum($map, 'all_money');
|
||
|
||
$bill_map['order_type'] = 2;
|
||
$bill_map['refund_status'] = 5;
|
||
$toRefundMoney = $RetailBillOrderModel->getSum($bill_map, 'all_money');
|
||
|
||
return [
|
||
'allMoney' => round($retailCashMoney + $retailAliMoney + $retailWxMoney + $retailAppletMoney + $vipCardMoney + $otherPayMoney, 2),
|
||
'retailCashMoney' => round($retailCashMoney, 2),
|
||
'retailAliMoney' => round($retailAliMoney, 2),
|
||
'retailWxMoney' => round($retailWxMoney, 2),
|
||
'retailAppletMoney' => round($retailAppletMoney, 2),
|
||
'vipCardMoney' => round($vipCardMoney, 2),
|
||
'otherPayMoney' => round($otherPayMoney, 2),
|
||
'toRefundMoney' => round($toRefundMoney, 2),
|
||
'refundMoney' => round($refundMoney, 2),
|
||
'creditArrMoney' => round($creditArrMoney, 2),
|
||
'creditRepayMoney' => $creditRepayMoney ? round($creditRepayMoney, 2) : 0,
|
||
'vipIncNum' => round($vipIncNum, 2),
|
||
'vipRechargeMoney' => round($vipRechargeMoney, 2),
|
||
'vipGainMoney' => round($vipGainMoney - $vipRefundGainMoney, 2),
|
||
'credit' => round($credit, 2),
|
||
];
|
||
}
|
||
|
||
|
||
/********************************销售统计****开始*************************************/
|
||
|
||
/**
|
||
* 销售统计数据
|
||
* @param $param
|
||
* $param['merchant_id']
|
||
* $param['store_id']
|
||
* $param['date']
|
||
* $param['type'] 1商户 2门店
|
||
* @return array
|
||
*/
|
||
public function getStoreSaleDataList($param)
|
||
{
|
||
$store_data = [];
|
||
$count = 0;
|
||
//判断查询类型
|
||
switch ($param['type']) {
|
||
case 1:
|
||
// 查询商户下的门店
|
||
$StoreModel = new RetailStoreModel();
|
||
$storeMap = [
|
||
'merchantid' => $param['merchant_id'],
|
||
'store_status' => 0,
|
||
'state' => 0,
|
||
];
|
||
$storeField = ['id', 'storetag as store_name'];
|
||
//判断是否分页
|
||
if ($param['page']) {
|
||
$count = $StoreModel->getCount($storeMap);
|
||
$store_data = $StoreModel->getSelect($storeMap, $storeField, 'id asc', $param['page'] . ',5');
|
||
} else {
|
||
$store_data = $StoreModel->getSelect($storeMap, $storeField);
|
||
}
|
||
if (empty($store_data)) {
|
||
return callBack(statusCode()['success'], '暂无营业门店', [
|
||
'store_data' => [],
|
||
'recharge' => [],
|
||
'other_pay' => [],
|
||
'count' => $count,
|
||
]);
|
||
}
|
||
break;
|
||
case 2:
|
||
break;
|
||
default:
|
||
return callBack(statusCode()['error'], '参数有误');
|
||
break;
|
||
}
|
||
// 查询商户其他支付状态
|
||
$MerchantConfig = new RetailMerchantConfigModel();
|
||
$other_pay_state = $MerchantConfig->getFindField(['merchant_id' => $param['merchant_id']], 'other_pay');
|
||
$other_pay = [];
|
||
if (empty($other_pay_state) || $other_pay_state == 1) {
|
||
// 查询其他支付方式
|
||
$OtherPay = new RetailOtherPayModel();
|
||
$other_map = [
|
||
'merchant_id' => $param['merchant_id'],
|
||
'status' => 1,
|
||
'state' => 1
|
||
];
|
||
$other_pay = $OtherPay->getSelect($other_map, 'id,name', 'pay_order asc');
|
||
if (empty($other_pay)) {
|
||
$other_pay = [['name' => '其他支付', 'id' => 0]];
|
||
} else {
|
||
$other_pay[] = ['name' => '其他支付', 'id' => 0];
|
||
}
|
||
}
|
||
// 充值列表
|
||
$recharge = [];
|
||
// 日期
|
||
if (!empty($param['date'])) {
|
||
$start_time = strtotime(date('Y-m-d 00:00:00', strtotime($param['date'][0])));
|
||
$end_time = strtotime(date('Y-m-d 23:59:59', strtotime($param['date'][1]))) + 1;
|
||
if ($param['type'] == 2) {
|
||
$count = round(($end_time - $start_time) / 86400);
|
||
if ($count > 61) {
|
||
return callBack(statusCode()['error'], '查询天数的范围不得超过60天');
|
||
}
|
||
}
|
||
} else {
|
||
if ($param['type'] == 2) {
|
||
$end_time = strtotime(date('Y-m-d', time())) + 86399;
|
||
$start_time = $end_time - 86400 * 5;
|
||
$count = 5;
|
||
} else {
|
||
$start_time = strtotime(date('Y-m-d 00:00:00'));
|
||
$end_time = $start_time + 86399;
|
||
$recharge = $this->setRechargeParam(); //充值参数
|
||
}
|
||
}
|
||
if ($param['type'] == 2) {
|
||
// 处理时间数据
|
||
$start = 0;
|
||
$end = $count;
|
||
if ($param['page']) {
|
||
$start = ($param['page'] - 1) * 5;
|
||
$end = round($count - 5) >= $start ? ($start + 5) : $count;
|
||
}
|
||
for ($i = $start; $i < $end; $i++) {
|
||
$date = strtotime(date('Y-m-d 00:00:00', strtotime("-" . $i . " day", $end_time - 1)));
|
||
array_push(
|
||
$store_data,
|
||
[
|
||
'date' => date('Y-m-d', $date),
|
||
'date_map' => [$date, $date + 86399],
|
||
]
|
||
);
|
||
}
|
||
}
|
||
$store_data_before = $store_data;
|
||
$search_date = [$start_time, $end_time];
|
||
$parameter = [
|
||
'merchant_id' => $param['merchant_id'],
|
||
'store_id' => $param['type'] == 2 ? $param['store_id'] : '',
|
||
'type' => $param['type'],
|
||
];
|
||
// 处理数据
|
||
$param = $this->setStoreParam(); //定义门店参数
|
||
$Plug = new Plug();
|
||
$PlugData = $Plug->PlugPermissions([
|
||
'merchant_id' => $param['merchant_id'],
|
||
'identification_arr' => ['credit']
|
||
]); //赊账插件权限
|
||
if (!empty($PlugData['data']['plug']['credit'])) {
|
||
$credit = true;
|
||
} else {
|
||
$credit = false;
|
||
}
|
||
foreach ($store_data as &$value) {
|
||
$value = array_merge($value, $param);
|
||
// 查询订单 处理订单
|
||
$value = $this->handleOrder($value, $search_date, $parameter, $other_pay_state, $other_pay, $credit);
|
||
// 处理快捷收银
|
||
$value = $this->quickPay($value, $search_date, $parameter);
|
||
// 统计浄销售额
|
||
$value['total']['money'] = $value['total']['sell_money'] - $value['total']['refund_money'];
|
||
$value['total']['line_money'] = $value['total']['line_sell_money'] - $value['total']['line_refund_money'];
|
||
$value['total']['online_money'] = $value['total']['online_sell_money'] - $value['total']['online_refund_money'];
|
||
// 会员充值
|
||
$store_data_res = $this->handleStoreRecharge($value, $recharge, $search_date, $parameter);
|
||
$value = $store_data_res['info'];
|
||
if ($param['type'] == 2) {
|
||
$value['update_balance']['recharge_all_money'] = $value['line_recharge']['wechat_recharge'] + $value['line_recharge']['alipay_recharge'] + $value['line_recharge']['cash_recharge'];
|
||
$value['update_balance']['give_all_money'] = $value['line_recharge']['wechat_give'] + $value['line_recharge']['alipay_give'] + $value['line_recharge']['cash_give'] + $value['update_balance']['store_admin_give'] + $value['update_balance']['store_aide_give'];
|
||
$value['update_balance']['reduce_all_money'] = $value['update_balance']['store_admin_reduce'] + $value['update_balance']['store_aide_reduce'] + $value['update_balance']['cashier_reduce'] + $value['update_balance']['cashier_aide_reduce'];
|
||
} else {
|
||
$recharge = $store_data_res['recharge'];
|
||
}
|
||
// 处理总数据
|
||
$value = $this->handleStoreAllData($value);
|
||
if ($param['type'] == 2) {
|
||
unset($value['date_map']);
|
||
}
|
||
}
|
||
if ($param['type'] == 1) {
|
||
// 商户充值
|
||
$recharge = $this->handleMerchantRecharge($recharge, $search_date, $param['merchant_id']);
|
||
// 充值总额 赠送总额 扣除总额
|
||
$recharge['all_recharge_money'] = $recharge['small_program'] + $recharge['official_account'] + $recharge['merchant_admin_recharge'];
|
||
$recharge['all_give_money'] = $recharge['merchant_admin_give'] + $recharge['merchant_aide_give'];
|
||
$recharge['all_reduce_money'] = $recharge['merchant_admin_reduce'] + $recharge['merchant_aide_reduce'];
|
||
// 处理总数据
|
||
$recharge = $this->handleRechargeAllData($recharge);
|
||
}
|
||
return callBack(statusCode()['success'], '获取成功', [
|
||
'store_data' => $store_data,
|
||
'recharge' => $recharge,
|
||
'other_pay' => $other_pay,
|
||
'search_date' => $search_date,
|
||
'store_data_before' => $store_data_before,
|
||
'count' => $count,
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 定义商户充值参数
|
||
*/
|
||
private function setRechargeParam()
|
||
{
|
||
return [
|
||
'small_program' => 0,
|
||
'official_account' => 0,
|
||
'merchant_admin_recharge' => 0,
|
||
'merchant_admin_give' => 0,
|
||
'merchant_aide_give' => 0,
|
||
'merchant_admin_reduce' => 0,
|
||
'merchant_aide_reduce' => 0,
|
||
'all_recharge_money' => 0,
|
||
'all_give_money' => 0,
|
||
'all_reduce_money' => 0,
|
||
'merchant_admin_refund' => 0,
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 定义门店参数
|
||
*/
|
||
private function setStoreParam()
|
||
{
|
||
return [
|
||
'total' => [
|
||
'money' => 0, //总
|
||
'sell_money' => 0,
|
||
'sell_num' => 0,
|
||
'refund_money' => 0,
|
||
'refund_num' => 0,
|
||
'line_money' => 0, //店内
|
||
'line_sell_money' => 0,
|
||
'line_sell_num' => 0,
|
||
'line_refund_money' => 0,
|
||
'line_refund_num' => 0,
|
||
'online_money' => 0, //商城
|
||
'online_sell_money' => 0,
|
||
'online_sell_num' => 0,
|
||
'online_refund_money' => 0,
|
||
'online_refund_num' => 0,
|
||
],
|
||
'wechat' => [
|
||
'sell_money' => 0, //总
|
||
'sell_num' => 0,
|
||
'refund_money' => 0,
|
||
'refund_num' => 0,
|
||
'line_sell_money' => 0, //店内
|
||
'line_sell_num' => 0,
|
||
'line_refund_money' => 0,
|
||
'line_refund_num' => 0,
|
||
'online_sell_money' => 0, //商城
|
||
'online_sell_num' => 0,
|
||
'online_refund_money' => 0,
|
||
'online_refund_num' => 0,
|
||
],
|
||
'alipay' => [
|
||
'sell_money' => 0, //总
|
||
'sell_num' => 0,
|
||
'refund_money' => 0,
|
||
'refund_num' => 0,
|
||
'line_sell_money' => 0, //店内
|
||
'line_sell_num' => 0,
|
||
'line_refund_num' => 0,
|
||
'line_refund_money' => 0,
|
||
'online_sell_money' => 0, //商城
|
||
'online_sell_num' => 0,
|
||
'online_refund_money' => 0,
|
||
'online_refund_num' => 0,
|
||
],
|
||
'vip' => [
|
||
'sell_money' => 0, //总
|
||
'sell_num' => 0,
|
||
'refund_money' => 0,
|
||
'refund_num' => 0,
|
||
'line_sell_money' => 0, //店内
|
||
'line_sell_num' => 0,
|
||
'line_refund_money' => 0,
|
||
'line_refund_num' => 0,
|
||
'online_sell_money' => 0, //商城
|
||
'online_sell_num' => 0,
|
||
'online_refund_money' => 0,
|
||
'online_refund_num' => 0,
|
||
],
|
||
'cash' => [
|
||
'sell_money' => 0, //总
|
||
'sell_num' => 0,
|
||
'refund_money' => 0,
|
||
'refund_num' => 0,
|
||
'line_sell_money' => 0, //店内
|
||
'line_sell_num' => 0,
|
||
'line_refund_money' => 0,
|
||
'line_refund_num' => 0,
|
||
'online_sell_money' => 0, //商城
|
||
'online_sell_num' => 0,
|
||
'online_refund_money' => 0,
|
||
'online_refund_num' => 0,
|
||
],
|
||
'line_recharge' => [
|
||
'wechat_recharge' => 0,
|
||
'wechat_give' => 0,
|
||
'alipay_recharge' => 0,
|
||
'alipay_give' => 0,
|
||
'cash_recharge' => 0,
|
||
'cash_give' => 0,
|
||
],
|
||
'update_balance' => [
|
||
'store_admin_give' => 0,
|
||
'store_aide_give' => 0,
|
||
'store_admin_reduce' => 0,
|
||
'store_aide_reduce' => 0,
|
||
'cashier_reduce' => 0,
|
||
'cashier_aide_reduce' => 0,
|
||
'store_refund' => 0,
|
||
'cashier_refund' => 0,
|
||
'goods_refund' => 0,
|
||
'recharge_all_money' => 0, // 充值总金额
|
||
'give_all_money' => 0, // 赠送总金额
|
||
'reduce_all_money' => 0, // 扣除总金额
|
||
],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 获取点单数据
|
||
* @param $info array
|
||
* @param $date array
|
||
* @param $parameter [
|
||
* merchant_id
|
||
* store_id
|
||
* type
|
||
* ]
|
||
* @param $other_pay_state int
|
||
* @param $other_pay array
|
||
* @param $credit
|
||
* @return array
|
||
*/
|
||
private function handleOrder($info, $date, $parameter, $other_pay_state = 0, $other_pay = [], $credit = false)
|
||
{
|
||
// 定义其他支付参数
|
||
if ($other_pay_state == 1 && !empty($other_pay)) {
|
||
$info['other'] = $this->otherParam($other_pay);
|
||
}
|
||
// 条件
|
||
$BillOrder = new RetailBillOrderModel();
|
||
$bill_map = [
|
||
'merchant_id' => $parameter['merchant_id'],
|
||
'pay_state' => 1,
|
||
'pay_type' => ['in', '1,3,4,5,6,7,8'],
|
||
'type' => ['in', '1,2'],
|
||
[
|
||
[
|
||
'order_type' => 1,
|
||
'refund_status' => ['in', '0,1'],
|
||
],
|
||
[
|
||
'order_type' => 2,
|
||
'refund_status' => 2,
|
||
],
|
||
'_logic' => 'OR'
|
||
],
|
||
];
|
||
switch ($parameter['type']) {
|
||
case 1:
|
||
// 商户
|
||
$bill_map['store_id'] = $info['id'];
|
||
$bill_map['add_time'] = ['between', $date];
|
||
break;
|
||
case 2:
|
||
// 门店
|
||
$bill_map['store_id'] = $parameter['store_id'];
|
||
$bill_map['add_time'] = ['between', $info['date_map']];
|
||
|
||
//赊账数据
|
||
if ($credit) {
|
||
$creditArreaModel = new \Credit\Model\CreditArrearageModel();
|
||
$creditRepayModel = new \Credit\Model\CreditRepaymentModel();
|
||
$creditMap = [
|
||
'merchant_id' => $parameter['merchant_id'],
|
||
'store_id' => $parameter['store_id'],
|
||
'status' => 1,
|
||
'add_time' => ['between', $info['date_map']],
|
||
];
|
||
$info['credit']['arrea_money'] = $creditArreaModel->getSum($creditMap, 'bill_money');
|
||
$info['credit']['repay_money'] = $creditRepayModel->getSum($creditMap, 'money');
|
||
}
|
||
break;
|
||
}
|
||
$bill_field = [
|
||
'id', 'all_money', 'pay_type', 'type', 'order_type',
|
||
];
|
||
// 查询
|
||
$store_order = $BillOrder->getSelect($bill_map, $bill_field);
|
||
$info['b_sql'] = M()->_sql();
|
||
if (empty($store_order)) {
|
||
return $info;
|
||
}
|
||
// 处理数据
|
||
foreach ($store_order as &$val) {
|
||
// 销售
|
||
if ($val['order_type'] == 1) {
|
||
// 小计
|
||
if (in_array($val['pay_type'], array(1, 3, 4, 5, 6, 7))) {
|
||
$info['total']['sell_money'] += $val['all_money'];
|
||
$info['total']['sell_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['total']['online_sell_money'] += $val['all_money'];
|
||
$info['total']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['total']['line_sell_money'] += $val['all_money'];
|
||
$info['total']['line_sell_num'] += 1;
|
||
}
|
||
}
|
||
switch (intval($val['pay_type'])) {
|
||
case 1:
|
||
// 现金
|
||
$info['cash']['sell_money'] += $val['all_money'];
|
||
$info['cash']['sell_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['cash']['online_sell_money'] += $val['all_money'];
|
||
$info['cash']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['cash']['line_sell_money'] += $val['all_money'];
|
||
$info['cash']['line_sell_num'] += 1;
|
||
}
|
||
break;
|
||
case 3:
|
||
// 微信
|
||
$info['wechat']['sell_money'] += $val['all_money'];
|
||
$info['wechat']['sell_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['wechat']['online_sell_money'] += $val['all_money'];
|
||
$info['wechat']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['wechat']['line_sell_money'] += $val['all_money'];
|
||
$info['wechat']['line_sell_num'] += 1;
|
||
}
|
||
break;
|
||
case 4:
|
||
// 支付宝
|
||
$info['alipay']['sell_money'] += $val['all_money'];
|
||
$info['alipay']['sell_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['alipay']['online_sell_money'] += $val['all_money'];
|
||
$info['alipay']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['alipay']['line_sell_money'] += $val['all_money'];
|
||
$info['alipay']['line_sell_num'] += 1;
|
||
}
|
||
break;
|
||
case 5:
|
||
$info['vip']['sell_money'] += $val['all_money'];
|
||
$info['vip']['sell_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['vip']['online_sell_money'] += $val['all_money'];
|
||
$info['vip']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['vip']['line_sell_money'] += $val['all_money'];
|
||
$info['vip']['line_sell_num'] += 1;
|
||
}
|
||
break;
|
||
case 6:
|
||
// 微信
|
||
$info['wechat']['sell_money'] += $val['all_money'];
|
||
$info['wechat']['sell_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['wechat']['online_sell_money'] += $val['all_money'];
|
||
$info['wechat']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['wechat']['line_sell_money'] += $val['all_money'];
|
||
$info['wechat']['line_sell_num'] += 1;
|
||
}
|
||
break;
|
||
case 7:
|
||
// 其他
|
||
if (!empty($info['other'])) {
|
||
$info = $this->otherPay($info, $val, $parameter);
|
||
}
|
||
break;
|
||
case 8:
|
||
// 组合
|
||
$info = $this->combinationPay($info, $val, $parameter);
|
||
break;
|
||
}
|
||
} else {
|
||
// 小计
|
||
if (in_array($val['pay_type'], array(1, 3, 4, 5, 6, 7))) {
|
||
$info['total']['refund_money'] += $val['all_money'];
|
||
$info['total']['refund_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['total']['online_refund_money'] += $val['all_money'];
|
||
$info['total']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['total']['line_refund_money'] += $val['all_money'];
|
||
$info['total']['line_refund_num'] += 1;
|
||
}
|
||
}
|
||
switch ($val['pay_type']) {
|
||
case 1:
|
||
// 现金
|
||
$info['cash']['refund_money'] += $val['all_money'];
|
||
$info['cash']['refund_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['cash']['online_refund_money'] += $val['all_money'];
|
||
$info['cash']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['cash']['line_refund_money'] += $val['all_money'];
|
||
$info['cash']['line_refund_num'] += 1;
|
||
}
|
||
break;
|
||
case 3:
|
||
// 微信
|
||
$info['wechat']['refund_money'] += $val['all_money'];
|
||
$info['wechat']['refund_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['wechat']['online_refund_money'] += $val['all_money'];
|
||
$info['wechat']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['wechat']['line_refund_money'] += $val['all_money'];
|
||
$info['wechat']['line_refund_num'] += 1;
|
||
}
|
||
break;
|
||
case 4:
|
||
// 支付宝
|
||
$info['alipay']['refund_money'] += $val['all_money'];
|
||
$info['alipay']['refund_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['alipay']['online_refund_money'] += $val['all_money'];
|
||
$info['alipay']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['alipay']['line_refund_money'] += $val['all_money'];
|
||
$info['alipay']['line_refund_num'] += 1;
|
||
}
|
||
break;
|
||
case 5:
|
||
$info['vip']['refund_money'] += $val['all_money'];
|
||
$info['vip']['refund_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['vip']['online_refund_money'] += $val['all_money'];
|
||
$info['vip']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['vip']['line_refund_money'] += $val['all_money'];
|
||
$info['vip']['line_refund_num'] += 1;
|
||
}
|
||
break;
|
||
case 6:
|
||
// 微信
|
||
$info['wechat']['refund_money'] += $val['all_money'];
|
||
$info['wechat']['refund_num'] += 1;
|
||
if ($val['type'] == 1) {
|
||
$info['wechat']['online_refund_money'] += $val['all_money'];
|
||
$info['wechat']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['wechat']['line_refund_money'] += $val['all_money'];
|
||
$info['wechat']['line_refund_num'] += 1;
|
||
}
|
||
break;
|
||
case 7:
|
||
// 其他
|
||
if (!empty($info['other'])) {
|
||
$info = $this->otherPay($info, $val, $parameter);
|
||
}
|
||
break;
|
||
case 8:
|
||
// 组合
|
||
$info = $this->combinationPay($info, $val, $parameter);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
$PayOrderModel = new RetailPayOrderModel();
|
||
$subCardMap = [
|
||
'scene_type' => 1, //付款订单
|
||
'order_type' => 7, //购买次卡
|
||
];
|
||
switch ($parameter['type']) {
|
||
case 1:
|
||
$subCardMap['store_id'] = $info['id'];
|
||
$subCardMap['trade_date'] = ['between', $date];
|
||
break;
|
||
case 2:
|
||
$subCardMap['store_id'] = $parameter['store_id'];
|
||
$subCardMap['parameter'] = ['between', $info['date_map']];
|
||
break;
|
||
}
|
||
$subCardMap['pay_type'] = 1; //微信支付
|
||
$wxSubCardMoney = $PayOrderModel->getSum($subCardMap, 'trade_amount'); //次卡没有退款
|
||
$wxSubCardNum = $PayOrderModel->getCount($subCardMap);
|
||
$subCardMap['pay_type'] = 3; //现金
|
||
$cashSubCardMoney = $PayOrderModel->getSum($subCardMap, 'trade_amount'); //次卡没有退款
|
||
$cashSubCardNum = $PayOrderModel->getCount($subCardMap);
|
||
// 微信包含次卡
|
||
$info['wechat']['sell_money'] += $wxSubCardMoney;
|
||
$info['wechat']['sell_num'] += $wxSubCardNum;
|
||
// 现金包含次卡
|
||
$info['cash']['sell_money'] += $cashSubCardMoney;
|
||
$info['cash']['sell_num'] += $cashSubCardNum;
|
||
return $info;
|
||
}
|
||
|
||
/**
|
||
* 定义其他支付参数
|
||
* @param $other_pay array
|
||
* @return mixed
|
||
*/
|
||
private function otherParam($other_pay)
|
||
{
|
||
foreach ($other_pay as &$val) {
|
||
$val['sell_money'] = 0; //总
|
||
$val['sell_num'] = 0;
|
||
$val['refund_money'] = 0;
|
||
$val['refund_num'] = 0;
|
||
$val['line_sell_money'] = 0; //店内
|
||
$val['line_sell_num'] = 0;
|
||
$val['line_refund_money'] = 0;
|
||
$val['line_refund_num'] = 0;
|
||
$val['online_sell_money'] = 0; //商城
|
||
$val['online_sell_num'] = 0;
|
||
$val['online_refund_money'] = 0;
|
||
$val['online_refund_num'] = 0;
|
||
}
|
||
return $other_pay;
|
||
}
|
||
|
||
/**
|
||
* 查询其他支付
|
||
* @param $info array
|
||
* @param $bill_order array
|
||
* @param $parameter [
|
||
* merchant_id
|
||
* store_id
|
||
* type
|
||
* ]
|
||
* @return array
|
||
*/
|
||
private function otherPay($info, $bill_order, $parameter)
|
||
{
|
||
// 条件
|
||
$PayOrder = new RetailPayOrderModel();
|
||
$pay_map = [
|
||
'merchant_id' => $parameter['merchant_id'],
|
||
'bill_id' => $bill_order['id'],
|
||
'order_state' => ['in', ['SUCCESS', 'REFUND']],
|
||
];
|
||
$pay_map['store_id'] = $parameter['type'] == 1 ? $info['id'] : $parameter['store_id'];
|
||
$pay_field = [
|
||
'trade_amount', 'other_pay_id'
|
||
];
|
||
// 查询pay_order订单
|
||
$pay_order = $PayOrder->getFind($pay_map, $pay_field);
|
||
// 判断
|
||
if (empty($pay_order)) {
|
||
return $info;
|
||
}
|
||
// 处理数据
|
||
$info = $this->handleOther($info, $bill_order, $pay_order);
|
||
return $info;
|
||
}
|
||
|
||
/**
|
||
* 处理其他支付数据
|
||
* @param $info array
|
||
* @param $bill_order array
|
||
* @param $pay_order array
|
||
* @return array
|
||
*/
|
||
private function handleOther($info, $bill_order, $pay_order)
|
||
{
|
||
// 判断其他支付
|
||
if (empty($info['other'])) {
|
||
return $info;
|
||
}
|
||
foreach ($info['other'] as &$val) {
|
||
// 判断其他支付
|
||
if ($val['id'] == $pay_order['other_pay_id']) {
|
||
if ($bill_order['order_type'] == 1) {
|
||
$val['sell_money'] += $pay_order['trade_amount'];
|
||
$val['sell_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$val['online_sell_money'] += $pay_order['trade_amount'];
|
||
$val['online_sell_num'] += 1;
|
||
} else {
|
||
$val['line_sell_money'] += $pay_order['trade_amount'];
|
||
$val['line_sell_num'] += 1;
|
||
}
|
||
} else {
|
||
$val['refund_money'] += $pay_order['trade_amount'];
|
||
$val['refund_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$val['online_refund_money'] += $pay_order['trade_amount'];
|
||
$val['online_refund_num'] += 1;
|
||
} else {
|
||
$val['line_refund_money'] += $pay_order['trade_amount'];
|
||
$val['line_refund_num'] += 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return $info;
|
||
}
|
||
|
||
/**
|
||
* 处理组合支付
|
||
* @param $info array
|
||
* @param $bill_order array
|
||
* @param $parameter [
|
||
* merchant_id
|
||
* store_id
|
||
* type
|
||
* ]
|
||
* @return array
|
||
*/
|
||
public function combinationPay($info, $bill_order, $parameter)
|
||
{
|
||
// 条件
|
||
$PayOrder = new RetailPayOrderModel();
|
||
$pay_map = [
|
||
'merchant_id' => $parameter['merchant_id'],
|
||
'bill_id' => $bill_order['id'],
|
||
'order_state' => ['in', ['SUCCESS', 'REFUND']],
|
||
];
|
||
$pay_map['store_id'] = $parameter['type'] == 1 ? $info['id'] : $parameter['store_id'];
|
||
$pay_field = [
|
||
'id', 'pay_type', 'trade_amount', 'other_pay_id'
|
||
];
|
||
// 查询pay_order订单
|
||
$pay_order = $PayOrder->getSelect($pay_map, $pay_field);
|
||
// 判断
|
||
if (empty($pay_order)) {
|
||
return $info;
|
||
}
|
||
// 处理数据
|
||
foreach ($pay_order as &$val) {
|
||
// 判断类型
|
||
if ($bill_order['order_type'] == 1) {
|
||
$info['total']['sell_money'] += $val['trade_amount'];
|
||
$info['total']['sell_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['total']['online_sell_money'] += $val['trade_amount'];
|
||
$info['total']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['total']['line_sell_money'] += $val['trade_amount'];
|
||
$info['total']['line_sell_num'] += 1;
|
||
}
|
||
switch ($val['pay_type']) {
|
||
case 1:
|
||
// 微信
|
||
$info['wechat']['sell_money'] += $val['trade_amount'];
|
||
$info['wechat']['sell_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['wechat']['online_sell_money'] += $val['trade_amount'];
|
||
$info['wechat']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['wechat']['line_sell_money'] += $val['trade_amount'];
|
||
$info['wechat']['line_sell_num'] += 1;
|
||
}
|
||
break;
|
||
case 2:
|
||
// 支付宝
|
||
$info['alipay']['sell_money'] += $val['trade_amount'];
|
||
$info['alipay']['sell_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['alipay']['online_sell_money'] += $val['trade_amount'];
|
||
$info['alipay']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['alipay']['line_sell_money'] += $val['trade_amount'];
|
||
$info['alipay']['line_sell_num'] += 1;
|
||
}
|
||
break;
|
||
case 3:
|
||
// 现金
|
||
$info['cash']['sell_money'] += $val['trade_amount'];
|
||
$info['cash']['sell_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['cash']['online_sell_money'] += $val['trade_amount'];
|
||
$info['cash']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['cash']['line_sell_money'] += $val['trade_amount'];
|
||
$info['cash']['line_sell_num'] += 1;
|
||
}
|
||
break;
|
||
case 4:
|
||
// 微信
|
||
$info['wechat']['sell_money'] += $val['trade_amount'];
|
||
$info['wechat']['sell_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['wechat']['online_sell_money'] += $val['trade_amount'];
|
||
$info['wechat']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['wechat']['line_sell_money'] += $val['trade_amount'];
|
||
$info['wechat']['line_sell_num'] += 1;
|
||
}
|
||
break;
|
||
case 5:
|
||
// 其他支付
|
||
$info = $this->handleOther($info, $bill_order, $val);
|
||
break;
|
||
case 6:
|
||
// 会员
|
||
$info['vip']['sell_money'] += $val['trade_amount'];
|
||
$info['vip']['sell_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['vip']['online_sell_money'] += $val['trade_amount'];
|
||
$info['vip']['online_sell_num'] += 1;
|
||
} else {
|
||
$info['vip']['line_sell_money'] += $val['trade_amount'];
|
||
$info['vip']['line_sell_num'] += 1;
|
||
}
|
||
break;
|
||
}
|
||
} else {
|
||
$info['total']['refund_money'] += $val['trade_amount'];
|
||
$info['total']['refund_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['total']['online_refund_money'] += $val['trade_amount'];
|
||
$info['total']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['total']['line_refund_money'] += $val['trade_amount'];
|
||
$info['total']['line_refund_num'] += 1;
|
||
}
|
||
switch ($val['pay_type']) {
|
||
case 1:
|
||
// 微信
|
||
$info['wechat']['refund_money'] += $val['trade_amount'];
|
||
$info['wechat']['refund_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['wechat']['online_refund_money'] += $val['trade_amount'];
|
||
$info['wechat']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['wechat']['line_refund_money'] += $val['trade_amount'];
|
||
$info['wechat']['line_refund_num'] += 1;
|
||
}
|
||
break;
|
||
case 2:
|
||
// 支付宝
|
||
$info['alipay']['refund_money'] += $val['trade_amount'];
|
||
$info['alipay']['refund_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['alipay']['online_refund_money'] += $val['trade_amount'];
|
||
$info['alipay']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['alipay']['line_refund_money'] += $val['trade_amount'];
|
||
$info['alipay']['line_refund_num'] += 1;
|
||
}
|
||
break;
|
||
case 3:
|
||
// 现金
|
||
$info['cash']['refund_money'] += $val['trade_amount'];
|
||
$info['cash']['refund_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['cash']['online_refund_money'] += $val['trade_amount'];
|
||
$info['cash']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['cash']['line_refund_money'] += $val['trade_amount'];
|
||
$info['cash']['line_refund_num'] += 1;
|
||
}
|
||
break;
|
||
case 4:
|
||
// 微信
|
||
$info['wechat']['refund_money'] += $val['trade_amount'];
|
||
$info['wechat']['refund_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['wechat']['online_refund_money'] += $val['trade_amount'];
|
||
$info['wechat']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['wechat']['line_refund_money'] += $val['trade_amount'];
|
||
$info['wechat']['line_refund_num'] += 1;
|
||
}
|
||
break;
|
||
case 5:
|
||
// 其他支付
|
||
$info = $this->handleOther($info, $bill_order, $val);
|
||
break;
|
||
case 6:
|
||
// 会员
|
||
$info['vip']['refund_money'] += $val['trade_amount'];
|
||
$info['vip']['refund_num'] += 1;
|
||
if ($bill_order['type'] == 1) {
|
||
$info['vip']['online_refund_money'] += $val['trade_amount'];
|
||
$info['vip']['online_refund_num'] += 1;
|
||
} else {
|
||
$info['vip']['line_refund_money'] += $val['trade_amount'];
|
||
$info['vip']['line_refund_num'] += 1;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return $info;
|
||
}
|
||
|
||
/**
|
||
* 处理快捷收银
|
||
* @param $info array
|
||
* @param $date array
|
||
* @param $parameter [
|
||
* merchant_id
|
||
* store_id
|
||
* type
|
||
* ]
|
||
* @return array
|
||
*/
|
||
public function quickPay($info, $date, $parameter)
|
||
{
|
||
// 条件
|
||
$PayOrder = new RetailPayOrderModel();
|
||
$quick_map = [
|
||
'merchant_id' => $parameter['merchant_id'],
|
||
'pay_type' => ['in', [1, 2, 3, 4, 6]],
|
||
'order_state' => ['in', ['SUCCESS', 'REFUND']],
|
||
'order_type' => 6
|
||
];
|
||
switch ($parameter['type']) {
|
||
case 1:
|
||
$quick_map['store_id'] = $info['id'];
|
||
$quick_map['trade_date'] = ['between', $date];
|
||
break;
|
||
case 2:
|
||
$quick_map['store_id'] = $parameter['store_id'];
|
||
$quick_map['trade_date'] = ['between', $info['date_map']];
|
||
break;
|
||
}
|
||
$quick_field = [
|
||
'id', 'pay_type', 'trade_amount', 'order_state'
|
||
];
|
||
// 查询pay_order订单
|
||
$pay_order = $PayOrder->getSelect($quick_map, $quick_field);
|
||
// 判断
|
||
if (empty($pay_order)) {
|
||
return $info;
|
||
}
|
||
// 处理数据
|
||
foreach ($pay_order as &$val) {
|
||
// 判断类型
|
||
if ($val['order_state'] == 'SUCCESS') {
|
||
$info['total']['sell_money'] += $val['trade_amount'];
|
||
$info['total']['sell_num'] += 1;
|
||
$info['total']['line_sell_money'] += $val['trade_amount'];
|
||
$info['total']['line_sell_num'] += 1;
|
||
switch ($val['pay_type']) {
|
||
case 1:
|
||
// 微信
|
||
$info['wechat']['sell_money'] += $val['trade_amount'];
|
||
$info['wechat']['sell_num'] += 1;
|
||
$info['wechat']['line_sell_money'] += $val['trade_amount'];
|
||
$info['wechat']['line_sell_num'] += 1;
|
||
break;
|
||
case 2:
|
||
// 支付宝
|
||
$info['alipay']['sell_money'] += $val['trade_amount'];
|
||
$info['alipay']['sell_num'] += 1;
|
||
$info['alipay']['line_sell_money'] += $val['trade_amount'];
|
||
$info['alipay']['line_sell_num'] += 1;
|
||
break;
|
||
case 3:
|
||
// 现金
|
||
$info['cash']['sell_money'] += $val['trade_amount'];
|
||
$info['cash']['sell_num'] += 1;
|
||
$info['cash']['line_sell_money'] += $val['trade_amount'];
|
||
$info['cash']['line_sell_num'] += 1;
|
||
break;
|
||
case 4:
|
||
// 微信
|
||
$info['wechat']['sell_money'] += $val['trade_amount'];
|
||
$info['wechat']['sell_num'] += 1;
|
||
$info['wechat']['line_sell_money'] += $val['trade_amount'];
|
||
$info['wechat']['line_sell_num'] += 1;
|
||
break;
|
||
case 6:
|
||
// 会员
|
||
$info['vip']['sell_money'] += $val['trade_amount'];
|
||
$info['vip']['sell_num'] += 1;
|
||
$info['vip']['line_sell_money'] += $val['trade_amount'];
|
||
$info['vip']['line_sell_num'] += 1;
|
||
break;
|
||
}
|
||
} else {
|
||
$info['total']['refund_money'] += $val['trade_amount'];
|
||
$info['total']['refund_num'] += 1;
|
||
$info['total']['line_refund_money'] += $val['trade_amount'];
|
||
$info['total']['line_refund_num'] += 1;
|
||
switch ($val['pay_type']) {
|
||
case 1:
|
||
// 微信
|
||
$info['wechat']['refund_money'] += $val['trade_amount'];
|
||
$info['wechat']['refund_num'] += 1;
|
||
$info['wechat']['line_refund_money'] += $val['trade_amount'];
|
||
$info['wechat']['line_refund_num'] += 1;
|
||
break;
|
||
case 2:
|
||
// 支付宝
|
||
$info['alipay']['refund_money'] += $val['trade_amount'];
|
||
$info['alipay']['refund_num'] += 1;
|
||
$info['alipay']['line_refund_money'] += $val['trade_amount'];
|
||
$info['alipay']['line_refund_num'] += 1;
|
||
break;
|
||
case 3:
|
||
// 现金
|
||
$info['cash']['refund_money'] += $val['trade_amount'];
|
||
$info['cash']['refund_num'] += 1;
|
||
$info['cash']['line_refund_money'] += $val['trade_amount'];
|
||
$info['cash']['line_refund_num'] += 1;
|
||
break;
|
||
case 4:
|
||
// 微信
|
||
$info['wechat']['refund_money'] += $val['trade_amount'];
|
||
$info['wechat']['refund_num'] += 1;
|
||
$info['wechat']['line_refund_money'] += $val['trade_amount'];
|
||
$info['wechat']['line_refund_num'] += 1;
|
||
break;
|
||
case 6:
|
||
// 会员
|
||
$info['vip']['refund_money'] += $val['trade_amount'];
|
||
$info['vip']['refund_num'] += 1;
|
||
$info['vip']['line_refund_money'] += $val['trade_amount'];
|
||
$info['vip']['line_refund_num'] += 1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return $info;
|
||
}
|
||
|
||
/**
|
||
* 处理门店充值数据
|
||
* @param $info array
|
||
* @param $recharge array
|
||
* @param $date array
|
||
* @param $parameter [
|
||
* merchant_id
|
||
* store_id
|
||
* type
|
||
* ]
|
||
* @return array
|
||
*/
|
||
public function handleStoreRecharge($info, $recharge, $date, $parameter)
|
||
{
|
||
// 条件
|
||
$RechargeOrder = new RetailRechargeOrderModel();
|
||
$rechange_map = [
|
||
'merchant_id' => $parameter['merchant_id'],
|
||
'status' => 1,
|
||
'type' => ['in', [1, 3, 4, 5, 9]],
|
||
'scene_type' => ['in', [1, 2, 3, 4, 5, 6]],
|
||
];
|
||
switch ($parameter['type']) {
|
||
case 1:
|
||
$rechange_map['store_id'] = $info['id'];
|
||
$rechange_map['add_time'] = ['between', $date];
|
||
break;
|
||
case 2:
|
||
$rechange_map['store_id'] = $parameter['store_id'];
|
||
$rechange_map['add_time'] = ['between', $info['date_map']];
|
||
break;
|
||
}
|
||
$rechange_field = ['id', 'money', 'all_money', 'user_type', 'scene_type', 'type', 'pay_type',];
|
||
// 查询
|
||
$recharge_order = $RechargeOrder->getSelect($rechange_map, $rechange_field);
|
||
// 判断
|
||
if (empty($recharge_order)) {
|
||
$data = [
|
||
'info' => $info,
|
||
'recharge' => $recharge
|
||
];
|
||
return $data;
|
||
}
|
||
// 处理数据
|
||
foreach ($recharge_order as &$val) {
|
||
// 判断类型
|
||
switch (intval($val['type'])) {
|
||
case 1:
|
||
// 充值
|
||
switch ($val['scene_type']) {
|
||
case 1:
|
||
switch ($val['pay_type']) {
|
||
case 1:
|
||
// 现金
|
||
$info['line_recharge']['cash_recharge'] += $val['money'];
|
||
$info['line_recharge']['cash_give'] += $val['all_money'] - $val['money'];
|
||
break;
|
||
case 2:
|
||
// 微信
|
||
$info['line_recharge']['wechat_recharge'] += $val['money'];
|
||
$info['line_recharge']['wechat_give'] += $val['all_money'] - $val['money'];
|
||
break;
|
||
case 3:
|
||
// 支付宝
|
||
$info['line_recharge']['alipay_recharge'] += $val['money'];
|
||
$info['line_recharge']['alipay_give'] += $val['all_money'] - $val['money'];
|
||
break;
|
||
}
|
||
break;
|
||
// 小程序
|
||
case 4:
|
||
$recharge['small_program'] += $val['money'];
|
||
break;
|
||
// 公众号
|
||
case 5:
|
||
$recharge['official_account'] += $val['money'];
|
||
break;
|
||
}
|
||
break;
|
||
// 3.编辑增加
|
||
case 3:
|
||
// 判断场景
|
||
switch ($val['scene_type']) {
|
||
case 3:
|
||
// 门店后台
|
||
$info['update_balance']['store_admin_give'] += $val['all_money'];
|
||
break;
|
||
case 6:
|
||
// 小助手
|
||
$info['update_balance']['store_aide_give'] += $val['all_money'];
|
||
break;
|
||
}
|
||
break;
|
||
// 编辑减少
|
||
case 4:
|
||
// 判断场景
|
||
switch ($val['scene_type']) {
|
||
case 1:
|
||
// 收银机
|
||
$info['update_balance']['cashier_reduce'] += $val['money'];
|
||
break;
|
||
case 3:
|
||
// 门店后台
|
||
$info['update_balance']['store_admin_reduce'] += $val['money'];
|
||
break;
|
||
case 6:
|
||
// 小助手
|
||
switch ($val['user_type']) {
|
||
case 2:
|
||
// 店长
|
||
$info['update_balance']['store_aide_reduce'] += $val['money'];
|
||
break;
|
||
case 3:
|
||
// 收银员
|
||
$info['update_balance']['cashier_aide_reduce'] += $val['money'];
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
break;
|
||
// 退款增加
|
||
case 5:
|
||
$info['update_balance']['goods_refund'] += $val['money'];
|
||
break;
|
||
// 退款
|
||
case 9:
|
||
// 判断类型
|
||
switch ($val['scene_type']) {
|
||
case 3:
|
||
// 店长
|
||
$info['update_balance']['store_refund'] += $val['all_money'];
|
||
break;
|
||
case 1:
|
||
// 收银员
|
||
$info['update_balance']['cashier_refund'] += $val['all_money'];
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
$data = [
|
||
'info' => $info,
|
||
'recharge' => $recharge
|
||
];
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 处理商户充值数据
|
||
* @param $info array
|
||
* @param $recharge array
|
||
* @param $date array
|
||
* @param $merchant_id
|
||
* @return array
|
||
*/
|
||
public function handleMerchantRecharge($recharge, $date, $merchant_id)
|
||
{
|
||
// 条件
|
||
$RechargeOrder = new RetailRechargeOrderModel();
|
||
$recharge_map = [
|
||
'merchant_id' => $merchant_id,
|
||
'status' => 1,
|
||
'user_type' => 1,
|
||
'type' => ['in', [1, 3, 4, 9]],
|
||
'scene_type' => ['in', [2, 6]],
|
||
'add_time' => ['between', $date]
|
||
];
|
||
$rechange_field = ['id', 'money', 'all_money', 'user_type', 'scene_type', 'type', 'pay_type',];
|
||
// 查询
|
||
$recharge_order = $RechargeOrder->getSelect($recharge_map, $rechange_field);
|
||
// 判断
|
||
if (empty($recharge_order)) {
|
||
return $recharge;
|
||
}
|
||
// 处理数据
|
||
foreach ($recharge_order as &$val) {
|
||
// 判断类型
|
||
switch (intval($val['type'])) {
|
||
// 判断类型 1.充值
|
||
case 1:
|
||
$recharge['merchant_admin_recharge'] += $val['money'];
|
||
$recharge['merchant_admin_give'] += $val['all_money'] - $val['money'];
|
||
break;
|
||
// 编辑增加
|
||
case 3:
|
||
// 判断场景
|
||
switch ($val['scene_type']) {
|
||
case 2:
|
||
// 商户后台
|
||
$recharge['merchant_admin_give'] += $val['all_money'];
|
||
break;
|
||
case 6:
|
||
// 小助手
|
||
$recharge['merchant_aide_give'] += $val['all_money'];
|
||
break;
|
||
}
|
||
break;
|
||
// 编辑减少
|
||
case 4:
|
||
// 判断场景
|
||
switch ($val['scene_type']) {
|
||
case 2:
|
||
// 商户后台
|
||
$recharge['merchant_admin_reduce'] += $val['money'];
|
||
break;
|
||
case 6:
|
||
// 小助手
|
||
$recharge['merchant_aide_reduce'] += $val['money'];
|
||
break;
|
||
}
|
||
break;
|
||
// 退款
|
||
case 9:
|
||
// 判断类型
|
||
$recharge['merchant_admin_refund'] += $val['all_money'];
|
||
break;
|
||
}
|
||
}
|
||
return $recharge;
|
||
}
|
||
|
||
/**
|
||
* 处理门店总数据
|
||
* @param $info array
|
||
* @return array
|
||
*/
|
||
public function handleStoreAllData($info)
|
||
{
|
||
// [total]
|
||
$info['total']['money'] = round($info['total']['money'], 2);
|
||
$info['total']['sell_money'] = round($info['total']['sell_money'], 2);
|
||
$info['total']['refund_money'] = round($info['total']['refund_money'], 2);
|
||
$info['total']['line_money'] = round($info['total']['line_money'], 2);
|
||
$info['total']['line_sell_money'] = round($info['total']['line_sell_money'], 2);
|
||
$info['total']['line_refund_money'] = round($info['total']['line_refund_money'], 2);
|
||
$info['total']['online_money'] = round($info['total']['online_money'], 2);
|
||
$info['total']['online_sell_money'] = round($info['total']['online_sell_money'], 2);
|
||
$info['total']['online_refund_money'] = round($info['total']['online_refund_money'], 2);
|
||
|
||
// [wechat]
|
||
$info['wechat']['sell_money'] = round($info['wechat']['sell_money'], 2);
|
||
$info['wechat']['refund_money'] = round($info['wechat']['refund_money'], 2);
|
||
$info['wechat']['line_sell_money'] = round($info['wechat']['line_sell_money'], 2);
|
||
$info['wechat']['line_refund_money'] = round($info['wechat']['line_refund_money'], 2);
|
||
$info['wechat']['online_sell_money'] = round($info['wechat']['online_sell_money'], 2);
|
||
$info['wechat']['online_refund_money'] = round($info['wechat']['online_refund_money'], 2);
|
||
|
||
// [alipay]
|
||
$info['alipay']['sell_money'] = round($info['alipay']['sell_money'], 2);
|
||
$info['alipay']['line_sell_money'] = round($info['alipay']['line_sell_money'], 2);
|
||
$info['alipay']['online_sell_money'] = round($info['alipay']['online_sell_money'], 2);
|
||
$info['alipay']['refund_money'] = round($info['alipay']['refund_money'], 2);
|
||
$info['alipay']['line_refund_money'] = round($info['alipay']['line_refund_money'], 2);
|
||
$info['alipay']['online_refund_money'] = round($info['alipay']['online_refund_money'], 2);
|
||
|
||
// [vip]
|
||
$info['vip']['sell_money'] = round($info['vip']['sell_money'], 2);
|
||
$info['vip']['line_sell_money'] = round($info['vip']['line_sell_money'], 2);
|
||
$info['vip']['online_sell_money'] = round($info['vip']['online_sell_money'], 2);
|
||
$info['vip']['refund_money'] = round($info['vip']['refund_money'], 2);
|
||
$info['vip']['line_refund_money'] = round($info['vip']['line_refund_money'], 2);
|
||
$info['vip']['online_refund_money'] = round($info['vip']['online_refund_money'], 2);
|
||
|
||
// [cash]
|
||
$info['cash']['sell_money'] = round($info['cash']['sell_money'], 2);
|
||
$info['cash']['line_sell_money'] = round($info['cash']['line_sell_money'], 2);
|
||
$info['cash']['online_sell_money'] = round($info['cash']['online_sell_money'], 2);
|
||
$info['cash']['refund_money'] = round($info['cash']['refund_money'], 2);
|
||
$info['cash']['line_refund_money'] = round($info['cash']['line_refund_money'], 2);
|
||
$info['cash']['online_refund_money'] = round($info['cash']['online_refund_money'], 2);
|
||
|
||
// [line_recharge]
|
||
$info['line_recharge']['wechat_recharge'] = round($info['line_recharge']['wechat_recharge'], 2);
|
||
$info['line_recharge']['alipay_recharge'] = round($info['line_recharge']['alipay_recharge'], 2);
|
||
$info['line_recharge']['cash_recharge'] = round($info['line_recharge']['cash_recharge'], 2);
|
||
$info['line_recharge']['wechat_give'] = round($info['line_recharge']['wechat_give'], 2);
|
||
$info['line_recharge']['alipay_give'] = round($info['line_recharge']['alipay_give'], 2);
|
||
$info['line_recharge']['cash_give'] = round($info['line_recharge']['cash_give'], 2);
|
||
|
||
// [update_balance]
|
||
$info['update_balance']['store_admin_give'] = round($info['update_balance']['store_admin_give'], 2);
|
||
$info['update_balance']['store_aide_give'] = round($info['update_balance']['store_aide_give'], 2);
|
||
$info['update_balance']['store_admin_reduce'] = round($info['update_balance']['store_admin_reduce'], 2);
|
||
$info['update_balance']['store_aide_reduce'] = round($info['update_balance']['store_aide_reduce'], 2);
|
||
$info['update_balance']['cashier_reduce'] = round($info['update_balance']['cashier_reduce'], 2);
|
||
$info['update_balance']['cashier_aide_reduce'] = round($info['update_balance']['cashier_aide_reduce'], 2);
|
||
$info['update_balance']['store_refund'] = round($info['update_balance']['store_refund'], 2);
|
||
$info['update_balance']['cashier_refund'] = round($info['update_balance']['cashier_refund'], 2);
|
||
$info['update_balance']['goods_refund'] = round($info['update_balance']['goods_refund'], 2);
|
||
|
||
// [other]
|
||
if (!empty($info['other'])) {
|
||
// 处理其他支付
|
||
foreach ($info['other'] as &$val) {
|
||
$val['sell_money'] = round($val['sell_money'], 2);
|
||
$val['line_sell_money'] = round($val['line_sell_money'], 2);
|
||
$val['online_sell_money'] = round($val['online_sell_money'], 2);
|
||
$val['refund_money'] = round($val['refund_money'], 2);
|
||
$val['line_refund_money'] = round($val['line_refund_money'], 2);
|
||
$val['online_refund_money'] = round($val['online_refund_money'], 2);
|
||
}
|
||
}
|
||
|
||
return $info;
|
||
}
|
||
|
||
/**
|
||
* 处理充值总数据
|
||
* @param $recharge array
|
||
* @return array
|
||
*/
|
||
public function handleRechargeAllData($recharge)
|
||
{
|
||
// [recharge]
|
||
$recharge['small_program'] = round($recharge['small_program'], 2); //小程序充值
|
||
$recharge['official_account'] = round($recharge['official_account'], 2); //公众号充值
|
||
$recharge['merchant_admin_recharge'] = round($recharge['merchant_admin_recharge'], 2); //商户后台充值
|
||
$recharge['merchant_admin_give'] = round($recharge['merchant_admin_give'], 2); //商户后台赠送
|
||
$recharge['merchant_aide_give'] = round($recharge['merchant_aide_give'], 2); //小助手赠送
|
||
$recharge['merchant_admin_reduce'] = round($recharge['merchant_admin_reduce'], 2); //后台扣除
|
||
$recharge['merchant_aide_reduce'] = round($recharge['merchant_aide_reduce'], 2); //小助手扣除
|
||
$recharge['all_recharge_money'] = round($recharge['all_recharge_money'], 2); //总充值
|
||
$recharge['all_give_money'] = round($recharge['all_give_money'], 2); //总赠送
|
||
$recharge['all_reduce_money'] = round($recharge['all_reduce_money'], 2); //总扣除
|
||
$recharge['merchant_admin_refund'] = round($recharge['merchant_admin_refund'], 2); //总退款
|
||
|
||
return $recharge;
|
||
}
|
||
|
||
/********************************销售统计****结束*************************************/
|
||
}
|