Explorar el Código

1.财务获取账单接口增加模糊搜索和多提单号查询判断
2.模板导入结算单位取简称
3.报表打印格式修改
4.成本中心增加附加费计算
5.提取成本接口bug修改
6.费用业务申请修改表基础接口

纪新园 hace 6 meses
padre
commit
ba3c382064
Se han modificado 18 ficheros con 898 adiciones y 53 borrados
  1. 20 2
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/RouteCost.java
  2. 34 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/dto/FeeCenterUpdateRecordDTO.java
  3. 299 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenterUpdateRecord.java
  4. 10 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/ListAccBillVO.java
  5. 36 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/vo/FeeCenterUpdateRecordVO.java
  6. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/service/impl/BCorpsServiceImpl.java
  7. 3 3
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  8. 9 2
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ExpenseApplicationServiceImpl.java
  9. 14 14
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/RouteCostServiceImpl.java
  10. 12 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.xml
  11. 0 4
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  12. 147 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterUpdateRecordController.java
  13. 6 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java
  14. 42 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/mapper/FeeCenterUpdateRecordMapper.java
  15. 52 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/mapper/FeeCenterUpdateRecordMapper.xml
  16. 45 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterUpdateRecordService.java
  17. 80 26
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java
  18. 86 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterUpdateRecordServiceImpl.java

+ 20 - 2
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/RouteCost.java

@@ -318,12 +318,30 @@ public class RouteCost implements Serializable {
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Integer existStationDay;
 	/**
-	 * 班次
+	 * 二程航线
 	 */
-	@ApiModelProperty(value = "班次")
+	@ApiModelProperty(value = "二程航线")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String classesId;
+	/**
+	 * 二程航线
+	 */
+	@ApiModelProperty(value = "二程航线")
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String classes;
 	/**
+	 * 二程航线英文
+	 */
+	@ApiModelProperty(value = "二程航线英文")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String classesEname;
+	/**
+	 * 二程航线代码
+	 */
+	@ApiModelProperty(value = "二程航线代码")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String classesCode;
+	/**
 	 * 航班类型  转船/直达
 	 */
 	@ApiModelProperty(value = "航班类型  转船/直达")

+ 34 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/dto/FeeCenterUpdateRecordDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.finance.fee.dto;
+
+import org.springblade.los.finance.fee.entity.FeeCenterUpdateRecord;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 费用中心修改记录表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2025-07-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FeeCenterUpdateRecordDTO extends FeeCenterUpdateRecord {
+	private static final long serialVersionUID = 1L;
+
+}

+ 299 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenterUpdateRecord.java

@@ -0,0 +1,299 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.finance.fee.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 费用中心修改记录表实体类
+ *
+ * @author BladeX
+ * @since 2025-07-22
+ */
+@Data
+@TableName("los_fee_center_update_record")
+@ApiModel(value = "FeeCenterUpdateRecord对象", description = "费用中心修改记录表")
+public class FeeCenterUpdateRecord implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 分公司 Id
+	 */
+	@ApiModelProperty(value = "分公司 Id")
+	private String branchId;
+	/**
+	 * 分公司
+	 */
+	@ApiModelProperty(value = "分公司")
+	private String branchName;
+	/**
+	 * 创建人 Id
+	 */
+	@ApiModelProperty(value = "创建人 Id")
+	private Long createUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private String createUserName;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人 Id
+	 */
+	@ApiModelProperty(value = "修改人 Id")
+	private Long updateUser;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private String updateUserName;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 明细id
+	 */
+	@ApiModelProperty(value = "明细id")
+	private Long itemId;
+	/**
+	 * 主表 id
+	 */
+	@ApiModelProperty(value = "主表 id")
+	private Long pid;
+	/**
+	 * 业务类型
+	 */
+	@ApiModelProperty(value = "业务类型")
+	private String businessType;
+	/**
+	 * 单据类型, DD=直单(默认) MM=主单 MH=主分单 HH=从分单
+	 */
+	@ApiModelProperty(value = "单据类型, DD=直单(默认) MM=主单 MH=主分单 HH=从分单")
+	private String billType;
+	/**
+	 * 单据编号
+	 */
+	@ApiModelProperty(value = "单据编号")
+	private String billNo;
+	/**
+	 * 单据日期
+	 */
+	@ApiModelProperty(value = "单据日期")
+	private Date billDate;
+	/**
+	 * 客户 id
+	 */
+	@ApiModelProperty(value = "客户 id")
+	private Long corpId;
+	/**
+	 * 客户中文名称
+	 */
+	@ApiModelProperty(value = "客户中文名称")
+	private String corpCnName;
+	/**
+	 * 客户英文名称
+	 */
+	@ApiModelProperty(value = "客户英文名称")
+	private String corpEnName;
+	/**
+	 * MB/L NO
+	 */
+	@ApiModelProperty(value = "MB/L NO")
+	private String mblno;
+	/**
+	 * HB/L NO
+	 */
+	@ApiModelProperty(value = "HB/L NO")
+	private String hblno;
+	/**
+	 * 开船日期
+	 */
+	@ApiModelProperty(value = "开船日期")
+	private Date etd;
+	/**
+	 * 到港日期
+	 */
+	@ApiModelProperty(value = "到港日期")
+	private Date eta;
+	/**
+	 * 费用 Id
+	 */
+	@ApiModelProperty(value = "费用 Id")
+	private Long feeId;
+	/**
+	 * 费用中文名称
+	 */
+	@ApiModelProperty(value = "费用中文名称")
+	private String feeCode;
+	/**
+	 * 费用中文名称
+	 */
+	@ApiModelProperty(value = "费用中文名称")
+	private String feeCnName;
+	/**
+	 * 费用英文名称
+	 */
+	@ApiModelProperty(value = "费用英文名称")
+	private String feeEnName;
+	/**
+	 * 收付 D=收 C=付
+	 */
+	@ApiModelProperty(value = "收付 D=收 C=付")
+	private String dc;
+	/**
+	 * 数量
+	 */
+	@ApiModelProperty(value = "数量")
+	private BigDecimal quantity;
+	/**
+	 * 单位
+	 */
+	@ApiModelProperty(value = "单位")
+	private String unitNo;
+	/**
+	 * 单价
+	 */
+	@ApiModelProperty(value = "单价")
+	private BigDecimal price;
+	/**
+	 * 币种
+	 */
+	@ApiModelProperty(value = "币种")
+	private String curCode;
+	/**
+	 * 汇率,外币转为本币的汇率
+	 */
+	@ApiModelProperty(value = "汇率,外币转为本币的汇率")
+	private BigDecimal exrate;
+	/**
+	 * 金额
+	 */
+	@ApiModelProperty(value = "金额")
+	private BigDecimal amount;
+	/**
+	 * 本币金额,外币转为本币的金额(外币金额)
+	 */
+	@ApiModelProperty(value = "本币金额,外币转为本币的金额(外币金额)")
+	private BigDecimal amountLoc;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 0=申请修改1=申请删除
+	 */
+	@ApiModelProperty(value = "0=申请修改1=申请删除")
+	private String type;
+	/**
+	 * 0录入1提交审核2审核中3审核通过4审核驳回
+	 */
+	@ApiModelProperty(value = "0录入1提交审核2审核中3审核通过4审核驳回")
+	private String status;
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+	/**
+	 * 修改后费用 Id
+	 */
+	@ApiModelProperty(value = "修改后费用 Id")
+	private Long feeIdUpdate;
+	/**
+	 * 修改后费用中文名称
+	 */
+	@ApiModelProperty(value = "修改后费用中文名称")
+	private String feeCodeUpdate;
+	/**
+	 * 修改后费用中文名称
+	 */
+	@ApiModelProperty(value = "修改后费用中文名称")
+	private String feeCnNameUpdate;
+	/**
+	 * 修改后费用英文名称
+	 */
+	@ApiModelProperty(value = "修改后费用英文名称")
+	private String feeEnNameUpdate;
+	/**
+	 * 修改后数量
+	 */
+	@ApiModelProperty(value = "修改后数量")
+	private BigDecimal quantityUpdate;
+	/**
+	 * 修改后单位
+	 */
+	@ApiModelProperty(value = "修改后单位")
+	private String unitNoUpdate;
+	/**
+	 * 修改后单价
+	 */
+	@ApiModelProperty(value = "修改后单价")
+	private BigDecimal priceUpdate;
+	/**
+	 * 修改后币种
+	 */
+	@ApiModelProperty(value = "修改后币种")
+	private String curCodeUpdate;
+	/**
+	 * 修改后汇率,外币转为本币的汇率
+	 */
+	@ApiModelProperty(value = "修改后汇率,外币转为本币的汇率")
+	private BigDecimal exrateUpdate;
+	/**
+	 * 修改后金额
+	 */
+	@ApiModelProperty(value = "修改后金额")
+	private BigDecimal amountUpdate;
+	/**
+	 * 修改后本币金额,外币转为本币的金额(外币金额)
+	 */
+	@ApiModelProperty(value = "修改后本币金额,外币转为本币的金额(外币金额)")
+	private BigDecimal amountLocUpdate;
+	/**
+	 * 修改后备注
+	 */
+	@ApiModelProperty(value = "修改后备注")
+	private String remarksUpdate;
+	/**
+	 * 修改原因
+	 */
+	@ApiModelProperty(value = "修改原因")
+	private String updateReason;
+
+}

