Browse Source

1.客户订舱增加退舱接口
2.付费申请打印金额合计计算逻辑修改
3.OW计算租金,撤销租金接口逻辑修改
4.调试客户订舱模板保存,和导入接口
5.调试客户订舱,提交箱型接口
6.调试海运出口箱型确认接口
7.成本中心-二程费用模板导入接口修改

纪新园 5 months ago
parent
commit
c74109bbe9

+ 5 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java

@@ -1631,6 +1631,11 @@ public class Bills implements Serializable {
 	 */
 	@ApiModelProperty(value = "是否修改过箱型箱量")
 	private String whetherModify;
+	/**
+	 * 订舱模板名称
+	 */
+	@ApiModelProperty(value = "订舱模板名称")
+	private String templatesName;
 
 	/**
 	 * 到港日期

+ 5 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/dto/FinStlBillsItemsReports.java

@@ -133,5 +133,10 @@ public class FinStlBillsItemsReports implements Serializable {
 	 */
 	private String quantityCntrDescr;
 
+	/**
+	 *币别
+	 */
+	private String curCode;
+
 
 }

+ 1 - 7
blade-service/blade-los/src/main/java/org/springblade/los/basic/fees/controller/LosBFeesTemplateController.java

@@ -218,14 +218,8 @@ public class LosBFeesTemplateController extends BladeController {
 			.eq(ObjectUtils.isNotNull(losBFeesTemplate.getDc()), LosBFeesTemplate::getDc, losBFeesTemplate.getDc())
 			.like(ObjectUtils.isNotNull(losBFeesTemplate.getCode()), LosBFeesTemplate::getCode, losBFeesTemplate.getCode())
 			.like(LosBFeesTemplate::getBusinessTypeCode, losBFeesTemplate.getType())
-			.like(ObjectUtils.isNotNull(losBFeesTemplate.getCnName()), LosBFeesTemplate::getCnName, losBFeesTemplate.getCnName())
-			.like(ObjectUtils.isNotNull(losBFeesTemplate.getEnName()), LosBFeesTemplate::getEnName, losBFeesTemplate.getEnName())
 			.eq(ObjectUtils.isNotNull(losBFeesTemplate.getStatus()), LosBFeesTemplate::getStatus, losBFeesTemplate.getStatus())
-			.eq(ObjectUtils.isNotNull(losBFeesTemplate.getAddressId()), LosBFeesTemplate::getAddressId, losBFeesTemplate.getAddressId())
-			.like(ObjectUtils.isNotNull(losBFeesTemplate.getAddressCname()), LosBFeesTemplate::getAddressCname, losBFeesTemplate.getAddressCname())
-			.like(LosBFeesTemplate::getShippingCompanyId, losBFeesTemplate.getShippingCompanyId())
-			.like(ObjectUtils.isNotNull(losBFeesTemplate.getShippingCompanyCname()), LosBFeesTemplate::getShippingCompanyCname, losBFeesTemplate.getShippingCompanyCname())
-			.eq(ObjectUtils.isNotNull(losBFeesTemplate.getTransportationTerms()), LosBFeesTemplate::getTransportationTerms, losBFeesTemplate.getTransportationTerms())
+			.like(ObjectUtils.isNotNull(losBFeesTemplate.getShippingCompanyId()),LosBFeesTemplate::getShippingCompanyId, losBFeesTemplate.getShippingCompanyId())
 			.orderByDesc(LosBFeesTemplate::getCreateTime);
 		if (!AuthUtil.getUserRole().contains("总部") && !AuthUtil.getUserRole().contains("admin")) {
 			lambdaQueryWrapper.apply("(find_in_set('" + AuthUtil.getDeptId() + "',branch_id) or branch_id is null)");

+ 19 - 8
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java

@@ -354,6 +354,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 									finStlBillsItemsReports.setPodCnName(item.getPodCnName());
 									finStlBillsItemsReports.setQuantityCntrDescr(item.getQuantityCntrDescr());
 									finStlBillsItemsReports.setTeu(item.getTeu());
+									finStlBillsItemsReports.setCurCode(item.getCurCode());
 									if (!billsList.isEmpty()) {
 										String quantityCntrDescr = billsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).map(Bills::getQuantityCntrDescr).collect(Collectors.joining(","));
 										finStlBillsItemsReports.setQuantityCntrTypesDescr(quantityCntrDescr);
@@ -374,22 +375,22 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 										.filter(e -> e.getMblno().equals(item.getMblno())
 											&& (!ObjectUtils.isNotNull(e.getHblno()) || e.getHblno().equals(item.getHblno()))
 											&& MagicValues.D.equals(e.getDc()) && exrateType.equals(e.getCurCode()))
-										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add).abs();
 									BigDecimal currentStlAmountC = finStlBillsItems.stream()
 										.filter(e -> e.getMblno().equals(item.getMblno())
 											&& (!ObjectUtils.isNotNull(e.getHblno()) || e.getHblno().equals(item.getHblno()))
 											&& MagicValues.C.equals(e.getDc()) && exrateType.equals(e.getCurCode()))
-										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add).abs();
 									BigDecimal currentStlAmountUsdD = finStlBillsItems.stream()
 										.filter(e -> e.getMblno().equals(item.getMblno())
 											&& (!ObjectUtils.isNotNull(e.getHblno()) || e.getHblno().equals(item.getHblno()))
 											&& MagicValues.D.equals(e.getDc()) && !exrateType.equals(e.getCurCode()))
