Browse Source

Merge remote-tracking branch 'origin/dev' into dev

liyuan 7 months ago
parent
commit
bc93195537

+ 7 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/statisticAnalysis/BoxNumberProfitQ.java

@@ -1,5 +1,6 @@
 package org.springblade.los.statisticAnalysis;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import lombok.Data;
 
 /**
@@ -69,5 +70,11 @@ public class BoxNumberProfitQ {
 	 */
 	private String selecTypeId;
 
+	/**
+	 * 合并amend费用
+	 */
+	@ExcelIgnore
+	private String mergeAmendFee;
+
 
 }

+ 19 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/statisticAnalysis/FinanceProfitDtoList.java

@@ -239,10 +239,22 @@ public class FinanceProfitDtoList {
 	/**
 	 * 单票利润
 	 */
-	@ExcelProperty(value = "单票利润")
+	@ExcelProperty(value = "合计利润")
 	private BigDecimal amountProfitLoc;
 
 	/**
+	 * 人民币利润
+	 */
+	@ExcelProperty(value = "人民币利润")
+	private BigDecimal amountProfit;
+
+	/**
+	 * 人民币利润
+	 */
+	@ExcelProperty(value = "美元利润")
+	private BigDecimal amountProfitUsd;
+
+	/**
 	 * 实际单票利润
 	 */
 	@ExcelProperty(value = "实际单票利润")
@@ -328,4 +340,10 @@ public class FinanceProfitDtoList {
 	@ExcelIgnore
 	private String selecTypeId;
 
+	/**
+	 * 是否存在amend
+	 */
+	@ExcelIgnore
+	private Integer whetherExist;
+
 }

+ 7 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/view/entity/BoxNumberProfit.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.los.view.entity;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -90,6 +92,11 @@ public class BoxNumberProfit implements Serializable {
 	private String operatorDept;
 	private String srcDeptId;
 	private Long createUser;
+	/**
+	 * 是否存在amend
+	 */
+	@TableField(exist = false)
+	private Integer whetherExist;
 
 
 }

+ 0 - 24
blade-service-api/blade-los-api/src/main/java/org/springblade/los/view/entity/FinanceProfit.java

@@ -72,39 +72,15 @@ public class FinanceProfit implements Serializable {
 	private BigDecimal realAmountDrUsd;
 	private BigDecimal amountDr;
 	private BigDecimal realAmountDr;
-	/**
-	 * 合计应收
-	 */
-	@TableField(exist = false)
 	private BigDecimal amountDrLoc;
-
-	/**
-	 * 实际合计应收
-	 */
-	@TableField(exist = false)
 	private BigDecimal realAmountDrLoc;
 	private BigDecimal amountCrUsd;
 	private BigDecimal realAmountCrUsd;
 	private BigDecimal amountCr;
 	private BigDecimal realAmountCr;
-	/**
-	 * 合计应付
-	 */
-	@TableField(exist = false)
 	private BigDecimal amountCrLoc;
-
-	/**
-	 * 实际合计应付
-	 */
-	@TableField(exist = false)
 	private BigDecimal realAmountCrLoc;
-
 	private BigDecimal amountProfitLoc;
-
-	/**
-	 * 实际单票利润
-	 */
-	@TableField(exist = false)
 	private BigDecimal realAmountProfitLoc;
 
 

File diff suppressed because it is too large
+ 52 - 863
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java


+ 16 - 20
blade-service/blade-los/src/main/java/org/springblade/los/business/aea/service/impl/AeaBillsServiceImpl.java

@@ -305,14 +305,6 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 			}
 		}
 		this.saveOrUpdate(aeaBills);
-		Date date;
-		if ("AE".equals(aeaBills.getBusinessType())) {
-			date = aeaBills.getEtd();
-		} else {
-			date = aeaBills.getEta();
-		}
-		BigDecimal exrateD = bCurrencyService.getCnyExrate(date, "USD", "D", "1");
-		BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
 		/**-------------费用计算---------*/
 		BigDecimal amountDr = new BigDecimal("0.00");
 		BigDecimal amountCr = new BigDecimal("0.00");
@@ -359,11 +351,14 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 				item.setRefno(aeaBills.getRefno());
 				if ("USD".equals(item.getCurCode())) {
 					amountCrUsd = amountCrUsd.add(item.getAmount());
+					amountCrLoc = amountCrLoc.add(item.getExrate().multiply(item.getAmount()));
 				} else if ("CNY".equals(item.getCurCode())) {
 					amountCr = amountCr.add(item.getAmount());
+					amountCrLoc = amountCrLoc.add(item.getAmount());
 				} else {
-					BigDecimal usd = exrateC.multiply(item.getAmount());
+					BigDecimal usd = item.getExrate().multiply(item.getAmount());
 					amountCrUsd = amountCrUsd.add(usd);
+					amountCrLoc = amountCrLoc.add(usd);
 				}
 			}
 			feeCenterService.submitList(aeaBills.getFeeCenterListC());
@@ -404,11 +399,14 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 				item.setRefno(aeaBills.getRefno());
 				if ("USD".equals(item.getCurCode())) {
 					amountDrUsd = amountDrUsd.add(item.getAmount());
+					amountDrLoc = amountDrLoc.add(item.getExrate().multiply(item.getAmount()));
 				} else if ("CNY".equals(item.getCurCode())) {
 					amountDr = amountDr.add(item.getAmount());
+					amountDrLoc = amountDrLoc.add(item.getAmount());
 				} else {
-					BigDecimal usd = exrateD.multiply(item.getAmount());
+					BigDecimal usd = item.getExrate().multiply(item.getAmount());
 					amountDrUsd = amountDrUsd.add(usd);
+					amountDrLoc = amountDrLoc.add(usd);
 				}
 			}
 			feeCenterService.submitList(aeaBills.getFeeCenterListD());
@@ -467,20 +465,26 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 					if ("C".equals(item.getDc())) {
 						if ("USD".equals(item.getCurCode())) {
 							amountCrUsdM = amountCrUsdM.add(item.getAmount());
+							amountCrLocM = amountCrLocM.add(item.getExrate().multiply(item.getAmount()));
 						} else if ("CNY".equals(item.getCurCode())) {
 							amountCrM = amountCrM.add(item.getAmount());
+							amountCrLocM = amountCrLocM.add(item.getAmount());
 						} else {
-							BigDecimal usd = exrateC.multiply(item.getAmount());
+							BigDecimal usd = item.getExrate().multiply(item.getAmount());
 							amountCrUsdM = amountCrUsdM.add(usd);
+							amountCrLocM = amountCrLocM.add(usd);
 						}
 					} else {
 						if ("USD".equals(item.getCurCode())) {
 							amountDrUsdM = amountDrUsdM.add(item.getAmount());
+							amountDrLocM = amountDrLocM.add(item.getExrate().multiply(item.getAmount()));
 						} else if ("CNY".equals(item.getCurCode())) {
 							amountDrM = amountDrM.add(item.getAmount());
+							amountDrLocM = amountDrLocM.add(item.getAmount());
 						} else {
-							BigDecimal usd = exrateD.multiply(item.getAmount());
+							BigDecimal usd = item.getExrate().multiply(item.getAmount());
 							amountDrUsdM = amountDrUsdM.add(usd);
+							amountDrLocM = amountDrLocM.add(usd);
 						}
 					}
 				}
@@ -509,10 +513,6 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 				//利润 = 收 - 付
 				amountProfitM = amountDrM.subtract(amountCrM);
 				amountProfitUsdM = amountDrUsdM.subtract(amountCrUsdM);
-				amountDrUsdM = exrateD.multiply(amountDrUsdM);
-				amountDrLocM = amountDrLocM.add(amountDrUsdM).add(amountDrM);
-				amountCrUsdM = exrateC.multiply(amountCrUsdM);
-				amountCrLocM = amountCrLocM.add(amountCrUsdM).add(amountCrM);
 				amountProfitLocM = amountDrLocM.subtract(amountCrLocM);
 				details.setAmountDr(amountDrM);
 				details.setAmountCr(amountCrM);
@@ -532,10 +532,6 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 		//利润 = 收 - 付
 		amountProfit = amountDr.subtract(amountCr);
 		amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-		amountDrUsd = exrateD.multiply(amountDrUsd);
