Browse Source

2024年1月17日17:25:42

纪新园 2 years ago
parent
commit
3e2ccd464b
14 changed files with 1002 additions and 148 deletions
  1. 37 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  2. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/dto/FeeCenterReports.java
  3. 12 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java
  4. 17 6
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FinAccBills.java
  5. 18 3
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/controller/ReportsController.java
  6. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/IReportsService.java
  7. 715 53
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  8. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java
  9. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterController.java
  10. 4 4
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java
  11. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterService.java
  12. 36 21
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java
  13. 95 35
      blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/service/impl/FinInvoicesServiceImpl.java
  14. 57 21
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

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

@@ -1609,5 +1609,42 @@ public class Bills implements Serializable {
 	 */
 	@TableField(exist = false)
 	private BigDecimal boxWeightSum;
+	/**
+	 * 修改前
+	 */
+	@TableField(exist = false)
+	private BigDecimal amount;
+	/**
+	 * 修改后
+	 */
+	@TableField(exist = false)
+	private BigDecimal amountUpdate;
+	/**
+	 * 修改前
+	 */
+	@TableField(exist = false)
+	private BigDecimal amountUsd;
+	/**
+	 * 修改后
+	 */
+	@TableField(exist = false)
+	private BigDecimal amountUsdUpdate;
+
+	/**
+	 * 修改前
+	 */
+	@TableField(exist = false)
+	private BigDecimal amountTotal;
+	/**
+	 * 修改后
+	 */
+	@TableField(exist = false)
+	private BigDecimal amountTotalUpdate;
+
+	/**
+	 * 责任方
+	 */
+	@TableField(exist = false)
+	private String responsibleParty;
 
 }

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

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.finance.fee.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -92,5 +93,10 @@ public class FeeCenterReports implements Serializable {
 	 */
 	private String dc;
 
+	/**
+	 * 报表类型
+	 */
+	private String reportType;
+
 
 }

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

@@ -868,5 +868,17 @@ public class FeeCenter implements Serializable {
 	@ApiModelProperty(value = "已申请发票金额")
 	private BigDecimal appliedInvoiceAmountStl;
 
+	/**
+	 * 报表类型
+	 */
+	@TableField(exist = false)
+	private String reportType;
+
+	/**
+	 * amend费用明细来源id
+	 */
+	@ApiModelProperty(value = "amend费用明细来源id")
+	private Long amendSrcItemId;
+
 
 }

+ 17 - 6
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FinAccBills.java

@@ -617,34 +617,28 @@ public class FinAccBills implements Serializable {
 	/**
 	 * 开票CNY
 	 */
-	@TableField(exist = false)
 	private BigDecimal uninvoicedAmount;
 
 	/**
 	 * 开票USD
 	 */
-	@TableField(exist = false)
 	private BigDecimal uninvoicedAmountUsd;
 
 	/**
 	 * 付费申请金额CNY
 	 */
-	@TableField(exist = false)
 	private BigDecimal appliedAmount;
 	/**
 	 * 付费申请金额USD
 	 */
-	@TableField(exist = false)
 	private BigDecimal appliedAmountUsd;
 	/**
 	 * 申请发票金额CNY
 	 */
-	@TableField(exist = false)
 	private BigDecimal appliedInvoiceAmount;
 	/**
 	 * 申请发票金额USD
 	 */
-	@TableField(exist = false)
 	private BigDecimal appliedInvoiceAmountUsd;
 
 	/**
@@ -664,5 +658,22 @@ public class FinAccBills implements Serializable {
 	@ApiModelProperty(value = "已申请发票金额")
 	private BigDecimal appliedInvoiceAmountStl;
 
+	/**
+	 * 已对账金额
+	 */
+	@ApiModelProperty(value = "已对账金额")
+	private BigDecimal reconciliationAmountUsd;
+
+	/**
+	 * 已申请结算金额
+	 */
+	@ApiModelProperty(value = "已申请金额")
+	private BigDecimal appliedAmountStlUsd;
+	/**
+	 * 已申请发票结算金额
+	 */
+	@ApiModelProperty(value = "已申请发票金额")
+	private BigDecimal appliedInvoiceAmountStlUsd;
+
 
 }

+ 18 - 3
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/controller/ReportsController.java

@@ -16,7 +16,9 @@
  */
 package org.springblade.los.basic.reports.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -25,6 +27,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.basic.reports.entity.Reports;
@@ -66,7 +69,18 @@ public class ReportsController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入reports")
 	public R<IPage<Reports>> list(Reports reports, Query query) {
-		IPage<Reports> pages = reportsService.page(Condition.getPage(query), Condition.getQueryWrapper(reports));
+		LambdaQueryWrapper<Reports> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Reports::getTenantId, AuthUtil.getTenantId())
+			.eq(Reports::getIsDeleted, 0)
+			.eq(ObjectUtils.isNotNull(reports.getCode()), Reports::getCode, reports.getCode())
+			.eq(ObjectUtils.isNotNull(reports.getGroupCode()), Reports::getGroupCode, reports.getGroupCode())
+			.eq(ObjectUtils.isNotNull(reports.getBusinessType()), Reports::getBusinessType, reports.getBusinessType());
+		if ("AMEND".equals(reports.getBusinessType())) {
+			lambdaQueryWrapper.apply(ObjectUtils.isNotNull(reports.getClassifyCode()), "find_in_set(classify_code,'" + reports.getClassifyCode() + "')");
+		} else {
+			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(reports.getClassifyCode()), Reports::getClassifyCode, reports.getClassifyCode());
+		}
+		IPage<Reports> pages = reportsService.page(Condition.getPage(query),lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -132,9 +146,10 @@ public class ReportsController extends BladeController {
 						   @RequestParam(value = "reportCode", required = false) String reportCode,
 						   @RequestParam(value = "groupCode", required = false) String groupCode,
 						   @RequestParam(value = "corpIds", required = false) String corpIds,
-						   @RequestParam(value = "itemIds", required = false) String itemIds
+						   @RequestParam(value = "itemIds", required = false) String itemIds,
+						   @RequestParam(value = "type", required = false) String type
 	) {
-		return reportsService.getReportData(billId, reportCode, groupCode,corpIds,itemIds);
+		return reportsService.getReportData(billId, reportCode, groupCode, corpIds, itemIds, type);
 	}
 
 

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/IReportsService.java

@@ -50,5 +50,5 @@ public interface IReportsService extends IService<Reports> {
 	 * 获取模本数据加信息
 	 */
     R getReportData(String billId, String reportCode, String groupCode,String corpIds,
-					String itemIds);
+					String itemIds,String type);
 }

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

@@ -25,9 +25,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.los.basic.corps.entity.BCorps;
-import org.springblade.los.basic.corps.entity.BCorpsAttn;
 import org.springblade.los.basic.corps.entity.BCorpsBank;
-import org.springblade.los.basic.corps.service.IBCorpsAttnService;
 import org.springblade.los.basic.corps.service.IBCorpsBankService;
 import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.cur.entity.BCurrency;
@@ -36,6 +34,8 @@ import org.springblade.los.basic.reports.entity.Reports;
 import org.springblade.los.basic.reports.mapper.ReportsMapper;
 import org.springblade.los.basic.reports.service.IReportsService;
 import org.springblade.los.basic.reports.vo.ReportsVO;
+import org.springblade.los.business.amends.entity.Amends;
+import org.springblade.los.business.amends.service.IAmendsService;
 import org.springblade.los.business.sea.dto.ContainersReports;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.entity.Containers;
@@ -99,6 +99,8 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 
 	private final IBCorpsService bCorpsService;
 
+	private final IAmendsService amendsService;
+
 
 	@Override
 	public IPage<ReportsVO> selectReportsPage(IPage<ReportsVO> page, ReportsVO reports) {
@@ -130,14 +132,14 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 
 	@Override
 	public R getReportData(String billId, String reportCode, String groupCode, String corpIds,
-						   String itemIds) {
+						   String itemIds, String type) {
 		Map<String, Object> map = new HashMap<>();
 		BCurrency bCurrency = ibCurrencyService.getOne(new LambdaQueryWrapper<BCurrency>()
 			.eq(BCurrency::getStatus, 0)
 			.eq(BCurrency::getTenantId, AuthUtil.getTenantId())
 			.eq(BCurrency::getIsDeleted, 0)
 			.eq(BCurrency::getCode, "USD"));
-		if ("业务".equals(reportCode) && "销售报告".equals(groupCode)) {
+		if ("业务".equals(reportCode) && "销售报告".equals(groupCode) && ("HYCK".equals(type) || "HYJK".equals(type))) {
 			List<Bills> list = new ArrayList<>();
 			Bills bills = billsService.getById(billId);
 			if (bills != null) {
@@ -476,7 +478,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				}
 				map.put("data", list);
 			}
-		} else if ("业务".equals(reportCode) && "MASTER 提单".equals(groupCode)) {
+		} else if ("业务".equals(reportCode) && "MASTER 提单".equals(groupCode) && ("HYCK".equals(type) || "HYJK".equals(type))) {
 			Bills bills = billsService.getById(billId);
 			if (bills != null) {
 				bills.setFM("jms");
@@ -519,7 +521,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			} else {
 				map.put("data", null);
 			}
-		} else if ("单证".equals(reportCode) && "派车通知单".equals(groupCode)) {
+		} else if ("单证".equals(reportCode) && "派车通知单".equals(groupCode) && ("HYCK".equals(type) || "HYJK".equals(type))) {
 			Bills bills = billsService.getById(billId);
 			if (bills != null) {
 				bills.setFM("jms");
@@ -528,7 +530,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			} else {
 				map.put("data", null);
 			}
-		} else if ("单证".equals(reportCode) && "入货通知".equals(groupCode)) {
+		} else if ("单证".equals(reportCode) && "入货通知".equals(groupCode) && ("HYCK".equals(type) || "HYJK".equals(type))) {
 			Bills bills = billsService.getById(billId);
 			if (bills != null) {
 				bills.setFM("jms");
@@ -537,7 +539,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			} else {
 				map.put("data", null);
 			}
-		} else if ("费用".equals(reportCode) && "应收".equals(groupCode)) {
+		} else if ("费用".equals(reportCode) && "应收".equals(groupCode) && ("HYCK".equals(type) || "HYJK".equals(type))) {
 			Bills bills = billsService.getById(billId);
 			if (bills != null) {
 				bills.setFM("jms");
@@ -555,29 +557,19 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					}
 				}
 				ids.add(0, bills.getId());
+				LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getDc, "D")
+					.eq(FeeCenter::getIsDeleted, 0);
+				lambdaQueryWrapper.in(FeeCenter::getPid, ids);
 				if (ObjectUtils.isNotNull(corpIds)) {
-					feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-						.in(FeeCenter::getPid, ids)
-						.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-						.eq(FeeCenter::getDc, "D")
-						.eq(FeeCenter::getCorpId, corpIds)
-						.eq(FeeCenter::getIsDeleted, 0));
+					lambdaQueryWrapper.eq(FeeCenter::getCorpId, corpIds);
 				} else {
 					if (ObjectUtils.isNotNull(itemIds)) {
-						feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-							.in(FeeCenter::getPid, ids)
-							.eq(FeeCenter::getDc, "D")
-							.apply("find_in_set(id,'" + itemIds + "')")
-							.eq(FeeCenter::getIsDeleted, 0));
-					} else {
-						feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-							.in(FeeCenter::getPid, ids)
-							.eq(FeeCenter::getDc, "D")
-							.eq(FeeCenter::getIsDeleted, 0));
+						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
 					}
 				}
