2024-08-03 10:04:14 +08:00
< ? php
// +----------------------------------------------------------------------
// | likeshop开源商城系统
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | gitee下载: https://gitee.com/likeshop_gitee
// | github下载: https://github.com/likeshop-github
// | 访问官网: https://www.likeshop.cn
// | 访问社区: https://home.likeshop.cn
// | 访问手册: http://doc.likeshop.cn
// | 微信公众号: likeshop技术社区
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用, 未经许可不能去除前后端官方版权标识
// | likeshop系列产品收费版本务必购买商业授权, 购买去版权授权后, 方可去除前后端官方版权标识
// | 禁止对系统程序代码以任何目的,任何形式的再发布
// | likeshop团队版权所有并拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeshop.cn.team
// +----------------------------------------------------------------------
namespace app\api\logic ;
use app\common\enum\DistributionOrderGoodsEnum ;
2024-10-31 10:11:39 +08:00
use app\common\enum\DistributionPartnerEnum ;
2024-08-03 10:04:14 +08:00
use app\common\enum\NoticeEnum ;
2024-10-31 10:11:39 +08:00
use app\common\logic\RegionLogic ;
use app\common\model\DevRegion ;
2024-08-03 10:04:14 +08:00
use app\common\model\distribution\Distribution ;
use app\common\model\distribution\DistributionLevel ;
2024-10-31 10:11:39 +08:00
use app\common\model\distribution\DistributionPartner ;
2024-10-24 14:52:56 +08:00
use app\common\model\distribution\DistributionStoreType ;
2024-08-03 10:04:14 +08:00
use app\common\model\shop\Shop ;
use app\common\server\ConfigServer ;
use app\common\model\user\UserDistribution ;
use app\common\model\user\User ;
use app\common\model\distribution\DistributionMemberApply ;
use app\common\model\distribution\DistributionOrderGoods ;
use app\common\server\AreaServer ;
use app\common\server\JsonServer ;
use app\common\server\UrlServer ;
use app\common\basics\Logic ;
use app\common\logic\AccountLogLogic ;
use app\common\model\AccountLog ;
use think\Exception ;
use think\facade\Db ;
class DistributionLogic extends Logic
{
/**
* Notes : 根据后台设置返回当前生成用户的分销会员状态 ( 设置了全员分销 , 新生成的用户即为分销会员 )
* @ author 段誉 ( 2021 / 4 / 7 14 : 48 )
* @ return int
*/
public static function isDistributionMember ()
{
$is_distribution = 0 ;
//分销会员申请--1,申请分销; 2-全员分销;
$distribution = ConfigServer :: get ( 'distribution' , 'member_apply' , 1 );
if ( $distribution == 2 ) {
$is_distribution = 1 ;
}
return $is_distribution ;
}
/**
* Desc : 生成用户扩展表
* @ param $user_id
* @ return bool
* @ throws \think\db\exception\DataNotFoundException
* @ throws \think\db\exception\ModelNotFoundException
* @ throws \think\exception\DbException
*/
public static function createUserDistribution ( $user_id )
{
$user_distribution = UserDistribution :: where ([ 'user_id' => $user_id ]) -> find ();
if ( $user_distribution ) {
return true ;
}
$data = [
'user_id' => $user_id ,
'distribution_order_num' => 0 ,
'distribution_money' => 0 ,
'fans' => 0 ,
'create_time' => time (),
];
UserDistribution :: create ( $data );
return true ;
}
/**
* 申请分销会员
*/
public static function apply ( $post )
{
$time = time ();
$data = [
'user_id' => $post [ 'user_id' ],
'real_name' => $post [ 'real_name' ],
'mobile' => $post [ 'mobile' ],
'province' => $post [ 'province' ],
'city' => $post [ 'city' ],
'district' => $post [ 'district' ],
'reason' => $post [ 'reason' ],
'status' => 0 , // 待审核
'create_time' => $time ,
'update_time' => $time ,
//'id_card' => $post['id_card'], // todo 弃用该字段
'front_id_card' => $post [ 'front_id_card' ],
'back_id_card' => $post [ 'back_id_card' ],
2024-10-12 15:55:12 +08:00
'hand_id_card' => $post [ 'hand_id_card' ],
2024-11-12 11:51:43 +08:00
// 'cost_card' => $post['cost_card'],
2024-11-08 10:18:37 +08:00
'partner_id' => $post [ 'partner_id' ],
2024-11-08 10:41:00 +08:00
'store_id' => $post [ 'store_id' ],
'own_city' => $post [ 'own_city' ],
2024-08-03 10:04:14 +08:00
];
\app\common\logic\DistributionLogic :: add ( $post [ 'user_id' ]);
// Distribution::where('user_id', $post['user_id'])->update([
// 'is_distribution' => 0,
// 'distribution_time' => time()
// ]);
return DistributionMemberApply :: create ( $data );
}
/**
* 最新分销申请详情
*/
public static function applyDetail ( $userId )
{
2024-11-08 11:34:06 +08:00
$result = DistributionMemberApply :: field ([ 'real_name' , 'mobile' , 'province' , 'city' , 'district' , 'id_card' , 'hand_id_card' , 'reason' , 'denial_reason' , 'status' , 'front_id_card' , 'back_id_card' , 'cost_card' , 'own_city' , 'partner_id' , 'store_id' ])
2024-08-03 10:04:14 +08:00
-> where ( 'user_id' , $userId )
-> order ( 'id' , 'desc' )
-> findOrEmpty ();
if ( $result -> isEmpty ()) {
return [];
}
$result = $result -> toArray ();
$result [ 'province' ] = AreaServer :: getAddress ( $result [ 'province' ]);
$result [ 'city' ] = AreaServer :: getAddress ( $result [ 'city' ]);
$result [ 'district' ] = AreaServer :: getAddress ( $result [ 'district' ]);
2024-11-08 11:25:51 +08:00
$result [ 'id_card' ] = substr_replace ( $result [ 'id_card' ], '********' , 6 , 8 );
$partner = DistributionPartner :: where ([
'id' => $result [ 'partner_id' ],
'is_delete' => 0
]) -> find ();
2024-11-14 11:16:44 +08:00
if ( $partner ) {
$result [ 'partner' ] = DistributionPartnerEnum :: getPartner ( $partner [ 'type' ]);
$result [ 'partner_money' ] = $partner [ 'un_core_city_money' ];
if ( strpos ( $partner [ 'city' ], $result [ 'own_city' ]) !== false ) {
$result [ 'partner_money' ] = $partner [ 'core_city_money' ];
}
$result [ 'store' ] = DistributionStoreType :: where ([
'id' => $result [ 'store_id' ],
'is_delete' => 0
]) -> field ( 'title, money' ) -> find ();
2024-11-08 11:25:51 +08:00
}
2024-08-03 10:04:14 +08:00
switch ( $result [ 'status' ]) {
case 0 :
$result [ 'status_str' ] = '已提交,等待客服审核...' ;
break ;
case 1 :
$result [ 'status_str' ] = '已审核通过' ;
break ;
case 2 :
$result [ 'status_str' ] = '审核失败,请重新提交审核' ;
break ;
}
return $result ;
}
/**
* 分销主页
*/
public static function index ( $userId )
{
// 自身及上级信息
$user_info = self :: myLeader ( $userId );
// 粉丝数(一级/二级)
// $fans = User::where([
// ['first_leader|second_leader', '=', $userId],
// ['del', '=', 0]
// ])->count();
$fans = User :: where ([
[ 'first_leader' , '=' , $userId ],
[ 'del' , '=' , 0 ]
]) -> count ();
2024-08-19 14:30:48 +08:00
// $shop_fans = Shop::where([
// ['reference_user_id', '=', $userId],
// ['is_freeze', '=', 0]
// ])->count();
$shop_fans = Db :: name ( " shop_apply " )
-> alias ( " a " )
-> join ( " user b " , " a.user_id = b.id " , " left " )
-> where ( " b.first_leader " , $userId )
-> where ( " a.audit_status " , 2 )
-> where ( " a.del " , 0 )
-> where ( " b.disable " , 0 )
-> where ( " b.del " , 0 )
-> count ();
$shop_fans1 = Db :: name ( " local_store " )
-> alias ( " a " )
-> join ( " user b " , " a.user_id = b.id " , " left " )
-> where ( " b.first_leader " , $userId )
-> where ( " a.store_state " , 1 )
-> where ( " a.is_delete " , 0 )
-> where ( " b.disable " , 0 )
-> where ( " b.del " , 0 )
-> count ();
$shop_fans = $shop_fans + $shop_fans1 ;
2024-08-03 10:04:14 +08:00
//今天的预估收益(待返佣)
$today_earnings = DistributionOrderGoods :: whereDay ( 'create_time' )
-> where ([ 'status' => 1 , 'user_id' => $userId ])
-> sum ( 'money' );
//本月预估收益(待返佣)
$month_earnings = DistributionOrderGoods :: whereMonth ( 'create_time' )
-> where ([ 'status' => 1 , 'user_id' => $userId ])
-> sum ( 'money' );
//累计收益(已结算)
$history_earnings = DistributionOrderGoods :: where ([ 'status' => 2 , 'user_id' => $userId ])
-> sum ( 'money' );
// 用户分销会员等级
$levelId = Distribution :: where ( 'user_id' , $userId ) -> value ( 'level_id' );
$levelName = DistributionLevel :: getLevelNameTwo ( $levelId );
$data = [
'procurement' => $user_info [ 'procurement' ],
'leader' => $user_info [ 'leader' ],
'fans' => $fans ,
'shop_fans' => $shop_fans ,
'able_withdrawal' => $user_info [ 'procurement' ][ 'earnings' ], //可提现佣金
'today_earnings' => round ( $today_earnings , 2 ), //今天预估收益
'month_earnings' => round ( $month_earnings , 2 ), //本月预估收益
'history_earnings' => round ( $history_earnings , 2 ), //累计收益
'level_name' => $levelName
];
return $data ;
}
/***
* 获取自身及上级信息
*/
public static function myLeader ( $userId )
{
$field = 'nickname,avatar,is_distribution,mobile,first_leader,distribution_code,earnings' ;
$user = User :: field ( $field ) -> where ([ 'id' => $userId , 'del' => 0 ]) -> findOrEmpty ();
$first_leader = User :: field ( 'nickname,mobile' )
-> where ([ 'id' => $user [ 'first_leader' ], 'del' => 0 ])
-> findOrEmpty ();
$user [ 'avatar' ] = UrlServer :: getFileUrl ( $user [ 'avatar' ]);
return [
'procurement' => $user ,
'leader' => $first_leader ,
];
}
/**
* 填写邀请码
*/
public static function code ( $post )
{
try {
Db :: startTrans ();
$firstLeader = User :: field ([ 'id' , 'first_leader' , 'second_leader' , 'third_leader' , 'ancestor_relation' , 'user_integral' ])
-> where ([ 'distribution_code' => $post [ 'code' ]])
-> findOrEmpty ();
if ( $firstLeader -> isEmpty ()) {
throw new \think\Exception ( '无效的邀请码' );
}
// 上级
$first_leader_id = $firstLeader [ 'id' ];
if ( $first_leader_id == $post [ 'user_id' ]){
return true ;
}
// 上上级
$second_leader_id = $firstLeader [ 'first_leader' ];
// 上上上级
$third_leader_id = $firstLeader [ 'second_leader' ];
// 拼接关系链
$firstLeader [ 'ancestor_relation' ] = boolval ( $firstLeader [ 'ancestor_relation' ]) ? ? '' ; // 清空null值及0
$my_ancestor_relation = $first_leader_id . ',' . $firstLeader [ 'ancestor_relation' ];
// 去除两端逗号
$my_ancestor_relation = trim ( $my_ancestor_relation , ',' );
$user = User :: findOrEmpty ( $post [ 'user_id' ]);
// 旧关系链
if ( ! empty ( $user -> ancestor_relation )) {
$old_ancestor_relation = $user -> id . ',' . $user -> ancestor_relation ;
} else {
$old_ancestor_relation = $user -> id ;
}
// $data = [
// 'first_leader' => $first_leader_id,
// 'second_leader' => $second_leader_id,
// 'third_leader' => $third_leader_id,
// 'ancestor_relation' => $my_ancestor_relation,
// 'update_time' => time()
// ];
$data = [
'first_leader' => $first_leader_id ,
'ancestor_relation' => $my_ancestor_relation ,
'update_time' => time ()
];
// 更新当前用户的分销关系
User :: where ([ 'id' => $post [ 'user_id' ]]) -> update ( $data );
//更新当前用户下级的分销关系
// $data = [
// 'second_leader' => $first_leader_id,
// 'third_leader' => $second_leader_id,
// 'update_time' => time()
// ];
// User::where(['first_leader' => $post['user_id']])->update($data);
//更新当前用户下下级的分销关系
// $data = [
// 'third_leader' => $first_leader_id,
// 'update_time' => time()
// ];
// User::where(['second_leader' => $post['user_id']])->update($data);
//更新当前用户所有后代的关系链
$posterityArr = User :: field ( 'id,ancestor_relation' )
-> whereFindInSet ( 'ancestor_relation' , $post [ 'user_id' ])
-> select ()
-> toArray ();
$updateData = [];
$replace_ancestor_relation = $post [ 'user_id' ] . ',' . $my_ancestor_relation ;
foreach ( $posterityArr as $item ) {
$updateData [] = [
'id' => $item [ 'id' ],
'ancestor_relation' => trim ( str_replace ( $old_ancestor_relation , $replace_ancestor_relation , $item [ 'ancestor_relation' ]), ',' )
];
}
// 批量更新
( new User ()) -> saveAll ( $updateData );
//邀请会员赠送积分
$invited_award_integral = ConfigServer :: get ( 'marketing' , 'invited_award_integral' , 0 );
if ( $invited_award_integral > 0 ){
// 增加上级积分
$firstLeader -> user_integral += ( int ) $invited_award_integral ;
$firstLeader -> save ();
// 增加上级积分变动记录
AccountLogLogic :: AccountRecord ( $firstLeader [ 'id' ], $invited_award_integral , 1 , AccountLog :: invite_add_integral );
}
//通知用户
event ( 'Notice' , [
'scene' => NoticeEnum :: INVITE_SUCCESS_NOTICE ,
'params' => [
'user_id' => $first_leader_id ,
'lower_id' => $post [ 'user_id' ],
'join_time' => date ( 'Y-m-d H:i:s' , time ())
]
]);
Db :: commit ();
return true ;
} catch ( \Exception $e ) {
Db :: rollback ();
self :: $error = $e -> getMessage ();
return false ;
}
}
/**
* 分销订单
*/
public static function order ( $get )
{
$where [] = [ 'd.user_id' , '=' , $get [ 'user_id' ]];
if ( isset ( $get [ 'status' ]) && in_array ( $get [ 'status' ], [ 1 , 2 , 3 ])) {
$where [] = [ 'd.status' , '=' , $get [ 'status' ]];
}
$field = 'd.create_time, d.money, d.goods_num, d.status, d.status as statusDesc, o.order_sn, og.total_pay_price as pay_price, g.image as goods_image, g.name as goods_name, gi.spec_value_str' ;
$count = DistributionOrderGoods :: alias ( 'd' )
-> where ( $where )
-> count ();
$lists = DistributionOrderGoods :: alias ( 'd' )
-> field ( $field )
-> leftJoin ( 'order_goods og' , 'og.id = d.order_goods_id' )
-> leftJoin ( 'order o' , 'o.id = og.order_id' )
-> leftJoin ( 'goods g' , 'og.goods_id=g.id' )
-> leftJoin ( 'goods_item gi' , 'og.item_id=gi.id' )
-> where ( $where )
-> order ( 'd.create_time desc' )
-> page ( $get [ 'page_no' ], $get [ 'page_size' ])
-> select ()
-> toArray ();
foreach ( $lists as & $item ) {
$item [ 'goods_image' ] = empty ( $item [ 'goods_image' ]) ? '' : UrlServer :: getFileUrl ( $item [ 'goods_image' ]);
}
$data = [
'list' => $lists ,
'page' => $get [ 'page_no' ],
'size' => $get [ 'page_size' ],
'count' => $count ,
'more' => is_more ( $count , $get [ 'page_no' ], $get [ 'page_size' ])
];
return $data ;
}
/**
* 月度账单
*/
public static function monthBill ( $get )
{
$field = [
" FROM_UNIXTIME(d.create_time,'%Y年%m月') as date " ,
" FROM_UNIXTIME(d.create_time,'%Y') as year " ,
" FROM_UNIXTIME(d.create_time,'%m') as month " ,
'sum(d.money) as total_money' ,
'count(d.id) as order_num'
];
$count = DistributionOrderGoods :: alias ( 'd' )
-> field ( $field )
-> leftJoin ( 'order_goods g' , 'g.id = d.order_goods_id' )
-> leftJoin ( 'order o' , 'o.id = g.order_id' )
-> where ([ 'd.user_id' => $get [ 'user_id' ]])
-> where ( 'd.status' , 'in' , [ 1 , 2 ])
-> group ( 'date' )
-> count ();
$lists = DistributionOrderGoods :: alias ( 'd' )
-> field ( $field )
-> leftJoin ( 'order_goods g' , 'g.id = d.order_goods_id' )
-> leftJoin ( 'order o' , 'o.id = g.order_id' )
-> where ([ 'd.user_id' => $get [ 'user_id' ]])
-> where ( 'd.status' , 'in' , [ 1 , 2 ])
-> order ( 'd.create_time desc' )
-> page ( $get [ 'page_no' ], $get [ 'page_size' ])
-> group ( 'date' )
-> select ()
-> toArray ();
$data = [
'list' => $lists ,
'page' => $get [ 'page_no' ],
'size' => $get [ 'page_size' ],
'count' => $count ,
'more' => is_more ( $count , $get [ 'page_no' ], $get [ 'page_size' ])
];
return $data ;
}
/**
* 月度明细
*/
public static function monthDetail ( $get )
{
$where [] = [ 'd.user_id' , '=' , $get [ 'user_id' ]];
$monthStr = $get [ 'year' ] . '-' . str_pad ( $get [ 'month' ], 2 , '0' , STR_PAD_LEFT );
$field = 'd.create_time, d.money, d.goods_num, d.status, d.status as statusDesc, o.order_sn, og.total_pay_price as pay_price, g.image as goods_image, g.name as goods_name, gi.spec_value_str' ;
$count = DistributionOrderGoods :: alias ( 'd' )
-> where ( $where )
-> whereMonth ( 'd.create_time' , $monthStr )
-> count ();
$lists = DistributionOrderGoods :: alias ( 'd' )
-> field ( $field )
-> leftJoin ( 'order_goods og' , 'og.id = d.order_goods_id' )
-> leftJoin ( 'order o' , 'o.id = og.order_id' )
-> leftJoin ( 'goods g' , 'og.goods_id=g.id' )
-> leftJoin ( 'goods_item gi' , 'og.item_id=gi.id' )
-> where ( $where )
-> whereMonth ( 'd.create_time' , $monthStr )
-> order ( 'd.create_time desc' )
-> page ( $get [ 'page_no' ], $get [ 'page_size' ])
-> select ()
-> toArray ();
$data = [
'list' => $lists ,
'page' => $get [ 'page_no' ],
'size' => $get [ 'page_size' ],
'count' => $count ,
'more' => is_more ( $count , $get [ 'page_no' ], $get [ 'page_size' ])
];
return $data ;
}
/**
* Desc : 取消订单后更新分销订单为已失效
* @ param $order_id
* @ throws Exception
* @ throws \think\exception\PDOException
*/
public static function setDistributionOrderFail ( $order_id )
{
//订单取消后更新分销订单为已失效状态
return Db :: name ( 'distribution_order_goods d' )
-> join ( 'order_goods og' , 'og.id = d.order_goods_id' )
-> join ( 'order o' , 'o.id = og.order_id' )
-> where ( 'o.id' , $order_id )
-> update ([
'd.status' => DistributionOrderGoodsEnum :: STATUS_ERROR ,
'd.update_time' => time (),
]);
}
/**
* @ Notes : 分销佣金列表
* @ Author : 张无忌
* @ param $get
* @ param $user_id
* @ return bool | array
*/
public static function commission ( $get , $user_id )
{
try {
$where = [
[ 'user_id' , '=' , $user_id ],
[ 'source_type' , 'in' , AccountLog :: earnings_change ]
];
$model = new AccountLog ();
$count = $model -> where ( $where ) -> count ();
$lists = $model -> field ([ 'id,source_type,change_amount,change_type,create_time' ])
-> where ( $where )
-> order ( 'id' , 'desc' )
-> page ( $get [ 'page_no' ] ? ? 1 , $get [ 'page_size' ] ? ? 20 )
-> select ();
foreach ( $lists as & $item ) {
$symbol = $item [ 'change_type' ] == 1 ? '+' : '-' ;
$item [ 'change_amount' ] = $symbol . $item [ 'change_amount' ];
}
return [
'list' => $lists ,
'page' => $get [ 'page_no' ] ? ? 1 ,
'size' => $get [ 'page_size' ] ? ? 20 ,
'count' => $count ,
'more' => is_more ( $count , $get [ 'page_no' ] ? ? 1 , $get [ 'page_size' ] ? ? 20 )
];
} catch ( \Exception $e ) {
static :: $error = $e -> getMessage ();
return false ;
}
}
public static function fixAncestorRelation ()
{
try {
$userList = User :: select () -> toArray ();
if ( empty ( $userList )) {
throw new \Exception ( '没有用户,无需修复' );
}
$updateEmptyData = [];
$updateData = [];
foreach ( $userList as $user ) {
$my_ancestor_relation = self :: myAncestorRelation ( $user );
$updateEmptyData [] = [ 'id' => $user [ 'id' ], 'ancestor_relation' => '' ];
$updateData [] = [ 'id' => $user [ 'id' ], 'ancestor_relation' => $my_ancestor_relation ];
}
// 先清除所有关系链
( new User ()) -> saveAll ( $updateEmptyData );
// 重新设置关系链
( new User ()) -> saveAll ( $updateData );
return true ;
} catch ( \Exception $e ) {
self :: $error = $e -> getMessage ();
return false ;
}
}
public static function myAncestorRelation ( $user )
{
if ( empty ( $user [ 'first_leader' ])) {
return '' ;
}
return trim ( self :: findAncestorRelation ( $user [ 'first_leader' ]), ',' );
}
public static function findAncestorRelation ( $id , $flag = true )
{
static $ancestor_relation = '' ;
if ( $flag ) {
$ancestor_relation = '' ;
}
$ancestor_relation .= $id . ',' ;
$user = User :: findOrEmpty ( $id );
if ( empty ( $user [ 'first_leader' ])) {
return $ancestor_relation ;
}
return self :: findAncestorRelation ( $user [ 'first_leader' ], false );
}
/**
* @ notes 获取背景海报
* @ return array | mixed | string | null
* @ author cjhao
* @ date 2021 / 11 / 29 11 : 35
*/
public static function getPoster ()
{
$poster = ConfigServer :: get ( 'invite' , 'poster' , '/images/share/share_user_bg.png' );
$poster = empty ( $poster ) ? $poster : UrlServer :: getFileUrl ( $poster );
return [ 'poster' => $poster ];
}
2024-10-24 14:52:56 +08:00
2024-10-31 10:11:39 +08:00
// 获取店铺类型和战略计划
2024-10-24 14:52:56 +08:00
public static function scheme ()
{
2024-10-24 15:17:31 +08:00
$store_type_status = ConfigServer :: get ( 'distribution' , 'store_type' );
2024-11-07 14:20:57 +08:00
$store_type = array ();
2024-10-24 14:52:56 +08:00
if ( $store_type_status == 1 ) {
2024-11-07 14:20:57 +08:00
$store_type = DistributionStoreType :: where ([ 'is_delete' => 0 ])
2024-10-24 14:52:56 +08:00
-> order ( 'sort desc' )
-> select ();
}
2024-11-07 15:57:32 +08:00
$partner = DistributionPartner :: where ([ 'is_show' => 1 , 'is_delete' => 0 ]) -> field ( 'id, proportion, city, type, core_city_money, un_core_city_money, is_show' ) -> select ();
2024-10-31 10:11:39 +08:00
if ( $partner ) {
foreach ( $partner as $k => & $v ) {
$partner [ $k ][ 'partner' ] = DistributionPartnerEnum :: getPartner ( $v [ 'type' ]);
}
}
2024-10-24 14:52:56 +08:00
return [
'store_type_status' => $store_type_status ,
2024-11-07 14:20:57 +08:00
'store_type' => $store_type ,
2024-10-31 10:11:39 +08:00
'partner' => $partner
2024-10-24 14:52:56 +08:00
];
}
2024-08-03 10:04:14 +08:00
}