-		amountDrLoc = amountDrLoc.add(amountDrUsd).add(amountDr);
-		amountCrUsd = exrateC.multiply(amountCrUsd);
-		amountCrLoc = amountCrLoc.add(amountCrUsd).add(amountCr);
 		amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 		aeaBills.setAmountDr(amountDr);
 		aeaBills.setAmountCr(amountCr);

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

@@ -594,14 +594,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		BigDecimal amountCrLoc = new BigDecimal("0.00");
 		BigDecimal amountProfitLoc = new BigDecimal("0.00");
 		List<FeeCenter> feeCenterListAll = new ArrayList<>();
-		Date date = bills.getEtd();
-		if ("SE".equals(bills.getBusinessType())) {
-			date = bills.getEtd();
-		} else {
-			date = bills.getEta();
-		}
-		BigDecimal exrateD = bCurrencyService.getCnyExrate(date, "USD", "D", "1");
-		BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
 		//应付
 		int statusC = 0;
 		if (ObjectUtils.isNotNull(bills.getFeeCenterListC())) {
@@ -646,11 +638,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setCntrNo(bills.getQuantityCntrTypesDescr());
 				if ("USD".equals(item.getCurCode())) {
 					amountCrUsd = amountCrUsd.add(item.getAmount());
+					amountCrLoc = amountCrLoc.add(item.getAmount().multiply(item.getExrate()));
 				} else if ("CNY".equals(item.getCurCode())) {
 					amountCr = amountCr.add(item.getAmount());
+					amountCrLoc = amountCrLoc.add(item.getAmount());
 				} else {
-					BigDecimal usd = item.getAmount().multiply(exrateC);
+					BigDecimal usd = item.getAmount().multiply(item.getExrate());
 					amountCrUsd = amountCrUsd.add(usd);
+					amountCrLoc = amountCrLoc.add(usd);
 				}
 				feeCenterListAll.add(item);
 			}
@@ -699,11 +694,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setCntrNo(bills.getQuantityCntrTypesDescr());
 				if ("USD".equals(item.getCurCode())) {
 					amountDrUsd = amountDrUsd.add(item.getAmount());
+					amountDrLoc = amountDrLoc.add(item.getAmount().multiply(item.getExrate()));
 				} else if ("CNY".equals(item.getCurCode())) {
 					amountDr = amountDr.add(item.getAmount());
+					amountDrLoc = amountDrLoc.add(item.getAmount());
 				} else {
-					BigDecimal usd = item.getAmount().multiply(exrateD);
+					BigDecimal usd = item.getAmount().multiply(item.getExrate());
 					amountDrUsd = amountDrUsd.add(usd);
+					amountDrLoc = amountDrLoc.add(usd);
 				}
 				feeCenterListAll.add(item);
 			}
@@ -772,20 +770,26 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					if ("C".equals(item.getDc())) {
 						if ("USD".equals(item.getCurCode())) {
 							amountCrUsdM = amountCrUsdM.add(item.getAmount());
+							amountCrLocM = amountCrLocM.add(item.getAmount().multiply(item.getExrate()));
 						} else if ("CNY".equals(item.getCurCode())) {
 							amountCrM = amountCrM.add(item.getAmount());
+							amountCrLocM = amountCrLocM.add(item.getAmount());
 						} else {
-							BigDecimal usd = item.getAmount().multiply(exrateC);
+							BigDecimal usd = item.getAmount().multiply(item.getExrate());
 							amountCrUsdM = amountCrUsdM.add(usd);
+							amountCrLocM = amountCrLocM.add(usd);
 						}
 					} else {
 						if ("USD".equals(item.getCurCode())) {
 							amountDrUsdM = amountDrUsdM.add(item.getAmount());
+							amountDrLocM = amountDrLocM.add(item.getAmount().multiply(item.getExrate()));
 						} else if ("CNY".equals(item.getCurCode())) {
 							amountDrM = amountDrM.add(item.getAmount());
+							amountDrLocM = amountDrLocM.add(item.getAmount());
 						} else {
-							BigDecimal usd = item.getAmount().multiply(exrateD);
+							BigDecimal usd = item.getAmount().multiply(item.getExrate());
 							amountDrUsdM = amountDrUsdM.add(usd);
+							amountDrLocM = amountDrLocM.add(usd);
 						}
 					}
 				}
@@ -816,8 +820,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				//利润 = 收 - 付
 				amountProfitM = amountDrM.subtract(amountCrM);
 				amountProfitUsdM = amountDrUsdM.subtract(amountCrUsdM);
-				amountDrLocM = amountDrLocM.add(amountDrUsdM.multiply(exrateD)).add(amountDrM);
-				amountCrLocM = amountCrLocM.add(amountCrUsdM.multiply(exrateC)).add(amountCrM);
 				amountProfitLocM = amountDrLocM.subtract(amountCrLocM);
 				details.setAmountDr(amountDrM);
 				details.setAmountCr(amountCrM);
@@ -837,16 +839,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		//利润 = 收 - 付
 		amountProfit = amountDr.subtract(amountCr);
 		amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-		if (amountDrUsd.compareTo(new BigDecimal("0.00")) != 0) {
-			amountDrLoc = amountDrLoc.add(amountDrUsd.multiply(exrateD)).add(amountDr);
-		} else {
-			amountDrLoc = amountDrLoc.add(amountDr);
-		}
-		if (amountCrUsd.compareTo(new BigDecimal("0.00")) != 0) {
-			amountCrLoc = amountCrLoc.add(amountCrUsd.multiply(exrateC)).add(amountCr);
-		} else {
-			amountCrLoc = amountCrLoc.add(amountCr);
-		}
 		amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 		bills.setAmountDr(amountDr);
 		bills.setAmountCr(amountCr);

+ 5 - 0
blade-service/blade-los/src/main/java/org/springblade/los/excel/BoxNumberProfitExcel.java

@@ -205,5 +205,10 @@ public class BoxNumberProfitExcel {
 	 */
 	@ExcelProperty(value = "团队")
 	private String teamName;
+	/**
+	 * 是否存在amend
+	 */
+	@ExcelIgnore
+	private Integer whetherExist;
 
 }

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

@@ -171,10 +171,10 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			feeCenter.setAmountLoc(amount);
 			feeCenter.setAmountDiscountLoc(amount);
 		} else {
-			feeCenter.setAmountNetLoc(bCurrencyService.converterCny(feeCenter.getCurCode(), amountNet, "", "1"));
-			feeCenter.setAmountTaxLoc(bCurrencyService.converterCny(feeCenter.getCurCode(), amountTax, "", "1"));
-			feeCenter.setAmountLoc(bCurrencyService.converterCny(feeCenter.getCurCode(), amount, "", "1"));
-			feeCenter.setAmountDiscountLoc(bCurrencyService.converterCny(feeCenter.getCurCode(), amount, "", "1"));
+			feeCenter.setAmountNetLoc(amountNet.multiply(feeCenter.getExrate()));
+			feeCenter.setAmountTaxLoc(amountTax.multiply(feeCenter.getExrate()));
+			feeCenter.setAmountLoc(amount.multiply(feeCenter.getExrate()));
+			feeCenter.setAmountDiscountLoc(amount.multiply(feeCenter.getExrate()));
 		}
 		feeCenter.setAmountNet(amountNet);
 		feeCenter.setAmountTax(amountTax);
@@ -626,10 +626,10 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					feeCenter.setAmountLoc(amount);
 					feeCenter.setAmountDiscountLoc(amount);
 				} else {
-					feeCenter.setAmountNetLoc(bCurrencyService.converterCny(feeCenter.getCurCode(), amountNet, "", "1"));
-					feeCenter.setAmountTaxLoc(bCurrencyService.converterCny(feeCenter.getCurCode(), amountTax, "", "1"));
-					feeCenter.setAmountLoc(bCurrencyService.converterCny(feeCenter.getCurCode(), amount, "", "1"));
-					feeCenter.setAmountDiscountLoc(bCurrencyService.converterCny(feeCenter.getCurCode(), amount, "", "1"));
+					feeCenter.setAmountNetLoc(feeCenter.getExrate().multiply(amountNet));
+					feeCenter.setAmountTaxLoc(feeCenter.getExrate().multiply(amountTax));
+					feeCenter.setAmountLoc(feeCenter.getExrate().multiply(amount));
+					feeCenter.setAmountDiscountLoc(feeCenter.getExrate().multiply(amount));
 				}
 				feeCenter.setAmountNet(amountNet);
 				feeCenter.setAmountTax(amountTax);
