纪新园 1 год назад
Родитель
Сommit
ad26ae28cd
20 измененных файлов с 605 добавлено и 83 удалено
  1. 7 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/aea/entity/AeaBills.java
  2. 8 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/customsDeclaration/entity/CustomsDeclaration.java
  3. 7 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  4. 7 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/invoices/entity/FinInvoices.java
  5. 7 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/entity/FinStlBills.java
  6. 168 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/statisticAnalysis/FinanceProfit.java
  7. 66 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
  8. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/MagicValues.java
  9. 37 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  10. 44 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/aea/service/impl/AeaBillsServiceImpl.java
  11. 71 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/amends/service/impl/AmendsServiceImpl.java
  12. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.java
  13. 47 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.xml
  14. 45 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  15. 60 71
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java
  16. 6 0
      blade-service/blade-los/src/main/java/org/springblade/los/excel/FeeCountByCorpCExcel.java
  17. 6 0
      blade-service/blade-los/src/main/java/org/springblade/los/excel/FeeCountByCorpDExcel.java
  18. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/IStatisticAnalysisService.java
  19. 4 3
      blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java
  20. 9 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

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

@@ -28,6 +28,7 @@ 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.springblade.system.entity.Dept;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -1271,5 +1272,11 @@ public class AeaBills implements Serializable {
 	@TableField(exist = false)
 	private List<FeeCenterReports> feeCenterList;
 
+	/**
+	 * 报表表头信息
+	 */
+	@TableField(exist = false)
+	private Dept dept;
+
 
 }

+ 8 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/customsDeclaration/entity/CustomsDeclaration.java

@@ -28,6 +28,7 @@ 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.springblade.system.entity.Dept;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -756,4 +757,11 @@ public class CustomsDeclaration implements Serializable {
 	private List<FeeCenterReports> feeCenterList;
 
 
+	/**
+	 * 报表表头信息
+	 */
+	@TableField(exist = false)
+	private Dept dept;
+
+
 }

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

@@ -30,6 +30,7 @@ import org.springblade.los.business.sea.dto.WaitingBox;
 import org.springblade.los.edi.entity.EdiTypes;
 import org.springblade.los.finance.fee.dto.FeeCenterReports;
 import org.springblade.los.finance.fee.entity.FeeCenter;
+import org.springblade.system.entity.Dept;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -1661,4 +1662,10 @@ public class Bills implements Serializable {
 	@ApiModelProperty(value = "teu箱数")
 	private Integer teu;
 
+	/**
+	 * 报表表头信息
+	 */
+	@TableField(exist = false)
+	private Dept dept;
+
 }

+ 7 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/invoices/entity/FinInvoices.java

@@ -24,6 +24,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.los.finance.stl.dto.FinStlBillsItemsReports;
+import org.springblade.system.entity.Dept;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -626,5 +627,11 @@ public class FinInvoices implements Serializable {
 	@TableField(exist = false)
 	private BigDecimal amountCUsd;
 
+	/**
+	 * 报表表头信息
+	 */
+	@TableField(exist = false)
+	private Dept dept;
+
 
 }

+ 7 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/entity/FinStlBills.java

@@ -25,6 +25,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.los.finance.stl.dto.FinStlBillsItemsReports;
+import org.springblade.system.entity.Dept;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -628,5 +629,11 @@ public class FinStlBills implements Serializable {
 	@TableField(exist = false)
 	private String fromTel;
 
+	/**
+	 * 报表表头信息
+	 */
+	@TableField(exist = false)
+	private Dept dept;
+
 
 }

+ 168 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/statisticAnalysis/FinanceProfit.java

@@ -2,6 +2,8 @@ package org.springblade.los.statisticAnalysis;
 
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * @author :jixinyuan
  * @date : 2024/1/26
@@ -33,7 +35,7 @@ public class FinanceProfit {
 	/**
 	 * 往来单位Id
 	 */
-	private String corpId;
+	private Long corpId;
 
 	/**
 	 * 往来单位
@@ -60,4 +62,169 @@ public class FinanceProfit {
 	 */
 	private String pol;
 
+	/**
+	 * 中文船名
+	 */
+	private String vesselCnName;
+
+	/**
+	 * 中文船名
+	 */
+	private Long vesselId;
+
+	/**
+	 * 航次
+	 */
+	private String voyageNo;
+
+	/**
+	 * 航线 id
+	 */
+	private Long lineId;
+
+	/**
+	 * 核算部门
+	 */
+	private String accDeptName;
+
+	/**
+	 * 核算部门
+	 */
+	private Long accDeptId;
+
+	/**
+	 * 航线中文名称
+	 */
+	private String lineCnName;
+
+	/**
+	 * 船公司中文名称
+	 */
+	private String carrierCnName;
+
+	/**
+	 * 船公司
+	 */
+	private Long carrierId;
+
+	/**
+	 * 操作员
+	 */
+	private String operatorName;
+
+	/**
+	 * 应收(USD)
+	 */
+	private BigDecimal amountDrUsd;
+
+	/**
+	 * 实际实收(USD)
+	 */
+	private BigDecimal realAmountDrUsd;
+
+	/**
+	 * 应收(CNY)
+	 */
+	private BigDecimal amountDr;
+
+	/**
+	 * 实际实收(CNY)
+	 */
+	private BigDecimal realAmountDr;
+
+	/**
+	 * 合计应收
+	 */
+	private BigDecimal amountDrLoc;
+
+	/**
+	 * 实际合计应收
+	 */
+	private BigDecimal realAmountDrLoc;
+
+	/**
+	 * 应付(USD)
+	 */
+	private BigDecimal amountCrUsd;
+
+	/**
+	 * 实际应付(USD)
+	 */
+	private BigDecimal realAmountCrUsd;
+
+	/**
+	 * 应付(CNY)
+	 */
+	private BigDecimal amountCr;
+
+	/**
+	 * 实际应付(CNY)
+	 */
+	private BigDecimal realAmountCr;
+
+	/**
+	 * 合计应付
+	 */
+	private BigDecimal amountCrLoc;
+
+	/**
+	 * 实际合计应付
+	 */
+	private BigDecimal realAmountCrLoc;
+
+	/**
+	 * 单票利润
+	 */
+	private BigDecimal amountProfitLoc;
+
+	/**
+	 * 实际单票利润
+	 */
+	private BigDecimal realAmountProfitLoc;
+
+	/**
+	 * 委托人
+	 */
+	private String client;
+
+	/**
+	 * 业务来源
+	 */
+	private String srcType;
+
+	/**
+	 * 来源 id
+	 */
+	private Long srcId;
+
+	/**
+	 * 单票费用合并
+	 */
+	private String costMerge;
+
+	/**
+	 * 相同业务客户合并
+	 */
+	private String consistentCorpMerge;
+
+	/**
+	 * 不同业务客户合并
+	 */
+	private String inconsistentCorpMerge;
+
+	/**
+	 * 只显示整票审核业务
+	 */
+	private String examine;
+
+	/**
+	 * 合并amend费用
+	 */
+	private String mergeAmendFee;
+
+	/**
+	 * 按审核日期
+	 */
+	private String examineDate;
+
 }

