ShuanghongS 1 vuosi sitten
vanhempi
commit
da46f8618a
4 muutettua tiedostoa jossa 130 lisäystä ja 33 poistoa
  1. 5 1
      service/login.class.php
  2. 21 5
      service/ocean_booking.class.php
  3. 52 23
      service/ocean_order.class.php
  4. 52 4
      utils/common.class.php

+ 5 - 1
service/login.class.php

@@ -1160,7 +1160,7 @@ class login {
 
     private function getTrackingInfo($reference_number){
         $sql = "SELECT o.* ,sh.*, cn.* ,aa.*,dd.*,
-                (select incoterms from online_ocean where online_ocean.serial_no = o.serial_no limit 1) as incoterms,
+                oo.*,
                 CASE
 	    	        WHEN cc.status is null THEN 'Created'::text
 	    	        ELSE cc.status::text
@@ -1178,6 +1178,9 @@ class login {
                     and a.code in (select regexp_split_to_table('IFFBCF,IFFCPU,IFFREC,IFFDEP,IFFARR,IFFAFD', ','))
                     and a.act_date is not null
                 order by id desc limit 1) cc on true
+                LEFT JOIN LATERAL ( SELECT incoterms as incoterms,shippr_uncode,shipper_city,
+                consignee_uncode,consignee_city
+                FROM online_ocean  WHERE online_ocean.serial_no = o.serial_no) oo ON true
                 LEFT JOIN LATERAL ( SELECT company as cn_company,
                     address_1 as cn_address_1,
                     address_2 as cn_address_2,
@@ -1219,6 +1222,7 @@ class login {
                 or lower(invoice_no) = '" . strtolower($reference_number) . "'
                 or exists (select 1 from oc_container oc where o.serial_no = oc.serial_no and oc.ctnr = '$reference_number'))";
         $ocean_arr = common::excuteListSql($sql);
+        error_log($sql);
         if(empty($ocean_arr)){
             $sql = $this->trackingSfsSql($reference_number);
             $ocean_arr = common::excuteListSql($sql);

+ 21 - 5
service/ocean_booking.class.php

@@ -245,7 +245,7 @@ class ocean_booking {
         }
         $tp = ceil($rc / $ps);
         if ($rc > 0 ) {
-            $order_by = " f_etd desc NULLS LAST, id";
+            $order_by = " f_etd desc NULLS LAST";
             //TopOcean的不用考虑
             $ocean_dest_sql = "";
             //合并显示两个特殊字段 voyage_m_voyage/vessel_m_vessel
@@ -318,7 +318,13 @@ class ocean_booking {
         if($_schemas == 'public'){
             $_schemas = "ocean";
         }
-        $sql = "SELECT o.booking_no as _booking_no, o.* ,sh.*, cn.* ,aa.*,dd.* from ocean o
+        $sql = "SELECT o.booking_no as _booking_no,
+            o.* ,sh.*, cn.* ,aa.*,dd.*,ob.* 
+        from ocean o
+            LEFT JOIN LATERAL ( SELECT shippr_uncode,shipper_city,
+                consignee_uncode,consignee_city,
+                fport_of_loading_uncode,mport_of_discharge_uncode
+            FROM public.online_booking ob WHERE o.serial_no::text = ob.serial_no::text) ob ON true
             LEFT JOIN LATERAL ( SELECT company as cn_company,
                 address_1 as cn_address_1,
                 address_2 as cn_address_2,
@@ -411,7 +417,7 @@ class ocean_booking {
         }
 
         //$packing = array("Quantity/Unit"=>"47 CTN","G. Weight" => "480.25 KGS","Ch. Weight" => "689.26 KGS","Volume" => "3.801 CBM");
-        $packing = array("Quantity/Unit"=>$quantity_tolal,"G. Weight" => $g_weight_tolal." KGS","Ch. Weight" => "","Volume" => $cbm_tolal." CBM");
+        $packing = array("Quantity/Unit"=>$quantity_tolal,"G. Weight" => $g_weight_tolal." KGS","Ch. Weight" => $g_weight_tolal." KGS","Volume" => $cbm_tolal." CBM");
         
         //处理邮件信息返回
         $emailRecords = $this->getCommunicationNew($ocean["serial_no"]);
@@ -500,9 +506,19 @@ class ocean_booking {
 
     private function returnBookingDetailData($ocean,$status){
         $data = array();
+
+        //获取对应uncode 对应的时间
+        $uncodes = $ocean['fport_of_loading_uncode'].";".$ocean['mport_of_discharge_uncode'];
+        $codeinfo = common::getCityPortsInfo($uncodes);
         //处理transportInfo信息数据
-        $transportInfo = array("bookingNo." =>$ocean['booking_no'],"status"=>$status,"mode" => "Ocean Freight","origin" =>$ocean['origin_station'],"destination" =>$ocean['destination_station'],
-            "etd" =>$ocean['f_etd'],"atd" =>"","eta" =>$ocean['m_eta'],"ata" =>"");
+        $transportInfo = array("bookingNo." =>$ocean['booking_no'],"status"=>$status,"mode" => "Ocean Freight",
+            "origin" =>$ocean['origin_station'],"destination" =>$ocean['destination_station'],
+            "etd" =>$ocean['f_etd'],"atd" =>$ocean['atd'],
+            "etd_timezone" =>$codeinfo[$ocean['fport_of_loading_uncode']],
+            "atd_timezone" =>$codeinfo[$ocean['fport_of_loading_uncode']],
+            "eta" =>$ocean['m_eta'],"ata" =>$ocean['ata'],
+            "eta_timezone" =>$codeinfo[$ocean['mport_of_discharge_uncode']],
+            "ata_timezone" =>$codeinfo[$ocean['mport_of_discharge_uncode']]);
         $data["transportInfo"] = $transportInfo;
 
         //处理basicInfo信息数据

+ 52 - 23
service/ocean_order.class.php

@@ -527,9 +527,9 @@ class ocean_order {
             $allBookingColumns = column::getInstance()->tableColumns('Ocean_Search',$allColumn);
         }
         $tp = ceil($rc / $ps);
-        $order_by = " etd desc NULLS LAST, id";
+        $order_by = " etd desc NULLS LAST";
         if (_isCustomerLogin()) {
-            $order_by = " eta desc NULLS LAST, id";
+            $order_by = " eta desc NULLS LAST";
         }
         if ($rc > 0) {
             $ocean_ref_sql = " LEFT JOIN LATERAL ( SELECT string_agg(ref_code ||ref_value, ', ') AS other_refenrence_no
@@ -678,6 +678,7 @@ class ocean_order {
         $quantity_unit = array();
         $g_weight_tolal = 0;
         $ch_weight_tolal = 0;
+        $ch_weight_tolal_grs_lbs = 0;
         $cbm_tolal = 0;
         foreach ($rss as $key => $rs) {
             $unit = $rs['unit'];
@@ -688,6 +689,7 @@ class ocean_order {
             }
             $g_weight_tolal += $rs['grs_kgs'];
             $ch_weight_tolal += $rs['net_lbs'];
+            $ch_weight_tolal_grs_lbs += $rs['grs_lbs'];
             $cbm_tolal += $rs['cbm'];
             //特殊处理weight
             if(!empty($rss[$key]['grs_kgs'])){
@@ -701,6 +703,7 @@ class ocean_order {
         foreach($quantity_unit as $uk => $uv){
             $quantity_tolal.=$uv." ".$uk." ";
         }
+        $ch_weight_tolal = empty($ch_weight_tolal) ? $ch_weight_tolal_grs_lbs : $ch_weight_tolal;
         //Containers信息
         $containers = array("container_column"=>$ocean_container_column,"container_data" =>$rss);
         //Packing信息
@@ -731,6 +734,7 @@ class ocean_order {
             //Container_Status 新版只显示几个状态, CTNR# EE I AE VD VA
             $container_status_column = array("EE","I","AE","VD","VA");
             $containerStatusDataTemp = array();
+            $ctnr_uncodes = "";
             $content = array();
             foreach($container_status_column as $status){
                 foreach($ctnr_status as $event){
@@ -739,11 +743,18 @@ class ocean_order {
                         if (empty($event["source_id"]) || $event["source_id"]==0) {
                             $eventdate.= " " . $event["eventtime"];
                         }
-                        $location_code = $event["eventtype"] . "," . $event["eventcode"];
+                        $location_code = $event["eventcode"];
                         $content[] = array("title" =>$event['description'],"date"=>$eventdate,"country"=>$location_code);
+                        $ctnr_uncodes .=$location_code.";";
                     }
                 }
             }
+            //查询全部uncode timezone
+            $uncode_rs = common::getCityPortsInfo($ctnr_uncodes);
+            //循环去回填时区
+            foreach($content as $ck => $cv){
+                $content[$ck]['timezone'] = $uncode_rs[$cv['country']];
+            }
 
             $containerStatusDataTemp['label'] = $cd['ctnr']." / ".$cd['size'];
             $containerStatusDataTemp['content'] = $content;
@@ -1236,12 +1247,15 @@ class ocean_order {
                 (select incoterms from online_ocean where online_ocean.serial_no = o.serial_no limit 1) as incoterms,
                 public.z_get_eta_dest(o.final_eta::date, o.eta_dest::text, o.service::text, o.m_eta::date, o.place_of_delivery::text, o.mport_of_discharge::text) as _eta_dest, 
                 to_char(final_eta, 'MM/DD/YYYY') as _final_eta,
-                o.* ,sh.*, cn.* ,aa.*,dd.*,
+                o.* ,sh.*, cn.* ,aa.*,dd.*,oo.*,
                 CASE
 	    	        WHEN ee.status is null THEN 'Created'::text
 	    	        ELSE ee.status::text
 		        END AS new_status
             from ocean o 
+            LEFT JOIN LATERAL ( SELECT shippr_uncode,shipper_city,
+                    consignee_uncode,consignee_city,fport_of_loading_un,mport_of_discharge_un
+                FROM  public.online_ocean oo WHERE oo.serial_no::text = o.serial_no::text) oo ON true
             left join LATERAL (select case when a.code='IFFBCF' then 'Created'
                                 when a.code='IFFCPU' then 'Cargo Received'
                                 when a.code='IFFREC' then 'Cargo Received'
@@ -1317,12 +1331,14 @@ class ocean_order {
 
         //port_of_Loading
         $port_of_Loading_stauts = array("index" =>2,"label" =>"Port of Loading",
-            "path" =>$ocean['fport_of_loading_exp_exp']."/".$ocean['fport_of_loading_exp'],"isArrival" =>$state >= 1 ? true : false);
+            "path" =>$ocean['fport_of_loading_exp']."/".$ocean['fport_of_loading'],"isArrival" =>$state >= 1 ? true : false);
         $children = array();  
         if ($state < 1){
             //未发生前
             if(!empty($ocean_milestone_status_code['IFFDEP']['est_date'])){
                 $children[] = array("label" =>"Departure(ETD)","date" =>$ocean_milestone_status_code['IFFDEP']['est_date']);
+                //如果milestone有值,或者与milestone不等,以milestone的优先度最高
+                $ocean['f_etd'] = $ocean_milestone_status_code['IFFDEP']['est_date'];
             } else {
                 //没有,取etd 
                 $children[] = array("label" =>"Departure(ETD)","date" =>$ocean['f_etd']);
@@ -1333,6 +1349,8 @@ class ocean_order {
             }
             if(!empty($ocean_milestone_status_code['IFFDEP']['act_date'])){
                 $children[] = array("label" =>"Departure(ATD)","date" =>$ocean_milestone_status_code['IFFDEP']['act_date']);
+                //如果milestone有值,或者与milestone不等,以milestone的优先度最高
+                $ocean['f_etd'] = $ocean_milestone_status_code['IFFDEP']['act_date'];
             }
         }                 
         $port_of_Loading_stauts["children"] = $children;        
@@ -1342,19 +1360,21 @@ class ocean_order {
         $port_of_Discharge_status = array("index" =>3,"label" =>"Port of Discharge",
             "path" =>$ocean['mport_of_discharge_exp']."/".$ocean['mport_of_discharge'],"isArrival" =>$state >= 2 ? true : false);
         $children = array(); 
-        if ($state < 2){
-            //未发生前
-            if(!empty($ocean_milestone_status_code['IFFARR']['est_date'])){
-                $children[] = array("label" =>"Arrival(ETA)","date" =>$ocean_milestone_status_code['IFFARR']['est_date']);
-            }else{
-                //没有,取eta
-                $children[] = array("label" =>"Arrival(ETA)","date" =>$ocean['m_eta']);
-            }
-        } else{
-            if(!empty($ocean_milestone_status_code['IFFARR']['act_date'])){
-                $children[] = array("label" =>"Arrival(ATA)","date" =>$ocean_milestone_status_code['IFFARR']['act_date']);
-            }
-        }                 
+        // if ($state < 2){
+        //     //未发生前
+        //     if(!empty($ocean_milestone_status_code['IFFARR']['est_date'])){
+        //         $children[] = array("label" =>"Arrival(ETA)","date" =>$ocean_milestone_status_code['IFFARR']['est_date']);
+        //     }else{
+        //         //没有,取eta
+        //         $children[] = array("label" =>"Arrival(ETA)","date" =>$ocean['m_eta']);
+        //     }
+        // } else{
+        //     if(!empty($ocean_milestone_status_code['IFFARR']['act_date'])){
+        //         $children[] = array("label" =>"Arrival(ATA)","date" =>$ocean_milestone_status_code['IFFARR']['act_date']);
+        //     }
+        // } 
+        //不需要判断是否发送,根据 milestone 和m_eta 的同步关系,这里m_eta 优先度最高
+        $children[] = array("label" =>"Arrival(ETA)","date" =>$ocean['m_eta']);             
         $port_of_Discharge_status["children"] = $children;     
         $simplexData[] = $port_of_Discharge_status;
 
@@ -1373,10 +1393,19 @@ class ocean_order {
         $data['shipmentData'] = $simplexData;
 
 
+        //获取对应uncode 对应的时间
+        $uncodes = $ocean['fport_of_loading_un'].";".$ocean['mport_of_discharge_un'];
+        $codeinfo = common::getCityPortsInfo($uncodes);
+
         //处理transportInfo信息数据
         $transportInfo = array("Tracking No." =>$ocean['tracking_no'],"status"=>$ocean['new_status'],"mode" => "Ocean Freight",
             "origin" =>$ocean['origin_station'],"destination" =>$ocean['destination_station'],
-            "etd" =>$ocean['f_etd'],"atd" =>"","eta" =>$ocean['m_eta'],"ata" =>"");
+            "etd" =>$ocean['f_etd'],"atd" =>$ocean['atd'],
+            "etd_timezone" =>$codeinfo[$ocean['fport_of_loading_un']],
+            "atd_timezone" =>$codeinfo[$ocean['fport_of_loading_un']],
+            "eta" =>$ocean['m_eta'],"ata" =>$ocean['ata'],
+            "eta_timezone" =>$codeinfo[$ocean['mport_of_discharge_un']],
+            "ata_timezone" =>$codeinfo[$ocean['mport_of_discharge_un']]);
         $data['transportInfo'] = $transportInfo;
 
         //处理basicInfo信息数据
@@ -1407,15 +1436,15 @@ class ocean_order {
         //处理routes 转船可能有多个情况
         $routes = array(array("mode" =>"Ocean Freight","mode_label" =>"Sea", "origin" =>$ocean['fport_of_loading'],
             "destination" => $ocean['fport_of_discharge'],
-            "etd" => $ocean['f_etd'],"atd" => "",
-            "eta" =>$ocean['f_eta'],"ata" =>"",
+            "etd" => $ocean['f_etd'],"atd" => $ocean['atd'],
+            "eta" =>$ocean['f_eta'],"ata" => $ocean['ata'],
             "vessel" =>$ocean['f_vessel'],"voyageNo" =>$ocean['f_voyage']));
         //不是直航
         if ($ocean['is_vessel_direct'] <> "t"){
             $routes[] = array("mode" =>"Ocean Freight", "mode_label" =>"Sea","origin" =>$ocean['mport_of_loading'],
                 "destination" => $ocean['mport_of_discharge'],
-                "etd" => $ocean['m_etd'],"atd" => "",
-                "eta" =>$ocean['m_eta'],"ata" =>"",
+                "etd" => $ocean['m_etd'],"atd" => $ocean['atd'],
+                "eta" =>$ocean['m_eta'],"ata" =>$ocean['ata'],
                 "vessel" =>$ocean['m_vessel'],"voyageNo" =>$ocean['m_voyage']);
         }
         $data['routes'] = $routes;

+ 52 - 4
utils/common.class.php

@@ -1306,7 +1306,7 @@ class common {
             //$json = '{"lng":121.8525,"lat":29.926545,"label":"'.$orgin['origin'].'","infor":"LAT KRABANG, THAILAND","sort":"0","stime":null,"ptype":"por"}';
             //$map = json_decode($json,true);
             if(!empty($map)){
-                $toporiginMap[] = array("qandl"=>array(floatval($map['lng']),floatval($map['lat'])),
+                $toporiginMap[] = array("qandl"=>array(floatval($map['lat']),floatval($map['lng'])),
                     "divIcon" => array("iconSize"=>0),
                     "name" =>$orgin['shippr_uncode'],
                     "color" =>common::getItemStyle("top",$i),
@@ -1342,7 +1342,7 @@ class common {
             // $json = '{"lng":"100.78594000","lat":"13.68521000","label":"'.$agent['agent'].'","infor":"LAT KRABANG, THAILAND","sort":"0","stime":null,"ptype":"por"}';
             // $map = json_decode($json,true);
             if(!empty($map)){
-                $topdestinationinMap[] = array("qandl"=>array(floatval($map['lng']),floatval($map['lat'])),
+                $topdestinationinMap[] = array("qandl"=>array(floatval($map['lat']),floatval($map['lng'])),
                     "divIcon" => array("iconSize"=>0),
                     "name" =>$agent['consignee_uncode'],
                     "color" =>common::getItemStyle("top",$i),
@@ -1539,21 +1539,69 @@ class common {
         $Milestones_column[] = array("title" =>"Locations","field" =>"locations","formatter" =>"normal","type" =>"normal");
         $Milestones_column[] = array("title" =>"Remarks","field" =>"remarks","formatter" =>"normal","type" =>"normal");
 
+        //IFF Event and EDI 315 Mapping
+        $Mapping = array("IFFREC","IFFONB","IFFDEP","IFFARR","IFFUND","IFFAFD","IFFCTA","IFFICC","IFFPPD","IFFECP");
+        $Mapping_location = array();
+        foreach($Mapping as $code){
+            if($code == "IFFREC" || $code == "IFFONB" || $code == "IFFDEP" || $code == "IFFECP"){
+                //Place of Receipt,Port of Loading
+                $Mapping_location[$code] = empty($ocean['place_of_receipt_exp']) ? $ocean['fport_of_loading_exp'] : $ocean['place_of_receipt_exp'];
+            }
+            if($code == "IFFARR" || $code == "IFFICC" || $code == "IFFPPD"){
+                //Port of discharge
+                $Mapping_location[$code] = $ocean['mport_of_discharge_exp'];
+            }
+            if($code == "IFFUND"){
+                //Port of discharge,place of delivery / Final Destination
+                $Mapping_location[$code] = empty($ocean['mport_of_discharge_exp']) ? $ocean['place_of_delivery_exp']." ".$ocean['final_desination_exp'] : $ocean['mport_of_discharge_exp'];
+            }
+            if($code == "IFFAFD"){
+                //Place of Delivery
+                $Mapping_location[$code] = $ocean['place_of_delivery_exp'];
+            }
+            if($code == "IFFCTA"){
+                //Place of Delivery,port of discharge
+                $Mapping_location[$code] = empty($ocean['place_of_delivery_exp']) ? $ocean['mport_of_discharge_exp'] : $ocean['place_of_delivery_exp'];
+            }
+        }
+        
         //Milestones 数据信息待定
         $Milestones_data = array();
         $Milestones_data_arr = common::excuteListSql("select 
             case when code = 'IFFECP' then 'Empty Container Pickup' else dd.description end as description,
-	        act_date||' '||act_time as date_time, remark,timezone 
+	        act_date||' '||act_time as date_time, remark,timezone,code,create_by,act_update_by
             from  ocean_milestone a 
                 left join LATERAL (select sno,description  from  milestone where code=a.code and project_no = '*' limit 1) dd on true
             where a.serial_no='".$ocean["serial_no"]."' and act_date is not null  order by dd.sno asc, id asc");           
         foreach($Milestones_data_arr as $mda){
+            $locations = "";
+            if(!empty($Mapping_location[$mda['code']])){
+                $locations = $Mapping_location[$mda['code']];
+            }else{
+                //第二优先级:用Milestone更新的对应的站点的location
+                $user_login = empty($mda['act_update_by']) ?  $mda['create_by'] : $mda['act_update_by'];
+                $city_by_user = common::excuteObjectSql("select e.city from ra_online_user r,employee e where r.employee_id=e.employee_id and lower(r.user_login)=lower('$user_login') limit 1");
+                $locations = $city_by_user['city'];
+            }
             $Milestones_data[] = array("milestones"=>$mda['description'],"date_time"=>$mda['date_time'],"timezone" =>$mda['timezone'],
-                "locations" => "", "remarks" =>$mda['remark']);
+                "locations" => $locations, "remarks" =>$mda['remark']);
         }  
         $Milestones = array("Milestones_column"=>$Milestones_column,"Milestones_data" =>$Milestones_data);
 
         return $Milestones;
     }
+
+    /**
+     * 查询uncode 对应的时区
+     */
+    public static function getCityPortsInfo($uncodes){
+        $data =array();
+        $sql = "select timezonecode,ctrycitycode from public.city_ports where lower(ctrycitycode) ". common::getInNotInSql($uncodes);
+        $uncode_rs = common::excuteListSql($sql);
+        foreach($uncode_rs as $value){
+            $data[$value['ctrycitycode']] = $value['timezonecode'];
+        }
+        return $data;
+    }
 }
 ?>