You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/application/models/infotasks_model.php

458 lines
13 KiB
PHP

<?php
class Infotasks_model extends CI_Model
{
var $insert_id = -1;
var $top_num=false;
var $t_id=false;
var $order_by = false;
var $t_status = false;
var $t_ht_op_code = false;
var $t_a_id = false;
var $t_td_type = false;
var $t_datetime = false;
var $t_title = false;
function __construct()
{
parent::__construct();
$this->HT = $this->load->database('HT', TRUE);
}
function init()
{
$this->top_num=false;
$this->t_id=false;
$this->order_by=" ORDER BY t.t_id DESC ";
$this->t_status=false;
$this->t_a_id=false;
$this->t_td_type=false;
$this->t_title = false;
}
//正在编辑的任务
function in_edit($t_ht_op_code=false)
{
$this->init();
if(!empty($t_ht_op_code))
{
if(is_numeric($t_ht_op_code))
{
$this->t_a_id=" AND t.t_a_id= ".$this->HT->escape($t_ht_op_code);
}
else
{
$this->t_ht_op_code=" AND t.t_ht_op_code=".$this->HT->escape($t_ht_op_code);
}
}
$this->t_status=" AND t.t_status= 'edit' ";
return $this->get_list();
}
//待审核任务
function in_review($t_ht_op_code=false)
{
$this->init();
if(!empty($t_ht_op_code))
{
if(is_numeric($t_ht_op_code))
{
$this->t_a_id=" AND t.t_a_id= ".$this->HT->escape($t_ht_op_code);
}
else
{
$this->t_ht_op_code=" AND t.t_ht_op_code=".$this->HT->escape($t_ht_op_code);
}
}
$this->t_status=" AND t.t_status= 'review' ";
return $this->get_list();
}
//待结算任务
function in_reviewed($t_ht_op_code=false,$t_a_id=false,$t_td_type=false,$start_date=false,$end_date=false)
{
$this->init();
if(!empty($t_ht_op_code))
{
if(is_numeric($t_ht_op_code))
{
$this->t_a_id=" AND t.t_a_id= ".$this->HT->escape($t_ht_op_code);
}
else
{
$this->t_ht_op_code=" AND t.t_ht_op_code=".$this->HT->escape($t_ht_op_code);
}
}
if($t_a_id)$this->t_a_id=" AND t.t_a_id = $t_a_id ";
if($t_td_type)$this->t_td_type=" AND t.t_td_type = '$t_td_type' ";
$this->t_status=" AND t.t_status = 'reviewed' ";
if($start_date) $this->t_datetime = " AND t.t_datetime BETWEEN '$start_date' AND '$end_date' ";
return $this->get_list();
}
//已完成任务
function in_complete($t_ht_op_code=false)
{
$this->init();
if(!empty($t_ht_op_code))
{
if(is_numeric($t_ht_op_code))
{
$this->t_a_id=" AND t.t_a_id= ".$this->HT->escape($t_ht_op_code);
}
else
{
$this->t_ht_op_code=" AND t.t_ht_op_code=".$this->HT->escape($t_ht_op_code);
}
}
$this->t_status=" AND (t.t_status= 'complete' OR t.t_status= 'published')";
return $this->get_list();
}
//待审核投稿
function in_wait($t_ht_op_code=false)
{
$this->init();
if(!empty($t_ht_op_code))
{
if(is_numeric($t_ht_op_code))
{
$this->t_a_id=" AND t.t_a_id= ".$this->HT->escape($t_ht_op_code);
}
else
{
$this->t_ht_op_code=" AND t.t_ht_op_code=".$this->HT->escape($t_ht_op_code);
}
}
$this->t_status=" AND t.t_status= 'wait' ";
return $this->get_list();
}
//大厅任务
function in_hall()
{
$this->init();
$this->t_a_id=" AND t.t_a_id= 0 ";
return $this->get_list();
}
//获取单个任务详细信息
function detail($t_id)
{
$this->init();
$this->top_num=1;
$this->t_id=" AND t.t_id=".$this->HT->escape($t_id);
return $this->get_list();
}
function get_list($page_flag=false)
{
$this->top_num ? $sql = "SELECT TOP " . $this->top_num : $sql = "SELECT ";
$sql .= " t.t_id, \n"
. " t.t_title, \n"
. " t.t_content, \n"
. " t.t_status, \n"
. " t.t_a_id, \n"
. " t.t_ht_op_code, \n"
. " t.t_td_type, \n"
. " t.t_expires, \n"
. " t.t_datetime, \n"
. " t.t_rating_total, \n"
. " t.t_active_author, \n"
. " t.t_attach, \n"
. " t.t_rating, \n"
. " t.t_delete \n"
. "FROM infotasks t \n"
. "WHERE t.t_delete = 0 \n";
if($page_flag)$sql="SELECT t.t_id FROM infotasks t WHERE t.t_delete = 0";
$this->t_id ? $sql.=$this->t_id : false;
$this->t_status ? $sql.=$this->t_status : false;
$this->t_ht_op_code ? $sql.=$this->t_ht_op_code : false;
$this->t_td_type ? $sql.=$this->t_td_type : false;
$this->t_a_id ? $sql.=$this->t_a_id : false;
$this->t_title ? $sql.=$this->t_title : false;
$this->t_datetime? $sql.=$this->t_datetime : false;
$this->order_by ? $sql.=$this->order_by : false;
$query=$this->HT->query($sql);
if($this->top_num==1)
{
if ($query->num_rows() > 0)
{
$row = $query->row();
return $row;
}
else
{
return FALSE;
}
}
else
{
return $query->result();
}
}
//写入
function add($t_title, $t_content, $t_a_id, $t_ht_op_code, $t_td_type, $t_expires,$t_sitecode='cht')
{
$sql = "INSERT INTO infotasks \n"
. " ( \n"
. " t_title, \n"
. " t_content, \n"
. " t_a_id, \n"
. " t_ht_op_code, \n"
. " t_td_type, \n"
. " t_expires, \n"
. " t_sitecode, \n"
. " t_status, \n"
. " t_delete, \n"
. " t_datetime \n"
. " ) \n"
. "VALUES \n"
. " ( \n"
. " N?,N?,?,?,?,?,?,'edit',0,GETDATE() \n"
. " )";
$query=$this->HT->query($sql, array($t_title, $t_content, $t_a_id, $t_ht_op_code, $t_td_type, $t_expires,$t_sitecode));
$this->insert_id = $this->HT->last_id('infotasks');
return $query;
//print_r($this->HT->queries);
}
//更新
function update($t_id,$t_title, $t_content, $t_a_id, $t_td_type, $t_expires)
{
$sql = "UPDATE infotasks \n"
. "SET t_title = N?, \n"
. " t_content = N?, \n"
. " t_a_id = ?, \n"
. " t_td_type = ?, \n"
. " t_expires = ?, \n"
. " t_datetime = GETDATE() \n"
. "WHERE t_id = ?";
$query=$this->HT->query($sql, array($t_title, $t_content, $t_a_id, $t_td_type, $t_expires,$t_id));
return $query;
//print_r($this->HT->queries);
}
//删除
function delete($t_id)
{
$sql = "UPDATE infotasks \n"
. "SET t_delete = 1 \n"
. "WHERE t_id = ?";
$query=$this->HT->query($sql, array($t_id));
return $query;
}
//审核
function reviwed($t_id,$t_status,$t_rating='',$t_rating_total='')
{
$sql = "UPDATE infotasks \n"
. "SET t_status = ?, t_rating=?, t_rating_total=? \n"
. "WHERE t_id = ?";
$query=$this->HT->query($sql, array($t_status,$t_rating,$t_rating_total,$t_id));
return $query;
}
//承接任务
function undertake($t_id,$a_id)
{
$sql = "UPDATE infotasks \n"
. "SET t_a_id = ? \n"
. "WHERE t_id = ?";
$query=$this->HT->query($sql, array($a_id,$t_id));
return $query;
}
//取消任务
function canceltake($t_id)
{
$sql = "UPDATE infotasks \n"
. "SET t_a_id = 0 \n"
. "WHERE t_id = ?";
$query=$this->HT->query($sql, array($t_id));
return $query;
}
//根据不同状态获取任务列表
public function get_tasks_list($t_status=false,$t_ht_op_code=false,$t_a_id=false,$t_td_type=false,$start_date=false,$end_date=false,$tasktitle=false,$page_flag=false)
{
$this->init();
if(!empty($t_ht_op_code)){
if(is_numeric($t_ht_op_code)){
$this->t_a_id=" AND t.t_a_id= ".$this->HT->escape($t_ht_op_code);
}else{
$this->t_ht_op_code=" AND t.t_ht_op_code=".$this->HT->escape($t_ht_op_code);
}
}
//已发布的和已完成的任务计算在已完成的任务里
if($t_status=='complete')
{
$this->t_status = " AND (t.t_status= 'complete' OR t.t_status= 'published') ";
}elseif ($t_status=='edit') {
$this->t_status = " AND (t.t_status= 'edit' OR t.t_status= 'unreviewed') ";
}
else if($t_status)
{
$this->t_status = " AND t.t_status = '$t_status' ";
}
if($t_a_id=='-1'){
$this->t_a_id = " AND t.t_a_id = '' ";
}elseif ($t_a_id) {
$this->t_a_id = " AND t.t_a_id = $t_a_id ";
}
if($t_td_type) $this->t_td_type = " AND t.t_td_type = '$t_td_type' ";
if($tasktitle) $this->t_title = " AND t.t_title like '%$tasktitle%' ";
if($start_date) $this->t_datetime = " AND t.t_datetime BETWEEN '$start_date' AND '$end_date' ";
return $this->get_list($page_flag);
}
//根据给定id字符串获取任务列表
function get_list_by_taskids($taskids,$order=false)
{
$ordermap=" ORDER BY t.t_datetime DESC ";
if ($order) {
$ordermap=" ORDER BY t.t_rating_total DESC,t.t_datetime DESC ";
}
$sql = "SELECT t.t_id,
t.t_title,
t.t_content,
t.t_status,
t.t_a_id,
t.t_ht_op_code,
t.t_td_type,
t.t_expires,
t.t_datetime,
t.t_rating,
t.t_rating_total,
t.t_delete,
(select top 1 count(0) from infoTaskArticles where ta_t_id=t.t_id AND ta_status='version') as t_edit_count
FROM infotasks t
WHERE t.t_id IN ($taskids)
$ordermap";
$query=$this->HT->query($sql);
return $query->result();
}
//评选最活跃作者
function set_active_author($t_id,$t_active_author,$ta_id)
{
//设置活跃作者标识
$sql = "UPDATE infotasks \n"
. "SET t_active_author = ? \n"
. "WHERE t_id = ?";
$query=$this->HT->query($sql, array($t_active_author, $t_id));
//给活跃作者添加奖励
if ($query) {
$sql = "UPDATE infotaskarticles \n"
. "SET ta_charge = ta_charge+150 \n"
. "WHERE ta_id = ?";
$query2= $this->HT->query($sql,array($ta_id));
return $query2;
}else{
return false;
}
}
//获取作者总字数排行榜
public function get_author_count(){
$sql="SELECT t_id,t_a_id,(SELECT top 1 ta_count FROM infotaskarticles WHERE ta_t_id=t_id order by ta_datetime desc) as ta_count,(SELECT top 1 ta_id FROM infotaskarticles WHERE ta_t_id=t_id order by ta_datetime desc) as ta_id FROM infotasks WHERE t_status = 'reviewed'";
$query= $this->HT->query($sql);
$result=$query->result();
$rank=array();
$rank_author=array();
$active_author=array();
foreach ($result as $item) {
if(!isset($rank_author[$item->t_a_id]))$rank_author[$item->t_a_id]=$item;
if(!isset($rank[$item->t_a_id]))$rank[$item->t_a_id]=0;
$rank[$item->t_a_id]+=$item->ta_count;
}
//获取第一名的数据
arsort($rank);
foreach ($rank as $key => $v) {
$active_author['author_num']=count($rank);
$active_author['count']=$v;
$active_author['task_id']=$rank_author[$key]->t_id;
$active_author['ta_id']=$rank_author[$key]->ta_id;
$active_author['t_a_id']=$key;
break;
}
return $active_author;
}
//查询是否已设置当月活跃作者
public function is_active_author(){
$datetime=date('Y-m-01');
$sql="SELECT TOP 1 t_active_author FROM infotasks WHERE t_active_author>'$datetime'";
$query=$this->HT->query($sql);
$result=$query->result();
if (!empty($result)) {
return 1;
}
return 0;
}
public function get_tasks_rank($top=5){
$sql=" SELECT TOP $top * FROM infotasks
WHERE t_status='reviewed'
ORDER BY t_rating_total DESC";
$query=$this->HT->query($sql);
$result=$query->result();
return $result;
}
//获取不同任务状态的任务数量
public function get_task_count_by_status(){
$admin_info = $this->session->userdata('session_admin');
$t_ht_op_code=$admin_info['OPI_Code'];
if(is_numeric($t_ht_op_code)){
$map=" t_a_id= ".$this->HT->escape($t_ht_op_code);
}else{
$map=" t_ht_op_code=".$this->HT->escape($t_ht_op_code);
}
$sql="SELECT t_status, count(0) as task_count FROM infotasks WHERE $map AND t_delete=0 group by t_status";
$query=$this->HT->query($sql);
$result=$query->result();
$counts=array();
if (!empty($result)) {
foreach ($result as $v) {
$counts[$v->t_status]=$v->task_count;
}
//已完成数量=完成数量+已发布的数量
$complete_count=$published_count=0;
if(isset($counts['complete']))$complete_count=$counts['complete'];
if(isset($counts['published']))$published_count=$counts['published'];
$counts['complete']=$complete_count+$published_count;
//正在进行中的任务=edit+unreviewed的数量
$edit_count=$unreviewed_count=0;
if(isset($counts['edit']))$edit_count=$counts['edit'];
if(isset($counts['unreviewed']))$unreviewed_count=$counts['unreviewed'];
$counts['edit']=$edit_count+$unreviewed_count;
return $counts;
}
return false;
}
//判断任务是否已上线
public function is_in_used($ta_id){
$sql="SELECT TOP 1 t_status,ic_status
FROM infoTaskArticles
INNER JOIN infoContents ON ic_id=ta_ic_id
LEFT JOIN infotasks ON t_id=ta_t_id
WHERE ta_id=?";
$query=$this->HT->query($sql, array($ta_id));
$result=$query->result();
if (empty($result)) {
return 0;
}else{
$result=$result[0];
//信息平台和作者平台同时是发布状态时
if ($result->t_status=='complete' AND $result->ic_status==1) {
return 1;
}else{
return 0;
}
}
}
}