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; } /********************************销售统计****结束*************************************/ }