+ 10 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/ListAccBillVO.java

@@ -189,4 +189,14 @@ public class ListAccBillVO extends FinAccBills {
 	 */
 	private String feeCnName;
 
+	/**
+	 * 模糊查询=1
+	 */
+	private String vagueM;
+
+	/**
+	 * 模糊查询=1
+	 */
+	private String vagueH;
+
 }

+ 36 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/vo/FeeCenterUpdateRecordVO.java

@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.finance.fee.vo;
+
+import org.springblade.los.finance.fee.entity.FeeCenterUpdateRecord;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 费用中心修改记录表视图实体类
+ *
+ * @author BladeX
+ * @since 2025-07-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "FeeCenterUpdateRecordVO对象", description = "费用中心修改记录表")
+public class FeeCenterUpdateRecordVO extends FeeCenterUpdateRecord {
+	private static final long serialVersionUID = 1L;
+
+}

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/service/impl/BCorpsServiceImpl.java

@@ -40,6 +40,8 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -528,6 +530,7 @@ public class BCorpsServiceImpl extends ServiceImpl<CorpsMapper, BCorps> implemen
 	 */
 	public static String getSpells(String characters) {
 		StringBuffer buffer = new StringBuffer();
+//		characters = characters.replaceAll("[^a-zA-Z0-9]", "");
 		for (int i = 0; i < characters.length(); i++) {
 
 			char ch = characters.charAt(i);

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

@@ -1301,7 +1301,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setCntryString(text.toString());
 				/*bills.setCommodityDescr(bills.getCommodityDescr()+"SHIPPER'S LOAD,COUNT & SEAL"+bills.getQuantityCntrDescr()+"CONTAINER S.T.C"
 					+bills.getHpaymode()+bills.getServiceTerms()+bills.getCapitalLetters());*/
-				bills.setMarks(bills.getMarks() + "<br/>" + bills.getCntryString());
+				bills.setMarks(bills.getMarks() + "<br/><br/>" + bills.getCntryString());
 				bills.setCntrSealNo(cntrSealNo.toString());
 				bills.setContainersReportsList(containersReportsList);
 				bills.setDept(dept);
@@ -1358,7 +1358,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					+bills.getHpaymode()+bills.getServiceTerms()+bills.getCapitalLetters()
 */
 
-				bills.setMarks(bills.getMarks() + "<br/>" + bills.getCntryString());
+				bills.setMarks(bills.getMarks() + "<br/><br/>" + bills.getCntryString());
 				bills.setCntrSealNo(cntrSealNo.toString());
 				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
@@ -2147,7 +2147,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setCntryString(text.toString());
 				/*bills.setCommodityDescr(bills.getCommodityDescr()+"SHIPPER'S LOAD,COUNT & SEAL"+bills.getQuantityCntrDescr()+"CONTAINER S.T.C"
 					+bills.getHpaymode()+bills.getServiceTerms()+bills.getCapitalLetters());*/
-				bills.setMarks(bills.getMarks() + "<br/>" + bills.getCntryString());
+				bills.setMarks(bills.getMarks() + "<br/><br/>" + bills.getCntryString());
 				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {

+ 9 - 2
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ExpenseApplicationServiceImpl.java

@@ -543,9 +543,17 @@ public class ExpenseApplicationServiceImpl extends ServiceImpl<ExpenseApplicatio
 		if (ObjectUtils.isNull(expenseApplication.getFeeCenterList()) || expenseApplication.getFeeCenterList().isEmpty()) {
 			throw new RuntimeException("请选择明细");
 		}
+		List<Long> idList = expenseApplication.getFeeCenterList().stream().map(FeeCenter::getStlPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+		if (idList.isEmpty()){
+			throw new RuntimeException("数据错误,请联系管理员");
+		}
+		List<FeeCenter> feeCenterListOld = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.in(FeeCenter::getStlPid, idList));
 		StringBuilder text = new StringBuilder();
 		List<FeeCenter> feeCenterList = new ArrayList<>();
-		for (FeeCenter item : expenseApplication.getFeeCenterList()) {
+		for (FeeCenter item : feeCenterListOld) {
 			if (item.getStlPid() == null) {
 				text.append("费用:").append(item.getFeeCnName()).append("金额:").append(item.getAmount()).append("未申请,");
 			}
@@ -559,7 +567,6 @@ public class ExpenseApplicationServiceImpl extends ServiceImpl<ExpenseApplicatio
 		if (ObjectUtils.isNotNull(text.toString())) {
 			throw new RuntimeException(text.toString());
 		}
-		List<Long> idList = expenseApplication.getFeeCenterList().stream().map(FeeCenter::getStlPid).distinct().collect(Collectors.toList());
 		if (!feeCenterList.isEmpty()) {
 			FinAccBills finAccBills = new FinAccBills();
 			finAccBills.setFeeCenterList(feeCenterList);

+ 14 - 14
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/RouteCostServiceImpl.java

@@ -196,9 +196,9 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
 					} else {
 						routeCostItem.setUseBoxCost(new BigDecimal("0.00"));
 					}
-					// 一程成本价 = 一程海运费+一程用箱成本+一程pol杂费+一程pod成本
+					// 一程成本价 = 一程海运费+一程用箱成本+一程pol杂费+一程pod成本+附加费
 					routeCostItem.setCostPrice(routeCostItem.getOceanFreight().add(routeCostItem.getPodCost()).add(routeCostItem.getPolCost())
-						.add(routeCostItem.getUseBoxCost()));
+						.add(routeCostItem.getUseBoxCost()).add(routeCostItem.getAdditionalFee()));
 					//一程合计利润
 					routeCostItem.setTotalProfit(routeCostItem.getSalesPrice().add(routeCostItem.getPolIncome())
 						.add(routeCostItem.getPodIncome()).subtract(routeCostItem.getCostPrice()));
@@ -527,9 +527,9 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
 					} else {
 						routeCostItem.setUseBoxCost(new BigDecimal("0.00"));
 					}
-					// 一程成本价 = 一程海运费+一程用箱成本+一程pol杂费+一程pod成本
+					// 一程成本价 = 一程海运费+一程用箱成本+一程pol杂费+一程pod成本+附加费
 					routeCostItem.setCostPrice(routeCostItem.getOceanFreight().add(routeCostItem.getPodCost()).add(routeCostItem.getPolCost())
-						.add(routeCostItem.getUseBoxCost()));
+						.add(routeCostItem.getUseBoxCost()).add(routeCostItem.getAdditionalFee()));
 					//一程合计利润
 					routeCostItem.setTotalProfit(routeCostItem.getSalesPrice().add(routeCostItem.getPolIncome())
 						.add(routeCostItem.getPodIncome()).subtract(routeCostItem.getCostPrice()));
@@ -608,9 +608,9 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
 					} else {
 						routeCostItem.setUseBoxCost(new BigDecimal("0.00"));
 					}
-					// 一程成本价 = 一程海运费+一程用箱成本+一程pol杂费+一程pod成本
+					// 一程成本价 = 一程海运费+一程用箱成本+一程pol杂费+一程pod成本+附加费
 					routeCostItem.setCostPrice(routeCostItem.getOceanFreight().add(routeCostItem.getPodCost()).add(routeCostItem.getPolCost())
-						.add(routeCostItem.getUseBoxCost()));
+						.add(routeCostItem.getUseBoxCost()).add(routeCostItem.getAdditionalFee()));
 					//一程合计利润
 					routeCostItem.setTotalProfit(routeCostItem.getSalesPrice().add(routeCostItem.getPolIncome())
 						.add(routeCostItem.getPodIncome()).subtract(routeCostItem.getCostPrice()));
