| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- <?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();
- $structureList=$structureModel->getDataByStr($dataInfo['structure_ids']);
- foreach ($structureList as $key=>$v){
- $structureList[$key]['id']=$v['structure_id'];
- $structureList[$key]['name']=$v['name'];
- }
- $dataInfo['structureList'] = $structureList?:array();
- $dataInfo['ownerUserList'] = $userModel->getDataByStr($dataInfo['owner_user_ids'])?:array();
- $dataInfo['announcement_id'] = $announcement_id;
- $dataInfo['update_time'] =$dataInfo['update_time']? date('Y-m-d H:i:s',$dataInfo['update_time']):null;
- 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;
- }
- }
- }
|