Notices.php 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693
  1. <?php
  2. if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  3. require_once("Aliyunsms.php");
  4. /**
  5. * 消息发送类
  6. * Class Notices
  7. */
  8. class Notices{
  9. private $CI;
  10. private $setting;
  11. private $Aliyunsms;
  12. public $warning_type = array(
  13. "10" => "失陷事件",
  14. "20" => "脆弱性",
  15. "30" => "残余攻击"
  16. );
  17. public $warning_level = array(
  18. "10" => "已失陷",
  19. "20" => "高可疑",
  20. "30" => "低可疑",
  21. "40" => "高危",
  22. "50" => "中危",
  23. "60" => "低危"
  24. );
  25. function __construct()
  26. {
  27. $this->CI = & get_instance();
  28. $this->CI->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));
  29. $this->setting = $this->CI->cache->get('setting');
  30. $this->CI->load->helper(array('sms','date'));
  31. $this->CI->load->library('mailer');
  32. $this->CI->mailer->set_config($this->setting);
  33. $this->CI->load->model("noticeslog_model");
  34. $this->CI->load->model("user_model");
  35. if($this->setting['is_sms'] == "1" && $this->setting['sms_type'] == '20' && $this->setting['product'] =='Dysmsapi'){
  36. $this->Aliyunsms = new Aliyunsms();
  37. }
  38. }
  39. /**
  40. * 生成工单
  41. * @param $workorder
  42. */
  43. public function create_workorder($workorder){
  44. $info = array();
  45. $info['sms_code'] = "OK";
  46. $info['email_code'] = "OK";
  47. if(count($workorder['remark_list'])<1) {
  48. $workorder['remark_list'][0]=array("remark_content"=>"");
  49. }
  50. $receive_user = $this->CI->user_model->get_user_with_user_id($workorder['receive_user_id']);
  51. if($this->setting['is_sms'] && in_array("10",$workorder['send_type'])){
  52. $sms_content = '你有新工单需要处理,工单ID:'.$workorder['workorder_id'].',工单名称:'.$workorder['workorder_name'].',类型:'.$workorder['type'].',备注:'.$workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'];
  53. $notices_log = $this->CI->noticeslog_model->get_model();
  54. $notices_log['log_id'] = $this->create_id();
  55. $notices_log['type'] = "sms";
  56. $notices_log['mobile'] = $receive_user['mobile'];
  57. $notices_log['content'] = $sms_content;
  58. if($this->setting['sms_type'] == '10' ){
  59. if(send_by_modem($this->setting,$receive_user['mobile'],$sms_content)){
  60. $notices_log['status'] = "1";
  61. }else{
  62. $notices_log['status'] = "0";
  63. $info['sms_code'] = "FAILED";
  64. $info['sms_msg'] = "短信发送失败!端口被占用或者配置错误!";
  65. }
  66. }elseif($this->setting['sms_type'] == '20' ){
  67. $sms_content = array(
  68. "workorder_id"=>$workorder['workorder_id'],
  69. "workorder_name"=>mb_strlen($workorder['workorder_name'],'utf-8')<=18?$workorder['workorder_name']:mb_substr($workorder['workorder_name'],0,18,'utf-8')."..",
  70. "workorder_type"=>$workorder['type'],
  71. "remark_content"=>mb_strlen($workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'],'utf-8')<=18?$workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content']:mb_substr($workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'],0,18,'utf-8').".."
  72. );
  73. $resp = $this->Aliyunsms->sendSms($receive_user['mobile'],$this->setting['template_codes'][0],$sms_content);
  74. if($resp['Code'] == 'OK'){
  75. $notices_log['status'] = "1";
  76. }else{
  77. $notices_log['status'] = "0";
  78. $info['sms_code'] = "FAILED";
  79. $info['sms_msg'] = $resp['Message'];
  80. }
  81. }
  82. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  83. $this->CI->noticeslog_model->save_notices_log($notices_log);
  84. }
  85. if($this->setting['is_email'] && in_array("20",$workorder['send_type'])){
  86. $notices_log = $this->CI->noticeslog_model->get_model();
  87. $notices_log['log_id'] = $this->create_id();
  88. $notices_log['type'] = "email";
  89. $notices_log['recipient'] = $receive_user['email'];
  90. $notices_log['subject'] = "系统有新工单请处理,工单ID:".$workorder['workorder_id'];
  91. $email_content = '<div style="font-size:12px;">';
  92. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255);">'.$receive_user['name'].',您好!</p>';
  93. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255); text-indent: 2em;">系统有新工单请处理:</p>';
  94. $email_content .='<table align="left" border="1" cellspacing="0" cellpadding="0" style="font-size:12px;"><thead>';
  95. $email_content .='<tr class="firstRow"><td valign="top" rowspan="1" colspan="5" style="word-break: break-all;">';
  96. $email_content .='<strong>工单ID:'.$workorder['workorder_id'].'</strong><strong>工单名称:'.$workorder['workorder_name'].'</strong>';
  97. $email_content .='</td></tr>';
  98. $email_content .='<tr>';
  99. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>工单名称</strong></th>';
  100. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>类型</strong></th>';
  101. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>等级</strong></th>';
  102. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>时间</strong></th>';
  103. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>告警详情</strong></th>';
  104. $email_content .='</tr></thead><tbody>';
  105. foreach($workorder['warning_list'] as $key=>$val) {
  106. $email_content .= '<tr>';
  107. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['warning_name'].'</td>';
  108. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_type[$val['type']].'</td>';
  109. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_level[$val['level']].'</td>';
  110. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.date("Y-m-d H:i:s",$val['create_time']->toDateTime()->getTimestamp()).'</td>';
  111. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['content'].'</td>';
  112. $email_content .= '</tr>';
  113. }
  114. $email_content .='<tr>';
  115. if(count($workorder['remark_list'])>0) {
  116. $email_content .= '<td valign="top" rowspan="1" colspan="5" style="word-break: break-all;"><strong>备注:</strong>' . $workorder['remark_list'][count($workorder['remark_list']) - 1]['remark_content'] . '</td>';
  117. }else{
  118. $email_content .= '<td valign="top" rowspan="1" colspan="5" style="word-break: break-all;">&nbsp;</td>';
  119. }
  120. $email_content .='</tr>';
  121. $email_content .='</tbody></table>';
  122. $email_content .='<p><br/>&nbsp;</p><p><br/>&nbsp;</p>';
  123. $email_content .='<p style="text-align: right;">系统管理员&nbsp;&nbsp;<br>';
  124. $email_content .=date("Y年m月d日",time()).'</p>';
  125. $email_content .='</div>';
  126. $notices_log['content'] = $email_content;
  127. $resp = $this->CI->mailer->send_email($receive_user['email'],$notices_log['subject'],$notices_log['content']);
  128. if($resp['code'] == 'OK'){
  129. $notices_log['status'] = "1";
  130. }else{
  131. $notices_log['status'] = "0";
  132. $info['email_code'] = "FAILED";
  133. $info['email_msg'] = $resp['msg'];
  134. }
  135. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  136. $this->CI->noticeslog_model->save_notices_log($notices_log);
  137. }
  138. return $info;
  139. }
  140. /**
  141. * 签收工单
  142. * @param $workorder
  143. * @param $remark
  144. */
  145. public function sign_workorder($workorder,$remark){
  146. $info = array();
  147. $info['sms_code'] = "OK";
  148. $info['email_code'] = "OK";
  149. $receive_user = $this->CI->user_model->get_user_with_user_id($workorder['receive_user_id']);
  150. $admin_list = $this->CI->user_model->select_users("1");
  151. $sso_admin_list = $this->CI->user_model->set_collection_name("sso_users")->select_users("1");
  152. $mobiles = array();
  153. $emails = array();
  154. foreach ($admin_list as $key => $val){
  155. $mobiles[] = $val['mobile'];
  156. $emails[] = $val['email'];
  157. }
  158. foreach ($sso_admin_list as $key => $val){
  159. $mobiles[] = $val['mobile'];
  160. $emails[] = $val['email'];
  161. }
  162. if($this->setting['is_sms'] && in_array("10",$workorder['send_type'])){
  163. $sms_content = '工单ID:'.$workorder['workorder_id'].',工单名称:'.$workorder['workorder_name'].',类型:'.$workorder['type'].',已由责任人'.$receive_user['name'].'签收,备注:'.$remark['remark_content'];
  164. for($i = 0;$i<count($mobiles);$i++) {
  165. $notices_log = $this->CI->noticeslog_model->get_model();
  166. $notices_log['type'] = "sms";
  167. $notices_log['content'] = $sms_content;
  168. $notices_log['log_id'] = $this->create_id();
  169. $notices_log['mobile'] = $mobiles[$i];
  170. if($this->setting['sms_type'] == '10' ){
  171. if(send_by_modem($this->setting, $notices_log['mobile'], $sms_content)){
  172. $notices_log['status'] = "1";
  173. }else{
  174. $notices_log['status'] = "0";
  175. $info['sms_code'] = "FAILED";
  176. $info['sms_msg'] = "短信发送失败!端口被占用或者配置错误!";
  177. }
  178. }elseif($this->setting['sms_type'] == '20' ){
  179. $sms_content = array(
  180. "workorder_id"=>$workorder['workorder_id'],
  181. "workorder_name"=>mb_strlen($workorder['workorder_name'],'utf-8')<=18?$workorder['workorder_name']:mb_substr($workorder['workorder_name'],0,18,'utf-8')."..",
  182. "workorder_type"=>$workorder['type'],
  183. "receive_user_name"=>$receive_user['name'],
  184. "remark_content"=>mb_strlen($workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'],'utf-8')<=18?$workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content']:mb_substr($workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'],0,18,'utf-8').".."
  185. );
  186. $resp = $this->Aliyunsms->sendSms($notices_log['mobile'],$this->setting['template_codes'][1],$sms_content);
  187. if($resp['Code'] == 'OK'){
  188. $notices_log['status'] = "1";
  189. }else{
  190. $notices_log['status'] = "0";
  191. $info['sms_code'] = "FAILED";
  192. $info['sms_msg'] = $resp['Message'];
  193. }
  194. }
  195. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  196. $this->CI->noticeslog_model->save_notices_log($notices_log);
  197. }
  198. }
  199. if($this->setting['is_email'] && in_array("20",$workorder['send_type'])){
  200. $notices_log = $this->CI->noticeslog_model->get_model();
  201. $notices_log['log_id'] = $this->create_id();
  202. $notices_log['type'] = "email";
  203. $notices_log['subject'] = "工单ID:".$workorder['workorder_id']."已由责任人:".$receive_user['name']."签收";
  204. $email_content = '<div style="font-size:12px;">';
  205. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255);">系统管理员,您好!</p>';
  206. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255); text-indent: 2em;">以下工单已由责任人:'.$receive_user['name'].'签收:</p>';
  207. $email_content .='<table align="left" border="1" cellspacing="0" cellpadding="0" style="font-size:12px;"><thead>';
  208. $email_content .='<tr class="firstRow"><td valign="top" rowspan="1" colspan="5" style="word-break: break-all;">';
  209. $email_content .='<strong>工单ID:'.$workorder['workorder_id'].'</strong><strong>工单名称:'.$workorder['workorder_name'].'</strong>';
  210. $email_content .='</td></tr>';
  211. $email_content .='<tr>';
  212. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>工单名称</strong></th>';
  213. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>类型</strong></th>';
  214. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>等级</strong></th>';
  215. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>时间</strong></th>';
  216. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>告警详情</strong></th>';
  217. $email_content .='</tr></thead><tbody>';
  218. foreach($workorder['warning_list'] as $key=>$val) {
  219. $email_content .= '<tr>';
  220. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['warning_name'].'</td>';
  221. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_type[$val['type']].'</td>';
  222. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_level[$val['level']].'</td>';
  223. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.date("Y-m-d H:i:s",$val['create_time']->toDateTime()->getTimestamp()).'</td>';
  224. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['content'].'</td>';
  225. $email_content .= '</tr>';
  226. }
  227. $email_content .='<tr>';
  228. $email_content .='<td valign="top" rowspan="1" colspan="5" style="word-break: break-all;"><strong>备注:</strong>'.$remark['remark_content'].'</td>';
  229. $email_content .='</tr>';
  230. $email_content .='</tbody></table>';
  231. $email_content .='<p><br/>&nbsp;</p><p><br/>&nbsp;</p>';
  232. $email_content .='<p style="text-align: right;">责任人:'.$receive_user['name'].'&nbsp;<br>';
  233. $email_content .=date("Y年m月d日",time()).'</p>';
  234. $email_content .='</div>';
  235. $notices_log['recipient'] = implode(",",$emails);
  236. $notices_log['content'] = $email_content;
  237. for ($i=0;$i<count($emails);$i++) {
  238. $this->CI->mailer->add_recipient($emails[$i]);
  239. }
  240. $resp = $this->CI->mailer->send_email("", $notices_log['subject'], $notices_log['content']);
  241. if($resp['code'] == 'OK'){
  242. $notices_log['status'] = "1";
  243. }else{
  244. $notices_log['status'] = "0";
  245. $info['email_code'] = "FAILED";
  246. $info['email_msg'] = $resp['msg'];
  247. }
  248. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  249. $this->CI->noticeslog_model->save_notices_log($notices_log);
  250. }
  251. return $info;
  252. }
  253. /**
  254. * 核查工单未发现问题
  255. * @param $workorder
  256. * @param $remark
  257. */
  258. public function check_workorder($workorder,$remark){
  259. $info = array();
  260. $info['sms_code'] = "OK";
  261. $info['email_code'] = "OK";
  262. $receive_user = $this->CI->user_model->get_user_with_user_id($workorder['receive_user_id']);
  263. $admin_list = $this->CI->user_model->select_users("1");
  264. $sso_admin_list = $this->CI->user_model->set_collection_name("sso_users")->select_users("1");
  265. $mobiles = array();
  266. $emails = array();
  267. foreach ($admin_list as $key => $val){
  268. $mobiles[] = $val['mobile'];
  269. $emails[] = $val['email'];
  270. }
  271. foreach ($sso_admin_list as $key => $val){
  272. $mobiles[] = $val['mobile'];
  273. $emails[] = $val['email'];
  274. }
  275. if($this->setting['is_sms'] && in_array("10",$workorder['send_type'])){
  276. $sms_content = '工单ID:'.$workorder['workorder_id'].',工单名称:'.$workorder['workorder_name'].',类型:'.$workorder['type'].',已由责任人'.$receive_user['name'].'核查无问题,备注:'.$remark['remark_content'];
  277. for($i = 0;$i<count($mobiles);$i++) {
  278. $notices_log = $this->CI->noticeslog_model->get_model();
  279. $notices_log['type'] = "sms";
  280. $notices_log['content'] = $sms_content;
  281. $notices_log['log_id'] = $this->create_id();
  282. $notices_log['mobile'] = $mobiles[$i];
  283. if($this->setting['sms_type'] == '10' ){
  284. if(send_by_modem($this->setting, $notices_log['mobile'], $sms_content)){
  285. $notices_log['status'] = "1";
  286. }else{
  287. $notices_log['status'] = "0";
  288. $info['sms_code'] = "FAILED";
  289. $info['sms_msg'] = "短信发送失败!端口被占用或者配置错误!";
  290. }
  291. }elseif($this->setting['sms_type'] == '20' ){
  292. $sms_content = array(
  293. "workorder_id"=>$workorder['workorder_id'],
  294. "workorder_name"=>mb_strlen($workorder['workorder_name'],'utf-8')<=18?$workorder['workorder_name']:mb_substr($workorder['workorder_name'],0,18,'utf-8')."..",
  295. "workorder_type"=>$workorder['type'],
  296. "receive_user_name"=>$receive_user['name'],
  297. "remark_content"=>mb_strlen($workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'],'utf-8')<=18?$workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content']:mb_substr($workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'],0,18,'utf-8').".."
  298. );
  299. $resp = $this->Aliyunsms->sendSms($notices_log['mobile'],$this->setting['template_codes'][2],$sms_content);
  300. if($resp['Code'] == 'OK'){
  301. $notices_log['status'] = "1";
  302. }else{
  303. $notices_log['status'] = "0";
  304. $info['sms_code'] = "FAILED";
  305. $info['sms_msg'] = $resp['Message'];
  306. }
  307. }
  308. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  309. $this->CI->noticeslog_model->save_notices_log($notices_log);
  310. }
  311. }
  312. if($this->setting['is_email'] && in_array("20",$workorder['send_type'])){
  313. $notices_log = $this->CI->noticeslog_model->get_model();
  314. $notices_log['log_id'] = $this->create_id();
  315. $notices_log['type'] = "email";
  316. $notices_log['subject'] = "工单ID:".$workorder['workorder_id']."已由责任人:".$receive_user['name']."核查无问题";
  317. $email_content = '<div style="font-size:12px;">';
  318. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255);">系统管理员,您好!</p>';
  319. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255); text-indent: 2em;">以下工单已由责任人:'.$receive_user['name'].'核查无问题:</p>';
  320. $email_content .='<table align="left" border="1" cellspacing="0" cellpadding="0" style="font-size:12px;"><thead>';
  321. $email_content .='<tr class="firstRow"><td valign="top" rowspan="1" colspan="5" style="word-break: break-all;">';
  322. $email_content .='<strong>工单ID:'.$workorder['workorder_id'].'</strong><strong>工单名称:'.$workorder['workorder_name'].'</strong>';
  323. $email_content .='</td></tr>';
  324. $email_content .='<tr>';
  325. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>工单名称</strong></th>';
  326. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>类型</strong></th>';
  327. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>等级</strong></th>';
  328. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>时间</strong></th>';
  329. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>告警详情</strong></th>';
  330. $email_content .='</tr></thead><tbody>';
  331. foreach($workorder['warning_list'] as $key=>$val) {
  332. $email_content .= '<tr>';
  333. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['warning_name'].'</td>';
  334. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_type[$val['type']].'</td>';
  335. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_level[$val['level']].'</td>';
  336. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.date("Y-m-d H:i:s",$val['create_time']->toDateTime()->getTimestamp()).'</td>';
  337. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['content'].'</td>';
  338. $email_content .= '</tr>';
  339. }
  340. $email_content .='<tr>';
  341. $email_content .='<td valign="top" rowspan="1" colspan="5" style="word-break: break-all;"><strong>备注:</strong>'.$remark['remark_content'] .'</td>';
  342. $email_content .='</tr>';
  343. $email_content .='</tbody></table>';
  344. $email_content .='<p><br/>&nbsp;</p><p><br/>&nbsp;</p>';
  345. $email_content .='<p style="text-align: right;">责任人:'.$receive_user['name'].'&nbsp;<br>';
  346. $email_content .=date("Y年m月d日",time()).'</p>';
  347. $email_content .='</div>';
  348. $notices_log['recipient'] = implode(",",$emails);
  349. $notices_log['content'] = $email_content;
  350. for ($i=0;$i<count($emails);$i++) {
  351. $this->CI->mailer->add_recipient($emails[$i]);
  352. }
  353. if($remark['remark_file']){
  354. $attachments = getcwd().'/static/upload'.$remark['remark_file'];
  355. }else{
  356. $attachments = null;
  357. }
  358. $resp = $this->CI->mailer->send_email("", $notices_log['subject'], $notices_log['content'],$attachments);
  359. if($resp['code'] == 'OK'){
  360. $notices_log['status'] = "1";
  361. }else{
  362. $notices_log['status'] = "0";
  363. $info['email_code'] = "FAILED";
  364. $info['email_msg'] = $resp['msg'];
  365. }
  366. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  367. $this->CI->noticeslog_model->save_notices_log($notices_log);
  368. }
  369. return $info;
  370. }
  371. /**
  372. * 工单已处理
  373. * @param $workorder
  374. * @param $remark
  375. */
  376. public function doit_workorder($workorder,$remark){
  377. $info = array();
  378. $info['sms_code'] = "OK";
  379. $info['email_code'] = "OK";
  380. $receive_user = $this->CI->user_model->get_user_with_user_id($workorder['receive_user_id']);
  381. $admin_list = $this->CI->user_model->select_users("1");
  382. $sso_admin_list = $this->CI->user_model->set_collection_name("sso_users")->select_users("1");
  383. $mobiles = array();
  384. $emails = array();
  385. foreach ($admin_list as $key => $val){
  386. $mobiles[] = $val['mobile'];
  387. $emails[] = $val['email'];
  388. }
  389. foreach ($sso_admin_list as $key => $val){
  390. $mobiles[] = $val['mobile'];
  391. $emails[] = $val['email'];
  392. }
  393. if($this->setting['is_sms'] && in_array("10",$workorder['send_type'])){
  394. $sms_content = '工单ID:'.$workorder['workorder_id'].',工单名称:'.$workorder['workorder_name'].',类型:'.$workorder['type'].',已由责任人'.$receive_user['name'].'处理完成,备注:'.$remark['remark_content'];
  395. for($i = 0;$i<count($mobiles);$i++) {
  396. $notices_log = $this->CI->noticeslog_model->get_model();
  397. $notices_log['type'] = "sms";
  398. $notices_log['content'] = $sms_content;
  399. $notices_log['log_id'] = $this->create_id();
  400. $notices_log['mobile'] = $mobiles[$i];
  401. if($this->setting['sms_type'] == '10' ){
  402. if(send_by_modem($this->setting, $notices_log['mobile'], $sms_content)){
  403. $notices_log['status'] = "1";
  404. }else{
  405. $notices_log['status'] = "0";
  406. $info['sms_code'] = "FAILED";
  407. $info['sms_msg'] = "短信发送失败!端口被占用或者配置错误!";
  408. }
  409. }elseif($this->setting['sms_type'] == '20' ){
  410. $sms_content = array(
  411. "workorder_id"=>$workorder['workorder_id'],
  412. "workorder_name"=>mb_strlen($workorder['workorder_name'],'utf-8')<=18?$workorder['workorder_name']:mb_substr($workorder['workorder_name'],0,18,'utf-8')."..",
  413. "workorder_type"=>$workorder['type'],
  414. "receive_user_name"=>$receive_user['name'],
  415. "remark_content"=>mb_strlen($workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'],'utf-8')<=18?$workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content']:mb_substr($workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'],0,18,'utf-8').".."
  416. );
  417. $resp = $this->Aliyunsms->sendSms($notices_log['mobile'],$this->setting['template_codes'][3],$sms_content);
  418. if($resp['Code'] == 'OK'){
  419. $notices_log['status'] = "1";
  420. }else{
  421. $notices_log['status'] = "0";
  422. $info['sms_code'] = "FAILED";
  423. $info['sms_msg'] = $resp['Message'];
  424. }
  425. }
  426. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  427. $this->CI->noticeslog_model->save_notices_log($notices_log);
  428. }
  429. }
  430. if($this->setting['is_email'] && in_array("20",$workorder['send_type'])){
  431. $notices_log = $this->CI->noticeslog_model->get_model();
  432. $notices_log['log_id'] = $this->create_id();
  433. $notices_log['type'] = "email";
  434. $notices_log['subject'] = "工单ID:".$workorder['workorder_id']."已由责任人:".$receive_user['name']."处理完成";
  435. $email_content = '<div style="font-size:12px;">';
  436. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255);">系统管理员,您好!</p>';
  437. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255); text-indent: 2em;">以下工单已由责任人:'.$receive_user['name'].'处理完成:</p>';
  438. $email_content .='<table align="left" border="1" cellspacing="0" cellpadding="0" style="font-size:12px;"><thead>';
  439. $email_content .='<tr class="firstRow"><td valign="top" rowspan="1" colspan="5" style="word-break: break-all;">';
  440. $email_content .='<strong>工单ID:'.$workorder['workorder_id'].'</strong><strong>工单名称:'.$workorder['workorder_name'].'</strong>';
  441. $email_content .='</td></tr>';
  442. $email_content .='<tr>';
  443. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>工单名称</strong></th>';
  444. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>类型</strong></th>';
  445. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>等级</strong></th>';
  446. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>时间</strong></th>';
  447. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>告警详情</strong></th>';
  448. $email_content .='</tr></thead><tbody>';
  449. foreach($workorder['warning_list'] as $key=>$val) {
  450. $email_content .= '<tr>';
  451. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['warning_name'].'</td>';
  452. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_type[$val['type']].'</td>';
  453. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_level[$val['level']].'</td>';
  454. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.date("Y-m-d H:i:s",$val['create_time']->toDateTime()->getTimestamp()).'</td>';
  455. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['content'].'</td>';
  456. $email_content .= '</tr>';
  457. }
  458. $email_content .='<tr>';
  459. $email_content .='<td valign="top" rowspan="1" colspan="5" style="word-break: break-all;"><strong>备注:</strong>'.$remark['remark_content'] .'</td>';
  460. $email_content .='</tr>';
  461. $email_content .='</tbody></table>';
  462. $email_content .='<p><br/>&nbsp;</p><p><br/>&nbsp;</p>';
  463. $email_content .='<p style="text-align: right;">责任人:'.$receive_user['name'].'&nbsp;<br>';
  464. $email_content .=date("Y年m月d日",time()).'</p>';
  465. $email_content .='</div>';
  466. $notices_log['recipient'] = implode(",",$emails);
  467. $notices_log['content'] = $email_content;
  468. for ($i=0;$i<count($emails);$i++) {
  469. $this->CI->mailer->add_recipient($emails[$i]);
  470. }
  471. if($remark['remark_file']){
  472. $attachments = getcwd().'/static/upload'.$remark['remark_file'];
  473. }else{
  474. $attachments = null;
  475. }
  476. $resp = $this->CI->mailer->send_email("", $notices_log['subject'], $notices_log['content'],$attachments);
  477. if($resp['code'] == 'OK'){
  478. $notices_log['status'] = "1";
  479. }else{
  480. $notices_log['status'] = "0";
  481. $info['email_code'] = "FAILED";
  482. $info['email_msg'] = $resp['msg'];
  483. }
  484. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  485. $this->CI->noticeslog_model->save_notices_log($notices_log);
  486. }
  487. return $info;
  488. }
  489. /**
  490. * 驳回工单
  491. * @param $workorder
  492. * @param $remark
  493. */
  494. public function reject_workorder($workorder,$remark){
  495. $info = array();
  496. $info['sms_code'] = "OK";
  497. $info['email_code'] = "OK";
  498. $receive_user = $this->CI->user_model->get_user_with_user_id($workorder['receive_user_id']);
  499. if($this->setting['is_sms'] && in_array("10",$workorder['send_type'])){
  500. $sms_content = '你的工单已由管理员驳回,请重新处理。工单ID:'.$workorder['workorder_id'].',工单名称:'.$workorder['workorder_name'].',类型:'.$workorder['type'].',备注:'.$remark['remark_content'];
  501. $notices_log = $this->CI->noticeslog_model->get_model();
  502. $notices_log['log_id'] = $this->create_id();
  503. $notices_log['type'] = "sms";
  504. $notices_log['mobile'] = $receive_user['mobile'];
  505. $notices_log['content'] = $sms_content;
  506. if($this->setting['sms_type'] == '10' ){
  507. if(send_by_modem($this->setting, $receive_user['mobile'], $sms_content)){
  508. $notices_log['status'] = "1";
  509. }else{
  510. $notices_log['status'] = "0";
  511. $info['sms_code'] = "FAILED";
  512. $info['sms_msg'] = "短信发送失败!端口被占用或者配置错误!";
  513. }
  514. }elseif($this->setting['sms_type'] == '20' ){
  515. $sms_content = array(
  516. "workorder_id"=>$workorder['workorder_id'],
  517. "workorder_name"=>mb_strlen($workorder['workorder_name'],'utf-8')<=18?$workorder['workorder_name']:mb_substr($workorder['workorder_name'],0,18,'utf-8')."..",
  518. "workorder_type"=>$workorder['type'],
  519. "remark_content"=>mb_strlen($workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'],'utf-8')<=18?$workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content']:mb_substr($workorder['remark_list'][count($workorder['remark_list'])-1]['remark_content'],0,18,'utf-8').".."
  520. );
  521. $resp = $this->Aliyunsms->sendSms($receive_user['mobile'],$this->setting['template_codes'][4],$sms_content);
  522. if($resp['Code'] == 'OK'){
  523. $notices_log['status'] = "1";
  524. }else{
  525. $notices_log['status'] = "0";
  526. $info['sms_code'] = "FAILED";
  527. $info['sms_msg'] = $resp['Message'];
  528. }
  529. }
  530. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  531. $this->CI->noticeslog_model->save_notices_log($notices_log);
  532. }
  533. if($this->setting['is_email'] && in_array("20",$workorder['send_type'])){
  534. $notices_log = $this->CI->noticeslog_model->get_model();
  535. $notices_log['log_id'] = $this->create_id();
  536. $notices_log['type'] = "email";
  537. $notices_log['recipient'] = $receive_user['email'];
  538. $notices_log['subject'] = "你的工单已由管理员驳回,请重新处理,工单ID:".$workorder['workorder_id'];
  539. $email_content = '<div style="font-size:12px;">';
  540. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255);">'.$receive_user['name'].',您好!</p>';
  541. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255); text-indent: 2em;">以下工单已由管理员驳回,请重新处理:</p>';
  542. $email_content .='<table align="left" border="1" cellspacing="0" cellpadding="0" style="font-size:12px;"><thead>';
  543. $email_content .='<tr class="firstRow"><td valign="top" rowspan="1" colspan="5" style="word-break: break-all;">';
  544. $email_content .='<strong>工单ID:'.$workorder['workorder_id'].'</strong><strong>工单名称:'.$workorder['workorder_name'].'</strong>';
  545. $email_content .='</td></tr>';
  546. $email_content .='<tr>';
  547. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>工单名称</strong></th>';
  548. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>类型</strong></th>';
  549. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>等级</strong></th>';
  550. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>时间</strong></th>';
  551. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>告警详情</strong></th>';
  552. $email_content .='</tr></thead><tbody>';
  553. foreach($workorder['warning_list'] as $key=>$val) {
  554. $email_content .= '<tr>';
  555. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['warning_name'].'</td>';
  556. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_type[$val['type']].'</td>';
  557. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_level[$val['level']].'</td>';
  558. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.date("Y-m-d H:i:s",$val['create_time']->toDateTime()->getTimestamp()).'</td>';
  559. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['content'].'</td>';
  560. $email_content .= '</tr>';
  561. }
  562. $email_content .='<tr>';
  563. $email_content .='<td valign="top" rowspan="1" colspan="5" style="word-break: break-all;"><strong>备注:</strong>'.$remark['remark_content'] .'</td>';
  564. $email_content .='</tr>';
  565. $email_content .='</tbody></table>';
  566. $email_content .='<p><br/>&nbsp;</p><p><br/>&nbsp;</p>';
  567. $email_content .='<p style="text-align: right;">系统管理员&nbsp;&nbsp;<br>';
  568. $email_content .=date("Y年m月d日",time()).'</p>';
  569. $email_content .='</div>';
  570. $notices_log['content'] = $email_content;
  571. $resp = $this->CI->mailer->send_email($receive_user['email'],$notices_log['subject'],$notices_log['content']);
  572. if($resp['code'] == 'OK'){
  573. $notices_log['status'] = "1";
  574. }else{
  575. $notices_log['status'] = "0";
  576. $info['email_code'] = "FAILED";
  577. $info['email_msg'] = $resp['msg'];
  578. }
  579. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  580. $this->CI->noticeslog_model->save_notices_log($notices_log);
  581. }
  582. return $info;
  583. }
  584. /**
  585. * 完成工单
  586. * @param $workorder
  587. */
  588. public function finish_workorder($workorder){
  589. $info = array();
  590. $info['sms_code'] = "OK";
  591. $info['email_code'] = "OK";
  592. $receive_user = $this->CI->user_model->get_user_with_user_id($workorder['receive_user_id']);
  593. if($this->setting['is_sms'] && in_array("10",$workorder['send_type'])){
  594. $sms_content = '你的工单已由管理员结束,工单ID:'.$workorder['workorder_id'].',工单名称:'.$workorder['workorder_name'].',类型:'.$workorder['type'];
  595. $notices_log = $this->CI->noticeslog_model->get_model();
  596. $notices_log['log_id'] = $this->create_id();
  597. $notices_log['type'] = "sms";
  598. $notices_log['mobile'] = $receive_user['mobile'];
  599. $notices_log['content'] = $sms_content;
  600. if($this->setting['sms_type'] == '10' ){
  601. if(send_by_modem($this->setting, $receive_user['mobile'], $sms_content)){
  602. $notices_log['status'] = "1";
  603. }else{
  604. $notices_log['status'] = "0";
  605. $info['sms_code'] = "FAILED";
  606. $info['sms_msg'] = "短信发送失败!端口被占用或者配置错误!";
  607. }
  608. }elseif($this->setting['sms_type'] == '20' ){
  609. $sms_content = array(
  610. "workorder_id"=>$workorder['workorder_id'],
  611. "workorder_name"=>mb_strlen($workorder['workorder_name'],'utf-8')<=18?$workorder['workorder_name']:mb_substr($workorder['workorder_name'],0,18,'utf-8')."..",
  612. "workorder_type"=>$workorder['type']
  613. );
  614. $resp = $this->Aliyunsms->sendSms($receive_user['mobile'],$this->setting['template_codes'][5],$sms_content);
  615. if($resp['Code'] == 'OK'){
  616. $notices_log['status'] = "1";
  617. }else{
  618. $notices_log['status'] = "0";
  619. $info['sms_code'] = "FAILED";
  620. $info['sms_msg'] = $resp['Message'];
  621. }
  622. }
  623. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  624. $this->CI->noticeslog_model->save_notices_log($notices_log);
  625. }
  626. if($this->setting['is_email'] && in_array("20",$workorder['send_type'])){
  627. $notices_log = $this->CI->noticeslog_model->get_model();
  628. $notices_log['log_id'] = $this->create_id();
  629. $notices_log['type'] = "email";
  630. $notices_log['recipient'] = $receive_user['email'];
  631. $notices_log['subject'] = "你的工单已由管理员结束,工单ID:".$workorder['workorder_id'];
  632. $email_content = '<div style="font-size:12px;">';
  633. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255);">'.$receive_user['name'].',您好!</p>';
  634. $email_content .='<p style="white-space: normal; background-color: rgb(255, 255, 255); text-indent: 2em;">以下工单已由管理员确认结束:</p>';
  635. $email_content .='<table align="left" border="1" cellspacing="0" cellpadding="0" style="font-size:12px;"><thead>';
  636. $email_content .='<tr class="firstRow"><td valign="top" rowspan="1" colspan="5" style="word-break: break-all;">';
  637. $email_content .='<strong>工单ID:'.$workorder['workorder_id'].'</strong><strong>工单名称:'.$workorder['workorder_name'].'</strong>';
  638. $email_content .='</td></tr>';
  639. $email_content .='<tr>';
  640. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>工单名称</strong></th>';
  641. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>类型</strong></th>';
  642. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>等级</strong></th>';
  643. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>时间</strong></th>';
  644. $email_content .='<th width="147" valign="middle" style="word-break: break-all;" align="center"><strong>告警详情</strong></th>';
  645. $email_content .='</tr></thead><tbody>';
  646. foreach($workorder['warning_list'] as $key=>$val) {
  647. $email_content .= '<tr>';
  648. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['warning_name'].'</td>';
  649. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_type[$val['type']].'</td>';
  650. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.$this->warning_level[$val['level']].'</td>';
  651. $email_content .= '<td valign="middle" colspan="1" rowspan="1" align="center">'.date("Y-m-d H:i:s",$val['create_time']->toDateTime()->getTimestamp()).'</td>';
  652. $email_content .= '<td valign="top" colspan="1" rowspan="1">'.$val['content'].'</td>';
  653. $email_content .= '</tr>';
  654. }
  655. $email_content .='</tbody></table>';
  656. $email_content .='<p><br/>&nbsp;</p><p><br/>&nbsp;</p>';
  657. $email_content .='<p style="text-align: right;">系统管理员&nbsp;&nbsp;<br>';
  658. $email_content .=date("Y年m月d日",time()).'</p>';
  659. $email_content .='</div>';
  660. $notices_log['content'] = $email_content;
  661. $resp = $this->CI->mailer->send_email($receive_user['email'],$notices_log['subject'],$notices_log['content']);
  662. if($resp['code'] == 'OK'){
  663. $notices_log['status'] = "1";
  664. }else{
  665. $notices_log['status'] = "0";
  666. $info['email_code'] = "FAILED";
  667. $info['email_msg'] = $resp['msg'];
  668. }
  669. $notices_log['create_time'] = new MongoDB\BSON\UTCDateTime(time()*1000);
  670. $this->CI->noticeslog_model->save_notices_log($notices_log);
  671. }
  672. return $info;
  673. }
  674. /**
  675. * 生成ID
  676. * @return string
  677. */
  678. public function create_id()
  679. {
  680. return date('Ymd') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
  681. }
  682. }