@@ -683,9 +683,9 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
 				} else {
 					routeCostItem.setUseBoxCost(new BigDecimal("0.00"));
 				}
-				// 一程成本价 = 一程海运费+一程用箱成本+一程pol杂费+一程pod成本
+				// 一程成本价 = 一程海运费+一程用箱成本+一程pol杂费+一程pod成本+附加费
 				routeCostItem.setCostPrice(routeCostItem.getOceanFreight().add(routeCostItem.getPodCost()).add(routeCostItem.getPolCost())
-					.add(routeCostItem.getUseBoxCost()));
+					.add(routeCostItem.getUseBoxCost()).add(routeCostItem.getAdditionalFee()));
 				//一程合计利润
 				routeCostItem.setTotalProfit(routeCostItem.getSalesPrice().add(routeCostItem.getPolIncome())
 					.add(routeCostItem.getPodIncome()).subtract(routeCostItem.getCostPrice()));
@@ -913,7 +913,7 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
 	public BigDecimal computationalCost(List<RouteCostFee> routeCostFeeList, String type, String boxType, BigDecimal exrate, String srcType) {
 		BigDecimal amount = new BigDecimal("0.00");
 		if (!routeCostFeeList.isEmpty()) {
-			amount = routeCostFeeList.stream().filter(e -> e.getBoxType().equals(boxType)
+			amount = routeCostFeeList.stream().filter(e -> boxType.equals(e.getBoxType())
 				&& type.equals(e.getBusType()) && srcType.equals(e.getSrcType())).reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getExrate().multiply(y.getCostPrice())), BigDecimal::add);
 			if (new BigDecimal("0.00").compareTo(amount) != 0) {
 				amount = amount.divide(exrate, 4, RoundingMode.HALF_UP);
@@ -935,7 +935,7 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
 	public BigDecimal computationalIncome(List<RouteCostFee> routeCostFeeList, String type, String boxType, BigDecimal exrate, String srcType) {
 		BigDecimal amount = new BigDecimal("0.00");
 		if (!routeCostFeeList.isEmpty()) {
-			amount = routeCostFeeList.stream().filter(e -> e.getBoxType().equals(boxType)
+			amount = routeCostFeeList.stream().filter(e -> boxType.equals(e.getBoxType())
 				&& type.equals(e.getBusType()) && srcType.equals(e.getSrcType())).reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getExrate().multiply(y.getSalesPrice())), BigDecimal::add);
 			if (new BigDecimal("0.00").compareTo(amount) != 0) {
 				amount = amount.divide(exrate, 4, RoundingMode.HALF_UP);
@@ -956,16 +956,16 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
 		BigDecimal profit;
 		if (!routeCostItemList.isEmpty()) {
 			if ("20".equals(type)) {
-				profit = routeCostItemList.stream().filter(e -> e.getBoxType().contains("20"))
+				profit = routeCostItemList.stream().filter(e -> ObjectUtils.isNotNull(e.getBoxType()) && e.getBoxType().contains("20"))
 					.map(RouteCostItem::getProfit).reduce(BigDecimal.ZERO, BigDecimal::add);
 			} else if ("40".equals(type)) {
-				profit = routeCostItemList.stream().filter(e -> e.getBoxType().contains("40") &&
+				profit = routeCostItemList.stream().filter(e -> ObjectUtils.isNotNull(e.getBoxType()) && e.getBoxType().contains("40") &&
 					!e.getBoxType().equals("40HC")).map(RouteCostItem::getProfit).reduce(BigDecimal.ZERO, BigDecimal::add);
 			} else if ("40HC".equals(type)) {
-				profit = routeCostItemList.stream().filter(e -> e.getBoxType().contains("40HC"))
+				profit = routeCostItemList.stream().filter(e -> ObjectUtils.isNotNull(e.getBoxType()) && e.getBoxType().contains("40HC"))
 					.map(RouteCostItem::getProfit).reduce(BigDecimal.ZERO, BigDecimal::add);
 			} else {
-				profit = routeCostItemList.stream().filter(e -> !e.getBoxType().equals("40HC") &&
+				profit = routeCostItemList.stream().filter(e -> ObjectUtils.isNotNull(e.getBoxType()) && !e.getBoxType().equals("40HC") &&
 						!e.getBoxType().contains("20") && !e.getBoxType().contains("40"))
 					.map(RouteCostItem::getProfit).reduce(BigDecimal.ZERO, BigDecimal::add);
 			}

+ 12 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.xml

@@ -397,10 +397,20 @@
             and find_in_set(fee.acc_bill_no,#{acc.accBillNo})
         </if>
         <if test="acc.mblno != null and acc.mblno != ''">
-            and find_in_set(fee.mblno,#{acc.mblno})
+            <if test="acc.vagueM == null or acc.vagueM == ''">
+                AND fee.mblno like CONCAT(CONCAT('%', #{acc.mblno}), '%')
+            </if>
+            <if test="acc.vagueM != null and acc.vagueM != ''">
+                and find_in_set(fee.mblno,#{acc.mblno})
+            </if>
         </if>
         <if test="acc.hblno != null and acc.hblno != ''">
-            and find_in_set(fee.hblno,#{acc.hblno})
+            <if test="acc.vagueH == null or acc.vagueH == ''">
+                AND fee.hblno like CONCAT(CONCAT('%', #{acc.hblno}), '%')
+            </if>
+            <if test="acc.vagueH != null and acc.vagueH != ''">
+                and find_in_set(fee.hblno,#{acc.hblno})
+            </if>
         </if>
         <if test="acc.billDateStart != null and acc.billDateStart != ''">
             and DATE_FORMAT(acc.bill_date,'%Y-%m-%d') &gt;= DATE_FORMAT(#{acc.billDateStart},'%Y-%m-%d')

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

@@ -1072,18 +1072,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		detail.setFeeCenterListC(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-			.eq(FeeCenter::getBillType, detail.getBillType())
 			.eq(FeeCenter::getPid, detail.getId())
 			.eq(FeeCenter::getDc, "C")
-			.eq(FeeCenter::getBillNo, detail.getBillNo())
 		));
 		detail.setFeeCenterListD(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-			.eq(FeeCenter::getBillType, detail.getBillType())
 			.eq(FeeCenter::getPid, detail.getId())
 			.eq(FeeCenter::getDc, "D")
-			.eq(FeeCenter::getBillNo, detail.getBillNo())
 		));
 		/*List<Amends> amendsList = amendsMapper.selectList(new LambdaQueryWrapper<Amends>()
 			.eq(Amends::getTenantId, AuthUtil.getTenantId())

+ 147 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterUpdateRecordController.java

@@ -0,0 +1,147 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.finance.fee.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.los.box.entity.ExpenseApplication;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.los.finance.fee.entity.FeeCenterUpdateRecord;
+import org.springblade.los.finance.fee.vo.FeeCenterUpdateRecordVO;
+import org.springblade.los.finance.fee.service.IFeeCenterUpdateRecordService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 费用中心修改记录表 控制器
+ *
+ * @author BladeX
+ * @since 2025-07-22
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/feecenterupdaterecord")
+@Api(value = "费用中心修改记录表", tags = "费用中心修改记录表接口")
+public class FeeCenterUpdateRecordController extends BladeController {
+
+	private final IFeeCenterUpdateRecordService feeCenterUpdateRecordService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入feeCenterUpdateRecord")
+	public R<FeeCenterUpdateRecord> detail(FeeCenterUpdateRecord feeCenterUpdateRecord) {
+		FeeCenterUpdateRecord detail = feeCenterUpdateRecordService.getOne(Condition.getQueryWrapper(feeCenterUpdateRecord));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 费用中心修改记录表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入feeCenterUpdateRecord")
+	public R<IPage<FeeCenterUpdateRecord>> list(FeeCenterUpdateRecord feeCenterUpdateRecord, Query query) {
+		IPage<FeeCenterUpdateRecord> pages = feeCenterUpdateRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(feeCenterUpdateRecord));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 费用中心修改记录表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入feeCenterUpdateRecord")
+	public R<IPage<FeeCenterUpdateRecordVO>> page(FeeCenterUpdateRecordVO feeCenterUpdateRecord, Query query) {
+		IPage<FeeCenterUpdateRecordVO> pages = feeCenterUpdateRecordService.selectFeeCenterUpdateRecordPage(Condition.getPage(query), feeCenterUpdateRecord);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 费用中心修改记录表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入feeCenterUpdateRecord")
+	public R save(@Valid @RequestBody FeeCenterUpdateRecord feeCenterUpdateRecord) {
+		return R.status(feeCenterUpdateRecordService.save(feeCenterUpdateRecord));
+	}
+
+	/**
+	 * 修改 费用中心修改记录表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入feeCenterUpdateRecord")
+	public R update(@Valid @RequestBody FeeCenterUpdateRecord feeCenterUpdateRecord) {
+		return R.status(feeCenterUpdateRecordService.updateById(feeCenterUpdateRecord));
+	}
+
+	/**
+	 * 新增或修改 费用中心修改记录表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入feeCenterUpdateRecord")
+	public R submit(@Valid @RequestBody FeeCenterUpdateRecord feeCenterUpdateRecord) {
+		return R.status(feeCenterUpdateRecordService.saveOrUpdate(feeCenterUpdateRecord));
+	}
+
+
+	/**
+	 * 删除 费用中心修改记录表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(feeCenterUpdateRecordService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+	/**
+	 * 请核费用
+	 */
+	@PostMapping("/applyUpdate")
+	@RepeatSubmit
+	public R applyUpdate(@Valid @RequestBody FeeCenterUpdateRecord feeCenterUpdateRecord) {
+		return feeCenterUpdateRecordService.applyUpdate(feeCenterUpdateRecord);
+	}
+
+	/**
+	 * 撤销请核费用
+	 */
+	@PostMapping("/revokeapplyUpdate")
+	@RepeatSubmit
+	public R revokeapplyUpdate(@Valid @RequestBody FeeCenterUpdateRecord feeCenterUpdateRecord) {
+		return feeCenterUpdateRecordService.revokeapplyUpdate(feeCenterUpdateRecord);
+	}
+
+
+}

+ 6 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java

@@ -349,6 +349,12 @@ public class FinAccBillsController extends BladeController {
 		if (ObjectUtils.isNotNull(listAccBillVO.getAuditStatus()) && "0".equals(listAccBillVO.getAuditStatus())) {
 			listAccBillVO.setAuditStatus(null);
 		}
+		if (ObjectUtils.isNotNull(listAccBillVO.getHblno()) && listAccBillVO.getHblno().contains(",")) {
+			listAccBillVO.setVagueH("1");
+		}
+		if (ObjectUtils.isNotNull(listAccBillVO.getMblno()) && listAccBillVO.getMblno().contains(",")) {
+			listAccBillVO.setVagueM("1");
+		}
 		List<FinAccBillsVO> finAccBillsVOList = new ArrayList<>();
 		List<FinAccBillsVO> list = finAccBillsService.listAccBill(listAccBillVO);
 		for (FinAccBillsVO item : list) {

+ 42 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/mapper/FeeCenterUpdateRecordMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.finance.fee.mapper;
+
+import org.springblade.los.finance.fee.entity.FeeCenterUpdateRecord;
+import org.springblade.los.finance.fee.vo.FeeCenterUpdateRecordVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 费用中心修改记录表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2025-07-22
+ */
+public interface FeeCenterUpdateRecordMapper extends BaseMapper<FeeCenterUpdateRecord> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param feeCenterUpdateRecord
+	 * @return
+	 */
+	List<FeeCenterUpdateRecordVO> selectFeeCenterUpdateRecordPage(IPage page, FeeCenterUpdateRecordVO feeCenterUpdateRecord);
+
+}

+ 52 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/mapper/FeeCenterUpdateRecordMapper.xml

@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.los.finance.fee.mapper.FeeCenterUpdateRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="feeCenterUpdateRecordResultMap" type="org.springblade.los.finance.fee.entity.FeeCenterUpdateRecord">
+        <id column="id" property="id"/>
+        <result column="branch_id" property="branchId"/>
+        <result column="branch_name" property="branchName"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_user_name" property="createUserName"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_user_name" property="updateUserName"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="item_id" property="itemId"/>
+        <result column="pid" property="pid"/>
+        <result column="business_type" property="businessType"/>
+        <result column="bill_type" property="billType"/>
+        <result column="bill_no" property="billNo"/>
+        <result column="bill_date" property="billDate"/>
+        <result column="corp_id" property="corpId"/>
+        <result column="corp_cn_name" property="corpCnName"/>
+        <result column="corp_en_name" property="corpEnName"/>
+        <result column="mblno" property="mblno"/>
+        <result column="hblno" property="hblno"/>
+        <result column="etd" property="etd"/>
+        <result column="eta" property="eta"/>
+        <result column="fee_id" property="feeId"/>
+        <result column="fee_code" property="feeCode"/>
+        <result column="fee_cn_name" property="feeCnName"/>
+        <result column="fee_en_name" property="feeEnName"/>
+        <result column="dc" property="dc"/>
+        <result column="quantity" property="quantity"/>
+        <result column="unit_no" property="unitNo"/>
+        <result column="price" property="price"/>
+        <result column="cur_code" property="curCode"/>
+        <result column="exrate" property="exrate"/>
+        <result column="amount" property="amount"/>
+        <result column="amount_loc" property="amountLoc"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="remarks" property="remarks"/>
+        <result column="type" property="type"/>
+        <result column="status" property="status"/>
+    </resultMap>
+
+
+    <select id="selectFeeCenterUpdateRecordPage" resultMap="feeCenterUpdateRecordResultMap">
+        select * from los_fee_center_update_record where is_deleted = 0
+    </select>
+
+</mapper>

+ 45 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterUpdateRecordService.java

@@ -0,0 +1,45 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.finance.fee.service;
+
+import org.springblade.core.tool.api.R;
+import org.springblade.los.finance.fee.entity.FeeCenterUpdateRecord;
+import org.springblade.los.finance.fee.vo.FeeCenterUpdateRecordVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 费用中心修改记录表 服务类
+ *
+ * @author BladeX
+ * @since 2025-07-22
+ */
+public interface IFeeCenterUpdateRecordService extends IService<FeeCenterUpdateRecord> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param feeCenterUpdateRecord
+	 * @return
+	 */
+	IPage<FeeCenterUpdateRecordVO> selectFeeCenterUpdateRecordPage(IPage<FeeCenterUpdateRecordVO> page, FeeCenterUpdateRecordVO feeCenterUpdateRecord);
+
+	R applyUpdate(FeeCenterUpdateRecord feeCenterUpdateRecord);
+
+	R revokeapplyUpdate(FeeCenterUpdateRecord feeCenterUpdateRecord);
+}

+ 80 - 26
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java

@@ -210,6 +210,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			idList.add(bills.getBookingAgentId());
 			idList.add(bills.getMconsigneeId());
 			idList.add(bills.getMnotifyId());
+			idList.add(bills.getForeignAgencyId());
+			idList.add(bills.getShippingAgencyId());
 			idList.addAll(losBFeesTemplate.getFeesTemplateItemsList().stream().map(FeesTemplateItems::getCorpId).filter(Objects::nonNull).collect(Collectors.toList()));
 			List<BCorps> corpsList = new ArrayList<>();
 			if (!idList.isEmpty()) {
@@ -294,10 +296,21 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 						feeCenter.setCorpEnName(bills.getCorpEnName());
 						feeCenter.setShortName(bills.getShortName());
 					} else if ("国外同行及代理".contains(templateItems.getCorpType())) {
-						feeCenter.setCorpId(bills.getForeignAgencyId());
-						feeCenter.setCorpCnName(bills.getForeignAgencyCnName());
-						feeCenter.setCorpEnName(bills.getForeignAgencyEnName());
-						feeCenter.setShortName(bills.getForeignAgencyCnName());
+						BCorps bCorps = null;
+						if (!corpsList.isEmpty()) {
+							bCorps = corpsList.stream().filter(e -> e.getId().equals(items.getCorpId())).findFirst().orElse(null);
+						}
+						if (bCorps == null){
+							feeCenter.setCorpId(bills.getForeignAgencyId());
+							feeCenter.setCorpCnName(bills.getForeignAgencyCnName());
+							feeCenter.setCorpEnName(bills.getForeignAgencyEnName());
+							feeCenter.setShortName(bills.getForeignAgencyCnName());
+						}else{
+							feeCenter.setCorpId(bCorps.getId());
+							feeCenter.setCorpCnName(bCorps.getCnName());
+							feeCenter.setCorpEnName(bCorps.getEnName());
+							feeCenter.setShortName(bCorps.getShortName());
+						}
 					} else if ("船公司".contains(templateItems.getCorpType())) {
 						feeCenter.setCorpId(bills.getCarrierId());
 						feeCenter.setCorpCnName(bills.getCarrierShortName());
@@ -313,10 +326,21 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 						feeCenter.setCorpEnName(bills.getCyEnName());
 						feeCenter.setShortName(bCorps == null ? bills.getCyCnName() : bCorps.getShortName());
 					} else if ("船代".contains(templateItems.getCorpType())) {
-						feeCenter.setCorpId(bills.getShippingAgencyId());
-						feeCenter.setCorpCnName(bills.getShippingAgencyCname());
-						feeCenter.setCorpEnName(bills.getShippingAgencyEname());
-						feeCenter.setShortName(bills.getShippingAgencyCname());
+						BCorps bCorps = null;
+						if (!corpsList.isEmpty()) {
+							bCorps = corpsList.stream().filter(e -> e.getId().equals(items.getCorpId())).findFirst().orElse(null);
+						}
+						if (bCorps == null){
+							feeCenter.setCorpId(bills.getShippingAgencyId());
+							feeCenter.setCorpCnName(bills.getShippingAgencyCname());
+							feeCenter.setCorpEnName(bills.getShippingAgencyEname());
+							feeCenter.setShortName(bills.getShippingAgencyCname());
+						}else{
+							feeCenter.setCorpId(bCorps.getId());
+							feeCenter.setCorpCnName(bCorps.getCnName());
+							feeCenter.setCorpEnName(bCorps.getEnName());
+							feeCenter.setShortName(bCorps.getShortName());
+						}
 					} else {
 						BCorps bCorps = null;
 						if (!corpsList.isEmpty()) {
@@ -1028,6 +1052,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 		idList.addAll(billsList.stream().map(Bills::getBookingAgentId).filter(Objects::nonNull).collect(Collectors.toList()));
 		idList.addAll(billsList.stream().map(Bills::getMconsigneeId).filter(Objects::nonNull).collect(Collectors.toList()));
 		idList.addAll(billsList.stream().map(Bills::getMnotifyId).filter(Objects::nonNull).collect(Collectors.toList()));
+		idList.addAll(billsList.stream().map(Bills::getForeignAgencyId).filter(Objects::nonNull).collect(Collectors.toList()));
+		idList.addAll(billsList.stream().map(Bills::getShippingAgencyId).filter(Objects::nonNull).collect(Collectors.toList()));
 		idList.addAll(sonItemsList.stream().map(FeesTemplateSonItems::getCorpId).filter(Objects::nonNull).collect(Collectors.toList()));
 		List<BCorps> corpsList = new ArrayList<>();
 		if (!idList.isEmpty()) {
@@ -1154,10 +1180,21 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 						feeCenter.setCorpEnName(bills.getCorpEnName());
 						feeCenter.setShortName(bills.getShortName());
 					} else if ("国外同行及代理".contains(templateItems.getCorpType())) {
-						feeCenter.setCorpId(bills.getForeignAgencyId());
-						feeCenter.setCorpCnName(bills.getForeignAgencyCnName());
-						feeCenter.setCorpEnName(bills.getForeignAgencyEnName());
-						feeCenter.setShortName(bills.getForeignAgencyCnName());
+						BCorps bCorps = null;
+						if (!corpsList.isEmpty()) {
+							bCorps = corpsList.stream().filter(e -> e.getId().equals(items.getCorpId())).findFirst().orElse(null);
+						}
+						if (bCorps == null){
+							feeCenter.setCorpId(bills.getForeignAgencyId());
+							feeCenter.setCorpCnName(bills.getForeignAgencyCnName());
+							feeCenter.setCorpEnName(bills.getForeignAgencyEnName());
+							feeCenter.setShortName(bills.getForeignAgencyCnName());
+						}else{
+							feeCenter.setCorpId(bCorps.getId());
+							feeCenter.setCorpCnName(bCorps.getCnName());
+							feeCenter.setCorpEnName(bCorps.getEnName());
+							feeCenter.setShortName(bCorps.getShortName());
+						}
 					} else if ("船公司".contains(templateItems.getCorpType())) {
 						feeCenter.setCorpId(bills.getCarrierId());
 						feeCenter.setCorpCnName(bills.getCarrierShortName());
@@ -1173,10 +1210,21 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 						feeCenter.setCorpEnName(bills.getCyEnName());
 						feeCenter.setShortName(bCorps == null ? bills.getCyCnName() : bCorps.getShortName());
 					} else if ("船代".contains(templateItems.getCorpType())) {
-						feeCenter.setCorpId(bills.getShippingAgencyId());
-						feeCenter.setCorpCnName(bills.getShippingAgencyCname());
-						feeCenter.setCorpEnName(bills.getShippingAgencyEname());
-						feeCenter.setShortName(bills.getShippingAgencyCname());
+						BCorps bCorps = null;
+						if (!corpsList.isEmpty()) {
+							bCorps = corpsList.stream().filter(e -> e.getId().equals(items.getCorpId())).findFirst().orElse(null);
+						}
+						if (bCorps == null){
+							feeCenter.setCorpId(bills.getShippingAgencyId());
+							feeCenter.setCorpCnName(bills.getShippingAgencyCname());
+							feeCenter.setCorpEnName(bills.getShippingAgencyEname());
+							feeCenter.setShortName(bills.getShippingAgencyCname());
+						}else{
+							feeCenter.setCorpId(bCorps.getId());
+							feeCenter.setCorpCnName(bCorps.getCnName());
+							feeCenter.setCorpEnName(bCorps.getEnName());
+							feeCenter.setShortName(bCorps.getShortName());
+						}
 					} else {
 						BCorps bCorps = null;
 						if (!corpsList.isEmpty()) {
@@ -1492,21 +1540,21 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 								feeCenterC.setShortName(bCorps.getShortName());
 								feeCenterC.setQuantity(feeCenter.getQuantity());
 								if ("按收入".equals(agencyFeeCountWay)) {
-									feeCenterC.setPrice(feeCenterC.getPrice().multiply(new BigDecimal(agencyFee))
-										.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP));
+									feeCenterC.setPrice(feeCenter.getPrice().subtract(feeCenter.getPrice().multiply(new BigDecimal(agencyFee))
+										.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)));
 								} else {
-									feeCenterC.setPrice(feeCenterC.getPrice().subtract(new BigDecimal(agencyFee).multiply(feeCenterC.getQuantity()))
+									feeCenterC.setPrice(feeCenter.getPrice().subtract(new BigDecimal(agencyFee).multiply(feeCenterC.getQuantity()))
 										.setScale(2, RoundingMode.HALF_UP));
 								}
 								feeCenterC.setAmount(feeCenterC.getQuantity().multiply(feeCenterC.getPrice()));
-								feeCenterC.setAmountLoc(feeCenterC.getAmount().multiply(feeCenter.getExrate()));
+								feeCenterC.setAmountLoc(feeCenterC.getAmount().multiply(feeCenterC.getExrate()));
 								feeCentersFdC.add(feeCenterC);
 								feeCenterSum.add(feeCenterC);
 							}
 						}
 						if (!feeCenterSum.isEmpty()) {
 							this.updateBills(feeCenterSum, item, exrateType);
-							BigDecimal amount = feeCenterSum.stream().map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amount = feeCenterSum.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 							FeeCenter feeCenterD = new FeeCenter();
 							feeCenterD.setBranchId(bills.getBranchId());
 							feeCenterD.setBranchName(bills.getBranchName());
@@ -1545,9 +1593,9 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 							feeCenterD.setFeeCode(fees.getCode());
 							feeCenterD.setFeeCnName(fees.getCnName());
 							feeCenterD.setFeeEnName(fees.getEnName());
-							feeCenterD.setUnitNo(fees.getUnitNo());
-							feeCenterD.setCurCode(exrateType);
-							feeCenterD.setExrate(new BigDecimal("1"));
+							feeCenterD.setUnitNo("JOB");
+							feeCenterD.setCurCode(feeCenterSum.get(0).getCurCode());
+							feeCenterD.setExrate(feeCenterSum.get(0).getExrate());
 							feeCenterD.setDc("D");
 							feeCenterD.setCorpType("国内直接客户");
 							BCorps corps = bCorpsService.getOne(new LambdaQueryWrapper<BCorps>()
@@ -1564,7 +1612,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 							feeCenterD.setQuantity(new BigDecimal("1"));
 							feeCenterD.setPrice(amount);
 							feeCenterD.setAmount(amount);
-							feeCenterD.setAmountLoc(amount);
+							feeCenterD.setAmountLoc(amount.multiply(feeCenterD.getExrate()));
 							list.add(feeCenterD);
 							list1.add(feeCenterD);
 						}
@@ -1672,6 +1720,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			bills.setAccountStatus(1);
 		} else if (0 == statusD && 1 == statusC) {
 			bills.setAccountStatus(2);
+		}else{
+			bills.setAccountStatus(3);
 		}
 		BigDecimal amountDr;
 		BigDecimal amountCr;
@@ -2104,7 +2154,11 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				feeCenter.setAmountLoc(new BigDecimal("0"));
 			}
 		}
-		return feeCenter;
+		if (new BigDecimal("0.00").compareTo(feeCenter.getAmount()) == 0){
+			return null;
+		}else{
+			return feeCenter;
+		}
 	}
 
 }

+ 86 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterUpdateRecordServiceImpl.java

@@ -0,0 +1,86 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.finance.fee.service.impl;
+
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.los.check.service.IAuditPathsActsService;
+import org.springblade.los.check.service.IAuditPathsLevelsService;
+import org.springblade.los.check.service.IAuditProecessService;
+import org.springblade.los.finance.fee.entity.FeeCenter;
+import org.springblade.los.finance.fee.entity.FeeCenterUpdateRecord;
+import org.springblade.los.finance.fee.service.IFeeCenterService;
+import org.springblade.los.finance.fee.vo.FeeCenterUpdateRecordVO;
+import org.springblade.los.finance.fee.mapper.FeeCenterUpdateRecordMapper;
+import org.springblade.los.finance.fee.service.IFeeCenterUpdateRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.system.feign.ISysClient;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.Date;
+
+/**
+ * 费用中心修改记录表 服务实现类
+ *
+ * @author BladeX
+ * @since 2025-07-22
+ */
+@Service
+@AllArgsConstructor
+public class FeeCenterUpdateRecordServiceImpl extends ServiceImpl<FeeCenterUpdateRecordMapper, FeeCenterUpdateRecord> implements IFeeCenterUpdateRecordService {
+
+	private final IFeeCenterService feeCenterService;
+
+	private final IAuditPathsActsService auditPathsActsService;
+
+	private final IAuditPathsLevelsService auditPathsLevelsService;
+
+	private final IAuditProecessService auditProecessService;
+
+	private final ISysClient sysClient;
+
+	@Override
+	public IPage<FeeCenterUpdateRecordVO> selectFeeCenterUpdateRecordPage(IPage<FeeCenterUpdateRecordVO> page, FeeCenterUpdateRecordVO feeCenterUpdateRecord) {
+		return page.setRecords(baseMapper.selectFeeCenterUpdateRecordPage(page, feeCenterUpdateRecord));
+	}
+
+	@Override
+	public R applyUpdate(FeeCenterUpdateRecord feeCenterUpdateRecord) {
+		if (feeCenterUpdateRecord.getItemId() == null){
+			throw new RuntimeException("缺少必要参数");
+		}
+		FeeCenter feeCenter = feeCenterService.getById(feeCenterUpdateRecord.getItemId());
+		if (feeCenter == null){
+			throw new RuntimeException("未查到费用明细");
+		}
+		if (!"4".equals(feeCenter.getAuditStatus())){
+			throw new RuntimeException("费用明细审核未通过");
+		}
+		feeCenterUpdateRecord.setCreateUser(AuthUtil.getUserId());
+		feeCenterUpdateRecord.setCreateTime(new Date());
+		feeCenterUpdateRecord.setCreateUserName(AuthUtil.getUserName());
+		return null;
+	}
+
+	@Override
+	public R revokeapplyUpdate(FeeCenterUpdateRecord feeCenterUpdateRecord) {
+		return null;
+	}
+
+}