@@ -652,6 +652,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			amountDrUsd = list.stream().filter(e -> "D".equals(e.getDc()) && "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 			amountCr = list.stream().filter(e -> "C".equals(e.getDc()) && "CNY".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 			amountCrUsd = list.stream().filter(e -> "C".equals(e.getDc()) && "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			amountDrLoc = list.stream().filter(e -> "D".equals(e.getDc()) ).map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+			amountCrLoc = list.stream().filter(e -> "C".equals(e.getDc()) ).map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
 
 			if ("SE".equals(list.get(0).getBusinessType()) || "SI".equals(list.get(0).getBusinessType())) {
 				Bills bills = billsMapper.selectById(list.get(0).getPid());
@@ -694,20 +696,26 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 							if ("C".equals(item.getDc())) {
 								if ("USD".equals(item.getCurCode())) {
 									amountCrUsdM = amountCrUsdM.add(item.getAmount());
+									amountCrLocM = amountCrLocM.add(item.getAmount().multiply(item.getExrate()));
 								} else if ("CNY".equals(item.getCurCode())) {
 									amountCrM = amountCrM.add(item.getAmount());
+									amountCrLocM = amountCrLocM.add(item.getAmount());
 								} else {
-									BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(), "1");
+									BigDecimal usd = item.getAmount().multiply(item.getExrate());
 									amountCrUsdM = amountCrUsdM.add(usd);
+									amountCrLocM = amountCrLocM.add(item.getAmount().multiply(item.getExrate()));
 								}
 							} else {
 								if ("USD".equals(item.getCurCode())) {
 									amountDrUsdM = amountDrUsdM.add(item.getAmount());
+									amountDrLocM = amountDrLocM.add(item.getAmount().multiply(item.getExrate()));
 								} else if ("CNY".equals(item.getCurCode())) {
 									amountDrM = amountDrM.add(item.getAmount());
+									amountDrLocM = amountDrLocM.add(item.getAmount());
 								} else {
-									BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(), "1");
+									BigDecimal usd = item.getAmount().multiply(item.getExrate());
 									amountDrUsdM = amountDrUsdM.add(usd);
+									amountDrLocM = amountDrLocM.add(item.getAmount().multiply(item.getExrate()));
 								}
 							}
 						}
@@ -736,8 +744,6 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 						//利润 = 收 - 付
 						amountProfitM = amountDrM.subtract(amountCrM);
 						amountProfitUsdM = amountDrUsdM.subtract(amountCrUsdM);
-						amountDrLocM = amountDrLocM.add(bCurrencyService.converterCny("USD", amountDrUsdM, "D", "1")).add(amountDrM);
-						amountCrLocM = amountCrLocM.add(bCurrencyService.converterCny("USD", amountCrUsdM, "C", "1")).add(amountCrM);
 						amountProfitLocM = amountDrLocM.subtract(amountCrLocM);
 						details.setAmountDr(amountDrM);
 						details.setAmountCr(amountCrM);
@@ -757,8 +763,6 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				//利润 = 收 - 付
 				amountProfit = amountDr.subtract(amountCr);
 				amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-				amountDrLoc = amountDrLoc.add(bCurrencyService.converterCny("USD", amountDrUsd, "D", "1")).add(amountDr);
-				amountCrLoc = amountCrLoc.add(bCurrencyService.converterCny("USD", amountCrUsd, "C", "1")).add(amountCr);
 				amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 				bills.setAmountDr(amountDr);
 				bills.setAmountCr(amountCr);
@@ -811,20 +815,26 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 							if ("C".equals(item.getDc())) {
 								if ("USD".equals(item.getCurCode())) {
 									amountCrUsdM = amountCrUsdM.add(item.getAmount());
+									amountCrLocM = amountCrLocM.add(item.getAmount().multiply(item.getExrate()));
 								} else if ("CNY".equals(item.getCurCode())) {
 									amountCrM = amountCrM.add(item.getAmount());
+									amountCrLocM = amountCrLocM.add(item.getAmount());
 								} else {
-									BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(), "1");
+									BigDecimal usd = item.getAmount().multiply(item.getExrate());
 									amountCrUsdM = amountCrUsdM.add(usd);
+									amountCrLocM = amountCrLocM.add(item.getAmount().multiply(item.getExrate()));
 								}
 							} else {
 								if ("USD".equals(item.getCurCode())) {
 									amountDrUsdM = amountDrUsdM.add(item.getAmount());
+									amountDrLocM = amountDrLocM.add(item.getAmount().multiply(item.getExrate()));
 								} else if ("CNY".equals(item.getCurCode())) {
 									amountDrM = amountDrM.add(item.getAmount());
+									amountDrLocM = amountDrLocM.add(item.getAmount());
 								} else {
-									BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(), "1");
+									BigDecimal usd = item.getAmount().multiply(item.getExrate());
 									amountDrUsdM = amountDrUsdM.add(usd);
+									amountDrLocM = amountDrLocM.add(item.getAmount().multiply(item.getExrate()));
 								}
 							}
 						}
@@ -853,8 +863,6 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 						//利润 = 收 - 付
 						amountProfitM = amountDrM.subtract(amountCrM);
 						amountProfitUsdM = amountDrUsdM.subtract(amountCrUsdM);
-						amountDrLocM = amountDrLocM.add(bCurrencyService.converterCny("USD", amountDrUsdM, "D", "1")).add(amountDrM);
-						amountCrLocM = amountCrLocM.add(bCurrencyService.converterCny("USD", amountCrUsdM, "C", "1")).add(amountCrM);
 						amountProfitLocM = amountDrLocM.subtract(amountCrLocM);
 						details.setAmountDr(amountDrM);
 						details.setAmountCr(amountCrM);
@@ -874,8 +882,6 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				//利润 = 收 - 付
 				amountProfit = amountDr.subtract(amountCr);
 				amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-				amountDrLoc = amountDrLoc.add(bCurrencyService.converterCny("USD", amountDrUsd, "D", "1")).add(amountDr);
-				amountCrLoc = amountCrLoc.add(bCurrencyService.converterCny("USD", amountCrUsd, "C", "1")).add(amountCr);
 				amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 				aeaBills.setAmountDr(amountDr);
 				aeaBills.setAmountCr(amountCr);
@@ -893,8 +899,6 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				//利润 = 收 - 付
 				amountProfit = amountDr.subtract(amountCr);
 				amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-				amountDrLoc = amountDrLoc.add(bCurrencyService.converterCny("USD", amountDrUsd, "D", "1")).add(amountDr);
-				amountCrLoc = amountCrLoc.add(bCurrencyService.converterCny("USD", amountCrUsd, "C", "1")).add(amountCr);
 				amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 				customsDeclaration.setAmountDr(amountDr);
 				customsDeclaration.setAmountCr(amountCr);

+ 355 - 198
blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java

@@ -11,7 +11,6 @@ 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.Util.IDeptUtils;
-import org.springblade.los.basic.cur.entity.BCurrency;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.business.aea.entity.AeaBills;
 import org.springblade.los.business.aea.mapper.AeaBillsMapper;
@@ -99,6 +98,12 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 	public R<IPage<FinanceProfitDtoList>> financeProfit(FinanceProfitDtoList financeProfit, IPage<FinanceProfitDtoList> page) {
 		financeProfit.setTenantId(AuthUtil.getTenantId());
 		financeProfit.setBranchId(deptUtils.getDeptPid() + "");
+		if (ObjectUtils.isNotNull(financeProfit.getExamineDate()) && "0".equals(financeProfit.getExamineDate())) {
+			financeProfit.setExamineDate(null);
+		}
+		if (ObjectUtils.isNotNull(financeProfit.getExamine()) && "0".equals(financeProfit.getExamine())) {
+			financeProfit.setExamine(null);
+		}
 		String jurisdiction = sysClient.getParamService("data.jurisdiction");
 		if ("1".equals(jurisdiction)) {
 			if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")
@@ -124,9 +129,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 				financeProfit.setSelecType("0");
 			}
 		}