+				feeCenterList = feeCenterService.list(lambdaQueryWrapper);
 				BigDecimal amountDr = new BigDecimal("0.00");
 				BigDecimal amountCr = new BigDecimal("0.00");
 				BigDecimal amountProfit = new BigDecimal("0.00");
@@ -595,7 +587,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						} else if ("CNY".equals(item.getCurCode())) {
 							amountDr = amountDr.add(item.getAmount());
 						} else {
-							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(),item.getDc());
+							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc());
 							amountDrUsd = amountDrUsd.add(usd);
 						}
 					} else {
@@ -604,7 +596,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						} else if ("CNY".equals(item.getCurCode())) {
 							amountCr = amountCr.add(item.getAmount());
 						} else {
-							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(),item.getDc());
+							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc());
 							amountCrUsd = amountCrUsd.add(usd);
 						}
 					}
@@ -626,8 +618,8 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setFeeCenterList(feeCenterReportsList);
 				amountProfit = amountDr.subtract(amountCr);
 				amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-				amountDrLoc = amountDrLoc.add(ibCurrencyService.converterCny("USD", amountDrUsd,"D")).add(amountDr);
-				amountCrLoc = amountCrLoc.add(ibCurrencyService.converterCny("USD", amountCrUsd,"C")).add(amountCr);
+				amountDrLoc = amountDrLoc.add(ibCurrencyService.converterCny("USD", amountDrUsd, "D")).add(amountDr);
+				amountCrLoc = amountCrLoc.add(ibCurrencyService.converterCny("USD", amountCrUsd, "C")).add(amountCr);
 				amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 				bills.setAmountDr(amountDr);
 				bills.setAmountCr(amountCr);
@@ -652,7 +644,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			} else {
 				map.put("data", null);
 			}
-		} else if ("费用".equals(reportCode) && "应付".equals(groupCode)) {
+		} else if ("费用".equals(reportCode) && "应付".equals(groupCode) && ("HYCK".equals(type) || "HYJK".equals(type))) {
 			Bills bills = billsService.getById(billId);
 			if (bills != null) {
 				bills.setFM("jms");
@@ -670,29 +662,19 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					}
 				}
 				ids.add(0, bills.getId());
+				LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getDc, "C")
+					.eq(FeeCenter::getIsDeleted, 0);
+				lambdaQueryWrapper.in(FeeCenter::getPid, ids);
 				if (ObjectUtils.isNotNull(corpIds)) {
-					feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-						.in(FeeCenter::getPid, ids)
-						.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-						.eq(FeeCenter::getDc, "C")
-						.eq(FeeCenter::getCorpId, corpIds)
-						.eq(FeeCenter::getIsDeleted, 0));
+					lambdaQueryWrapper.eq(FeeCenter::getCorpId, corpIds);
 				} else {
 					if (ObjectUtils.isNotNull(itemIds)) {
-						feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-							.in(FeeCenter::getPid, ids)
-							.eq(FeeCenter::getDc, "C")
-							.apply("find_in_set(id,'" + itemIds + "')")
-							.eq(FeeCenter::getIsDeleted, 0));
-					} else {
-						feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-							.in(FeeCenter::getPid, ids)
-							.eq(FeeCenter::getDc, "C")
-							.eq(FeeCenter::getIsDeleted, 0));
+						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
 					}
 				}
+				feeCenterList = feeCenterService.list(lambdaQueryWrapper);
 				BigDecimal amountDr = new BigDecimal("0.00");
 				BigDecimal amountCr = new BigDecimal("0.00");
 				BigDecimal amountProfit = new BigDecimal("0.00");
@@ -710,7 +692,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						} else if ("CNY".equals(item.getCurCode())) {
 							amountDr = amountDr.add(item.getAmount());
 						} else {
-							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(),item.getDc());
+							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc());
 							amountDrUsd = amountDrUsd.add(usd);
 						}
 					} else {
@@ -719,7 +701,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						} else if ("CNY".equals(item.getCurCode())) {
 							amountCr = amountCr.add(item.getAmount());
 						} else {
-							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(),item.getDc());
+							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc());
 							amountCrUsd = amountCrUsd.add(usd);
 						}
 					}
@@ -741,8 +723,8 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setFeeCenterList(feeCenterReportsList);
 				amountProfit = amountDr.subtract(amountCr);
 				amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-				amountDrLoc = amountDrLoc.add(ibCurrencyService.converterCny("USD", amountDrUsd,"D")).add(amountDr);
-				amountCrLoc = amountCrLoc.add(ibCurrencyService.converterCny("USD", amountCrUsd,"C")).add(amountCr);
+				amountDrLoc = amountDrLoc.add(ibCurrencyService.converterCny("USD", amountDrUsd, "D")).add(amountDr);
+				amountCrLoc = amountCrLoc.add(ibCurrencyService.converterCny("USD", amountCrUsd, "C")).add(amountCr);
 				amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 				bills.setAmountDr(amountDr);
 				bills.setAmountCr(amountCr);
@@ -980,6 +962,686 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			} else {
 				map.put("data", null);
 			}
