|
|
@@ -9,6 +9,7 @@ import org.apache.poi.ss.usermodel.*;
|
|
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.los.Util.RegularUtils;
|
|
|
import org.springblade.los.basic.packages.entity.BPackages;
|
|
|
import org.springblade.los.basic.packages.service.IBPackagesService;
|
|
|
import org.springblade.los.basic.ports.entity.BPorts;
|
|
|
@@ -22,6 +23,7 @@ import org.springblade.los.business.sea.service.IBillsService;
|
|
|
import org.springblade.los.business.sea.service.ITemplateImportService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
+import org.stringtemplate.v4.ST;
|
|
|
|
|
|
import java.io.FileInputStream;
|
|
|
import java.lang.reflect.Field;
|
|
|
@@ -31,9 +33,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.Arrays;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* @author :jixinyuan
|
|
|
@@ -51,12 +51,16 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
private final IBillsService billsService;
|
|
|
|
|
|
public static double splitNumericPrefixFromString(String str){
|
|
|
- str=str.trim();
|
|
|
- String str2="";
|
|
|
+ str=str.replace(" ","").trim();
|
|
|
+ String str2="", str3="";
|
|
|
+ Boolean bf = false;
|
|
|
if(str != null && !"".equals(str)){
|
|
|
for(int i=0; i<str.length(); i++){
|
|
|
- if(str.charAt(i)==46||(str.charAt(i)>=48 && str.charAt(i)<=57)){
|
|
|
- str2+=str.charAt(i);
|
|
|
+ if(!bf && (str.charAt(i)==46||(str.charAt(i)>=48 && str.charAt(i)<=57))){
|
|
|
+ str2 += str.charAt(i);
|
|
|
+ }else{
|
|
|
+ bf = true;
|
|
|
+ str3 += str.charAt(i);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -72,6 +76,35 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public static Map<String, Object> splitNumericPrefixMapFromString(String str){
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ str=str.replace(" ","").trim();
|
|
|
+ String str2="", str3="";
|
|
|
+ Boolean bf = false;
|
|
|
+ if(str != null && !"".equals(str)){
|
|
|
+ for(int i=0; i<str.length(); i++){
|
|
|
+ if(!bf && (str.charAt(i)==46||(str.charAt(i)>=48 && str.charAt(i)<=57))){
|
|
|
+ str2 += str.charAt(i);
|
|
|
+ }else{
|
|
|
+ bf = true;
|
|
|
+ str3 += str.charAt(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ double d=0;
|
|
|
+
|
|
|
+ try{
|
|
|
+ d = Double.parseDouble(str2);
|
|
|
+ }catch (Exception e){
|
|
|
+ d = 0;
|
|
|
+ }finally{
|
|
|
+ map.put("value", d);
|
|
|
+ map.put("str", str3);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public static String getSheetCellValueAsString(Sheet sheet, int row, int col){
|
|
|
Row r = sheet.getRow(row);
|
|
|
Cell c = ObjectUtils.isNotNull(r) ? r.getCell(col) : null;
|
|
|
@@ -132,6 +165,12 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
return splitNumericPrefixFromString(str);
|
|
|
}
|
|
|
|
|
|
+ public static Map<String, Object> getSheetCellValueAsNumericPrefixMap(Sheet sheet, int row, int col) {
|
|
|
+ String str = getSheetCellValueAsString(sheet, row, col);
|
|
|
+
|
|
|
+ return splitNumericPrefixMapFromString(str);
|
|
|
+ }
|
|
|
+
|
|
|
public static Boolean stringBuilderIsNotEmpty(StringBuilder sb){
|
|
|
return ObjectUtils.isNotNull(sb) && !sb.toString().trim().isEmpty();
|
|
|
}
|
|
|
@@ -225,284 +264,328 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
Files.copy(file.getInputStream(), tempFile, StandardCopyOption.REPLACE_EXISTING);
|
|
|
// 创建FileInputStream来读取临时文件
|
|
|
FileInputStream fis = new FileInputStream(tempFile.toFile());
|
|
|
- Workbook workbook = WorkbookFactory.create(fis);
|
|
|
- Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表
|
|
|
-
|
|
|
- String stringCellValue = "";
|
|
|
+ Workbook workbook = null;
|
|
|
+ Sheet sheet = null;
|
|
|
+ String errMsg = "";
|
|
|
|
|
|
- //TO
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(1).getCell(1))) {
|
|
|
- String to = getSheetCellValueAsString(sheet, 1, 1);
|
|
|
- System.out.println("TO:" + to);
|
|
|
- }
|
|
|
- //ATTN
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(2).getCell(1))) {
|
|
|
- String attn = getSheetCellValueAsString(sheet, 2, 1);
|
|
|
- System.out.println("attn:" + attn);
|
|
|
- }
|
|
|
- //SHIPPER
|
|
|
- StringBuilder shipper = new StringBuilder();
|
|
|
- for (int i = 3; i <= 7; i++) {
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(i).getCell(1))) {
|
|
|
- shipper.append(getSheetCellValueAsString(sheet, i, 1) + "\r\n");
|
|
|
- }
|
|
|
- }
|
|
|
- if (stringBuilderIsNotEmpty(shipper)) {
|
|
|
- seaBillsDetail.setHshipperDetails(shipper.toString().trim());
|
|
|
-// bills.setHshipperDetails(shipper.toString());
|
|
|
- System.out.println("shipper:" + shipper);
|
|
|
- } else {
|
|
|
- throw new RuntimeException("发货人提单描述不能为空");
|
|
|
- }
|
|
|
- //CONSIGNEE
|
|
|
- StringBuilder consignee = new StringBuilder();
|
|
|
- for (int i = 8; i <= 12; i++) {
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(i).getCell(1))) {
|
|
|
- consignee.append(getSheetCellValueAsString(sheet, i, 1) + "\r\n");
|
|
|
- }
|
|
|
- }
|
|
|
- if (stringBuilderIsNotEmpty(consignee)) {
|
|
|
- seaBillsDetail.setHconsigneeDetails(consignee.toString().trim());
|
|
|
-// bills.setHconsigneeDetails(consignee.toString());
|
|
|
- System.out.println("consignee:" + consignee);
|
|
|
- } else {
|
|
|
- throw new RuntimeException("收货人提单描述不能为空");
|
|
|
- }
|
|
|
- //NOTIFY PARTY
|
|
|
- StringBuilder notifyParty = new StringBuilder();
|
|
|
- for (int i = 13; i <= 17; i++) {
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(i).getCell(1))) {
|
|
|
- notifyParty.append(getSheetCellValueAsString(sheet, i, 1) + "\r\n");
|
|
|
- }
|
|
|
+ try{
|
|
|
+ workbook = WorkbookFactory.create(fis);
|
|
|
+ sheet = workbook.getSheetAt(0); // 获取第一个工作表
|
|
|
+ }catch (Exception e){
|
|
|
+ workbook = null;
|
|
|
+ sheet = null;
|
|
|
+ errMsg = e.getMessage();
|
|
|
}
|
|
|
- if (stringBuilderIsNotEmpty(notifyParty)) {
|
|
|
- seaBillsDetail.setHnotifyDetails(notifyParty.toString().trim());
|
|
|
-// bills.setHnotifyDetails(notifyParty.toString());
|
|
|
- System.out.println("notifyParty:" + notifyParty);
|
|
|
- } else {
|
|
|
- throw new RuntimeException("通知人提单描述不能为空");
|
|
|
+
|
|
|
+ if(ObjectUtils.isNull(workbook) || ObjectUtils.isNull(sheet)) {
|
|
|
+ throw new RuntimeException("文件读取失败,该文件可能不是 Excel 文件!" + errMsg);
|
|
|
}
|
|
|
- //B/L NO
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(18).getCell(1))) {
|
|
|
- String blno = getSheetCellValueAsString(sheet, 18, 1);
|
|
|
- System.out.println("blno:" + blno);
|
|
|
- bills.setMblno(blno);
|
|
|
- } else {
|
|
|
- throw new RuntimeException("提单号不能为空");
|
|
|
+
|
|
|
+ String stringCellValue = "";
|
|
|
+
|
|
|
+ int firstRow = sheet.getFirstRowNum();
|
|
|
+ int lastRow = sheet.getLastRowNum();
|
|
|
+ if(firstRow<=0 && lastRow<0){
|
|
|
+ throw new RuntimeException("文件内容为空!");
|
|
|
}
|
|
|
- //VSL/VOY
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(18).getCell(4))) {
|
|
|
- String vslVoy = getSheetCellValueAsString(sheet, 18, 4);
|
|
|
- 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)
|
|
|
+
|
|
|
+ StringBuilder sbLines = new StringBuilder();
|
|
|
+ for(int r=firstRow; r<=lastRow; r++) {
|
|
|
+ String val0 = getSheetCellValueAsString(sheet, r, 0).toUpperCase().replace(" ", "");
|
|
|
+ if(val0.isEmpty()){
|
|
|
+ sbLines.append(getSheetCellValueAsString(sheet, r, 1).concat("\r\n"));
|
|
|
+ } else if (val0.equals("TO:")) {
|
|
|
+ System.out.println("TO:" + getSheetCellValueAsString(sheet, r, 1).toUpperCase());
|
|
|
+ } else if (val0.equals("ATTN:")) {
|
|
|
+ System.out.println("ATTN:" + getSheetCellValueAsString(sheet, r, 1).toUpperCase());
|
|
|
+ } else if (val0.equals("SHIPPER")) {
|
|
|
+ sbLines.setLength(0);
|
|
|
+ sbLines.append(getSheetCellValueAsString(sheet, r, 1).concat("\r\n"));
|
|
|
+ } else if (val0.equals("CONSIGNEE")) {
|
|
|
+ if (stringBuilderIsNotEmpty(sbLines)) {
|
|
|
+ System.out.println("shipper:" + sbLines);
|
|
|
+ seaBillsDetail.setHshipperDetails(sbLines.toString().trim());
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("提单发货人描述不能为空");
|
|
|
+ }
|
|
|
+ sbLines.setLength(0);
|
|
|
+ sbLines.append(getSheetCellValueAsString(sheet, r, 1).toUpperCase().concat("\r\n"));
|
|
|
+ } else if (val0.equals("NOTIFYPARTY")) {
|
|
|
+ if (stringBuilderIsNotEmpty(sbLines)) {
|
|
|
+ System.out.println("consignee:" + sbLines);
|
|
|
+ seaBillsDetail.setHconsigneeDetails(sbLines.toString().trim());
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("提单收货人描述不能为空");
|
|
|
+ }
|
|
|
+ sbLines.setLength(0);
|
|
|
+ sbLines.append(getSheetCellValueAsString(sheet, r, 1).toUpperCase().concat("\r\n"));
|
|
|
+ } else if (val0.equals("B/LNO")) {
|
|
|
+ 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);
|
|
|
+
|
|
|
+ String blno = getSheetCellValueAsString(sheet, r, 1);
|
|
|
+ if(ObjectUtils.isNotNull(blno)){
|
|
|
+ System.out.println("blno:" + blno);
|
|
|
+ bills.setMblno(blno);
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("提单号不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ //VSL/VOY
|
|
|
+ String vslVoy = getSheetCellValueAsString(sheet, r, 4);
|
|
|
+ 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("船名航次不能为空");
|
|
|
+ }
|
|
|
+ } else if (val0.equals("POR")) {
|
|
|
+ String port = getSheetCellValueAsString(sheet, r, 1);
|
|
|
+ System.out.println("por:" + port);
|
|
|
+ if (ObjectUtils.isNotNull(port)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, port)
|
|
|
.last("limit 1"));
|
|
|
- if (vessels != null) {
|
|
|
- bills.setVesselEnName(vessels.getEnName());
|
|
|
- bills.setVesselCnName(vessels.getCnName());
|
|
|
- bills.setVesselId(vessels.getId());
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setPlaceReceiptId(ports.getId());
|
|
|
+ bills.setPlaceReceiptCode(ports.getCode());
|
|
|
+ bills.setPlaceReceiptName(ports.getEnName());
|
|
|
+ bills.setPlaceReceiptNamePrint(ports.getEnName());
|
|
|
+ }else {
|
|
|
+ throw new RuntimeException("收货地 " + port + " 无法识别!");
|
|
|
}
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("收货地不能为空");
|
|
|
}
|
|
|
- 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("船名航次不能为空");
|
|
|
- }
|
|
|
- //POR
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(19).getCell(1))) {
|
|
|
- String por = getSheetCellValueAsString(sheet, 19, 1);
|
|
|
- if (ObjectUtils.isNotNull(por)) {
|
|
|
- BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
- .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(BPorts::getIsDeleted, 0)
|
|
|
- .like(BPorts::getEnName, por)
|
|
|
- .last("limit 1"));
|
|
|
- if (ports != null) {
|
|
|
- bills.setPlaceReceiptId(ports.getId());
|
|
|
- bills.setPlaceReceiptCode(ports.getCode());
|
|
|
- bills.setPlaceReceiptName(ports.getEnName());
|
|
|
- bills.setPlaceReceiptNamePrint(ports.getEnName());
|
|
|
+
|
|
|
+ port = getSheetCellValueAsString(sheet, r, 4);
|
|
|
+ System.out.println("pol:" + port);
|
|
|
+ if (ObjectUtils.isNotNull(port)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, port)
|
|
|
+ .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("装货港 " + port + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("装货港不能为空");
|
|
|
+ }
|
|
|
+ } else if (val0.equals("POD")) {
|
|
|
+ String port = getSheetCellValueAsString(sheet, r, 1);
|
|
|
+ System.out.println("pod:" + port);
|
|
|
+ if (ObjectUtils.isNotNull(port)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, port)
|
|
|
+ .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("卸货港 " + port + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("卸货港不能为空");
|
|
|
}
|
|
|
- }
|
|
|
- System.out.println("por:" + por);
|
|
|
|
|
|
- } else {
|
|
|
- throw new RuntimeException("收货地不能为空");
|
|
|
- }
|
|
|
- //POL
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(19).getCell(4))) {
|
|
|
- String pol = getSheetCellValueAsString(sheet, 19, 4);
|
|
|
- if (ObjectUtils.isNotNull(pol)) {
|
|
|
- BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
- .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(BPorts::getIsDeleted, 0)
|
|
|
- .like(BPorts::getEnName, pol)
|
|
|
- .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());
|
|
|
+ port = getSheetCellValueAsString(sheet, r, 4);
|
|
|
+ System.out.println("place Of Delivery:" + port);
|
|
|
+ if (ObjectUtils.isNotNull(port)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, port)
|
|
|
+ .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("交货地 " + port + " 无法识别!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("交货地不能为空");
|
|
|
}
|
|
|
- }
|
|
|
- System.out.println("pol:" + pol);
|
|
|
- } else {
|
|
|
- throw new RuntimeException("装运港不能为空");
|
|
|
- }
|
|
|
- //POD
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(20).getCell(1))) {
|
|
|
- String pod = getSheetCellValueAsString(sheet, 20, 1);
|
|
|
- if (ObjectUtils.isNotNull(pod)) {
|
|
|
- BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
- .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(BPorts::getIsDeleted, 0)
|
|
|
- .like(BPorts::getEnName, pod)
|
|
|
- .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 if (val0.equals("KINDOFB/L")) {
|
|
|
+ String s1 = getSheetCellValueAsString(sheet, r, 1);
|
|
|
+ System.out.println("kindOfBl:" + s1);
|
|
|
+ if (ObjectUtils.isNotNull(s1)) {
|
|
|
+ // 正本 ORI
|
|
|
+ // 电放 TER
|
|
|
+ // SWB EXP WAYBILL
|
|
|
+ bills.setIssueType("WAYBILL".equals(s1) ? "EXP" : ("电放".equals(s1) ? "TER" : "ORI"));
|
|
|
+ } else {
|
|
|
+ // throw new RuntimeException("签单方式不能为空");
|
|
|
}
|
|
|
- }
|
|
|
- System.out.println("pod:" + pod);
|
|
|
- } else {
|
|
|
- throw new RuntimeException("卸货港不能为空");
|
|
|
- }
|
|
|
- //PLACE OF DELIVERY
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(20).getCell(4))) {
|
|
|
- String placeOfDelivery = getSheetCellValueAsString(sheet, 20, 4);
|
|
|
- if (ObjectUtils.isNotNull(placeOfDelivery)) {
|
|
|
- BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
- .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(BPorts::getIsDeleted, 0)
|
|
|
- .like(BPorts::getEnName, placeOfDelivery)
|
|
|
- .last("limit 1"));
|
|
|
- if (ports != null) {
|
|
|
- bills.setPlaceDeliveryId(ports.getId());
|
|
|
- bills.setPlaceDeliveryCode(ports.getCode());
|
|
|
- bills.setPlaceDeliveryName(ports.getEnName());
|
|
|
- bills.setPlaceDeliveryNamePrint(ports.getEnName());
|
|
|
+
|
|
|
+ s1 = getSheetCellValueAsString(sheet, r, 4);
|
|
|
+ System.out.println("PAYMODE:" + s1);
|
|
|
+ if(s1.indexOf("PREPAID")>=0){
|
|
|
+ bills.setHpaymode("PP");
|
|
|
}
|
|
|
- }
|
|
|
- System.out.println("placeOfDelivery:" + placeOfDelivery);
|
|
|
- } else {
|
|
|
- throw new RuntimeException("目的港不能为空");
|
|
|
- }
|
|
|
- //KIND OF B/L
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(21).getCell(1))) {
|
|
|
- String kindOfBl = getSheetCellValueAsString(sheet, 21, 1);
|
|
|
- System.out.println("kindOfBl:" + kindOfBl);
|
|
|
- bills.setIssueType(kindOfBl);
|
|
|
- } else {
|
|
|
- throw new RuntimeException("签单方式不能为空");
|
|
|
- }
|
|
|
- //PLACE OF ISSUE
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(22).getCell(1))) {
|
|
|
- String placeOfIssue = getSheetCellValueAsString(sheet, 22, 1);
|
|
|
- System.out.println("placeOfIssue:" + placeOfIssue);
|
|
|
- bills.setIssueAt(placeOfIssue);
|
|
|
- } else {
|
|
|
- throw new RuntimeException("签单地不能为空");
|
|
|
- }
|
|
|
- //FREIGHT PAYABLE AT
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(22).getCell(4))) {
|
|
|
- String freightPayAbleAt = getSheetCellValueAsString(sheet, 22, 4);
|
|
|
- System.out.println("freightPayAbleAt:" + freightPayAbleAt);
|
|
|
- bills.setHpayplace(freightPayAbleAt);
|
|
|
- } else {
|
|
|
- throw new RuntimeException("付费地不能为空");
|
|
|
- }
|
|
|
- //MARKS
|
|
|
- StringBuilder marks = new StringBuilder();
|
|
|
- for (int i = 25; i <= 46; i++) {
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(i).getCell(0))) {
|
|
|
- marks.append(getSheetCellValueAsString(sheet, i, 0) + "\r\n");
|
|
|
- }
|
|
|
- }
|
|
|
- if (stringBuilderIsNotEmpty(marks)) {
|
|
|
- System.out.println("marks:" + marks);
|
|
|
- bills.setMarks(marks.toString().trim());
|
|
|
- } else {
|
|
|
- throw new RuntimeException("唛头不能为空");
|
|
|
- }
|
|
|
- //BAGS
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(25).getCell(1))) {
|
|
|
- double bags = getSheetCellValueAsNumericPrefix(sheet, 25, 1);
|
|
|
- System.out.println("bags:" + bags);
|
|
|
- bills.setQuantity(new BigDecimal(bags).setScale(0, RoundingMode.HALF_UP));
|
|
|
- } else {
|
|
|
- throw new RuntimeException("件数不能为空");
|
|
|
- }
|
|
|
- //DESCRIPTION
|
|
|
- StringBuilder description = new StringBuilder();
|
|
|
- for (int i = 25; i <= 46; i++) {
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(i).getCell(2))) {
|
|
|
- description.append(getSheetCellValueAsString(sheet, i, 2) + "\r\n");
|
|
|
- }
|
|
|
- }
|
|
|
- if (stringBuilderIsNotEmpty(description)) {
|
|
|
- System.out.println("description:" + description);
|
|
|
- bills.setCommodityDescr(description.toString());
|
|
|
- } else {
|
|
|
- throw new RuntimeException("提单上货物描述不能为空");
|
|
|
- }
|
|
|
- //G.W.
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(25).getCell(4))) {
|
|
|
- double gw = getSheetCellValueAsNumericPrefix(sheet, 25, 4);
|
|
|
- System.out.println("gw:" + gw);
|
|
|
- bills.setGrossWeight(new BigDecimal(gw).setScale(3, RoundingMode.HALF_UP));
|
|
|
- } else {
|
|
|
- throw new RuntimeException("毛重不能为空");
|
|
|
- }
|
|
|
- //MEAS
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(25).getCell(6))) {
|
|
|
- double meas = getSheetCellValueAsNumericPrefix(sheet, 25, 6);
|
|
|
- System.out.println("meas:" + meas);
|
|
|
- bills.setMeasurement(new BigDecimal(meas).setScale(3, RoundingMode.HALF_UP));
|
|
|
- } else {
|
|
|
- throw new RuntimeException("体积不能为空");
|
|
|
- }
|
|
|
- //REMARK
|
|
|
- StringBuilder remark = new StringBuilder();
|
|
|
- for (int i = 47; i <= 50; i++) {
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(i).getCell(1))) {
|
|
|
- remark.append(getSheetCellValueAsString(sheet, i, 1) + "\r\n");
|
|
|
- }
|
|
|
- }
|
|
|
- if (stringBuilderIsNotEmpty(remark)) {
|
|
|
- System.out.println("remark:" + remark);
|
|
|
- bills.setRemarks(remark.toString().trim());
|
|
|
- }
|
|
|
- //FINAL DESTINATION FOR THE MERCHANT’S REFERENCE
|
|
|
- if (ObjectUtils.isNotNull(sheet.getRow(51).getCell(4))) {
|
|
|
- String finalDestination = getSheetCellValueAsString(sheet, 51,4);
|
|
|
- if (ObjectUtils.isNotNull(finalDestination)) {
|
|
|
- BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
- .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(BPorts::getIsDeleted, 0)
|
|
|
- .eq(BPorts::getEnName, finalDestination)
|
|
|
- .last("limit 1"));
|
|
|
- if (ports != null) {
|
|
|
- bills.setFinalDestinationId(ports.getId());
|
|
|
- bills.setFinalDestinationCode(ports.getCode());
|
|
|
- bills.setFinalDestinationName(ports.getEnName());
|
|
|
- bills.setFinalDestinationNamePrint(ports.getEnName());
|
|
|
+ if(s1.indexOf("COLLECT")>=0){
|
|
|
+ bills.setHpaymode("CC");
|
|
|
+ }
|
|
|
+ } else if (val0.equals("PLACEOFISSUE")) {
|
|
|
+ String port = getSheetCellValueAsString(sheet, r, 1);
|
|
|
+ System.out.println("Issue At:" + port);
|
|
|
+ if (ObjectUtils.isNotNull(port)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, port)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setIssueAtId(ports.getId());
|
|
|
+ bills.setIssueAt(ports.getEnName());
|
|
|
+ }else {
|
|
|
+ throw new RuntimeException("签单地点 " + port + " 无法识别!");
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ port = getSheetCellValueAsString(sheet, r, 4);
|
|
|
+ System.out.println("FREIGHT PAYABLE AT:" + port);
|
|
|
+ if (ObjectUtils.isNotNull(port)) {
|
|
|
+ bills.setHpayplace(port);
|
|
|
+ }
|
|
|
+ } else if (val0.equals("CONTRACTNO")) {
|
|
|
+ String s1 = getSheetCellValueAsString(sheet, r, 1);
|
|
|
+ System.out.println("Contract No:" + s1);
|
|
|
+ bills.setCarrierArgreementNo(ObjectUtils.isNotNull(s1) ? s1 : "");
|
|
|
+
|
|
|
+ s1 = getSheetCellValueAsString(sheet, r, 4);
|
|
|
+ System.out.println("Volume:" + s1);
|
|
|
+ } else if (val0.equals("MARKS")) {
|
|
|
+ // MARKS
|
|
|
+ int remarkLn = 0;
|
|
|
+ sbLines.setLength(0);
|
|
|
+ for (int l = r + 1; l<=lastRow; l++) {
|
|
|
+ String s1 = getSheetCellValueAsString(sheet, l, 0);
|
|
|
+ if("REMARK".equals(s1.trim())){
|
|
|
+ if (stringBuilderIsNotEmpty(sbLines)) {
|
|
|
+ System.out.println("marks:" + sbLines);
|
|
|
+ bills.setMarks(sbLines.toString().trim());
|
|
|
+ }
|
|
|
+
|
|
|
+ remarkLn = l;
|
|
|
+ break;
|
|
|
+ }else{
|
|
|
+ sbLines.append(s1.concat("\r\n"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // BAGS
|
|
|
+ // double bags = getSheetCellValueAsNumericPrefix(sheet, r + 1, 1);
|
|
|
+ // System.out.println("bags:" + bags);
|
|
|
+
|
|
|
+ Map<String, Object> pkgs = getSheetCellValueAsNumericPrefixMap(sheet, r + 1, 1);
|
|
|
+ String kindPkgs = pkgs.get("str").toString();
|
|
|
+ if(ObjectUtils.isNull(kindPkgs)) {
|
|
|
+ kindPkgs = getSheetCellValueAsString(sheet, r, 1);
|
|
|
+ }
|
|
|
+ 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));
|
|
|
+
|
|
|
+ //G.W.
|
|
|
+ double gw = getSheetCellValueAsNumericPrefix(sheet, r + 1, 4);
|
|
|
+ System.out.println("gw:" + gw);
|
|
|
+ bills.setGrossWeight(new BigDecimal(gw).setScale(3, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //MEAS
|
|
|
+ double meas = getSheetCellValueAsNumericPrefix(sheet, r + 1, 6);
|
|
|
+ System.out.println("meas:" + meas);
|
|
|
+ bills.setMeasurement(new BigDecimal(meas).setScale(3, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ if(remarkLn>0) {
|
|
|
+ // DESCRIPTION
|
|
|
+ sbLines.setLength(0);
|
|
|
+ for (int l = r + 1; l<remarkLn; l++) {
|
|
|
+ String s1 = getSheetCellValueAsString(sheet, l, 2);
|
|
|
+ sbLines.append(s1.concat("\r\n"));
|
|
|
+ }
|
|
|
+ System.out.println("description:" + sbLines);
|
|
|
+ bills.setCommodityDescr(sbLines.toString().trim());
|
|
|
+
|
|
|
+ sbLines.setLength(0);
|
|
|
+ for (int l = remarkLn; l<=lastRow; l++) {
|
|
|
+ String s1 = getSheetCellValueAsString(sheet, l, 0);
|
|
|
+ if(s1.isEmpty() || "REMARK".equals(s1)){
|
|
|
+ sbLines.append(getSheetCellValueAsString(sheet, l, 1).concat("\r\n"));
|
|
|
+ }else if("FINAL DESTINATION FOR THE MERCHANT’S REFERENCE".equals(s1)){
|
|
|
+ String port = getSheetCellValueAsString(sheet, l, 4);
|
|
|
+ System.out.println("finalDestination:" + port);
|
|
|
+ if (ObjectUtils.isNotNull(port)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, port)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setFinalDestinationId(ports.getId());
|
|
|
+ bills.setFinalDestinationCode(ports.getCode());
|
|
|
+ bills.setFinalDestinationName(ports.getEnName());
|
|
|
+ bills.setFinalDestinationNamePrint(ports.getEnName());
|
|
|
+ }else {
|
|
|
+ throw new RuntimeException("最终目的地 " + port + " 无法识别!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println("REMARK:" + sbLines);
|
|
|
+ bills.setBookingRemarks(sbLines.toString().trim());
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
}
|
|
|
- System.out.println("finalDestination:" + finalDestination);
|
|
|
}
|
|
|
|
|
|
bills.setContainersList(new ArrayList<>());
|