|
|
@@ -28,10 +28,7 @@ import java.math.RoundingMode;
|
|
|
import java.nio.file.Files;
|
|
|
import java.nio.file.Path;
|
|
|
import java.nio.file.StandardCopyOption;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -383,7 +380,11 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
// throw new RuntimeException("船名航次不能为空");
|
|
|
}
|
|
|
} else if (val0.equals("POR")) {
|
|
|
- String port = getSheetCellValueAsString(sheet, r, 1);
|
|
|
+ String port = getSheetCellValueAsString(sheet, r, 1).toUpperCase();
|
|
|
+ if (port.contains("QINGDAO")) {
|
|
|
+ // 青岛
|
|
|
+ port = "QINGDAO,CHINA";
|
|
|
+ }
|
|
|
System.out.println("por:" + port);
|
|
|
if (ObjectUtils.isNotNull(port)) {
|
|
|
BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
@@ -403,7 +404,11 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
// throw new RuntimeException("收货地不能为空");
|
|
|
}
|
|
|
|
|
|
- port = getSheetCellValueAsString(sheet, r, 4);
|
|
|
+ port = getSheetCellValueAsString(sheet, r, 4).toUpperCase();
|
|
|
+ if (port.contains("QINGDAO")) {
|
|
|
+ // 青岛
|
|
|
+ port = "QINGDAO,CHINA";
|
|
|
+ }
|
|
|
System.out.println("pol:" + port);
|
|
|
if (ObjectUtils.isNotNull(port)) {
|
|
|
BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
@@ -628,6 +633,333 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
Path tempFile = Files.createTempFile("prefix", "suffix");
|
|
|
// 将MultipartFile的内容复制到临时文件
|
|
|
Files.copy(file.getInputStream(), tempFile, StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ // 创建FileInputStream来读取临时文件
|
|
|
+ FileInputStream fis = new FileInputStream(tempFile.toFile());
|
|
|
+ Workbook workbook = null;
|
|
|
+ Sheet sheet = null;
|
|
|
+ String errMsg = "";
|
|
|
+
|
|
|
+ try {
|
|
|
+ workbook = WorkbookFactory.create(fis);
|
|
|
+ sheet = workbook.getSheetAt(0); // 获取第一个工作表
|
|
|
+ } catch (Exception e) {
|
|
|
+ workbook = null;
|
|
|
+ sheet = null;
|
|
|
+ errMsg = e.getMessage();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ObjectUtils.isNull(workbook) || ObjectUtils.isNull(sheet)) {
|
|
|
+ throw new RuntimeException("文件读取失败,该文件可能不是 Excel 文件!" + errMsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ String stringCellValue = "";
|
|
|
+
|
|
|
+ int firstRow = sheet.getFirstRowNum();
|
|
|
+ int lastRow = sheet.getLastRowNum();
|
|
|
+ if (firstRow <= 0 && lastRow < 0) {
|
|
|
+ throw new RuntimeException("文件内容为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean sft_row = false;
|
|
|
+ boolean vessel_row = false;
|
|
|
+ boolean receipt_row = false;
|
|
|
+ boolean marks_row = false;
|
|
|
+ int skip_row = 0;
|
|
|
+
|
|
|
+ // 收发通导入时,后两行是邮箱和 customer code,不算收发通内容
|
|
|
+ StringBuilder sbLines = new StringBuilder();
|
|
|
+ for (int r = firstRow; r <= lastRow; r++) {
|
|
|
+ String val0 = getSheetCellValueAsString(sheet, r, 0).toUpperCase(); // .replace(" ", "")
|
|
|
+ if (val0.equals("*SHIPPER(托运人):")) {
|
|
|
+ sbLines.setLength(0);
|
|
|
+ sft_row = true;
|
|
|
+ } else if (val0.equals("*CONSIGNEE(收货人):")) {
|
|
|
+ if(sbLines.length()>=2){
|
|
|
+ String[] lines = sbLines.toString().trim().split("\n");
|
|
|
+ sbLines.setLength(0);
|
|
|
+ for(int l=0; l<lines.length - 2; l++){
|
|
|
+ sbLines.append(lines[l].trim().concat("\n"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (stringBuilderIsNotEmpty(sbLines)) {
|
|
|
+ System.out.println("shipper:" + sbLines);
|
|
|
+ seaBillsDetail.setHshipperDetails(sbLines.toString().trim());
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("提单发货人描述不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ sft_row = true;
|
|
|
+ sbLines.setLength(0);
|
|
|
+ } else if (val0.equals("*NOTIFY PARTY(通知人):")) {
|
|
|
+ if(sbLines.length()>=2){
|
|
|
+ String[] lines = sbLines.toString().trim().split("\n");
|
|
|
+ sbLines.setLength(0);
|
|
|
+ for(int l=0; l<lines.length - 2; l++){
|
|
|
+ sbLines.append(lines[l].trim().concat("\n"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (stringBuilderIsNotEmpty(sbLines)) {
|
|
|
+ System.out.println("consignee:" + sbLines);
|
|
|
+ seaBillsDetail.setHconsigneeDetails(sbLines.toString().trim());
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("提单收货人描述不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ sft_row = true;
|
|
|
+ sbLines.setLength(0);
|
|
|
+ } else if (val0.equals("VESSEL/VOYAGE NUMBER(船名或船期)")) {
|
|
|
+ if(sbLines.length()>=2){
|
|
|
+ String[] lines = sbLines.toString().trim().split("\n");
|
|
|
+ sbLines.setLength(0);
|
|
|
+ for(int l=0; l<lines.length - 2; l++){
|
|
|
+ sbLines.append(lines[l].trim().concat("\n"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (stringBuilderIsNotEmpty(sbLines)) {
|
|
|
+ System.out.println("notifyParty:" + sbLines);
|
|
|
+ seaBillsDetail.setHnotifyDetails(sbLines.toString().trim());
|
|
|
+ } else {
|
|
|
+ seaBillsDetail.setHnotifyDetails("SAME AS CNEE");
|
|
|
+ // throw new RuntimeException("提单通知人描述不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ sbLines.setLength(0);
|
|
|
+
|
|
|
+ sft_row = false;
|
|
|
+ vessel_row = true;
|
|
|
+ } else if (val0.equals("*PLACE OF RECEIPT(收货地)")) {
|
|
|
+ vessel_row = false;
|
|
|
+ receipt_row = true;
|
|
|
+ } else if (val0.equals("MARKS & NUMBERS")) {
|
|
|
+ receipt_row = false;
|
|
|
+ marks_row = true;
|
|
|
+ skip_row = 1;
|
|
|
+ } else if (val0.equals("REMARK")) {
|
|
|
+ } else {
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r, 0);
|
|
|
+
|
|
|
+ // 收发通行
|
|
|
+ if(sft_row) {
|
|
|
+ sbLines.append(val0.concat("\n"));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 船名航次行
|
|
|
+ if(vessel_row) {
|
|
|
+ // VSL/VOY
|
|
|
+ String vslVoy = val0;
|
|
|
+ if (ObjectUtils.isNotNull(vslVoy)) {
|
|
|
+ if (vslVoy.contains("/")) {
|
|
|
+ String vsl = vslVoy.substring(0, vslVoy.indexOf("/"));
|
|
|
+ String voy = vslVoy.substring(vslVoy.indexOf("/") + 1);
|
|
|
+ if (ObjectUtils.isNotNull(vsl)) {
|
|
|
+ BVessels vessels = bVesselsService.getOne(new LambdaQueryWrapper<BVessels>()
|
|
|
+ .eq(BVessels::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BVessels::getIsDeleted, 0)
|
|
|
+ .like(BVessels::getEnName, vsl)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (vessels != null) {
|
|
|
+ bills.setVesselEnName(vessels.getEnName());
|
|
|
+ bills.setVesselCnName(vessels.getCnName());
|
|
|
+ bills.setVesselId(vessels.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ bills.setVoyageNo(voy);
|
|
|
+ System.out.println("vsl:" + vsl);
|
|
|
+ System.out.println("voy:" + voy);
|
|
|
+ System.out.println("vslVoy:" + vslVoy);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("船名航次不能为空");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("船名航次不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // *Port of Loading (装货港)
|
|
|
+ /* 港口不导
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r, 3);
|
|
|
+ if (ObjectUtils.isNotNull(val0)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, val0)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setPolId(ports.getId());
|
|
|
+ bills.setPolCode(ports.getCode());
|
|
|
+ bills.setPolCnName(ports.getCnName());
|
|
|
+ bills.setPolEnName(ports.getEnName());
|
|
|
+ bills.setPolNamePrint(ports.getEnName());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("装货港 " + val0 + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("装货港不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // *Port of Discharge(卸货港)
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r, 5);
|
|
|
+ if (ObjectUtils.isNotNull(val0)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, val0)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setPodId(ports.getId());
|
|
|
+ bills.setPodCode(ports.getCode());
|
|
|
+ bills.setPodCnName(ports.getCnName());
|
|
|
+ bills.setPodEnName(ports.getEnName());
|
|
|
+ bills.setPodNamePrint(ports.getEnName());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("卸货港 " + val0 + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("卸货港不能为空");
|
|
|
+ }
|
|
|
+ */
|
|
|
+ }
|
|
|
+
|
|
|
+ // 收货地行
|
|
|
+ if(receipt_row) {
|
|
|
+ /* 港口不导
|
|
|
+ System.out.println("por:" + val0);
|
|
|
+ if (ObjectUtils.isNotNull(val0)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, val0)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setPlaceReceiptId(ports.getId());
|
|
|
+ bills.setPlaceReceiptCode(ports.getCode());
|
|
|
+ bills.setPlaceReceiptName(ports.getEnName());
|
|
|
+ bills.setPlaceReceiptNamePrint(ports.getEnName());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("收货地 " + val0 + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("收货地不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ */
|
|
|
+
|
|
|
+ // *Place of Delivery(交货地)
|
|
|
+ /* 港口不导
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r, 3);
|
|
|
+ if (ObjectUtils.isNotNull(val0)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, val0)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setPlaceDeliveryId(ports.getId());
|
|
|
+ bills.setPlaceDeliveryCode(ports.getCode());
|
|
|
+ bills.setPlaceDeliveryName(ports.getEnName());
|
|
|
+ bills.setPlaceDeliveryNamePrint(ports.getEnName());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("交货地 " + val0 + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("交货地不能为空");
|
|
|
+ }
|
|
|
+ */
|
|
|
+
|
|
|
+ // Bill of Lading NO.(提单号)
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r, 5);
|
|
|
+ if (ObjectUtils.isNotNull(val0)) {
|
|
|
+ System.out.println("blno:" + val0);
|
|
|
+ bills.setMblno(val0);
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("提单号不能为空");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 唛头行
|
|
|
+ if(marks_row){
|
|
|
+ if(skip_row>0){
|
|
|
+ // 跳过无效hang
|
|
|
+ skip_row--;
|
|
|
+ }else{
|
|
|
+ // 找到 *托运人签章:标识
|
|
|
+ int stop_row = r;
|
|
|
+ for (int r1 = r; r1 <= lastRow; r1++) {
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r1, 6).toUpperCase(); // .replace(" ", "")
|
|
|
+ if(val0.equals("*托运人签章:")){
|
|
|
+ stop_row = r1 - 1;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 唛头
|
|
|
+ sbLines.setLength(0);
|
|
|
+ for (int r1 = r; r1 <= stop_row; r1++) {
|
|
|
+ sbLines.append(getSheetCellValueAsString(sheet, r1, 0).toUpperCase().trim().concat("\r\n"));
|
|
|
+ }
|
|
|
+ bills.setMarks(sbLines.toString().trim());
|
|
|
+
|
|
|
+ // 货描
|
|
|
+ sbLines.setLength(0);
|
|
|
+ for (int r1 = r; r1 <= stop_row; r1++) {
|
|
|
+ sbLines.append(getSheetCellValueAsString(sheet, r1, 3).toUpperCase().trim().concat("\r\n"));
|
|
|
+ }
|
|
|
+ bills.setCommodityDescr(sbLines.toString().trim());
|
|
|
+
|
|
|
+ // 件数
|
|
|
+ Map<String, Object> pkgs = getSheetCellValueAsNumericPrefixMap(sheet, r, 2);
|
|
|
+ String kindPkgs = pkgs.get("str").toString();
|
|
|
+ if (ObjectUtils.isNotNull(kindPkgs)) {
|
|
|
+ BPackages bPackages = bPackagesService.getOne(new LambdaQueryWrapper<BPackages>()
|
|
|
+ .eq(BPackages::getEnName, kindPkgs));
|
|
|
+ if (bPackages != null) {
|
|
|
+ bills.setPackingUnitId(bPackages.getId());
|
|
|
+ bills.setPackingUnit(bPackages.getEnName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ bills.setQuantity(new BigDecimal(String.valueOf(pkgs.get("value"))).setScale(0, RoundingMode.HALF_UP));
|
|
|
+ bills.setQuantityPackingDescr("SAY " + BigDecimalUtils.convertToEnglish(bills.getQuantity()) + " " + bills.getPackingUnit() + " ONLY.");
|
|
|
+
|
|
|
+ // G.W.
|
|
|
+ double gw = getSheetCellValueAsNumericPrefix(sheet, r, 6);
|
|
|
+ System.out.println("gw:" + gw);
|
|
|
+ bills.setGrossWeight(new BigDecimal(gw).setScale(3, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ // MEAS
|
|
|
+ double meas = getSheetCellValueAsNumericPrefix(sheet, r, 7);
|
|
|
+ System.out.println("meas:" + meas);
|
|
|
+ bills.setMeasurement(new BigDecimal(meas).setScale(3, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ // 跳出大循环
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ bills.setContainersList(new ArrayList<>());
|
|
|
+ bills.setPreContainersList(new ArrayList<>());
|
|
|
+ bills.setContainersReportsList(new ArrayList<>());
|
|
|
+ bills.setFeeCenterListC(new ArrayList<>());
|
|
|
+ bills.setFeeCenterListD(new ArrayList<>());
|
|
|
+ bills.setFilesList(new ArrayList<>());
|
|
|
+ bills.setWaitingBoxList(new ArrayList<>());
|
|
|
+ bills.setDetail(seaBillsDetail);
|
|
|
+ // 将字符串为null的赋默认值为""
|
|
|
+ resetBillsNullValuesAsEmptyString(bills);
|
|
|
+
|
|
|
+ return R.data(bills);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ @Override
|
|
|
+ public R<Bills> importPilBooking_bak(MultipartFile file, Long billId) throws Exception {
|
|
|
+ Bills bills = billsService.getById(billId);
|
|
|
+ SeaBillsDetail seaBillsDetail = new SeaBillsDetail();
|
|
|
+ // 创建临时文件
|
|
|
+ Path tempFile = Files.createTempFile("prefix", "suffix");
|
|
|
+ // 将MultipartFile的内容复制到临时文件
|
|
|
+ Files.copy(file.getInputStream(), tempFile, StandardCopyOption.REPLACE_EXISTING);
|
|
|
|
|
|
// 创建FileInputStream来读取临时文件
|
|
|
FileInputStream fis = new FileInputStream(tempFile.toFile());
|
|
|
@@ -887,6 +1219,7 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
resetBillsNullValuesAsEmptyString(bills);
|
|
|
return R.data(bills);
|
|
|
}
|
|
|
+ */
|
|
|
|
|
|
@Override
|
|
|
public R<Bills> importPilCutOffOrders(MultipartFile file, Long billId) throws Exception {
|
|
|
@@ -896,6 +1229,326 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
Path tempFile = Files.createTempFile("prefix", "suffix");
|
|
|
// 将MultipartFile的内容复制到临时文件
|
|
|
Files.copy(file.getInputStream(), tempFile, StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ // 创建FileInputStream来读取临时文件
|
|
|
+ FileInputStream fis = new FileInputStream(tempFile.toFile());
|
|
|
+ Workbook workbook = null;
|
|
|
+ Sheet sheet = null;
|
|
|
+ String errMsg = "";
|
|
|
+
|
|
|
+ try {
|
|
|
+ workbook = WorkbookFactory.create(fis);
|
|
|
+ sheet = workbook.getSheetAt(0); // 获取第一个工作表
|
|
|
+ } catch (Exception e) {
|
|
|
+ workbook = null;
|
|
|
+ sheet = null;
|
|
|
+ errMsg = e.getMessage();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ObjectUtils.isNull(workbook) || ObjectUtils.isNull(sheet)) {
|
|
|
+ throw new RuntimeException("文件读取失败,该文件可能不是 Excel 文件!" + errMsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ String stringCellValue = "";
|
|
|
+
|
|
|
+ int firstRow = sheet.getFirstRowNum();
|
|
|
+ int lastRow = sheet.getLastRowNum();
|
|
|
+ if (firstRow <= 0 && lastRow < 0) {
|
|
|
+ throw new RuntimeException("文件内容为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean sft_row = false;
|
|
|
+ boolean vessel_row = false;
|
|
|
+ boolean receipt_row = false;
|
|
|
+ boolean marks_row = false;
|
|
|
+ int skip_row = 0;
|
|
|
+
|
|
|
+ // 收发通导入时,后两行是邮箱和 customer code,不算收发通内容
|
|
|
+ StringBuilder sbLines = new StringBuilder();
|
|
|
+ for (int r = firstRow; r <= lastRow; r++) {
|
|
|
+ String val0 = getSheetCellValueAsString(sheet, r, 0).toUpperCase(); // .replace(" ", "")
|
|
|
+ if (val0.equals("*SHIPPER(托运人):")) {
|
|
|
+ sbLines.setLength(0);
|
|
|
+ sft_row = true;
|
|
|
+ } else if (val0.equals("*CONSIGNEE(收货人):")) {
|
|
|
+ if (stringBuilderIsNotEmpty(sbLines)) {
|
|
|
+ System.out.println("shipper:" + sbLines);
|
|
|
+ seaBillsDetail.setHshipperDetails(sbLines.toString().trim());
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("提单发货人描述不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ sft_row = true;
|
|
|
+ sbLines.setLength(0);
|
|
|
+ } else if (val0.equals("*NOTIFY PARTY(通知人):")) {
|
|
|
+ if (stringBuilderIsNotEmpty(sbLines)) {
|
|
|
+ System.out.println("consignee:" + sbLines);
|
|
|
+ seaBillsDetail.setHconsigneeDetails(sbLines.toString().trim());
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("提单收货人描述不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ sft_row = true;
|
|
|
+ sbLines.setLength(0);
|
|
|
+ } else if (val0.equals("ALSO NOTIFY")) {
|
|
|
+ if (stringBuilderIsNotEmpty(sbLines)) {
|
|
|
+ System.out.println("notifyParty:" + sbLines);
|
|
|
+ seaBillsDetail.setHnotifyDetails(sbLines.toString().trim());
|
|
|
+ } else {
|
|
|
+ seaBillsDetail.setHnotifyDetails("SAME AS CNEE");
|
|
|
+ }
|
|
|
+
|
|
|
+ sft_row = true;
|
|
|
+ sbLines.setLength(0);
|
|
|
+ } else if (val0.equals("VESSEL/VOYAGE NUMBER(船名或船期)")) {
|
|
|
+ if (stringBuilderIsNotEmpty(sbLines)) {
|
|
|
+ System.out.println("notifyParty:" + sbLines);
|
|
|
+ seaBillsDetail.setHnotifyDetails(sbLines.toString().trim());
|
|
|
+ } else {
|
|
|
+ seaBillsDetail.setHnotifyDetails("SAME AS CNEE");
|
|
|
+ }
|
|
|
+
|
|
|
+ sbLines.setLength(0);
|
|
|
+
|
|
|
+ sft_row = false;
|
|
|
+ vessel_row = true;
|
|
|
+ } else if (val0.equals("*PLACE OF RECEIPT(收货地)")) {
|
|
|
+ vessel_row = false;
|
|
|
+ receipt_row = true;
|
|
|
+ } else if (val0.equals("MARKS & NUMBERS")) {
|
|
|
+ receipt_row = false;
|
|
|
+ marks_row = true;
|
|
|
+ skip_row = 1;
|
|
|
+ } else if (val0.equals("REMARK")) {
|
|
|
+ } else {
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r, 0);
|
|
|
+
|
|
|
+ // 收发通行
|
|
|
+ if(sft_row) {
|
|
|
+ sbLines.append(val0.concat("\n"));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 船名航次行
|
|
|
+ if(vessel_row) {
|
|
|
+ // VSL/VOY
|
|
|
+ String vslVoy = val0;
|
|
|
+ if (ObjectUtils.isNotNull(vslVoy)) {
|
|
|
+ if (vslVoy.contains("/")) {
|
|
|
+ String vsl = vslVoy.substring(0, vslVoy.indexOf("/"));
|
|
|
+ String voy = vslVoy.substring(vslVoy.indexOf("/") + 1);
|
|
|
+ if (ObjectUtils.isNotNull(vsl)) {
|
|
|
+ BVessels vessels = bVesselsService.getOne(new LambdaQueryWrapper<BVessels>()
|
|
|
+ .eq(BVessels::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BVessels::getIsDeleted, 0)
|
|
|
+ .like(BVessels::getEnName, vsl)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (vessels != null) {
|
|
|
+ bills.setVesselEnName(vessels.getEnName());
|
|
|
+ bills.setVesselCnName(vessels.getCnName());
|
|
|
+ bills.setVesselId(vessels.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ bills.setVoyageNo(voy);
|
|
|
+ System.out.println("vsl:" + vsl);
|
|
|
+ System.out.println("voy:" + voy);
|
|
|
+ System.out.println("vslVoy:" + vslVoy);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("船名航次不能为空");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("船名航次不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // *Port of Loading (装货港)
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r, 3).toUpperCase();
|
|
|
+ if (ObjectUtils.isNotNull(val0)) {
|
|
|
+ if (val0.contains("QINGDAO")) {
|
|
|
+ // 青岛
|
|
|
+ val0 = "QINGDAO,CHINA";
|
|
|
+ }
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, val0)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setPolId(ports.getId());
|
|
|
+ bills.setPolCode(ports.getCode());
|
|
|
+ bills.setPolCnName(ports.getCnName());
|
|
|
+ bills.setPolEnName(ports.getEnName());
|
|
|
+ bills.setPolNamePrint(ports.getEnName());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("装货港 " + val0 + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("装货港不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // *Port of Discharge(卸货港)
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r, 5);
|
|
|
+ if (ObjectUtils.isNotNull(val0)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, val0)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setPodId(ports.getId());
|
|
|
+ bills.setPodCode(ports.getCode());
|
|
|
+ bills.setPodCnName(ports.getCnName());
|
|
|
+ bills.setPodEnName(ports.getEnName());
|
|
|
+ bills.setPodNamePrint(ports.getEnName());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("卸货港 " + val0 + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("卸货港不能为空");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 收货地行
|
|
|
+ if(receipt_row) {
|
|
|
+ /* 港口不导
|
|
|
+ System.out.println("por:" + val0);
|
|
|
+ if (ObjectUtils.isNotNull(val0)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, val0)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setPlaceReceiptId(ports.getId());
|
|
|
+ bills.setPlaceReceiptCode(ports.getCode());
|
|
|
+ bills.setPlaceReceiptName(ports.getEnName());
|
|
|
+ bills.setPlaceReceiptNamePrint(ports.getEnName());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("收货地 " + val0 + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("收货地不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ */
|
|
|
+
|
|
|
+ // *Place of Delivery(交货地)
|
|
|
+ /* 港口不导
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r, 3);
|
|
|
+ if (ObjectUtils.isNotNull(val0)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, val0)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setPlaceDeliveryId(ports.getId());
|
|
|
+ bills.setPlaceDeliveryCode(ports.getCode());
|
|
|
+ bills.setPlaceDeliveryName(ports.getEnName());
|
|
|
+ bills.setPlaceDeliveryNamePrint(ports.getEnName());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("交货地 " + val0 + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("交货地不能为空");
|
|
|
+ }
|
|
|
+ */
|
|
|
+
|
|
|
+ // Bill of Lading NO.(提单号) 不导
|
|
|
+ /*
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r, 5);
|
|
|
+ if (ObjectUtils.isNotNull(val0)) {
|
|
|
+ System.out.println("blno:" + val0);
|
|
|
+ bills.setMblno(val0);
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("提单号不能为空");
|
|
|
+ }
|
|
|
+ */
|
|
|
+ }
|
|
|
+
|
|
|
+ // 唛头行
|
|
|
+ if(marks_row){
|
|
|
+ if(skip_row>0){
|
|
|
+ // 跳过无效hang
|
|
|
+ skip_row--;
|
|
|
+ }else{
|
|
|
+ // 找到 *托运人签章:标识
|
|
|
+ int stop_row = r;
|
|
|
+ for (int r1 = r; r1 <= lastRow; r1++) {
|
|
|
+ val0 = getSheetCellValueAsString(sheet, r1, 6).toUpperCase(); // .replace(" ", "")
|
|
|
+ if(val0.equals("*托运人签章:")){
|
|
|
+ stop_row = r1 - 1;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 唛头
|
|
|
+ sbLines.setLength(0);
|
|
|
+ for (int r1 = r; r1 <= stop_row; r1++) {
|
|
|
+ sbLines.append(getSheetCellValueAsString(sheet, r1, 0).toUpperCase().trim().concat("\r\n"));
|
|
|
+ }
|
|
|
+ bills.setMarks(sbLines.toString().trim());
|
|
|
+
|
|
|
+ // 货描
|
|
|
+ sbLines.setLength(0);
|
|
|
+ for (int r1 = r; r1 <= stop_row; r1++) {
|
|
|
+ sbLines.append(getSheetCellValueAsString(sheet, r1, 3).toUpperCase().trim().concat("\r\n"));
|
|
|
+ }
|
|
|
+ bills.setCommodityDescr(sbLines.toString().trim());
|
|
|
+
|
|
|
+ // 件数
|
|
|
+ Map<String, Object> pkgs = getSheetCellValueAsNumericPrefixMap(sheet, r, 2);
|
|
|
+ String kindPkgs = pkgs.get("str").toString();
|
|
|
+ if (ObjectUtils.isNotNull(kindPkgs)) {
|
|
|
+ BPackages bPackages = bPackagesService.getOne(new LambdaQueryWrapper<BPackages>()
|
|
|
+ .eq(BPackages::getEnName, kindPkgs));
|
|
|
+ if (bPackages != null) {
|
|
|
+ bills.setPackingUnitId(bPackages.getId());
|
|
|
+ bills.setPackingUnit(bPackages.getEnName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ bills.setQuantity(new BigDecimal(String.valueOf(pkgs.get("value"))).setScale(0, RoundingMode.HALF_UP));
|
|
|
+ bills.setQuantityPackingDescr("SAY " + BigDecimalUtils.convertToEnglish(bills.getQuantity()) + " " + bills.getPackingUnit() + " ONLY.");
|
|
|
+
|
|
|
+ // G.W.
|
|
|
+ double gw = getSheetCellValueAsNumericPrefix(sheet, r, 6);
|
|
|
+ System.out.println("gw:" + gw);
|
|
|
+ bills.setGrossWeight(new BigDecimal(gw).setScale(3, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ // MEAS
|
|
|
+ double meas = getSheetCellValueAsNumericPrefix(sheet, r, 7);
|
|
|
+ System.out.println("meas:" + meas);
|
|
|
+ bills.setMeasurement(new BigDecimal(meas).setScale(3, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ // 跳出大循环
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ bills.setContainersList(new ArrayList<>());
|
|
|
+ bills.setPreContainersList(new ArrayList<>());
|
|
|
+ bills.setContainersReportsList(new ArrayList<>());
|
|
|
+ bills.setFeeCenterListC(new ArrayList<>());
|
|
|
+ bills.setFeeCenterListD(new ArrayList<>());
|
|
|
+ bills.setFilesList(new ArrayList<>());
|
|
|
+ bills.setWaitingBoxList(new ArrayList<>());
|
|
|
+ bills.setDetail(seaBillsDetail);
|
|
|
+ // 将字符串为null的赋默认值为""
|
|
|
+ resetBillsNullValuesAsEmptyString(bills);
|
|
|
+
|
|
|
+ return R.data(bills);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ @Override
|
|
|
+ public R<Bills> importPilCutOffOrders(MultipartFile file, Long billId) throws Exception {
|
|
|
+ Bills bills = billsService.getById(billId);
|
|
|
+ SeaBillsDetail seaBillsDetail = new SeaBillsDetail();
|
|
|
+ // 创建临时文件
|
|
|
+ Path tempFile = Files.createTempFile("prefix", "suffix");
|
|
|
+ // 将MultipartFile的内容复制到临时文件
|
|
|
+ Files.copy(file.getInputStream(), tempFile, StandardCopyOption.REPLACE_EXISTING);
|
|
|
|
|
|
// 创建FileInputStream来读取临时文件
|
|
|
FileInputStream fis = new FileInputStream(tempFile.toFile());
|
|
|
@@ -1154,14 +1807,15 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
resetBillsNullValuesAsEmptyString(bills);
|
|
|
return R.data(bills);
|
|
|
}
|
|
|
+ */
|
|
|
|
|
|
@Override
|
|
|
public R<Bills> importHisenseBill(MultipartFile file, Long billId) throws Exception {
|
|
|
- // Bills bills = billsService.getById(billId);
|
|
|
+ Bills bills = billsService.getById(billId);
|
|
|
|
|
|
- Bills bills = new Bills();
|
|
|
- resetBillsValuesAsNull(bills);
|
|
|
- bills.setId(billId);
|
|
|
+ // Bills bills = new Bills();
|
|
|
+ // resetBillsValuesAsNull(bills);
|
|
|
+ // bills.setId(billId);
|
|
|
|
|
|
// SeaBillsDetail seaBillsDetail = new SeaBillsDetail();
|
|
|
SeaBillsDetail seaBillsDetail = seaBillsDetailService.getOne(new LambdaQueryWrapper<SeaBillsDetail>()
|