+		} else if ("费用".equals(reportCode) && "应付".equals(groupCode) && "AMEND".equals(type)) {
+			Bills bills = new Bills();
+			Amends amends = amendsService.getById(billId);
+			LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getDc, "C")
+				.eq(FeeCenter::getIsDeleted, 0);
+			if (amends != null) {
+				lambdaQueryWrapper.eq(FeeCenter::getPid, amends.getId());
+				if (ObjectUtils.isNotNull(corpIds)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCorpId, corpIds);
+				} else {
+					if (ObjectUtils.isNotNull(itemIds)) {
+						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
+					}
+				}
+				List<FeeCenter> feeCenterList = feeCenterService.list(lambdaQueryWrapper);
+				bills = billsService.getById(amends.getOrigId());
+				if (bills != null) {
+					bills.setFM("jms");
+					bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				} else {
+					BeanUtil.copyProperties(amends, bills);
+				}
+				BigDecimal amountDr = new BigDecimal("0.00");
+				BigDecimal amountCr = new BigDecimal("0.00");
+				BigDecimal amountProfit = new BigDecimal("0.00");
+				BigDecimal amountDrUsd = new BigDecimal("0.00");
+				BigDecimal amountCrUsd = new BigDecimal("0.00");
+				BigDecimal amountProfitUsd = new BigDecimal("0.00");
+				BigDecimal amountDrLoc = new BigDecimal("0.00");
+				BigDecimal amountCrLoc = new BigDecimal("0.00");
+				BigDecimal amountProfitLoc = new BigDecimal("0.00");
+				List<FeeCenterReports> feeCenterReportsList = new ArrayList<>();
+				for (FeeCenter item : feeCenterList) {
+					if ("D".equals(item.getDc())) {
+						if ("USD".equals(item.getCurCode())) {
+							amountDrUsd = amountDrUsd.add(item.getAmount());
+						} else if ("CNY".equals(item.getCurCode())) {
+							amountDr = amountDr.add(item.getAmount());
+						} else {
+							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc());
+							amountDrUsd = amountDrUsd.add(usd);
+						}
+					} else {
+						if ("USD".equals(item.getCurCode())) {
+							amountCrUsd = amountCrUsd.add(item.getAmount());
+						} else if ("CNY".equals(item.getCurCode())) {
+							amountCr = amountCr.add(item.getAmount());
+						} else {
+							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc());
+							amountCrUsd = amountCrUsd.add(usd);
+						}
+					}
+					FeeCenterReports feeCenterReports = new FeeCenterReports();
+					feeCenterReports.setPid(item.getPid());
+					feeCenterReports.setCorpCnName(item.getCorpCnName());
+					feeCenterReports.setBillCorpCnName(item.getBillCorpCnName());
+					feeCenterReports.setFeeCnName(item.getFeeCnName());
+					if ("CNY".equals(item.getCurCode())) {
+						feeCenterReports.setAmountC(item.getAmount());
+					} else {
+						feeCenterReports.setAmountUsdC(item.getAmount());
+					}
+					feeCenterReports.setAmountLocC(item.getAmountLoc());
+					feeCenterReports.setHblno(item.getHblno());
+					feeCenterReports.setAmount(item.getQuantity() + "*" + item.getAmount());
+					feeCenterReportsList.add(feeCenterReports);
+				}
+				bills.setFeeCenterList(feeCenterReportsList);
+				amountProfit = amountDr.subtract(amountCr);
+				amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
+				amountDrLoc = amountDrLoc.add(ibCurrencyService.converterCny("USD", amountDrUsd, "D")).add(amountDr);
+				amountCrLoc = amountCrLoc.add(ibCurrencyService.converterCny("USD", amountCrUsd, "C")).add(amountCr);
+				amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
+				bills.setAmountDr(amountDr);
+				bills.setAmountCr(amountCr);
+				bills.setAmountProfit(amountProfit);
+				bills.setAmountDrUsd(amountDrUsd);
+				bills.setAmountCrUsd(amountCrUsd);
+				bills.setAmountProfitUsd(amountProfitUsd);
+				bills.setAmountDrLoc(amountDrLoc);
+				bills.setAmountCrLoc(amountCrLoc);
+				bills.setAmountProfitLoc(amountProfitLoc);
+				map.put("data", bills);
+			} else {
+				map.put("data", null);
+			}
+		} else if ("费用".equals(reportCode) && "应收".equals(groupCode) && "AMEND".equals(type)) {
+			Bills bills = new Bills();
+			Amends amends = amendsService.getById(billId);
+			LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getDc, "D")
+				.eq(FeeCenter::getIsDeleted, 0);
+			if (amends != null) {
+				lambdaQueryWrapper.eq(FeeCenter::getPid, amends.getId());
+				if (ObjectUtils.isNotNull(corpIds)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCorpId, corpIds);
+				} else {
+					if (ObjectUtils.isNotNull(itemIds)) {
+						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
+					}
+				}
+				List<FeeCenter> feeCenterList = feeCenterService.list(lambdaQueryWrapper);
+				bills = billsService.getById(amends.getOrigId());
+				if (bills != null) {
+					bills.setFM("jms");
+					bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				} else {
+					BeanUtil.copyProperties(amends, bills);
+				}
+				BigDecimal amountDr = new BigDecimal("0.00");
+				BigDecimal amountCr = new BigDecimal("0.00");
+				BigDecimal amountProfit = new BigDecimal("0.00");
+				BigDecimal amountDrUsd = new BigDecimal("0.00");
+				BigDecimal amountCrUsd = new BigDecimal("0.00");
+				BigDecimal amountProfitUsd = new BigDecimal("0.00");
+				BigDecimal amountDrLoc = new BigDecimal("0.00");
+				BigDecimal amountCrLoc = new BigDecimal("0.00");
+				BigDecimal amountProfitLoc = new BigDecimal("0.00");
+				List<FeeCenterReports> feeCenterReportsList = new ArrayList<>();
+				for (FeeCenter item : feeCenterList) {
+					if ("D".equals(item.getDc())) {
+						if ("USD".equals(item.getCurCode())) {
+							amountDrUsd = amountDrUsd.add(item.getAmount());
+						} else if ("CNY".equals(item.getCurCode())) {
+							amountDr = amountDr.add(item.getAmount());
+						} else {
+							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc());
+							amountDrUsd = amountDrUsd.add(usd);
+						}
+					} else {
+						if ("USD".equals(item.getCurCode())) {
+							amountCrUsd = amountCrUsd.add(item.getAmount());
+						} else if ("CNY".equals(item.getCurCode())) {
+							amountCr = amountCr.add(item.getAmount());
+						} else {
+							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc());
+							amountCrUsd = amountCrUsd.add(usd);
+						}
+					}
+					FeeCenterReports feeCenterReports = new FeeCenterReports();
+					feeCenterReports.setPid(item.getPid());
+					feeCenterReports.setCorpCnName(item.getCorpCnName());
+					feeCenterReports.setBillCorpCnName(item.getBillCorpCnName());
+					feeCenterReports.setFeeCnName(item.getFeeCnName());
+					if ("CNY".equals(item.getCurCode())) {
+						feeCenterReports.setAmountC(item.getAmount());
+					} else {
+						feeCenterReports.setAmountUsdC(item.getAmount());
+					}
+					feeCenterReports.setAmountLocC(item.getAmountLoc());
+					feeCenterReports.setHblno(item.getHblno());
+					feeCenterReports.setAmount(item.getQuantity() + "*" + item.getAmount());
+					feeCenterReportsList.add(feeCenterReports);
+				}
+				bills.setFeeCenterList(feeCenterReportsList);
+				amountProfit = amountDr.subtract(amountCr);
+				amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
+				amountDrLoc = amountDrLoc.add(ibCurrencyService.converterCny("USD", amountDrUsd, "D")).add(amountDr);
+				amountCrLoc = amountCrLoc.add(ibCurrencyService.converterCny("USD", amountCrUsd, "C")).add(amountCr);
+				amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
+				bills.setAmountDr(amountDr);
+				bills.setAmountCr(amountCr);
+				bills.setAmountProfit(amountProfit);
+				bills.setAmountDrUsd(amountDrUsd);
+				bills.setAmountCrUsd(amountCrUsd);
+				bills.setAmountProfitUsd(amountProfitUsd);
+				bills.setAmountDrLoc(amountDrLoc);
+				bills.setAmountCrLoc(amountCrLoc);
+				bills.setAmountProfitLoc(amountProfitLoc);
+				map.put("data", bills);
+			} else {
+				map.put("data", null);
+			}
+		} else if ("AMEND".equals(reportCode) && "SE".equals(groupCode) && "AMEND".equals(type)) {
+			List<Bills> list = new ArrayList<>();
+			Amends amends = amendsService.getById(billId);
+			if (amends != null) {
+				List<Amends> amendsList = amendsService.list(new LambdaQueryWrapper<Amends>()
+					.eq(Amends::getOrigId, amends.getOrigId())
+					.eq(Amends::getStatus, 3)
+					.eq(Amends::getIsDeleted, 0)
+					.eq(Amends::getTenantId, AuthUtil.getTenantId()));
+				List<Long> amendsIds = amendsList.stream().map(Amends::getId).collect(Collectors.toList());
+				if (amendsIds.size() > 0) {
+					amendsIds.add(amends.getId());
+				} else {
+					amendsIds = new ArrayList<>();
+					amendsIds.add(amends.getId());
+				}
+				List<FeeCenter> amendFeeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.in(FeeCenter::getPid, amendsIds)
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0));
+				List<Long> srcItemId = amendFeeCenterList.stream().map(FeeCenter::getAmendSrcItemId).collect(Collectors.toList());
+				List<FeeCenter> amendSrcFeeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.in(FeeCenter::getId, srcItemId)
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0));
+				Bills bills = billsService.getById(amends.getOrigId());
+				if (bills != null) {
+					if (bCurrency != null) {
+						bills.setRate(bCurrency.getExrate());
+					} else {
+						bills.setRate(new BigDecimal("0.00"));
+					}
+					if ("MM".equals(bills.getBillType()) || "DD".equals(bills.getBillType())) {
+						BigDecimal amountDr = new BigDecimal("0.00");
+						BigDecimal amountCr = new BigDecimal("0.00");
+						BigDecimal amountDrUsd = new BigDecimal("0.00");
+						BigDecimal amountCrUsd = new BigDecimal("0.00");
+						BigDecimal amountDrUpdate = new BigDecimal("0.00");
+						BigDecimal amountCrUpdate = new BigDecimal("0.00");
+						BigDecimal amountDrUsdUpdate = new BigDecimal("0.00");
+						BigDecimal amountCrUsdUpdate = new BigDecimal("0.00");
+						if (amendFeeCenterList.size() > 0) {
+							amountDr = amendFeeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "CNY".equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							amountCr = amendFeeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "CNY".equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							amountDrUsd = amendFeeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "USD".equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							amountCrUsd = amendFeeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "USD".equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+						}
+						if (amendSrcFeeCenterList.size() > 0) {
+							amountDrUpdate = amendSrcFeeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "CNY".equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							amountCrUpdate = amendSrcFeeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "CNY".equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							amountDrUsdUpdate = amendSrcFeeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "USD".equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							amountCrUsdUpdate = amendSrcFeeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "USD".equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+						}
+						bills.setAmount(amountDr.subtract(amountCr));
+						bills.setAmountUpdate(amountDrUpdate.subtract(amountCrUpdate));
+						bills.setAmountUsd(amountDrUsd.subtract(amountCrUsd));
+						bills.setAmountUsdUpdate(amountDrUsdUpdate.subtract(amountCrUsdUpdate));
+						bills.setAmountTotal(bills.getAmount().add(ibCurrencyService.converterCny("USD", bills.getAmountUsd(), "D")));
+						bills.setAmountTotalUpdate(bills.getAmountUpdate().add(ibCurrencyService.converterCny("USD", bills.getAmountUsdUpdate(), "D")));
+						bills.setResponsibleParty(amends.getResponsibleParty());
+						BigDecimal amountDrUsdCny = ibCurrencyService.converterCny("USD", amountDrUsd, "D");
+						BigDecimal amountCrUsdCny = ibCurrencyService.converterCny("USD", amountCrUsd, "C");
+						bills.setAmountProfitLoc(bills.getAmountProfitLoc().add(amountDr.subtract(amountCr)).add(amountDrUsdCny.subtract(amountCrUsdCny)));
+						bills.setAmountDrLoc(bills.getAmountDrLoc().add(amountDr).add(ibCurrencyService.converterCny("USD", amountDrUsd, "D")));
+						if (ObjectUtils.isNotNull(bills.getAmountProfitLoc()) && ObjectUtils.isNotNull(bills.getAmountDrLoc())) {
+							if (bills.getAmountProfitLoc().compareTo(new BigDecimal("0.00")) == 0 ||
+								bills.getAmountDrLoc().compareTo(new BigDecimal("0.00")) == 0) {
+								bills.setGrossMargin(new BigDecimal("0.00"));
+							} else {
+								bills.setGrossMargin(bills.getAmountProfitLoc().divide(bills.getAmountDrLoc(), 4, BigDecimal.ROUND_HALF_UP));
+							}
+						} else {
+							bills.setGrossMargin(new BigDecimal("0.00"));
+						}
+						List<Bills> billsList = billsService.list(new LambdaQueryWrapper<Bills>()
+							.eq(Bills::getMasterId, bills.getId())
+							.eq(Bills::getTenantId, AuthUtil.getTenantId())
+							.eq(Bills::getIsDeleted, 0));
+						if (billsList.size() > 0) {
+							List<Long> ids = billsList.stream().map(Bills::getId).filter(Objects::nonNull).collect(Collectors.toList());
+							if (ids.size() > 0) {
+								List<FeeCenter> feeCenterListMh = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+									.in(FeeCenter::getPid, ids)
+									.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+									.eq(FeeCenter::getIsDeleted, 0));
+								for (Bills item : billsList) {
+									if (ids.contains(amends.getOrigId())) {
+										List<FeeCenter> amendFeeCenterMm = amendFeeCenterList.stream().filter(e -> e.getPid().equals(amends.getId())).collect(Collectors.toList());
+										for (FeeCenter feeCenter : amendFeeCenterMm) {
+											feeCenter.setReportType("1");
+										}
+										feeCenterListMh.addAll(amendFeeCenterMm);
+									} else {
+										List<Amends> amend = amendsList.stream().filter(e -> e.getOrigId().equals(item.getId())).collect(Collectors.toList());
+										List<Long> amendIds = amend.stream().map(Amends::getId).collect(Collectors.toList());
+										List<FeeCenter> amendFeeCenterMh = amendFeeCenterList.stream().filter(e -> amendIds.contains(e.getPid())).collect(Collectors.toList());
+										feeCenterListMh.addAll(amendFeeCenterMh);
+									}
+									List<FeeCenter> feeCenterList = feeCenterListMh.stream()
+										.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+											Comparator.comparing(f -> f.getFeeId() + f.getCorpId() + f.getCurCode()))), ArrayList::new));
+									List<FeeCenterReports> feeCenterReportList = new ArrayList<>();
+									for (FeeCenter fee : feeCenterList) {
+										FeeCenterReports feeCenterReports = new FeeCenterReports();
+										feeCenterReports.setPid(item.getId());
+										feeCenterReports.setFeeCnName(fee.getFeeCnName());
+										feeCenterReports.setDc(fee.getDc());
+										List<FeeCenter> feeCenterListD = feeCenterListMh.stream()
+											.filter(e -> "D".equals(e.getDc()) && e.getPid().equals(item.getId()) &&
+												e.getFeeId().equals(fee.getFeeId()) && "CNY".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+												e.getCorpId().equals(fee.getCorpId()))
+											.collect(Collectors.toList());
+										if (feeCenterListD.size() > 0) {
+											feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
+											feeCenterReports.setAmountD(feeCenterListD.stream().map(FeeCenter::getAmount)
+												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+											feeCenterReports.setAmountLocD(feeCenterListD.stream().map(FeeCenter::getAmountLoc)
+												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+										}
+										List<FeeCenter> feeCenterListUsdD = feeCenterListMh.stream()
+											.filter(e -> "D".equals(e.getDc()) && e.getPid().equals(item.getId()) &&
+												e.getFeeId().equals(fee.getFeeId()) && "USD".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+												e.getCorpId().equals(fee.getCorpId()))
+											.collect(Collectors.toList());
+										if (feeCenterListUsdD.size() > 0) {
+											feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
+											feeCenterReports.setAmountUsdD(feeCenterListUsdD.stream().map(FeeCenter::getAmount)
+												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+											feeCenterReports.setAmountLocD(feeCenterListUsdD.stream().map(FeeCenter::getAmountLoc)
+												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+										}
+										List<FeeCenter> feeCenterListC = feeCenterListMh.stream()
+											.filter(e -> "C".equals(e.getDc()) && e.getPid().equals(item.getId()) &&
+												e.getFeeId().equals(fee.getFeeId()) && "CNY".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+												e.getCorpId().equals(fee.getCorpId()))
+											.collect(Collectors.toList());
+										if (feeCenterListC.size() > 0) {
+											feeCenterReports.setCorpCnName(fee.getCorpCnName());
+											feeCenterReports.setAmountC(feeCenterListC.stream().map(FeeCenter::getAmount)
+												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+											feeCenterReports.setAmountLocC(feeCenterListC.stream().map(FeeCenter::getAmountLoc)
+												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+										}
+										List<FeeCenter> feeCenterListUsdC = feeCenterListMh.stream()
+											.filter(e -> "C".equals(e.getDc()) && e.getPid().equals(item.getId()) &&
+												e.getFeeId().equals(fee.getFeeId()) && "USD".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+												e.getCorpId().equals(fee.getCorpId()))
+											.collect(Collectors.toList());
+										if (feeCenterListUsdC.size() > 0) {
+											feeCenterReports.setCorpCnName(fee.getCorpCnName());
+											feeCenterReports.setAmountUsdC(feeCenterListUsdC.stream().map(FeeCenter::getAmount)
+												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+											feeCenterReports.setAmountLocC(feeCenterListUsdC.stream().map(FeeCenter::getAmountLoc)
+												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+										}
+										feeCenterReportList.add(feeCenterReports);
+									}
+									item.setFeeCenterList(feeCenterReportList);
+									list.add(item);
+								}
+							}
+						}
+						List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+							.eq(FeeCenter::getPid, bills.getId())
+							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+							.eq(FeeCenter::getIsDeleted, 0));
+						if (bills.getId().equals(amends.getOrigId())) {
+							List<FeeCenter> amendFeeCenterMm = amendFeeCenterList.stream().filter(e -> e.getPid().equals(amends.getId())).collect(Collectors.toList());
+							for (FeeCenter feeCenter : amendFeeCenterMm) {
+								feeCenter.setReportType("1");
+							}
+							feeCenterList.addAll(amendFeeCenterMm);
+						} else {
+							List<Amends> amend = amendsList.stream().filter(e -> e.getOrigId().equals(bills.getId())).collect(Collectors.toList());
+							List<Long> amendIds = amend.stream().map(Amends::getId).collect(Collectors.toList());
+							List<FeeCenter> amendFeeCenterMh = amendFeeCenterList.stream().filter(e -> amendIds.contains(e.getPid())).collect(Collectors.toList());
+							feeCenterList.addAll(amendFeeCenterMh);
+						}
+						if (feeCenterList.size() > 0) {
+							List<FeeCenter> feeCenters = feeCenterList.stream()
+								.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+									Comparator.comparing(f -> f.getFeeId() + f.getCorpId() + f.getCurCode()))), ArrayList::new));
+							List<FeeCenterReports> feeCenterReportList = new ArrayList<>();
+							for (FeeCenter fee : feeCenters) {
+								FeeCenterReports feeCenterReports = new FeeCenterReports();
+								feeCenterReports.setPid(bills.getId());
+								feeCenterReports.setFeeCnName(fee.getFeeCnName());
+								feeCenterReports.setDc(fee.getDc());
+								feeCenterReports.setReportType(fee.getReportType());
+								List<FeeCenter> feeCenterListD = feeCenterList.stream()
+									.filter(e -> "D".equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && "CNY".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+										e.getCorpId().equals(fee.getCorpId()))
+									.collect(Collectors.toList());
+								if (feeCenterListD.size() > 0) {
+									feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
+									feeCenterReports.setAmountD(feeCenterListD.stream().map(FeeCenter::getAmount)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									feeCenterReports.setAmountLocD(feeCenterListD.stream().map(FeeCenter::getAmountLoc)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+								}
+								List<FeeCenter> feeCenterListUsdD = feeCenterList.stream()
+									.filter(e -> "D".equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && "USD".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+										e.getCorpId().equals(fee.getCorpId()))
+									.collect(Collectors.toList());
+								if (feeCenterListUsdD.size() > 0) {
+									feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
+									feeCenterReports.setAmountUsdD(feeCenterListUsdD.stream().map(FeeCenter::getAmount)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									feeCenterReports.setAmountLocD(feeCenterListUsdD.stream().map(FeeCenter::getAmountLoc)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+								}
+								List<FeeCenter> feeCenterListC = feeCenterList.stream()
+									.filter(e -> "C".equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && "CNY".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+										e.getCorpId().equals(fee.getCorpId()))
+									.collect(Collectors.toList());
+								if (feeCenterListC.size() > 0) {
+									feeCenterReports.setCorpCnName(fee.getCorpCnName());
+									feeCenterReports.setAmountC(feeCenterListC.stream().map(FeeCenter::getAmount)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									feeCenterReports.setAmountLocC(feeCenterListC.stream().map(FeeCenter::getAmountLoc)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+								}
+								List<FeeCenter> feeCenterListUsdC = feeCenterList.stream()
+									.filter(e -> "C".equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && "USD".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+										e.getCorpId().equals(fee.getCorpId()))
+									.collect(Collectors.toList());
+								if (feeCenterListUsdC.size() > 0) {
+									feeCenterReports.setCorpCnName(fee.getCorpCnName());
+									feeCenterReports.setAmountUsdC(feeCenterListUsdC.stream().map(FeeCenter::getAmount)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									feeCenterReports.setAmountLocC(feeCenterListUsdC.stream().map(FeeCenter::getAmountLoc)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+								}
+								feeCenterReportList.add(feeCenterReports);
+							}
+							bills.setFeeCenterList(feeCenterReportList);
+						}
+						list.add(0, bills);
+					} else if ("MH".equals(bills.getBillType())) {
+						Bills details = billsService.getOne(new LambdaQueryWrapper<Bills>()
+							.eq(Bills::getId, bills.getMasterId())
+							.eq(Bills::getTenantId, AuthUtil.getTenantId())
+							.eq(Bills::getIsDeleted, 0));
+						if (details != null) {
+							BigDecimal amountDr = new BigDecimal("0.00");
+							BigDecimal amountCr = new BigDecimal("0.00");
+							BigDecimal amountDrUsd = new BigDecimal("0.00");
+							BigDecimal amountCrUsd = new BigDecimal("0.00");
+							BigDecimal amountDrUpdate = new BigDecimal("0.00");
+							BigDecimal amountCrUpdate = new BigDecimal("0.00");
+							BigDecimal amountDrUsdUpdate = new BigDecimal("0.00");
+							BigDecimal amountCrUsdUpdate = new BigDecimal("0.00");
+							if (amendFeeCenterList.size() > 0) {
+								amountDr = amendFeeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "CNY".equals(e.getCurCode()))
+									.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+								amountCr = amendFeeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "CNY".equals(e.getCurCode()))
+									.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+								amountDrUsd = amendFeeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "USD".equals(e.getCurCode()))
+									.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+								amountCrUsd = amendFeeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "USD".equals(e.getCurCode()))
+									.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							}
+							if (amendSrcFeeCenterList.size() > 0) {
+								amountDrUpdate = amendSrcFeeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "CNY".equals(e.getCurCode()))
+									.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+								amountCrUpdate = amendSrcFeeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "CNY".equals(e.getCurCode()))
+									.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+								amountDrUsdUpdate = amendSrcFeeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "USD".equals(e.getCurCode()))
+									.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+								amountCrUsdUpdate = amendSrcFeeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "USD".equals(e.getCurCode()))
+									.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							}
+							details.setAmount(amountDr.subtract(amountCr));
+							details.setAmountUpdate(amountDrUpdate.subtract(amountCrUpdate));
+							details.setAmountUsd(amountDrUsd.subtract(amountCrUsd));
+							details.setAmountUsdUpdate(amountDrUsdUpdate.subtract(amountCrUsdUpdate));
+							details.setAmountTotal(details.getAmount().add(ibCurrencyService.converterCny("USD", details.getAmountUsd(), "D")));
+							details.setAmountTotalUpdate(details.getAmountUpdate().add(ibCurrencyService.converterCny("USD", details.getAmountUsdUpdate(), "D")));
+							details.setResponsibleParty(amends.getResponsibleParty());
+							BigDecimal amountDrUsdCny = ibCurrencyService.converterCny("USD", amountDrUsd, "D");
+							BigDecimal amountCrUsdCny = ibCurrencyService.converterCny("USD", amountCrUsd, "C");
+							details.setAmountProfitLoc(details.getAmountProfitLoc().add(amountDr.subtract(amountCr)).add(amountDrUsdCny.subtract(amountCrUsdCny)));
+							details.setAmountDrLoc(details.getAmountDrLoc().add(amountDr).add(ibCurrencyService.converterCny("USD", amountDrUsd, "D")));
+							if (ObjectUtils.isNotNull(details.getAmountProfitLoc()) && ObjectUtils.isNotNull(details.getAmountDrLoc())) {
+								if (details.getAmountProfitLoc().compareTo(new BigDecimal("0.00")) == 0 ||
+									details.getAmountDrLoc().compareTo(new BigDecimal("0.00")) == 0) {
+									details.setGrossMargin(new BigDecimal("0.00"));
+								} else {
+									details.setGrossMargin(details.getAmountProfitLoc().divide(details.getAmountDrLoc(), 4, BigDecimal.ROUND_HALF_UP));
+								}
+							} else {
+								details.setGrossMargin(new BigDecimal("0.00"));
+							}
+							List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+								.eq(FeeCenter::getPid, bills.getId())
+								.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+								.eq(FeeCenter::getIsDeleted, 0));
+							if (bills.getId().equals(amends.getOrigId())) {
+								List<FeeCenter> amendFeeCenterMm = amendFeeCenterList.stream().filter(e -> e.getPid().equals(amends.getId())).collect(Collectors.toList());
+								for (FeeCenter feeCenter : amendFeeCenterMm) {
+									feeCenter.setReportType("1");
+								}
+								feeCenterList.addAll(amendFeeCenterMm);
+							} else {
+								List<Amends> amend = amendsList.stream().filter(e -> e.getOrigId().equals(bills.getId())).collect(Collectors.toList());
+								List<Long> amendIds = amend.stream().map(Amends::getId).collect(Collectors.toList());
+								List<FeeCenter> amendFeeCenterMh = amendFeeCenterList.stream().filter(e -> amendIds.contains(e.getPid())).collect(Collectors.toList());
+								feeCenterList.addAll(amendFeeCenterMh);
+							}
+							if (feeCenterList.size() > 0) {
+								List<FeeCenter> feeCenters = feeCenterList.stream()
+									.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+										Comparator.comparing(f -> f.getFeeId() + f.getCorpId() + f.getCurCode()))), ArrayList::new));
+								List<FeeCenterReports> feeCenterReportList = new ArrayList<>();
+								for (FeeCenter fee : feeCenters) {
+									FeeCenterReports feeCenterReports = new FeeCenterReports();
+									feeCenterReports.setPid(bills.getId());
+									feeCenterReports.setFeeCnName(fee.getFeeCnName());
+									feeCenterReports.setDc(fee.getDc());
+									feeCenterReports.setReportType(fee.getReportType());
+									List<FeeCenter> feeCenterListD = feeCenterList.stream()
+										.filter(e -> "D".equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+											e.getFeeId().equals(fee.getFeeId()) && "CNY".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+											e.getCorpId().equals(fee.getCorpId()))
+										.collect(Collectors.toList());
+									if (feeCenterListD.size() > 0) {
+										feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
+										feeCenterReports.setAmountD(feeCenterListD.stream().map(FeeCenter::getAmount)
+											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+										feeCenterReports.setAmountLocD(feeCenterListD.stream().map(FeeCenter::getAmountLoc)
+											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									}
+									List<FeeCenter> feeCenterListUsdD = feeCenterList.stream()
+										.filter(e -> "D".equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+											e.getFeeId().equals(fee.getFeeId()) && "USD".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+											e.getCorpId().equals(fee.getCorpId()))
+										.collect(Collectors.toList());
+									if (feeCenterListUsdD.size() > 0) {
+										feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
+										feeCenterReports.setAmountUsdD(feeCenterListUsdD.stream().map(FeeCenter::getAmount)
+											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+										feeCenterReports.setAmountLocD(feeCenterListUsdD.stream().map(FeeCenter::getAmountLoc)
+											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									}
+									List<FeeCenter> feeCenterListC = feeCenterList.stream()
+										.filter(e -> "C".equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+											e.getFeeId().equals(fee.getFeeId()) && "CNY".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+											e.getCorpId().equals(fee.getCorpId()))
+										.collect(Collectors.toList());
+									if (feeCenterListC.size() > 0) {
+										feeCenterReports.setCorpCnName(fee.getCorpCnName());
+										feeCenterReports.setAmountC(feeCenterListC.stream().map(FeeCenter::getAmount)
+											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+										feeCenterReports.setAmountLocC(feeCenterListC.stream().map(FeeCenter::getAmountLoc)
+											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									}
+									List<FeeCenter> feeCenterListUsdC = feeCenterList.stream()
+										.filter(e -> "C".equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+											e.getFeeId().equals(fee.getFeeId()) && "USD".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+											e.getCorpId().equals(fee.getCorpId()))
+										.collect(Collectors.toList());
+									if (feeCenterListUsdC.size() > 0) {
+										feeCenterReports.setCorpCnName(fee.getCorpCnName());
+										feeCenterReports.setAmountUsdC(feeCenterListUsdC.stream().map(FeeCenter::getAmount)
+											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+										feeCenterReports.setAmountLocC(feeCenterListUsdC.stream().map(FeeCenter::getAmountLoc)
+											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									}
+									feeCenterReportList.add(feeCenterReports);
+								}
+								bills.setFeeCenterList(feeCenterReportList);
+							}
+							list.add(bills);
+							List<FeeCenter> feeCenterListMh = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+								.eq(FeeCenter::getPid, details.getId())
+								.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+								.eq(FeeCenter::getIsDeleted, 0));
+							if (details.getId().equals(amends.getOrigId())) {
+								List<FeeCenter> amendFeeCenterMm = amendFeeCenterList.stream().filter(e -> e.getPid().equals(amends.getId())).collect(Collectors.toList());
+								for (FeeCenter feeCenter : amendFeeCenterMm) {
+									feeCenter.setReportType("1");
+								}
+								feeCenterListMh.addAll(amendFeeCenterMm);
+							} else {
+								List<Amends> amend = amendsList.stream().filter(e -> e.getOrigId().equals(details.getId())).collect(Collectors.toList());
+								List<Long> amendIds = amend.stream().map(Amends::getId).collect(Collectors.toList());
+								List<FeeCenter> amendFeeCenterMh = amendFeeCenterList.stream().filter(e -> amendIds.contains(e.getPid())).collect(Collectors.toList());
+								feeCenterListMh.addAll(amendFeeCenterMh);
+							}
+							List<FeeCenter> feeCenterList1 = feeCenterListMh.stream()
+								.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+									Comparator.comparing(f -> f.getFeeId() + f.getCorpId() + f.getCurCode()))), ArrayList::new));
+							List<FeeCenterReports> feeCenterReportList = new ArrayList<>();
+							for (FeeCenter fee : feeCenterList1) {
+								FeeCenterReports feeCenterReports = new FeeCenterReports();
+								feeCenterReports.setPid(details.getId());
+								feeCenterReports.setFeeCnName(fee.getFeeCnName());
+								feeCenterReports.setDc(fee.getDc());
+								feeCenterReports.setReportType(fee.getReportType());
+								List<FeeCenter> feeCenterListD = feeCenterListMh.stream()
+									.filter(e -> "D".equals(e.getDc()) && e.getPid().equals(details.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && "CNY".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+										e.getCorpId().equals(fee.getCorpId()))
+									.collect(Collectors.toList());
+								if (feeCenterListD.size() > 0) {
+									feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
+									feeCenterReports.setAmountD(feeCenterListD.stream().map(FeeCenter::getAmount)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									feeCenterReports.setAmountLocD(feeCenterListD.stream().map(FeeCenter::getAmountLoc)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+								}
+								List<FeeCenter> feeCenterListUsdD = feeCenterListMh.stream()
+									.filter(e -> "D".equals(e.getDc()) && e.getPid().equals(details.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && "USD".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+										e.getCorpId().equals(fee.getCorpId()))
+									.collect(Collectors.toList());
+								if (feeCenterListUsdD.size() > 0) {
+									feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
+									feeCenterReports.setAmountUsdD(feeCenterListUsdD.stream().map(FeeCenter::getAmount)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									feeCenterReports.setAmountLocD(feeCenterListUsdD.stream().map(FeeCenter::getAmountLoc)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+								}
+								List<FeeCenter> feeCenterListC = feeCenterListMh.stream()
+									.filter(e -> "C".equals(e.getDc()) && e.getPid().equals(details.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && "CNY".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+										e.getCorpId().equals(fee.getCorpId()))
+									.collect(Collectors.toList());
+								if (feeCenterListC.size() > 0) {
+									feeCenterReports.setCorpCnName(fee.getCorpCnName());
+									feeCenterReports.setAmountC(feeCenterListC.stream().map(FeeCenter::getAmount)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									feeCenterReports.setAmountLocC(feeCenterListC.stream().map(FeeCenter::getAmountLoc)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+								}
+								List<FeeCenter> feeCenterListUsdC = feeCenterListMh.stream()
+									.filter(e -> "C".equals(e.getDc()) && e.getPid().equals(details.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && "USD".equals(e.getCurCode()) && fee.getCurCode().equals(e.getCurCode()) &&
+										e.getCorpId().equals(fee.getCorpId()))
+									.collect(Collectors.toList());
+								if (feeCenterListUsdC.size() > 0) {
+									feeCenterReports.setCorpCnName(fee.getCorpCnName());
+									feeCenterReports.setAmountUsdC(feeCenterListUsdC.stream().map(FeeCenter::getAmount)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+									feeCenterReports.setAmountLocC(feeCenterListUsdC.stream().map(FeeCenter::getAmountLoc)
+										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+								}
+								feeCenterReportList.add(feeCenterReports);
+							}
+							details.setFeeCenterList(feeCenterReportList);
+							list.add(0, details);
+						}
+					}
+					if (list.size() > 0) {
+						for (Bills item : list) {
+							List<FeeCenterReports> feeCenterReports = new ArrayList<>();
+							List<FeeCenterReports> feeCenters = item.getFeeCenterList().stream()
+								.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+									Comparator.comparing(FeeCenterReports::getFeeCnName))), ArrayList::new));
+							for (FeeCenterReports fee : feeCenters) {
+								FeeCenterReports feeCenterReportsD = item.getFeeCenterList().stream()
+									.filter(e -> e.getFeeCnName().equals(fee.getFeeCnName()) && "D".equals(e.getDc()))
+									.findFirst().orElse(null);
+								FeeCenterReports feeCenterReportsC = item.getFeeCenterList().stream()
+									.filter(e -> e.getFeeCnName().equals(fee.getFeeCnName()) && "C".equals(e.getDc()))
+									.findFirst().orElse(null);
+								FeeCenterReports feeCenterReports1 = new FeeCenterReports();
+								feeCenterReports1.setFeeCnName(fee.getFeeCnName());
+								feeCenterReports1.setHblno(fee.getHblno());
+								feeCenterReports1.setPid(fee.getPid());
+								if (feeCenterReportsD != null) {
+									feeCenterReports1.setBillCorpCnName(feeCenterReportsD.getBillCorpCnName());
+									feeCenterReports1.setAmountD(feeCenterReportsD.getAmountD());
+									feeCenterReports1.setAmountLocD(feeCenterReportsD.getAmountLocD());
+									feeCenterReports1.setAmountUsdD(feeCenterReportsD.getAmountUsdD());
+								}
+								if (feeCenterReportsC != null) {
+									feeCenterReports1.setCorpCnName(feeCenterReportsC.getCorpCnName());
+									feeCenterReports1.setAmountC(feeCenterReportsC.getAmountC());
+									feeCenterReports1.setAmountLocC(feeCenterReportsC.getAmountLocC());
+									feeCenterReports1.setAmountUsdC(feeCenterReportsC.getAmountUsdC());
+								}
+								feeCenterReports.add(feeCenterReports1);
+							}
+							item.setFeeCenterList(feeCenterReports);
+						}
+					}
+					map.put("data", list);
+				}
+			} else {
+				map.put("data", list);
+			}
 		}
 		return R.data(map);
 	}

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

@@ -83,7 +83,7 @@ public class BillsController extends BladeController {
 			Bills::getAmountDrLoc, Bills::getAmountCrLoc, Bills::getAmountProfitLoc, Bills::getCheckCrStatusDescr, Bills::getCheckDrStatusDescr,
 			Bills::getStlCrStatusDescr, Bills::getStlDrStatusDescr, Bills::getInvoiceCrStatusDescr, Bills::getInvoiceDrStatusDescr, Bills::getCreateUserName,
 			Bills::getCreateTime, Bills::getUpdateUserName, Bills::getUpdateTime, Bills::getStatus, Bills::getBillStatus,
-			Bills::getAccountStatus, Bills::getRemarks,Bills::getPackingUnit,Bills::getBillDate);
+			Bills::getAccountStatus, Bills::getRemarks, Bills::getPackingUnit, Bills::getBillDate);
 		lambdaQueryWrapper.eq(Bills::getIsDeleted, 0)
 			.eq(Bills::getTenantId, AuthUtil.getTenantId())
 			.and(i -> i.isNull(Bills::getMasterId).or()

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterController.java

@@ -235,8 +235,8 @@ public class FeeCenterController extends BladeController {
 	 */
 	@GetMapping("/getFeeCenterCorpIds")
 	@ApiOperationSupport(order = 2)
-	public R<List<BCorps>> getFeeCenterCorpIds(@RequestParam("billId") Long billId,@RequestParam("dc") String dc) {
-		return R.data(feeCenterService.getFeeCenterCorpIds(billId,dc));
+	public R<List<BCorps>> getFeeCenterCorpIds(@RequestParam("billId") Long billId,@RequestParam("dc") String dc,@RequestParam("type") String type) {
+		return R.data(feeCenterService.getFeeCenterCorpIds(billId,dc,type));
 	}
 
 

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

@@ -126,7 +126,7 @@ public class FinAccBillsController extends BladeController {
 		lambdaQueryWrapper.le(ObjectUtils.isNotNull(finAccBills.getApprovedDateEnd()), FinAccBills::getApprovedDate, finAccBills.getApprovedDateEnd());
 		lambdaQueryWrapper.orderByDesc(FinAccBills::getCreateTime);
 		IPage<FinAccBills> pages = finAccBillsService.page(Condition.getPage(query), lambdaQueryWrapper);
-		String accBillNo = "";
+		/*String accBillNo = "";
 		if (pages.getRecords().size() > 0) {
 			accBillNo = pages.getRecords().stream().map(FinAccBills::getBillNo).distinct().collect(Collectors.joining(","));
 		}
@@ -134,8 +134,8 @@ public class FinAccBillsController extends BladeController {
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getAccStatus, 1)
-			.apply("find_in_set(acc_bill_no,'" + accBillNo + "')"));
-		for (FinAccBills item : pages.getRecords()) {
+			.apply("find_in_set(acc_bill_no,'" + accBillNo + "')"));*/
+		/*for (FinAccBills item : pages.getRecords()) {
 			if (feeCenterList.size() > 0) {
 				BigDecimal uninvoicedAmount = new BigDecimal("0.00");
 				BigDecimal uninvoicedAmountUsd = new BigDecimal("0.00");
@@ -168,7 +168,7 @@ public class FinAccBillsController extends BladeController {
 					.filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				item.setAppliedInvoiceAmountUsd(appliedInvoiceAmountUsd);
 			}
-		}
+		}*/
 		return R.data(pages);
 	}
 

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterService.java

@@ -77,5 +77,5 @@ public interface IFeeCenterService extends IService<FeeCenter> {
 	 * @param billId
 	 * @return
 	 */
-	List<BCorps> getFeeCenterCorpIds(Long billId,String dc);
+	List<BCorps> getFeeCenterCorpIds(Long billId,String dc,String type);
 }

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

@@ -28,10 +28,11 @@ import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.cur.entity.BCurrency;
-import org.springblade.los.basic.cur.mapper.CurrencyMapper;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.basic.fees.entity.FeesTemplateItems;
 import org.springblade.los.basic.fees.entity.LosBFeesTemplate;
+import org.springblade.los.business.amends.entity.Amends;
+import org.springblade.los.business.amends.mapper.AmendsMapper;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.entity.PreContainers;
 import org.springblade.los.business.sea.mapper.BillsMapper;
@@ -68,7 +69,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 
 	private final BillsMapper billsMapper;
 
-	private final CurrencyMapper currencyMapper;
+	private final AmendsMapper amendsMapper;
 
 	private final IBCurrencyService bCurrencyService;
 
@@ -440,35 +441,49 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 	}
 
 	@Override
-	public List<BCorps> getFeeCenterCorpIds(Long billId, String dc) {
-		Bills bills = billsMapper.selectById(billId);
+	public List<BCorps> getFeeCenterCorpIds(Long billId, String dc, String type) {
 		List<Long> corpIds = new ArrayList<>();
-		if (bills != null) {
-			if ("MM".equals(bills.getBillType())) {
-				List<Bills> billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
-					.eq(Bills::getTenantId, AuthUtil.getTenantId())
-					.eq(Bills::getIsDeleted, 0)
-					.eq(Bills::getMasterId, bills.getId())
-					.eq(Bills::getMasterBillNo, bills.getBillNo()));
-				if (billsList.size() > 0) {
-					List<Long> billIds;
-					billIds = billsList.stream().map(Bills::getId).collect(Collectors.toList());
-					if (billIds.size() > 0) {
-						billIds.add(billId);
-					} else {
-						billIds = new ArrayList<>();
-						billIds.add(billId);
+		if ("HYCK".equals(type)) {
+			Bills bills = billsMapper.selectById(billId);
+			if (bills != null) {
+				if ("MM".equals(bills.getBillType())) {
+					List<Bills> billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+						.eq(Bills::getTenantId, AuthUtil.getTenantId())
+						.eq(Bills::getIsDeleted, 0)
+						.eq(Bills::getMasterId, bills.getId())
+						.eq(Bills::getMasterBillNo, bills.getBillNo()));
+					if (billsList.size() > 0) {
+						List<Long> billIds;
+						billIds = billsList.stream().map(Bills::getId).collect(Collectors.toList());
+						if (billIds.size() > 0) {
+							billIds.add(billId);
+						} else {
+							billIds = new ArrayList<>();
+							billIds.add(billId);
+						}
+						List<FeeCenter> feeCenterList = baseMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+							.eq(FeeCenter::getIsDeleted, 0)
+							.eq(FeeCenter::getDc, dc)
+							.in(FeeCenter::getPid, billIds));
+						if (feeCenterList.size() > 0) {
+							corpIds = feeCenterList.stream().map(FeeCenter::getCorpId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+						}
 					}
+				} else {
 					List<FeeCenter> feeCenterList = baseMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
 						.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 						.eq(FeeCenter::getIsDeleted, 0)
 						.eq(FeeCenter::getDc, dc)
-						.in(FeeCenter::getPid, billIds));
+						.eq(FeeCenter::getPid, billId));
 					if (feeCenterList.size() > 0) {
 						corpIds = feeCenterList.stream().map(FeeCenter::getCorpId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
 					}
 				}
-			} else {
+			}
+		} else if ("AMEND".equals(type)) {
+			Amends amends = amendsMapper.selectById(billId);
+			if (amends != null) {
 				List<FeeCenter> feeCenterList = baseMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 					.eq(FeeCenter::getIsDeleted, 0)

+ 95 - 35
blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/service/impl/FinInvoicesServiceImpl.java

@@ -282,11 +282,47 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 		FinInvoices detail = baseMapper.selectById(finInvoices.getId());
 		if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
 			//明细状态修改  已开发票
+			List<FinAccBills> finAccBillsList = new ArrayList<>();
 			for (FinInvoicesItems item : finInvoices.getFinInvoicesItemsList()) {
 				item.setBillDate(finInvoices.getBillDate());
 				item.setUpdateUser(AuthUtil.getUserId());
 				item.setUpdateTime(new Date());
 				item.setUpdateUserName(AuthUtil.getUserName());
+				FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
+				if (finAccBills == null) {
+					throw new RuntimeException("未找到账单明细,操作失败");
+				}
+				finAccBills.setInvoiceBillId(detail.getId() + "");
+				finAccBills.setInvoiceBillNo(detail.getBillNo());
+				finAccBills.setInvoiceNo(detail.getInvoiceNo());
+				finAccBills.setInvoiceDate(detail.getInvoiceDate());
+				finAccBills.setUpdateUser(AuthUtil.getUserId());
+				finAccBills.setUpdateTime(new Date());
+				finAccBills.setUpdateUserName(AuthUtil.getUserName());
+				if ("CNY".equals(item.getCurCode())){
+					if ("C".equals(finAccBills.getAccountDc())){
+						if (item.getCurrentAmount().compareTo(finAccBills.getAmountCrLoc().subtract(finAccBills.getAppliedInvoiceAmount()).subtract(finAccBills.getUninvoicedAmount())) > 0) {
+							throw new RuntimeException("本次开票金额大于未开票金额");
+						}
+					}else{
+						if (item.getCurrentAmount().compareTo(finAccBills.getAmountDrLoc().subtract(finAccBills.getAppliedInvoiceAmount()).subtract(finAccBills.getUninvoicedAmount())) > 0) {
+							throw new RuntimeException("本次开票金额大于未开票金额");
+						}
+					}
+					finAccBills.setUninvoicedAmount(finAccBills.getUninvoicedAmount().add(item.getCurrentAmount()));
+				}else{
+					if ("C".equals(finAccBills.getAccountDc())){
+						if (item.getCurrentAmount().compareTo(finAccBills.getAmountCrLoc().subtract(finAccBills.getAppliedInvoiceAmountUsd()).subtract(finAccBills.getUninvoicedAmountUsd())) > 0) {
+							throw new RuntimeException("本次开票金额大于未开票金额");
+						}
+					}else{
+						if (item.getCurrentAmount().compareTo(finAccBills.getAmountDrLoc().subtract(finAccBills.getAppliedInvoiceAmountUsd()).subtract(finAccBills.getUninvoicedAmountUsd())) > 0) {
+							throw new RuntimeException("本次开票金额大于未开票金额");
+						}
+					}
+					finAccBills.setUninvoicedAmountUsd(finAccBills.getUninvoicedAmountUsd().add(item.getCurrentAmount()));
+				}
+				finAccBillsList.add(finAccBills);
 			}
 			finInvoicesItemsService.saveOrUpdateBatch(finInvoices.getFinInvoicesItemsList());
 			List<Long> ids = finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getApplySrcId).collect(Collectors.toList());
@@ -315,20 +351,6 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 			//通过明细里账单id查询具体账单数据
 			List<Long> accIds = finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getAccBillId)
 				.filter(Objects::nonNull).collect(Collectors.toList());
-			List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
-				.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
-				.eq(FinAccBills::getIsDeleted, 0)
-				.in(FinAccBills::getId, accIds));
-			//修改账单中对账状态
-			for (FinAccBills item : finAccBillsList) {
-				item.setInvoiceBillId(detail.getId() + "");
-				item.setInvoiceBillNo(detail.getBillNo());
-				item.setInvoiceNo(detail.getInvoiceNo());
-				item.setInvoiceDate(detail.getInvoiceDate());
-				item.setUpdateUser(AuthUtil.getUserId());
-				item.setUpdateTime(new Date());
-				item.setUpdateUserName(AuthUtil.getUserName());
-			}
 			//通过账单id查询具体费用中心数据
 			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 				.in(FeeCenter::getAccBillId, accIds)
@@ -472,11 +494,47 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 			throw new RuntimeException("单据已结算,撤销失败");
 		}
 		if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
+			List<FinAccBills> finAccBillsList = new ArrayList<>();
 			for (FinInvoicesItems item : finInvoices.getFinInvoicesItemsList()) {
 				item.setBillDate(null);
 				item.setUpdateUser(AuthUtil.getUserId());
 				item.setUpdateTime(new Date());
 				item.setUpdateUserName(AuthUtil.getUserName());
+				FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
+				if (finAccBills == null) {
+					throw new RuntimeException("未找到账单明细,操作失败");
+				}
+				finAccBills.setInvoiceBillId("");
+				finAccBills.setInvoiceBillNo("");
+				finAccBills.setInvoiceNo("");
+				finAccBills.setInvoiceDate(null);
+				finAccBills.setUpdateUser(AuthUtil.getUserId());
+				finAccBills.setUpdateTime(new Date());
+				finAccBills.setUpdateUserName(AuthUtil.getUserName());
+				if ("CNY".equals(item.getCurCode())){
+					if ("C".equals(finAccBills.getAccountDc())){
+						if (item.getCurrentAmount().compareTo(finAccBills.getUninvoicedAmount()) > 0) {
+							throw new RuntimeException("本次开票金额大于已开票金额");
+						}
+					}else{
+						if (item.getCurrentAmount().compareTo(finAccBills.getUninvoicedAmount()) > 0) {
+							throw new RuntimeException("本次开票金额大于已开票金额");
+						}
+					}
+					finAccBills.setUninvoicedAmount(finAccBills.getUninvoicedAmount().subtract(item.getCurrentAmount()));
+				}else{
+					if ("C".equals(finAccBills.getAccountDc())){
+						if (item.getCurrentAmount().compareTo(finAccBills.getUninvoicedAmountUsd()) > 0) {
+							throw new RuntimeException("本次开票金额大于已开票金额");
+						}
+					}else{
+						if (item.getCurrentAmount().compareTo(finAccBills.getUninvoicedAmountUsd()) > 0) {
+							throw new RuntimeException("本次开票金额大于已开票金额");
+						}
+					}
+					finAccBills.setUninvoicedAmountUsd(finAccBills.getUninvoicedAmountUsd().subtract(item.getCurrentAmount()));
+				}
+				finAccBillsList.add(finAccBills);
 			}
 			finInvoicesItemsService.saveOrUpdateBatch(finInvoices.getFinInvoicesItemsList());
 			List<Long> ids = finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getApplySrcId).collect(Collectors.toList());
@@ -497,20 +555,6 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 			}
 			List<Long> accIds = finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getAccBillId)
 				.filter(Objects::nonNull).collect(Collectors.toList());
-			List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
-				.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
-				.eq(FinAccBills::getIsDeleted, 0)
-				.in(FinAccBills::getId, accIds)
-				.eq(FinAccBills::getIsChecked, 1));
-			for (FinAccBills item : finAccBillsList) {
-				item.setInvoiceBillId("");
-				item.setInvoiceBillNo("");
-				item.setInvoiceNo("");
-				item.setInvoiceDate(null);
-				item.setUpdateUser(AuthUtil.getUserId());
-				item.setUpdateTime(new Date());
-				item.setUpdateUserName(AuthUtil.getUserName());
-			}
 			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 				.in(FeeCenter::getAccBillId, accIds)
 				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
@@ -540,11 +584,20 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				if (finAccBills == null) {
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
-				BigDecimal amount = finAccBills.getAppliedInvoiceAmount().subtract(finAccBills.getAppliedInvoiceAmountStl());
-				if (item.getCurrentAmount().compareTo(finAccBills.getAmountDrLoc().subtract(amount).subtract(finAccBills.getStlAmountDrLoc())) > 0) {
-					throw new RuntimeException("本次申请金额大于未申请金额");
+				if ("CNY".equals(item.getCurCode())){
+					BigDecimal amount = finAccBills.getAppliedInvoiceAmount().subtract(finAccBills.getAppliedInvoiceAmountStl());
+					if (item.getCurrentAmount().compareTo(finAccBills.getAmountDrLoc().subtract(amount).subtract(finAccBills.getStlAmountDrLoc())) > 0) {
+						throw new RuntimeException("本次申请金额大于未申请金额");
+					}
+					finAccBills.setAppliedInvoiceAmount(finAccBills.getAppliedInvoiceAmount().add(item.getCurrentAmount()));
+				}else{
+					BigDecimal amount = finAccBills.getAppliedInvoiceAmountUsd().subtract(finAccBills.getAppliedInvoiceAmountStlUsd());
+					if (item.getCurrentAmount().compareTo(finAccBills.getAmountDrLoc().subtract(amount).subtract(finAccBills.getStlAmountDrLoc())) > 0) {
+						throw new RuntimeException("本次申请金额大于未申请金额");
+					}
+					finAccBills.setAppliedInvoiceAmountUsd(finAccBills.getAppliedInvoiceAmountUsd().add(item.getCurrentAmount()));
 				}
-				finAccBills.setAppliedInvoiceAmount(finAccBills.getAppliedInvoiceAmount().add(item.getCurrentAmount()));
+
 				finAccBillsList.add(finAccBills);
 				/**-----------------------费用中心数据处理--------------------------- */
 				List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
@@ -614,10 +667,17 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				if (finAccBills == null) {
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
-				if (item.getCurrentAmount().compareTo(finAccBills.getAppliedInvoiceAmount()) > 0) {
-					throw new RuntimeException("本次申请金额大于未申请金额");
+				if ("CNY".equals(item.getCurCode())){
+					if (item.getCurrentAmount().compareTo(finAccBills.getAppliedInvoiceAmount()) > 0) {
+						throw new RuntimeException("本次申请金额大于未申请金额");
+					}
+					finAccBills.setAppliedInvoiceAmount(finAccBills.getAppliedInvoiceAmount().subtract(item.getCurrentAmount()));
+				}else{
+					if (item.getCurrentAmount().compareTo(finAccBills.getAppliedInvoiceAmountUsd()) > 0) {
+						throw new RuntimeException("本次申请金额大于未申请金额");
+					}
+					finAccBills.setAppliedInvoiceAmountUsd(finAccBills.getAppliedInvoiceAmountUsd().subtract(item.getCurrentAmount()));
 				}
-				finAccBills.setAppliedInvoiceAmount(finAccBills.getAppliedInvoiceAmount().subtract(item.getCurrentAmount()));
 				finAccBillsList.add(finAccBills);
 				/**-----------------------费用中心数据处理--------------------------- */
 				List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()

+ 57 - 21
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

@@ -317,7 +317,11 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 							throw new RuntimeException("本次对账金额大于账单应付金额");
 						}
 					}
-					finAccBills.setReconciliationAmount(finAccBills.getReconciliationAmount().add(item.getCurrentStlAmount()));
+					if ("CNY".equals(item.getCurCode())) {
+						finAccBills.setReconciliationAmount(finAccBills.getReconciliationAmount().add(item.getCurrentStlAmount()));
+					} else {
+						finAccBills.setReconciliationAmountUsd(finAccBills.getReconciliationAmountUsd().add(item.getCurrentStlAmount()));
+					}
 					finAccBillsList.add(finAccBills);
 				}
 			}
@@ -454,7 +458,11 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					if (finAccBills.getReconciliationAmount().compareTo(item.getCurrentStlAmount()) < 0) {
 						throw new RuntimeException("撤销失败,本次对账金额大于已对账金额");
 					}
-					finAccBills.setReconciliationAmount(finAccBills.getReconciliationAmount().subtract(item.getCurrentStlAmount()));
+					if ("CNY".equals(item.getCurCode())) {
+						finAccBills.setReconciliationAmount(finAccBills.getReconciliationAmount().subtract(item.getCurrentStlAmount()));
+					}else{
+						finAccBills.setReconciliationAmountUsd(finAccBills.getReconciliationAmountUsd().subtract(item.getCurrentStlAmount()));
+					}
 					finAccBillsList.add(finAccBills);
 				}
 			}
