Explorar el Código

2024年1月26日13:36:37

纪新园 hace 1 año
padre
commit
30ffebbbe7

+ 90 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/aea/entity/AeaBills.java

@@ -25,6 +25,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.los.business.files.entity.FilesCenter;
+import org.springblade.los.business.sea.dto.ContainersReports;
+import org.springblade.los.finance.fee.dto.FeeCenterReports;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -1169,5 +1171,93 @@ public class AeaBills implements Serializable {
 	@ApiModelProperty(value = "默认团队名")
 	private String teamName;
 
+	@TableField(exist = false)
+	private String FM;
+
+	/**
+	 * 账户银行
+	 */
+	@TableField(exist = false)
+	private String accountBank;
+	/**
+	 * 银行账号
+	 */
+	@TableField(exist = false)
+	private String accountNo;
+
+	/**
+	 * 地址
+	 */
+	@TableField(exist = false)
+	private String address;
+	/**
+	 * Swift Code
+	 */
+	@TableField(exist = false)
+	private String swiftCode;
+
+	/**
+	 * Swift Code
+	 */
+	@TableField(exist = false)
+	private BigDecimal boxWeightSum;
+	/**
+	 * 本位币利润(CNY)
+	 */
+	@TableField(exist = false)
+	private BigDecimal amountProfitUpdate;
+	/**
+	 * 利润(USD)
+	 */
+	@TableField(exist = false)
+	private BigDecimal amountProfitUsdUpdate;
+	/**
+	 * 综合利润(CNY)
+	 */
+	@TableField(exist = false)
+	private BigDecimal amountProfitLocUpdate;
+
+	/**
+	 * 责任方
+	 */
+	@TableField(exist = false)
+	private String responsibleParty;
+
+	/**
+	 * analysis
+	 */
+	@TableField(exist = false)
+	private String analysis;
+
+	/**
+	 * 利润率
+	 */
+	@TableField(exist = false)
+	private String profitMargin;
+
+	/**
+	 * 毛利率
+	 */
+	@TableField(exist = false)
+	private BigDecimal grossMargin;
+
+	/**
+	 * 汇率
+	 */
+	@TableField(exist = false)
+	private BigDecimal rate;
+
+	/**
+	 * 配箱报表
+	 */
+	@TableField(exist = false)
+	private List<ContainersReports> containersReportsList;
+
+	/**
+	 * 物流-费用中心(总)
+	 */
+	@TableField(exist = false)
+	private List<FeeCenterReports> feeCenterList;
+
 
 }

+ 10 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/statisticAnalysis/FinanceProfit.java

@@ -50,4 +50,14 @@ public class FinanceProfit {
 	 */
 	private String salesman;
 
+	/**
+	 * 起运港
+	 */
+	private String pod;
+
+	/**
+	 * 目的港
+	 */
+	private String pol;
+
 }

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

@@ -27,6 +27,8 @@ public class MagicValues {
 	public static final String MASTER_BILLS = "MASTER 提单";
 	public static final String HYCK = "HYCK";
 	public static final String HYJK = "HYJK";
+	public static final String KYCK = "KYCK";
+	public static final String KYJK = "KYJK";
 	public static final String AMEND = "AMEND";
 	public static final String AMEND_SI = "AMENDSI";
 	public static final String SE = "SE";

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

@@ -35,6 +35,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.aea.entity.AeaBills;
+import org.springblade.los.business.aea.service.IAeaBillsService;
 import org.springblade.los.business.amends.entity.Amends;
 import org.springblade.los.business.amends.service.IAmendsService;
 import org.springblade.los.business.sea.dto.ContainersReports;
@@ -85,6 +87,8 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 
 	private final IBillsService billsService;
 
+	private final IAeaBillsService aeaBillsService;
+
 	private final IBCorpsBankService bankService;
 
 	private final IFeeCenterService feeCenterService;
@@ -2157,6 +2161,606 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			} else {
 				map.put(MagicValues.DATA, list);
 			}