-		List<FinanceProfitDtoList> financeProfitList = new ArrayList<>();
-		BigDecimal exrateC = bCurrencyService.getCnyExrate(null, "USD", "C", "2");
-		BigDecimal exrateD = bCurrencyService.getCnyExrate(null, "USD", "D", "2");
+		List<FinanceProfitDtoList> financeProfitList;
 		//是否合并amend费用  true 合并  false 不合并
 		if ("1".equals(financeProfit.getMergeAmendFee())) {
 			financeProfitList = financeProfitMapper.financeProfit(financeProfit, page);
@@ -166,6 +169,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 				if (!amendsList.isEmpty() && !feeCenterList.isEmpty()) {
 					//获取当前业务类型所有amend
 					List<Amends> amends = amendsList.stream().filter(e -> e.getMblno().equals(item.getMblNo())).collect(Collectors.toList());
+					item.setWhetherExist(amends.size());
 					for (Amends i : amends) {
 						//人民币应收金额
 						BigDecimal feeCentersCD = feeCenterList.stream()
@@ -199,20 +203,36 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 						BigDecimal feeCentersUCReal = feeCenterList.stream()
 							.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
 							.map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+						//应收合计金额
+						BigDecimal feeCentersUDLoc = feeCenterList.stream()
+							.filter(e -> i.getId().equals(e.getPid()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+						//实收合计金额
+						BigDecimal feeCentersUDRealLoc = feeCenterList.stream().filter(e -> i.getId().equals(e.getPid()) && "D".equals(e.getDc()))
+							.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getStlTtlAmount().multiply(y.getExrate())), BigDecimal::add)
+							.setScale(2, RoundingMode.HALF_UP);
+						//应付合计金额
+						BigDecimal feeCentersUCLoc = feeCenterList.stream()
+							.filter(e -> i.getId().equals(e.getPid()) && "C".equals(e.getDc()))
+							.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+						//实付合计金额
+						BigDecimal feeCentersUCRealLoc = feeCenterList.stream().filter(e -> i.getId().equals(e.getPid()) && "C".equals(e.getDc()))
+							.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getStlTtlAmount().multiply(y.getExrate())), BigDecimal::add)
+							.setScale(2, RoundingMode.HALF_UP);
 						item.setAmountCr(item.getAmountCr().add(feeCentersCC));
 						item.setRealAmountCr(item.getRealAmountCr().add(feeCentersCCReal));
 						item.setAmountCrUsd(item.getAmountCrUsd().add(feeCentersUC));
 						item.setRealAmountCrUsd(item.getRealAmountCrUsd().add(feeCentersUCReal));
-						item.setAmountCrLoc(item.getAmountCrLoc().add(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP)));
-						item.setRealAmountCrLoc(item.getRealAmountCrLoc().add(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP)));
+						item.setAmountCrLoc(item.getAmountCrLoc().add(feeCentersUCLoc));
+						item.setRealAmountCrLoc(item.getRealAmountCrLoc().add(feeCentersUCRealLoc));
 						item.setAmountDr(item.getAmountDr().add(feeCentersCD));
 						item.setRealAmountDr(item.getRealAmountDr().add(feeCentersCDReal));
 						item.setAmountDrUsd(item.getAmountDrUsd().add(feeCentersUD));
 						item.setRealAmountDrUsd(item.getRealAmountDrUsd().add(feeCentersUDReal));
-						item.setAmountDrLoc(item.getAmountDrLoc().add(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP)));
-						item.setRealAmountDrLoc(item.getRealAmountDrLoc().add(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP)));
-						item.setAmountProfitLoc(item.getAmountProfitLoc().add(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP)));
-						item.setRealAmountProfitLoc(item.getRealAmountProfitLoc().add(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP)));
+						item.setAmountDrLoc(item.getAmountDrLoc().add(feeCentersUDLoc));
+						item.setRealAmountDrLoc(item.getRealAmountDrLoc().add(feeCentersUDRealLoc));
+						item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
+						item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
 					}
 				}
 			}
@@ -239,11 +259,8 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 					item.setLineCnName(profit.getLineCnName());
 				}
 			}
-			item.setAmountCrLoc(item.getAmountCrUsd().multiply(exrateC).add(item.getAmountCr()).setScale(2, RoundingMode.HALF_UP));
-			item.setRealAmountCrLoc(item.getRealAmountCrUsd().multiply(exrateC).add(item.getRealAmountCr()).setScale(2, RoundingMode.HALF_UP));
-			item.setAmountDrLoc(item.getAmountDrUsd().multiply(exrateC).add(item.getAmountDr()).setScale(2, RoundingMode.HALF_UP));
-			item.setRealAmountDrLoc(item.getRealAmountDrUsd().multiply(exrateC).add(item.getRealAmountDr()).setScale(2, RoundingMode.HALF_UP));
-			item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
+			item.setAmountProfit(item.getAmountDr().subtract(item.getAmountCr()).setScale(2, RoundingMode.HALF_UP));
+			item.setAmountProfitUsd(item.getAmountDrUsd().subtract(item.getAmountCrUsd()).setScale(2, RoundingMode.HALF_UP));
 			item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
 			item.setNotReceivedDr(item.getAmountDr().subtract(item.getRealAmountDr()).setScale(2, RoundingMode.HALF_UP));
 			item.setNotReceivedDrUsd(item.getAmountDrUsd().subtract(item.getRealAmountDrUsd()).setScale(2, RoundingMode.HALF_UP));
@@ -978,6 +995,12 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 	public R financeProfitSum(FinanceProfitDtoList financeProfit) {
 		financeProfit.setTenantId(AuthUtil.getTenantId());
 		financeProfit.setBranchId(deptUtils.getDeptPid() + "");
+		if (ObjectUtils.isNotNull(financeProfit.getExamineDate()) && "0".equals(financeProfit.getExamineDate())) {
+			financeProfit.setExamineDate(null);
+		}
+		if (ObjectUtils.isNotNull(financeProfit.getExamine()) && "0".equals(financeProfit.getExamine())) {
+			financeProfit.setExamine(null);
+		}
 		String jurisdiction = sysClient.getParamService("data.jurisdiction");
 		if ("1".equals(jurisdiction)) {
 			if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")
@@ -1003,9 +1026,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 				financeProfit.setSelecType("0");
 			}
 		}
-		List<FinanceProfitDtoList> financeProfitList = new ArrayList<>();
-		BigDecimal exrateC = bCurrencyService.getCnyExrate(null, "USD", "C", "2");
-		BigDecimal exrateD = bCurrencyService.getCnyExrate(null, "USD", "D", "2");
+		List<FinanceProfitDtoList> financeProfitList;
 		//是否合并amend费用  true 合并  false 不合并
 		if ("1".equals(financeProfit.getMergeAmendFee())) {
 			financeProfitList = financeProfitMapper.financeProfitSum(financeProfit);
@@ -1078,21 +1099,39 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 						BigDecimal feeCentersUCReal = feeCenterList.stream()
 							.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
 							.map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+						//应收合计金额
+						BigDecimal feeCentersUDLoc = feeCenterList.stream()
+							.filter(e -> i.getId().equals(e.getPid()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+						//实收合计金额
+						BigDecimal feeCentersUDRealLoc = feeCenterList.stream().filter(e -> i.getId().equals(e.getPid()) && "D".equals(e.getDc()))
+							.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getStlTtlAmount().multiply(y.getExrate())), BigDecimal::add)
+							.setScale(2, RoundingMode.HALF_UP);
+						//应付合计金额
+						BigDecimal feeCentersUCLoc = feeCenterList.stream()
+							.filter(e -> i.getId().equals(e.getPid()) && "C".equals(e.getDc()))
+							.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+						//实付合计金额
+						BigDecimal feeCentersUCRealLoc = feeCenterList.stream().filter(e -> i.getId().equals(e.getPid()) && "C".equals(e.getDc()))
+							.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getStlTtlAmount().multiply(y.getExrate())), BigDecimal::add)
+							.setScale(2, RoundingMode.HALF_UP);
 						item.setAmountCr(item.getAmountCr().add(feeCentersCC));
 						item.setRealAmountCr(item.getRealAmountCr().add(feeCentersCCReal));
 						item.setAmountCrUsd(item.getAmountCrUsd().add(feeCentersUC));
 						item.setRealAmountCrUsd(item.getRealAmountCrUsd().add(feeCentersUCReal));
-						item.setAmountCrLoc(item.getAmountCrLoc().add(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP)));
-						item.setRealAmountCrLoc(item.getRealAmountCrLoc().add(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP)));
+						item.setAmountCrLoc(item.getAmountCrLoc().add(feeCentersUCLoc));
+						item.setRealAmountCrLoc(item.getRealAmountCrLoc().add(feeCentersUCRealLoc));
 						item.setAmountDr(item.getAmountDr().add(feeCentersCD));
 						item.setRealAmountDr(item.getRealAmountDr().add(feeCentersCDReal));
 						item.setAmountDrUsd(item.getAmountDrUsd().add(feeCentersUD));
 						item.setRealAmountDrUsd(item.getRealAmountDrUsd().add(feeCentersUDReal));
