فهرست منبع

1.箱档案导入模本和接口修改
2.海运出口增加eta查询条件
3.截单后重新打印提单增加自动生成应收客户费用接口
4.oW拿报表设计报错修改
5.OW拿保存时明细收箱号为空问题修改
6.OW拿提交修改时只修改预计场站

纪新园 2 روز پیش
والد
کامیت
6174b62763

+ 60 - 27
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dto/ArchivesExcelEnter.java

@@ -45,16 +45,15 @@ public class ArchivesExcelEnter implements Serializable {
 	@ExcelProperty(value = "箱号(必填)")
 	private String code;
 	/**
-	 * 箱型
+	 * 合同号
 	 */
-	@ExcelProperty(value = "箱型(必填)")
-	private String typeName;
+	@ExcelProperty(value = "合同号")
+	private String contractNo;
 	/**
 	 * 港口
 	 */
 	@ExcelProperty(value = "港口(必填)")
 	private String addressCname;
-
 	/**
 	 * 场站
 	 */
@@ -66,27 +65,42 @@ public class ArchivesExcelEnter implements Serializable {
 	@ExcelProperty(value = "放箱号(必填)")
 	private String containerNumber;
 	/**
-	 * 合同号
+	 * 箱型
 	 */
-	@ExcelProperty(value = "合同号")
-	private String contractNo;
-
+	@ExcelProperty(value = "箱型(必填)")
+	private String typeName;
 	/**
-	 * 箱好坏
+	 * 最新日期
 	 */
-	@ExcelProperty(value = "箱好坏")
-	private String boxStatus;
-
+	@ExcelProperty(value = "动态日期")
+	private Date newDate;
+	/**
+	 * 箱状态 待使用、使用中
+	 */
+	@ExcelProperty(value = "箱状态")
+	private String status;
 	/**
 	 * 箱属
 	 */
 	@ExcelProperty(value = "箱属")
 	private String boxBelongsTo;
 	/**
-	 * 箱种类
+	 * 放箱号类型
 	 */
-	@ExcelProperty(value = "箱种类")
-	private String boxType;
+	@ExcelProperty(value = "放箱号类型")
+	private String containerNumberType;
+
+	/**
+	 * 放箱号OW
+	 */
+	@ExcelProperty(value = "放箱号OW")
+	private String containerNumberOw;
+
+	/**
+	 * 放箱号类型OW
+	 */
+	@ExcelProperty(value = "放箱号类型OW")
+	private String containerNumberTypeOw;
 	/**
 	 * 箱东
 	 */
@@ -105,22 +119,41 @@ public class ArchivesExcelEnter implements Serializable {
 	@ExcelProperty(value = "限制船公司")
 	private String restrictingShippingCompaniesName;
 	/**
-	 * 体积(容积)
+	 * 启用日期
 	 */
-	@ExcelProperty(value = "容积")
-	private BigDecimal volume;
+	@ExcelProperty(value = "启用日期")
+	private Date activationDate;
 	/**
-	 * 毛重
+	 * 租赁公司
 	 */
-	@ExcelProperty(value = "毛重")
-	private BigDecimal gorssWeight;
-
+	@ExcelProperty(value = "租赁公司")
+	private String leasingCompany;
+	/**
+	 * 箱来源
+	 */
+	@ExcelProperty(value = "箱来源")
+	private String boxSource;
+	/**
+	 * 箱好坏
+	 */
+	@ExcelProperty(value = "箱好坏")
+	private String boxStatus;
+	/**
+	 * 租赁方式
+	 */
+	@ExcelProperty(value = "租赁方式")
+	private String leaseMethod;
 	/**
 	 * 空重
 	 */
 	@ExcelProperty(value = "空重")
 	private BigDecimal emptyWeight;
 	/**
+	 * 毛重
+	 */
+	@ExcelProperty(value = "毛重")
+	private BigDecimal gorssWeight;
+	/**
 	 * 皮重
 	 */
 	@ExcelProperty(value = "皮重")
@@ -131,6 +164,11 @@ public class ArchivesExcelEnter implements Serializable {
 	@ExcelProperty(value = "装载重量")
 	private BigDecimal loadingWeight;
 	/**
+	 * 体积(容积)
+	 */
+	@ExcelProperty(value = "容积")
+	private BigDecimal volume;
+	/**
 	 * 造箱公司
 	 */
 	@ExcelProperty(value = "造箱公司")
@@ -151,11 +189,6 @@ public class ArchivesExcelEnter implements Serializable {
 	@ExcelProperty(value = "箱龄")
 	private Integer boxAge;
 	/**
-	 * 启用日期
-	 */
-	@ExcelProperty(value = "启用日期")
-	private Date activationDate;
-	/**
 	 * 备注
 	 */
 	@ExcelProperty(value = "备注")

+ 142 - 1
blade-service/blade-los/src/main/java/org/springblade/los/Util/BillUtils.java

@@ -14,6 +14,7 @@ import org.springblade.los.basic.corps.entity.BCorps;
 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.business.files.entity.FilesCenter;
 import org.springblade.los.business.files.service.IFilesCenterService;
 import org.springblade.los.business.release.entity.SeaReleaseBillItems;
@@ -31,6 +32,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -76,6 +78,8 @@ public class BillUtils implements IBillUtils {
 
 	private final ISailingScheduleService sailingScheduleService;
 
+	private final IBFeesService bFeesService;
+
 	@Override
 	public void itemCopy(Bills bills, List<Bills> billsList, boolean status) {
 		List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
@@ -617,7 +621,7 @@ public class BillUtils implements IBillUtils {
 	}
 
 	@Override
-	public R verifyData(Long vesselId, String voyageNo, Long polId,String branchId) {
+	public R verifyData(Long vesselId, String voyageNo, Long polId, String branchId) {
 		SailingSchedule bills = sailingScheduleService.getOne(new LambdaQueryWrapper<SailingSchedule>()
 			.eq(SailingSchedule::getTenantId, AuthUtil.getTenantId())
 			.eq(SailingSchedule::getIsDeleted, 0)
@@ -688,4 +692,141 @@ public class BillUtils implements IBillUtils {
 		}
 		return R.data(billsList);
 	}
+
+	@Override
+	public R generateAmendmentFee(Long id) {
+		Bills bills = billsMapper.selectById(id);
+		BFees fees = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
+			.eq(BFees::getTenantId, AuthUtil.getTenantId())
+			.eq(BFees::getIsDeleted, 0)
+			.eq(BFees::getCode, "GDF"));
+		if (fees == null) {
+			throw new RuntimeException("请先维护“改单费”费用信息");
+		}
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getFeeCode, fees.getCode())
+			.eq(FeeCenter::getDc, "D"));
+		if (feeCenterList.isEmpty()) {
+			String amendmentFee = sysClient.getParamService("amendment.fee");
+			String deptName = "";
+			String branchId = AuthUtil.getDeptId();
+			if (ObjectUtils.isNotNull(branchId)) {
+				R<String> res = sysClient.getDeptName(Long.parseLong(branchId));
+				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+					deptName = res.getData();
+				}
+			}
+			Date date;
+			if ("SE".equals(bills.getBusinessType())) {
+				if (ObjectUtils.isNotNull(bills.getActualEtd())) {
+					date = bills.getActualEtd();
+				} else {
+					date = bills.getEtd();
+				}
+			} else {
+				if (ObjectUtils.isNotNull(bills.getActualEta())) {
+					date = bills.getActualEta();
+				} else {
+					date = bills.getEta();
+				}
+			}
+			String exrateType = currencyUtils.standardCurrency(branchId);
+			List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1", branchId);
+			int count = 1;
+			FeeCenter feeCenter = new FeeCenter();
+			feeCenter.setBranchId(branchId);
+			feeCenter.setBranchName(deptName);
+			feeCenter.setBillBranchId(bills.getBranchId());
+			feeCenter.setBillBranchName(bills.getBranchName());
+			feeCenter.setBookingAgentId(bills.getBookingAgentId());
+			feeCenter.setBookingAgentCnName(bills.getBookingAgentCnName());
+			feeCenter.setBookingAgentEnName(bills.getBookingAgentEnName());
+			feeCenter.setQuantityCntrDescr(bills.getQuantityCntrDescr());
+			feeCenter.setTeu(bills.getTeu());
+			feeCenter.setPid(bills.getId());
+			feeCenter.setCntrNo(bills.getQuantityCntrTypesDescr());
+			feeCenter.setBillNo(bills.getBillNo());
+			feeCenter.setBusinessType(bills.getBusinessType());
+			feeCenter.setBillType(bills.getBillType());
+			feeCenter.setBillDate(bills.getBillDate());
+			feeCenter.setBillCorpId(bills.getCorpId());
+			feeCenter.setBillCorpCnName(bills.getCorpCnName());
+			feeCenter.setBillCorpEnName(bills.getCorpEnName());
+			feeCenter.setBillShortName(bills.getCorpCnName());
+			feeCenter.setLineId(bills.getLineId());
+			feeCenter.setLineCnName(bills.getLineCnName());
+			feeCenter.setLineEnName(bills.getLineEnName());
+			feeCenter.setVesselId(bills.getVesselId());
+			feeCenter.setVesselCnName(bills.getVesselCnName());
+			feeCenter.setVesselEnName(bills.getVesselEnName());
+			feeCenter.setVoyageNo(bills.getVoyageNo());
+			feeCenter.setMblno(bills.getMblno());
+			feeCenter.setHblno(bills.getHblno());
+			feeCenter.setEtd(bills.getEtd());
+			feeCenter.setEta(bills.getEta());
+			feeCenter.setPolId(bills.getPolId());
+			feeCenter.setPolCode(bills.getPolCode());
+			feeCenter.setPolCnName(bills.getPolCnName());
+			feeCenter.setPolEnName(bills.getPolEnName());
+			feeCenter.setPodId(bills.getPodId());
+			feeCenter.setPodCode(bills.getPodCode());
+			feeCenter.setPodCnName(bills.getPodCnName());
+			feeCenter.setPodEnName(bills.getPodEnName());
+			feeCenter.setDc("D");
+			feeCenter.setPaymode(bills.getMpaymode());
+			feeCenter.setSort(count);
+			feeCenter.setCorpType("国内直接客户");
+			feeCenter.setCorpId(bills.getCorpId());
+			feeCenter.setCorpCnName(bills.getShortName());
+			feeCenter.setCorpEnName(bills.getCorpEnName());
+			feeCenter.setShortName(bills.getShortName());
+			BCorps bCorps = bCorpsService.getById(bills.getCorpId());
+			if (bCorps != null) {
+				feeCenter.setGenerationCorpId(bCorps.getBookingAgentId());
+				feeCenter.setGenerationCorpCnName(bCorps.getBookingAgentCnName());
+				feeCenter.setGenerationCorpEnName(bCorps.getBookingAgentEnName());
+			}
+			feeCenter.setFeeId(fees.getId());
+			feeCenter.setFeeCode(fees.getCode());
+			feeCenter.setFeeCnName(fees.getCnName());
+			feeCenter.setFeeEnName(fees.getEnName());
+			feeCenter.setCurCode(fees.getCurNo());
+			if (ObjectUtils.isNull(amendmentFee) || "获取数据失败".equals(amendmentFee)) {
+				throw new RuntimeException("请先维护改单费参数");
+			}
+			feeCenter.setPrice(new BigDecimal(amendmentFee));
+			if (exrateType.equals(feeCenter.getCurCode())) {
+				feeCenter.setExrate(new BigDecimal("1.00"));
+			} else {
+				feeCenter.setExrate(currencyUtils.obtainExrate(feeCenter.getDc(), curExrateList, feeCenter.getCurCode(), "1"));
+			}
+			feeCenter.setUnitNo(fees.getUnitNo());
+			feeCenter.setQuantity(new BigDecimal("1"));
+			feeCenter.setAmount(feeCenter.getPrice().multiply(new BigDecimal("1")));
+			// 金额
+			BigDecimal amount;
+			amount = feeCenter.getQuantity().multiply(feeCenter.getPrice());
+			feeCenter.setAmount(amount);
+			if (ObjectUtils.isNull(feeCenter.getAmount())) {
+				feeCenter.setAmount(new BigDecimal("0"));
+			}
+			if (exrateType.equals(feeCenter.getCurCode())) {
+				feeCenter.setAmountLoc(feeCenter.getAmount());
+			} else {
+				if (new BigDecimal("0").compareTo(feeCenter.getAmount()) != 0) {
+					feeCenter.setAmountLoc(feeCenter.getAmount().multiply(feeCenter.getExrate()));
+				} else {
+					feeCenter.setAmountLoc(new BigDecimal("0"));
+				}
+			}
+			feeCenter.setUnsettledAmount(feeCenter.getAmount());
+			feeCenter.setCreateUser(AuthUtil.getUserId());
+			feeCenter.setCreateUserName(AuthUtil.getUserName());
+			feeCenter.setCreateTime(new Date());
+			feeCenterService.save(feeCenter);
+		}
+		return R.success("操作成功");
+	}
 }

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/IBillUtils.java

@@ -39,4 +39,6 @@ public interface IBillUtils {
 	R verifyData(Long vesselId, String voyageNo, Long polId,String branchId);
 
 	R updateVerifyData(Long vesselId, String voyageNo, Long polId, Date etd,Long id);
+
+	R generateAmendmentFee(Long id);
 }

+ 4 - 2
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsBoxServiceImpl.java

@@ -191,8 +191,10 @@ public class ReportsBoxServiceImpl implements IReportsBoxService {
 				LambdaQueryWrapper<FeeCenterItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 				lambdaQueryWrapper.eq(FeeCenterItems::getTenantId, AuthUtil.getTenantId())
 					.eq(FeeCenterItems::getIsDeleted, 0)
-					.eq(FeeCenterItems::getPid, tradingBox.getId())
-					.apply("DATE_FORMAT(account_date,'%Y-%m') = '" + formatter.format(formatter.parse(accDate)) + "'");
+					.eq(FeeCenterItems::getPid, tradingBox.getId());
+				if (ObjectUtils.isNotNull(accDate)){
+					lambdaQueryWrapper.apply("DATE_FORMAT(account_date,'%Y-%m') = '" + formatter.format(formatter.parse(accDate)) + "'");
+				}
 				if (MagicValues.PER_DIEM.equals(groupCode)) {
 					lambdaQueryWrapper.eq(FeeCenterItems::getFeeType, "2");
 				} else {

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxController.java

@@ -122,7 +122,7 @@ public class TradingBoxController extends BladeController {
 		;
 		if (ObjectUtils.isNotNull(tradingBox.getEffectiveDate()) && ObjectUtils.isNotNull(tradingBox.getExpiryDate())) {
 			SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
-			lambdaQueryWrapper.apply(ObjectUtils.isNotNull(tradingBox.getEffectiveDate()), "DATE_FORMAT(effective_date,'%Y-%m-%d') <= '" + formatter.format(tradingBox.getEffectiveDate()) + "'")
+			lambdaQueryWrapper.apply(ObjectUtils.isNotNull(tradingBox.getEffectiveDate()), "DATE_FORMAT(effective_date,'%Y-%m-%d') >= '" + formatter.format(tradingBox.getEffectiveDate()) + "'")
 				.apply(ObjectUtils.isNotNull(tradingBox.getExpiryDate()), "DATE_FORMAT(expiry_date,'%Y-%m-%d') >= '" + formatter.format(tradingBox.getExpiryDate()) + "'");
 		}
 		if (tradingBox.getPurchaseDateList() != null && tradingBox.getPurchaseDateList().size() > 1) {

+ 27 - 6
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ArchivesServiceImpl.java

@@ -24,12 +24,13 @@ import lombok.AllArgsConstructor;
 import org.springblade.client.entity.BasicContainerDesc;
 import org.springblade.client.entity.BasicPortDesc;
 import org.springblade.client.feign.IContainerDescClient;
-import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IPortClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.los.basic.cntr.entity.BCntrTypes;
+import org.springblade.los.basic.cntr.service.IBCntrTypesService;
 import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.ports.entity.BPorts;
@@ -66,7 +67,7 @@ public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> i
 
 	private final IPortClient portClient;
 
-	private final ICorpsDescClient corpsDescClient;
+	private final IBCntrTypesService bCntrTypesService;
 
 	private final TradingBoxMapper tradingBoxMapper;
 
@@ -181,6 +182,13 @@ public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> i
 			.eq(BPorts::getTenantId, AuthUtil.getTenantId())
 			.eq(BPorts::getIsDeleted, 0)
 			.in(BPorts::getCnName, portsList));
+
+		List<String> boxTypeNameList = excelList.stream().map(ArchivesExcelEnter::getTypeName).filter(Objects::nonNull)
+			.distinct().collect(Collectors.toList());
+		List<BCntrTypes> cntrTypesList = bCntrTypesService.list(new LambdaQueryWrapper<BCntrTypes>()
+			.eq(BCntrTypes::getTenantId, AuthUtil.getTenantId())
+			.eq(BCntrTypes::getIsDeleted, 0)
+			.in(BCntrTypes::getCnName, boxTypeNameList));
 		String blacklist = sysClient.getParamService("box.blacklist");
 		StringBuilder textCode = new StringBuilder();
 		StringBuilder textContainerNumber = new StringBuilder();
@@ -222,6 +230,15 @@ public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> i
 		for (ArchivesExcelEnter archivesExcelEnter : excelList) {
 			Archives archives = new Archives();
 			BeanUtil.copy(archivesExcelEnter, archives);
+			//箱型
+			if (ObjectUtils.isNotNull(archives.getTypeName())) {
+				BCntrTypes cntrTypes = cntrTypesList.stream().filter(e -> e.getCnName().equals(archives.getTypeName()))
+					.findFirst().orElse(null);
+				if (cntrTypes != null) {
+					archives.setTypeName(cntrTypes.getCnName());
+					archives.setTypeId(cntrTypes.getId());
+				}
+			}
 			//港口
 			if (ObjectUtils.isNotNull(archives.getAddressCname())) {
 				BPorts bPorts = bPortsList.stream().filter(e -> e.getCnName().equals(archives.getAddressCname()))
@@ -275,8 +292,10 @@ public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> i
 						restrictedPortsIdStr.append(bPorts.getId()).append(",");
 					}
 				}
-				archives.setRestrictedPortsIds(restrictedPortsIdStr.substring(0, restrictedPortsIdStr.length() - 1));
-				archives.setRestrictedPortsName(restrictedPortsStr.substring(0, restrictedPortsStr.length() - 1));
+				if (restrictedPortsIdStr.length() > 0) {
+					archives.setRestrictedPortsIds(restrictedPortsIdStr.substring(0, restrictedPortsIdStr.length() - 1));
+					archives.setRestrictedPortsName(restrictedPortsStr.substring(0, restrictedPortsStr.length() - 1));
+				}
 			}
 			//限制港口
 			if (ObjectUtils.isNotNull(archives.getRestrictingShippingCompaniesName())) {
@@ -291,8 +310,10 @@ public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> i
 						restrictedrestrictedShippingCompaniesIdStr.append(bPorts.getId()).append(",");
 					}
 				}
-				archives.setRestrictingShippingCompaniesIds(restrictedrestrictedShippingCompaniesIdStr.substring(0, restrictedrestrictedShippingCompaniesIdStr.length() - 1));
-				archives.setRestrictingShippingCompaniesName(restrictedrestrictedShippingCompaniesStr.substring(0, restrictedrestrictedShippingCompaniesStr.length() - 1));
+				if (restrictedrestrictedShippingCompaniesIdStr.length() > 0) {
+					archives.setRestrictingShippingCompaniesIds(restrictedrestrictedShippingCompaniesIdStr.substring(0, restrictedrestrictedShippingCompaniesIdStr.length() - 1));
+					archives.setRestrictingShippingCompaniesName(restrictedrestrictedShippingCompaniesStr.substring(0, restrictedrestrictedShippingCompaniesStr.length() - 1));
+				}
 			}
 			LambdaQueryWrapper<Archives> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 			lambdaQueryWrapper.eq(Archives::getIsDeleted, 0).eq(Archives::getTenantId, AuthUtil.getTenantId()).eq(Archives::getCode, archives.getCode());

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

@@ -376,7 +376,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					item.setCode(item.getCode().trim());
 					item.setCode(item.getCode().toUpperCase());
 				}
-				item.setOffhireReference(tradingBox.getOffhireReference());
 				BoxNumUtils.containerNumberVerification(item.getCode());
 				if ("BUY".equals(tradingBox.getType())) {
 					item.setOriginalBoxEastId(tradingBox.getPurchaseCompanyId());
@@ -2783,10 +2782,10 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		putBox.setBoxCondition(tradingBox.getBoxCondition());
 		putBox.setEffectiveEndDate(tradingBox.getExpiryDate());
 		putBox.setEffectiveStartDate(tradingBox.getEffectiveDate());
-		putBox.setPolStationId(tradingBox.getPolStationId());
-		putBox.setPolStationCode(tradingBox.getPolStationCode());
-		putBox.setPolStationCname(tradingBox.getPolStationCname());
-		putBox.setPolStationEname(tradingBox.getPolStationEname());
+		putBox.setEstimatedPolStationId(tradingBox.getPolStationId());
+		putBox.setEstimatedPolStationCode(tradingBox.getPolStationCode());
+		putBox.setEstimatedPolStationCname(tradingBox.getPolStationCname());
+		putBox.setEstimatedPolStationEname(tradingBox.getPolStationEname());
 		putBox.setPodStationId(tradingBox.getPodStationId());
 		putBox.setPodStationCode(tradingBox.getPodStationCode());
 		putBox.setPodStationCname(tradingBox.getPodStationCname());

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

@@ -144,6 +144,10 @@ public class BillsController extends BladeController {
 			lambdaQueryWrapper.ge(Bills::getEtd, bills.getEtdList().get(0));
 			lambdaQueryWrapper.le(Bills::getEtd, bills.getEtdList().get(1));
 		}
+		if (ObjectUtils.isNotNull(bills.getEtaList()) && !bills.getEtaList().isEmpty()) {
+			lambdaQueryWrapper.ge(Bills::getEta, bills.getEtaList().get(0));
+			lambdaQueryWrapper.le(Bills::getEta, bills.getEtaList().get(1));
+		}
 		if (ObjectUtils.isNotNull(bills.getActualEtdList()) && !bills.getActualEtdList().isEmpty()) {
 			lambdaQueryWrapper.ge(Bills::getActualEtd, bills.getActualEtdList().get(0));
 			lambdaQueryWrapper.le(Bills::getActualEtd, bills.getActualEtdList().get(1));
@@ -1089,5 +1093,14 @@ public class BillsController extends BladeController {
 		return billUtils.updateVerifyData(vesselId,voyageNo,polId,etd,id);
 	}
 
+
+	/**
+	 * 生成改单费
+	 */
+	@GetMapping("/generateAmendmentFee")
+	public R generateAmendmentFee(@RequestParam("id") Long id) {
+		return billUtils.generateAmendmentFee(id);
+	}
+
 }