@@ -608,18 +616,21 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					if ("CNY".equals(item.getCurCode())) {
 						finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().add(item.getCurrentStlAmount().add(item.getCurrentStlDiscount())));
 						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(finAccBills.getStlAmountDr().add(item.getCurrentStlDiscount())));
+						if (ids.size() > 0) {
+							finAccBills.setAppliedInvoiceAmountStl(finAccBills.getAppliedInvoiceAmountStl().add(item.getCurrentStlDiscount()));
+						}
 					} else {
 						finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().add(item.getCurrentStlAmount().add(item.getCurrentStlDiscount())));
 						BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount().add(item.getCurrentStlDiscount()), "D");
 						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(cny));
+						if (ids.size() > 0) {
+							finAccBills.setAppliedInvoiceAmountStlUsd(finAccBills.getAppliedInvoiceAmountStlUsd().add(item.getCurrentStlDiscount()));
+						}
 					}
 					if (finAccBills.getAmountDr().compareTo(finAccBills.getStlAmountDr()) == 0 &&
 						finAccBills.getAmountDrUsd().compareTo(finAccBills.getStlAmountDrUsd()) == 0) {
 						status = true;
 					}
-					if (ids.size() > 0) {
-						finAccBills.setAppliedInvoiceAmountStl(finAccBills.getAppliedInvoiceAmountStl().add(item.getCurrentStlDiscount()));
-					}
 				}
 				/**-----------------------账单数据处理 收--------------------------- */
 				/**-----------------------账单数据处理 付--------------------------- */