+		}else if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.SALES_REPORT.equals(groupCode) && (MagicValues.KYCK.equals(type) || MagicValues.KYJK.equals(type))) {
+			List<AeaBills> list = new ArrayList<>();
+			AeaBills bills = aeaBillsService.getById(billId);
+			if (bills != null) {
+				if (bCurrency != null) {
+					bills.setRate(bCurrency.getExrate());
+				} else {
+					bills.setRate(new BigDecimal(MagicValues.ZERO));
+				}
+				if (ObjectUtils.isNotNull(bills.getAmountProfitLoc()) && ObjectUtils.isNotNull(bills.getAmountDrLoc())) {
+					if (bills.getAmountProfitLoc().compareTo(new BigDecimal(MagicValues.ZERO)) == 0 ||
+						bills.getAmountDrLoc().compareTo(new BigDecimal(MagicValues.ZERO)) == 0) {
+						bills.setGrossMargin(new BigDecimal(MagicValues.ZERO));
+					} else {
+						bills.setGrossMargin(bills.getAmountProfitLoc().divide(bills.getAmountDrLoc(), 4, BigDecimal.ROUND_HALF_UP));
+					}
+				} else {
+					bills.setGrossMargin(new BigDecimal(MagicValues.ZERO));
+				}
+				if (MagicValues.MM.equals(bills.getBillType()) || MagicValues.DD.equals(bills.getBillType())) {
+					List<AeaBills> billsList = aeaBillsService.list(new LambdaQueryWrapper<AeaBills>()
+						.eq(AeaBills::getMasterId, bills.getId())
+						.eq(AeaBills::getTenantId, AuthUtil.getTenantId())
+						.eq(AeaBills::getIsDeleted, 0));
+					if (billsList.size() > 0) {
+						List<Long> ids = billsList.stream().map(AeaBills::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 (AeaBills item : billsList) {
+								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 -> MagicValues.D.equals(e.getDc()) && e.getPid().equals(item.getId()) &&
+											e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.D.equals(e.getDc()) && e.getPid().equals(item.getId()) &&
+											e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.C.equals(e.getDc()) && e.getPid().equals(item.getId()) &&
+											e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.C.equals(e.getDc()) && e.getPid().equals(item.getId()) &&
+											e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 (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());
+							List<FeeCenter> feeCenterListD = feeCenterList.stream()
+								.filter(e -> MagicValues.D.equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+									e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.D.equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+									e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.C.equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+									e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.C.equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+									e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 (MagicValues.MH.equals(bills.getBillType())) {
+					AeaBills details = aeaBillsService.getOne(new LambdaQueryWrapper<AeaBills>()
+						.eq(AeaBills::getId, bills.getMasterId())
+						.eq(AeaBills::getTenantId, AuthUtil.getTenantId())
+						.eq(AeaBills::getIsDeleted, 0));
+					if (details != null) {
+						List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+							.eq(FeeCenter::getPid, bills.getId())
+							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+							.eq(FeeCenter::getIsDeleted, 0));
+						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());
+								List<FeeCenter> feeCenterListD = feeCenterList.stream()
+									.filter(e -> MagicValues.D.equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.D.equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.C.equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.C.equals(e.getDc()) && e.getPid().equals(bills.getId()) &&
+										e.getFeeId().equals(fee.getFeeId()) && MagicValues.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));
+						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());
+							List<FeeCenter> feeCenterListD = feeCenterListMh.stream()
+								.filter(e -> MagicValues.D.equals(e.getDc()) && e.getPid().equals(details.getId()) &&
+									e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.D.equals(e.getDc()) && e.getPid().equals(details.getId()) &&
+									e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.C.equals(e.getDc()) && e.getPid().equals(details.getId()) &&
+									e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 -> MagicValues.C.equals(e.getDc()) && e.getPid().equals(details.getId()) &&
+									e.getFeeId().equals(fee.getFeeId()) && MagicValues.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 (AeaBills 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()) && MagicValues.D.equals(e.getDc()))
+								.findFirst().orElse(null);
+							FeeCenterReports feeCenterReportsC = item.getFeeCenterList().stream()
+								.filter(e -> e.getFeeCnName().equals(fee.getFeeCnName()) && MagicValues.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(MagicValues.DATA, list);
+			}
+		} else if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.MASTER_BILLS.equals(groupCode) && (MagicValues.KYCK.equals(type) || MagicValues.KYJK.equals(type))) {
+			AeaBills bills = aeaBillsService.getById(billId);
+			if (bills != null) {
+//				bills.setFM(MagicValues.FM);
+//				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				BigDecimal boxWeightSum = BigDecimal.ZERO;
+				List<ContainersReports> containersReportsList = new ArrayList<>();
+				List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
+					.eq(Containers::getTenantId, AuthUtil.getTenantId())
+					.eq(Containers::getIsDeleted, 0)
+					.eq(Containers::getPid, bills.getId()));
+				List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+					.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
+					.eq(PreContainers::getIsDeleted, 0)
+					.eq(PreContainers::getPid, bills.getId()));
+				if (containersList.size() > 0) {
+					boxWeightSum = boxWeightSum.add(containersList.get(0).getGrossWeight());
+					if (preContainersList.size() > 0) {
+						List<PreContainers> preContainers = preContainersList.stream().filter(e -> e.getCntrTypeCode().equals(containersList.get(0).getCntrTypeCode()))
+							.collect(Collectors.toList());
+						if (preContainers.size() > 0) {
+							boxWeightSum = boxWeightSum.add(containersList.get(0).getGrossWeight());
+						}
+					}
+				}
+				bills.setBoxWeightSum(boxWeightSum);
+				for (Containers item : containersList) {
+					ContainersReports containersReports = new ContainersReports();
+					BeanUtil.copyProperties(item, containersReports);
+					if (preContainersList.size() > 0) {
+						List<PreContainers> preContainers = preContainersList.stream().filter(e -> e.getCntrTypeCode().equals(item.getCntrTypeCode()))
+							.collect(Collectors.toList());
+						if (preContainers.size() > 0) {
+							containersReports.setBoxWeight(preContainers.get(0).getGrossWeight());
+						}
+					}
+					containersReportsList.add(containersReports);
+				}
+				bills.setContainersReportsList(containersReportsList);
+				map.put(MagicValues.DATA, bills);
+			} else {
+				map.put(MagicValues.DATA, null);
+			}
+		} else if (MagicValues.DOCUMENT.equals(reportCode) && MagicValues.DISPATCH_NOTICE.equals(groupCode) && (MagicValues.KYCK.equals(type) || MagicValues.KYJK.equals(type))) {
+			AeaBills bills = aeaBillsService.getById(billId);
+			if (bills != null) {
+//				bills.setFM(MagicValues.FM);
+//				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				map.put(MagicValues.DATA, bills);
+			} else {
+				map.put(MagicValues.DATA, null);
+			}
+		} else if (MagicValues.DOCUMENT.equals(reportCode) && MagicValues.INCOMING_NOTIFICATION.equals(groupCode) && (MagicValues.KYCK.equals(type) || MagicValues.KYJK.equals(type))) {
+			AeaBills bills = aeaBillsService.getById(billId);
+			if (bills != null) {
+//				bills.setFM(MagicValues.FM);
+//				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				map.put(MagicValues.DATA, bills);
+			} else {
+				map.put(MagicValues.DATA, null);
+			}
+		} else if (MagicValues.COST.equals(reportCode) && MagicValues.RECEIVABLE.equals(groupCode) && (MagicValues.KYCK.equals(type) || MagicValues.KYJK.equals(type))) {
+			AeaBills bills = aeaBillsService.getById(billId);
+			if (bills != null) {
+//				bills.setFM(MagicValues.FM);
+//				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				List<FeeCenter> feeCenterList;
+				List<Long> ids = new ArrayList<>();
+				if (MagicValues.MM.equals(bills.getBillType())) {
+					List<Bills> billsList = billsService.list(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) {
+						ids = billsList.stream().map(Bills::getId).collect(Collectors.toList());
+					}
+				}
+				ids.add(0, bills.getId());
+				LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getDc, MagicValues.D)
+					.eq(FeeCenter::getIsDeleted, 0);
+				lambdaQueryWrapper.in(FeeCenter::getPid, ids);
+				if (ObjectUtils.isNotNull(corpIds)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCorpId, corpIds);
+				} else {
+					if (ObjectUtils.isNotNull(itemIds)) {
+						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
+					}
+				}
+				feeCenterList = feeCenterService.list(lambdaQueryWrapper);
+				BigDecimal amountDr = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountCr = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountProfit;
+				BigDecimal amountDrUsd = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountCrUsd = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountProfitUsd;
+				BigDecimal amountDrLoc = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountCrLoc = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountProfitLoc;
+				List<FeeCenterReports> feeCenterReportsList = new ArrayList<>();
+				for (FeeCenter item : feeCenterList) {
+					if (MagicValues.D.equals(item.getDc())) {
+						if (MagicValues.USD.equals(item.getCurCode())) {
+							amountDrUsd = amountDrUsd.add(item.getAmount());
+						} else if (MagicValues.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 (MagicValues.USD.equals(item.getCurCode())) {
+							amountCrUsd = amountCrUsd.add(item.getAmount());
+						} else if (MagicValues.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 (MagicValues.CNY.equals(item.getCurCode())) {
+						feeCenterReports.setAmountD(item.getAmount());
+					} else {
+						feeCenterReports.setAmountUsdD(item.getAmount());
+					}
+					feeCenterReports.setAmountLocD(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(MagicValues.USD, amountDrUsd, MagicValues.D)).add(amountDr);
+				amountCrLoc = amountCrLoc.add(ibCurrencyService.converterCny(MagicValues.USD, amountCrUsd, MagicValues.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);
+				List<BCorpsBank> bCorpsBanks = bankService.list(new LambdaQueryWrapper<BCorpsBank>()
+					.eq(BCorpsBank::getTenantId, AuthUtil.getTenantId())
+					.eq(BCorpsBank::getIsDeleted, 0)
+					.eq(BCorpsBank::getPid, bills.getCorpId()));
+				if (bCorpsBanks.size() > 0) {
+					bills.setAccountBank(bCorpsBanks.get(0).getAccountBank());
+					bills.setAccountNo(bCorpsBanks.get(0).getAccountNo());
+					bills.setAddress(bCorpsBanks.get(0).getAddress());
+					bills.setSwiftCode(bCorpsBanks.get(0).getSwiftCode());
+				}
+				map.put(MagicValues.DATA, bills);
+			} else {
+				map.put(MagicValues.DATA, null);
+			}
+		} else if (MagicValues.COST.equals(reportCode) && MagicValues.MEET.equals(groupCode) && (MagicValues.KYCK.equals(type) || MagicValues.KYJK.equals(type))) {
+			AeaBills bills = aeaBillsService.getById(billId);
+			if (bills != null) {
+//				bills.setFM(MagicValues.FM);
+//				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				List<FeeCenter> feeCenterList;
+				List<Long> ids = new ArrayList<>();
+				if (MagicValues.MM.equals(bills.getBillType())) {
+					List<Bills> billsList = billsService.list(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) {
+						ids = billsList.stream().map(Bills::getId).collect(Collectors.toList());
+					}
+				}
+				ids.add(0, bills.getId());
+				LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getDc, MagicValues.C)
+					.eq(FeeCenter::getIsDeleted, 0);
+				lambdaQueryWrapper.in(FeeCenter::getPid, ids);
+				if (ObjectUtils.isNotNull(corpIds)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCorpId, corpIds);
+				} else {
+					if (ObjectUtils.isNotNull(itemIds)) {
+						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
+					}
+				}
+				feeCenterList = feeCenterService.list(lambdaQueryWrapper);
+				BigDecimal amountDr = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountCr = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountProfit;
+				BigDecimal amountDrUsd = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountCrUsd = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountProfitUsd;
+				BigDecimal amountDrLoc = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountCrLoc = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountProfitLoc;
+				List<FeeCenterReports> feeCenterReportsList = new ArrayList<>();
+				for (FeeCenter item : feeCenterList) {
+					if (MagicValues.D.equals(item.getDc())) {
+						if (MagicValues.USD.equals(item.getCurCode())) {
+							amountDrUsd = amountDrUsd.add(item.getAmount());
+						} else if (MagicValues.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 (MagicValues.USD.equals(item.getCurCode())) {
+							amountCrUsd = amountCrUsd.add(item.getAmount());
+						} else if (MagicValues.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 (MagicValues.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(MagicValues.USD, amountDrUsd, MagicValues.D)).add(amountDr);
+				amountCrLoc = amountCrLoc.add(ibCurrencyService.converterCny(MagicValues.USD, amountCrUsd, MagicValues.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(MagicValues.DATA, bills);
+			} else {
+				map.put(MagicValues.DATA, null);
+			}
 		}
 		return R.data(map);
 	}