<?php
/**
* @Author: Awe
* @Date: 2016-10-26 17:26:54
* @Last Modified by: Awe
* @Last Modified time: 2017-05-30 12:57:18
*/
class EmailBusiness extends AbstractModel{
public function sendEmail(){
$sql = "SELECT email,body,`subject`,name FROM hr_send_email_all_task WHERE is_lock=0 AND (send_status=0 OR send_status=2);";
$rows = $this->db()->find($sql);
foreach ($rows as $val) {
$accepter = $val['email'];
$tite = $val['subject'];
$bodys = $val['body'];
$result = Common::Postmail($accepter ,$tite , $bodys);
$this->setsendemailalltask($result);
}
echo "success";
}
//更新邮件发送状态
private function setsendemailalltask($result) {
$now = date('Y-m-d H:i:s');
if ($result) {
$sql = "UPDATE hr_send_email_all_task SET is_lock=1,lock_date='{$now}',send_status=1,send_date='{$now} '";
} else {
$sql = "UPDATE hr_send_email_all_task SET is_lock=1,lock_date='{$now}',send_status=2 ";
}
$this->db()->Exec($sql);
}
public function addMailQueue(){
$file = APP_PATH . "/log/tmp/mailQueue.lock.txt" ;
$fp = fopen($file,'a+');
if (flock($fp, LOCK_EX)) {
$logFile = Log_file::getInstance(array('filename' => "addMailQueueLog" ));
$lock_message = "file is locked time is :".date("Y-m-d H:i:s", time())." " .PHP_EOL;
fwrite($fp, $lock_message);
$result = $this->doAddMailQueue();
$logFile->Write("info" , $result );
echo $result ;
flock($fp,LOCK_UN);
}else{
echo "其他的进程正在处理。。。";
}
fclose($fp);
}
public function doAddMailQueue(){
$sql = "select * from mail_queue where status = 0 and ischeck = '1' order by create_date desc limit 1 " ;
$info = $this->db()->findOne($sql);
if(empty($info)){
return "no data";
}
$file = $info['file'];
$body = $info['content'];
$subject = $info['title'];
$emailType = "queue_{$info['id']}";
$pre_count = ;
if(!file_exists($file)){
return "file $file is not exists";
}
$csvreader = new CsvReader( $file);
$line_number = $csvreader->get_lines();
$date = date("Y-m-d H:i:s");
$sqlFile = str_replace("\\", "/", APP_PATH) . "/tmp/"."sql_" . date("Y_m_d_H_i_s",time()) . ".txt";
$page = intval($line_number/$pre_count)+;
$successNum = ;
for ($i = ;$i < $page;$i++){
$str = '' ;
$data = $csvreader->get_data($pre_count , $i * $pre_count);
if(empty($data)){
continue ;
}
foreach ($data as $key => $value) {
$email = isset($value[]) ? trim($value[]) : '' ;
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
continue ;
}
$bodys = $this->replaceEmailBody($email , $body , $emailType );
$str.= $email . "$#####$$" . $bodys . "$#####$$" . $date ."$#####$$" . $subject ."v_@rdasd32eplace@" ;
$successNum++;
}
$str = rtrim($str , "v_@rdasd32eplace@" );
file_put_contents($sqlFile , $str , FILE_APPEND );
//unset($psql);
unset($data);
} $sql = "LOAD DATA INFILE '{$sqlFile}' INTO TABLE email_all_task CHARACTER SET utf8 FIELDS TERMINATED BY '$#####$$' LINES TERMINATED BY 'v_@rdasd32eplace@' (email,body,create_date,subject)" ;
$num = $this->db()->Exec($sql);
if($num > ){
$now =date("Y-m-d H:i:s") ;
$this->db()->Exec("update mail_queue set status = 1 ,success_num = '{$successNum}' , operate_date = '{$now}' where id = '{$info['id']}' ");
//删除csv文件
@unlink($file);
return "success---编号id为:{$info['id']}---标题是:{$subject}";
}else{
return "fail";
} }
function replaceEmailBody($email , $content , $emailType = '' ){
$url = "http://testwww.shixiba.com/analyze.php?email={$email}&emailType={$emailType}";
$content .= '<img src="'.$url.'" style="display:none;">' ;
return $content ;
} }