-						item.setAmountDrLoc(item.getAmountDrLoc().add(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP)));
-						item.setRealAmountDrLoc(item.getRealAmountDrLoc().add(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP)));
-						item.setAmountProfitLoc(item.getAmountProfitLoc().add(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP)));
-						item.setRealAmountProfitLoc(item.getRealAmountProfitLoc().add(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP)));
+						item.setAmountDrLoc(item.getAmountDrLoc().add(feeCentersUDLoc));
+						item.setRealAmountDrLoc(item.getRealAmountDrLoc().add(feeCentersUDRealLoc));
+						item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
+						item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
 					}
+				} else {
+					item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
 				}
 			}
 		} else {
@@ -1100,32 +1139,35 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 				financeProfit.setBillType(financeProfit.getBillType() + ",SEA,SIA,AEA,AIA");
 			}
 			financeProfitList = financeProfitMapper.financeProfitSum(financeProfit);
-		}
-		for (FinanceProfitDtoList item : financeProfitList) {
-			if (null != item) {
-				item.setAmountCrLoc(item.getAmountCrUsd().multiply(exrateC).add(item.getAmountCr()).setScale(2, RoundingMode.HALF_UP));
-				item.setRealAmountCrLoc(item.getRealAmountCrUsd().multiply(exrateC).add(item.getRealAmountCr()).setScale(2, RoundingMode.HALF_UP));
-				item.setAmountDrLoc(item.getAmountDrUsd().multiply(exrateC).add(item.getAmountDr()).setScale(2, RoundingMode.HALF_UP));
-				item.setRealAmountDrLoc(item.getRealAmountDrUsd().multiply(exrateC).add(item.getRealAmountDr()).setScale(2, RoundingMode.HALF_UP));
-				item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
+			for (FinanceProfitDtoList item : financeProfitList) {
 				item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
 			}
 		}
+		for (FinanceProfitDtoList item : financeProfitList) {
+			item.setAmountProfit(item.getAmountDr().subtract(item.getAmountCr()).setScale(2, RoundingMode.HALF_UP));
+			item.setAmountProfitUsd(item.getAmountDrUsd().subtract(item.getAmountCrUsd()).setScale(2, RoundingMode.HALF_UP));
+			item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
+			item.setNotReceivedDr(item.getAmountDr().subtract(item.getRealAmountDr()).setScale(2, RoundingMode.HALF_UP));
+			item.setNotReceivedDrUsd(item.getAmountDrUsd().subtract(item.getRealAmountDrUsd()).setScale(2, RoundingMode.HALF_UP));
+			item.setNotReceivedLoc(item.getAmountDrLoc().subtract(item.getRealAmountDrLoc()).setScale(2, RoundingMode.HALF_UP));
+		}
 		Map<String, BigDecimal> map = new HashMap<>();
-		map.put("amountDrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getAmountDrUsd).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("realAmountDrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountDrUsd).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("amountDr", financeProfitList.stream().map(FinanceProfitDtoList::getAmountDr).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("realAmountDr", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountDr).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("amountDrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("realAmountDrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("amountCrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getAmountCrUsd).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("realAmountCrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountCrUsd).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("amountCr", financeProfitList.stream().map(FinanceProfitDtoList::getAmountCr).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("realAmountCr", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountCr).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("amountCrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("realAmountCrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("amountProfitLoc", financeProfitList.stream().map(FinanceProfitDtoList::getAmountProfitLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("realAmountProfitLoc", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountProfitLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountDrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getAmountDrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("realAmountDrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountDrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountDr", financeProfitList.stream().map(FinanceProfitDtoList::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("realAmountDr", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountDrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("realAmountDrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountCrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getAmountCrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("realAmountCrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountCrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountCr", financeProfitList.stream().map(FinanceProfitDtoList::getAmountCr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("realAmountCr", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountCr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountCrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("realAmountCrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountProfitLoc", financeProfitList.stream().map(FinanceProfitDtoList::getAmountProfitLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("realAmountProfitLoc", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountProfitLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountProfit", financeProfitList.stream().map(FinanceProfitDtoList::getAmountProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountProfitUsd", financeProfitList.stream().map(FinanceProfitDtoList::getAmountProfitUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 		return R.data(map);
 	}
 
@@ -1133,6 +1175,12 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 	public List<FinanceProfitDtoList> financeProfitExport(FinanceProfitDtoList financeProfit) {
 		financeProfit.setTenantId(AuthUtil.getTenantId());
 		financeProfit.setBranchId(deptUtils.getDeptPid() + "");
+		if (ObjectUtils.isNotNull(financeProfit.getExamineDate()) && "0".equals(financeProfit.getExamineDate())) {
+			financeProfit.setExamineDate(null);
+		}
+		if (ObjectUtils.isNotNull(financeProfit.getExamine()) && "0".equals(financeProfit.getExamine())) {
+			financeProfit.setExamine(null);
+		}
 		String jurisdiction = sysClient.getParamService("data.jurisdiction");
 		if ("1".equals(jurisdiction)) {
 			if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")
@@ -1159,8 +1207,6 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			}
 		}
 		List<FinanceProfitDtoList> financeProfitList = new ArrayList<>();
-		BigDecimal exrateC = bCurrencyService.getCnyExrate(null, "USD", "C", "2");
-		BigDecimal exrateD = bCurrencyService.getCnyExrate(null, "USD", "D", "2");
 		//是否合并amend费用  true 合并  false 不合并
 		if (ObjectUtils.isNotNull(financeProfit.getMergeAmendFee())) {
 			financeProfitList = financeProfitMapper.financeProfitSum(financeProfit);
@@ -1233,21 +1279,39 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 						BigDecimal feeCentersUCReal = feeCenterList.stream()
 							.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
 							.map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+						//应收合计金额
+						BigDecimal feeCentersUDLoc = feeCenterList.stream()
+							.filter(e -> i.getId().equals(e.getPid()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+						//实收合计金额
+						BigDecimal feeCentersUDRealLoc = feeCenterList.stream().filter(e -> i.getId().equals(e.getPid()) && "D".equals(e.getDc()))
+							.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getStlTtlAmount().multiply(y.getExrate())), BigDecimal::add)
+							.setScale(2, RoundingMode.HALF_UP);
+						//应付合计金额
+						BigDecimal feeCentersUCLoc = feeCenterList.stream()
+							.filter(e -> i.getId().equals(e.getPid()) && "C".equals(e.getDc()))
+							.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+						//实付合计金额
+						BigDecimal feeCentersUCRealLoc = feeCenterList.stream().filter(e -> i.getId().equals(e.getPid()) && "C".equals(e.getDc()))
+							.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getStlTtlAmount().multiply(y.getExrate())), BigDecimal::add)
+							.setScale(2, RoundingMode.HALF_UP);
 						item.setAmountCr(item.getAmountCr().add(feeCentersCC));
 						item.setRealAmountCr(item.getRealAmountCr().add(feeCentersCCReal));
 						item.setAmountCrUsd(item.getAmountCrUsd().add(feeCentersUC));
 						item.setRealAmountCrUsd(item.getRealAmountCrUsd().add(feeCentersUCReal));
-						item.setAmountCrLoc(item.getAmountCrLoc().add(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP)));
-						item.setRealAmountCrLoc(item.getRealAmountCrLoc().add(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP)));
+						item.setAmountCrLoc(item.getAmountCrLoc().add(feeCentersUCLoc));
+						item.setRealAmountCrLoc(item.getRealAmountCrLoc().add(feeCentersUCRealLoc));
 						item.setAmountDr(item.getAmountDr().add(feeCentersCD));
 						item.setRealAmountDr(item.getRealAmountDr().add(feeCentersCDReal));
 						item.setAmountDrUsd(item.getAmountDrUsd().add(feeCentersUD));
 						item.setRealAmountDrUsd(item.getRealAmountDrUsd().add(feeCentersUDReal));
-						item.setAmountDrLoc(item.getAmountDrLoc().add(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP)));
-						item.setRealAmountDrLoc(item.getRealAmountDrLoc().add(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP)));
-						item.setAmountProfitLoc(item.getAmountProfitLoc().add(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP)));
-						item.setRealAmountProfitLoc(item.getRealAmountProfitLoc().add(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP)));
+						item.setAmountDrLoc(item.getAmountDrLoc().add(feeCentersUDLoc));
+						item.setRealAmountDrLoc(item.getRealAmountDrLoc().add(feeCentersUDRealLoc));
+						item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
+						item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
 					}
+				} else {
+					item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
 				}
 			}
 		} else {
@@ -1271,11 +1335,8 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 					item.setLineCnName(profit.getLineCnName());
 				}
 			}
