Announcement.php 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Description: 公告
  4. // +----------------------------------------------------------------------
  5. // | Author: Michael_xu | gengxiaoxu@5kcrm.com
  6. // +----------------------------------------------------------------------
  7. namespace app\oa\model;
  8. use think\Db;
  9. use app\admin\model\Common;
  10. use app\admin\model\Message;
  11. use think\Request;
  12. use think\Validate;
  13. use think\helper\Time;
  14. class Announcement extends Common
  15. {
  16. /**
  17. * 为了数据库的整洁,同时又不影响Model和Controller的名称
  18. * 我们约定每个模块的数据表都加上相同的前缀,比如CRM模块用crm作为数据表前缀
  19. */
  20. protected $name = 'oa_announcement';
  21. protected $createTime = 'create_time';
  22. protected $updateTime = 'update_time';
  23. protected $autoWriteTimestamp = true;
  24. //类型转换
  25. protected $dateFormat = 'Y-m-d H:i:s';
  26. protected $type = [
  27. 'create_time' => 'timestamp',
  28. ];
  29. /**
  30. * [getDataList 公告list]
  31. * @author Michael_xu
  32. * @param [by] $by [查询时间段类型]
  33. * @return
  34. */
  35. public function getDataList($request)
  36. {
  37. $userModel = new \app\admin\model\User();
  38. $structureModel = new \app\admin\model\Structure();
  39. $search = $request['search'];
  40. $user_id = $request['user_id'];
  41. unset($request['search']);
  42. unset($request['user_id']);
  43. $request = $this->fmtRequest( $request );
  44. $requestMap = $request['map'] ? : [];
  45. $time = strtotime(date('Y-m-d',time()));
  46. $map = array();
  47. if ($requestMap['type'] && $requestMap['type'] == 1) {
  48. $time = 'end_time >= '.$time.' AND start_time <= '.time().' AND ';
  49. } elseif ($requestMap['type'] && $requestMap['type'] == 2) {
  50. $time = 'end_time < '.$time.' AND ';
  51. } else {
  52. $time = '';
  53. }
  54. $userDet = $userModel->getUserById($user_id);
  55. $list = Db::name('OaAnnouncement')
  56. ->alias('announcement')
  57. ->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 = ""))')
  58. ->where($map)
  59. ->join('__ADMIN_USER__ user', 'user.id = announcement.create_user_id', 'LEFT')
  60. ->page($request['page'], $request['limit'])
  61. ->field('announcement.*,user.realname,user.thumb_img')
  62. ->order('announcement.create_time desc')
  63. ->select();
  64. $adminTypes = adminGroupTypes($user_id);
  65. foreach ($list as $k=>$v) {
  66. $list[$k]['thumb_img'] = $v['thumb_img'] ? getFullPath($v['thumb_img']) : '';
  67. $list[$k]['structureList'] = $structureModel->getDataByStr($v['structure_ids']) ? : array();
  68. $list[$k]['ownerList'] = $userModel->getDataByStr($v['owner_user_ids']) ? : array();
  69. }
  70. $dataCount = Db::name('OaAnnouncement')->alias('announcement')
  71. ->where(''.$time.' ( owner_user_ids LIKE "%,'.$userDet['id'].',%" OR structure_ids LIKE "%,'.$userDet['structure_id'].',%" OR create_user_id = '.$user_id.')')
  72. ->count();
  73. $data = [];
  74. $data['list'] = $list;
  75. $data['dataCount'] = $dataCount ? : 0;
  76. return $data;
  77. }
  78. /**
  79. * 创建公告信息
  80. * @author Michael_xu
  81. * @param
  82. * @return
  83. */
  84. public function createData($param)
  85. {
  86. //不选择通知人,则默认为全部
  87. $param['structure_ids'] = arrayToString($param['owner_structure_ids']) ? : '';
  88. unset($param['owner_structure_ids']);
  89. $param['owner_user_ids'] = arrayToString($param['owner_user_ids']) ? : '';
  90. if ($this->allowField(true)->save($param)) {
  91. $data = $param;
  92. $data['announcement_id'] = $this->announcement_id;
  93. $userModel = new \app\admin\model\User();
  94. $structureModel = new \app\admin\model\Structure();
  95. $data['ownerList'] = $param['owner_user_ids'] ? $userModel->getDataByStr($param['owner_user_ids']) : array();
  96. $data['structureList'] = $param['structure_ids'] ? $structureModel->getDataByStr($param['structure_ids']) : array();
  97. //操作记录
  98. actionLog($this->announcement_id,$param['owner_user_ids'],$param['structure_ids'],'创建了公告');
  99. //发送站内信
  100. $send_user_id = [];
  101. $send_structure_ids = $param['structure_ids'] ? $userModel->getSubUserByStr(stringToArray($param['structure_ids'])) : [];
  102. $send_user_ids = stringToArray($param['owner_user_ids']) ? : [];
  103. if ($send_structure_ids && $send_user_ids) {
  104. $send_user_id = array_merge($send_structure_ids, $send_user_ids);
  105. } elseif ($send_structure_ids) {
  106. $send_user_id = $send_structure_ids;
  107. } elseif ($send_user_ids) {
  108. $send_user_id = $send_user_ids;
  109. } else {
  110. $send_user_id = getSubUserId(true, 1);
  111. }
  112. if ($send_user_id) {
  113. // 发送消息
  114. (new Message())->send(
  115. Message::NOTICE_MESSAGE,
  116. [
  117. 'title' => $param['title'],
  118. 'action_id' => $this->announcement_id
  119. ],
  120. $send_user_id
  121. );
  122. }
  123. return $data;
  124. } else {
  125. $this->error = '添加失败';
  126. return false;
  127. }
  128. }
  129. /**
  130. * 编辑公告信息
  131. * @author Michael_xu
  132. * @param
  133. * @return
  134. */
  135. public function updateDataById($param, $announcement_id = '')
  136. {
  137. $dataInfo = $this->getDataById($announcement_id);
  138. if (!$dataInfo) {
  139. $this->error = '数据不存在或已删除';
  140. return false;
  141. }
  142. //不选择通知人,则默认为全部
  143. $param['structure_ids'] = arrayToString($param['owner_structure_ids']) ? : '';
  144. unset($param['owner_structure_ids']);
  145. $param['owner_user_ids'] = arrayToString($param['owner_user_ids']) ? : '';
  146. $param['update_time'] = time();
  147. if ($this->allowField(true)->save($param, ['announcement_id' => $announcement_id])) {
  148. $userModel = new \app\admin\model\User();
  149. $structureModel = new \app\admin\model\Structure();
  150. actionLog($announcement_id, $param['owner_user_ids'], $param['structure_ids'], '编辑了公告');
  151. //发送站内信
  152. $send_user_id = [];
  153. $send_structure_ids = $param['structure_ids'] ? $userModel->getSubUserByStr(stringToArray($param['structure_ids'])) : [];
  154. $send_user_ids = stringToArray($param['owner_user_ids']) ? : [];
  155. if ($send_structure_ids && $send_user_ids) {
  156. $send_user_id = array_merge($send_structure_ids, $send_user_ids);
  157. } elseif ($send_structure_ids) {
  158. $send_user_id = $send_structure_ids;
  159. } elseif ($send_user_ids) {
  160. $send_user_id = $send_user_ids;
  161. } else {
  162. $send_user_id = getSubUserId(true, 1);
  163. }
  164. $createUserInfo = $userModel->getUserById($param['create_user_id']);
  165. $sendContent = $createUserInfo['realname'].'修改了公告《'.$param['title'].'》,请及时查看';
  166. if ($send_user_id) {
  167. sendMessage($send_user_id, $sendContent, $announcement_id, 1);
  168. }
  169. $data = [];
  170. $data['announcement_id'] = $announcement_id;
  171. return $data;
  172. } else {
  173. $this->error = '编辑失败';
  174. return false;
  175. }
  176. }
  177. /**
  178. * 公告数据
  179. * @param $id 公告ID
  180. * @return
  181. */
  182. public function getDataById($announcement_id = '')
  183. {
  184. $map['announcement_id'] = $announcement_id;
  185. $dataInfo = Db::name('OaAnnouncement')->where($map)->find();
  186. if (!$dataInfo) {
  187. $this->error = '数据已删除';
  188. return false;
  189. }
  190. $userModel = new \app\admin\model\User();
  191. $dataInfo['create_user_info'] = $userModel->getUserById($dataInfo['create_user_id']);
  192. $dataInfo['create_time'] = $dataInfo['create_time']?date('Y-m-d H:i:s',$dataInfo['create_time']):null;
  193. $structureModel = new \app\admin\model\Structure();
  194. $dataInfo['structureList'] = $structureModel->getDataByStr($dataInfo['structure_ids'])?:array();
  195. $dataInfo['announcement_id'] = $announcement_id;
  196. return $dataInfo;
  197. }
  198. //删除公告
  199. public function delDataById($param)
  200. {
  201. $dataInfo = $this->getDataById($param['announcement_id']);
  202. if (!$dataInfo) {
  203. $this->error = '数据不存在或已删除';
  204. return false;
  205. }
  206. $map['announcement_id'] = $param['announcement_id'];
  207. $flag = $this->where($map)->delete();
  208. if ($flag) {
  209. actionLog($param['announcement_id'],$dataInfo['owner_user_ids'],$dataInfo['structure_ids'],'删除了公告');
  210. return true;
  211. } else {
  212. $this->error = '删除失败';
  213. return false;
  214. }
  215. }
  216. }