+ 66 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java

@@ -145,5 +145,71 @@ public class Dept implements Serializable {
 	@ApiModelProperty(value = "装货港代码")
 	private String polCode;
 
+	/**
+	 * 英文全称
+	 */
+	@ApiModelProperty(value = "英文全称")
+	private String englishFullName;
+
+	/**
+	 * 联系电话
+	 */
+	@ApiModelProperty(value = "联系电话")
+	private String tel;
+
+	/**
+	 * fax
+	 */
+	@ApiModelProperty(value = "fax")
+	private String fax;
+
+	/**
+	 * 邮箱
+	 */
+	@ApiModelProperty(value = "邮箱")
+	private String email;
+
+	/**
+	 * 网站
+	 */
+	@ApiModelProperty(value = "网站")
+	private String website;
+
+	/**
+	 * 开户银行
+	 */
+	@ApiModelProperty(value = "开户银行")
+	private String bankOfDeposit;
+
+	/**
+	 * 银行地址
+	 */
+	@ApiModelProperty(value = "银行地址")
+	private String bankAddress;
+
+	/**
+	 * 人民币账号
+	 */
+	@ApiModelProperty(value = "人民币账号")
+	private String rmbAccount;
+
+	/**
+	 * 美金账号
+	 */
+	@ApiModelProperty(value = "美金账号")
+	private String usdAccount;
+
+	/**
+	 * swift代码
+	 */
+	@ApiModelProperty(value = "swift代码")
+	private String swiftCode;
+
+	/**
+	 * logo地址
+	 */
+	@ApiModelProperty(value = "logo地址")
+	private String logoUrl;
+
 
 }

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

@@ -58,6 +58,8 @@ public class MagicValues {
 	public static final String PROFIT_MARGIN = "profit.margin";
 	public static final String FM = "JMS";
 	public static final String DATA = "data";
+
+	public static final String GAUGE_OUTFIT = "gaugeOutfit";
 	public static final String HUNDRED = "100";
 
 	private MagicValues() {} // 防止外部实例化该类

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

@@ -24,6 +24,7 @@ import lombok.AllArgsConstructor;
 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.Util.MagicValues;
 import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.corps.entity.BCorpsBank;
@@ -64,6 +65,7 @@ import org.springblade.los.finance.stl.entity.FinStlBills;
 import org.springblade.los.finance.stl.entity.FinStlBillsItems;
 import org.springblade.los.finance.stl.service.IFinStlBillsItemsService;
 import org.springblade.los.finance.stl.service.IFinStlBillsService;
+import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 
@@ -118,6 +120,8 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 
 	private final IAmendsService amendsService;
 
+	private final IDeptUtils deptUtils;
+
 
 	@Override
 	public IPage<ReportsVO> selectReportsPage(IPage<ReportsVO> page, ReportsVO reports) {
@@ -151,6 +155,13 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 	public R getReportData(String billId, String reportCode, String groupCode, String corpIds,
 						   String itemIds, String type) {
 		Map<String, Object> map = new HashMap<>();
+		R<Dept> res = sysClient.getDept(deptUtils.getDeptPid());
+		Dept dept;
+		if (res.isSuccess()) {
+			dept = res.getData();
+		} else {
+			throw new RuntimeException("获取报表表头数据失败");
+		}
 		BCurrency bCurrency = ibCurrencyService.getOne(new LambdaQueryWrapper<BCurrency>()
 			.eq(BCurrency::getStatus, 0)
 			.eq(BCurrency::getTenantId, AuthUtil.getTenantId())
@@ -514,6 +525,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 							}
 						}
 						item.setFeeCenterList(feeCenterReports);
+						item.setDept(dept);
 					}
 				}
 				map.put(MagicValues.DATA, list);
@@ -557,6 +569,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					containersReportsList.add(containersReports);
 				}
 				bills.setContainersReportsList(containersReportsList);
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -566,6 +579,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			if (bills != null) {
 //				bills.setFM(MagicValues.FM);
 				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -575,6 +589,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			if (bills != null) {
 //				bills.setFM(MagicValues.FM);
 				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -680,6 +695,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					bills.setAddress(bCorpsBanks.get(0).getAddress());
 					bills.setSwiftCode(bCorpsBanks.get(0).getSwiftCode());
 				}
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -775,6 +791,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setAmountDrLoc(amountDrLoc);
 				bills.setAmountCrLoc(amountCrLoc);
 				bills.setAmountProfitLoc(amountProfitLoc);
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -910,6 +927,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				}
 				finStlBills.setAmountSubLoc(finStlBills.getAmountSubLoc().abs());
 				finStlBills.setFinStlBillsItemsReportsList(finStlBillsItemsReportsList);
+				finStlBills.setDept(dept);
 				map.put(MagicValues.DATA, finStlBills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -959,6 +977,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					}
 				}
 				finStlBills.setFinStlBillsItemsReportsList(finStlBillsItemsReportsList);