-			item.setAmountCrLoc(item.getAmountCrUsd().multiply(exrateC).add(item.getAmountCr()).setScale(2, RoundingMode.HALF_UP));
-			item.setRealAmountCrLoc(item.getRealAmountCrUsd().multiply(exrateC).add(item.getRealAmountCr()).setScale(2, RoundingMode.HALF_UP));
-			item.setAmountDrLoc(item.getAmountDrUsd().multiply(exrateC).add(item.getAmountDr()).setScale(2, RoundingMode.HALF_UP));
-			item.setRealAmountDrLoc(item.getRealAmountDrUsd().multiply(exrateC).add(item.getRealAmountDr()).setScale(2, RoundingMode.HALF_UP));
-			item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
+			item.setAmountProfit(item.getAmountDr().subtract(item.getAmountCr()).setScale(2, RoundingMode.HALF_UP));
+			item.setAmountProfitUsd(item.getAmountDrUsd().subtract(item.getAmountCrUsd()).setScale(2, RoundingMode.HALF_UP));
 			item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
 			item.setNotReceivedDr(item.getAmountDr().subtract(item.getRealAmountDr()).setScale(2, RoundingMode.HALF_UP));
 			item.setNotReceivedDrUsd(item.getAmountDrUsd().subtract(item.getRealAmountDrUsd()).setScale(2, RoundingMode.HALF_UP));
@@ -1316,40 +1377,64 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 		List<BoxNumberProfit> boxNumberProfitList = boxNumberProfitMapper.selectBoxNumberProfitPage(page, boxNumberProfit);
 		List<BoxNumberProfitExcel> boxNumberProfitExcelList = new ArrayList<>();
 		if (!boxNumberProfitList.isEmpty()) {
-			List<Long> ids = boxNumberProfitList.stream().map(BoxNumberProfit::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
-			List<FeeCenter> feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getIsDeleted, 0)
-				.in(FeeCenter::getPid, ids));
-			BCurrency bCurrencyD = new BCurrency();
-			bCurrencyD.setDc("D");
-			bCurrencyD.setType("1");
-			List<BCurrency> currencyListD = bCurrencyService.getExrate(bCurrencyD);
-			BCurrency bCurrencyC = new BCurrency();
-			bCurrencyC.setDc("C");
-			bCurrencyC.setType("1");
-			List<BCurrency> currencyListC = bCurrencyService.getExrate(bCurrencyC);
-			for (BoxNumberProfit item : boxNumberProfitList) {
-				if ("ASE".equals(item.getBusinessType()) || "ASI".equals(item.getBusinessType())) {
-					BigDecimal amountDr = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "D".equals(e.getDc())
-						&& "CNY".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountDr(amountDr);
-					BigDecimal amountCr = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "C".equals(e.getDc())
-						&& "CNY".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountCr(amountCr);
-					BigDecimal amountDrUsd = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "D".equals(e.getDc())
-						&& "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountDr(amountDrUsd);
-					BigDecimal amountCrUsd = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "C".equals(e.getDc())
-						&& "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountCrUsd(amountCrUsd);
-					currencyListD.stream().filter(e -> "USD".equals(e.getCode())).findFirst()
-						.ifPresent(currencyD -> item.setAmountDrLoc(amountDr.add(amountDrUsd.multiply(currencyD.getExrate()))));
-					currencyListC.stream().filter(e -> "USD".equals(e.getCode())).findFirst()
-						.ifPresent(currencyC -> item.setAmountCrLoc(amountCr.add(amountCrUsd.multiply(currencyC.getExrate()))));
-					item.setAmountProfit(amountDr.subtract(amountCr));
-					item.setAmountProfitUsd(amountDrUsd.subtract(amountCrUsd));
-					item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
+			if ("1".equals(boxNumberProfit.getMergeAmendFee())) {
+				String mblno = boxNumberProfitList.stream().map(BoxNumberProfit::getMblno).filter(Objects::nonNull).distinct().collect(Collectors.joining(","));
+				LambdaQueryWrapper<Amends> lambdaQueryWrapper = new LambdaQueryWrapper<Amends>()
+					.eq(Amends::getTenantId, AuthUtil.getTenantId())
+					.eq(Amends::getIsDeleted, 0)
+					.apply("find_in_set(mblno,'" + mblno + "')");
+				List<Amends> amendsList = amendsMapper.selectList(lambdaQueryWrapper);
+				List<FeeCenter> feeCenterList = new ArrayList<>();
+				if (!amendsList.isEmpty()) {
+					List<Long> pids = amendsList.stream().map(Amends::getId).collect(Collectors.toList());
+					if (!pids.isEmpty()) {
+						feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+							.eq(FeeCenter::getIsDeleted, 0)
+							.in(FeeCenter::getPid, pids));
+					}
+				}
+				for (BoxNumberProfit item : boxNumberProfitList) {
+					if (!amendsList.isEmpty() && !feeCenterList.isEmpty()) {
+						//获取当前业务类型所有amend
+						List<Amends> amends = amendsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).collect(Collectors.toList());
+						item.setWhetherExist(amends.size());
+						for (Amends i : amends) {
+							//人民币应收金额
+							BigDecimal feeCentersCD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//人民币应付金额
+							BigDecimal feeCentersCC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//美金应收金额
+							BigDecimal feeCentersUD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//美金应付金额
+							BigDecimal feeCentersUC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//应收合计金额
+							BigDecimal feeCentersLocD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//应收合计金额
+							BigDecimal feeCentersLocC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							item.setAmountCr(item.getAmountCr().add(feeCentersCC));
+							item.setAmountCrUsd(item.getAmountCrUsd().add(feeCentersUC));
+							item.setAmountCrLoc(item.getAmountCrLoc().add(feeCentersLocC));
+							item.setAmountDr(item.getAmountDr().add(feeCentersCD));
+							item.setAmountDrUsd(item.getAmountDrUsd().add(feeCentersUD));
+							item.setAmountDrLoc(item.getAmountDrLoc().add(feeCentersLocD));
+							item.setAmountProfit(item.getAmountDr().subtract(item.getAmountCr()));
+							item.setAmountProfitUsd(item.getAmountDrUsd().subtract(item.getAmountCrUsd()));
+							item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
+						}
+					}
 				}
 			}
 			boxNumberProfitExcelList = BeanUtil.copy(boxNumberProfitList, BoxNumberProfitExcel.class);
@@ -1387,43 +1472,67 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			}
 		}
 		List<BoxNumberProfit> boxNumberProfitList = boxNumberProfitMapper.selectBoxNumberProfitList(boxNumberProfit);