@@ -627,18 +638,21 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					if ("CNY".equals(item.getCurCode())) {
 						finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().add(item.getCurrentStlAmount()));
 						finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(finAccBills.getStlAmountCr()));
+						if (ids.size() > 0) {
+							finAccBills.setAppliedAmountStl(finAccBills.getAppliedAmountStl().add(item.getCurrentStlDiscount()));
+						}
 					} else {
 						finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().add(item.getCurrentStlAmount()));
 						BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount(), "C");
 						finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(cny));
+						if (ids.size() > 0) {
+							finAccBills.setAppliedAmountStlUsd(finAccBills.getAppliedAmountStlUsd().add(item.getCurrentStlDiscount()));
+						}
 					}
 					if (finAccBills.getAmountCr().compareTo(finAccBills.getStlAmountCr()) == 0 &&
 						finAccBills.getAmountCrUsd().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
 						status = true;
 					}
-					if (ids.size() > 0) {
-						finAccBills.setAppliedAmountStl(finAccBills.getAppliedAmountStl().add(item.getCurrentStlDiscount()));
-					}
 				}
 				/**-----------------------账单数据处理 付--------------------------- */
 				if (finAccBills.getStlAmountCr().compareTo(finAccBills.getAmountCr()) > 0 ||
@@ -868,10 +882,16 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					if ("CNY".equals(item.getCurCode())) {
 						finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().subtract(item.getCurrentStlAmount().subtract(item.getCurrentStlDiscount())));
 						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(finAccBills.getStlAmountDr().subtract(item.getCurrentStlDiscount())));