+				finStlBills.setDept(dept);
 				map.put(MagicValues.DATA, finStlBills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -1014,6 +1033,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					}
 				}
 				finStlBills.setFinStlBillsItemsReportsList(finStlBillsItemsReportsList);
+				finStlBills.setDept(dept);
 				map.put(MagicValues.DATA, finStlBills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -1068,6 +1088,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					}
 				}
 				finStlBills.setFinStlBillsItemsReportsList(finStlBillsItemsReportsList);
+				finStlBills.setDept(dept);
 				map.put(MagicValues.DATA, finStlBills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -1119,6 +1140,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				finStlBills.setAmountC(finStlBillsItemsReportsList.stream().map(FinStlBillsItemsReports::getAmountC).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				finStlBills.setAmountCUsd(finStlBillsItemsReportsList.stream().map(FinStlBillsItemsReports::getAmountUsdC).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				finStlBills.setFinStlBillsItemsReportsList(finStlBillsItemsReportsList);
+				finStlBills.setDept(dept);
 				map.put(MagicValues.DATA, finStlBills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -1174,6 +1196,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				finStlBills.setAmountD(finStlBillsItemsReportsList.stream().map(FinStlBillsItemsReports::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				finStlBills.setAmountDUsd(finStlBillsItemsReportsList.stream().map(FinStlBillsItemsReports::getAmountUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				finStlBills.setFinStlBillsItemsReportsList(finStlBillsItemsReportsList);
+				finStlBills.setDept(dept);
 				map.put(MagicValues.DATA, finStlBills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -1263,6 +1286,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setAmountDrLoc(amountDrLoc);
 				bills.setAmountCrLoc(amountCrLoc);
 				bills.setAmountProfitLoc(amountProfitLoc);
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -1352,6 +1376,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setAmountDrLoc(amountDrLoc);
 				bills.setAmountCrLoc(amountCrLoc);
 				bills.setAmountProfitLoc(amountProfitLoc);
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -2185,6 +2210,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 							} else {
 								item.setProfitMargin("");
 							}
+							item.setDept(dept);
 							item.setFeeCenterList(feeCenterReports);
 						}
 					}
@@ -3022,6 +3048,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 							} else {
 								item.setProfitMargin("");
 							}
+							item.setDept(dept);
 							item.setFeeCenterList(feeCenterReports);
 						}
 					}
@@ -3387,6 +3414,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 								feeCenterReports.add(feeCenterReports1);
 							}
 						}
+						item.setDept(dept);
 						item.setFeeCenterList(feeCenterReports);
 					}
 				}
@@ -3431,6 +3459,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					containersReportsList.add(containersReports);
 				}
 				bills.setContainersReportsList(containersReportsList);
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -3440,6 +3469,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			if (bills != null) {
 //				bills.setFM(MagicValues.FM);
 //				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -3449,6 +3479,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			if (bills != null) {
 //				bills.setFM(MagicValues.FM);
 //				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -3554,6 +3585,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					bills.setAddress(bCorpsBanks.get(0).getAddress());
 					bills.setSwiftCode(bCorpsBanks.get(0).getSwiftCode());
 				}
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -3649,6 +3681,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setAmountDrLoc(amountDrLoc);
 				bills.setAmountCrLoc(amountCrLoc);
 				bills.setAmountProfitLoc(amountProfitLoc);
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -3795,6 +3828,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 								feeCenterReports.add(feeCenterReports1);
 							}
 						}
+						item.setDept(dept);
 						item.setFeeCenterList(feeCenterReports);
 					}
 				}
@@ -3891,6 +3925,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					bills.setAddress(bCorpsBanks.get(0).getAddress());
 					bills.setSwiftCode(bCorpsBanks.get(0).getSwiftCode());
 				}
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -3907,7 +3942,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 					.eq(FeeCenter::getDc, MagicValues.C)
 					.eq(FeeCenter::getIsDeleted, 0);
-				lambdaQueryWrapper.eq(FeeCenter::getPid,  bills.getId());
+				lambdaQueryWrapper.eq(FeeCenter::getPid, bills.getId());
 				if (ObjectUtils.isNotNull(corpIds)) {
 					lambdaQueryWrapper.eq(FeeCenter::getCorpId, corpIds);
 				} else {
@@ -3976,6 +4011,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setAmountDrLoc(amountDrLoc);
 				bills.setAmountCrLoc(amountCrLoc);
 				bills.setAmountProfitLoc(amountProfitLoc);
+				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);

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

@@ -29,6 +29,8 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
+import org.springblade.los.basic.corps.entity.BCorps;
+import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
@@ -54,6 +56,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -92,6 +96,8 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 
 	private final IAuditProecessService auditProecessService;
 
+	private final IBCorpsService ibCorpsService;
+
 	@Override
 	public IPage<AeaBillsVO> selectAeaBillsPage(IPage<AeaBillsVO> page, AeaBillsVO aeaBills) {
 		return page.setRecords(baseMapper.selectAeaBillsPage(page, aeaBills));
@@ -719,12 +725,48 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 			.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
 		auditProecessDTO.setTimes(1);
 		auditProecessDTO.setProcessType(processType);
-		if (feeCenterService.count(new LambdaQueryWrapper<FeeCenter>()
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getIsDeleted, 0)
-			.eq(FeeCenter::getPid, declare.getId())) == 0) {
+			.eq(FeeCenter::getPid, declare.getId()));
+		if (feeCenterList.isEmpty()) {
 			throw new RuntimeException("请维护费用信息");
 		}