-		List<BoxNumberProfitExcel> boxNumberProfitExcelList = new ArrayList<>();
+		List<BoxNumberProfitExcel> boxNumberProfitExcelList;
 		Map<String, Object> map = new HashMap<>();
 		if (!boxNumberProfitList.isEmpty()) {
-			List<Long> ids = boxNumberProfitList.stream().map(BoxNumberProfit::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
-			List<FeeCenter> feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getIsDeleted, 0)
-				.in(FeeCenter::getPid, ids));
-			BCurrency bCurrencyD = new BCurrency();
-			bCurrencyD.setDc("D");
-			bCurrencyD.setType("1");
-			List<BCurrency> currencyListD = bCurrencyService.getExrate(bCurrencyD);
-			BCurrency bCurrencyC = new BCurrency();
-			bCurrencyC.setDc("C");
-			bCurrencyC.setType("1");
-			List<BCurrency> currencyListC = bCurrencyService.getExrate(bCurrencyC);
-			for (BoxNumberProfit item : boxNumberProfitList) {
-				if ("ASE".equals(item.getBusinessType()) || "ASI".equals(item.getBusinessType())) {
-					BigDecimal amountDr = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "D".equals(e.getDc())
-						&& "CNY".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountDr(amountDr);
-					BigDecimal amountCr = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "C".equals(e.getDc())
-						&& "CNY".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountCr(amountCr);
-					BigDecimal amountDrUsd = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "D".equals(e.getDc())
-						&& "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountDr(amountDrUsd);
-					BigDecimal amountCrUsd = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "C".equals(e.getDc())
-						&& "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountCrUsd(amountCrUsd);
-					currencyListD.stream().filter(e -> "USD".equals(e.getCode())).findFirst()
-						.ifPresent(currencyD -> item.setAmountDrLoc(amountDr.add(amountDrUsd.multiply(currencyD.getExrate()))));
-					currencyListC.stream().filter(e -> "USD".equals(e.getCode())).findFirst()
-						.ifPresent(currencyC -> item.setAmountCrLoc(amountCr.add(amountCrUsd.multiply(currencyC.getExrate()))));
-					item.setAmountProfit(amountDr.subtract(amountCr));
-					item.setAmountProfitUsd(amountDrUsd.subtract(amountCrUsd));
-					item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
+			if ("1".equals(boxNumberProfit.getMergeAmendFee())) {
+				String mblno = boxNumberProfitList.stream().map(BoxNumberProfit::getMblno).filter(Objects::nonNull).distinct().collect(Collectors.joining(","));
+				LambdaQueryWrapper<Amends> lambdaQueryWrapper = new LambdaQueryWrapper<Amends>()
+					.eq(Amends::getTenantId, AuthUtil.getTenantId())
+					.eq(Amends::getIsDeleted, 0)
+					.apply("find_in_set(mblno,'" + mblno + "')");
+				List<Amends> amendsList = amendsMapper.selectList(lambdaQueryWrapper);
+				List<FeeCenter> feeCenterList = new ArrayList<>();
+				if (!amendsList.isEmpty()) {
+					List<Long> pids = amendsList.stream().map(Amends::getId).collect(Collectors.toList());
+					if (!pids.isEmpty()) {
+						feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+							.eq(FeeCenter::getIsDeleted, 0)
+							.in(FeeCenter::getPid, pids));
+					}
+				}
+				for (BoxNumberProfit item : boxNumberProfitList) {
+					if (!amendsList.isEmpty() && !feeCenterList.isEmpty()) {
+						//获取当前业务类型所有amend
+						List<Amends> amends = amendsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).collect(Collectors.toList());
+						item.setWhetherExist(amends.size());
+						for (Amends i : amends) {
+							//人民币应收金额
+							BigDecimal feeCentersCD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//人民币应付金额
+							BigDecimal feeCentersCC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//美金应收金额
+							BigDecimal feeCentersUD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//美金应付金额
+							BigDecimal feeCentersUC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//应收合计金额
+							BigDecimal feeCentersLocD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//应收合计金额
+							BigDecimal feeCentersLocC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							item.setAmountCr(item.getAmountCr().add(feeCentersCC));
+							item.setAmountCrUsd(item.getAmountCrUsd().add(feeCentersUC));
+							item.setAmountCrLoc(item.getAmountCrLoc().add(feeCentersLocC));
+							item.setAmountDr(item.getAmountDr().add(feeCentersCD));
+							item.setAmountDrUsd(item.getAmountDrUsd().add(feeCentersUD));
+							item.setAmountDrLoc(item.getAmountDrLoc().add(feeCentersLocD));
+							item.setAmountProfit(item.getAmountDr().subtract(item.getAmountCr()));
+							item.setAmountProfitUsd(item.getAmountDrUsd().subtract(item.getAmountCrUsd()));
+							item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
+						}
+					}
 				}
 			}
 			boxNumberProfitExcelList = BeanUtil.copy(boxNumberProfitList, BoxNumberProfitExcel.class);
@@ -1502,40 +1611,64 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 		List<BoxNumberProfit> boxNumberProfitList = boxNumberProfitMapper.selectBoxNumberProfitList(boxNumberProfit);
 		List<BoxNumberProfitExcel> boxNumberProfitExcelList = new ArrayList<>();
 		if (!boxNumberProfitList.isEmpty()) {
-			List<Long> ids = boxNumberProfitList.stream().map(BoxNumberProfit::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
-			List<FeeCenter> feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getIsDeleted, 0)
-				.in(FeeCenter::getPid, ids));
-			BCurrency bCurrencyD = new BCurrency();
-			bCurrencyD.setDc("D");
-			bCurrencyD.setType("1");
-			List<BCurrency> currencyListD = bCurrencyService.getExrate(bCurrencyD);
-			BCurrency bCurrencyC = new BCurrency();
-			bCurrencyC.setDc("C");
-			bCurrencyC.setType("1");
-			List<BCurrency> currencyListC = bCurrencyService.getExrate(bCurrencyC);
-			for (BoxNumberProfit item : boxNumberProfitList) {
-				if ("ASE".equals(item.getBusinessType()) || "ASI".equals(item.getBusinessType())) {
-					BigDecimal amountDr = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "D".equals(e.getDc())
-						&& "CNY".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountDr(amountDr);
-					BigDecimal amountCr = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "C".equals(e.getDc())
-						&& "CNY".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountCr(amountCr);
-					BigDecimal amountDrUsd = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "D".equals(e.getDc())
-						&& "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountDr(amountDrUsd);
-					BigDecimal amountCrUsd = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "C".equals(e.getDc())
-						&& "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountCrUsd(amountCrUsd);
-					currencyListD.stream().filter(e -> "USD".equals(e.getCode())).findFirst()
-						.ifPresent(currencyD -> item.setAmountDrLoc(amountDr.add(amountDrUsd.multiply(currencyD.getExrate()))));
-					currencyListC.stream().filter(e -> "USD".equals(e.getCode())).findFirst()
-						.ifPresent(currencyC -> item.setAmountCrLoc(amountCr.add(amountCrUsd.multiply(currencyC.getExrate()))));
-					item.setAmountProfit(amountDr.subtract(amountCr));
-					item.setAmountProfitUsd(amountDrUsd.subtract(amountCrUsd));
-					item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
+			if ("1".equals(boxNumberProfit.getMergeAmendFee())) {
+				String mblno = boxNumberProfitList.stream().map(BoxNumberProfit::getMblno).filter(Objects::nonNull).distinct().collect(Collectors.joining(","));
+				LambdaQueryWrapper<Amends> lambdaQueryWrapper = new LambdaQueryWrapper<Amends>()
+					.eq(Amends::getTenantId, AuthUtil.getTenantId())
+					.eq(Amends::getIsDeleted, 0)
+					.apply("find_in_set(mblno,'" + mblno + "')");
+				List<Amends> amendsList = amendsMapper.selectList(lambdaQueryWrapper);
+				List<FeeCenter> feeCenterList = new ArrayList<>();
+				if (!amendsList.isEmpty()) {
+					List<Long> pids = amendsList.stream().map(Amends::getId).collect(Collectors.toList());
+					if (!pids.isEmpty()) {
+						feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+							.eq(FeeCenter::getIsDeleted, 0)
+							.in(FeeCenter::getPid, pids));
+					}
+				}
+				for (BoxNumberProfit item : boxNumberProfitList) {
+					if (!amendsList.isEmpty() && !feeCenterList.isEmpty()) {
+						//获取当前业务类型所有amend
+						List<Amends> amends = amendsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).collect(Collectors.toList());
+						item.setWhetherExist(amends.size());
+						for (Amends i : amends) {
+							//人民币应收金额
+							BigDecimal feeCentersCD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//人民币应付金额
+							BigDecimal feeCentersCC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//美金应收金额
+							BigDecimal feeCentersUD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//美金应付金额
+							BigDecimal feeCentersUC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//应收合计金额
+							BigDecimal feeCentersLocD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//应收合计金额
+							BigDecimal feeCentersLocC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							item.setAmountCr(item.getAmountCr().add(feeCentersCC));
+							item.setAmountCrUsd(item.getAmountCrUsd().add(feeCentersUC));
+							item.setAmountCrLoc(item.getAmountCrLoc().add(feeCentersLocC));
+							item.setAmountDr(item.getAmountDr().add(feeCentersCD));
+							item.setAmountDrUsd(item.getAmountDrUsd().add(feeCentersUD));
+							item.setAmountDrLoc(item.getAmountDrLoc().add(feeCentersLocD));
+							item.setAmountProfit(item.getAmountDr().subtract(item.getAmountCr()));
+							item.setAmountProfitUsd(item.getAmountDrUsd().subtract(item.getAmountCrUsd()));
+							item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
+						}
+					}
 				}
 			}
 			boxNumberProfitExcelList = BeanUtil.copy(boxNumberProfitList, BoxNumberProfitExcel.class);
