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

<?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)
];
}
}