HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot//douyin.fehss.com/application/oa/model/Event.php
<?php
// +----------------------------------------------------------------------
// | Description: 日程
// +----------------------------------------------------------------------
// | Author:  ming | 1006941410@qq.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 Event extends Common
{
	/**
     * 为了数据库的整洁,同时又不影响Model和Controller的名称
     * 我们约定每个模块的数据表都加上相同的前缀,比如CRM模块用crm作为数据表前缀
     */
	protected $name = 'oa_event';
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';
	protected $autoWriteTimestamp = true;

	//类型转换
	protected $dateFormat = 'Y-m-d H:i:s';
	protected $type = [
        'start_time'  =>  'timestamp',
        'end_time'  =>  'timestamp',
    ];

	/**
     * [getDataList 日程list]
     * @author ming
     * @param     [by]                       $by [查询时间段类型]
     * @return    [array]                    [description]
     */		
	public function getDataList($param)
    {
		$userModel = new \app\admin\model\User();
		$recordModel = new \app\admin\model\Record();

		$user_id = $param['user_id'];
		if ($param['start_time'] && $param['end_time']) {
			$start_time = $param['start_time'];
			$end_time = $param['end_time'];
		} else {
			$start_time = mktime(0,0,0,date('m'),1,date('Y'));
			$end_time = mktime(23,59,59,date('m'),date('t'),date('Y'));
		}
		$where = '( ( start_time BETWEEN '.$start_time.' AND '.$end_time.' ) AND ( create_user_id = '.$user_id.' or owner_user_ids like "%,'.$user_id.',%" ) ) OR ( ( end_time BETWEEN '.$start_time.' AND '.$end_time.' ) AND  ( create_user_id = '.$user_id.' or owner_user_ids like "%,'.$user_id.',%" ) ) OR ( start_time < '.$start_time.' AND end_time > '.$end_time.' AND ( create_user_id = '.$user_id.' or owner_user_ids like "%,'.$user_id.',%" ) )';
		$event_date = Db::name('OaEvent')->where($where)->select();  
	
		foreach ($event_date as $k=>$v) {
			$event_date[$k]['create_user_info'] = $userModel->getUserById($v['create_user_id']);
			$event_date[$k]['ownerList'] = $userModel->getDataByStr($v['owner_user_ids']) ? : [];

			$relationArr= [];
			$relationArr = $recordModel->getListByRelationId('event', $v['event_id']);
			$event_date[$k]['businessList'] = $relationArr['businessList'];
			$event_date[$k]['contactsList'] = $relationArr['contactsList'];
			$event_date[$k]['contractList'] = $relationArr['contractList'];
			$event_date[$k]['customerList'] = $relationArr['customerList'];

			$event_date[$k]['remindtype'] = (int)$v['remindtype'];
			$noticeInfo = Db::name('OaEventNotice')->where(['event_id' => $v['event_id']])->find();
			$is_repeat = 0;
			if ($noticeInfo) {
				$is_repeat = 1;
			}
			$event_date[$k]['is_repeat'] = $is_repeat;
			$event_date[$k]['stop_time'] = $noticeInfo ? $noticeInfo['stop_time'] : '';
			$event_date[$k]['noticetype'] = $noticeInfo ? $noticeInfo['noticetype'] : '';
			if ($noticeInfo['noticetype'] == '2') {
				$event_date[$k]['repeat'] = $noticeInfo['repeated'] ? explode('|||',$noticeInfo['repeated']) : [];
			} else {
				$event_date[$k]['repeat'] =  '';
			}
			//权限
			$is_update = 0;
			$is_delete = 0;
			if ($user_id == $v['create_user_id']) {
				$is_update = 1;
				$is_delete = 1;
			}        
	        $permission['is_update'] = $is_update;
	        $permission['is_delete'] = $is_delete;
	        $event_date[$k]['permission']	= $permission;
		}
        return $event_date ? : [];
    }

	/**
	 * 创建日程信息
	 * @author ming
	 * @param  
	 * @return                            
	 */	
	public function createData($param)
	{	
		$today_time = Time::today();
		$param['start_time'] = $param['start_time'] ? : $today_time[0];
		$param['end_time'] = $param['end_time'] ?$param['end_time'] : $today_time[1];
		$param['create_time'] = time();
		$owner_user_id_list = $param['owner_user_ids'];
		$param['owner_user_ids'] = count($param['owner_user_ids']) ? arrayToString($param['owner_user_ids']) : '';
		$rdata['customer_ids'] = count($param['customer_ids']) ? arrayToString($param['customer_ids']) : ''; 
		$rdata['contacts_ids'] = count($param['contacts_ids']) ? arrayToString($param['contacts_ids']) : ''; 
		$rdata['business_ids'] = count($param['business_ids']) ? arrayToString($param['business_ids']) : ''; 
		$rdata['contract_ids'] = count($param['contract_ids']) ? arrayToString($param['contract_ids']) : '';  
		
		//重复设置
		$repeatData['noticetype'] = $param['noticetype']; //日程类型
		$repeatData['start_time'] = $param['start_time']; // 开始时间
		$repeatData['stop_time'] = $param['stop_time']; // 重复设置截至时间
		$repeat = $param['repeat'] ? implode('|||',$param['repeat']) : '';
		$arr = ['customer_ids','contacts_ids','business_ids','contract_ids','repeat','stop_time','noticetype'];
		foreach ($arr as $value) {
			unset($param[$value]);
		}
		if ($this->allowField(true)->save($param)) {
			$event_id =$this->event_id;
			$rdata['event_id'] = $event_id;
			$rdata['status'] = 1;
			$rdata['create_time'] = time();
			Db::name('OaEventRelation')->insert($rdata);
			//重复设置
			if($param['is_repeat']){
				$repeatData['event_id'] = $event_id; 
				if( $repeatData['noticetype'] == '1' ){ //天
					$repeatData['repeated'] = date("H:i:s",$param['start_time']);
				} else if ( $repeatData['noticetype'] == '2' ) { //周
					$repeatData['repeated'] = $repeat;  //周几
				} else if ( $repeatData['noticetype'] == '3' ) { //月
					$repeatData['repeated'] = date("d H:i:s",$param['start_time']); 
				} else if ( $repeatData['noticetype'] == '4' ) { //年
					$repeatData['repeated'] = date("m-d H:i:s",$param['start_time']); 
				}
				Db::name('OaEventNotice')->insert($repeatData);
			}
			// 站内信
			(new Message())->send(
				Message::EVENT_MESSAGE,
				[
					'title' => $param['title'],
					'action_id' => $event_id
				],
				$owner_user_id_list
			);
			actionLog($event_id ,$param['owner_user_ids'],'','创建了日程'); //
			$data = [];
			$data['event_id'] = $event_id;
			return $data;
		} else {
			$this->error = '添加失败';
			return false;
		}			
	}

	/**
	 * 编辑日程信息
	 * @author ming
	 * @param  
	 * @return                            
	 */	
	public function updateDataById($param, $event_id = '')
	{
		$dataInfo = $this->getDataById($event_id, $param);
		if (!$dataInfo) {
			$this->error = '数据不存在或已删除';
			return false;
		}
		if ($dataInfo['create_user_id'] != $param['user_id']) {
			$this->error = '没有编辑权限';
			return false;
		}
		
		$rdata['customer_ids'] = count($param['customer_ids']) ? arrayToString($param['customer_ids']) : ''; 
		$rdata['contacts_ids'] = count($param['contacts_ids']) ? arrayToString($param['contacts_ids']) : ''; 
		$rdata['business_ids'] = count($param['business_ids']) ? arrayToString($param['business_ids']) : ''; 
		$rdata['contract_ids'] = count($param['contract_ids']) ? arrayToString($param['contract_ids']) : '';  
		$rdata['event_id'] = $event_id;
		
		//重复设置
		$repeatData['noticetype'] = $param['noticetype']; //日程类型
		$repeatData['start_time'] = $param['start_time']; // 开始时间
		$repeatData['stop_time'] = $param['stop_time']; // 重复设置截至时间
		$repeat = $param['repeat'];
		$arr = ['customer_ids','contacts_ids','business_ids','contract_ids','repeat','stop_time','noticetype'];
		foreach ($arr as $value) { 	//过滤不能修改的字段
			unset($param[$value]);
		}
	
		$today_time = Time::today();
		$param['start_time'] = $param['start_time'] ? : $today_time[0];
		$param['end_time'] = $param['end_time'] ?$param['end_time']: $today_time[1];
		$param['create_time'] = time();
		$param['owner_user_ids'] = count($param['owner_user_ids']) ? arrayToString($param['owner_user_ids']) : ''; //参与人
		if ($this->allowField(true)->save($param, ['event_id' => $event_id])) {
			actionLog($event_id, $param['owner_user_ids'], '', '修改了日程');
			if ($param['is_repeat']) {
				$repeatData['event_id'] = $event_id;
				if ($repeatData['noticetype'] == '1') { //天
					$repeatData['repeated'] = date("H:i:s",$param['start_time']); // $param['repeat']; Y-m-d H:i:s
				} elseif ( $repeatData['noticetype'] == '2' ) { //周
					$repeatData['repeated'] = $repeat;  //周几
				} elseif ( $repeatData['noticetype'] == '3' ) { //月
					$repeatData['repeated'] = date("d H:i:s",$param['start_time']); 
				} elseif ( $repeatData['noticetype'] == '4' ) { //年
					$repeatData['repeated'] = date("m-d H:i:s",$param['start_time']); 
				}
				Db::name('OaEventNotice')->where(['event_id' => $event_id])->update($repeatData);
			} else {
				Db::name('OaEventNotice')->where(['event_id' => $event_id])->delete();
			}
			$data = [];
			$data['event_id'] = $event_id;
			Db::name('OaEventRelation')->where(['event_id' => $event_id])->update($rdata);
			
			// 站内信
			(new Message())->send(
				Message::EVENT_MESSAGE,
				[
					'title' => $param['title'],
					'action_id' => $event_id
				],
				array_diff(stringToArray($param['owner_user_ids']), stringToArray($dataInfo['owner_user_ids']))
			);
			return $data;
		} else {
			$this->error = '编辑失败';
			return false;
		}					
	}

	/**
     * 日程数据
     * @param  $id 日程ID
     * @return 
     */	
   	public function getDataById($id = '', $param)
   	{   
   		$recordModel = new \app\admin\model\Record();		
   		$map['event_id'] = $id;
   		$map['create_user_id'] = $param['user_id'];
		$dataInfo = $this->where($map)->find();
		if (!$dataInfo) {
			$this->error = '暂无此数据';
			return false;
		}
		$userModel = new \app\admin\model\User();
	    $dataInfo['ownerList'] = $userModel->getDataByStr($dataInfo['owner_user_ids']);

		$relationArr= [];
		$relationArr = $recordModel->getListByRelationId('event', $id);
		$dataInfo['businessList'] = $relationArr['businessList'];
		$dataInfo['contactsList'] = $relationArr['contactsList'];
		$dataInfo['contractList'] = $relationArr['contractList'];
		$dataInfo['customerList'] = $relationArr['customerList'];
		$dataInfo['event_id'] = $id;
		return $dataInfo;
   	}
	
	//根据ID 删除日程
	public function delDataById($param)
	{
		$dataInfo = $this->get($param['event_id']);
		if(!$dataInfo){
			$this->error = '数据不存在或已删除';
			return false;
		}
		
		if( $dataInfo['create_user_id'] != $param['user_id'] ){
			$this->error = '没有编辑权限';
			return false;
		}
		
		$map['event_id'] = $param['event_id'];
		$map['create_user_id'] = $param['user_id'];
		$flag = $this->where($map)->delete();
		if ($flag) {
			actionLog($param['event_id'],$dataInfo['owner_user_ids'],'','删除了日程');
			return true;
		} else {
			$this->error = '删除失败';
			return false;
		}
	}
}