@@ -1550,40 +1683,64 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 		List<BoxNumberProfit> boxNumberProfitList = boxNumberProfitMapper.selectBoxNumberProfitList(boxNumberProfit);
 		List<Map<String, Object>> mapList = new ArrayList<>();
 		if (!boxNumberProfitList.isEmpty()) {
-			List<Long> ids = boxNumberProfitList.stream().map(BoxNumberProfit::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
-			List<FeeCenter> feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getIsDeleted, 0)
-				.in(FeeCenter::getPid, ids));
-			BCurrency bCurrencyD = new BCurrency();
-			bCurrencyD.setDc("D");
-			bCurrencyD.setType("1");
-			List<BCurrency> currencyListD = bCurrencyService.getExrate(bCurrencyD);
-			BCurrency bCurrencyC = new BCurrency();
-			bCurrencyC.setDc("C");
-			bCurrencyC.setType("1");
-			List<BCurrency> currencyListC = bCurrencyService.getExrate(bCurrencyC);
-			for (BoxNumberProfit item : boxNumberProfitList) {
-				if ("ASE".equals(item.getBusinessType()) || "ASI".equals(item.getBusinessType())) {
-					BigDecimal amountDr = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "D".equals(e.getDc())
-						&& "CNY".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountDr(amountDr);
-					BigDecimal amountCr = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "C".equals(e.getDc())
-						&& "CNY".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountCr(amountCr);
-					BigDecimal amountDrUsd = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "D".equals(e.getDc())
-						&& "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountDr(amountDrUsd);
-					BigDecimal amountCrUsd = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()) && "C".equals(e.getDc())
-						&& "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					item.setAmountCrUsd(amountCrUsd);
-					currencyListD.stream().filter(e -> "USD".equals(e.getCode())).findFirst()
-						.ifPresent(currencyD -> item.setAmountDrLoc(amountDr.add(amountDrUsd.multiply(currencyD.getExrate()))));
-					currencyListC.stream().filter(e -> "USD".equals(e.getCode())).findFirst()
-						.ifPresent(currencyC -> item.setAmountCrLoc(amountCr.add(amountCrUsd.multiply(currencyC.getExrate()))));
-					item.setAmountProfit(amountDr.subtract(amountCr));
-					item.setAmountProfitUsd(amountDrUsd.subtract(amountCrUsd));
-					item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
+			if ("1".equals(boxNumberProfit.getMergeAmendFee())) {
+				String mblno = boxNumberProfitList.stream().map(BoxNumberProfit::getMblno).filter(Objects::nonNull).distinct().collect(Collectors.joining(","));
+				LambdaQueryWrapper<Amends> lambdaQueryWrapper = new LambdaQueryWrapper<Amends>()
+					.eq(Amends::getTenantId, AuthUtil.getTenantId())
+					.eq(Amends::getIsDeleted, 0)
+					.apply("find_in_set(mblno,'" + mblno + "')");
+				List<Amends> amendsList = amendsMapper.selectList(lambdaQueryWrapper);
+				List<FeeCenter> feeCenterList = new ArrayList<>();
+				if (!amendsList.isEmpty()) {
+					List<Long> pids = amendsList.stream().map(Amends::getId).collect(Collectors.toList());
+					if (!pids.isEmpty()) {
+						feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+							.eq(FeeCenter::getIsDeleted, 0)
+							.in(FeeCenter::getPid, pids));
+					}
+				}
+				for (BoxNumberProfit item : boxNumberProfitList) {
+					if (!amendsList.isEmpty() && !feeCenterList.isEmpty()) {
+						//获取当前业务类型所有amend
+						List<Amends> amends = amendsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).collect(Collectors.toList());
+						item.setWhetherExist(amends.size());
+						for (Amends i : amends) {
+							//人民币应收金额
+							BigDecimal feeCentersCD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//人民币应付金额
+							BigDecimal feeCentersCC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//美金应收金额
+							BigDecimal feeCentersUD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//美金应付金额
+							BigDecimal feeCentersUC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//应收合计金额
+							BigDecimal feeCentersLocD = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							//应收合计金额
+							BigDecimal feeCentersLocC = feeCenterList.stream()
+								.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+							item.setAmountCr(item.getAmountCr().add(feeCentersCC));
+							item.setAmountCrUsd(item.getAmountCrUsd().add(feeCentersUC));
+							item.setAmountCrLoc(item.getAmountCrLoc().add(feeCentersLocC));
+							item.setAmountDr(item.getAmountDr().add(feeCentersCD));
+							item.setAmountDrUsd(item.getAmountDrUsd().add(feeCentersUD));
+							item.setAmountDrLoc(item.getAmountDrLoc().add(feeCentersLocD));
+							item.setAmountProfit(item.getAmountDr().subtract(item.getAmountCr()));
+							item.setAmountProfitUsd(item.getAmountDrUsd().subtract(item.getAmountCrUsd()));
+							item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
+						}
+					}
 				}
 			}
 			if ("1".equals(boxNumberProfit.getType())) {
@@ -2001,7 +2158,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 		lambdaQueryWrapper.eq(Bills::getTenantId, AuthUtil.getTenantId())
 			.eq(Bills::getIsDeleted, 0)
 			.eq(Bills::getBranchId, AuthUtil.getDeptId())
-			.apply("DATE_FORMAT(eta,'%Y-%m-%d') > '" + sdf.format(date1) + "' and DATE_FORMAT(eta,'%Y-%m-%d') <= '" + sdf.format(date)+"'");
+			.apply("DATE_FORMAT(eta,'%Y-%m-%d') > '" + sdf.format(date1) + "' and DATE_FORMAT(eta,'%Y-%m-%d') <= '" + sdf.format(date) + "'");
 		map.put("arrivalReminder", billsMapper.selectCount(lambdaQueryWrapper));
 		return R.data(map);
 	}
@@ -2027,7 +2184,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			.and(ObjectUtils.isNotNull(bills.getCorpCnName()), i -> i.like(Bills::getCorpCnName, bills.getCorpCnName()).or()
 				.like(Bills::getCorpEnName, bills.getCorpCnName()))
 			.like(ObjectUtils.isNotNull(bills.getBillNo()), Bills::getBillNo, bills.getBillNo())
-			.apply("DATE_FORMAT(eta,'%Y-%m-%d') > '" + sdf.format(date1) + "' and DATE_FORMAT(eta,'%Y-%m-%d') <= '" + sdf.format(date)+"'");
+			.apply("DATE_FORMAT(eta,'%Y-%m-%d') > '" + sdf.format(date1) + "' and DATE_FORMAT(eta,'%Y-%m-%d') <= '" + sdf.format(date) + "'");
 		IPage<Bills> billsIPage = billsMapper.selectPage(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(billsIPage);
 	}

+ 10 - 2
blade-service/blade-los/src/main/java/org/springblade/los/view/mapper/FinanceProfitMapper.xml

@@ -75,7 +75,11 @@
         seb.real_amount_cr_usd AS realAmountCrUsd,
         seb.amount_cr AS amountCr,
         seb.real_amount_cr AS realAmountCr,
-        seb.amount_profit_loc AS amountProfitLoc
+        seb.amount_profit_loc AS amountProfitLoc,
+        seb.amount_dr_loc AS amountDrLoc,
+        seb.real_amount_dr_loc AS realAmountDrLoc,
+        seb.amount_cr_loc AS amountCrLoc,
+        seb.real_amount_cr_loc AS realAmountCrLoc
         FROM
         los_finance_profit seb
         WHERE
@@ -193,7 +197,11 @@
         seb.real_amount_cr_usd AS realAmountCrUsd,
         seb.amount_cr AS amountCr,
         seb.real_amount_cr AS realAmountCr,
-        seb.amount_profit_loc AS amountProfitLoc
+        seb.amount_profit_loc AS amountProfitLoc,
+        seb.amount_dr_loc AS amountDrLoc,
+        seb.real_amount_dr_loc AS realAmountDrLoc,
+        seb.amount_cr_loc AS amountCrLoc,
+        seb.real_amount_cr_loc AS realAmountCrLoc
         FROM
         los_finance_profit seb
         WHERE

Some files were not shown because too many files changed in this diff