You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
9.3 KiB
192 lines
9.3 KiB
<?php
|
|
|
|
namespace app\service;
|
|
|
|
use app\model\Goods;
|
|
use app\model\Order;
|
|
use app\model\OrderGoodsDetail;
|
|
use app\service\user\UserService;
|
|
|
|
class IndexService extends BaseService
|
|
{
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
|
|
public function getSign($type){
|
|
|
|
$sign = parent::createSign($type);
|
|
return $sign;
|
|
|
|
}
|
|
|
|
public function homeInfo($leftDate, $rightDate, $sale_ranking, $saleRankingDate){
|
|
|
|
// 数量统计
|
|
$goods_count = Goods::where('is_deleted', 0)->count(); // 商品数量
|
|
$awaitpay_count = Order::where('status', 1)->count(); // 待付款数量
|
|
$awaitdelivery_count = Order::where('status', 2)->count(); // 待交付数量
|
|
$awaitclose_count = Order::where('status', 3)->count(); // 待结算数量
|
|
$complete_count = Order::where('status', 4)->count(); // 已完成数量
|
|
$close_count = Order::where('status', 5)->count(); // 关闭数量
|
|
|
|
$yesterday_start = date('Y-m-d 00:00:00', strtotime("-1 day"));
|
|
$yesterday_end = date('Y-m-d 23:59:59', strtotime("-1 day"));
|
|
// 交易总额 订单总额
|
|
$deal_money = Order::whereTime('paymenttime', 'between', [$yesterday_start, $yesterday_end])->where('pay_status', 2)->sum('total_money');
|
|
$total_service_charge = Order::whereTime('paymenttime', 'between', [$yesterday_start, $yesterday_end])->where('pay_status', 2)->sum('total_service_charge');
|
|
$order_money = $deal_money - $total_service_charge;
|
|
|
|
// 文化数据数量
|
|
$deal_goods_count = Order::alias('order')->join('order_goods_detail detail', 'order.batchcode = detail.batchcode')->where('order.status', 'in', '2,3,4')->whereTime('order.createtime', 'between', [$yesterday_start, $yesterday_end])->where('detail.is_deleted', 0)->count();
|
|
// 上架数量
|
|
$shelf_count = Goods::whereTime('createtime', 'between', [$yesterday_start, $yesterday_end])->count();
|
|
// 委托期满文化数据
|
|
$out_count = Goods::whereTime('contractualtime_end_time', 'between', [$yesterday_start, $yesterday_end])->where('goods_status', 4)->count();
|
|
//新增订单
|
|
$yester_order_count = Order::whereTime('createtime', 'between', [$yesterday_start, $yesterday_end])->where('status', 'in', '2,3,4')->count();
|
|
//已完成订单
|
|
$yester_complete_count = Order::whereTime('completetime', 'between', [$yesterday_start, $yesterday_end])->where('status', 4)->count();
|
|
|
|
$right_date = [date('Y-m-01 00:00:00'), date('Y-m-31 23:59:59')];
|
|
if($rightDate == "year"){
|
|
$right_date = [date('Y-01-01 00:00:00',strtotime('-4 year')), date('Y-12-31 23:59:59')];
|
|
}elseif($rightDate == "month"){
|
|
$right_date = [date('Y-01-01 00:00:00'), date('Y-12-31 23:59:59')];
|
|
}
|
|
|
|
// 委托方排名
|
|
$limit = 10;
|
|
// $total_ranking = Goods::where('is_deleted', 0)->whereTime('createtime', 'between', $right_date)->field('sale_count+click_count count')->limit($limit)->order('count desc')->group('user_islicode')->value('count');
|
|
// $entrust_ranking = Goods::where('is_deleted', 0)->whereTime('createtime', 'between', $right_date)->field('user_islicode,sale_count+click_count count')->limit($limit)->order('count desc')->group('user_islicode')->select();
|
|
|
|
$total_ranking = 0;
|
|
$entrust_ranking = Goods::where('is_deleted', 0)->whereTime('createtime', 'between', $right_date)->field('user_islicode,sum(sale_count+click_count) count')->limit($limit)->order('count desc')->group('user_islicode')->select();
|
|
$entrust_ranking->each(function ($item) use(&$total_ranking){
|
|
$total_ranking += $item['count'];
|
|
$userService = new UserService();
|
|
$user = $userService->getApiUser($item['user_islicode']);
|
|
if(isset($user['name'])){
|
|
$item['username'] = $user['name'];
|
|
}else{
|
|
$item['username'] = $item['user_islicode'];
|
|
}
|
|
return $item;
|
|
});
|
|
|
|
$saleRanking_date = [date('Y-m-01 00:00:00'), date('Y-m-31 23:59:59')];
|
|
if($saleRankingDate == "year"){
|
|
$saleRanking_date = [date('Y-01-01 00:00:00',strtotime('-4 year')), date('Y-12-31 23:59:59')];
|
|
}elseif($saleRankingDate == "month"){
|
|
$saleRanking_date = [date('Y-01-01 00:00:00'), date('Y-12-31 23:59:59')];
|
|
}
|
|
|
|
// 委托方排名
|
|
$limit = 10;
|
|
$total_sale_ranking = OrderGoodsDetail::alias('detail')->join('order order', 'order.batchcode = detail.batchcode')->where('order.status', 'in', '2,3,4')->where('detail.is_deleted', 0)->whereTime('detail.createtime', 'between', $saleRanking_date)->limit($limit)->order('total_money desc')->group('detail.entrust_islicode')->sum('detail.money');
|
|
$entrust_sale_ranking = OrderGoodsDetail::alias('detail')->join('order order', 'order.batchcode = detail.batchcode')->where('order.status', 'in', '2,3,4')->where('detail.is_deleted', 0)->whereTime('detail.createtime', 'between', $saleRanking_date)->field('detail.entrust_islicode,sum(detail.money) total_money')->limit($limit)->order('total_money desc')->group('detail.entrust_islicode')->select();
|
|
// $entrust_sale_ranking = OrderGoodsDetail::where('is_deleted', 0)->whereTime('createtime', 'between', $saleRanking_date)->field('entrust_islicode,sum(money) total_money')->limit($limit)->order('total_money desc')->group('entrust_islicode')->select();
|
|
$entrust_sale_ranking->each(function ($item){
|
|
$userService = new UserService();
|
|
$user = $userService->getApiUser($item['entrust_islicode']);
|
|
if(isset($user['name'])){
|
|
$item['username'] = $user['name'];
|
|
}else{
|
|
$item['username'] = $item['entrust_islicode'];
|
|
}
|
|
$item['total_money'] = $this->doFormatMoney($item['total_money']);
|
|
return $item;
|
|
});
|
|
|
|
$tree_map = [];
|
|
$lables = [];
|
|
if($leftDate == "year"){
|
|
// 近五年
|
|
for($i = 4;$i >= 0;$i--){
|
|
$year = date('Y',strtotime('-'.$i.' year'));
|
|
$money = $this->getDateMoney(date("{$year}-01-01 00:00:00"), date("{$year}-12-31 23:59:59"));
|
|
$tree_map[0]['data'][] = $money[0];
|
|
$tree_map[1]['data'][] = $money[1];
|
|
$lables[] = "{$year}年";
|
|
}
|
|
}elseif($leftDate == "month"){
|
|
// 12月
|
|
for($i = 1;$i <= 12;$i++){
|
|
$money = $this->getDateMoney(date("Y-{$i}-01 00:00:00"), date("Y-{$i}-31 23:59:59"));
|
|
$tree_map[0]['data'][] = $money[0];
|
|
$tree_map[1]['data'][] = $money[1];
|
|
$lables[] = "{$i}月";
|
|
}
|
|
}else{
|
|
// 30天
|
|
for($i = 1;$i <= date('t');$i++){
|
|
$money = $this->getDateMoney(date("Y-m-{$i} 00:00:00"), date("Y-m-{$i} 23:59:59"));
|
|
$tree_map[0]['data'][] = $money[0];
|
|
$tree_map[1]['data'][] = $money[1];
|
|
$lables[] = "{$i}";
|
|
}
|
|
}
|
|
$tree_map[0]['label'] = "订单金额总额";
|
|
$tree_map[1]['label'] = "标的价款总额";
|
|
|
|
$result = [];
|
|
$result['goods_count'] = $goods_count;
|
|
$result['awaitpay_count'] = $awaitpay_count;
|
|
$result['awaitdelivery_count'] = $awaitdelivery_count;
|
|
$result['awaitclose_count'] = $awaitclose_count;
|
|
$result['complete_count'] = $complete_count;
|
|
$result['close_count'] = $close_count;
|
|
$result['deal_money'] = $this->doFormatMoney($deal_money);
|
|
$result['order_money'] = $this->doFormatMoney($order_money);
|
|
$result['deal_goods_count'] = $deal_goods_count;
|
|
$result['shelf_count'] = $shelf_count;
|
|
$result['out_count'] = $out_count;
|
|
$result['yester_order_count'] = $yester_order_count;
|
|
$result['yester_complete_count'] = $yester_complete_count;
|
|
$result['entrust_ranking'] = $entrust_ranking->toArray();
|
|
$result['entrust_sale_ranking'] = $entrust_sale_ranking->toArray();
|
|
$result['treeMap'] = $tree_map;
|
|
$result['label'] = $lables;
|
|
$result['total_sale_ranking'] = $total_sale_ranking;
|
|
$result['total_ranking'] = $total_ranking;
|
|
return $result;
|
|
}
|
|
|
|
|
|
function doFormatMoney($money)
|
|
{
|
|
$float_money = "";
|
|
if(strpos($money, '.') !== false){
|
|
$money_arr = explode('.', $money);
|
|
$money = $money_arr[0];
|
|
$float_money = '.'.$money_arr[1];
|
|
}
|
|
$tmp_money = strrev($money);
|
|
$format_money = "";
|
|
for ($i = 3; $i < strlen($money); $i += 3) {
|
|
$format_money .= substr($tmp_money, 0, 3) . ",";
|
|
$tmp_money = substr($tmp_money, 3);
|
|
}
|
|
$format_money .= $tmp_money;
|
|
$format_money = strrev($format_money);
|
|
$format_money .= $float_money;
|
|
return $format_money;
|
|
}
|
|
|
|
public function getDateMoney($start, $end){
|
|
$deal_money = Order::whereTime('paymenttime', 'between', [$start, $end])->where('pay_status', 2)->sum('total_money');
|
|
$total_service_charge = Order::whereTime('paymenttime', 'between', [$start, $end])->where('pay_status', 2)->sum('total_service_charge');
|
|
$order_money = $deal_money - $total_service_charge;
|
|
|
|
return [
|
|
round($deal_money, 2),
|
|
round($order_money, 2)
|
|
];
|
|
|
|
}
|
|
|
|
|
|
}
|