+		List<FeeCenter> feeCenterListPS = feeCenterList.stream().filter(e -> e.getFeeCnName().equals("PS")).collect(Collectors.toList());
+		if (!feeCenterListPS.isEmpty()) {
+			BigDecimal amountHYD = feeCenterList.stream()
+				.filter(e -> e.getFeeCnName().equals("空运费") && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal amountHYC = feeCenterList.stream()
+				.filter(e -> e.getFeeCnName().equals("空运费") && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal amountPSD = feeCenterList.stream()
+				.filter(e -> e.getFeeCnName().equals("PS") && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal amountPSC = feeCenterList.stream()
+				.filter(e -> e.getFeeCnName().equals("PS") && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			if (("CC".equals(declare.getHPaymode()) && ("MM".equals(declare.getBillType()) || "DD".equals(declare.getBillType()))) ||
+				("PP".equals(declare.getHPaymode()) && "MH".equals(declare.getBillType()))) {
+				BCorps bCorps = ibCorpsService.getById(declare.getCorpId());
+				BigDecimal PSAmount = amountPSC.subtract(amountPSD);
+				BigDecimal HYAmount = amountHYD.subtract(amountHYC);
+				BigDecimal rate = new BigDecimal("0.00");
+				if (PSAmount.compareTo(new BigDecimal("0.00")) != 0 && HYAmount.compareTo(new BigDecimal("0.00")) != 0) {
+					rate = PSAmount.divide(HYAmount, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP);
+				} else {
+					throw new RuntimeException("空运费利润:" + HYAmount + ",  PS利润:" + PSAmount);
+				}
+				if (ObjectUtils.isNotNull(bCorps) && ObjectUtils.isNotNull(bCorps.getPsRate()) && new BigDecimal(bCorps.getPsRate()).compareTo(new BigDecimal("0.00")) == 0) {
+					throw new RuntimeException("客户PS利润为空或零,不能存在PS费用");
+				}
+				if (new BigDecimal(bCorps.getPsRate()).compareTo(rate) > 0) {
+					throw new RuntimeException("PS比例高,公司实际分成比例:" + rate + ".系统比例为:" + bCorps.getPsRate());
+				}
+			} else {
+				throw new RuntimeException("只有预付、直单和主单,或分单和到付才可以输入PS");
+			}
+		}
 		// 没开启审批流直接走 通过流程
 		if (pathsActs == null || pathsActs.getIsEnable() == 2) {
 			throw new SecurityException("当前租户未查询到审批流配置");

+ 71 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/amends/service/impl/AmendsServiceImpl.java

@@ -28,12 +28,18 @@ import org.springblade.core.tool.api.R;
 import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
+import org.springblade.los.basic.corps.entity.BCorps;
+import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
+import org.springblade.los.business.aea.entity.AeaBills;
+import org.springblade.los.business.aea.mapper.AeaBillsMapper;
 import org.springblade.los.business.amends.entity.Amends;
 import org.springblade.los.business.amends.mapper.AmendsMapper;
 import org.springblade.los.business.amends.service.IAmendsService;
 import org.springblade.los.business.amends.vo.AmendsVO;
+import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.los.business.sea.mapper.BillsMapper;
 import org.springblade.los.check.dto.LosAuditProecessDTO;
 import org.springblade.los.check.entity.LosAuditPathsActs;
 import org.springblade.los.check.entity.LosAuditPathsLevels;
@@ -51,9 +57,12 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 业务-业务费用 AmendDate 服务实现类
@@ -83,6 +92,12 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 
 	private final IBusinessTypeService bBusinessTypeService;
 
+	private final IBCorpsService ibCorpsService;
+
+	private final BillsMapper billsMapper;
+
+	private final AeaBillsMapper aeaBillsMapper;
+
 	@Override
 	public IPage<AmendsVO> selectAmendsPage(IPage<AmendsVO> page, AmendsVO amends) {
 		return page.setRecords(baseMapper.selectAmendsPage(page, amends));
@@ -222,7 +237,6 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 			.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
 		auditProecessDTO.setTimes(1);
 		auditProecessDTO.setProcessType(processType);
-
 		// 没开启审批流直接走 通过流程
 		if (pathsActs == null || pathsActs.getIsEnable() == 2) {
 			throw new SecurityException("当前租户未查询到审批流配置");
@@ -256,7 +270,7 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 				.eq(FeeCenter::getPid, declare.getId())
 			);
-			if (feeCenterList.size() == 0) {
+			if (feeCenterList.isEmpty()) {
 				throw new RuntimeException("费用明细不能为空");
 			}
 			BigDecimal amountC = feeCenterList.stream().filter(e -> "C".equals(e.getDc())).map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -265,6 +279,61 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 			auditProecessDTO.setReceivableAmount(amountD);
 			auditProecessDTO.setGrossProfit(amountD.subtract(amountC));
 			auditProecessDTO.setSalesCompanyName(declare.getCreateDeptName());
+			List<FeeCenter> feeCenterBills = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getPid, declare.getOrigId()));
+			feeCenterList.addAll(feeCenterBills);
+			List<FeeCenter> feeCenterListPS = feeCenterList.stream().filter(e -> e.getFeeCnName().equals("PS")).collect(Collectors.toList());
+			if (!feeCenterListPS.isEmpty()) {
+				BigDecimal amountHYD = feeCenterList.stream()
+					.filter(e -> e.getFeeCnName().equals("海运费") && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+					.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				BigDecimal amountHYC = feeCenterList.stream()
+					.filter(e -> e.getFeeCnName().equals("海运费") && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+					.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				BigDecimal amountPSD = feeCenterList.stream()
+					.filter(e -> e.getFeeCnName().equals("PS") && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+					.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				BigDecimal amountPSC = feeCenterList.stream()
+					.filter(e -> e.getFeeCnName().equals("PS") && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+					.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				String mpaymode = "";
+				String billType = "";
+				if ("SEA".equals(declare.getBusinessType()) ||"SIA".equals(declare.getBusinessType())) {
+					Bills bills = billsMapper.selectById(declare.getOrigId());
+					if (bills != null){
+						mpaymode = bills.getMpaymode();
+						billType = bills.getBillType();
+					}
+				} else if ("AEA".equals(declare.getBusinessType()) || "AIA".equals(declare.getBusinessType())) {
+					AeaBills aeaBills = aeaBillsMapper.selectById(declare.getOrigId());
+					if (aeaBills != null){
+						mpaymode = aeaBills.getHPaymode();
+						billType = aeaBills.getBillType();
+					}
+				}
+				if (("CC".equals(mpaymode) && ("MM".equals(billType) || "DD".equals(billType))) ||
+					("PP".equals(mpaymode) && "MH".equals(billType))) {
+					BCorps bCorps = ibCorpsService.getById(declare.getCorpId());
+					BigDecimal PSAmount = amountPSC.subtract(amountPSD);
+					BigDecimal HYAmount = amountHYD.subtract(amountHYC);
+					BigDecimal rate = new BigDecimal("0.00");
+					if (PSAmount.compareTo(new BigDecimal("0.00")) != 0 && HYAmount.compareTo(new BigDecimal("0.00")) != 0) {
+						rate = PSAmount.divide(HYAmount, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP);
+					} else {
+						throw new RuntimeException("海运费利润:" + HYAmount + ",  PS利润:" + PSAmount);
+					}
+					if (ObjectUtils.isNotNull(bCorps) && ObjectUtils.isNotNull(bCorps.getPsRate()) && new BigDecimal(bCorps.getPsRate()).compareTo(new BigDecimal("0.00")) == 0) {
+						throw new RuntimeException("客户PS利润为空或零,不能存在PS费用");
+					}
+					if (new BigDecimal(bCorps.getPsRate()).compareTo(rate) > 0) {
+						throw new RuntimeException("PS比例高,公司实际分成比例:" + rate + ".系统比例为:" + bCorps.getPsRate());
+					}
+				} else {
+					throw new RuntimeException("只有预付、直单和主单,或分单和到付才可以输入PS");
+				}
+			}
 			R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
 			if (!financeProcess.isSuccess()) {
 				throw new SecurityException("操作失败,请联系管理员");

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.java

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.los.finance.fee.entity.ListAccBillVO;
 import org.springblade.los.finance.fee.vo.FinAccBillsVO;
+import org.springblade.los.statisticAnalysis.FinanceProfit;
 
 import java.util.List;
 import java.util.Map;
@@ -54,4 +55,6 @@ public interface BillsMapper extends BaseMapper<Bills> {
 	List<Map<String, Object>> decisionAnalysisByYWY();
 
 	FinAccBillsVO listByAccBillId(@Param("acc") ListAccBillVO finAccBills);
+
+	List<FinanceProfit> financeProfit(@Param("data")FinanceProfit financeProfit, IPage<FinanceProfit> page);
 }

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

@@ -691,5 +691,52 @@
         GROUP BY acc.bill_no
         ORDER BY acc.create_time
     </select>
+    <select id="financeProfit" resultType="org.springblade.los.statisticAnalysis.FinanceProfit">
+        SELECT
+            seb.bill_type AS billType,
+            seb.bill_no AS billNo,
+            seb.hblno AS hBlNo,
+            seb.mblno AS mBlNo,
+            seb.corp_cn_name AS corpName,
+            seb.bill_type AS statisticsDate,
+            seb.src_cn_name AS salesman,
+            seb.pod_cn_name AS pod,
+            seb.pol_cn_name AS pol,
+            seb.vessel_cn_name AS vesselCnName,
+            seb.voyage_no AS voyageNo,
+            seb.acc_dept_name AS accDeptName,
+            seb.line_cn_name AS lineCnName,
+            seb.carrier_cn_name AS carrierCnName,
+            seb.operator_name AS operatorName,
+            SUM(IF(feeDU.amount,feeDU.amount,0.00)) AS amountDrUsd,
+            SUM(IF(feeDU.stl_ttl_amount,feeDU.stl_ttl_amount,0.00)) AS realAmountDrUsd,
+            SUM(IF(feeDC.amount,feeDC.amount,0.00)) AS amountDr,
+            SUM(IF(feeDC.stl_ttl_amount,feeDC.stl_ttl_amount,0.00)) AS realAmountDr,
+            SUM(IF(feeCU.amount,feeCU.amount,0.00)) AS amountCrUsd,
+            SUM(IF(feeCU.stl_ttl_amount,feeCU.stl_ttl_amount,0.00)) AS realAmountCrUsd,
+            SUM(IF(feeCC.amount,feeCC.amount,0.00)) AS amountCr,
+            SUM(IF(feeCC.stl_ttl_amount,feeCC.stl_ttl_amount,0.00)) AS realAmountCr,
+            seb.amount_profit_loc AS amountProfitLoc
+        FROM
+            los_sea_bills seb
+                LEFT JOIN los_fee_center feeCC ON seb.id = feeCC.pid
+                AND feeCC.dc = 'C' and feeCC.cur_code = 'CNY'
+                LEFT JOIN los_fee_center feeCU ON seb.id = feeCU.pid
+                AND feeCU.dc = 'C' and feeCU.cur_code = 'USD'
+                LEFT JOIN los_fee_center feeDC ON seb.id = feeDC.pid
+                AND feeDC.dc = 'D' and feeDC.cur_code = 'CNY'
+                LEFT JOIN los_fee_center feeDU ON seb.id = feeDU.pid
+                AND feeDU.dc = 'D' and feeDU.cur_code = 'USD'
+        WHERE
+            seb.is_deleted = '0'
+          AND feeCC.is_deleted = '0'
+          AND feeCU.is_deleted = '0'
+          AND feeDC.is_deleted = '0'
+          AND feeDU.is_deleted = '0'
+        GROUP BY
+            seb.bill_no
+        ORDER BY
+            seb.create_time
+    </select>
 
 </mapper>

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

@@ -30,6 +30,8 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
+import org.springblade.los.basic.corps.entity.BCorps;
+import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
@@ -57,6 +59,8 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -105,6 +109,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final IAuditProecessService auditProecessService;
 
+	private final IBCorpsService ibCorpsService;
+
 
 	@Override
 	public IPage<BillsVO> selectBillsPage(IPage<BillsVO> page, BillsVO bills) {
@@ -1087,12 +1093,49 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
 		auditProecessDTO.setTimes(1);
 		auditProecessDTO.setProcessType(processType);
-		if (feeCenterService.count(new LambdaQueryWrapper<FeeCenter>()
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getIsDeleted, 0)
-			.eq(FeeCenter::getPid, declare.getId())) == 0) {
+			.eq(FeeCenter::getPid, declare.getId()));
+		if (feeCenterList.isEmpty()) {
 			throw new RuntimeException("请维护费用信息");
 		}
+		List<FeeCenter> feeCenterListPS = feeCenterList.stream().filter(e -> e.getFeeCnName().equals("PS")).collect(Collectors.toList());
+		List<FeeCenter> feeCenterListHY = feeCenterList.stream().filter(e -> e.getFeeCnName().equals("海运费")).collect(Collectors.toList());
+		if (!feeCenterListPS.isEmpty() && !feeCenterListHY.isEmpty()) {
+			BigDecimal amountHYD = feeCenterList.stream()
+				.filter(e -> e.getFeeCnName().equals("海运费") && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal amountHYC = feeCenterList.stream()
+				.filter(e -> e.getFeeCnName().equals("海运费") && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal amountPSD = feeCenterList.stream()
+				.filter(e -> e.getFeeCnName().equals("PS") && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal amountPSC = feeCenterList.stream()
+				.filter(e -> e.getFeeCnName().equals("PS") && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			if (("PP".equals(declare.getMpaymode()) && ("MM".equals(declare.getBillType()) || "DD".equals(declare.getBillType()))) ||
+				("CC".equals(declare.getMpaymode()) && "MH".equals(declare.getBillType()))) {
+				BCorps bCorps = ibCorpsService.getById(declare.getCorpId());
+				BigDecimal PSAmount = amountPSC.subtract(amountPSD);
+				BigDecimal HYAmount = amountHYD.subtract(amountHYC);
+				BigDecimal rate = new BigDecimal("0.00");
+				if (PSAmount.compareTo(new BigDecimal("0.00")) > 0 && HYAmount.compareTo(new BigDecimal("0.00")) > 0) {
+					rate = PSAmount.divide(HYAmount, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP);
+				} else {
+					throw new RuntimeException("海运费利润:" + HYAmount + ",  PS利润:" + PSAmount);
+				}
+				if (ObjectUtils.isNotNull(bCorps) && ObjectUtils.isNotNull(bCorps.getPsRate()) && new BigDecimal(bCorps.getPsRate()).compareTo(new BigDecimal("0.00")) == 0) {
+					throw new RuntimeException("往来单位PS规则为空或零,不能存在PS费用");
+				}
+				if (new BigDecimal(bCorps.getPsRate()).compareTo(rate) < 0) {
+					throw new RuntimeException("PS比例高,公司实际分成比例:" + rate + ".系统比例为:" + bCorps.getPsRate());
+				}
+			} else {
+				throw new RuntimeException("只有预付、直单和主单,或分单和到付才可以输入PS");
+			}
+		}
 
 		// 没开启审批流直接走 通过流程
 		if (pathsActs == null || pathsActs.getIsEnable() == 2) {

+ 60 - 71
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java

@@ -85,11 +85,19 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 				deptName = String.join(",", res.getData());
 			}
 		}
-		Integer teu = 0;
+		int teu = 0;
 		Bills bills = billsMapper.selectById(preContainers.getPid());
-		if (bills != null) {
-			teu = ObjectUtils.isNotNull(bills.getTeu()) ? bills.getTeu() : 0;
+		if (bills == null) {
+			throw new RuntimeException("未找到单据信息");
 		}
+		teu = ObjectUtils.isNotNull(bills.getTeu()) ? bills.getTeu() : 0;
+		List<PreContainers> preContainersList = baseMapper.selectList(new LambdaQueryWrapper<PreContainers>()
+			.select(PreContainers::getId, PreContainers::getMeasurement, PreContainers::getNumber, PreContainers::getGrossWeight)
+			.eq(PreContainers::getPid, bills.getId())
+			.eq(PreContainers::getIsDeleted, 0));
+		BigDecimal measurementSum = preContainersList.stream().map(PreContainers::getMeasurement).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
+		BigDecimal grossWeightSum = preContainersList.stream().map(PreContainers::getGrossWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
+		BigDecimal quantitySum = preContainersList.stream().map(PreContainers::getNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
 		if (preContainers.getId() == null) {
 			preContainers.setCreateTime(new Date());
 			preContainers.setCreateUser(AuthUtil.getUserId());
@@ -100,44 +108,45 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 				preContainers.setCreateDeptName(deptName);
 			}
 			teu += preContainers.getTeu().intValue();
-			if (bills != null) {
-				bills.setMeasurement(bills.getMeasurement().add(preContainers.getMeasurement()));
-				bills.setGrossWeight(bills.getGrossWeight().add(preContainers.getGrossWeight()));
-				bills.setQuantity(bills.getQuantity().add(preContainers.getNumber()));
-			}
+			bills.setMeasurement(measurementSum.add(preContainers.getMeasurement()));
+			bills.setGrossWeight(grossWeightSum.add(preContainers.getGrossWeight()));
+			bills.setQuantity(quantitySum.add(new BigDecimal(preContainers.getQuantity())));
 		} else {
-			PreContainers preContainers1 = baseMapper.selectById(preContainers.getId());
-			if (preContainers1.getTeu().compareTo(preContainers.getTeu()) >= 0) {
-				teu = teu - preContainers1.getTeu().subtract(preContainers.getTeu()).intValue();
-			} else {
-				teu = teu + preContainers.getTeu().subtract(preContainers1.getTeu()).intValue();
+			PreContainers preContainers1 = preContainersList.stream().filter(e -> e.getId().equals(preContainers.getId())).findFirst().orElse(null);
+			if (preContainers1 != null) {
+				BigDecimal measurement = ObjectUtils.isNotNull(preContainers1.getMeasurement()) ? preContainers1.getMeasurement() : new BigDecimal("0.00");
+				BigDecimal grossWeight = ObjectUtils.isNotNull(preContainers1.getGrossWeight()) ? preContainers1.getGrossWeight() : new BigDecimal("0.00");
+				BigDecimal quantity = ObjectUtils.isNotNull(preContainers1.getNumber()) ? preContainers1.getNumber() : new BigDecimal("0.00");
+				bills.setMeasurement(measurementSum.add(preContainers.getMeasurement()).subtract(measurement));
+				bills.setGrossWeight(grossWeightSum.add(preContainers.getGrossWeight()).subtract(grossWeight));
+				bills.setQuantity(quantitySum.add(preContainers.getNumber()).subtract(quantity));
+				if (ObjectUtils.isNotNull(preContainers1.getTeu()) && ObjectUtils.isNotNull(preContainers.getTeu())){
+					if (preContainers1.getTeu().compareTo(preContainers.getTeu()) >= 0) {
+						teu = teu - preContainers1.getTeu().subtract(preContainers.getTeu()).intValue();
+					} else {
+						teu = teu + preContainers.getTeu().subtract(preContainers1.getTeu()).intValue();
+					}
+				}
 			}
 			preContainers.setUpdateUser(AuthUtil.getUserId());
 			preContainers.setUpdateTime(new Date());
 			preContainers.setUpdateUserName(AuthUtil.getUserName());
-			if (bills != null) {
-				bills.setMeasurement(bills.getMeasurement().add(preContainers.getMeasurement()).subtract(preContainers1.getMeasurement()));
-				bills.setGrossWeight(bills.getGrossWeight().add(preContainers.getGrossWeight()).subtract(preContainers1.getGrossWeight()));
-				bills.setQuantity(bills.getQuantity().add(preContainers.getNumber()).subtract(preContainers1.getNumber()));
-			}
-		}
-		if (bills != null) {
-			bills.setCfsMeasurement(new BigDecimal("0.00"));
-			bills.setCfsGrossWeight(new BigDecimal("0.00"));
-			bills.setCfsQuantity(new BigDecimal("0.00"));
-			bills.setUpdateUser(AuthUtil.getUserId());
-			bills.setUpdateTime(new Date());
-			bills.setUpdateUserName(AuthUtil.getUserName());
-			bills.setTeu(teu);
-			billsMapper.updateById(bills);
 		}
+		bills.setCfsMeasurement(new BigDecimal("0.00"));
+		bills.setCfsGrossWeight(new BigDecimal("0.00"));
+		bills.setCfsQuantity(new BigDecimal("0.00"));
+		bills.setUpdateUser(AuthUtil.getUserId());
+		bills.setUpdateTime(new Date());
+		bills.setUpdateUserName(AuthUtil.getUserName());
+		bills.setTeu(teu);
+		billsMapper.updateById(bills);
 		this.saveOrUpdate(preContainers);
 		List<Containers> removeContainersList = containersService.list(new LambdaQueryWrapper<Containers>()
 			.eq(Containers::getTenantId, AuthUtil.getTenantId())
 			.eq(Containers::getIsDeleted, 0)
 			.eq(Containers::getPid, preContainers.getPid()));
 		containersService.removeByPid(preContainers.getPid(), preContainers.getCntrTypeCode());
-		if (removeContainersList.size() > 0) {
+		if (!removeContainersList.isEmpty()) {
 			List<Long> ids = removeContainersList.stream().map(Containers::getId).collect(Collectors.toList());
 			containersBillsService.removeByPid(ids);
 		}
@@ -153,22 +162,20 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 				containers.setCreateDept(deptId);
 				containers.setCreateDeptName(deptName);
 			}
-			if (bills != null) {
-				containers.setBillNo(bills.getBillNo());
-				containers.setPolId(bills.getPolId());
-				containers.setPolCode(bills.getPolCode());
-				containers.setPolCnName(bills.getPolCnName());
-				containers.setPolEnName(bills.getPolEnName());
-				containers.setPodId(bills.getPodId());
-				containers.setPodCode(bills.getPodCode());
-				containers.setPodCnName(bills.getPodCnName());
-				containers.setPodEnName(bills.getPodEnName());
-				containers.setMblno(bills.getMblno());
-				containers.setHblno(bills.getHblno());
-				containers.setCommodityDescr(bills.getCommodityDescr());
-				containers.setPackingUnitId(bills.getPackingUnitId());
-				containers.setPackingUnit(bills.getPackingUnit());
-			}
+			containers.setBillNo(bills.getBillNo());
+			containers.setPolId(bills.getPolId());
+			containers.setPolCode(bills.getPolCode());
+			containers.setPolCnName(bills.getPolCnName());
+			containers.setPolEnName(bills.getPolEnName());
+			containers.setPodId(bills.getPodId());
+			containers.setPodCode(bills.getPodCode());
+			containers.setPodCnName(bills.getPodCnName());
+			containers.setPodEnName(bills.getPodEnName());
+			containers.setMblno(bills.getMblno());
+			containers.setHblno(bills.getHblno());
+			containers.setCommodityDescr(bills.getCommodityDescr());
+			containers.setPackingUnitId(bills.getPackingUnitId());
+			containers.setPackingUnit(bills.getPackingUnit());
 			containers.setPid(preContainers.getPid());
 			containers.setTeu(preContainers.getTeu());
 			containers.setIsSoc(preContainers.getIsSoc());
@@ -224,8 +231,8 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 		}
 		Bills bills = billsMapper.selectOne(new LambdaQueryWrapper<Bills>()
 			.select(Bills::getId, Bills::getCfsMeasurement, Bills::getCfsGrossWeight, Bills::getCfsQuantity
-				, Bills::getUpdateUser, Bills::getUpdateTime, Bills::getUpdateUserName, Bills::getTeu,Bills::getQuantity
-				,Bills::getMeasurement,Bills::getGrossWeight)
+				, Bills::getUpdateUser, Bills::getUpdateTime, Bills::getUpdateUserName, Bills::getTeu, Bills::getQuantity
+				, Bills::getMeasurement, Bills::getGrossWeight)
 			.eq(Bills::getId, preContainersList.get(0).getPid()));
 		if (bills != null) {
 			bills.setCfsMeasurement(new BigDecimal("0.00"));
@@ -235,35 +242,17 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 			bills.setUpdateTime(new Date());
 			bills.setUpdateUserName(AuthUtil.getUserName());
 			BigDecimal teu = new BigDecimal("0.00");
-			List<Long> ids = preContainersList.stream().map(PreContainers::getId).filter(Objects::nonNull).collect(Collectors.toList());
-			List<PreContainers> preContainersList1 = new ArrayList<>();
-			if (ObjectUtils.isNotNull(ids) && !ids.isEmpty()){
-				 preContainersList1 = baseMapper.selectList(new LambdaQueryWrapper<PreContainers>()
-					.in(PreContainers::getId,ids));
-			}
-			BigDecimal quantity= new BigDecimal("0.00");
-			BigDecimal grossWeight= new BigDecimal("0.00");
-			BigDecimal measurement= new BigDecimal("0.00");
+			BigDecimal measurementSum = preContainersList.stream().map(PreContainers::getMeasurement).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
+			BigDecimal grossWeightSum = preContainersList.stream().map(PreContainers::getGrossWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
+			BigDecimal quantitySum = preContainersList.stream().map(PreContainers::getNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
 			for (PreContainers preContainers : preContainersList) {
 				if (ObjectUtils.isNotNull(preContainers.getQuantity()) && ObjectUtils.isNotNull(preContainers.getTeu())) {
 					teu = teu.add(new BigDecimal(preContainers.getQuantity()).multiply(preContainers.getTeu()));
 				}
-				if (ObjectUtils.isNotNull(preContainers.getId()) && !preContainersList1.isEmpty()){
-					PreContainers preContainers1 = preContainersList1.stream().filter(e-> e.getId().equals(preContainers.getId())).findFirst().orElse(null);
-					if (preContainers1 != null){
-						measurement = measurement.add(preContainers.getMeasurement()).subtract(preContainers1.getMeasurement());
-						grossWeight = grossWeight.add(preContainers.getGrossWeight()).subtract(preContainers1.getGrossWeight());
-						quantity = quantity.add(preContainers.getNumber()).subtract(preContainers1.getNumber());
-					}
-				}else{
-					measurement = measurement.add(preContainers.getMeasurement());
-					grossWeight = grossWeight.add(preContainers.getGrossWeight());
-					quantity = quantity.add(preContainers.getNumber());
-				}
 			}
-			bills.setMeasurement((ObjectUtils.isNotNull(bills.getMeasurement()) ? bills.getMeasurement() : new BigDecimal("0.00")).add(measurement));
-			bills.setGrossWeight((ObjectUtils.isNotNull(bills.getGrossWeight()) ? bills.getGrossWeight() : new BigDecimal("0.00")).add(grossWeight));
-			bills.setQuantity((ObjectUtils.isNotNull(bills.getQuantity()) ? bills.getQuantity() : new BigDecimal("0.00")).add(quantity));
+			bills.setMeasurement(measurementSum);
+			bills.setGrossWeight(grossWeightSum);
+			bills.setQuantity(quantitySum);
 			bills.setTeu(teu.intValue());
 			billsMapper.updateById(bills);
 		}

+ 6 - 0
blade-service/blade-los/src/main/java/org/springblade/los/excel/FeeCountByCorpCExcel.java

@@ -1,6 +1,9 @@
 package org.springblade.los.excel;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -10,6 +13,9 @@ import java.math.BigDecimal;
  * @date : 2024/2/18
  */
 @Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
 public class FeeCountByCorpCExcel {
 
 

+ 6 - 0
blade-service/blade-los/src/main/java/org/springblade/los/excel/FeeCountByCorpDExcel.java

@@ -1,6 +1,9 @@
 package org.springblade.los.excel;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -10,6 +13,9 @@ import java.math.BigDecimal;
  * @date : 2024/2/18
  */
 @Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
 public class FeeCountByCorpDExcel {
 
 

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/IStatisticAnalysisService.java

@@ -45,5 +45,5 @@ public interface IStatisticAnalysisService {
 
 	R<List<Map<String, Object>>> decisionAnalysisByYWY();
 
-    R<IPage<FinanceProfit>> financeProfit(FinanceProfit financeProfit, IPage<Object> page);
+    R<IPage<FinanceProfit>> financeProfit(FinanceProfit financeProfit, IPage<FinanceProfit> page);
 }

+ 4 - 3
blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java

@@ -3,8 +3,8 @@ package org.springblade.los.statisticAnalysis.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.AllArgsConstructor;
 import org.springblade.core.tool.api.R;
-import org.springblade.los.statisticAnalysis.DecisionAnalysis;
 import org.springblade.los.business.sea.mapper.BillsMapper;
+import org.springblade.los.statisticAnalysis.DecisionAnalysis;
 import org.springblade.los.statisticAnalysis.FinanceProfit;
 import org.springblade.los.statisticAnalysis.service.IStatisticAnalysisService;
 import org.springframework.stereotype.Service;
@@ -40,7 +40,8 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 	}
 
 	@Override
-	public R<IPage<FinanceProfit>> financeProfit(FinanceProfit financeProfit, IPage<Object> page) {
-		return null;
+	public R<IPage<FinanceProfit>> financeProfit(FinanceProfit financeProfit, IPage<FinanceProfit> page) {
+		List<FinanceProfit> financeProfitList = billsMapper.financeProfit(financeProfit, page);
+		return R.data(page.setRecords(financeProfitList));
 	}
 }

+ 9 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -519,4 +519,13 @@ public class UserController {
 		return userSearchClient.getWarehouseKeeper(SysCache.getRoleIds(AuthUtil.getTenantId(), "库管"), salesCompanyId);
 	}
 
+	/**
+	 * 货代角色用户
+	 */
+	@GetMapping("/selectListLos")
+	@ApiOperationSupport(order = 3)
+	public R<List<User>> selectListLos(@RequestParam("roles") String roles) {
+		return userSearchClient.listByRole(SysCache.getRoleIds(AuthUtil.getTenantId(), roles));
+	}
+
 }