+						if (ids.size() > 0) {
+							finAccBills.setAppliedInvoiceAmountStl(finAccBills.getAppliedInvoiceAmountStl().subtract(item.getCurrentStlDiscount()));
+						}
 					} else {
 						finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().subtract(item.getCurrentStlAmount().subtract(item.getCurrentStlDiscount())));
 						BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount().subtract(item.getCurrentStlDiscount()), "D");
 						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(cny));
+						if (ids.size() > 0) {
+							finAccBills.setAppliedInvoiceAmountStlUsd(finAccBills.getAppliedInvoiceAmountStlUsd().subtract(item.getCurrentStlDiscount()));
+						}
 					}
 					if (finAccBills.getAmountDr().compareTo(new BigDecimal("0.00")) == 0 &&
 						finAccBills.getAmountDrUsd().compareTo(new BigDecimal("0.00")) == 0) {
@@ -890,9 +910,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 							finAccBills.setIsCleared(3);
 						}
 					}
-					if (ids.size() > 0) {
-						finAccBills.setAppliedInvoiceAmountStl(finAccBills.getAppliedInvoiceAmountStl().subtract(item.getCurrentStlDiscount()));
-					}
+
 				}
 				/**-----------------------账单数据处理 收--------------------------- */
 				/**-----------------------账单数据处理 付--------------------------- */