MySQL LOAD DATA的更多相关文章

  1. mysql load data infile的使用 和 SELECT into outfile备份数据库数据

    LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE t ...

  2. MySQL Load Data InFile 数据导入数据库

    常用如下: Load Data InFile 'C:/Data.txt' Into Table `TableTest` Lines Terminated By '\r\n'; 这个语句,字段默认用制表 ...

  3. Mysql load data infile 导入数据出现:Data truncated for column

    [1]Mysql load data infile 导入数据出现:Data truncated for column .... 可能原因分析: (1)数据库表对应字段类型长度不够或修改为其他数据类型( ...

  4. Mybatis拦截器 mysql load data local 内存流处理

    Mybatis 拦截器不做解释了,用过的基本都知道,这里用load data local主要是应对大批量数据的处理,提高性能,也支持事务回滚,且不影响其他的DML操作,当然这个操作不要涉及到当前所lo ...

  5. mysql load data 乱码的问题

    新学mysql在用load data导入txt文档时发现导入的内容,select 之后是乱码,先后把表,数据库的字符集类型修改为utf8,但还是一样,最后在 http://bbs.chinaunix. ...

  6. 解决ubuntu server mysql load data infile 导入本地文件ERROR 1148 (42000)错误。

    问题:在ubuntu server 上使用apt-get 安装完 mysql 使用 load data infile 出现错误,错误代码如下: ERROR (): The used command i ...

  7. 【转载】Mysql load data infile用法(万级数据导入,在几秒之内)

    https://blog.csdn.net/u014082714/article/details/53173975 http://blog.itpub.net/26506993/viewspace-2 ...

  8. mysql load data导入脚本

    # !/bin/bash ############中文说明###################### #本程序的一些提示需要中文支持,如系统没有安装中文包,请先安装:yum -y groupinst ...

  9. MySql LOAD DATA 使用

    load的语法 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO ...

  10. 浅谈MySQL load data local infile细节 -- 从源码层面

    相信大伙对mysql的load data local infile并不陌生,今天来巩固一下这里面隐藏的一些细节,对于想自己动手开发一个mysql客户端有哪些点需要注意的呢? 首先,了解一下流程: 3个 ...

随机推荐

  1. Python基础:列表,元组和字典的基本操作

    列表(集合list)的基本操作: # 列表的常见操作 nameList = ["张学友", "刘德华", "郭富城", "黎明&q ...

  2. JAVA集合中的迭代器的遍历

    JAVA中的迭代器,迭代实质上就是遍历,在JAVA中使用iterator()方法进行迭代.需要注意的是,iterator()方法的返回值是Iterator对象.Iterator对象有三个方法,hasN ...

  3. Spark Streaming原理简析

    执行流程 数据的接收 StreamingContext实例化的时候,需要传入一个SparkContext,然后指定要连接的spark matser url,即连接一个spark engine,用于获得 ...

  4. php设置错误,错误记录

    //设置错误级别. error_reporting(E_ALL);  //显示所有错误 error_reporting(E_ALL&~E_NOTICE);  //显示所有错误但不显示提示级别的 ...

  5. 万能头文件#include<bits/stdc++.h>

    最近在打cf时赛后翻阅别人的代码总是会发现一个陌生而奇怪的头文件#include<bits/stdc++.h> 奇怪之处就在于基本上所有的代码只要用了这个头文件就不再写其他头文件了. 百度 ...

  6. python切片、列表解析、元组

    1.列表解析 test = [x**2 for x in range(1,11)] 2.切片 test1 = ["a","b","c",&q ...

  7. Exception (2) Java Exception Handling

    The Java programming language uses exceptions to handle errors and other exceptional events.An excep ...

  8. A Multi-Sensorial Simultaneous Localization and Mapping (SLAM) System for Low-Cost Micro Aerial Vehicles in GPS-Denied Environments

    A Multi-Sensorial Simultaneous Localization and Mapping (SLAM) System for Low-Cost Micro Aerial Vehi ...

  9. C/C++ Pthread线程

    线程按照其调度者可以分为用户级线程和核心级线程两种 用户级线程主要解决的是上下文切换的问题,它的调度算法和调度过程全部由用户自行选择决定,在运行时不需要特定的内核支持: 我们常用基本就是用户级线程,所 ...

  10. BZOJ 1977 严格次小生成树

    小C最近学了很多最小生成树的算法,Prim算法.Kurskal算法.消圈算法等等.正当小C洋洋得意之时,小P又来泼小C冷水了.小P说,让小C求出一个无向图的次小生成树,而且这个次小生成树还得是严格次小 ...