|
|
@@ -1340,7 +1340,11 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
//提单号
|
|
|
String mblno = getSheetCellValueAsString(sheet, 6, 10);
|
|
|
if (ObjectUtils.isNotNull(mblno)) {
|
|
|
- bills.setMblno(mblno.trim());
|
|
|
+ if ("MH".equals(bills.getBillType())){
|
|
|
+ bills.setHblno(mblno.trim());
|
|
|
+ }else{
|
|
|
+ bills.setMblno(mblno.trim());
|
|
|
+ }
|
|
|
}
|
|
|
//VSL/VOY
|
|
|
String vslVoy = getSheetCellValueAsString(sheet, 17, 11);
|
|
|
@@ -1575,6 +1579,203 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
|
|
|
return R.data(bills);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R<Bills> importBookingCabin(MultipartFile file) throws Exception {
|
|
|
+ Bills bills = new Bills();
|
|
|
+ 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());
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ int firstRow = sheet.getFirstRowNum();
|
|
|
+ int lastRow = sheet.getLastRowNum();
|
|
|
+ if (firstRow <= 0 && lastRow < 0) {
|
|
|
+ throw new RuntimeException("文件内容为空!");
|
|
|
+ }
|
|
|
+ //发货人提单描述
|
|
|
+ String hshipper = getSheetCellValueAsString(sheet, 1, 0);
|
|
|
+ if (ObjectUtils.isNotNull(hshipper)) {
|
|
|
+ seaBillsDetail.setHshipperDetails(hshipper.toUpperCase());
|
|
|
+ }
|
|
|
+ //收货人提单描述
|
|
|
+ String hconsignee = getSheetCellValueAsString(sheet, 7, 0);
|
|
|
+ if (ObjectUtils.isNotNull(hconsignee)) {
|
|
|
+ seaBillsDetail.setHconsigneeDetails(hconsignee.toUpperCase());
|
|
|
+ }
|
|
|
+ //通知人提单描述
|
|
|
+ String hnotify = getSheetCellValueAsString(sheet, 13, 0);
|
|
|
+ if (ObjectUtils.isNotNull(hnotify)) {
|
|
|
+ seaBillsDetail.setHnotifyDetails(hnotify.toUpperCase());
|
|
|
+ }
|
|
|
+ //提单号
|
|
|
+ String mblno = getSheetCellValueAsString(sheet, 6, 10);
|
|
|
+ if (ObjectUtils.isNotNull(mblno)) {
|
|
|
+ if ("MH".equals(bills.getBillType())){
|
|
|
+ bills.setHblno(mblno.trim());
|
|
|
+ }else{
|
|
|
+ bills.setMblno(mblno.trim());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //VSL/VOY
|
|
|
+ String vslVoy = getSheetCellValueAsString(sheet, 17, 11);
|
|
|
+ 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("船名航次不能为空");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //pol
|
|
|
+ String pol = getSheetCellValueAsString(sheet, 19, 0);
|
|
|
+ System.out.println("Port of Loading:" + pol);
|
|
|
+ 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.setPolCnName(ports.getCnName());
|
|
|
+ bills.setPolCode(ports.getCode());
|
|
|
+ bills.setPolEnName(ports.getEnName());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("Port of Loading:" + pol + " 无法识别!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //pod
|
|
|
+ String pod = getSheetCellValueAsString(sheet, 19, 2);
|
|
|
+ System.out.println("Port of Discharge:" + pod);
|
|
|
+ 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.setPodCnName(ports.getCnName());
|
|
|
+ bills.setPodCode(ports.getCode());
|
|
|
+ bills.setPodEnName(ports.getEnName());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("Port of Discharge:" + pod + " 无法识别!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //交货地
|
|
|
+ String placeDelivery = getSheetCellValueAsString(sheet, 19, 10);
|
|
|
+ System.out.println("Place of delivery:" + placeDelivery);
|
|
|
+ if (ObjectUtils.isNotNull(placeDelivery)) {
|
|
|
+ BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
|
|
|
+ .eq(BPorts::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BPorts::getIsDeleted, 0)
|
|
|
+ .like(BPorts::getEnName, placeDelivery)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ports != null) {
|
|
|
+ bills.setPlaceDeliveryId(ports.getId());
|
|
|
+ bills.setPlaceDeliveryName(ports.getEnName());
|
|
|
+ bills.setPlaceDeliveryCode(ports.getCode());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("Place of delivery:" + placeDelivery + " 无法识别!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //G.W.
|
|
|
+ String gw = getSheetCellValueAsString(sheet, 21, 11);
|
|
|
+ if (ObjectUtils.isNotNull(gw)) {
|
|
|
+ int lastDigitIndex = this.getIndex(gw);
|
|
|
+ if (lastDigitIndex > 0) {
|
|
|
+ String number = gw.substring(0, lastDigitIndex + 1);
|
|
|
+ bills.setGrossWeight(new BigDecimal(number));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println("gw:" + gw);
|
|
|
+ //件数
|
|
|
+ String quantity = getSheetCellValueAsString(sheet, 21, 1);
|
|
|
+ if (ObjectUtils.isNotNull(quantity)) {
|
|
|
+ int lastDigitIndex = this.getIndex(quantity);
|
|
|
+ if (lastDigitIndex > 0) {
|
|
|
+ String number = quantity.substring(0, lastDigitIndex + 1);
|
|
|
+ bills.setQuantity(new BigDecimal(number));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println("quantity:" + quantity);
|
|
|
+ //体积
|
|
|
+ String measurement = getSheetCellValueAsString(sheet, 21, 13);
|
|
|
+ if (ObjectUtils.isNotNull(measurement)) {
|
|
|
+ int lastDigitIndex = this.getIndex(measurement);
|
|
|
+ if (lastDigitIndex > 0) {
|
|
|
+ String number = measurement.substring(0, lastDigitIndex + 1);
|
|
|
+ bills.setMeasurement(new BigDecimal(number));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println("measurement:" + measurement);
|
|
|
+ //货物描述
|
|
|
+ String commodityDescr = getSheetCellValueAsString(sheet, 21, 3);
|
|
|
+ if (ObjectUtils.isNotNull(commodityDescr)) {
|
|
|
+ bills.setCommodityDescr(commodityDescr);
|
|
|
+ }
|
|
|
+ //货物描述
|
|
|
+ String hpaymode = getSheetCellValueAsString(sheet, 31, 0);
|
|
|
+ if (ObjectUtils.isNotNull(hpaymode)) {
|
|
|
+ if ("FREIGHT PREPAID".equals(hpaymode)) {
|
|
|
+ bills.setHpaymode("PP");
|
|
|
+ } else if ("FREIGHT COLLECT".equals(hpaymode)) {
|
|
|
+ bills.setHpaymode("CC");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //SI 备注
|
|
|
+ String siRemarks = getSheetCellValueAsString(sheet, 32, 1);
|
|
|
+ if (ObjectUtils.isNotNull(siRemarks)) {
|
|
|
+ bills.setSiRemarks(siRemarks);
|
|
|
+ }
|
|
|
+ //唛头
|
|
|
+ String marks = getSheetCellValueAsString(sheet, 21, 0);
|
|
|
+ if (ObjectUtils.isNotNull(marks)) {
|
|
|
+ bills.setMarks(marks);
|
|
|
+ }
|
|
|
+ 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的赋默认值为""
|
|
|
+ return R.data(bills);
|
|
|
+ }
|
|
|
+
|
|
|
private int getIndex(String gw) {
|
|
|
int lastIndex = -1; // 用于存储最后一个数字的索引
|
|
|
for (int i = gw.length() - 1; i >= 0; i--) {
|