@@ -900,10 +918,16 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					if ("CNY".equals(item.getCurCode())) {
 						finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().subtract(item.getCurrentStlAmount().subtract(item.getCurrentStlDiscount())));
 						finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(finAccBills.getStlAmountCr().subtract(item.getCurrentStlDiscount())));
+						if (ids.size() > 0) {
+							finAccBills.setAppliedAmountStl(finAccBills.getAppliedAmountStl().subtract(item.getCurrentStlDiscount()));
+						}
 					} else {
 						finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().subtract(item.getCurrentStlAmount().subtract(item.getCurrentStlDiscount())));
 						BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount().subtract(item.getCurrentStlDiscount()), "C");
 						finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(cny));
+						if (ids.size() > 0) {
+							finAccBills.setAppliedAmountStlUsd(finAccBills.getAppliedAmountStlUsd().subtract(item.getCurrentStlDiscount()));
+						}
 					}
 					if (finAccBills.getAmountCr().compareTo(new BigDecimal("0.00")) == 0 &&
 						finAccBills.getAmountCrUsd().compareTo(new BigDecimal("0.00")) == 0) {
@@ -922,9 +946,6 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 							finAccBills.setIsCleared(3);
 						}
 					}
-					if (ids.size() > 0) {
-						finAccBills.setAppliedAmountStl(finAccBills.getAppliedAmountStl().subtract(item.getCurrentStlDiscount()));
-					}
 				}
 				/**-----------------------账单数据处理 付--------------------------- */
 
