2023-01-18 17:10:33 +08:00
< ? php
namespace app\api\controller ;
use app\api\BaseController ;
use app\api\middleware\Auth ;
use think\facade\Db ;
/**
* 综合文章
*/
class Article extends BaseController
{
/**
* 控制器中间件 [ 不需要鉴权 ]
* @ var array
*/
protected $middleware = [
Auth :: class => [ 'except' => [ 'index' , 'hot_list' , 'getArticleList' , 'details' , 'indexs' ] ]
];
public function index ( $search = '' , $category_id = 1 , $page = 1 , $is_time = 0 , $category_type = 0 )
{
$param = get_params ();
$screen = $param [ 'screen' ] ? ? 1 ;
$solve = $param [ 'solve' ] ? ? 1 ;
$order = $param [ 'order' ] ? ? 1 ;
2023-01-31 11:26:07 +08:00
// $model = Db::table('fa_article');
2023-01-18 17:10:33 +08:00
$where = [
[ 'status' , '=' , 1 ],
[ 'category_id' , '=' , $category_id ]
];
//查询升降序
if ( $order == 1 ){
$orders = 'desc' ;
} else {
$orders = 'asc' ;
}
if ( ! $category_id ) {
unset ( $where [ 1 ]);
}
//根据个人村id进行查询
if ( JWT_UID ) {
$find = Db :: table ( 'fa_szxc_information_useraddress' ) -> where ( 'user_id' , JWT_UID ) -> find ();
2023-02-11 15:25:16 +08:00
// if ($find) {
// if ($find['auth_range']==1){
// $where[] = ['village', '=', $find['village_id']];
// }elseif ($find['auth_range']==2){
// $where[] = ['township', '=', $find['street_id']];
// }elseif ($find['auth_range']==3){
// $where[] = ['county', '=', $find['area_id']];
// }
// }
2023-02-01 11:30:54 +08:00
// 登录返回村名和村地址
$cun_arr [ 'cun_name' ] = Db :: table ( 'fa_geo_village' ) -> where ( 'village_id' , $find [ 'village_id' ]) -> value ( 'village_name' );
$cun_arr [ 'cun_address' ] = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , JWT_UID ) -> value ( 'address_name' );
} else {
$cun_arr = [];
2023-01-18 17:10:33 +08:00
}
2023-02-11 15:25:16 +08:00
2023-02-11 15:06:55 +08:00
if ( isset ( $param [ 'street_id' ]) && ! empty ( $param [ 'street_id' ])){
$where [] = [ 'township' , '=' , $param [ 'street_id' ]];
}
if ( isset ( $param [ 'village_id' ]) && ! empty ( $param [ 'village_id' ])){
$where [] = [ 'village' , '=' , $param [ 'village_id' ]];
}
2023-02-11 15:25:16 +08:00
2023-01-18 17:10:33 +08:00
//总条数
2023-01-31 11:26:07 +08:00
$count = Db :: table ( 'fa_article' ) -> where ( $where ) -> count ();
2023-01-18 17:10:33 +08:00
//当月条数
2023-01-31 11:26:07 +08:00
$month_count = Db :: table ( 'fa_article' ) -> where ( $where ) -> whereMonth ( 'view_time' ) -> count ();
2023-01-18 17:10:33 +08:00
if ( $search != '' ) {
$where [] = [ 'title' , 'like' , '%' . $search . '%' ];
}
if ( $category_type != 0 ) {
$where [] = [ 'category_type' , '=' , $category_type ];
}
//判断筛选查询
if ( $screen == 2 ){
foreach ( $where as $key => $value ){
$where [ $key ][ 0 ] = 'a.' . $value [ 0 ];
}
//查询
$select = Db :: table ( 'fa_article' ) -> where ( $where ) -> page ( $page ) -> limit ( 20 )
-> alias ( 'a' )
2023-02-02 14:49:06 +08:00
-> join ([ 'fa_article_vote_side_tables' => 'avst' ], " a.id = avst.article_id and avst.end_time >= " . date ( 'Y-m-d' ))
2023-01-18 17:10:33 +08:00
-> field ( 'a.id,a.title,a.describe,a.user_id,a.view,a.view_time,a.image,a.end_time,a.is_solve,a.is_vote,a.is_nickname,a.video,a.category_type,avst.end_time as die_time' )
-> order ( 'a.id DESC' )
-> select () -> toArray ();
} else if ( $screen == 3 ){
foreach ( $where as $key => $value ){
$where [ $key ][ 0 ] = 'a.' . $value [ 0 ];
}
//查询
$select = Db :: table ( 'fa_article' ) -> where ( $where ) -> page ( $page ) -> limit ( 20 )
-> alias ( 'a' )
2023-02-02 14:49:06 +08:00
-> join ([ 'fa_article_vote_side_tables' => 'avst' ], " a.id = avst.article_id and avst.end_time <= " . date ( 'Y-m-d' ))
2023-01-18 17:10:33 +08:00
-> field ( 'a.id,a.title,a.describe,a.user_id,a.view,a.view_time,a.image,a.end_time,a.is_solve,a.is_vote,a.is_nickname,a.video,a.category_type,avst.end_time as die_time' )
-> order ( 'a.id DESC' ) -> select () -> toArray ();
} else {
//查询是否解决
if ( $solve == 2 ){
$where [] = [ 'is_solve' , '=' , 0 ];
} else if ( $solve == 3 ){
$where [] = [ 'is_solve' , '=' , 1 ];
}
2023-01-31 11:26:07 +08:00
$select = Db :: table ( 'fa_article' ) -> with ( 'user' ) -> where ( $where ) -> page ( $page ) -> limit ( 20 )
2023-01-18 17:10:33 +08:00
-> field ( 'id,title,user_id,view,view_time,image,end_time,is_solve,is_vote,is_nickname,video,category_type,describe' )
-> order ( 'id' , $orders ) -> select () -> toArray ();
}
foreach ( $select as $key => $value ) {
if ( $value [ 'is_nickname' ] == 1 ) {
$select [ $key ][ 'nickname' ] = " 匿名人员 " ;
$select [ $key ][ 'avatar' ] = " " ;
$select [ $key ][ 'user_id' ] = 0 ;
} else {
$select [ $key ][ 'nickname' ] = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , $value [ 'user_id' ]) -> value ( 'name' );
}
//投票处理
if ( $value [ 'is_vote' ] == 1 ) {
$article_vote = Db :: table ( 'fa_article_vote_side_tables' ) -> where ( 'article_id' , $value [ 'id' ]) -> find ();
if ( $article_vote ) {
$data = $article_vote ;
$data [ 'agree_percentage' ] = 0 ;
$data [ 'opposition_percentage' ] = 0 ;
$count_vote = $data [ 'agree' ] + $data [ 'opposition' ] + $data [ 'other' ];
if ( $count_vote != 0 ) {
if ( $data [ 'agree' ] != 0 ) {
$data [ 'agree_percentage' ] = round (( $data [ 'agree' ] / $count_vote ) * 100 );
}
if ( $data [ 'opposition' ] != 0 ) {
$data [ 'opposition_percentage' ] = round (( $data [ 'opposition' ] / $count_vote ) * 100 );
}
}
$select [ $key ][ 'extend' ][ 'vote' ] = $data ;
}
} else {
$select [ $key ][ 'extend' ] = [];
}
if ( $is_time == 1 ) {
if ( $value [ 'end_time' ] < date ( 'Y-m-d H:i:s' )) {
if ( $value [ 'end_time' ] == '0000-00-00 00:00:00' ) {
$select [ $key ][ 'overdue_time' ] = '显示错误' ;
} else {
if ( $value [ 'is_solve' ] == 1 ){
$select [ $key ][ 'overdue_time' ] = 0 ;
} else {
$cle = time () - strtotime ( $value [ 'end_time' ]);
$select [ $key ][ 'overdue_time' ] = ceil ( $cle / 3600 / 24 );
}
}
} else {
$select [ $key ][ 'overdue_time' ] = 0 ;
}
}
if ( $category_id == 165 ) {
if ( $value [ 'category_type' ] != 0 ) {
$find = Db :: table ( 'fa_category' ) -> where ( 'id' , $value [ 'category_type' ]) -> find ();
$select [ $key ][ 'extend' ][ 'category_type_name' ] = $find ? $find [ 'name' ] . ': ' : '' ;
} else {
$select [ $key ][ 'extend' ][ 'category_type_name' ] = '' ;
}
}
}
2023-02-01 11:30:54 +08:00
$this -> apiSuccess ( 'ok' , [ 'list' => $select , 'cun' => $cun_arr , 'count' => [ 'count' => $count , 'month_count' => $month_count ]]);
2023-01-18 17:10:33 +08:00
}
/** 首页推荐
* @ param $category_id
* @ param $page
*/
public function hot_list ( $category_id = 0 , $page = 1 , $county = 0 , $township = 0 , $village = 0 )
{
$where = [
[ 'status' , '=' , 1 ],
];
if ( ! $category_id ) {
unset ( $where [ 1 ]);
}
// 如果登录
if ( JWT_UID ) {
$find = Db :: table ( 'fa_szxc_information_useraddress' ) -> where ( 'user_id' , JWT_UID ) -> find ();
if ( $find ) {
if ( $find [ 'auth_range' ] == 1 ){
$where [] = [ 'village' , '=' , $find [ 'village_id' ]];
} elseif ( $find [ 'auth_range' ] == 2 ){
$where [] = [ 'township' , '=' , $find [ 'street_id' ]];
} elseif ( $find [ 'auth_range' ] == 3 ){
$where [] = [ 'county' , '=' , $find [ 'area_id' ]];
}
}
}
// if ($county != 0) {
// $where[] = ['county', '=', $county];
// }
// if ($township != 0) {
// $where[] = ['township', '=', $township];
// }
// if ($village != 0) {
// $where[] = ['village', '=', $village];
// }
if ( $category_id == 0 ) {
$where [] = [ 'category_id' , 'in' , [ 176 , 162 , 161 , 160 , 152 ]];
$sos = Db :: table ( 'fa_article' ) -> where ( 'category_id' , 150 ) -> where ( 'status' , 1 )
-> whereTime ( 'view_time' , 'between' , [ date ( " H:i:s " , strtotime ( " -5 minute " )), date ( " H:i:s " , strtotime ( " +5 minute " ))])
-> page ( $page ) -> limit ( 3 )
-> withAttr ( 'user_info' , function ( $value , $data ) {
$user = Db :: table ( 'fa_user' ) -> where ( 'id' , $data [ 'user_id' ]) -> field ( 'nickname,avatar' ) -> find ();
$user [ 'name' ] = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , $data [ 'user_id' ]) -> value ( 'name' );
return $user ;
})
-> withAttr ( 'article_comment' , function ( $value , $data ) {
return Db :: table ( 'fa_article_comment' ) -> where ([[ 'vote_id' , '=' , $data [ 'id' ]],[ 'status' , '=' , 1 ]]) -> count ();
})
-> withAttr ( 'article_type' , function ( $value , $data ) {
return '一键求救' ;
})
-> field ( 'id,title,user_id,view,view_time,image,end_time,is_solve,is_vote,is_nickname,video,category_id,source' ) -> order ( 'id DESC' )
-> withAttr ( 'image' , function ( $value , $data ) {
if ( $data [ 'image' ] != '' ) {
return explode ( ',' , $data [ 'image' ]);
}
})
-> select () -> toArray ();
} else {
$where [] = [ 'category_id' , '=' , $category_id ];
$sos = [];
}
//查询
$mapo [] = [[ 'category_id' , '=' , '1' ],[ 'status' , '=' , '1' ]];
$select = Db :: table ( 'fa_article' ) -> where ( $where ) -> whereOr ( $mapo ) -> page ( $page ) -> limit ( 20 )
-> withAttr ( 'user_info' , function ( $value , $data ) {
$user = Db :: table ( 'fa_user' ) -> where ( 'id' , $data [ 'user_id' ]) -> field ( 'nickname,avatar' ) -> find ();
$user [ 'name' ] = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , $data [ 'user_id' ]) -> value ( 'name' );
return $user ;
})
-> field ( 'id,title,describe,user_id,view,view_time,image,end_time,is_solve,is_vote,is_nickname,video,category_id' ) -> order ( 'id DESC' )
-> withAttr ( 'image' , function ( $value , $data ) {
if ( $data [ 'image' ] != '' ) {
return explode ( ',' , $data [ 'image' ]);
}
})
-> withAttr ( 'article_comment' , function ( $value , $data ) {
return Db :: table ( 'fa_article_comment' ) -> where ([[ 'vote_id' , '=' , $data [ 'id' ]],[ 'status' , '=' , 1 ]]) -> count ();
})
-> withAttr ( 'article_type' , function ( $value , $data ) {
if ( $data [ 'category_id' ] == 1 ){
return '实时信息' ;
} elseif ( $data [ 'category_id' ] == 176 ){
return '党务公开' ;
} elseif ( $data [ 'category_id' ] == 162 ){
return '议事大厅' ;
} elseif ( $data [ 'category_id' ] == 161 ){
return '财务公开' ;
} elseif ( $data [ 'category_id' ] == 160 ){
return '村务公开' ;
} elseif ( $data [ 'category_id' ] == 152 ){
return '好人好事' ;
} else {
return '' ;
}
})
-> select () -> toArray ();
$personal = Db :: table ( 'fa_szxc_personal_news' )
-> withAttr ( 'user_info' , function ( $value , $data ) {
$user = Db :: table ( 'fa_user' ) -> where ( 'id' , $data [ 'user_id' ]) -> field ( 'nickname,avatar' ) -> find ();
$user [ 'name' ] = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , $data [ 'user_id' ]) -> value ( 'name' );
return $user ;
})
-> withAttr ( 'image' , function ( $value , $data ) {
if ( $data [ 'image' ] != '' ) {
return json_decode ( $data [ 'image' ], true );
}
})
-> withAttr ( 'article_comment' , function ( $value , $data ) {
return Db :: table ( 'fa_szxc_personal_news_comment' ) -> where ([[ 'personal_news_id' , '=' , $data [ 'id' ]],[ 'status' , '=' , 1 ]]) -> count ();
})
-> withAttr ( 'article_type' , function ( $value , $data ) {
return Db :: table ( 'fa_category' ) -> where ( 'id' , $data [ 'category_id' ]) -> value ( 'name' );
})
-> withAttr ( 'view_time' , function ( $value , $data ) {
return date ( 'Y-m-d H:i:s' , $value );
})
-> field ( 'id,id as personal_news_id,content as title,user_id,view,createtime as view_time,images as image,video,category_id' )
-> limit ( 5 ) -> order ( 'id desc' ) -> page ( $page ) -> select () -> toArray ();
$i = 0 ;
$personal_count = count ( $personal );
if ( $select && $personal ){
foreach ( $select as $key => $value ){
if ( $key != 0 && $key % 2 == 0 && $i < $personal_count ){
array_splice ( $select , $key + $i , 0 ,[ $personal [ $i ]]);
++ $i ;
}
}
}
$this -> apiSuccess ( 'ok' , [ 'list' => array_merge ( $sos , $select )]);
}
/** 首页分类列表
* @ param $category_id
* @ param $page
*/
public function getArticleList ( $category_id = 0 , $page = 1 , $type = 1 )
{
2023-01-31 11:26:07 +08:00
// $model = Db::table('fa_article');
2023-01-18 17:10:33 +08:00
$where = [
[ 'status' , '=' , 1 ],
];
//根据个人村id进行查询
if ( JWT_UID ) {
$find = Db :: table ( 'fa_szxc_information_useraddress' ) -> where ( 'user_id' , JWT_UID ) -> find ();
if ( $find ) {
if ( $find [ 'auth_range' ] == 1 ){
$where [] = [ 'village' , '=' , $find [ 'village_id' ]];
} elseif ( $find [ 'auth_range' ] == 2 ){
$where [] = [ 'township' , '=' , $find [ 'street_id' ]];
} elseif ( $find [ 'auth_range' ] == 3 ){
$where [] = [ 'county' , '=' , $find [ 'area_id' ]];
}
}
}
if ( $type == 1 ) {
$where [] = [ 'category_id' , 'in' , [ 162 , 161 , 160 , 152 ]];
} else {
$where [] = [ 'category_id' , '=' , $category_id ];
}
//查询
$select = Db :: table ( 'fa_article' ) -> where ( $where ) -> page ( $page ) -> limit ( 20 )
-> field ( 'id,title,user_id,view,view_time,image,end_time,is_solve,is_vote,is_nickname,video,category_id' ) -> order ( 'id DESC' )
-> withAttr ( 'image' , function ( $value , $data ) {
if ( $data [ 'image' ] != '' ) {
return explode ( ',' , $data [ 'image' ]);
}
})
-> withAttr ( 'user_info' , function ( $value , $data ) {
$user = Db :: table ( 'fa_user' ) -> where ( 'id' , $data [ 'user_id' ]) -> field ( 'nickname,avatar' ) -> find ();
$user [ 'name' ] = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , $data [ 'user_id' ]) -> value ( 'name' );
return $user ;
})
-> withAttr ( 'article_comment' , function ( $value , $data ) {
return Db :: table ( 'fa_article_comment' ) -> where ([[ 'vote_id' , '=' , $data [ 'id' ]],[ 'status' , '=' , 1 ]]) -> count ();
})
-> withAttr ( 'article_type' , function ( $value , $data ) {
if ( $data [ 'category_id' ] == 176 ){
return '党务公开' ;
} elseif ( $data [ 'category_id' ] == 162 ){
return '议事大厅' ;
} elseif ( $data [ 'category_id' ] == 161 ){
return '财务公开' ;
} elseif ( $data [ 'category_id' ] == 160 ){
return '村务公开' ;
} elseif ( $data [ 'category_id' ] == 152 ){
return '好人好事' ;
} else {
return '' ;
}
})
-> select () -> toArray ();
return $this -> apiSuccess ( 'ok' , [ 'list' => $select ]);
}
/** 详情
* @ param $id
* @ return null
* @ throws \think\db\exception\DataNotFoundException
* @ throws \think\db\exception\DbException
* @ throws \think\db\exception\ModelNotFoundException
*/
public function details ( $id )
{
// 增加阅读数
// $ip = 'article-details-'.$this->request->ip().'-'.$id;
// $ip_cache = Cache::get($ip);
// if(empty($ip_cache)){
// Cache::set($ip,$id,3600*24);
$map [] = [ 'id' , '=' , $id ];
Db :: table ( 'fa_article' ) -> where ( $map ) -> inc ( 'view' , '1' ) -> update ();
// }
$where = [
[ 'status' , '=' , 1 ],
[ 'id' , '=' , $id ]
];
$find = Db :: table ( 'fa_article' ) -> where ( $where )
-> withAttr ( 'user_info' , function ( $data , $value ) {
$find [ 'nickname' ] = " 匿名人员 " ;
$find [ 'mobile' ] = " 匿名状态无法显示 " ;
$find [ 'gender' ] = " 匿名状态无法显示 " ;
$find [ 'avatar' ] = " " ;
$find [ 'user_id' ] = 0 ;
$find [ 'count' ] = 0 ;
$find [ 'end_count' ] = 0 ;
$find [ 'overdue_count' ] = 0 ;
if ( $value [ 'is_nickname' ] == 0 ) {
$user = Db :: table ( 'fa_user' ) -> where ( 'id' , $value [ 'user_id' ]) -> field ( 'nickname,avatar,mobile' ) -> find ();
if ( $user ) {
$find = $user ;
}
$find [ 'nickname' ] = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , $value [ 'user_id' ]) -> value ( 'name' );
}
$config_find = Db :: table ( 'fa_config' ) -> where ( 'id' , 20 ) -> find ();
//是否查询提案数
if ( in_array ( $value [ 'category_id' ], explode ( ',' , $config_find [ 'value' ]))) {
//提案总数
$where = [
[ 'category_id' , '=' , $value [ 'category_id' ]],
[ 'user_id' , '=' , $value [ 'user_id' ]]
];
//处理总数
$whereTwo = [
[ 'category_id' , '=' , $value [ 'category_id' ]],
[ 'user_id' , '=' , $value [ 'user_id' ]],
[ 'is_solve' , '=' , 1 ]
];
$find [ 'count' ] = Db :: table ( 'fa_article' ) -> where ( $where ) -> count ();
$find [ 'end_count' ] = Db :: table ( 'fa_article' ) -> where ( $whereTwo ) -> count ();
//逾期总数
$where [] = [ 'is_solve' , '=' , 0 ];
$find [ 'overdue_count' ] = Db :: table ( 'fa_article' ) -> where ( $where ) -> whereTime ( 'end_time' , '<=' , date ( 'Y-m-d H:i:s' ))
-> count ();
$usermsg = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , $value [ 'user_id' ]) -> field ( 'age,address_name,gender,name' ) -> find ();
if ( $value [ 'is_nickname' ] == 1 ){
$find [ 'age' ] = '匿名状态无法显示' ;
$find [ 'address' ] = '匿名状态无法显示' ;
$find [ 'gender' ] = '匿名状态无法显示' ;
} else {
$find [ 'age' ] = $usermsg ? $usermsg [ 'age' ] : '' ;
$find [ 'address' ] = $usermsg ? $usermsg [ 'address_name' ] : '' ;
if ( $usermsg ){
$find [ 'gender' ] = $usermsg [ 'gender' ] == 1 ? '男' : '女' ;
}
$find [ 'nickname' ] = $usermsg [ 'name' ];
}
$insurance = Db :: table ( 'fa_szxc_information_insurance' ) -> where ( 'user_id' , $value [ 'user_id' ]) -> field ( 'insurance_type' ) -> find ();
if ( $insurance ) {
$find [ 'insurance_type' ] = $insurance [ 'insurance_type' ];
} else {
$find [ 'insurance_type' ] = " " ;
}
}
return $find ;
}) -> withAttr ( 'category_type_title' , function ( $data , $value ) {
if ( $value [ 'category_type' ] != 0 ) {
$find = Db :: table ( 'fa_category' ) -> where ( 'id' , $value [ 'category_type' ]) -> find ();
return $find [ 'name' ];
}
})
-> find ();
//投票处理
if ( $find [ 'is_vote' ] == 1 ) {
$article_vote = Db :: table ( 'fa_article_vote_side_tables' ) -> where ( 'article_id' , $find [ 'id' ]) -> find ();
if ( $article_vote ) {
$data = $article_vote ;
$data [ 'agree_percentage' ] = 0 ;
$data [ 'opposition_percentage' ] = 0 ;
$count_vote = $data [ 'agree' ] + $data [ 'opposition' ] + $data [ 'other' ];
if ( $count_vote != 0 ) {
if ( $data [ 'agree' ] != 0 ) {
$data [ 'agree_percentage' ] = round (( $data [ 'agree' ] / $count_vote ) * 100 );
}
if ( $data [ 'opposition' ] != 0 ) {
$data [ 'opposition_percentage' ] = round (( $data [ 'opposition' ] / $count_vote ) * 100 );
}
}
$find [ 'extend' ][ 'vote' ] = $data ;
}
} else {
$find [ 'extend' ] = [];
}
return $this -> apiSuccess ( 'ok' , $find );
}
public function add ()
{
}
/** 提交内容
* @ return null
* @ throws \think\db\exception\DataNotFoundException
* @ throws \think\db\exception\DbException
* @ throws \think\db\exception\ModelNotFoundException
*/
public function post ()
{
$input = get_params ();
// $valdate = new ArticleValdate();
// $res = $valdate->check($input);
// if (!$res) {
// return $this->apiError($valdate->getError());
// }
$useraddress = Db :: table ( 'fa_szxc_information_useraddress' ) -> where ( 'user_id' , JWT_UID ) -> where ( 'status' , 1 ) -> find ();
$data = [];
if ( $useraddress ) {
$data [ 'county' ] = $useraddress [ 'area_id' ];
$data [ 'township' ] = $useraddress [ 'street_id' ];
$data [ 'village' ] = $useraddress [ 'village_id' ];
}
$data [ 'end_time' ] = date ( 'Y-m-d H:i:s' , strtotime ( '+1 day' ));
$data [ 'view_time' ] = date ( 'Y-m-d H:i:s' );
$data [ 'user_id' ] = JWT_UID ; //添加用户的id
$data [ 'category_id' ] = $input [ 'category_id' ]; //大分类id
$data [ 'category_type' ] = $input [ 'category_type' ]; //小分类id
$data [ 'title' ] = $input [ 'title' ]; //标题
$data [ 'is_nickname' ] = empty ( $input [ 'is_nickname' ]) ? 0 : $input [ 'is_nickname' ]; //是否匿名
$data [ 'content' ] = $input [ 'content' ]; //内容
$data [ 'describe' ] = empty ( $input [ 'describe' ]) ? '' : $input [ 'describe' ]; //简介
$data [ 'image' ] = $input [ 'image' ]; //封面
$data [ 'is_vote' ] = empty ( $input [ 'is_vote' ]) ? 0 : $input [ 'is_vote' ]; //是否投票
if ( $input [ 'category_id' ] == 150 ){
$name = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , JWT_UID ) -> value ( 'name' );
$data [ 'title' ] = '来自于' . $name . '的一键求救' ;
}
$res = Db :: table ( 'fa_article' ) -> insertGetId ( $data );
if ( $input [ 'is_vote' ] == 1 ) {
$vote_data = [
'article_id' => $res ,
'start_time' => $input [ 'start_time' ],
'end_time' => $input [ 'end_time' ],
];
Db :: table ( 'fa_article_vote_side_tables' ) -> insert ( $vote_data );
}
if ( $res ) {
return $this -> apiSuccess ( '添加成功' );
} else {
return $this -> apiError ( '添加失败' );
}
}
/** 获取要编辑的内容
* @ param $id
* @ return null
* @ throws \think\db\exception\DataNotFoundException
* @ throws \think\db\exception\DbException
* @ throws \think\db\exception\ModelNotFoundException
*/
public function edit ( $id )
{
2023-01-31 11:26:07 +08:00
// $model =Db::table('fa_article');
$find = Db :: table ( 'fa_article' ) -> where ( 'id' , $id ) -> find ();
2023-01-18 17:10:33 +08:00
if ( $find && $find [ 'is_vote' ] == 1 ) {
$data = Db :: table ( 'fa_article_vote_side_tables' ) -> where ( 'article_id' , $find [ 'id' ]) -> find ();
$find [ 'extend' ][ 'vote' ] = $data ;
}
return $this -> apiSuccess ( 'ok' , $find );
}
/** 提交要编辑的内容
* @ param $id
* @ return null
*/
public function put ( $id )
{
$input = get_params ();
$data = [];
$data [ 'end_time' ] = date ( 'Y-m-d H:i:s' );
$data [ 'view_time' ] = $input [ 'view_time' ];
$data [ 'category_type' ] = $input [ 'category_type' ]; //小分类id
$data [ 'title' ] = $input [ 'title' ]; //标题
$data [ 'content' ] = $input [ 'content' ]; //内容
$data [ 'describe' ] = empty ( $input [ 'describe' ]) ? '' : $input [ 'describe' ]; //简介
$data [ 'image' ] = $input [ 'image' ]; //封面
$data [ 'is_vote' ] = $input [ 'is_vote' ]; //是否投票
$input [ 'update_user_id' ] = JWT_UID ; //更新用户的id
$res = Db :: table ( 'fa_article' ) -> where ( 'id' , $id ) -> update ( $data );
if ( $input [ 'is_vote' ] == 1 ) {
$vote_data = [
'start_time' => $input [ 'start_time' ],
'end_time' => $input [ 'end_time' ],
];
Db :: table ( 'fa_article_vote_side_tables' ) -> where ( 'article_id' , $id ) -> update ( $vote_data );
}
if ( $res ) {
return $this -> apiSuccess ( '修改成功' );
} else {
return $this -> apiError ( '修改失败' );
}
}
public function getWorkArticleCount ()
{
2023-01-31 11:26:07 +08:00
// $model = Db::table('fa_article');
2023-01-18 17:10:33 +08:00
//根据个人村id进行查询
if ( JWT_UID ) {
$find = Db :: table ( 'fa_szxc_information_useraddress' ) -> where ( 'user_id' , JWT_UID ) -> find ();
if ( $find ) {
if ( $find [ 'auth_range' ] == 1 ){
$where [] = [ 'village' , '=' , $find [ 'village_id' ]];
} elseif ( $find [ 'auth_range' ] == 2 ){
$where [] = [ 'township' , '=' , $find [ 'street_id' ]];
} elseif ( $find [ 'auth_range' ] == 3 ){
$where [] = [ 'county' , '=' , $find [ 'area_id' ]];
}
}
}
2023-01-31 11:26:07 +08:00
$ww [ 'is_solve' ] = 1 ;
$is_solve = Db :: table ( 'fa_article' ) -> where ( $ww ) -> where ( $where ) -> count ();
$shuqiu = Db :: table ( 'fa_article' ) -> where ( 'is_solve' , 0 ) -> where ( $where ) -> where ( 'category_id' , 'in' ,[ 165 , 150 , 149 , 148 , 147 ]) -> whereTime ( 'end_time' , '>' , date ( 'Y-m-d h:i:s' )) -> count ();
$time = Db :: table ( 'fa_article' ) -> where ( 'is_solve' , 0 ) -> where ( $where ) -> where ( 'category_id' , 'in' ,[ 165 , 150 , 149 , 148 , 147 ]) -> whereTime ( 'end_time' , '<=' , date ( 'Y-m-d h:i:s' )) -> count ();
$maodun = Db :: table ( 'fa_article' ) -> where ( 'is_solve' , 0 ) -> where ( $where ) -> where ( 'category_id' , 147 ) -> count ();
$xiejiao = Db :: table ( 'fa_article' ) -> where ( 'is_solve' , 0 ) -> where ( $where ) -> where ( 'category_id' , 148 ) -> count ();
$saohei = Db :: table ( 'fa_article' ) -> where ( 'is_solve' , 0 ) -> where ( $where ) -> where ( 'category_id' , 149 ) -> count ();
$sos = Db :: table ( 'fa_article' ) -> where ( 'is_solve' , 0 ) -> where ( $where ) -> where ( 'category_id' , 150 ) -> count ();
$one_shuqiu = Db :: table ( 'fa_article' ) -> where ( 'is_solve' , 0 ) -> where ( $where ) -> where ( 'category_id' , 165 ) -> count ();
2023-01-18 17:10:33 +08:00
$select = [
'solve_count' => $is_solve ,
'shuqiu' => $shuqiu ,
'time' => $time ,
'one' => [
'maodun' => $maodun ,
'xiejiao' => $xiejiao ,
'saohei' => $saohei ,
'sos' => $sos ,
'shuqiu' => $one_shuqiu ,
]
];
return $this -> apiSuccess ( 'ok' , $select );
}
public function delete ( $id )
{
2023-01-31 11:26:07 +08:00
// $model = Db::table('fa_article');
$res = Db :: table ( 'fa_article' ) -> where ( 'id' , $id ) -> update ([ 'status' => 0 ]);
2023-01-18 17:10:33 +08:00
if ( $res ) {
return $this -> apiSuccess ( '删除成功' );
} else {
return $this -> apiError ( '删除失败' );
}
}
// 服务大厅小红点
public function getMyArticleCount ()
{
2023-01-31 11:26:07 +08:00
// $model = Db::table('fa_article');
2023-01-18 17:10:33 +08:00
//根据个人id进行查询
$where [] = [ 'a.user_id' , '=' , JWT_UID ];
$where [] = [ 'b.is_read' , '=' , '0' ];
//根据个人村id进行查询
if ( JWT_UID ) {
$find = Db :: table ( 'fa_szxc_information_useraddress' ) -> where ( 'user_id' , JWT_UID ) -> find ();
if ( $find ) {
if ( $find [ 'auth_range' ] == 1 ){
$www [] = [ 'a.village' , '=' , $find [ 'village_id' ]];
} elseif ( $find [ 'auth_range' ] == 2 ){
$www [] = [ 'a.township' , '=' , $find [ 'street_id' ]];
} elseif ( $find [ 'auth_range' ] == 3 ){
$www [] = [ 'a.county' , '=' , $find [ 'area_id' ]];
}
}
}
2023-01-31 11:26:07 +08:00
$yishi = Db :: table ( 'fa_article' ) -> alias ( 'a' ) -> join ([ 'fa_article_vote_side_tables' => 'b' ], 'a.id=b.article_id' ) -> where ( $www ) -> where ( 'a.category_id' , 162 ) -> whereTime ( 'b.end_time' , '>' , date ( 'Y-m-d H:i:s' )) -> count ();
2023-02-02 14:49:06 +08:00
$maodun = Db :: table ( 'fa_article' ) -> alias ( 'a' ) -> join ([ 'fa_article_comment' => 'b' ], 'a.id=b.vote_id' ) -> where ( 'a.is_solve' , 1 ) -> where ( $where ) -> where ( 'a.category_id' , 147 ) -> count ();
$xiejiao = Db :: table ( 'fa_article' ) -> alias ( 'a' ) -> join ([ 'fa_article_comment' => 'b' ], 'a.id=b.vote_id' ) -> where ( 'a.is_solve' , 1 ) -> where ( $where ) -> where ( 'a.category_id' , 148 ) -> count ();
$saohei = Db :: table ( 'fa_article' ) -> alias ( 'a' ) -> join ([ 'fa_article_comment' => 'b' ], 'a.id=b.vote_id' ) -> where ( 'a.is_solve' , 1 ) -> where ( $where ) -> where ( 'a.category_id' , 149 ) -> count ();
$sos = Db :: table ( 'fa_article' ) -> alias ( 'a' ) -> join ([ 'fa_article_comment' => 'b' ], 'a.id=b.vote_id' ) -> where ( 'a.is_solve' , 1 ) -> where ( $where ) -> where ( 'a.category_id' , 150 ) -> count ();
$one_shuqiu = Db :: table ( 'fa_article' ) -> alias ( 'a' ) -> join ([ 'fa_article_comment' => 'b' ], 'a.id=b.vote_id' ) -> where ( 'a.is_solve' , 1 ) -> where ( $where ) -> where ( 'a.category_id' , 165 ) -> count ();
2023-02-09 11:14:12 +08:00
$notice = Db :: table ( 'cms_notice' ) -> where ( 'status' , 1 ) -> where ( 'is_read' , 0 ) -> count ();
2023-01-18 17:10:33 +08:00
$select = [
'yishi' => $yishi ,
'maodun' => $maodun ,
'xiejiao' => $xiejiao ,
'saohei' => $saohei ,
'sos' => $sos ,
'shuqiu' => $one_shuqiu ,
2023-02-09 11:14:12 +08:00
'notice' => $notice ,
2023-01-18 17:10:33 +08:00
];
return $this -> apiSuccess ( 'ok' , $select );
}
public function indexs ( $search = '' , $category_id = 1 , $page = 1 , $is_time = 0 , $category_type = 0 )
{
$param = get_params ();
$screen = $param [ 'screen' ] ? ? 1 ;
$solve = $param [ 'solve' ] ? ? 1 ;
$order = $param [ 'order' ] ? ? 1 ;
2023-01-31 11:26:07 +08:00
// $model = Db::table('fa_article');
2023-01-18 17:10:33 +08:00
$where = [
[ 'status' , '=' , 1 ],
[ 'category_id' , '=' , $category_id ]
];
//查询升降序
if ( $order == 1 ){
$orders = 'desc' ;
} else {
$orders = 'asc' ;
}
if ( ! $category_id ) {
unset ( $where [ 1 ]);
}
2023-01-31 11:40:32 +08:00
//根据个人村id进行查询
if ( JWT_UID ) {
$find = Db :: table ( 'fa_szxc_information_useraddress' ) -> where ( 'user_id' , JWT_UID ) -> find ();
2023-02-11 15:25:16 +08:00
// if ($find) {
// if ($find['auth_range']==1){
// $where[] = ['village', '=', $find['village_id']];
// }elseif ($find['auth_range']==2){
// $where[] = ['township', '=', $find['street_id']];
// }elseif ($find['auth_range']==3){
// $where[] = ['county', '=', $find['area_id']];
// }
// }
2023-02-01 11:30:54 +08:00
// 登录返回村名和村地址
$cun_arr [ 'cun_name' ] = Db :: table ( 'fa_geo_village' ) -> where ( 'village_id' , $find [ 'village_id' ]) -> value ( 'village_name' );
$cun_arr [ 'cun_address' ] = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , JWT_UID ) -> value ( 'address_name' );
} else {
$cun_arr = [];
2023-01-18 17:10:33 +08:00
}
2023-02-11 15:06:55 +08:00
if ( isset ( $param [ 'street_id' ]) && ! empty ( $param [ 'street_id' ])){
$where [] = [ 'township' , '=' , $param [ 'street_id' ]];
}
if ( isset ( $param [ 'village_id' ]) && ! empty ( $param [ 'village_id' ])){
$where [] = [ 'village' , '=' , $param [ 'village_id' ]];
}
2023-01-31 11:40:32 +08:00
2023-01-18 17:10:33 +08:00
//总条数
2023-01-31 11:26:07 +08:00
$count = Db :: table ( 'fa_article' ) -> where ( $where ) -> count ();
2023-01-18 17:10:33 +08:00
//当月条数
2023-01-31 11:26:07 +08:00
$month_count = Db :: table ( 'fa_article' ) -> where ( $where ) -> whereMonth ( 'view_time' ) -> count ();
2023-01-18 17:10:33 +08:00
if ( $search != '' ) {
$where [] = [ 'title' , 'like' , '%' . $search . '%' ];
}
if ( $category_type != 0 ) {
$where [] = [ 'category_type' , '=' , $category_type ];
}
//判断筛选查询
if ( $screen == 2 ){
foreach ( $where as $key => $value ){
$where [ $key ][ 0 ] = 'a.' . $value [ 0 ];
}
//查询
$select = Db :: table ( 'fa_article' ) -> where ( $where ) -> page ( $page ) -> limit ( 20 )
-> alias ( 'a' )
2023-02-02 14:49:06 +08:00
-> join ([ 'fa_article_vote_side_tables' => 'avst' ], " a.id = avst.article_id and avst.end_time >= " . date ( 'Y-m-d' ))
2023-01-18 17:10:33 +08:00
-> field ( 'a.id,a.title,a.describe,a.user_id,a.view,a.view_time,a.image,a.end_time,a.is_solve,a.is_vote,a.is_nickname,a.video,a.category_type,avst.end_time as die_time' )
-> order ( 'a.id DESC' )
-> select () -> toArray ();
} else if ( $screen == 3 ){
foreach ( $where as $key => $value ){
$where [ $key ][ 0 ] = 'a.' . $value [ 0 ];
}
//查询
$select = Db :: table ( 'fa_article' ) -> where ( $where ) -> page ( $page ) -> limit ( 20 )
-> alias ( 'a' )
2023-02-02 14:49:06 +08:00
-> join ([ 'fa_article_vote_side_tables' => 'avst' ], " a.id = avst.article_id and avst.end_time <= " . date ( 'Y-m-d' ))
2023-01-18 17:10:33 +08:00
-> field ( 'a.id,a.title,a.describe,a.user_id,a.view,a.view_time,a.image,a.end_time,a.is_solve,a.is_vote,a.is_nickname,a.video,a.category_type,avst.end_time as die_time' )
-> order ( 'a.id DESC' ) -> select () -> toArray ();
} else {
//查询是否解决
if ( $solve == 2 ){
$where [] = [ 'is_solve' , '=' , 0 ];
} else if ( $solve == 3 ){
$where [] = [ 'is_solve' , '=' , 1 ];
}
2023-01-31 11:26:07 +08:00
$select = Db :: table ( 'fa_article' ) -> with ( 'user' ) -> where ( $where ) -> page ( $page ) -> limit ( 20 )
2023-01-18 17:10:33 +08:00
-> field ( 'id,title,user_id,view,view_time,image,end_time,is_solve,is_vote,is_nickname,video,category_type,describe' )
-> order ( 'id' , $orders ) -> select () -> toArray ();
}
foreach ( $select as $key => $value ) {
if ( $value [ 'is_nickname' ] == 1 ) {
$select [ $key ][ 'nickname' ] = " 匿名人员 " ;
$select [ $key ][ 'avatar' ] = " " ;
$select [ $key ][ 'user_id' ] = 0 ;
} else {
$select [ $key ][ 'nickname' ] = Db :: table ( 'fa_szxc_information_usermsg' ) -> where ( 'user_id' , $value [ 'user_id' ]) -> value ( 'name' );
}
//投票处理
if ( $value [ 'is_vote' ] == 1 ) {
$article_vote = Db :: table ( 'fa_article_vote_side_tables' ) -> where ( 'article_id' , $value [ 'id' ]) -> find ();
if ( $article_vote ) {
$data = $article_vote ;
$data [ 'agree_percentage' ] = 0 ;
$data [ 'opposition_percentage' ] = 0 ;
$count_vote = $data [ 'agree' ] + $data [ 'opposition' ] + $data [ 'other' ];
if ( $count_vote != 0 ) {
if ( $data [ 'agree' ] != 0 ) {
$data [ 'agree_percentage' ] = round (( $data [ 'agree' ] / $count_vote ) * 100 );
}
if ( $data [ 'opposition' ] != 0 ) {
$data [ 'opposition_percentage' ] = round (( $data [ 'opposition' ] / $count_vote ) * 100 );
}
}
$select [ $key ][ 'extend' ][ 'vote' ] = $data ;
}
} else {
$select [ $key ][ 'extend' ] = [];
}
if ( $is_time == 1 ) {
if ( $value [ 'end_time' ] < date ( 'Y-m-d H:i:s' )) {
if ( $value [ 'end_time' ] == '0000-00-00 00:00:00' ) {
$select [ $key ][ 'overdue_time' ] = '显示错误' ;
} else {
if ( $value [ 'is_solve' ] == 1 ){
$select [ $key ][ 'overdue_time' ] = 0 ;
} else {
$cle = time () - strtotime ( $value [ 'end_time' ]);
$select [ $key ][ 'overdue_time' ] = ceil ( $cle / 3600 / 24 );
}
}
} else {
$select [ $key ][ 'overdue_time' ] = 0 ;
}
}
if ( $category_id == 165 ) {
if ( $value [ 'category_type' ] != 0 ) {
$find = Db :: table ( 'fa_category' ) -> where ( 'id' , $value [ 'category_type' ]) -> find ();
$select [ $key ][ 'extend' ][ 'category_type_name' ] = $find ? $find [ 'name' ] . ': ' : '' ;
} else {
$select [ $key ][ 'extend' ][ 'category_type_name' ] = '' ;
}
}
}
2023-02-01 11:30:54 +08:00
$this -> apiSuccess ( 'ok' , [ 'list' => $select , 'cun' => $cun_arr , 'count' => [ 'count' => $count , 'month_count' => $month_count ]]);
2023-01-18 17:10:33 +08:00
}
}