|
|
<?php
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | Description: 公告
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | Author: Michael_xu | gengxiaoxu@5kcrm.com
|
|
|
// +----------------------------------------------------------------------
|
|
|
namespace app\oa\model;
|
|
|
|
|
|
use think\Db;
|
|
|
use app\admin\model\Common;
|
|
|
use app\admin\model\Message;
|
|
|
use think\Request;
|
|
|
use think\Validate;
|
|
|
use think\helper\Time;
|
|
|
|
|
|
class Announcement extends Common
|
|
|
{
|
|
|
/**
|
|
|
* 为了数据库的整洁,同时又不影响Model和Controller的名称
|
|
|
* 我们约定每个模块的数据表都加上相同的前缀,比如CRM模块用crm作为数据表前缀
|
|
|
*/
|
|
|
protected $name = 'oa_announcement';
|
|
|
protected $createTime = 'create_time';
|
|
|
protected $updateTime = 'update_time';
|
|
|
protected $autoWriteTimestamp = true;
|
|
|
|
|
|
//类型转换
|
|
|
protected $dateFormat = 'Y-m-d H:i:s';
|
|
|
protected $type = [
|
|
|
'create_time' => 'timestamp',
|
|
|
];
|
|
|
|
|
|
/**
|
|
|
* [getDataList 公告list]
|
|
|
* @author Michael_xu
|
|
|
* @param [by] $by [查询时间段类型]
|
|
|
* @return
|
|
|
*/
|
|
|
public function getDataList($request)
|
|
|
{
|
|
|
$userModel = new \app\admin\model\User();
|
|
|
$structureModel = new \app\admin\model\Structure();
|
|
|
|
|
|
$search = $request['search'];
|
|
|
$user_id = $request['user_id'];
|
|
|
unset($request['search']);
|
|
|
unset($request['user_id']);
|
|
|
|
|
|
$request = $this->fmtRequest( $request );
|
|
|
$requestMap = $request['map'] ? : [];
|
|
|
|
|
|
$time = strtotime(date('Y-m-d',time()));
|
|
|
$map = array();
|
|
|
if ($requestMap['type'] && $requestMap['type'] == 1) {
|
|
|
$time = 'end_time >= '.$time.' AND start_time <= '.time().' AND ';
|
|
|
} elseif ($requestMap['type'] && $requestMap['type'] == 2) {
|
|
|
$time = 'end_time < '.$time.' AND ';
|
|
|
} else {
|
|
|
$time = '';
|
|
|
}
|
|
|
$userDet = $userModel->getUserById($user_id);
|
|
|
|
|
|
$list = Db::name('OaAnnouncement')
|
|
|
->alias('announcement')
|
|
|
->where($time.' ( owner_user_ids LIKE "%,'.$userDet['id'].',%" OR structure_ids LIKE "%,'.$userDet['structure_id'].',%" OR create_user_id = '.$user_id.' OR (owner_user_ids = "" AND structure_ids = ""))')
|
|
|
->where($map)
|
|
|
->join('__ADMIN_USER__ user', 'user.id = announcement.create_user_id', 'LEFT')
|
|
|
->page($request['page'], $request['limit'])
|
|
|
->field('announcement.*,user.realname,user.thumb_img')
|
|
|
->order('announcement.create_time desc')
|
|
|
->select();
|
|
|
$adminTypes = adminGroupTypes($user_id);
|
|
|
foreach ($list as $k=>$v) {
|
|
|
$list[$k]['thumb_img'] = $v['thumb_img'] ? getFullPath($v['thumb_img']) : '';
|
|
|
$list[$k]['structureList'] = $structureModel->getDataByStr($v['structure_ids']) ? : array();
|
|
|
$list[$k]['ownerList'] = $userModel->getDataByStr($v['owner_user_ids']) ? : array();
|
|
|
}
|
|
|
|
|
|
$dataCount = Db::name('OaAnnouncement')->alias('announcement')
|
|
|
->where(''.$time.' ( owner_user_ids LIKE "%,'.$userDet['id'].',%" OR structure_ids LIKE "%,'.$userDet['structure_id'].',%" OR create_user_id = '.$user_id.')')
|
|
|
->count();
|
|
|
$data = [];
|
|
|
$data['list'] = $list;
|
|
|
$data['dataCount'] = $dataCount ? : 0;
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 创建公告信息
|
|
|
* @author Michael_xu
|
|
|
* @param
|
|
|
* @return
|
|
|
*/
|
|
|
public function createData($param)
|
|
|
{
|
|
|
//不选择通知人,则默认为全部
|
|
|
$param['structure_ids'] = arrayToString($param['owner_structure_ids']) ? : '';
|
|
|
unset($param['owner_structure_ids']);
|
|
|
$param['owner_user_ids'] = arrayToString($param['owner_user_ids']) ? : '';
|
|
|
|
|
|
if ($this->allowField(true)->save($param)) {
|
|
|
$data = $param;
|
|
|
$data['announcement_id'] = $this->announcement_id;
|
|
|
$userModel = new \app\admin\model\User();
|
|
|
$structureModel = new \app\admin\model\Structure();
|
|
|
$data['ownerList'] = $param['owner_user_ids'] ? $userModel->getDataByStr($param['owner_user_ids']) : array();
|
|
|
$data['structureList'] = $param['structure_ids'] ? $structureModel->getDataByStr($param['structure_ids']) : array();
|
|
|
//操作记录
|
|
|
actionLog($this->announcement_id,$param['owner_user_ids'],$param['structure_ids'],'创建了公告');
|
|
|
//发送站内信
|
|
|
$send_user_id = [];
|
|
|
$send_structure_ids = $param['structure_ids'] ? $userModel->getSubUserByStr(stringToArray($param['structure_ids'])) : [];
|
|
|
$send_user_ids = stringToArray($param['owner_user_ids']) ? : [];
|
|
|
if ($send_structure_ids && $send_user_ids) {
|
|
|
$send_user_id = array_merge($send_structure_ids, $send_user_ids);
|
|
|
} elseif ($send_structure_ids) {
|
|
|
$send_user_id = $send_structure_ids;
|
|
|
} elseif ($send_user_ids) {
|
|
|
$send_user_id = $send_user_ids;
|
|
|
} else {
|
|
|
$send_user_id = getSubUserId(true, 1);
|
|
|
}
|
|
|
if ($send_user_id) {
|
|
|
// 发送消息
|
|
|
(new Message())->send(
|
|
|
Message::NOTICE_MESSAGE,
|
|
|
[
|
|
|
'title' => $param['title'],
|
|
|
'action_id' => $this->announcement_id
|
|
|
],
|
|
|
$send_user_id
|
|
|
);
|
|
|
}
|
|
|
return $data;
|
|
|
} else {
|
|
|
$this->error = '添加失败';
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 编辑公告信息
|
|
|
* @author Michael_xu
|
|
|
* @param
|
|
|
* @return
|
|
|
*/
|
|
|
public function updateDataById($param, $announcement_id = '')
|
|
|
{
|
|
|
$dataInfo = $this->getDataById($announcement_id);
|
|
|
if (!$dataInfo) {
|
|
|
$this->error = '数据不存在或已删除';
|
|
|
return false;
|
|
|
}
|
|
|
//不选择通知人,则默认为全部
|
|
|
$param['structure_ids'] = arrayToString($param['owner_structure_ids']) ? : '';
|
|
|
unset($param['owner_structure_ids']);
|
|
|
$param['owner_user_ids'] = arrayToString($param['owner_user_ids']) ? : '';
|
|
|
$param['update_time'] = time();
|
|
|
if ($this->allowField(true)->save($param, ['announcement_id' => $announcement_id])) {
|
|
|
$userModel = new \app\admin\model\User();
|
|
|
$structureModel = new \app\admin\model\Structure();
|
|
|
actionLog($announcement_id, $param['owner_user_ids'], $param['structure_ids'], '编辑了公告');
|
|
|
//发送站内信
|
|
|
$send_user_id = [];
|
|
|
$send_structure_ids = $param['structure_ids'] ? $userModel->getSubUserByStr(stringToArray($param['structure_ids'])) : [];
|
|
|
$send_user_ids = stringToArray($param['owner_user_ids']) ? : [];
|
|
|
if ($send_structure_ids && $send_user_ids) {
|
|
|
$send_user_id = array_merge($send_structure_ids, $send_user_ids);
|
|
|
} elseif ($send_structure_ids) {
|
|
|
$send_user_id = $send_structure_ids;
|
|
|
} elseif ($send_user_ids) {
|
|
|
$send_user_id = $send_user_ids;
|
|
|
} else {
|
|
|
$send_user_id = getSubUserId(true, 1);
|
|
|
}
|
|
|
$createUserInfo = $userModel->getUserById($param['create_user_id']);
|
|
|
$sendContent = $createUserInfo['realname'].'修改了公告《'.$param['title'].'》,请及时查看';
|
|
|
if ($send_user_id) {
|
|
|
sendMessage($send_user_id, $sendContent, $announcement_id, 1);
|
|
|
}
|
|
|
$data = [];
|
|
|
$data['announcement_id'] = $announcement_id;
|
|
|
return $data;
|
|
|
} else {
|
|
|
$this->error = '编辑失败';
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 公告数据
|
|
|
* @param $id 公告ID
|
|
|
* @return
|
|
|
*/
|
|
|
public function getDataById($announcement_id = '')
|
|
|
{
|
|
|
$map['announcement_id'] = $announcement_id;
|
|
|
$dataInfo = Db::name('OaAnnouncement')->where($map)->find();
|
|
|
|
|
|
if (!$dataInfo) {
|
|
|
$this->error = '数据已删除';
|
|
|
return false;
|
|
|
}
|
|
|
$userModel = new \app\admin\model\User();
|
|
|
$dataInfo['create_user_info'] = $userModel->getUserById($dataInfo['create_user_id']);
|
|
|
$dataInfo['create_time'] = $dataInfo['create_time']?date('Y-m-d H:i:s',$dataInfo['create_time']):null;
|
|
|
$structureModel = new \app\admin\model\Structure();
|
|
|
$dataInfo['structureList'] = $structureModel->getDataByStr($dataInfo['structure_ids'])?:array();
|
|
|
$dataInfo['announcement_id'] = $announcement_id;
|
|
|
return $dataInfo;
|
|
|
}
|
|
|
|
|
|
//删除公告
|
|
|
public function delDataById($param)
|
|
|
{
|
|
|
$dataInfo = $this->getDataById($param['announcement_id']);
|
|
|
if (!$dataInfo) {
|
|
|
$this->error = '数据不存在或已删除';
|
|
|
return false;
|
|
|
}
|
|
|
$map['announcement_id'] = $param['announcement_id'];
|
|
|
$flag = $this->where($map)->delete();
|
|
|
if ($flag) {
|
|
|
actionLog($param['announcement_id'],$dataInfo['owner_user_ids'],$dataInfo['structure_ids'],'删除了公告');
|
|
|
return true;
|
|
|
} else {
|
|
|
$this->error = '删除失败';
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
} |