@@ -1270,11 +1291,19 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				if (finAccBills == null) {
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
-				BigDecimal amount = finAccBills.getAppliedAmount().subtract(finAccBills.getAppliedAmountStl());
-				if (item.getCurrentStlAmount().compareTo(finAccBills.getAmountCrLoc().subtract(amount).subtract(finAccBills.getStlAmountCrLoc())) > 0) {
-					throw new RuntimeException("本次申请金额大于未申请金额");
+				if ("CNY".equals(item.getCurCode())){
+					BigDecimal amount = finAccBills.getAppliedAmount().subtract(finAccBills.getAppliedAmountStl());
+					if (item.getCurrentStlAmount().compareTo(finAccBills.getAmountCrLoc().subtract(amount).subtract(finAccBills.getStlAmountCrLoc())) > 0) {
+						throw new RuntimeException("本次申请金额大于未申请金额");
+					}
+					finAccBills.setAppliedAmount(finAccBills.getAppliedAmount().add(item.getCurrentStlAmount()));
+				}else{
+					BigDecimal amount = finAccBills.getAppliedAmountUsd().subtract(finAccBills.getAppliedAmountStlUsd());
+					if (item.getCurrentStlAmount().compareTo(finAccBills.getAmountCrLoc().subtract(amount).subtract(finAccBills.getStlAmountCrLoc())) > 0) {
+						throw new RuntimeException("本次申请金额大于未申请金额");
+					}
+					finAccBills.setAppliedAmountUsd(finAccBills.getAppliedAmountUsd().add(item.getCurrentStlAmount()));
 				}
-				finAccBills.setAppliedAmount(finAccBills.getAppliedAmount().add(item.getCurrentStlAmount()));
 				finAccBillsList.add(finAccBills);
 				//计算字段null值处理
 				item.setStlTtlAmount(ObjectUtils.isNotNull(item.getStlTtlAmount()) ? item.getStlTtlAmount() : new BigDecimal("0.00"));
@@ -1347,10 +1376,17 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				if (finAccBills == null) {
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
-				if (item.getCurrentStlAmount().compareTo(finAccBills.getAppliedAmount()) > 0) {
-					throw new RuntimeException("本次申请金额大于未申请金额");
+				if ("CNY".equals(item.getCurCode())){
+					if (item.getCurrentStlAmount().compareTo(finAccBills.getAppliedAmount()) > 0) {
+						throw new RuntimeException("本次申请金额大于未申请金额");
+					}
+					finAccBills.setAppliedAmount(finAccBills.getAppliedAmount().subtract(item.getCurrentStlAmount()));
+				}else{
+					if (item.getCurrentStlAmount().compareTo(finAccBills.getAppliedAmountUsd()) > 0) {
+						throw new RuntimeException("本次申请金额大于未申请金额");
+					}
+					finAccBills.setAppliedAmountUsd(finAccBills.getAppliedAmountUsd().subtract(item.getCurrentStlAmount()));
 				}
-				finAccBills.setAppliedAmount(finAccBills.getAppliedAmount().subtract(item.getCurrentStlAmount()));
 				finAccBillsList.add(finAccBills);
 				//计算字段null值处理
 				item.setStlTtlAmount(ObjectUtils.isNotNull(item.getStlTtlAmount()) ? item.getStlTtlAmount() : new BigDecimal("0.00"));