-										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add).abs();
 									BigDecimal currentStlAmountUsdC = finStlBillsItems.stream()
 										.filter(e -> e.getMblno().equals(item.getMblno())
 											&& (!ObjectUtils.isNotNull(e.getHblno()) || e.getHblno().equals(item.getHblno()))
 											&& MagicValues.C.equals(e.getDc()) && !exrateType.equals(e.getCurCode()))
-										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add).abs();
 									finStlBillsItemsReports.setAmount(currentStlAmountC.subtract(currentStlAmountD));
 									finStlBillsItemsReports.setAmountUsd(currentStlAmountUsdC.subtract(currentStlAmountUsdD));
 									if (!billsList.isEmpty()) {
@@ -468,6 +469,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 									finStlBillsItemsReports.setPodCnName(item.getPodCnName());
 									finStlBillsItemsReports.setQuantityCntrDescr(item.getQuantityCntrDescr());
 									finStlBillsItemsReports.setTeu(item.getTeu());
+									finStlBillsItemsReports.setCurCode(item.getCurCode());
 									if (!billsList.isEmpty()) {
 										String quantityCntrDescr = billsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).map(Bills::getQuantityCntrDescr).collect(Collectors.joining(","));
 										finStlBillsItemsReports.setQuantityCntrTypesDescr(quantityCntrDescr);
@@ -487,19 +489,19 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 									BigDecimal currentStlAmountD = finStlBillsItems.stream()
 										.filter(e -> e.getMblno().equals(item.getMblno())
 											&& MagicValues.D.equals(e.getDc()) && exrateType.equals(e.getCurCode()))
-										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add).abs();
 									BigDecimal currentStlAmountC = finStlBillsItems.stream()
 										.filter(e -> e.getMblno().equals(item.getMblno())
 											&& MagicValues.C.equals(e.getDc()) && exrateType.equals(e.getCurCode()))
-										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add).abs();
 									BigDecimal currentStlAmountUsdD = finStlBillsItems.stream()
 										.filter(e -> e.getMblno().equals(item.getMblno())
 											&& MagicValues.D.equals(e.getDc()) && !exrateType.equals(e.getCurCode()))
-										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add).abs();
 									BigDecimal currentStlAmountUsdC = finStlBillsItems.stream()
 										.filter(e -> e.getMblno().equals(item.getMblno())
 											&& MagicValues.C.equals(e.getDc()) && !exrateType.equals(e.getCurCode()))
-										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+										.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add).abs();
 									finStlBillsItemsReports.setAmount(currentStlAmountC.subtract(currentStlAmountD));
 									finStlBillsItemsReports.setAmountUsd(currentStlAmountUsdC.subtract(currentStlAmountUsdD));
 									if (!billsList.isEmpty()) {
@@ -513,6 +515,10 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 							}
 
 						}
+						finStlBills.setAmountCr(finStlBillsItemsReportsList.stream().map(FinStlBillsItemsReports::getAmount)
+							.reduce(BigDecimal.ZERO,BigDecimal::add));
+						finStlBills.setAmountCrUsd(finStlBillsItemsReportsList.stream().map(FinStlBillsItemsReports::getAmountUsd)
+							.reduce(BigDecimal.ZERO,BigDecimal::add));
 						finStlBills.setAmountSubLoc(finStlBills.getAmountSubLoc().abs());
 						finStlBills.setFinStlBillsItemsReportsList(finStlBillsItemsReportsList);
 						finStlBills.setDept(dept);
