TaskController.class.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. <?php
  2. namespace Api\Controller;
  3. use Think\Controller;
  4. class TaskController extends Controller{
  5. public function __construct(){
  6. parent::__construct();
  7. include_once('PHPExcel.php');
  8. require_once('PHPExcel/IOFactory.php');
  9. }
  10. public function index(){
  11. $inputFileType = 'Excel2007';
  12. $objPHPExcel = new \PHPExcel();
  13. $path = './Uploads/tmp/words.xlsx';
  14. $reader = \PHPExcel_IOFactory::createReader('Excel2007');
  15. $reader->setReadDataOnly(true);
  16. while(1){
  17. $r=M('import')->limit('0,1')->order('id desc')->where(array('status'=>0))->find();
  18. if($r){
  19. $json=json_decode($r['json'],1);
  20. exec('unzip -o ./Uploads/zip/'.$json['file'].' -d ./Uploads/tmp/');
  21. $objPHPExcel = $reader->load($path);
  22. $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
  23. $sheet = $objPHPExcel->getSheet(0);
  24. $highestRow = $sheet->getHighestRow();
  25. $arr=array();
  26. $err=array();
  27. foreach($sheetData as $k=>$v){
  28. if($k<=1)continue;
  29. if(!$v['A'])continue;
  30. $data=array();
  31. $edit=0;
  32. $data['course_id'] = $json['course_id'];
  33. $data['words_name']=$v['A'];
  34. $info = M('Words')->where(array('words_name'=>$data['words_name'],'course_id'=>$json['course_id']))->find();
  35. if($info){
  36. $edit=$info['words_id'];
  37. //$err[]=$data['words_name'].'已经存在';
  38. }
  39. $info=$this->dict($data['words_name']);
  40. if($info['code']==0){
  41. foreach($info['data']['ps'] as $m=>$n){
  42. if($m>2)break;
  43. $data['words_read'.($m+1)]='['.$n.']';
  44. }
  45. foreach($info['data']['pron'] as $m=>$n){
  46. if($m>2)break;
  47. $data['words_voice'.($m+1)]=$n;
  48. }
  49. foreach($info['data']['pos'] as $m=>$n){
  50. $data['words_'.$n[0]]=$n[1];
  51. }
  52. foreach($info['data']['sent'] as $m=>$n){
  53. if($m>2)break;
  54. $data['jz_en'.($m+1)]=$n[0];
  55. $data['jz_cn'.($m+1)]=$n[1];
  56. }
  57. }
  58. $data['words_similar']=$v['B'];
  59. $data['similar_cn']=$v['C'];
  60. $data['annotation_cn']=$v['D'];
  61. if($v['E'])$data['words_n']=$v['E'];
  62. if($v['F'])$data['words_pron']=$v['F'];
  63. if($v['G'])$data['words_adj']=$v['G'];
  64. if($v['H'])$data['words_num']=$v['H'];
  65. if($v['I'])$data['words_v']=$v['I'];
  66. if($v['J'])$data['words_adv']=$v['J'];
  67. if($v['K'])$data['words_art']=$v['K'];
  68. if($v['L'])$data['words_prep']=$v['L'];
  69. if($v['M'])$data['words_conj']=$v['M'];
  70. if($v['N'])$data['words_int']=$v['N'];
  71. if($v['O'])$data['words_vt']=$v['O'];
  72. if($v['P'])$data['words_vi']=$v['P'];
  73. if($v['Q'])$data['words_other']=$v['Q'];
  74. if($v['R'])$data['jz_en1']=$v['R'];
  75. if($v['S'])$data['jz_cn1']=$v['S'];
  76. if($v['T'])$data['jz_en2']=$v['T'];
  77. if($v['U'])$data['jz_cn2']=$v['U'];
  78. if($v['V'])$data['jz_en3']=$v['V'];
  79. if($v['W'])$data['jz_cn3']=$v['W'];
  80. $t_path='./Uploads/tmp/img/'.$data['words_name'];
  81. if (is_dir($t_path)){
  82. $t_arr=array();
  83. $files = scandir($t_path);
  84. foreach ($files as $file) {
  85. if($file != '.' && $file != '..'){
  86. $info = pathinfo($t_path.'/'.$file);
  87. $ext_suffix = $info['extension'];
  88. $new_filename = date('YmdHis',time()).rand(100,1000).'.'.$ext_suffix;
  89. $new_dir='Uploads/'.date('Y-m-d',time()).'/';
  90. if (!is_dir($new_dir)){
  91. mkdir($new_dir,0777,true);
  92. }
  93. rename($t_path.'/'.$file,$new_dir.$new_filename);
  94. $t_arr[]="http://www.hanlinyuanonline.com/".$new_dir.$new_filename;
  95. }
  96. }
  97. $data['words_img']=implode(',',$t_arr);
  98. }
  99. //if($err)continue;
  100. if($edit){
  101. M('Words')->where(array('words_id'=>$edit))->save($data);
  102. }else{
  103. $wordsId = M('Words')->add($data);
  104. M('Course')->where(array('course_id'=>$json['course_id']))->setInc('course_num');
  105. }
  106. }
  107. $arr=array('status'=>1,'note'=>'导入成功');
  108. if($err){
  109. $arr['note']="导入失败,原因如下:\n".implode(',',$err);
  110. }
  111. M('import')->where(array('id'=>$r['id']))->save($arr);
  112. exec('rm -rf ./Uploads/tmp/*');
  113. }
  114. sleep(1);
  115. }
  116. }
  117. //获取单词信息接口
  118. private function dict($wordsName){
  119. $wordsFields = array('n','pron','adj','num','v','adv','art','prep','conj','int','vt','vi','other',);
  120. $httpCurl = new \Org\Net\HttpCurl();
  121. $url = C('TRANS').'&w='.$wordsName;
  122. $res = $httpCurl->get($url,'xml');
  123. $res = json_decode(json_encode(simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
  124. /* $url = C('TRANS').'&type=json&w='.$wordsName;
  125. $res = $httpCurl->get($url); */
  126. if (!isset($res['key'])){
  127. return array('code'=>1);
  128. }
  129. if (isset($res['ps'])){
  130. if (!is_array($res['ps'])){
  131. $data['data']['ps'][] = $res['ps'];
  132. }else{
  133. $data['data']['ps'] = $res['ps'];
  134. }
  135. }else{
  136. $data['data']['ps'] = array();
  137. }
  138. if (isset($res['pron'])){
  139. if (!is_array($res['pron'])){
  140. $data['data']['pron'][] = $res['pron'];
  141. }else{
  142. $data['data']['pron'] = $res['pron'];
  143. }
  144. /* $data['data']['pron'] = array(
  145. 'http://res.iciba.com/resource/amp3/0/0/c4/7d/c47d187067c6cf953245f128b5fde62a.mp3',
  146. 'http://res.iciba.com/resource/amp3/0/0/34/d1/34d1f91fb2e514b8576fab1a75a89a6b.mp3'
  147. ); */
  148. }else{
  149. $data['data']['pron'] = array();
  150. }
  151. if (isset($res['pos']) && !empty($res['pos'])){
  152. if (is_array($res['pos'])){
  153. foreach ($res['pos'] as $k=>$v){
  154. $key = str_replace('.', '', $v);
  155. if (!in_array($key, $wordsFields)){
  156. $pos[] = array('other', trim($res['acceptation'][$k]));
  157. }else{
  158. $pos[] = array($key, trim($res['acceptation'][$k]));
  159. }
  160. }
  161. }else{
  162. $key = str_replace('.', '', $res['pos']);
  163. //$pos[] = array(str_replace('.', '', $res['pos']),trim($res['acceptation']));
  164. if (!in_array($key, $wordsFields)){
  165. $pos[] = array('other', trim($res['acceptation']));
  166. }else{
  167. $pos[] = array($key, trim($res['acceptation']));
  168. }
  169. /* if (isset($wordsKeys[str_replace('.', '', $res['pos'])])){
  170. $pos[] = array(str_replace('.', '', $res['pos']),trim($res['acceptation']));
  171. }else{
  172. $pos[] = array('words_other',trim($res['acceptation']));
  173. } */
  174. }
  175. $data['data']['pos'] = $pos;
  176. }else{
  177. $pos[] = array('other', trim($res['acceptation']));
  178. $data['data']['pos'] = $pos;
  179. }
  180. if (isset($res['sent'])){
  181. if (empty($res['sent'][0])){
  182. $sent[] = array(trim($res['sent']['orig']),trim($res['sent']['trans']));
  183. }else{
  184. foreach ($res['sent'] as $k=>$v){
  185. if ($k>2){
  186. continue;
  187. }
  188. $sent[] = array(trim($v['orig']),trim($v['trans']));
  189. }
  190. }
  191. $data['data']['sent'] = $sent;
  192. }
  193. $data['code'] = 0;
  194. return $data;
  195. }
  196. public function export(){
  197. while(1){
  198. //$this->excel('course');
  199. exec("rm -rf export/*");
  200. $course = M('course')->where(array('is_delete'=>1,'course_source'=>1,'course_flag'=>1))->select();
  201. foreach($course as $k=>$v){
  202. $path='export/'.$v['course_name'];
  203. mkdir($path,0777,true);
  204. mkdir($path.'/img',0777,true);
  205. $words=M('words')->field('words_name,words_similar,similar_cn,annotation_cn,words_n,words_pron,words_adj,words_num,words_v,words_adv,words_art,words_prep,words_conj,words_int,words_vt,words_vi,words_other,jz_en1,jz_cn1,jz_en2,jz_cn2,jz_en3,jz_cn3,words_img')->where(array('is_delete'=>1,'course_id'=>$v['course_id']))->select();
  206. foreach($words as $m=>$n){
  207. $words[$m]['words_name']=$n['words_name']=htmlspecialchars_decode($n['words_name']);
  208. if($n['words_img']){
  209. $img_path=$path.'/img/'.$n['words_name'];
  210. mkdir($img_path,0777,true);
  211. $tmp=explode(',',$n['words_img']);
  212. foreach($tmp as $x=>$y){
  213. $file=str_replace('http://www.hanlinyuanonline.com/','',$y);
  214. $info = pathinfo($file);
  215. $ext_suffix = $info['extension'];
  216. copy($file,$img_path.'/'.$n['words_name'].($x+1).'.'.$ext_suffix);
  217. }
  218. }
  219. unset($words[$m]['words_img']);
  220. $words[$m]['words_read1']='';
  221. $words[$m]['words_read2']='';
  222. $words[$m]['words_read3']='';
  223. $words[$m]['words_voice1']='';
  224. $words[$m]['words_voice2']='';
  225. $words[$m]['words_voice3']='';
  226. /*
  227. $words[$m]['words_n']='';
  228. $words[$m]['words_pron']='';
  229. $words[$m]['words_adj']='';
  230. $words[$m]['words_num']='';
  231. $words[$m]['words_v']='';
  232. $words[$m]['words_adv']='';
  233. $words[$m]['words_art']='';
  234. $words[$m]['words_prep']='';
  235. $words[$m]['words_conj']='';
  236. $words[$m]['words_int']='';
  237. $words[$m]['words_vt']='';
  238. $words[$m]['words_vi']='';
  239. $words[$m]['words_other']='';
  240. $words[$m]['jz_en1']='';
  241. $words[$m]['jz_cn1']='';
  242. $words[$m]['jz_en2']='';
  243. $words[$m]['jz_cn2']='';
  244. $words[$m]['jz_en3']='';
  245. $words[$m]['jz_cn3']='';
  246. */
  247. }
  248. $this->excel($words,$path);
  249. }
  250. unlink('./export.zip');
  251. exec("zip -r export.zip export/");
  252. echo "over\n";
  253. sleep(3600*24);
  254. }
  255. }
  256. private function excel($words,$path){
  257. ini_set("memory_limit","1024M");
  258. //使用模板
  259. $template = './template/words.xlsx';
  260. //加载excel文件,设置模板
  261. $objPHPExcel = \PHPExcel_IOFactory::load($template);
  262. //获得当前sheet对象
  263. $PHPSheet = $objPHPExcel->getActiveSheet();
  264. $fileName = $path."/words.xlsx";
  265. $PHPSheet->setTitle("Sheet1");
  266. //插入数据从第二行开始
  267. $startRow = 2;
  268. foreach ($words as $k=>$v) {
  269. $sign = 'A';
  270. foreach($v as $m=>$n){
  271. $PHPSheet->setCellValue($sign.$startRow,$n);
  272. $sign++;
  273. }
  274. $startRow++;
  275. }
  276. //选择写入格式
  277. $PHPWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  278. //判断文件是否已存在,存在就删除
  279. if (file_exists($fileName)) {
  280. unlink($fileName);
  281. }
  282. //保存文件
  283. $PHPWriter->save($fileName);
  284. }
  285. }