ApiController.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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. Doo::loadModel('category');
  77. $category = new Category();
  78. if($reportmsg['parentid'] != 0){
  79. $catename = $category->getnamebyid($reportmsg['parentid']).'/'.$category->getnamebyid($reportmsg['cateid']);
  80. }else{
  81. $catename = $category->getnamebyid($reportmsg['cateid']);
  82. }
  83. $infoarr[$k]['catename'] = $catename;
  84. Doo::loadModel('version');
  85. $versions = new Version();
  86. $content = $versions->getRowbyVername($infoarr[$k]['edittime'])['content'];
  87. $infoarr[$k]['desc'] = !empty($content) ? $content : '';
  88. }
  89. $arr = array('status' => 'true', 'msg' => '', 'info' => $infoarr);
  90. echo $this->decodeUnicode(json_encode($arr));
  91. exit;
  92. }else{
  93. $arr = array('status' => 'false', 'msg' => '传递的参数有误', 'info' => '');
  94. echo $this->decodeUnicode(json_encode($arr));
  95. exit;
  96. }
  97. }
  98. /**
  99. * 下载最新报表或对应版本报表
  100. *
  101. */
  102. public function DownloadReport(){
  103. if(isset($this->params['reportid']) && is_numeric($this->params['reportid'])){
  104. Doo::loadModel('version');
  105. $version = new Version();
  106. if(isset($this->params['version'])){
  107. $vermsg = $version->getOne(array('select' => 'verid,addtime', 'where' => 'status!=0 and reportid='.$this->params['reportid'].' and vername="'.$this->params['version'].'"', 'desc' => 'addtime', 'asArray' => TRUE));
  108. }else{
  109. $vermsg = $version->getOne(array('select' => 'verid,addtime', 'where' => 'status!=0 and reportid='.$this->params['reportid'], 'desc' => 'addtime', 'asArray' => TRUE));
  110. }
  111. if(!empty($vermsg)){
  112. include (DOO::conf()->SITE_PATH . 'protected/plugin/io.han.php');
  113. $this->IoHandler = new IoHandler();
  114. $baseurl = '/opt/www/vc/';
  115. $verurl = $this->params['reportid'].'/'.$vermsg['verid'].'_'.date('YmdHis',$vermsg['addtime']);
  116. $vername = $baseurl."jlbb/".$verurl.'.xml';
  117. if($this->IoHandler->ReadFile($vername)){
  118. $arr = array('status' => 'true', 'msg' => '', 'info' => array('downloadurl' => Doo::conf()->APP_URL.'api/getxml/'.$verurl.'/'.filesize($vername)));
  119. echo $this->decodeUnicode(json_encode($arr));
  120. exit;
  121. }else{
  122. $arr = array('status' => 'false', 'msg' => '本报表不存在下载地址', 'info' => '');
  123. echo $this->decodeUnicode(json_encode($arr));
  124. exit;
  125. }
  126. }else{
  127. $arr = array('status' => 'false', 'msg' => '当前报表不存在版本信息,无法下载', 'info' => '');
  128. echo $this->decodeUnicode(json_encode($arr));
  129. exit;
  130. }
  131. }else{
  132. $arr = array('status' => 'false', 'msg' => '请传入报表id值', 'info' => '');
  133. echo $this->decodeUnicode(json_encode($arr));
  134. exit;
  135. }
  136. }
  137. /**
  138. * 获取报表最近3个版本
  139. *
  140. */
  141. public function VersionMsg(){
  142. if(isset($this->params['reportid']) && is_numeric($this->params['reportid']) ){
  143. Doo::loadModel('version');
  144. $version = new Version();
  145. $verlist = $version->find(array('select' => 'verid,vername,content,addtime', 'where' => 'status=2 and reportid='.$this->params['reportid'], 'desc' => 'addtime','limit' => 3, 'asArray' => TRUE));
  146. if(!empty($verlist)){
  147. include (DOO::conf()->SITE_PATH . 'protected/plugin/io.han.php');
  148. $this->IoHandler = new IoHandler();
  149. foreach($verlist as $k => $v){
  150. $baseurl = '/opt/www/vc/';
  151. $verurl = $this->params['reportid'].'/'.$v['verid'].'_'.date('YmdHis',$v['addtime']);
  152. $vername = $baseurl."jlbb/".$verurl.'.xml';
  153. if($this->IoHandler->ReadFile($vername)){
  154. $verlist[$k]['downloadurl'] = Doo::conf()->APP_URL.'api/getxml/'.$verurl.'/'.filesize($vername);
  155. }else{
  156. $arr = array('status' => 'false', 'msg' => $v['vername'].'版本不存在下载地址', 'info' => '');
  157. echo $this->decodeUnicode(json_encode($arr));
  158. exit;
  159. }
  160. unset($verlist[$k]['verid']);
  161. unset($verlist[$k]['addtime']);
  162. }
  163. $arr = array('status' => 'true', 'msg' => '', 'info' => $verlist);
  164. echo $this->decodeUnicode(json_encode($arr));
  165. exit;
  166. }else{
  167. $arr = array('status' => 'false', 'msg' => '本报表不存在版本信息', 'info' => '');
  168. echo $this->decodeUnicode(json_encode($arr));
  169. exit;
  170. }
  171. }else{
  172. $arr = array('status' => 'false', 'msg' => '请传入报表id值', 'info' => '');
  173. echo $this->decodeUnicode(json_encode($arr));
  174. exit;
  175. }
  176. }
  177. public function DownloadUrl(){
  178. $pathf = '/opt/www/vc/jlbb/';
  179. $reportid = $this->params['reportid'];
  180. $xmlname = $this->params['xml'];
  181. $size = $this->params['filesize'];
  182. $url = $pathf.'/'.$reportid.'/'.$xmlname.'.xml';
  183. $this->file_down($url,$xmlname,$size);
  184. exit;
  185. }
  186. /**
  187. * 文件下载
  188. * @param $filepath 文件路径
  189. * @param $filename 文件名称
  190. */
  191. function file_down($filepath, $filename = '', $filesize, $filetype = 'xml') {
  192. if (ob_get_length() !== false)
  193. @ob_end_clean();
  194. header('Pragma: public');
  195. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  196. header('Cache-Control: no-store, no-cache, must-revalidate');
  197. header('Cache-Control: pre-check=0, post-check=0, max-age=0');
  198. header('Content-Transfer-Encoding: binary');
  199. header('Content-Encoding: none');
  200. header('Content-type: ' . $filetype);
  201. header('Content-Disposition: attachment; filename="' . iconv("UTF-8", "GBK", $filename ). '.' . $filetype .'"');
  202. header('Content-length: ' . $filesize);
  203. @readfile($filepath);
  204. exit;
  205. }
  206. function decodeUnicode($str) {
  207. return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
  208. create_function(
  209. '$matches',
  210. 'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
  211. ),
  212. $str);
  213. }
  214. }