main_new_version.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. <?php
  2. $max_ec = ini_get('max_execution_time'); //set max_excution_time
  3. ini_set('max_execution_time', '600');
  4. $memory_limit = "";
  5. $action = "";
  6. if (isset($_GET['action']))
  7. $action = strtolower($_GET['action']);
  8. if (isset($_POST['action']))
  9. $action = strtolower($_POST['action']);
  10. include "include.ini.php";
  11. include 'service/ocean_booking.class.php';
  12. include 'service/ocean_order.class.php';
  13. include 'service/operation_log.class.php';
  14. include 'service/search.class.php';
  15. include 'service/column.class.php';
  16. include 'service/ajax.class.php';
  17. include 'service/login.class.php';
  18. include 'service/tools.class.php';
  19. //为了调用,临时做一个登录动作
  20. // $_POST['uname'] = "ra.admin";
  21. // $_POST['psw'] = "abc123456789";
  22. // login::getInstance()->do_login_auto();
  23. //验证路由权限
  24. common::securityCheckHandNew($action);
  25. if (_is_only_vgm()) {
  26. Header("Location:main.php?action=main");
  27. }
  28. error_log("--------------前端请求post参数---------------");
  29. error_log(utils::jsonFiltration("null", "\"\"", json_encode($_POST)));
  30. error_log("--------------前端请求get参数---------------");
  31. error_log(utils::jsonFiltration("null", "\"\"", json_encode($_GET)));
  32. //Operation log 日志记录
  33. utils::operation_log_records();
  34. switch ($action) {
  35. case 'ocean_booking':
  36. ocean_booking::getInstance()->ocean_booking();
  37. break;
  38. case 'ocean_order':
  39. include ONLINE_ROOT . 'libs' . DS . 'ams_config.ini.php';
  40. ocean_order::getInstance()->ocean_order();
  41. break;
  42. case 'ajax':
  43. echo ajax::getInstance()->run();
  44. break;
  45. case 'opreation_log':
  46. echo operation_log::getInstance()->operation_log();
  47. break;
  48. case 'main':
  49. $menuList = array();
  50. $menuList[] = array("index"=>'1',"label"=>"Dashboard","icon"=>"icon_data_fill_b","path"=>"/dashboard");
  51. $menuList[] = array("index"=>'3',"label"=>"Booking","icon"=>"icon_booking__fill_b","path"=>"/booking");
  52. $menuList[] = array("index"=>'4',"label"=>"Tracking","icon"=>"icon_tracking__fill_b","path"=>"/tracking");
  53. if(_isApexLogin()){
  54. $menuList[] = array("index"=>'6',"label"=>"System Management","icon"=>"icon_system__management_fill_b","type"=>"list",
  55. "children"=>array(array("index" =>'5-4',"label" =>"Operation Log","path"=>"/Operationlog")));
  56. }
  57. common::echo_json_encode(200, $menuList);
  58. exit();
  59. break;
  60. case 'main_report':
  61. $type = $_REQUEST["r_type"];
  62. $container_type = $_REQUEST["container_type"];
  63. if (empty($_REQUEST["b_date"])) {
  64. $bdate = "null";
  65. } else {
  66. $bdate = $_REQUEST["b_date"];
  67. $bdate = "'$bdate'";
  68. }
  69. if (empty($_REQUEST["e_date"])) {
  70. $edate = "null";
  71. } else {
  72. $edate = $_REQUEST["e_date"];
  73. $edate = "'$edate'";
  74. }
  75. //Demo测试数据 日期全为空 :前端是由日期过来来的
  76. //$edate = "null";
  77. //$bdate = "null";
  78. $sqlWhere = ' and ' . common::searchExtendHandNew("ocean", $_SESSION["ONLINE_USER"]);
  79. $sqlWhere = common::check_input($sqlWhere);
  80. $sqlWhere = " " . $sqlWhere;
  81. //online_order_status_date_new 与本地的区分,发布上去这去掉new
  82. $list = common::excuteListSql("select * from public.online_order_status_date('$type'::text, 'eta'::text, 'etd'::text, $bdate, $edate, '$sqlWhere'::text, '$container_type'::text) "
  83. . "r (c bigint, e integer, b integer, d text)");
  84. $key = "[";
  85. $value = "[";
  86. $totalValue = 0;
  87. foreach ($list as $vv) {
  88. if ($key != "[") {
  89. $key .= ",";
  90. $value .= ",";
  91. }
  92. if ($type == "r2" || $type == "r3" || $type == "r3_1" || $type == "r4" || $type == "r4_1") {
  93. $key .= '"' . $vv["d"] . '"';
  94. $value .= '{"value":"' . $vv["c"] . '","name":"' . $vv["d"] . '" }';
  95. $totalValue = $totalValue + $vv["c"];
  96. } else {
  97. if ($vv["e"] == -1) {
  98. $key .= '"Over 80 Days"';
  99. $value .= '{"value":"' . $vv["c"] . '","name":"Over 80 Days"}';
  100. } else {
  101. $key .= '"' . $vv["b"] . '-' . $vv["e"] . ' Days"';
  102. $value .= '{"value":"' . $vv["c"] . '","name":"' . $vv["b"] . '-' . $vv["e"] . ' Days"}';
  103. }
  104. $totalValue = $totalValue + $vv["c"];
  105. }
  106. }
  107. $key .= "]";
  108. $value .= "]";
  109. //处理返回原表数据格式
  110. $data = common::mian_repot_do($value,$type,$totalValue);
  111. common::echo_json_encode(200, $data);
  112. exit();
  113. break;
  114. case 'main_report_kpi':
  115. $type = $_REQUEST["r_type"];
  116. $container_type = $_REQUEST["container_type"];
  117. if (empty($_REQUEST["b_date"])) {
  118. $bdate = "null";
  119. } else {
  120. $bdate = $_REQUEST["b_date"];
  121. $bdate = "'$bdate'";
  122. }
  123. if (empty($_REQUEST["e_date"])) {
  124. $edate = "null";
  125. } else {
  126. $edate = $_REQUEST["e_date"];
  127. $edate = "'$edate'";
  128. }
  129. //Demo测试数据 日期全为空
  130. //$edate = "null";
  131. //$bdate = "null";
  132. $sqlWhere = ' and ' . common::searchExtendHandNew("ocean", $_SESSION["ONLINE_USER"]);
  133. $sqlWhere = common::check_input($sqlWhere);
  134. $sqlWhere = " " . $sqlWhere;
  135. $list = common::excuteListSql("select * from public.online_order_status_date_kpi_new('$type'::text,'$sqlWhere'::text) "
  136. . "r (c bigint, d text)");
  137. $key = "[";
  138. $value = "[";
  139. $totalValue = 0;
  140. foreach ($list as $vv) {
  141. if ($key != "[") {
  142. $key .= ",";
  143. $value .= ",";
  144. }
  145. if ($type == "ata_r3" || $type == "atd_r4" ) {
  146. $key .= '"' . $vv["d"] .'"';
  147. $value .= '{"value":"' . $vv["c"] . '","name":"' . $vv["d"] .'"}';
  148. $totalValue = $totalValue + $vv["c"];
  149. }
  150. }
  151. $key .= "]";
  152. $value .= "]";
  153. //处理返回原表数据格式
  154. $ETDList = array();
  155. $value_arr = json_decode($value,true);
  156. foreach($value_arr as $arr){
  157. $color = common::getItemStyle($type,$arr['name']);
  158. $ETDList[] = array("value" =>intval($arr['value']),"name" =>$arr['name'],"itemStyle" =>array("color" =>$color));
  159. }
  160. if($type == 'atd_r4'){
  161. $data = array("ETDList" =>$ETDList,"ETD_Radius"=>array('30%','50%'),"title1" =>"Departure","title2" =>"(ATD-ETD)");
  162. }
  163. if($type == 'ata_r3'){
  164. $data = array("ETDList" =>$ETDList,"ETD_Radius"=>array('30%','50%'),"title1" =>"Arrival","title2" =>"(ATD-ETD)");
  165. }
  166. common::echo_json_encode(200, $data);
  167. exit();
  168. break;
  169. case 'main_report_container_bar':
  170. //新UI 要ALL 20 40 45 四份数据同时查询,且是柱状图,所以与r3 r4查询分开
  171. $container_type_arr = array("20","40","45");
  172. $container_type_param = $_REQUEST["container_type"];
  173. $ContainerCounSeries = array();
  174. foreach($container_type_arr as $_container_type){
  175. $container_type = $_container_type;
  176. $type = $_REQUEST["r_type"];
  177. if (empty($_REQUEST["b_date"])) {
  178. $bdate = "null";
  179. } else {
  180. $bdate = $_REQUEST["b_date"];
  181. $bdate = "'$bdate'";
  182. }
  183. if (empty($_REQUEST["e_date"])) {
  184. $edate = "null";
  185. } else {
  186. $edate = $_REQUEST["e_date"];
  187. $edate = "'$edate'";
  188. }
  189. $list= array();
  190. //all 查询所有
  191. $sqlWhere = ' and ' . common::searchExtendHandNew("ocean", $_SESSION["ONLINE_USER"]);
  192. $sqlWhere = common::check_input($sqlWhere);
  193. $sqlWhere = " " . $sqlWhere;
  194. //如果页面查询的是ALL 这个20 40 45都查询出来。否则值查询都对应的size,其他的不查询
  195. if(strtolower($container_type_param) == "all"){
  196. $list = common::excuteListSql("select * from public.online_order_status_date('$type'::text, 'eta'::text, 'etd'::text, $bdate, $edate, '$sqlWhere'::text, '$container_type'::text) "
  197. . "r (c bigint, e integer, b integer, d text)");
  198. }else{
  199. if($container_type_param == $_container_type){
  200. $list = common::excuteListSql("select * from public.online_order_status_date('$type'::text, 'eta'::text, 'etd'::text, $bdate, $edate, '$sqlWhere'::text, '$container_type'::text) "
  201. . "r (c bigint, e integer, b integer, d text)");
  202. }
  203. }
  204. $key = "[";
  205. $value = "[";
  206. $totalValue = 0;
  207. foreach ($list as $vv) {
  208. if ($key != "[") {
  209. $key .= ",";
  210. $value .= ",";
  211. }
  212. if ($type == "r2" || $type == "r3" || $type == "r3_1" || $type == "r4" || $type == "r4_1") {
  213. $key .= '"' . $vv["d"] . '"';
  214. $value .= '{"value":"' . $vv["c"] . '","name":"' . $vv["d"] . '" }';
  215. $totalValue = $totalValue + $vv["c"];
  216. } else {
  217. if ($vv["e"] == -1) {
  218. $key .= '"Over 80 Days"';
  219. $value .= '{"value":"' . $vv["c"] . '","name":"Over 80 Days"}';
  220. } else {
  221. $key .= '"' . $vv["b"] . '-' . $vv["e"] . ' Days"';
  222. $value .= '{"value":"' . $vv["c"] . '","name":"' . $vv["b"] . '-' . $vv["e"] . ' Days"}';
  223. }
  224. $totalValue = $totalValue + $vv["c"];
  225. }
  226. }
  227. $key .= "]";
  228. $value .= "]";
  229. $key_arr = json_decode($key,true);
  230. $value_arr = json_decode($value,true);
  231. $data = array();
  232. //每一个size 的所有月份总计
  233. $total = 0;
  234. //每一个size 对应的最大值
  235. $max = 0;
  236. foreach($value_arr as $arr){
  237. $data[] = intval($arr['value']);
  238. $total = $total + intval($arr['value']);
  239. $max = $max < intval($arr['value']) ? intval($arr['value']) : $max;
  240. }
  241. $ContainerCounSeries[$container_type] = array("data"=>$data,"total"=>$total,"max"=>$max);
  242. }
  243. //处理返回时数据格式
  244. $ContainerCounSeries_return = array();
  245. //横坐标栏位
  246. $ContainerCount_Title = $key_arr;
  247. //所查的所有模式计算总和
  248. $total = 0;
  249. //所有size下的最大值,方便标注计算最长的Y坐标
  250. $max_all = 0;
  251. foreach($ContainerCounSeries as $k =>$v){
  252. //这个type 是页面传过来的。这个固定r2
  253. $color = common::getItemStyle($type,$k);
  254. $total = $total + $v['total'];
  255. $ContainerCounSeries_return[] = array("name"=>strval($k),"type"=>"bar","emphasis" => array("focus" =>"none"),
  256. "stack" =>"总计","data" =>$v['data'],"itemStyle" =>array("color" =>$color));
  257. $max_all = $max_all + $v['max'];
  258. }
  259. //计算Y坐标的间隔
  260. $interval = utils::calculateTicks(0,$max_all,5);
  261. if($interval == 0){
  262. //处理返回默认值
  263. $interval = 2;
  264. }
  265. $returnData = array("ContainerCount_Title"=>"Total: $total","ContainerCountList" =>$ContainerCount_Title,"ContainerCounSeries" =>$ContainerCounSeries_return,
  266. "min" => 0,"Max" =>$interval*5,"interval" =>$interval);
  267. //demo
  268. // $json = '{"code":200,"data":{"ContainerCount_Title":"Total: 463518","ContainerCountList":["OCT,23","NOV,23","DEC,23","JAN,24","FEB,24","MAR,24","APR,24","MAY,24","JUN,24","JUL,24","AUG,24","SEP,24","OCT,24"],"ContainerCounSeries":[{"name":"20","type":"bar","emphasis":{"focus":"none"},"stack":"\u603b\u8ba1","data":[4400,8600,8804,9271,8961,8793,8534,9476,9530,10277,10081,8997,5784],"itemStyle":{"color":"#FF7500"}},{"name":"40","type":"bar","emphasis":{"focus":"none"},"stack":"\u603b\u8ba1","data":[13652,28021,30422,30136,26320,27035,23979,26494,28406,33318,32318,30962,16369],"itemStyle":{"color":"#FFAC66"}},{"name":"45","type":"bar","emphasis":{"focus":"none"},"stack":"\u603b\u8ba1","data":[189,337,415,437,439,321,250,320,324,603,328,415,200],"itemStyle":{"color":"#FFE3CC"}}],"min":0,"Max":45000,"interval":9000}}';
  269. // $returnData = json_decode($json,true);
  270. // echo json_encode($returnData);
  271. // exit();
  272. common::echo_json_encode(200, $returnData);
  273. exit();
  274. break;
  275. case 'main_report_co2e_bar':
  276. $returnData = common::getCo2eBar();
  277. common::echo_json_encode(200, $returnData);
  278. exit();
  279. break;
  280. case 'main_report_top10_bar':
  281. $returnData = common::getTopBar();
  282. common::echo_json_encode(200, $returnData);
  283. exit();
  284. break;
  285. case 'main_map':
  286. $uncode = $_POST["uncode"];
  287. $serial_no = $_POST["serial_no"];
  288. $unall = explode("|", $uncode);
  289. $sql = "";
  290. if (!empty($unall[0]) && $unall[0] != "''") {
  291. $sql .= "select lon as lng, lat as lat, uncode, 'Place of receipt: '||name1 as location_namewo, 'por' as type from vessel.vt_unlocode where "
  292. . "lon<>0 and lat<>0 and lon is not null and lat is not null and uncode in "
  293. . "($unall[0])";
  294. }
  295. if (!empty($unall[1]) && $unall[1] != "''") {
  296. if (!empty($sql)) {
  297. $sql .= " union ";
  298. }
  299. $sql .= "select lon as lng, lat as lat, uncode, 'POL: '||name1 as location_namewo, 'pol' as type from vessel.vt_unlocode where "
  300. . "lon<>0 and lat<>0 and lon is not null and lat is not null and uncode in "
  301. . "($unall[1])";
  302. }
  303. if (!empty($unall[2]) && $unall[2] != "''") {
  304. if (!empty($sql)) {
  305. $sql .= " union ";
  306. }
  307. $sql .= "select lon as lng, lat as lat, uncode, 'POD: '||name1 as location_namewo, 'pod' as type from vessel.vt_unlocode where "
  308. . "lon<>0 and lat<>0 and lon is not null and lat is not null and uncode in "
  309. . "($unall[2])";
  310. }
  311. if (!empty($unall[3]) && $unall[3] != "''") {
  312. if (!empty($sql)) {
  313. $sql .= " union ";
  314. }
  315. $sql .= "select lon as lng, lat as lat, uncode, 'Place of delivery: '||name1 as location_namewo, 'poe' as type from vessel.vt_unlocode where "
  316. . "lon<>0 and lat<>0 and lon is not null and lat is not null and uncode in "
  317. . "($unall[3])";
  318. }
  319. $tkStatus = common::excuteListSql("select tl.by_pickup, g.consignee_exp, g.pickup_from_exp, c.ctnr, g.deliveryto_exp, g.serial_no, tl.location, tl.type, tl.id,
  320. to_char(tl.upload_time, 'MM/DD/YYYY HH24:MI:SS') as utime
  321. from public.tk_general g, public.tk_commodity c left join public.tk_location tl on c.serial_no=tl.serial_no
  322. where g.serial_no=c.serial_no and g.bol=(select m_bol from public.ocean where serial_no='$serial_no') order by tl.order_id");
  323. foreach ($tkStatus as $vv) {
  324. $ll = explode(",", $vv["location"]);
  325. if ($vv["by_pickup"] == "t") {
  326. $pf = explode("\r\n", $vv["pickup_from_exp"]);
  327. $pf = common::check_input($pf[0]) . "(" . $vv["ctnr"] . ")";
  328. $dt = explode("\r\n", $vv["consignee_exp"]);
  329. $dt = common::check_input($dt[0]) . "(" . $vv["ctnr"] . ")";
  330. } else {
  331. $pf = explode("\r\n", $vv["consignee_exp"]);
  332. $pf = common::check_input($pf[0]) . "(" . $vv["ctnr"] . ")";
  333. $dt = explode("\r\n", $vv["deliveryto_exp"]);
  334. $dt = common::check_input($dt[0]) . "(" . $vv["ctnr"] . ")";
  335. }
  336. if ($vv["type"] == "26" && !empty($ll[1])) {
  337. if (!empty($sql)) {
  338. $sql .= " union ";
  339. }
  340. $sql .= "select '" . $ll[1] . "' as lng, '" . $ll[0] . "' as lat, '" . $vv["ctnr"] . "' as uncode, 'Pick up: " . $vv["utime"] . "<br>'||'" . $pf . "' as location_namewo, 'pickup' as type";
  341. } elseif ($vv["type"] == "25" && !empty($ll[1])) {
  342. if (!empty($sql)) {
  343. $sql .= " union ";
  344. }
  345. $sql .= "select '" . $ll[1] . "' as lng, '" . $ll[0] . "' as lat, '" . $vv["ctnr"] . "' as uncode, 'Delivery: " . $vv["utime"] . "<br>'||'" . $dt . "' as location_namewo, 'delivery' as type";
  346. }
  347. }
  348. if (!empty($sql)) {
  349. $gps = common::excuteListSql($sql . "");
  350. }
  351. if (!empty($serial_no)) {
  352. $all = explode(",", $serial_no);
  353. foreach ($all as $a) {
  354. $rs = common::excuteOneSql("select public.get_vessel_position('$a'::text)");
  355. if (!empty($rs)) {
  356. $rss = explode("|", $rs);
  357. $lng_lat = explode(",", $rss[1]);
  358. $gps[] = array("lng" => $lng_lat[0], "lat" => $lng_lat[1], "uncode" => "", "location_namewo" => "", "type" => "vessel", "vessel_name" => $rss[2], "m_shipname" => "", "mmsi" => "", "imo" => "", "m_shipstate" => "", "m_shiptype" => "", "m_dest" => "", "m_newshiparrive" => "", "m_newlasttime" => "", "lasttime" => "", "sub" => "");
  359. }
  360. }
  361. }
  362. $data = array("gps" => $gps);
  363. common::echo_json_encode("200", $data);
  364. exit();
  365. break;
  366. case 'main_map_new':
  367. //修改添加port_of_transshipment 和port_of_transshipment_name的坐标获取(有为空的可能)
  368. $serial_no = $_REQUEST["serial_no"];
  369. $sql = "with ss as (select '$serial_no' as sn)
  370. , aa as (
  371. select place_of_receipt_un, place_of_delivery_un, fport_of_loading_un, mport_of_discharge_un, port_of_loading, port_of_discharge, place_of_delivery_exp, place_of_receipt_exp,dd.*
  372. from public.online_ocean oo
  373. left join LATERAL (
  374. select (select uncode from ports where code = o.port_of_transshipment) as port_of_transshipment_un,
  375. port_of_transshipment_name
  376. from ocean o where o.serial_no=oo.serial_no order by id desc limit 1
  377. ) dd on true
  378. where serial_no=(select sn from ss) limit 1
  379. )
  380. , v1 as (select public.get_vessel_position(sn::text) bbb from ss)
  381. , t1 as (
  382. select tl.upload_time, tl.by_pickup, split_part(g.consignee_exp,'\n',1) as consignee_exp, split_part(g.pickup_from_exp,'\n',1) as pickup_from_exp,
  383. c.ctnr, split_part(g.deliveryto_exp,'\n',1) as deliveryto_exp,g.serial_no, tl.location, tl.type, tl.id,
  384. to_char(tl.upload_time, 'MM/DD/YYYY HH24:MI:SS') as utime
  385. from public.tk_general g, public.tk_commodity c
  386. left join public.tk_location tl on c.serial_no=tl.serial_no
  387. where g.serial_no=c.serial_no and g.bol=(select m_bol from public.ocean where serial_no=(select sn from ss)) order by tl.order_id)
  388. , rr as (
  389. select lon as lng, lat as lat, 'Origin' as label, port_of_loading as infor, 1 as sort, null::timestamp without time zone as stime, 'pol'::text as ptype
  390. from vessel.vt_unlocode, aa where lon<>0 and lat<>0 and lon is not null and lat is not null and uncode=fport_of_loading_un
  391. union all
  392. select lon as lng, lat as lat, 'Destination' as label, port_of_discharge as infor, 2 as sort, null::timestamp without time zone as stime, 'pod'::text as ptype
  393. from vessel.vt_unlocode, aa where lon<>0 and lat<>0 and lon is not null and lat is not null and uncode=mport_of_discharge_un
  394. union all
  395. select lon as lng, lat as lat, 'Transfer' as label, port_of_transshipment_name as infor, 3 as sort, null::timestamp without time zone as stime, 'poe'::text as ptype
  396. from vessel.vt_unlocode, aa where lon<>0 and lat<>0 and lon is not null and lat is not null and uncode=port_of_transshipment_un
  397. )
  398. select * from rr order by sort, stime";
  399. $rss = common::excuteListSql($sql);
  400. //先固定死
  401. // $json = '[{"lng":"100.78594000","lat":"13.68521000","label":"Origin","infor":"LAT KRABANG, THAILAND","sort":"0","stime":null,"ptype":"por"},
  402. // {"lng":"100.88333333","lat":"13.08333333","label":"Destination","infor":"LAEM CHABANG PORT,THAILAND","sort":"1","stime":null,"ptype":"pol"},
  403. // {"lng":"-122.28640000","lat":"37.79784000","label":"Transfer","infor":"OAKLAND, CA, USA","sort":"2","stime":null,"ptype":"pod"}]';
  404. //$rss = json_decode($json,true);
  405. common::echo_json_encode(200, $rss);
  406. exit();
  407. break;
  408. case 'main_welcome':
  409. $cp = common::check_input($_POST ['cp']); //current_page
  410. $ps = common::check_input($_POST ['ps']); //ps
  411. if (empty($ps))
  412. $ps = 10;
  413. $sqlWhere = ' where ' . common::searchExtendHandNew("ocean", $_SESSION["ONLINE_USER"]);
  414. // test dome
  415. // $_POST['is_default'] = "no";
  416. // $_POST['date_start'] =null;
  417. // $_POST['date_end'] = null;
  418. //默认初始条件:ALL& ETD& Current Month 当前月的1号到最后一天
  419. if (isset($_POST['is_default']) && strtolower($_POST['is_default']) == "yes"){
  420. $sqlWhere .= "and etd>='" . date("Y-m") . "-01' and etd<='" . date("Y-m") . "-01'::date + interval '1 month'";
  421. } else {
  422. $date_type = common::check_input($_POST ['date_type']);
  423. if (isset($_POST['date_start']) && !empty($_POST['date_start']))
  424. $sqlWhere .= " and $date_type >= '" . common::usDate2sqlDate($_POST['date_start']) . " 00:00:00'";
  425. if (isset($_POST['date_end']) && !empty($_POST['date_end']))
  426. $sqlWhere .= " and $date_type <= '" . common::usDate2sqlDate($_POST['date_end']) . " 23:59:59'";
  427. }
  428. if (isset($_POST['customer']) && !empty($_POST['customer'])){
  429. $sqlWhere .= " and (shipper ilike '%".common::check_input($_POST['customer'])."%' or shipper_id ilike '%".common::check_input($_POST['customer'])."%'
  430. or consignee ilike '%".common::check_input($_POST['customer'])."%' or consignee_id ilike '%".common::check_input($_POST['customer'])."%')";
  431. }
  432. $rc = $_POST ['rc'];
  433. if ($rc == - 1) {
  434. $sql = "SELECT count(1) from public.online_ocean" . $sqlWhere ." and last_status_315_update_time is not null";
  435. $rc = common::excuteOneSql($sql);
  436. //error_log($sql);
  437. }
  438. $tp = ceil($rc / $ps);
  439. if ($rc > 0) {
  440. $sql = "SELECT order_from as _schemas,serial_no,last_status_city, consignee, shipper, h_bol,
  441. to_char(etd, 'MM/DD/YYYY'::text) as etd, to_char(eta, 'MM/DD/YYYY'::text) AS eta,
  442. fport_of_loading_un, mport_of_discharge_un, place_of_receipt_un, place_of_delivery_un, ctnrs, count_cntr, last_status_ctnr,booking_no,
  443. to_char(last_status_315_date, 'MM/DD/YYYY'::text) as last_status_315_date,last_status_315_code, last_status_loc, last_status_city, order_from,
  444. f_vessel,f_voyage,
  445. CASE
  446. WHEN dd.status is null THEN 'Created'::text
  447. ELSE dd.status::text
  448. END AS status,
  449. dd.act_date,dd.description,dd.timezone,dd.act_time
  450. FROM public.online_ocean
  451. left join LATERAL (select case when a.code='IFFBCF' then 'Created'
  452. when a.code='IFFCPU' then 'Cargo Received'
  453. when a.code='IFFREC' then 'Cargo Received'
  454. when a.code='IFFDEP' then 'Departed'
  455. when a.code='IFFARR' then 'Arrived'
  456. when a.code='IFFAFD' then 'Completed'
  457. else 'Created' END as status,
  458. act_date,act_time,
  459. case when a.code = 'IFFECP' then 'Empty Container Pickup' else _dd.description end as description,
  460. timezone
  461. from ocean_milestone a
  462. left join LATERAL (select sno,description from milestone where code=a.code and project_no = '*' limit 1) _dd on true
  463. where a.serial_no=online_ocean.serial_no
  464. and a.code in (select regexp_split_to_table('IFFBCF,IFFCPU,IFFREC,IFFDEP,IFFARR,IFFAFD', ','))
  465. and a.act_date is not null
  466. order by id desc limit 1) dd on true
  467. $sqlWhere and last_status_315_update_time is not null";
  468. if (_isDemo()) {
  469. $sql .= " ORDER BY eta DESC limit " . $ps . " offset " . ($cp - 1) * $ps;
  470. } else {
  471. $sql .= " ORDER BY last_status_315_update_time DESC limit " . $ps . " offset " . ($cp - 1) * $ps;
  472. }
  473. $rss = common::excuteListSql($sql);
  474. //RecentStatusList
  475. $RecentStatusList = array();
  476. foreach ($rss as $key => $value) {
  477. $Arrived = $value['description'];
  478. $RecentStatusList[] = array("Title"=>$value['h_bol'],
  479. "name"=>$value['f_vessel']." / ".$value['f_voyage'],
  480. "bookingNumber" =>$value['booking_no'],
  481. "IsSubscribe" =>false,
  482. "shipperName"=>$value['shipper'],
  483. "consigneeName" =>$value['consignee'],
  484. "startStation"=>$value['fport_of_loading_un'],
  485. "endStation"=>$value['mport_of_discharge_un'],
  486. "ETD"=>$value['etd'],
  487. "ETA"=>$value['eta'],
  488. "type"=>$value['status'],
  489. "Arrived"=>$Arrived,
  490. "Time"=>$value["act_date"],
  491. "act_time" =>$value["act_time"],
  492. "timezone"=>$value["timezone"],
  493. "_schemas"=>$value["_schemas"],
  494. "a" =>common::deCode($value['serial_no'], 'E'));
  495. }
  496. $data = common::getManagement();
  497. $arrTmp = array('searchData' => $RecentStatusList,
  498. 'Management' => $data['Management'],
  499. 'dashboard_filter' => $data['dashboard_filter'],
  500. 'is_customer' =>_isCustomerLogin(),
  501. 'rc' => $rc,
  502. 'ps' => $ps,
  503. 'cp' => $cp,
  504. 'tp' => $tp);
  505. } else {
  506. $data = common::getManagement();
  507. $arrTmp = array('searchData' => array(),
  508. 'Management' => $data['Management'],
  509. 'dashboard_filter' => $data['dashboard_filter']);
  510. }
  511. common::echo_json_encode(200,$arrTmp);
  512. exit();
  513. break;
  514. case 'save_layout':
  515. $management = json_encode($_POST["management"]);
  516. $dashboard_filter = json_encode($_POST["dashboard_filter"]);
  517. $_param = "";
  518. if(!empty($_POST["management"])){
  519. $_param = " management = '$management' ";
  520. }
  521. if(!empty($_POST["dashboard_filter"])){
  522. $_param = ",dashboard_filter = '$dashboard_filter' ";
  523. }
  524. if(!empty($_param)){
  525. common::excuteUpdateSql("update public.ra_online_user set $_param where lower(user_login) = '" . strtolower(_getLoginName()) . "'");
  526. }
  527. $returnData = array("msg" => "success");
  528. common::echo_json_encode(200, $returnData);
  529. exit();
  530. break;
  531. case 'password':
  532. tools::getInstance()->updatePassword();
  533. break;
  534. case 'tools':
  535. tools::getInstance()->markSystem();
  536. break;
  537. default:
  538. $data = array(
  539. 'msg' => 'Page not found',
  540. );
  541. common::echo_json_encode(500, $data);
  542. }
  543. $db->Close();
  544. $db = null;
  545. if ($max_ec > 0)
  546. ini_set('max_execution_time', $max_ec); //recover old value
  547. if (!empty($memory_limit))
  548. ini_set('memory_limit', $memory_limit);
  549. ?>