@@ -565,6 +571,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 								finStlBillsItemsReports.setPodCnName(item.getPodCnName());
 								finStlBillsItemsReports.setQuantityCntrDescr(item.getQuantityCntrDescr());
 								finStlBillsItemsReports.setTeu(item.getTeu());
+								finStlBillsItemsReports.setCurCode(item.getCurCode());
 								if (!billsList.isEmpty()) {
 									String quantityCntrDescr = billsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).map(Bills::getQuantityCntrDescr).collect(Collectors.joining(","));
 									finStlBillsItemsReports.setQuantityCntrTypesDescr(quantityCntrDescr);
@@ -638,6 +645,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 								finStlBillsItemsReports.setPodCnName(item.getPodCnName());
 								finStlBillsItemsReports.setQuantityCntrDescr(item.getQuantityCntrDescr());
 								finStlBillsItemsReports.setTeu(item.getTeu());
+								finStlBillsItemsReports.setCurCode(item.getCurCode());
 								if (!billsList.isEmpty()) {
 									String quantityCntrDescr = billsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).map(Bills::getQuantityCntrDescr).collect(Collectors.joining(","));
 									finStlBillsItemsReports.setQuantityCntrTypesDescr(quantityCntrDescr);
@@ -710,6 +718,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 								finStlBillsItemsReports.setPodCnName(item.getPodCnName());
 								finStlBillsItemsReports.setQuantityCntrDescr(item.getQuantityCntrDescr());
 								finStlBillsItemsReports.setTeu(item.getTeu());
+								finStlBillsItemsReports.setCurCode(item.getCurCode());
 								if (!billsList.isEmpty()) {
 									String quantityCntrDescr = billsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).map(Bills::getQuantityCntrDescr).collect(Collectors.joining(","));
 									finStlBillsItemsReports.setQuantityCntrTypesDescr(quantityCntrDescr);
@@ -780,6 +789,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 								finStlBillsItemsReports.setPodCnName(item.getPodCnName());
 								finStlBillsItemsReports.setQuantityCntrDescr(item.getQuantityCntrDescr());
 								finStlBillsItemsReports.setTeu(item.getTeu());
