ApiController.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: smartcost
  5. * Date: 2016/12/13
  6. * Time: 11:56
  7. */
  8. class ApiController extends DooController {
  9. /**
  10. * 共用报表信息调用接口,根据领取码获取项目报表列表
  11. *
  12. */
  13. public function ReportMsg(){
  14. Doo::loadModel('report');
  15. $report = new Report();
  16. $name = '';
  17. $addsql = isset($this->params['update']) && $this->params['update'] == 'all' ? '' : ' AND `fc_report`.itemid=0';
  18. if(isset($_POST['itemcode'])){
  19. Doo::loadModel('item');
  20. $items = new Item();
  21. $itemmsg = $items->getRowbyCode($_POST['itemcode']);
  22. $name = '项目';
  23. if(!empty($itemmsg)){
  24. $addsql = ' AND `fc_report`.itemid='.$itemmsg['itemid'];
  25. }else{
  26. $arr = array('status' => 'true', 'msg' => '当前'.$name.'报表为空', 'info' => '');
  27. echo $this->decodeUnicode(json_encode($arr));
  28. exit;
  29. }
  30. }
  31. if(isset($_POST['areacate']) && is_numeric($_POST['areacate'])){
  32. $addsql .= ' AND (`fc_report`.areacate=3 OR `fc_report`.areacate='.$_POST['areacate'].')';
  33. }
  34. $sql = 'SELECT `fc_report`.reportid,reportname,areacate,cateid,parentid,`fc_report`.edittime,`fc_report`.itemid FROM `fc_report` left join `fc_version` on `fc_report`.reportid=`fc_version`.reportid where `fc_report`.reportid=`fc_version`.reportid'.$addsql.' and `fc_version`.status=2 group by `fc_report`.reportid order by `fc_report`.edittime desc';
  35. $query = Doo::db ()->query ( $sql );
  36. $reportlist = $query->fetchAll ();
  37. if(!empty($reportlist)){
  38. foreach ($reportlist as $k => $v) {
  39. Doo::loadModel('category');
  40. $category = new Category();
  41. if($v['parentid'] != 0){
  42. $catename = $category->getnamebyid($v['parentid']).'/'.$category->getnamebyid($v['cateid']);
  43. }else{
  44. $catename = $category->getnamebyid($v['cateid']);
  45. }
  46. $reportlist[$k]['catename'] = $catename;
  47. $reportlist[$k]['edittime'] = date('YmdHis',$v['edittime']);
  48. Doo::loadModel('version');
  49. $versions = new Version();
  50. $reportlist[$k]['desc'] = $versions->getRowbyVername(date('YmdHis',$v['edittime']))['content'];
  51. unset($reportlist[$k]['cateid']);
  52. unset($reportlist[$k]['parentid']);
  53. }
  54. $arr = array('status' => 'true', 'msg' => '', 'info' => $reportlist);
  55. echo $this->decodeUnicode(json_encode($arr));
  56. exit;
  57. }
  58. $arr = array('status' => 'true', 'msg' => '当前'.$name.'报表为空', 'info' => '');
  59. echo $this->decodeUnicode(json_encode($arr));
  60. exit;
  61. }
  62. /*
  63. * 报表更新调用接口
  64. *
  65. */
  66. public function GetUpdateReport(){
  67. Doo::loadModel('report');
  68. $report = new Report();
  69. if(isset($_POST['idlist'])){
  70. $idlist = explode(',',$_POST['idlist']);
  71. $infoarr = array();
  72. foreach($idlist as $k => $v){
  73. $reportmsg = $report->getRowbyid($v);
  74. $infoarr[$k]['id'] = $v;
  75. $infoarr[$k]['edittime'] = !empty($reportmsg) ? date('YmdHis',$reportmsg['edittime']) : '';
  76. }
  77. $arr = array('status' => 'true', 'msg' => '', 'info' => $infoarr);
  78. echo $this->decodeUnicode(json_encode($arr));
  79. exit;
  80. }else{
  81. $arr = array('status' => 'false', 'msg' => '传递的参数有误', 'info' => '');
  82. echo $this->decodeUnicode(json_encode($arr));
  83. exit;
  84. }
  85. }
  86. /**
  87. * 下载最新报表或对应版本报表
  88. *
  89. */
  90. public function DownloadReport(){
  91. if(isset($this->params['reportid']) && is_numeric($this->params['reportid'])){
  92. Doo::loadModel('version');
  93. $version = new Version();
  94. if(isset($this->params['version'])){
  95. $vermsg = $version->getOne(array('select' => 'verid,addtime', 'where' => 'status!=0 and reportid='.$this->params['reportid'].' and vername="'.$this->params['version'].'"', 'desc' => 'addtime', 'asArray' => TRUE));
  96. }else{
  97. $vermsg = $version->getOne(array('select' => 'verid,addtime', 'where' => 'status!=0 and reportid='.$this->params['reportid'], 'desc' => 'addtime', 'asArray' => TRUE));
  98. }
  99. if(!empty($vermsg)){
  100. include (DOO::conf()->SITE_PATH . 'protected/plugin/io.han.php');
  101. $this->IoHandler = new IoHandler();
  102. $baseurl = '/opt/www/vc/';
  103. $verurl = $this->params['reportid'].'/'.$vermsg['verid'].'_'.date('YmdHis',$vermsg['addtime']);
  104. $vername = $baseurl."jlbb/".$verurl.'.xml';
  105. if($this->IoHandler->ReadFile($vername)){
  106. $arr = array('status' => 'true', 'msg' => '', 'info' => array('downloadurl' => Doo::conf()->APP_URL.'api/getxml/'.$verurl.'/'.filesize($vername)));
  107. echo $this->decodeUnicode(json_encode($arr));
  108. exit;
  109. }else{
  110. $arr = array('status' => 'false', 'msg' => '本报表不存在下载地址', 'info' => '');
  111. echo $this->decodeUnicode(json_encode($arr));
  112. exit;
  113. }
  114. }else{
  115. $arr = array('status' => 'false', 'msg' => '当前报表不存在版本信息,无法下载', 'info' => '');
  116. echo $this->decodeUnicode(json_encode($arr));
  117. exit;
  118. }
  119. }else{
  120. $arr = array('status' => 'false', 'msg' => '请传入报表id值', 'info' => '');
  121. echo $this->decodeUnicode(json_encode($arr));
  122. exit;
  123. }
  124. }
  125. /**
  126. * 获取报表最近3个版本
  127. *
  128. */
  129. public function VersionMsg(){
  130. if(isset($this->params['reportid']) && is_numeric($this->params['reportid']) ){
  131. Doo::loadModel('version');
  132. $version = new Version();
  133. $verlist = $version->find(array('select' => 'verid,vername,content,addtime', 'where' => 'status=2 and reportid='.$this->params['reportid'], 'desc' => 'addtime','limit' => 3, 'asArray' => TRUE));
  134. if(!empty($verlist)){
  135. include (DOO::conf()->SITE_PATH . 'protected/plugin/io.han.php');
  136. $this->IoHandler = new IoHandler();
  137. foreach($verlist as $k => $v){
  138. $baseurl = '/opt/www/vc/';
  139. $verurl = $this->params['reportid'].'/'.$v['verid'].'_'.date('YmdHis',$v['addtime']);
  140. $vername = $baseurl."jlbb/".$verurl.'.xml';
  141. if($this->IoHandler->ReadFile($vername)){
  142. $verlist[$k]['downloadurl'] = Doo::conf()->APP_URL.'api/getxml/'.$verurl.'/'.filesize($vername);
  143. }else{
  144. $arr = array('status' => 'false', 'msg' => $v['vername'].'版本不存在下载地址', 'info' => '');
  145. echo $this->decodeUnicode(json_encode($arr));
  146. exit;
  147. }
  148. unset($verlist[$k]['verid']);
  149. unset($verlist[$k]['addtime']);
  150. }
  151. $arr = array('status' => 'true', 'msg' => '', 'info' => $verlist);
  152. echo $this->decodeUnicode(json_encode($arr));
  153. exit;
  154. }else{
  155. $arr = array('status' => 'false', 'msg' => '本报表不存在版本信息', 'info' => '');
  156. echo $this->decodeUnicode(json_encode($arr));
  157. exit;
  158. }
  159. }else{
  160. $arr = array('status' => 'false', 'msg' => '请传入报表id值', 'info' => '');
  161. echo $this->decodeUnicode(json_encode($arr));
  162. exit;
  163. }
  164. }
  165. public function DownloadUrl(){
  166. $pathf = '/opt/www/vc/jlbb/';
  167. $reportid = $this->params['reportid'];
  168. $xmlname = $this->params['xml'];
  169. $size = $this->params['filesize'];
  170. $url = $pathf.'/'.$reportid.'/'.$xmlname.'.xml';
  171. $this->file_down($url,$xmlname,$size);
  172. exit;
  173. }
  174. /**
  175. * 文件下载
  176. * @param $filepath 文件路径
  177. * @param $filename 文件名称
  178. */
  179. function file_down($filepath, $filename = '', $filesize, $filetype = 'xml') {
  180. if (ob_get_length() !== false)
  181. @ob_end_clean();
  182. header('Pragma: public');
  183. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  184. header('Cache-Control: no-store, no-cache, must-revalidate');
  185. header('Cache-Control: pre-check=0, post-check=0, max-age=0');
  186. header('Content-Transfer-Encoding: binary');
  187. header('Content-Encoding: none');
  188. header('Content-type: ' . $filetype);
  189. header('Content-Disposition: attachment; filename="' . iconv("UTF-8", "GBK", $filename ). '.' . $filetype .'"');
  190. header('Content-length: ' . $filesize);
  191. @readfile($filepath);
  192. exit;
  193. }
  194. function decodeUnicode($str) {
  195. return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
  196. create_function(
  197. '$matches',
  198. 'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
  199. ),
  200. $str);
  201. }
  202. }