优化比对
This commit is contained in:
@@ -178,6 +178,9 @@ public class PrcOrderBillExt implements Serializable
|
|||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
private Date airConfirmTime;
|
private Date airConfirmTime;
|
||||||
private Integer packageType;
|
private Integer packageType;
|
||||||
|
/** 客户确认重 */
|
||||||
|
private BigDecimal confirmWeight;
|
||||||
|
/** 计费重 */
|
||||||
private BigDecimal dimensionalWeightFactor;
|
private BigDecimal dimensionalWeightFactor;
|
||||||
private String updateBy;
|
private String updateBy;
|
||||||
private String customerPickupSite;
|
private String customerPickupSite;
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ public class TabOrderCompareTask implements Serializable
|
|||||||
* 每项:transferNo / upstreamStatus / localStatus
|
* 每项:transferNo / upstreamStatus / localStatus
|
||||||
*/
|
*/
|
||||||
private List<Map<String, Object>> statusMismatchSamples = new ArrayList<Map<String, Object>>();
|
private List<Map<String, Object>> statusMismatchSamples = new ArrayList<Map<String, Object>>();
|
||||||
|
/** status-mismatch transfer_no sample (flat, for UI fill) */
|
||||||
|
private List<String> statusMismatchTransferNos = new ArrayList<String>();
|
||||||
|
|
||||||
public String getTaskId() { return taskId; }
|
public String getTaskId() { return taskId; }
|
||||||
public void setTaskId(String taskId) { this.taskId = taskId; }
|
public void setTaskId(String taskId) { this.taskId = taskId; }
|
||||||
@@ -70,4 +72,10 @@ public class TabOrderCompareTask implements Serializable
|
|||||||
this.statusMismatchSamples = statusMismatchSamples == null
|
this.statusMismatchSamples = statusMismatchSamples == null
|
||||||
? new ArrayList<Map<String, Object>>() : statusMismatchSamples;
|
? new ArrayList<Map<String, Object>>() : statusMismatchSamples;
|
||||||
}
|
}
|
||||||
|
public List<String> getStatusMismatchTransferNos() { return statusMismatchTransferNos; }
|
||||||
|
public void setStatusMismatchTransferNos(List<String> statusMismatchTransferNos)
|
||||||
|
{
|
||||||
|
this.statusMismatchTransferNos = statusMismatchTransferNos == null
|
||||||
|
? new ArrayList<String>() : statusMismatchTransferNos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,9 @@ public class TabOrderMonitorVo implements Serializable
|
|||||||
private String countryName;
|
private String countryName;
|
||||||
/** 收件人邮编 */
|
/** 收件人邮编 */
|
||||||
private String consigneePostcode;
|
private String consigneePostcode;
|
||||||
/** 材积系数/计费重 */
|
/** 客户确认重 */
|
||||||
|
private BigDecimal confirmWeight;
|
||||||
|
/** 计费重 */
|
||||||
private BigDecimal dimensionalWeightFactor;
|
private BigDecimal dimensionalWeightFactor;
|
||||||
/** 体积重 */
|
/** 体积重 */
|
||||||
private BigDecimal volumeWeight;
|
private BigDecimal volumeWeight;
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ public final class OracleOrderBillExtFiller
|
|||||||
ext.setTrackQueryTime(date(row, "TRACK_QUERY_TIME"));
|
ext.setTrackQueryTime(date(row, "TRACK_QUERY_TIME"));
|
||||||
ext.setAirConfirmTime(date(row, "AIR_CONFIRM_TIME"));
|
ext.setAirConfirmTime(date(row, "AIR_CONFIRM_TIME"));
|
||||||
ext.setPackageType(integer(row, "PACKAGE_TYPE"));
|
ext.setPackageType(integer(row, "PACKAGE_TYPE"));
|
||||||
|
ext.setConfirmWeight(decimal(row, "CONFIRM_WEIGHT"));
|
||||||
ext.setDimensionalWeightFactor(decimal(row, "DIMENSIONAL_WEIGHT_FACTOR"));
|
ext.setDimensionalWeightFactor(decimal(row, "DIMENSIONAL_WEIGHT_FACTOR"));
|
||||||
ext.setUpdateBy(str(row, "UPDATE_BY"));
|
ext.setUpdateBy(str(row, "UPDATE_BY"));
|
||||||
ext.setCustomerPickupSite(str(row, "CUSTOMER_PICKUP_SITE"));
|
ext.setCustomerPickupSite(str(row, "CUSTOMER_PICKUP_SITE"));
|
||||||
|
|||||||
@@ -1315,6 +1315,7 @@ public class TabOrderMonitorService
|
|||||||
vo.setCountry(str(row, "COUNTRY"));
|
vo.setCountry(str(row, "COUNTRY"));
|
||||||
vo.setCountryName(str(row, "COUNTRY_NAME"));
|
vo.setCountryName(str(row, "COUNTRY_NAME"));
|
||||||
vo.setConsigneePostcode(str(row, "CONSIGNEE_POSTCODE"));
|
vo.setConsigneePostcode(str(row, "CONSIGNEE_POSTCODE"));
|
||||||
|
vo.setConfirmWeight(decimal(row, "CONFIRM_WEIGHT"));
|
||||||
vo.setDimensionalWeightFactor(decimal(row, "DIMENSIONAL_WEIGHT_FACTOR"));
|
vo.setDimensionalWeightFactor(decimal(row, "DIMENSIONAL_WEIGHT_FACTOR"));
|
||||||
vo.setVolumeWeight(decimal(row, "VOLUME_WEIGHT"));
|
vo.setVolumeWeight(decimal(row, "VOLUME_WEIGHT"));
|
||||||
vo.setWeight(decimal(row, "WEIGHT"));
|
vo.setWeight(decimal(row, "WEIGHT"));
|
||||||
|
|||||||
@@ -160,6 +160,17 @@ public class TabOrderCompareAsyncRunner
|
|||||||
resp.put("statusMismatch", Integer.valueOf(statusMismatch));
|
resp.put("statusMismatch", Integer.valueOf(statusMismatch));
|
||||||
resp.put("missingTransferNos", missingSample);
|
resp.put("missingTransferNos", missingSample);
|
||||||
resp.put("statusMismatchSamples", statusMismatchSample);
|
resp.put("statusMismatchSamples", statusMismatchSample);
|
||||||
|
List<String> mismatchTns = new ArrayList<String>();
|
||||||
|
for (Map<String, Object> one : statusMismatchSample)
|
||||||
|
{
|
||||||
|
if (one == null) { continue; }
|
||||||
|
Object tn = one.get("transferNo");
|
||||||
|
if (tn != null && StringUtils.isNotEmpty(String.valueOf(tn).trim()))
|
||||||
|
{
|
||||||
|
mismatchTns.add(String.valueOf(tn).trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resp.put("statusMismatchTransferNos", mismatchTns);
|
||||||
resp.put("missingTruncated", Boolean.valueOf(missing > missingSample.size()));
|
resp.put("missingTruncated", Boolean.valueOf(missing > missingSample.size()));
|
||||||
resp.put("statusMismatchTruncated",
|
resp.put("statusMismatchTruncated",
|
||||||
Boolean.valueOf(statusMismatch > statusMismatchSample.size()));
|
Boolean.valueOf(statusMismatch > statusMismatchSample.size()));
|
||||||
@@ -312,6 +323,17 @@ public class TabOrderCompareAsyncRunner
|
|||||||
if (statusMismatchSample != null)
|
if (statusMismatchSample != null)
|
||||||
{
|
{
|
||||||
task.setStatusMismatchSamples(new ArrayList<Map<String, Object>>(statusMismatchSample));
|
task.setStatusMismatchSamples(new ArrayList<Map<String, Object>>(statusMismatchSample));
|
||||||
|
List<String> tnList = new ArrayList<String>();
|
||||||
|
for (Map<String, Object> one : statusMismatchSample)
|
||||||
|
{
|
||||||
|
if (one == null) { continue; }
|
||||||
|
Object tn = one.get("transferNo");
|
||||||
|
if (tn != null && StringUtils.isNotEmpty(String.valueOf(tn).trim()))
|
||||||
|
{
|
||||||
|
tnList.add(String.valueOf(tn).trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
task.setStatusMismatchTransferNos(tnList);
|
||||||
}
|
}
|
||||||
redisCache.setCacheObject(CACHE_KEY_PREFIX + taskId, task, TTL_MINUTES, TimeUnit.MINUTES);
|
redisCache.setCacheObject(CACHE_KEY_PREFIX + taskId, task, TTL_MINUTES, TimeUnit.MINUTES);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,6 +129,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
o.COUNTRY,
|
o.COUNTRY,
|
||||||
o.COUNTRY_NAME,
|
o.COUNTRY_NAME,
|
||||||
o.CONSIGNEE_POSTCODE,
|
o.CONSIGNEE_POSTCODE,
|
||||||
|
o.CONFIRM_WEIGHT,
|
||||||
o.DIMENSIONAL_WEIGHT_FACTOR,
|
o.DIMENSIONAL_WEIGHT_FACTOR,
|
||||||
o.VOLUME_WEIGHT,
|
o.VOLUME_WEIGHT,
|
||||||
o.WEIGHT,
|
o.WEIGHT,
|
||||||
|
|||||||
@@ -151,6 +151,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="trackQueryTime" column="track_query_time" />
|
<result property="trackQueryTime" column="track_query_time" />
|
||||||
<result property="airConfirmTime" column="air_confirm_time" />
|
<result property="airConfirmTime" column="air_confirm_time" />
|
||||||
<result property="packageType" column="package_type" />
|
<result property="packageType" column="package_type" />
|
||||||
|
<result property="confirmWeight" column="confirm_weight" />
|
||||||
<result property="dimensionalWeightFactor" column="dimensional_weight_factor" />
|
<result property="dimensionalWeightFactor" column="dimensional_weight_factor" />
|
||||||
<result property="updateBy" column="update_by" />
|
<result property="updateBy" column="update_by" />
|
||||||
<result property="customerPickupSite" column="customer_pickup_site" />
|
<result property="customerPickupSite" column="customer_pickup_site" />
|
||||||
@@ -184,7 +185,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectPrcOrderBillExtVo">
|
<sql id="selectPrcOrderBillExtVo">
|
||||||
select bill_id, order_no, upstream_id, line_no, package_num, actual_volume, cp_type, consignee_mobile, order_returnsign, trade_type, duty_type, battery_type, consignee_companyname, consignee_address, consignee_telephone, consignee_state, consignee_city, consignee_suburb, consignee_passportno, consignee_email, consignee_taxno, consignee_taxnotype, consignee_taxnocountry, consignee_streetno, consignee_doorno, shipper_taxnotype, shipper_taxno, shipper_taxnocountry, customer_id, product_imagepath, order_transactionurl, order_cargoamount, cargo_type, shipper_companyname, shipper_address1, shipper_address2, shipper_address3, shipper_city, shipper_state, shipper_postcode, shipper_country, shipper_telephone, shipper_suburb, shipper_email, shipper_passportno, import_code, import_name, import_companyname, import_address, import_address2, import_address3, import_telephone, import_email, import_postcode, import_city, import_state, import_country, buyerid, order_status, create_at, pay_type, line_code, line_name, product_code, product_name, product_type, line_type, cargo_name, product_floor_code, order_insurance, product_sum_price, product_sum, shipper_doorno, tariff_payment_account, topayment, product_floor, latest_trajectory, way_bill, pickup_date, bl_baging, bl_pickup, bag_date, org_order_status, status_description, zz_date, shipping_date, order_type, receiving_photo, freight, is_receivable, is_meet, bill_no_receivable, bill_no_meet, country_eingth_name, is_receivable_fee, settlement_fee, product_id, service_freight, is_pay_fee, has_added_surcharge, yf_fee, yf_totail_fee, trajectory_status, cargo_type_name, service_code, three_code, volume_height_old, volume_length_old, volume_width_old, register_man_old, bag_no_old, air_no_old, box_sizi_old, baging_man_old, retrieval_man_old, invoice_amount_old, invoice_title_old, invoice_weight_old, sku_old, hs_code_old, register_date_old, invoice_currency_old, trajectory_sub_state, sign_in_time, warehouse_time, declaration_time, release_time, station_time, takeoff_time, landing_time, clearance_and_delivery_time, supplier_name, credit_code, other_id, platform_code, sync_shipment_status, update_weight, other_bag_no, bag_flag, online_time, outbound_time, air_confirm_date, shipment_type, track_query_time, air_confirm_time, package_type, dimensional_weight_factor, update_by, customer_pickup_site, barcode_number, tracking_reflect_status, remote_postcode, clearance_time, arrive_stock_time, departure_time, first_deliver_time, hs_code_tax_count, hs_code_tax_amount, hs_code_tax_currency, invoice_url, clearance_no, push_weight, internal_check_time, air_delay_time, first_landing_time, second_takeoff_time, des_port_check_time, stay_remark, miss_box_remark, product_channel_id, customer_track_id, register_site, package_type_financial, mrn, create_time, update_time
|
select bill_id, order_no, upstream_id, line_no, package_num, actual_volume, cp_type, consignee_mobile, order_returnsign, trade_type, duty_type, battery_type, consignee_companyname, consignee_address, consignee_telephone, consignee_state, consignee_city, consignee_suburb, consignee_passportno, consignee_email, consignee_taxno, consignee_taxnotype, consignee_taxnocountry, consignee_streetno, consignee_doorno, shipper_taxnotype, shipper_taxno, shipper_taxnocountry, customer_id, product_imagepath, order_transactionurl, order_cargoamount, cargo_type, shipper_companyname, shipper_address1, shipper_address2, shipper_address3, shipper_city, shipper_state, shipper_postcode, shipper_country, shipper_telephone, shipper_suburb, shipper_email, shipper_passportno, import_code, import_name, import_companyname, import_address, import_address2, import_address3, import_telephone, import_email, import_postcode, import_city, import_state, import_country, buyerid, order_status, create_at, pay_type, line_code, line_name, product_code, product_name, product_type, line_type, cargo_name, product_floor_code, order_insurance, product_sum_price, product_sum, shipper_doorno, tariff_payment_account, topayment, product_floor, latest_trajectory, way_bill, pickup_date, bl_baging, bl_pickup, bag_date, org_order_status, status_description, zz_date, shipping_date, order_type, receiving_photo, freight, is_receivable, is_meet, bill_no_receivable, bill_no_meet, country_eingth_name, is_receivable_fee, settlement_fee, product_id, service_freight, is_pay_fee, has_added_surcharge, yf_fee, yf_totail_fee, trajectory_status, cargo_type_name, service_code, three_code, volume_height_old, volume_length_old, volume_width_old, register_man_old, bag_no_old, air_no_old, box_sizi_old, baging_man_old, retrieval_man_old, invoice_amount_old, invoice_title_old, invoice_weight_old, sku_old, hs_code_old, register_date_old, invoice_currency_old, trajectory_sub_state, sign_in_time, warehouse_time, declaration_time, release_time, station_time, takeoff_time, landing_time, clearance_and_delivery_time, supplier_name, credit_code, other_id, platform_code, sync_shipment_status, update_weight, other_bag_no, bag_flag, online_time, outbound_time, air_confirm_date, shipment_type, track_query_time, air_confirm_time, package_type, confirm_weight, dimensional_weight_factor, update_by, customer_pickup_site, barcode_number, tracking_reflect_status, remote_postcode, clearance_time, arrive_stock_time, departure_time, first_deliver_time, hs_code_tax_count, hs_code_tax_amount, hs_code_tax_currency, invoice_url, clearance_no, push_weight, internal_check_time, air_delay_time, first_landing_time, second_takeoff_time, des_port_check_time, stay_remark, miss_box_remark, product_channel_id, customer_track_id, register_site, package_type_financial, mrn, create_time, update_time
|
||||||
from prc_order_bill_ext
|
from prc_order_bill_ext
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
@@ -200,7 +201,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
|
|
||||||
<insert id="insertPrcOrderBillExt" parameterType="PrcOrderBillExt">
|
<insert id="insertPrcOrderBillExt" parameterType="PrcOrderBillExt">
|
||||||
insert into prc_order_bill_ext (
|
insert into prc_order_bill_ext (
|
||||||
bill_id, order_no, upstream_id, line_no, package_num, actual_volume, cp_type, consignee_mobile, order_returnsign, trade_type, duty_type, battery_type, consignee_companyname, consignee_address, consignee_telephone, consignee_state, consignee_city, consignee_suburb, consignee_passportno, consignee_email, consignee_taxno, consignee_taxnotype, consignee_taxnocountry, consignee_streetno, consignee_doorno, shipper_taxnotype, shipper_taxno, shipper_taxnocountry, customer_id, product_imagepath, order_transactionurl, order_cargoamount, cargo_type, shipper_companyname, shipper_address1, shipper_address2, shipper_address3, shipper_city, shipper_state, shipper_postcode, shipper_country, shipper_telephone, shipper_suburb, shipper_email, shipper_passportno, import_code, import_name, import_companyname, import_address, import_address2, import_address3, import_telephone, import_email, import_postcode, import_city, import_state, import_country, buyerid, order_status, create_at, pay_type, line_code, line_name, product_code, product_name, product_type, line_type, cargo_name, product_floor_code, order_insurance, product_sum_price, product_sum, shipper_doorno, tariff_payment_account, topayment, product_floor, latest_trajectory, way_bill, pickup_date, bl_baging, bl_pickup, bag_date, org_order_status, status_description, zz_date, shipping_date, order_type, receiving_photo, freight, is_receivable, is_meet, bill_no_receivable, bill_no_meet, country_eingth_name, is_receivable_fee, settlement_fee, product_id, service_freight, is_pay_fee, has_added_surcharge, yf_fee, yf_totail_fee, trajectory_status, cargo_type_name, service_code, three_code, volume_height_old, volume_length_old, volume_width_old, register_man_old, bag_no_old, air_no_old, box_sizi_old, baging_man_old, retrieval_man_old, invoice_amount_old, invoice_title_old, invoice_weight_old, sku_old, hs_code_old, register_date_old, invoice_currency_old, trajectory_sub_state, sign_in_time, warehouse_time, declaration_time, release_time, station_time, takeoff_time, landing_time, clearance_and_delivery_time, supplier_name, credit_code, other_id, platform_code, sync_shipment_status, update_weight, other_bag_no, bag_flag, online_time, outbound_time, air_confirm_date, shipment_type, track_query_time, air_confirm_time, package_type, dimensional_weight_factor, update_by, customer_pickup_site, barcode_number, tracking_reflect_status, remote_postcode, clearance_time, arrive_stock_time, departure_time, first_deliver_time, hs_code_tax_count, hs_code_tax_amount, hs_code_tax_currency, invoice_url, clearance_no, push_weight, internal_check_time, air_delay_time, first_landing_time, second_takeoff_time, des_port_check_time, stay_remark, miss_box_remark, product_channel_id, customer_track_id, register_site, package_type_financial, mrn, create_time
|
bill_id, order_no, upstream_id, line_no, package_num, actual_volume, cp_type, consignee_mobile, order_returnsign, trade_type, duty_type, battery_type, consignee_companyname, consignee_address, consignee_telephone, consignee_state, consignee_city, consignee_suburb, consignee_passportno, consignee_email, consignee_taxno, consignee_taxnotype, consignee_taxnocountry, consignee_streetno, consignee_doorno, shipper_taxnotype, shipper_taxno, shipper_taxnocountry, customer_id, product_imagepath, order_transactionurl, order_cargoamount, cargo_type, shipper_companyname, shipper_address1, shipper_address2, shipper_address3, shipper_city, shipper_state, shipper_postcode, shipper_country, shipper_telephone, shipper_suburb, shipper_email, shipper_passportno, import_code, import_name, import_companyname, import_address, import_address2, import_address3, import_telephone, import_email, import_postcode, import_city, import_state, import_country, buyerid, order_status, create_at, pay_type, line_code, line_name, product_code, product_name, product_type, line_type, cargo_name, product_floor_code, order_insurance, product_sum_price, product_sum, shipper_doorno, tariff_payment_account, topayment, product_floor, latest_trajectory, way_bill, pickup_date, bl_baging, bl_pickup, bag_date, org_order_status, status_description, zz_date, shipping_date, order_type, receiving_photo, freight, is_receivable, is_meet, bill_no_receivable, bill_no_meet, country_eingth_name, is_receivable_fee, settlement_fee, product_id, service_freight, is_pay_fee, has_added_surcharge, yf_fee, yf_totail_fee, trajectory_status, cargo_type_name, service_code, three_code, volume_height_old, volume_length_old, volume_width_old, register_man_old, bag_no_old, air_no_old, box_sizi_old, baging_man_old, retrieval_man_old, invoice_amount_old, invoice_title_old, invoice_weight_old, sku_old, hs_code_old, register_date_old, invoice_currency_old, trajectory_sub_state, sign_in_time, warehouse_time, declaration_time, release_time, station_time, takeoff_time, landing_time, clearance_and_delivery_time, supplier_name, credit_code, other_id, platform_code, sync_shipment_status, update_weight, other_bag_no, bag_flag, online_time, outbound_time, air_confirm_date, shipment_type, track_query_time, air_confirm_time, package_type, confirm_weight, dimensional_weight_factor, update_by, customer_pickup_site, barcode_number, tracking_reflect_status, remote_postcode, clearance_time, arrive_stock_time, departure_time, first_deliver_time, hs_code_tax_count, hs_code_tax_amount, hs_code_tax_currency, invoice_url, clearance_no, push_weight, internal_check_time, air_delay_time, first_landing_time, second_takeoff_time, des_port_check_time, stay_remark, miss_box_remark, product_channel_id, customer_track_id, register_site, package_type_financial, mrn, create_time
|
||||||
) values (
|
) values (
|
||||||
#{billId},
|
#{billId},
|
||||||
#{orderNo},
|
#{orderNo},
|
||||||
@@ -348,6 +349,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
#{trackQueryTime},
|
#{trackQueryTime},
|
||||||
#{airConfirmTime},
|
#{airConfirmTime},
|
||||||
#{packageType},
|
#{packageType},
|
||||||
|
#{confirmWeight},
|
||||||
#{dimensionalWeightFactor},
|
#{dimensionalWeightFactor},
|
||||||
#{updateBy},
|
#{updateBy},
|
||||||
#{customerPickupSite},
|
#{customerPickupSite},
|
||||||
@@ -382,7 +384,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
|
|
||||||
<insert id="upsertPrcOrderBillExt" parameterType="PrcOrderBillExt">
|
<insert id="upsertPrcOrderBillExt" parameterType="PrcOrderBillExt">
|
||||||
insert into prc_order_bill_ext (
|
insert into prc_order_bill_ext (
|
||||||
bill_id, order_no, upstream_id, line_no, package_num, actual_volume, cp_type, consignee_mobile, order_returnsign, trade_type, duty_type, battery_type, consignee_companyname, consignee_address, consignee_telephone, consignee_state, consignee_city, consignee_suburb, consignee_passportno, consignee_email, consignee_taxno, consignee_taxnotype, consignee_taxnocountry, consignee_streetno, consignee_doorno, shipper_taxnotype, shipper_taxno, shipper_taxnocountry, customer_id, product_imagepath, order_transactionurl, order_cargoamount, cargo_type, shipper_companyname, shipper_address1, shipper_address2, shipper_address3, shipper_city, shipper_state, shipper_postcode, shipper_country, shipper_telephone, shipper_suburb, shipper_email, shipper_passportno, import_code, import_name, import_companyname, import_address, import_address2, import_address3, import_telephone, import_email, import_postcode, import_city, import_state, import_country, buyerid, order_status, create_at, pay_type, line_code, line_name, product_code, product_name, product_type, line_type, cargo_name, product_floor_code, order_insurance, product_sum_price, product_sum, shipper_doorno, tariff_payment_account, topayment, product_floor, latest_trajectory, way_bill, pickup_date, bl_baging, bl_pickup, bag_date, org_order_status, status_description, zz_date, shipping_date, order_type, receiving_photo, freight, is_receivable, is_meet, bill_no_receivable, bill_no_meet, country_eingth_name, is_receivable_fee, settlement_fee, product_id, service_freight, is_pay_fee, has_added_surcharge, yf_fee, yf_totail_fee, trajectory_status, cargo_type_name, service_code, three_code, volume_height_old, volume_length_old, volume_width_old, register_man_old, bag_no_old, air_no_old, box_sizi_old, baging_man_old, retrieval_man_old, invoice_amount_old, invoice_title_old, invoice_weight_old, sku_old, hs_code_old, register_date_old, invoice_currency_old, trajectory_sub_state, sign_in_time, warehouse_time, declaration_time, release_time, station_time, takeoff_time, landing_time, clearance_and_delivery_time, supplier_name, credit_code, other_id, platform_code, sync_shipment_status, update_weight, other_bag_no, bag_flag, online_time, outbound_time, air_confirm_date, shipment_type, track_query_time, air_confirm_time, package_type, dimensional_weight_factor, update_by, customer_pickup_site, barcode_number, tracking_reflect_status, remote_postcode, clearance_time, arrive_stock_time, departure_time, first_deliver_time, hs_code_tax_count, hs_code_tax_amount, hs_code_tax_currency, invoice_url, clearance_no, push_weight, internal_check_time, air_delay_time, first_landing_time, second_takeoff_time, des_port_check_time, stay_remark, miss_box_remark, product_channel_id, customer_track_id, register_site, package_type_financial, mrn, create_time
|
bill_id, order_no, upstream_id, line_no, package_num, actual_volume, cp_type, consignee_mobile, order_returnsign, trade_type, duty_type, battery_type, consignee_companyname, consignee_address, consignee_telephone, consignee_state, consignee_city, consignee_suburb, consignee_passportno, consignee_email, consignee_taxno, consignee_taxnotype, consignee_taxnocountry, consignee_streetno, consignee_doorno, shipper_taxnotype, shipper_taxno, shipper_taxnocountry, customer_id, product_imagepath, order_transactionurl, order_cargoamount, cargo_type, shipper_companyname, shipper_address1, shipper_address2, shipper_address3, shipper_city, shipper_state, shipper_postcode, shipper_country, shipper_telephone, shipper_suburb, shipper_email, shipper_passportno, import_code, import_name, import_companyname, import_address, import_address2, import_address3, import_telephone, import_email, import_postcode, import_city, import_state, import_country, buyerid, order_status, create_at, pay_type, line_code, line_name, product_code, product_name, product_type, line_type, cargo_name, product_floor_code, order_insurance, product_sum_price, product_sum, shipper_doorno, tariff_payment_account, topayment, product_floor, latest_trajectory, way_bill, pickup_date, bl_baging, bl_pickup, bag_date, org_order_status, status_description, zz_date, shipping_date, order_type, receiving_photo, freight, is_receivable, is_meet, bill_no_receivable, bill_no_meet, country_eingth_name, is_receivable_fee, settlement_fee, product_id, service_freight, is_pay_fee, has_added_surcharge, yf_fee, yf_totail_fee, trajectory_status, cargo_type_name, service_code, three_code, volume_height_old, volume_length_old, volume_width_old, register_man_old, bag_no_old, air_no_old, box_sizi_old, baging_man_old, retrieval_man_old, invoice_amount_old, invoice_title_old, invoice_weight_old, sku_old, hs_code_old, register_date_old, invoice_currency_old, trajectory_sub_state, sign_in_time, warehouse_time, declaration_time, release_time, station_time, takeoff_time, landing_time, clearance_and_delivery_time, supplier_name, credit_code, other_id, platform_code, sync_shipment_status, update_weight, other_bag_no, bag_flag, online_time, outbound_time, air_confirm_date, shipment_type, track_query_time, air_confirm_time, package_type, confirm_weight, dimensional_weight_factor, update_by, customer_pickup_site, barcode_number, tracking_reflect_status, remote_postcode, clearance_time, arrive_stock_time, departure_time, first_deliver_time, hs_code_tax_count, hs_code_tax_amount, hs_code_tax_currency, invoice_url, clearance_no, push_weight, internal_check_time, air_delay_time, first_landing_time, second_takeoff_time, des_port_check_time, stay_remark, miss_box_remark, product_channel_id, customer_track_id, register_site, package_type_financial, mrn, create_time
|
||||||
) values (
|
) values (
|
||||||
#{billId},
|
#{billId},
|
||||||
#{orderNo},
|
#{orderNo},
|
||||||
@@ -530,6 +532,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
#{trackQueryTime},
|
#{trackQueryTime},
|
||||||
#{airConfirmTime},
|
#{airConfirmTime},
|
||||||
#{packageType},
|
#{packageType},
|
||||||
|
#{confirmWeight},
|
||||||
#{dimensionalWeightFactor},
|
#{dimensionalWeightFactor},
|
||||||
#{updateBy},
|
#{updateBy},
|
||||||
#{customerPickupSite},
|
#{customerPickupSite},
|
||||||
@@ -706,6 +709,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
track_query_time = values(track_query_time),
|
track_query_time = values(track_query_time),
|
||||||
air_confirm_time = values(air_confirm_time),
|
air_confirm_time = values(air_confirm_time),
|
||||||
package_type = values(package_type),
|
package_type = values(package_type),
|
||||||
|
confirm_weight = values(confirm_weight),
|
||||||
dimensional_weight_factor = values(dimensional_weight_factor),
|
dimensional_weight_factor = values(dimensional_weight_factor),
|
||||||
update_by = values(update_by),
|
update_by = values(update_by),
|
||||||
customer_pickup_site = values(customer_pickup_site),
|
customer_pickup_site = values(customer_pickup_site),
|
||||||
|
|||||||
@@ -1142,6 +1142,7 @@ CREATE TABLE `prc_order_bill_ext` (
|
|||||||
`track_query_time` datetime DEFAULT NULL COMMENT '轨迹抓取时间',
|
`track_query_time` datetime DEFAULT NULL COMMENT '轨迹抓取时间',
|
||||||
`air_confirm_time` datetime DEFAULT NULL COMMENT '航班已配载时间',
|
`air_confirm_time` datetime DEFAULT NULL COMMENT '航班已配载时间',
|
||||||
`package_type` tinyint(4) DEFAULT NULL COMMENT '0:软包;1:硬包',
|
`package_type` tinyint(4) DEFAULT NULL COMMENT '0:软包;1:硬包',
|
||||||
|
`confirm_weight` decimal(10,3) DEFAULT NULL COMMENT '客户确认重',
|
||||||
`dimensional_weight_factor` decimal(10,3) DEFAULT NULL COMMENT '计费重',
|
`dimensional_weight_factor` decimal(10,3) DEFAULT NULL COMMENT '计费重',
|
||||||
`update_by` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
|
`update_by` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
|
||||||
`customer_pickup_site` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '取货地点',
|
`customer_pickup_site` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '取货地点',
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
-- prc_order_bill_ext: confirm_weight (客户确认重)
|
||||||
|
-- dimensional_weight_factor already exists
|
||||||
|
ALTER TABLE prc_order_bill_ext
|
||||||
|
ADD COLUMN confirm_weight decimal(10,3) DEFAULT NULL COMMENT '客户确认重' AFTER package_type;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer
|
<el-drawer
|
||||||
v-model="visible"
|
v-model="visible"
|
||||||
size="720px"
|
size="780px"
|
||||||
:title="drawerTitle"
|
:title="drawerTitle"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
@@ -45,7 +45,34 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="json-panel__head">
|
<div class="json-panel__head">
|
||||||
<span>缺失转单号(样本)</span>
|
<span>状态不一致(样本 {{ statusMismatchCount }})</span>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
link
|
||||||
|
:disabled="!canFillMismatch"
|
||||||
|
@click="fillMismatchToSearch"
|
||||||
|
>回填到单号搜索</el-button>
|
||||||
|
</div>
|
||||||
|
<el-table
|
||||||
|
v-if="statusMismatchRows.length"
|
||||||
|
:data="statusMismatchRows"
|
||||||
|
border
|
||||||
|
size="small"
|
||||||
|
max-height="320"
|
||||||
|
class="mb12"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" width="55" label="#" />
|
||||||
|
<el-table-column prop="transferNo" label="转单号" min-width="180" show-overflow-tooltip />
|
||||||
|
<el-table-column prop="upstreamStatusLabel" label="上游状态" width="110" />
|
||||||
|
<el-table-column prop="localStatusLabel" label="本地状态" width="110" />
|
||||||
|
</el-table>
|
||||||
|
<el-empty
|
||||||
|
v-else-if="!running"
|
||||||
|
description="暂无状态不一致"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class="json-panel__head">
|
||||||
|
<span>缺失转单号(样本 {{ missingCount }})</span>
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
link
|
link
|
||||||
@@ -53,22 +80,20 @@
|
|||||||
@click="fillToSearch"
|
@click="fillToSearch"
|
||||||
>回填到单号搜索</el-button>
|
>回填到单号搜索</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-table :data="missingRows" border size="small" max-height="360">
|
<el-table
|
||||||
|
v-if="missingRows.length"
|
||||||
|
:data="missingRows"
|
||||||
|
border
|
||||||
|
size="small"
|
||||||
|
max-height="280"
|
||||||
|
>
|
||||||
<el-table-column type="index" width="55" label="#" />
|
<el-table-column type="index" width="55" label="#" />
|
||||||
<el-table-column prop="transferNo" label="转单号" min-width="220" show-overflow-tooltip />
|
<el-table-column prop="transferNo" label="转单号" min-width="220" show-overflow-tooltip />
|
||||||
</el-table>
|
</el-table>
|
||||||
<el-empty v-if="!running && !(progress.missingTransferNos || []).length" description="暂无缺失转单号" />
|
<el-empty
|
||||||
|
v-else-if="!running"
|
||||||
<div class="json-panel__head">
|
description="暂无缺失转单号"
|
||||||
<span>状态不一致(样本)</span>
|
/>
|
||||||
</div>
|
|
||||||
<el-table :data="statusMismatchRows" border size="small" max-height="280" class="mb12">
|
|
||||||
<el-table-column type="index" width="55" label="#" />
|
|
||||||
<el-table-column prop="transferNo" label="转单号" min-width="180" show-overflow-tooltip />
|
|
||||||
<el-table-column prop="upstreamStatusLabel" label="上游状态" width="110" />
|
|
||||||
<el-table-column prop="localStatusLabel" label="本地状态" width="110" />
|
|
||||||
</el-table>
|
|
||||||
<el-empty v-if="!running && !(progress.statusMismatchSamples || []).length" description="暂无状态不一致" />
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
@@ -154,28 +179,66 @@ function labelStatus(v) {
|
|||||||
return orderStatusMap[k] || k
|
return orderStatusMap[k] || k
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeMismatchList(raw) {
|
||||||
|
if (!Array.isArray(raw)) return []
|
||||||
|
return raw.map(row => {
|
||||||
|
if (row == null) return null
|
||||||
|
if (typeof row === 'string') {
|
||||||
|
return { transferNo: row, upstreamStatus: null, localStatus: null }
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
transferNo: row.transferNo || row.transfer_no || '',
|
||||||
|
upstreamStatus: row.upstreamStatus ?? row.upstream_status ?? null,
|
||||||
|
localStatus: row.localStatus ?? row.local_status ?? null
|
||||||
|
}
|
||||||
|
}).filter(Boolean)
|
||||||
|
}
|
||||||
|
|
||||||
const statusMismatchRows = computed(() => {
|
const statusMismatchRows = computed(() => {
|
||||||
const list = progress.value?.statusMismatchSamples || []
|
const samples = normalizeMismatchList(progress.value?.statusMismatchSamples)
|
||||||
return list.map(row => ({
|
if (samples.length) {
|
||||||
transferNo: row.transferNo || row.transfer_no || '',
|
return samples.map(row => ({
|
||||||
upstreamStatusLabel: labelStatus(row.upstreamStatus ?? row.upstream_status),
|
transferNo: row.transferNo,
|
||||||
localStatusLabel: labelStatus(row.localStatus ?? row.local_status)
|
upstreamStatusLabel: labelStatus(row.upstreamStatus),
|
||||||
|
localStatusLabel: labelStatus(row.localStatus)
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
// fallback: flat transfer_no list when map samples missing
|
||||||
|
const flat = progress.value?.statusMismatchTransferNos || []
|
||||||
|
return (Array.isArray(flat) ? flat : []).map(tn => ({
|
||||||
|
transferNo: tn,
|
||||||
|
upstreamStatusLabel: '-',
|
||||||
|
localStatusLabel: '-'
|
||||||
}))
|
}))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const statusMismatchCount = computed(() => {
|
||||||
|
const n = Number(progress.value?.statusMismatch)
|
||||||
|
if (!Number.isNaN(n) && n > 0) return n
|
||||||
|
return statusMismatchRows.value.length
|
||||||
|
})
|
||||||
|
|
||||||
const missingRows = computed(() => {
|
const missingRows = computed(() => {
|
||||||
const list = progress.value?.missingTransferNos || []
|
const list = progress.value?.missingTransferNos || []
|
||||||
return list.map(tn => ({ transferNo: tn }))
|
return (Array.isArray(list) ? list : []).map(tn => ({ transferNo: tn }))
|
||||||
|
})
|
||||||
|
|
||||||
|
const missingCount = computed(() => {
|
||||||
|
const n = Number(progress.value?.missing)
|
||||||
|
if (!Number.isNaN(n) && n > 0) return n
|
||||||
|
return missingRows.value.length
|
||||||
})
|
})
|
||||||
|
|
||||||
const canFillSearch = computed(() => {
|
const canFillSearch = computed(() => {
|
||||||
return !running.value && (progress.value?.missingTransferNos || []).length > 0
|
return !running.value && missingRows.value.length > 0
|
||||||
|
})
|
||||||
|
|
||||||
|
const canFillMismatch = computed(() => {
|
||||||
|
return !running.value && statusMismatchRows.value.length > 0
|
||||||
})
|
})
|
||||||
|
|
||||||
function fillToSearch() {
|
function fillToSearch() {
|
||||||
const list = (progress.value?.missingTransferNos || [])
|
const list = missingRows.value.map(r => String(r.transferNo || '').trim()).filter(Boolean)
|
||||||
.map(s => String(s || '').trim())
|
|
||||||
.filter(Boolean)
|
|
||||||
if (!list.length) {
|
if (!list.length) {
|
||||||
ElMessage.warning('暂无可回填的缺失转单号')
|
ElMessage.warning('暂无可回填的缺失转单号')
|
||||||
return
|
return
|
||||||
@@ -185,6 +248,18 @@ function fillToSearch() {
|
|||||||
visible.value = false
|
visible.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fillMismatchToSearch() {
|
||||||
|
const list = statusMismatchRows.value.map(r => String(r.transferNo || '').trim()).filter(Boolean)
|
||||||
|
if (!list.length) {
|
||||||
|
ElMessage.warning('暂无可回填的状态不一致转单号')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const truncated = !!(progress.value?.statusMismatchTruncated)
|
||||||
|
|| (Number(progress.value?.statusMismatch || 0) > list.length)
|
||||||
|
emit('fill-search', { transferNos: list, truncated })
|
||||||
|
visible.value = false
|
||||||
|
}
|
||||||
|
|
||||||
function clearTimer() {
|
function clearTimer() {
|
||||||
if (timer) {
|
if (timer) {
|
||||||
clearInterval(timer)
|
clearInterval(timer)
|
||||||
@@ -216,7 +291,7 @@ function open(q) {
|
|||||||
ElMessage.error('启动比对任务失败')
|
ElMessage.error('启动比对任务失败')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
progress.value = { status: 'PENDING', percent: 0, message: 'queued', scanned: 0, matched: 0, missing: 0 }
|
progress.value = { status: 'PENDING', percent: 0, message: 'queued', scanned: 0, matched: 0, missing: 0, statusMismatch: 0 }
|
||||||
poll()
|
poll()
|
||||||
timer = setInterval(poll, 1500)
|
timer = setInterval(poll, 1500)
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
|
|||||||
@@ -238,6 +238,7 @@ const columns = [
|
|||||||
{ label: '产品底级代码', prop: 'productFloorCode', minWidth: 130, showOverflowTooltip: true },
|
{ label: '产品底级代码', prop: 'productFloorCode', minWidth: 130, showOverflowTooltip: true },
|
||||||
{ label: '国家', prop: 'country', minWidth: 140, slot: 'country', showOverflowTooltip: true },
|
{ label: '国家', prop: 'country', minWidth: 140, slot: 'country', showOverflowTooltip: true },
|
||||||
{ label: '收件人邮编', prop: 'consigneePostcode', minWidth: 120, showOverflowTooltip: true },
|
{ label: '收件人邮编', prop: 'consigneePostcode', minWidth: 120, showOverflowTooltip: true },
|
||||||
|
{ label: '客户确认重', prop: 'confirmWeight', align: 'center', width: 110 },
|
||||||
{ label: '计费重', prop: 'dimensionalWeightFactor', align: 'center', width: 100 },
|
{ label: '计费重', prop: 'dimensionalWeightFactor', align: 'center', width: 100 },
|
||||||
{ label: '体积重', prop: 'volumeWeight', align: 'center', width: 100 },
|
{ label: '体积重', prop: 'volumeWeight', align: 'center', width: 100 },
|
||||||
{ label: '实重', prop: 'weight', align: 'center', width: 100 },
|
{ label: '实重', prop: 'weight', align: 'center', width: 100 },
|
||||||
|
|||||||
Reference in New Issue
Block a user