+								finStlBillsItemsReports.setCurCode(item.getCurCode());
 								if (MagicValues.D.equals(item.getDc())) {
 									if (exrateType.equals(item.getCurCode())) {
 										finStlBillsItemsReports.setAmount(item.getCurrentAmount());
@@ -848,6 +858,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 								finStlBillsItemsReports.setPodCnName(item.getPodCnName());
 								finStlBillsItemsReports.setQuantityCntrDescr(item.getQuantityCntrDescr());
 								finStlBillsItemsReports.setTeu(item.getTeu());
+								finStlBillsItemsReports.setCurCode(item.getCurCode());
 								if (!billsList.isEmpty()) {
 									String quantityCntrDescr = billsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).map(Bills::getQuantityCntrDescr).collect(Collectors.joining(","));
 									finStlBillsItemsReports.setQuantityCntrTypesDescr(quantityCntrDescr);

+ 23 - 23
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java

@@ -2193,7 +2193,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			feeCenter.setCreateUser(AuthUtil.getUserId());
 			feeCenter.setCreateUserName(AuthUtil.getUserName());
 			feeCenter.setPid(item.getPid());
-			if ("OW(拿)".equals(detail.getType())) {
+			if ("OW-N".equals(detail.getType())) {
 				feeCenter.setDc("C");
 			} else {
 				feeCenter.setDc("D");
@@ -2219,9 +2219,11 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				calendar.setTime(item.getRentEndDate());
 				calendar.add(Calendar.DAY_OF_MONTH, 1);
 				feeCenter.setStorageDate(calendar.getTime());
+				item.setRentStartDate(calendar.getTime());
 				feeCenter.setDays(Integer.parseInt(duration.toDays() + ""));
 			} else {
 				feeCenter.setStorageDate(item.getRentEndDate());
+				item.setRentStartDate(item.getRentEndDate());
 				feeCenter.setDays(Integer.parseInt(duration.toDays() + "") + 1);
 			}
 			Integer days = feeCenter.getDays();
@@ -2287,7 +2289,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			feeCenter.setPolCnName(detail.getPolCname());
 			feeCenter.setPolEnName(detail.getPolEname());
 			feeCenter.setAutomaticGenerated("1");
-			feeCenterList.add(feeCenter);
+			if (new BigDecimal("0.00").compareTo(feeCenter.getAmount()) != 0){
+				feeCenterList.add(feeCenter);
+			}
 			item.setUpdateTime(new Date());
 			item.setUpdateUserName(AuthUtil.getUserName());
 			item.setUpdateUser(AuthUtil.getUserId());
@@ -2362,36 +2366,32 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			.eq(FeeCenter::getAutomaticGenerated, "1")
 			.orderByDesc(FeeCenter::getCreateTime);
 		List<FeeCenter> feeCentersList = feeCenterService.list(tradingBoxFeesLambdaQueryWrapper);
-		if (feeCentersList.isEmpty()) {
-			throw new RuntimeException("未查到费用明细");
-		}
 		List<FeeCenter> feeCenters = feeCentersList.stream().filter(e -> e.getFeeCode().equals("BOX-ZJ")).collect(Collectors.toList());
-		if (feeCenters.isEmpty()) {
-			throw new RuntimeException("未计算过租金,撤销失败");
-		}
 		List<TradingBoxItem> itemList = new ArrayList<>();
 		List<Long> feeId = new ArrayList<>();
 		for (TradingBoxItem item : tradingBoxItemList) {
-			List<FeeCenter> feeCenterList = feeCenters.stream().filter(e -> e.getCntrNo().equals(item.getCode())).collect(Collectors.toList());
-			if (!feeCenterList.isEmpty()) {
-				FeeCenter feeCenter = feeCenterList.get(0);
-				if (1 == feeCenter.getAccStatus()) {
-					throw new RuntimeException("箱型:" + item.getBoxType() + "费用已生成账单,撤销失败");
+			if (ObjectUtils.isNull(item.getRentStartDate())){
+				throw new RuntimeException("未计算过租金,撤销失败");
+			}else{
+				if (!feeCenters.isEmpty()){
+					List<FeeCenter> feeCenterList = feeCenters.stream().filter(e -> e.getCntrNo().equals(item.getCode())).collect(Collectors.toList());
+					if (!feeCenterList.isEmpty()) {
+						FeeCenter feeCenter = feeCenterList.get(0);
+						if (1 == feeCenter.getAccStatus()) {
+							throw new RuntimeException("箱型:" + item.getBoxType() + "费用已生成账单,撤销失败");
+						}
+						feeCenterService.removeById(feeCenter.getId());
+						feeId.add(feeCenter.getId());
+					}
 				}
-				feeCenterService.removeById(feeCenter.getId());
-				feeId.add(feeCenter.getId());
 				item.setUpdateTime(new Date());
 				item.setUpdateUser(AuthUtil.getUserId());
 				item.setUpdateUserName(AuthUtil.getUserName());
 				item.setCount(item.getCount() - 1);
-				if (feeCenterList.size() == 1) {
-					item.setRentEndDate(item.getPolPickUpDate());
-				} else {
-					Calendar calendar = Calendar.getInstance();
-					calendar.setTime(feeCenter.getStorageDate());
-					calendar.add(Calendar.DAY_OF_MONTH, -1);
-					item.setRentEndDate(calendar.getTime());
-				}
+				Calendar calendar = Calendar.getInstance();
+				calendar.setTime(item.getRentStartDate());
+				calendar.add(Calendar.DAY_OF_MONTH, -1);
+				item.setRentEndDate(calendar.getTime());
 				itemList.add(item);
 			}
 		}

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java

@@ -964,8 +964,8 @@ public class BillsController extends BladeController {
 	/**
 	 * 海运出口同步订舱箱型箱量
 	 */
-	@PostMapping("/synchronousBoxType")
-	public R synchronousBoxType(@Valid @RequestBody Bills bills){
+	@GetMapping("/synchronousBoxType")
+	public R synchronousBoxType( Bills bills){
 		return billsService.synchronousBoxType(bills);
 	}
 

+ 24 - 4
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BookingCabinController.java

@@ -230,6 +230,14 @@ public class BookingCabinController extends BladeController {
 	}
 
 	/**
+	 * 客户订舱-退舱
+	 */
+	@PostMapping("/refundCabin")
+	public R refundCabin(@Valid @RequestBody Bills bills) {
+		return billsService.refundCabin(bills);
+	}
+
+	/**
 	 * 提交确认
 	 */
 	@PostMapping("/submitConfirm")
@@ -240,8 +248,8 @@ public class BookingCabinController extends BladeController {
 	/**
 	 * 提交箱型
 	 */
-	@PostMapping("/submitBoxType")
-	public R submitBoxType(@Valid @RequestBody Bills bills) {
+	@GetMapping("/submitBoxType")
+	public R submitBoxType( Bills bills) {
 		return billsService.submitBoxType(bills);
 	}
 
@@ -294,11 +302,23 @@ public class BookingCabinController extends BladeController {
 				.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
 				.eq(PreContainers::getIsDeleted, 0)
 				.in(PreContainers::getPid, idList));
-			if (!preContainersList.isEmpty()) {
-				for (Bills item : pages.getRecords()) {
+			List<SeaBillsDetail> seaBillsDetailList = seaBillsDetailService.list(new LambdaQueryWrapper<SeaBillsDetail>()
+				.eq(SeaBillsDetail::getTenantId, AuthUtil.getTenantId())
+				.in(SeaBillsDetail::getPid, idList));
+			for (Bills item : pages.getRecords()) {
+				if (!preContainersList.isEmpty()) {
 					List<PreContainers> preContainers = preContainersList.stream().filter(e -> e.getPid().equals(item.getId()))
 						.collect(Collectors.toList());
 					item.setPreContainersList(preContainers.isEmpty() ? new ArrayList<>() : preContainers);
+				} else {
+					item.setPreContainersList(new ArrayList<>());
+				}
+				SeaBillsDetail seaBillsDetail = seaBillsDetailList.stream().filter(e -> e.getPid().equals(item.getId()))
+					.findFirst().orElse(null);
+				if (seaBillsDetail != null) {
+					item.setDetail(seaBillsDetail);
+				} else {
+					item.setDetail(new SeaBillsDetail());
 				}
 			}
 		}

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java

@@ -211,4 +211,6 @@ public interface IBillsService extends IService<Bills> {
 	R synchronousBoxType(Bills bills);
 
 	R submitCommonTemplates(Bills bills);
+
+	R refundCabin(Bills bills);
 }

+ 160 - 103
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java

@@ -43,6 +43,8 @@ import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.cur.entity.BCurExrate;
 import org.springblade.los.basic.fees.entity.BFees;
 import org.springblade.los.basic.fees.service.IBFeesService;
+import org.springblade.los.basic.ports.entity.BPorts;
+import org.springblade.los.basic.ports.service.IBPortsService;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
 import org.springblade.los.business.amends.entity.Amends;
@@ -147,6 +149,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final IBCorpsService bCorpsService;
 
+	private final IBPortsService ibPortsService;
+
 	private final AmendsMapper amendsMapper;
 
 	@Override
@@ -257,9 +261,17 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			}
 			// 初始创建为1
 			bills.setVersion("1");
+			if (ObjectUtils.isNotNull(bills.getPolId())){
+				BPorts ports = ibPortsService.getById(bills.getPolId());
+				if (ports != null){
+					bills.setPolCnName(ports.getCnName());
+					bills.setPolEnName(ports.getEnName());
+					bills.setPolCode(ports.getCode());
+				}
+			}
 			this.save(bills);
 		} else {
-			Bills dataSourceBill = baseMapper.selectOne(new LambdaQueryWrapper<Bills>().select(Bills::getId, Bills::getVersion).eq(Bills::getId, bills.getId()));
+			Bills dataSourceBill = baseMapper.selectOne(new LambdaQueryWrapper<Bills>().select(Bills::getId,Bills::getCorpId,Bills::getActualEta, Bills::getVersion).eq(Bills::getId, bills.getId()));
 			if (!Objects.equals(dataSourceBill.getVersion(), bills.getVersion())) {
 				return R.fail(601, "数据已被其他用户更新,请等待刷新后重试");
 			}
@@ -267,6 +279,26 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			// 旧数据处理
 			int version = StringUtil.isBlank(dataSourceBill.getVersion()) ? 1 : Integer.parseInt(dataSourceBill.getVersion());
 			bills.setVersion(String.valueOf(version + 1));
+			if ("SI".equals(bills.getBusinessType())){
+				boolean corpId = ObjectUtils.isNotNull(bills.getCorpId()) && !bills.getCorpId().equals(dataSourceBill.getCorpId());
+				boolean ata = ObjectUtils.isNotNull(bills.getActualEta()) && !bills.getActualEta().equals(dataSourceBill.getActualEta());
+				if (corpId || ata){
+					List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+						.eq(FinAccBills::getBusinessBillId,bills.getId())
+						.eq(FinAccBills::getTenantId,AuthUtil.getTenantId())
+						.eq(FinAccBills::getIsDeleted,0));
+					if (!finAccBillsList.isEmpty()){
+						for (FinAccBills item : finAccBillsList){
+							item.setBusinessDate(bills.getActualEta());
+							item.setBillDate(bills.getActualEta());
+							item.setBillCorpId(bills.getCorpId());
+							item.setBillCorpCnName(bills.getCorpCnName());
+							item.setBillCorpEnName(bills.getCorpEnName());
+						}
+						finAccBillsService.updateBatchById(finAccBillsList);
+					}
+				}
+			}
 			if (!"MH".equals(bills.getBillType())) {
 				List<Long> ids = count.stream().map(Bills::getId).distinct().collect(Collectors.toList());
 				if (ObjectUtils.isNotNull(bills.getMblno())) {
@@ -5157,69 +5189,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		bills.setUpdateTime(new Date());
 		bills.setIssueStatus("0");
 		baseMapper.updateById(bills);
-		Bills detail = baseMapper.selectOne(new LambdaQueryWrapper<Bills>()
-			.eq(Bills::getTenantId, AuthUtil.getTenantId())
-			.eq(Bills::getIsDeleted, 0)
-			.eq(Bills::getTemporaryId, bills.getId()));
-		if (detail != null) {
-			detail.setUpdateUserName(AuthUtil.getUserName());
-			detail.setUpdateUser(AuthUtil.getUserId());
-			detail.setUpdateTime(new Date());
-			detail.setBillStatus(1);
-			baseMapper.updateById(detail);
-			if (ObjectUtils.isNotNull(detail.getCustomerServiceId())) {
-				R<User> res = userClient.userInfoById(detail.getCustomerServiceId());
-				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
-					LocalDateTime now = LocalDateTime.now();
-					DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-					String formatted = now.format(formatter);
-					Message sendMessage = new Message();
-					sendMessage.setParameter(detail.getId() + "");
-					sendMessage.setUserName(AuthUtil.getUserName());
-					sendMessage.setUserId(null);
-					sendMessage.setToUserId(res.getData().getId());
-					sendMessage.setToUserName(res.getData().getName());
-					sendMessage.setMessageType(1);
-					sendMessage.setTenantId(AuthUtil.getTenantId());
-					sendMessage.setCreateUser(null);
-					sendMessage.setCreateTime(new Date());
-					sendMessage.setUrl("/iosBasicData/SeafreightExportF/bills/index");
-					sendMessage.setPageLabel("海运出口");
-					sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
-					sendMessage.setMessageBody("客户已撤销订舱,请及时待处理!订舱单号:" + bills.getBillNo() + "时间:" + formatted);
-					R save = messageClient.save(sendMessage);
-					if (!save.isSuccess()) {
-						throw new SecurityException("发送消息失败");
-					}
-				}
-			}
-			if (ObjectUtils.isNotNull(detail.getOperatorId())) {
-				R<User> res = userClient.userInfoById(detail.getOperatorId());
-				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
-					LocalDateTime now = LocalDateTime.now();
-					DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-					String formatted = now.format(formatter);
-					Message sendMessage = new Message();
-					sendMessage.setParameter(detail.getId() + "");
-					sendMessage.setUserName(AuthUtil.getUserName());
-					sendMessage.setUserId(null);
-					sendMessage.setToUserId(res.getData().getId());
-					sendMessage.setToUserName(res.getData().getName());
-					sendMessage.setMessageType(1);
-					sendMessage.setTenantId(AuthUtil.getTenantId());
-					sendMessage.setCreateUser(null);
-					sendMessage.setCreateTime(new Date());
-					sendMessage.setUrl("/iosBasicData/SeafreightExportF/bills/index");
-					sendMessage.setPageLabel("海运出口");
-					sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
-					sendMessage.setMessageBody("客户已撤销订舱,请及时待处理!订舱单号:" + bills.getBillNo() + "时间:" + formatted);
-					R save = messageClient.save(sendMessage);
-					if (!save.isSuccess()) {
-						throw new SecurityException("发送消息失败");
-					}
-				}
-			}
-		}
 		return R.data(bills);
 	}
 
@@ -5247,6 +5216,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			}
 		}
 		declare.setStatus(0);
+		declare.setBillStatus(0);
 		baseMapper.updateById(declare);
 		if ("MM".equals(declare.getBillType())) {
 			List<Bills> billsList = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
@@ -5257,6 +5227,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			if (!billsList.isEmpty()) {
 				for (Bills item : billsList) {
 					item.setStatus(0);
+					item.setBillStatus(0);
 					item.setUpdateTime(new Date());
 					item.setUpdateUserName(AuthUtil.getUserName());
 					item.setUpdateUser(AuthUtil.getUserId());
@@ -5772,7 +5743,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				}
 			}
 		}
-		return null;
+		return R.data(bills);
 	}
 
 	@Override
@@ -5788,10 +5759,20 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		if (ObjectUtils.isNull(detail.getTemporaryId())) {
 			throw new RuntimeException("该订单不是来源订舱单据");
 		}
+		detail.setUpdateUserName(AuthUtil.getUserName());
+		detail.setUpdateUser(AuthUtil.getUserId());
+		detail.setUpdateTime(new Date());
+		detail.setWhetherModify("2");
+		baseMapper.updateById(detail);
 		Bills bookingCabin = baseMapper.selectById(detail.getTemporaryId());
 		if (bookingCabin == null) {
 			throw new RuntimeException("未查到来源订舱单据信息");
 		}
+		bookingCabin.setUpdateUserName(AuthUtil.getUserName());
+		bookingCabin.setUpdateUser(AuthUtil.getUserId());
+		bookingCabin.setUpdateTime(new Date());
+		bookingCabin.setWhetherModify("2");
+		baseMapper.updateById(bookingCabin);
 		List<PreContainers> containersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
 			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
 			.eq(PreContainers::getIsDeleted, 0)
@@ -5831,47 +5812,46 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			throw new RuntimeException("缺少必要参数");
 		}
 		Bills bills = baseMapper.selectById(detail.getId());
-		if (bills.getId() == null) {
-			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
-				.select(BusinessType::getId)
-				.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
-				.eq(BusinessType::getIsDeleted, 0)
-				.eq(BusinessType::getStatus, 0)
-				.eq(BusinessType::getCode, "KHDC"));
-			if (businessType == null) {
-				throw new RuntimeException("未找到可用业务类型");
-			}
-			BusinessBillNo businessBillNo = new BusinessBillNo();
-			businessBillNo.setBusinessTypeId(businessType.getId());
-			businessBillNo.setCode("DCMB");
-			businessBillNo.setBranchId(bills.getBranchId());
-			R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
-			if (!clientBillNo.isSuccess()) {
-				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-				return R.fail(500, "生成订单编号失败");
-			}
-			bills.setId(null);
-			bills.setIssueStatus(null);
-			bills.setStatus(null);
-			bills.setBillStatus(null);
-			bills.setWhetherModify(null);
-			bills.setBillNo((String) clientBillNo.getData());
-			bills.setBusinessType("DCMB");
-			bills.setCreateTime(new Date());
-			bills.setCreateUser(AuthUtil.getUserId());
-			bills.setCreateUserName(AuthUtil.getUserName());
-			bills.setTenantId(AuthUtil.getTenantId());
-			bills.setUpdateTime(null);
-			bills.setUpdateUser(null);
-			bills.setUpdateUserName(null);
-			// 初始创建为1
-			bills.setVersion("1");
-			this.save(bills);
+		BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+			.select(BusinessType::getId)
+			.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
+			.eq(BusinessType::getIsDeleted, 0)
+			.eq(BusinessType::getStatus, 0)
+			.eq(BusinessType::getCode, "KHDC"));
+		if (businessType == null) {
+			throw new RuntimeException("未找到可用业务类型");
+		}
+		BusinessBillNo businessBillNo = new BusinessBillNo();
+		businessBillNo.setBusinessTypeId(businessType.getId());
+		businessBillNo.setCode("DCMB");
+		businessBillNo.setBranchId(bills.getBranchId());
+		R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+		if (!clientBillNo.isSuccess()) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return R.fail(500, "生成订单编号失败");
 		}
+		bills.setId(null);
+		bills.setIssueStatus(null);
+		bills.setStatus(null);
+		bills.setBillStatus(null);
+		bills.setWhetherModify(null);
+		bills.setTemplatesName(detail.getTemplatesName());
+		bills.setBillNo((String) clientBillNo.getData());
+		bills.setBusinessType("DCMB");
+		bills.setCreateTime(new Date());
+		bills.setCreateUser(AuthUtil.getUserId());
+		bills.setCreateUserName(AuthUtil.getUserName());
+		bills.setTenantId(AuthUtil.getTenantId());
+		bills.setUpdateTime(null);
+		bills.setUpdateUser(null);
+		bills.setUpdateUserName(null);
+		// 初始创建为1
+		bills.setVersion("1");
+		this.save(bills);
 		List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
 			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
 			.eq(PreContainers::getIsDeleted, 0)
-			.eq(PreContainers::getPid, bills.getId()));
+			.eq(PreContainers::getPid, detail.getId()));
 		if (!preContainersList.isEmpty()) {
 			List<PreContainers> preContainers = new ArrayList<>();
 			for (PreContainers item : preContainersList) {
@@ -5890,7 +5870,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		}
 		SeaBillsDetail seaBillsDetail = seaBillsDetailService.getOne(new LambdaQueryWrapper<SeaBillsDetail>()
 			.eq(SeaBillsDetail::getTenantId, AuthUtil.getTenantId())
-			.eq(SeaBillsDetail::getPid, bills.getId()));
+			.eq(SeaBillsDetail::getPid, detail.getId()));
 		if (seaBillsDetail != null) {
 			seaBillsDetail.setId(null);
 			seaBillsDetail.setUpdateUser(null);
@@ -5907,6 +5887,83 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		return R.data(bills);
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R refundCabin(Bills bills) {
+		if (new Date().compareTo(bills.getEtd()) < 0) {
+			throw new RuntimeException("该订单已开船,退舱失败");
+		}
+		bills.setUpdateUserName(AuthUtil.getUserName());
+		bills.setUpdateUser(AuthUtil.getUserId());
+		bills.setUpdateTime(new Date());
+		bills.setBillStatus(1);
+		baseMapper.updateById(bills);
+		Bills detail = baseMapper.selectOne(new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.eq(Bills::getTemporaryId, bills.getId()));
+		if (detail != null) {
+			detail.setUpdateUserName(AuthUtil.getUserName());
+			detail.setUpdateUser(AuthUtil.getUserId());
+			detail.setUpdateTime(new Date());
+			detail.setBillStatus(1);
+			baseMapper.updateById(detail);
+			if (ObjectUtils.isNotNull(detail.getCustomerServiceId())) {
+				R<User> res = userClient.userInfoById(detail.getCustomerServiceId());
+				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+					LocalDateTime now = LocalDateTime.now();
+					DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+					String formatted = now.format(formatter);
+					Message sendMessage = new Message();
+					sendMessage.setParameter(detail.getId() + "");
+					sendMessage.setUserName(AuthUtil.getUserName());
+					sendMessage.setUserId(null);
+					sendMessage.setToUserId(res.getData().getId());
+					sendMessage.setToUserName(res.getData().getName());
+					sendMessage.setMessageType(1);
+					sendMessage.setTenantId(AuthUtil.getTenantId());
+					sendMessage.setCreateUser(null);
+					sendMessage.setCreateTime(new Date());
+					sendMessage.setUrl("/iosBasicData/SeafreightExportF/bills/index");
+					sendMessage.setPageLabel("海运出口");
+					sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
+					sendMessage.setMessageBody("客户已撤销订舱,请及时待处理!订舱单号:" + bills.getBillNo() + "时间:" + formatted);
+					R save = messageClient.save(sendMessage);
+					if (!save.isSuccess()) {
+						throw new SecurityException("发送消息失败");
+					}
+				}
+			}
+			if (ObjectUtils.isNotNull(detail.getOperatorId())) {
+				R<User> res = userClient.userInfoById(detail.getOperatorId());
+				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+					LocalDateTime now = LocalDateTime.now();
+					DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+					String formatted = now.format(formatter);
+					Message sendMessage = new Message();
+					sendMessage.setParameter(detail.getId() + "");
+					sendMessage.setUserName(AuthUtil.getUserName());
+					sendMessage.setUserId(null);
+					sendMessage.setToUserId(res.getData().getId());
+					sendMessage.setToUserName(res.getData().getName());
+					sendMessage.setMessageType(1);
+					sendMessage.setTenantId(AuthUtil.getTenantId());
+					sendMessage.setCreateUser(null);
+					sendMessage.setCreateTime(new Date());
+					sendMessage.setUrl("/iosBasicData/SeafreightExportF/bills/index");
+					sendMessage.setPageLabel("海运出口");
+					sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
+					sendMessage.setMessageBody("客户已撤销订舱,请及时待处理!订舱单号:" + bills.getBillNo() + "时间:" + formatted);
+					R save = messageClient.save(sendMessage);
+					if (!save.isSuccess()) {
+						throw new SecurityException("发送消息失败");
+					}
+				}
+			}
+		}
+		return R.data(bills);
+	}
+
 	/**
 	 * 删除海运进出口明细表
 	 *