Browse Source

贸易代理 2024年8月8日17:23:20

纪新园 1 year ago
parent
commit
6f41f5ce30
14 changed files with 508 additions and 413 deletions
  1. 5 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/PreContainers.java
  2. 18 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java
  3. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/Agent.java
  4. 97 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentFeeItemsReport.java
  5. 7 40
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentFeeReport.java
  6. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/MagicValues.java
  7. 2 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/controller/ReportsController.java
  8. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/IReportsService.java
  9. 25 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  10. 4 6
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  11. 14 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java
  12. 39 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentItemsServiceImpl.java
  13. 284 363
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java
  14. 4 1
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/InOutStorageServiceImpl.java

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

@@ -271,5 +271,10 @@ public class PreContainers implements Serializable {
 	 */
 	private String type;
 
+	/**
+	 * 来源id
+	 */
+	private Long srcId;
+
 
 }

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

@@ -936,5 +936,23 @@ public class FeeCenter implements Serializable {
 	@ApiModelProperty(value = "来源明细id")
 	private Long srcItemId;
 
+	/**
+	 * 订单编号
+	 */
+	@ApiModelProperty(value = "订单编号")
+	private String orderNo;
+
+	/**
+	 * 厂号
+	 */
+	@ApiModelProperty(value = "厂号")
+	private String factoryNumber;
+
+	/**
+	 * 货物名称
+	 */
+	@ApiModelProperty(value = "货物名称")
+	private String goodsName;
+
 }
 

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/Agent.java

@@ -633,5 +633,11 @@ public class Agent implements Serializable {
 	@TableField(exist = false)
 	private BigDecimal amountLoc;
 
+	/**
+	 * 待收预付
+	 */
+	@ApiModelProperty(value = "待收预付")
+	private BigDecimal pendingPrepayment;
+
 
 }

+ 97 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentFeeItemsReport.java

@@ -0,0 +1,97 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.trade.report;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 贸易代理表实体类
+ *
+ * @author BladeX
+ * @since 2024-07-12
+ */
+@Data
+public class AgentFeeItemsReport implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 合同号
+	 */
+	private String contractNo;
+	/**
+	 * 订单编号
+	 */
+	private String orderNo;
+	/**
+	 * 厂号
+	 */
+	private String factoryNumber;
+	/**
+	 * 提单号
+	 */
+	private String billNo;
+	/**
+	 * 箱号
+	 */
+	private String boxNo;
+	/**
+	 * 货物名称
+	 */
+	private String goodsName;
+	/**
+	 * 总计金额(USD)
+	 */
+	private BigDecimal amountUsd;
+	/**
+	 * 预付金额(USD)
+	 */
+	private BigDecimal skAmountUsd;
+	/**
+	 * 尾款金额(USD)
+	 */
+	private BigDecimal wkAmountUsd;
+	/**
+	 * 汇率
+	 */
+	private BigDecimal exchangeRate;
+	/**
+	 * 总计金额(RMB)
+	 */
+	private BigDecimal amount;
+	/**
+	 * 预付金额(RMB)
+	 */
+	private BigDecimal skAmount;
+	/**
+	 * 尾款金额(RMB)
+	 */
+	private BigDecimal wkAmount;
+	/**
+	 * 实付汇率
+	 */
+	private BigDecimal realityExchangeRate;
+	/**
+	 * 实付金额RMB
+	 */
+	private BigDecimal realityAmount;
+
+}

+ 7 - 40
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentSKReport.java → blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentFeeReport.java

@@ -16,9 +16,7 @@
  */
 package org.springblade.los.trade.report;
 
-import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.springblade.los.trade.entity.AgentItems;
 import org.springblade.system.entity.Dept;
 
 import java.io.Serializable;
@@ -33,39 +31,18 @@ import java.util.Map;
  * @since 2024-07-12
  */
 @Data
-public class AgentSKReport implements Serializable {
+public class AgentFeeReport implements Serializable {
 
 	private static final long serialVersionUID = 1L;
 
 
 	/**
-	 * 合同号
+	 * 制单日期
 	 */
-	private String contractNo;
+	private String date;
 
-	/**
-	 * 预付时间
-	 */
-	private String prepaidTime;
-	/**
-	 * 预付金额(美金)
-	 */
-	private BigDecimal skAmountUsd;
-	/**
-	 * 尾款金额(美金)
-	 */
-	private BigDecimal amountUsd;
-
-	/**
-	 * 汇率
-	 */
-	private BigDecimal exchangeRate;
 
 	/**
-	 * 金额RMB
-	 */
-	private BigDecimal amount;
-	/**
 	 * 邮电费
 	 */
 	private BigDecimal postElectricFee;
@@ -83,15 +60,6 @@ public class AgentSKReport implements Serializable {
 	private BigDecimal sumAmount;
 
 	/**
-	 * 实付汇率
-	 */
-	private BigDecimal realityExchangeRate;
-
-	/**
-	 * 实付金额RMB
-	 */
-	private BigDecimal realityAmount;
-	/**
 	 * 实付邮电费
 	 */
 	private BigDecimal realityPostElectricFee;
@@ -107,20 +75,19 @@ public class AgentSKReport implements Serializable {
 	 * 需补金额
 	 */
 	private BigDecimal repairAmount;
+
 	/**
-	 * 实付时间
+	 * 剩余货款
 	 */
-	private String realityTime;
+	private BigDecimal surplusAmount;
 
 	/**
 	 * 明细
 	 */
-	private List<AgentItems> agentItems;
+	private List<AgentFeeItemsReport> skItemsReports;
 
 	private Dept dept;
 
-	private String paymentMethod;
-
 	/**
 	 * 收款记录
 	 */

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

@@ -39,6 +39,8 @@ public class MagicValues {
 	public static final String KYCK = "KYCK";
 	public static final String KYJK = "KYJK";
 	public static final String MYDL = "MYDL";
+
+	public static final String MYDL_STL = "MYDL-STL";
 	public static final String AMEND = "AMEND";
 	public static final String AMEND_SI = "AMENDSI";
 	public static final String AMEND_SE = "AMENDSE";

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

@@ -155,9 +155,10 @@ public class ReportsController extends BladeController {
 						   @RequestParam(value = "groupCode", required = false) String groupCode,
 						   @RequestParam(value = "corpIds", required = false) String corpIds,
 						   @RequestParam(value = "itemIds", required = false) String itemIds,
+						   @RequestParam(value = "curCode", required = false) String curCode,
 						   @RequestParam(value = "type", required = false) String type
 	) {
-		return reportsService.getReportData(billId, reportCode, groupCode, corpIds, itemIds, type);
+		return reportsService.getReportData(billId, reportCode, groupCode, corpIds, itemIds, type,curCode);
 	}
 
 

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

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

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

@@ -163,7 +163,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 
 	@Override
 	public R<Map<String, Object>> getReportData(String billId, String reportCode, String groupCode, String corpIds,
-												String itemIds, String type) {
+												String itemIds, String type, String curCode) {
 		Map<String, Object> map = new HashMap<>();
 		R<Dept> res = sysClient.getDept(deptUtils.getDeptPid());
 		Dept dept;
@@ -782,6 +782,9 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
 					}
 				}
+				if (ObjectUtils.isNotNull(curCode)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCurCode, curCode);
+				}
 				feeCenterList = feeCenterService.list(lambdaQueryWrapper);
 				BigDecimal amountDr = new BigDecimal(MagicValues.ZERO);
 				BigDecimal amountCr = new BigDecimal(MagicValues.ZERO);
@@ -897,6 +900,9 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
 					}
 				}
+				if (ObjectUtils.isNotNull(curCode)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCurCode, curCode);
+				}
 				feeCenterList = feeCenterService.list(lambdaQueryWrapper);
 				BigDecimal amountDr = new BigDecimal(MagicValues.ZERO);
 				BigDecimal amountCr = new BigDecimal(MagicValues.ZERO);
@@ -1470,6 +1476,9 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
 					}
 				}
+				if (ObjectUtils.isNotNull(curCode)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCurCode, curCode);
+				}
 				List<FeeCenter> feeCenterList = feeCenterService.list(lambdaQueryWrapper);
 				bills = billsService.getById(amends.getOrigId());
 				if (bills != null) {
@@ -1569,6 +1578,9 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
 					}
 				}
+				if (ObjectUtils.isNotNull(curCode)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCurCode, curCode);
+				}
 				List<FeeCenter> feeCenterList = feeCenterService.list(lambdaQueryWrapper);
 				bills = billsService.getById(amends.getOrigId());
 				if (bills != null) {
@@ -3940,6 +3952,9 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
 					}
 				}
+				if (ObjectUtils.isNotNull(curCode)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCurCode, curCode);
+				}
 				feeCenterList = feeCenterService.list(lambdaQueryWrapper);
 				BigDecimal amountDr = new BigDecimal(MagicValues.ZERO);
 				BigDecimal amountCr = new BigDecimal(MagicValues.ZERO);
@@ -4055,6 +4070,9 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
 					}
 				}
+				if (ObjectUtils.isNotNull(curCode)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCurCode, curCode);
+				}
 				feeCenterList = feeCenterService.list(lambdaQueryWrapper);
 				BigDecimal amountDr = new BigDecimal(MagicValues.ZERO);
 				BigDecimal amountCr = new BigDecimal(MagicValues.ZERO);
@@ -4303,6 +4321,9 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
 					}
 				}
+				if (ObjectUtils.isNotNull(curCode)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCurCode, curCode);
+				}
 				feeCenterList = feeCenterService.list(lambdaQueryWrapper);
 				BigDecimal amountDr = new BigDecimal(MagicValues.ZERO);
 				BigDecimal amountCr = new BigDecimal(MagicValues.ZERO);
@@ -4407,6 +4428,9 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
 					}
 				}
+				if (ObjectUtils.isNotNull(curCode)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCurCode, curCode);
+				}
 				feeCenterList = feeCenterService.list(lambdaQueryWrapper);
 				BigDecimal amountDr = new BigDecimal(MagicValues.ZERO);
 				BigDecimal amountCr = new BigDecimal(MagicValues.ZERO);

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

@@ -2402,9 +2402,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			bills.setAccountStatus(3);
 		}
 
-		BigDecimal quantity = bills.getQuantity();
-		BigDecimal grossWeight = bills.getGrossWeight();
-		BigDecimal measurement = bills.getMeasurement();
 		//利润 = 收 - 付
 		amountProfit = amountDr.subtract(amountCr);
 		amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
@@ -2428,9 +2425,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		bills.setAmountDrLoc(amountDrLoc);
 		bills.setAmountCrLoc(amountCrLoc);
 		bills.setAmountProfitLoc(amountProfitLoc);
-		bills.setQuantity(quantity);
-		bills.setGrossWeight(grossWeight);
-		bills.setMeasurement(measurement);
 
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 		List<AgentItems> agentItemsList = new ArrayList<>();
@@ -2458,6 +2452,10 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		StringBuilder boxTypeSum = new StringBuilder();
 
 		if (ObjectUtils.isNotNull(bills.getPreContainersList())) {
+			bills.setQuantity(bills.getPreContainersList().stream().map(PreContainers::getNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
+			bills.setGrossWeight(bills.getPreContainersList().stream().map(PreContainers::getGrossWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
+			bills.setNetWeight(bills.getPreContainersList().stream().map(PreContainers::getNetWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
+			bills.setMeasurement(bills.getPreContainersList().stream().map(PreContainers::getMeasurement).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
 			for (PreContainers item : bills.getPreContainersList()) {
 				if (!agentItemsList.isEmpty() && ObjectUtils.isNotNull(item.getInspectionDate())) {
 					for (AgentItems items : agentItemsList) {

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

@@ -462,6 +462,20 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 			} else {
 				throw new RuntimeException("未找到派车信息");
 			}
+		}else{
+			if (1==preContainers.getWhetherWarehousing()){
+				DispatchVehicles dispatchVehicles = dispatchVehiclesService.getOne(new LambdaQueryWrapper<DispatchVehicles>()
+					.eq(DispatchVehicles::getBoxItemsId, preContainers.getId())
+					.eq(DispatchVehicles::getPid, preContainers.getPid()));
+				if (dispatchVehicles != null) {
+					if ("1".equals(dispatchVehicles.getWhetherDispatchVehicles())) {
+						throw new RuntimeException("已确认派车,撤销失败");
+					}
+					dispatchVehiclesService.removeById(dispatchVehicles.getId());
+				} else {
+					throw new RuntimeException("未找到派车信息");
+				}
+			}
 		}
 		Bills bills = billsMapper.selectById(preContainers.getPid());
 		if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {

+ 39 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentItemsServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.trade.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -35,6 +36,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 贸易代理明细表 服务实现类
@@ -69,7 +72,18 @@ public class AgentItemsServiceImpl extends ServiceImpl<AgentItemsMapper, AgentIt
 				deptName = res.getData().getDeptName();
 			}
 		}
+		List<AgentItems> agentItemsList = baseMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+			.eq(AgentItems::getCreateDept, deptUtils.getDeptPid() + "")
+			.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+			.eq(AgentItems::getIsDeleted, 0)
+			.eq(AgentItems::getBillNo, agentItems.getBillNo())
+		);
 		if (agentItems.getId() == null) {
+			if (ObjectUtils.isNotNull(agentItems.getBillNo())) {
+				if (!agentItemsList.isEmpty()) {
+					throw new RuntimeException("提单号不允许重复");
+				}
+			}
 			agentItems.setCreateTime(new Date());
 			agentItems.setCreateUser(AuthUtil.getUserId());
 			agentItems.setCreateUserName(AuthUtil.getUserName());
@@ -78,6 +92,12 @@ public class AgentItemsServiceImpl extends ServiceImpl<AgentItemsMapper, AgentIt
 				agentItems.setCreateDeptName(deptName);
 			}
 		} else {
+			List<Long> ids = agentItemsList.stream().map(AgentItems::getId).distinct().collect(Collectors.toList());
+			if (ObjectUtils.isNotNull(agentItems.getBillNo())) {
+				if (!agentItemsList.isEmpty() && !ids.contains(agentItems.getId())) {
+					throw new RuntimeException("提单号不允许重复");
+				}
+			}
 			agentItems.setUpdateUser(AuthUtil.getUserId());
 			agentItems.setUpdateTime(new Date());
 			agentItems.setUpdateUserName(AuthUtil.getUserName());
@@ -100,8 +120,21 @@ public class AgentItemsServiceImpl extends ServiceImpl<AgentItemsMapper, AgentIt
 				deptName = res.getData().getDeptName();
 			}
 		}
+		String billNo = list.stream().map(AgentItems::getBillNo).filter(Objects::nonNull)
+			.distinct().collect(Collectors.joining(","));
+		List<AgentItems> agentItemsList = baseMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+			.eq(AgentItems::getCreateDept, deptUtils.getDeptPid() + "")
+			.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+			.eq(AgentItems::getIsDeleted, 0)
+			.apply("find_in_set(bill_no,'" + billNo + "')")
+		);
 		for (AgentItems agentItems : list) {
 			if (agentItems.getId() == null) {
+				if (ObjectUtils.isNotNull(agentItems.getBillNo())) {
+					if (!agentItemsList.isEmpty()) {
+						throw new RuntimeException("提单号不允许重复");
+					}
+				}
 				agentItems.setCreateTime(new Date());
 				agentItems.setCreateUser(AuthUtil.getUserId());
 				agentItems.setCreateUserName(AuthUtil.getUserName());
@@ -110,6 +143,12 @@ public class AgentItemsServiceImpl extends ServiceImpl<AgentItemsMapper, AgentIt
 					agentItems.setCreateDeptName(deptName);
 				}
 			} else {
+				List<Long> ids = agentItemsList.stream().map(AgentItems::getId).distinct().collect(Collectors.toList());
+				if (ObjectUtils.isNotNull(agentItems.getBillNo())) {
+					if (!agentItemsList.isEmpty() && !ids.contains(agentItems.getId())) {
+						throw new RuntimeException("提单号不允许重复");
+					}
+				}
 				agentItems.setUpdateUser(AuthUtil.getUserId());
 				agentItems.setUpdateTime(new Date());
 				agentItems.setUpdateUserName(AuthUtil.getUserName());

+ 284 - 363
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -383,7 +383,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				List<Long> ids = count.stream().map(Agent::getId).distinct().collect(Collectors.toList());
 				if (ObjectUtils.isNotNull(agent.getContractNo())) {
 					if (!count.isEmpty() && !ids.contains(agent.getId())) {
-						throw new RuntimeException("提单号不允许重复");
+						throw new RuntimeException("合同号不允许重复");
 					}
 				}
 			}
@@ -403,8 +403,23 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				String orderNoJoin = agent.getAgentItemsList().stream().map(AgentItems::getOrderNo).filter(Objects::nonNull)
 					.distinct().collect(Collectors.joining(","));
 				agent.setOrderNoJoin(orderNoJoin);
+				List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
+					.eq(AgentItems::getCreateDept, deptUtils.getDeptPid() + "")
+					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+					.eq(AgentItems::getIsDeleted, 0)
+					.apply("find_in_set(bill_no,'" + billNo + "')")
+				);
+				List<AgentItems> agentItems =agentItemsList.stream()
+					.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+						Comparator.comparing(AgentItems::getId))), ArrayList::new));
 				for (AgentItems item : agent.getAgentItemsList()) {
 					if (item.getId() == null) {
+						if (ObjectUtils.isNotNull(item.getBillNo())) {
+							List<Long> ids = agentItems.stream().map(AgentItems::getPid).distinct().collect(Collectors.toList());
+							if (!agentItems.isEmpty() && !ids.contains(agent.getId())) {
+								throw new RuntimeException("提单号不允许重复");
+							}
+						}
 						item.setPid(agent.getId());
 						item.setCreateTime(new Date());
 						item.setCreateUser(AuthUtil.getUserId());
@@ -414,6 +429,12 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 							item.setCreateDeptName(deptName);
 						}
 					} else {
+						if (ObjectUtils.isNotNull(item.getBillNo())) {
+							List<Long> ids = agentItems.stream().map(AgentItems::getId).distinct().collect(Collectors.toList());
+							if (!agentItems.isEmpty() && !ids.contains(item.getId())) {
+								throw new RuntimeException("提单号不允许重复");
+							}
+						}
 						item.setUpdateUser(AuthUtil.getUserId());
 						item.setUpdateTime(new Date());
 						item.setUpdateUserName(AuthUtil.getUserName());
@@ -1021,6 +1042,10 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		if (feesList.isEmpty()) {
 			throw new RuntimeException("请先维护费用信息");
 		}
+		detail.setAgentItemsList(agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
+			.eq(AgentItems::getPid, detail.getId())
+			.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+			.eq(AgentItems::getIsDeleted, 0)));
 		if (feeCenterService.count(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getIsDeleted, 0)
@@ -1080,20 +1105,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			}
 		}
 		Agent detail = baseMapper.selectById(agent.getId());
-		if (ObjectUtils.isNotNull(agent.getAgentItemsRList())) {
-			String billNo = agent.getAgentItemsRList().stream().map(AgentItemsR::getBillNo).collect(Collectors.joining(","));
-			List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
-				.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
-				.eq(AgentItems::getIsDeleted, 0)
-				.apply("find_in_set(bill_no,'" + billNo + "')"));
-			for (AgentItems items : agentItemsList) {
-				items.setWhetherBalancePayment("1");
-			}
-			agentItemsService.updateBatchById(agentItemsList);
-			detail.setAgentItemsRList(agent.getAgentItemsRList());
-		} else {
-			throw new RuntimeException("请选择明细");
-		}
 		detail.setOrderStatus("尾款账单已生成");
 		detail.setExchangeRate(agent.getExchangeRate());
 		List<BFees> feesList = bFeesService.list(new LambdaQueryWrapper<BFees>()
@@ -1125,22 +1136,44 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		}
 
 		List<FeeCenter> feeCenterList = new ArrayList<>();
-		FeeCenter feeCenterSFK = assemblyDataWK("MYDL", detail, "WK", 1L, 1, deptId, deptName, feesList);
-		if (feeCenterSFK != null) {
-			detail.setFinalPaymentReceivable(feeCenterSFK.getAmountLoc());
-			feeCenterList.add(feeCenterSFK);
-		}
-		FeeCenter feeCenterYDF = assemblyDataWK("MYDL", detail, "YDF", 2L, 2, deptId, deptName, feesList);
-		if (feeCenterYDF != null) {
-			feeCenterList.add(feeCenterYDF);
-		}
-		FeeCenter feeCenterSXF = assemblyDataWK("MYDL", detail, "SXF", 3L, 3, deptId, deptName, feesList);
-		if (feeCenterSXF != null) {
-			feeCenterList.add(feeCenterSXF);
-		}
-		FeeCenter feeCenterYFK = assemblyDataWK("MYDL", detail, "YFK", 4L, 4, deptId, deptName, feesList);
-		if (feeCenterYFK != null) {
-			feeCenterList.add(feeCenterYFK);
+		if (ObjectUtils.isNotNull(agent.getAgentItemsRList())) {
+			String billNo = agent.getAgentItemsRList().stream().map(AgentItemsR::getBillNo).collect(Collectors.joining(","));
+			detail.setFinalPaymentReceivable(agent.getAgentItemsRList().stream().map(AgentItemsR::getThisSettlementAmount)
+				.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
+				.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+				.eq(AgentItems::getIsDeleted, 0)
+				.apply("find_in_set(bill_no,'" + billNo + "')"));
+			for (AgentItems items : agentItemsList) {
+				items.setWhetherBalancePayment("1");
+			}
+			agentItemsService.updateBatchById(agentItemsList);
+			for (AgentItemsR items : agent.getAgentItemsRList()) {
+				List<AgentItems> agentItems = agentItemsList.stream().filter(e -> e.getBillNo().equals(items.getBillNo()))
+					.collect(Collectors.toList());
+				List<AgentItemsR> agentItemsRList = new ArrayList<>();
+				agentItemsRList.add(items);
+				detail.setAgentItemsRList(agentItemsRList);
+				detail.setAgentItemsList(agentItems);
+				FeeCenter feeCenterSFK = assemblyDataWK("MYDL", detail, "WK", 1L, 1, deptId, deptName, feesList);
+				if (feeCenterSFK != null) {
+					feeCenterList.add(feeCenterSFK);
+				}
+				FeeCenter feeCenterYDF = assemblyDataWK("MYDL", detail, "YDF", 2L, 2, deptId, deptName, feesList);
+				if (feeCenterYDF != null) {
+					feeCenterList.add(feeCenterYDF);
+				}
+				FeeCenter feeCenterSXF = assemblyDataWK("MYDL", detail, "SXF", 3L, 3, deptId, deptName, feesList);
+				if (feeCenterSXF != null) {
+					feeCenterList.add(feeCenterSXF);
+				}
+				FeeCenter feeCenterYFK = assemblyDataWK("MYDL", detail, "YFK", 4L, 4, deptId, deptName, feesList);
+				if (feeCenterYFK != null) {
+					feeCenterList.add(feeCenterYFK);
+				}
+			}
+		} else {
+			throw new RuntimeException("请选择明细");
 		}
 		if (!feeCenterList.isEmpty()) {
 			feeCenterService.saveBatch(feeCenterList);
@@ -1716,7 +1749,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			.eq(Agent::getIsDeleted, 0)
 			.eq(Agent::getBusinessType, "MYDL")
 			.apply("find_in_set(contract_no,'" + billNo + "')"));
-//		Agent detail = baseMapper.selectById(feeCenterList.get(0).getPid());
 		if (agentList.isEmpty()) {
 			throw new RuntimeException("未查到贸易代理单据信息");
 		}
@@ -1730,97 +1762,48 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		BigDecimal amountC = feeCenterList.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 		if (new BigDecimal("0").compareTo(amountD) != 0 && amount.compareTo(amountD) == 0) {
 			BigDecimal amountSub = amountC.subtract(amountD);
+			AdvanceCharge advanceCharge = advanceChargeService.getOne(new LambdaQueryWrapper<AdvanceCharge>()
+				.eq(AdvanceCharge::getTenantId, AuthUtil.getTenantId())
+				.eq(AdvanceCharge::getIsDeleted, 0)
+				.eq(AdvanceCharge::getCorpId, agentList.get(0).getDomesticConsigneeId()));
+			if (advanceCharge == null) {
+				advanceCharge = new AdvanceCharge();
+				advanceCharge.setCorpId(agentList.get(0).getDomesticConsigneeId());
+				advanceCharge.setCorpName(agentList.get(0).getDomesticConsigneeCname());
+				advanceCharge.setCreateUser(AuthUtil.getUserId());
+				advanceCharge.setCreateUserName(AuthUtil.getUserName());
+				advanceCharge.setCreateTime(new Date());
+				advanceCharge.setCreateDept(deptId);
+				advanceCharge.setCreateDeptName(deptName);
+				advanceCharge.setAdvancePaymentBalance(new BigDecimal("0.00"));
+				advanceCharge.setInOverpayment(new BigDecimal("0.00"));
+			}
+			AdvanceChargeItem advanceChargeItem = new AdvanceChargeItem();
+			advanceChargeItem.setCreateUser(AuthUtil.getUserId());
+			advanceChargeItem.setCreateUserName(AuthUtil.getUserName());
+			advanceChargeItem.setCreateTime(new Date());
+			advanceChargeItem.setCreateDept(deptId);
+			advanceChargeItem.setCreateDeptName(deptName);
+			advanceChargeItem.setSrcId(agent.getId());
+			advanceChargeItem.setSrcPid(agent.getId());
+			advanceChargeItem.setOrderNo(agent.getBusinessNo());
+			advanceChargeItem.setOverpayment(amountSub);
+			advanceChargeItem.setSrcOrderNo(agent.getBusinessNo());
+			advanceChargeItem.setBillNo(agent.getBusinessNo());
+			advanceChargeItem.setIdentifier(0);
 			if (amountSub.compareTo(new BigDecimal("0")) > 0) {
-				AdvanceCharge advanceCharge = advanceChargeService.getOne(new LambdaQueryWrapper<AdvanceCharge>()
-					.eq(AdvanceCharge::getTenantId, AuthUtil.getTenantId())
-					.eq(AdvanceCharge::getIsDeleted, 0)
-					.eq(AdvanceCharge::getCorpId, agentList.get(0).getDomesticConsigneeId()));
-				if (advanceCharge != null) {
-					advanceCharge.setAdvancePaymentBalance(advanceCharge.getAdvancePaymentBalance().add(amountSub));
-					advanceCharge.setInOverpayment(advanceCharge.getInOverpayment().add(amountSub));
-				} else {
-					advanceCharge = new AdvanceCharge();
-					advanceCharge.setAdvancePaymentBalance(amountSub);
-					advanceCharge.setInOverpayment(amountSub);
-					advanceCharge.setCorpId(agentList.get(0).getDomesticConsigneeId());
-					advanceCharge.setCorpName(agentList.get(0).getDomesticConsigneeCname());
-					advanceCharge.setCreateUser(AuthUtil.getUserId());
-					advanceCharge.setCreateUserName(AuthUtil.getUserName());
-					advanceCharge.setCreateTime(new Date());
-					advanceCharge.setCreateDept(deptId);
-					advanceCharge.setCreateDeptName(deptName);
-				}
-				advanceChargeService.saveOrUpdate(advanceCharge);
-				AdvanceChargeItem advanceChargeItem = new AdvanceChargeItem();
-				advanceChargeItem.setCreateUser(AuthUtil.getUserId());
-				advanceChargeItem.setCreateUserName(AuthUtil.getUserName());
-				advanceChargeItem.setCreateTime(new Date());
-				advanceChargeItem.setCreateDept(deptId);
-				advanceChargeItem.setCreateDeptName(deptName);
-				advanceChargeItem.setPid(advanceCharge.getId());
-				advanceChargeItem.setSrcId(agent.getId());
-				advanceChargeItem.setSrcPid(agent.getId());
-				advanceChargeItem.setOrderNo(agent.getBusinessNo());
-				advanceChargeItem.setOverpayment(amountSub);
-				advanceChargeItem.setOverpaymentType(0);
-				advanceChargeItem.setSrcOrderNo(agent.getBusinessNo());
-				advanceChargeItem.setBillNo(agent.getBusinessNo());
-				advanceChargeItem.setIdentifier(0);
-				advanceChargeItemService.save(advanceChargeItem);
+				advanceCharge.setAdvancePaymentBalance(advanceCharge.getAdvancePaymentBalance().add(amountSub));
+				advanceCharge.setInOverpayment(advanceCharge.getInOverpayment().add(amountSub));
 			} else if (amountSub.compareTo(new BigDecimal("0")) < 0) {
-				FeeCenter feeCenter = new FeeCenter();
-				feeCenter.setCreateTime(new Date());
-				feeCenter.setCreateUser(AuthUtil.getUserId());
-				feeCenter.setCreateUserName(AuthUtil.getUserName());
-				if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
-					feeCenter.setCreateDept(deptId + "");
-					feeCenter.setBranchId(deptId + "");
-					feeCenter.setCreateDeptName(deptName);
-				}
-				feeCenter.setBusinessType(agentList.get(0).getBusinessType());
-				feeCenter.setPid(agentList.get(0).getId());
-				feeCenter.setLineNo(feeCenterListD.size() + 1L);
-				feeCenter.setBillNo(agentList.get(0).getBusinessNo());
-				feeCenter.setBillDate(agentList.get(0).getBusinessDate());
-				feeCenter.setCorpId(agentList.get(0).getDomesticConsigneeId());
-				feeCenter.setCorpCnName(agentList.get(0).getDomesticConsigneeCname());
-				feeCenter.setBillCorpId(agentList.get(0).getCorpId());
-				feeCenter.setBillCorpCnName(agentList.get(0).getCorpName());
-				feeCenter.setMblno(agentList.get(0).getContractNo());
-				feeCenter.setPolId(agentList.get(0).getPolId());
-				feeCenter.setPolCode(agentList.get(0).getPolCode());
-				feeCenter.setPolCnName(agentList.get(0).getPolCnName());
-				feeCenter.setPolEnName(agentList.get(0).getPolEnName());
-				feeCenter.setPodId(agentList.get(0).getPodId());
-				feeCenter.setPodCode(agentList.get(0).getPodCode());
-				feeCenter.setPodCnName(agentList.get(0).getPodCnName());
-				feeCenter.setPodEnName(agentList.get(0).getPodEnName());
-				BFees feesSFK = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
-					.eq(BFees::getTenantId, AuthUtil.getTenantId())
-					.eq(BFees::getIsDeleted, 0)
-					.eq(BFees::getCode, "DSK"));
-				if (feesSFK == null) {
-					throw new RuntimeException("请先维护待收款费用信息");
-				}
-				feeCenter.setFeeId(feesSFK.getId());
-				feeCenter.setFeeCode(feesSFK.getCode());
-				feeCenter.setFeeCnName(feesSFK.getCnName());
-				feeCenter.setFeeEnName(feesSFK.getEnName());
-				feeCenter.setDc("D");
-				feeCenter.setCurCode(feesSFK.getCurNo());
-				feeCenter.setSort(feeCenterListD.size() + 1);
-				feeCenter.setElementsId(feesSFK.getAccElementId());
-				feeCenter.setElementsCode(feesSFK.getElementsCode());
-				feeCenter.setElementsCnName(feesSFK.getAccElementName());
-				feeCenter.setElementsEnName(feesSFK.getElementsEnName());
-				feeCenter.setUnitNo("JOB");
-				feeCenter.setQuantity(new BigDecimal("1"));
-				feeCenter.setPrice(amountSub.abs());
-				feeCenter.setAmount(amountSub.abs());
-				feeCenterService.save(feeCenter);
+				advanceCharge.setAdvancePaymentBalance(advanceCharge.getAdvancePaymentBalance().add(amountSub));
+				advanceCharge.setOutOverpaymen(advanceCharge.getOutOverpaymen().add(amountSub.abs()));
 			} else {
 				System.out.println("无差额");
 			}
+			agent.setPendingPrepayment(amountSub);
+			advanceChargeService.saveOrUpdate(advanceCharge);
+			advanceChargeItem.setPid(advanceCharge.getId());
+			advanceChargeItemService.save(advanceChargeItem);
 		}
 		Date date = new Date();
 		LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
@@ -2284,6 +2267,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					preContainers.setBoxNo(items.getBoxNo());
 					preContainers.setHsCode(items.getHsCode());
 					preContainers.setGoodsName(items.getLabelProductName());
+					preContainers.setSrcId(items.getId());
 					preContainersList.add(preContainers);
 				}
 			}
@@ -2704,27 +2688,10 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			throw new RuntimeException("请先维护费用信息");
 		}
 		Agent declare = baseMapper.selectById(agent.getId());
+		List<FeeCenter> feeCenterList = new ArrayList<>();
 		if ("FFSQ-SK".equals(agent.getPaidApplication())) {
 			declare.setApplyForPayment("1");
 			declare.setOrderStatus("已生成应付首付款");
-		} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-			if (ObjectUtils.isNotNull(agent.getAgentItemsRList())) {
-				String billNo = agent.getAgentItemsRList().stream().map(AgentItemsR::getBillNo).collect(Collectors.joining(","));
-				List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
-					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
-					.eq(AgentItems::getIsDeleted, 0)
-					.apply("find_in_set(bill_no,'" + billNo + "')"));
-				for (AgentItems items : agentItemsList) {
-					items.setApplyForPaymentBalance("1");
-				}
-				agentItemsService.updateBatchById(agentItemsList);
-				declare.setAgentItemsRList(agent.getAgentItemsRList());
-			} else {
-				throw new RuntimeException("请选择明细");
-			}
-			declare.setOrderStatus("已生成应付尾款");
-		}
-		if ("FFSQ-SK".equals(agent.getPaidApplication())) {
 			if (feeCenterService.count(new LambdaQueryWrapper<FeeCenter>()
 				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 				.eq(FeeCenter::getIsDeleted, 0)
@@ -2733,7 +2700,10 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				.eq(FeeCenter::getFeeCode, "SFK")) > 0) {
 				throw new RuntimeException("首付款已生成,生成失败");
 			}
-			List<FeeCenter> feeCenterList = new ArrayList<>();
+			declare.setAgentItemsList(agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
+				.eq(AgentItems::getPid, declare.getId())
+				.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+				.eq(AgentItems::getIsDeleted, 0)));
 			FeeCenter feeCenterSFK = cAssemblyDataSK("MYDL", declare, "SFK", 1L, 1, deptId, deptName, feesList);
 			if (feeCenterSFK != null) {
 				declare.setFirstPaymentPayable(feeCenterSFK.getAmountLoc());
@@ -2747,62 +2717,80 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			if (feeCenterSXF != null) {
 				feeCenterList.add(feeCenterSXF);
 			}
-			if (!feeCenterList.isEmpty()) {
-				feeCenterService.saveBatch(feeCenterList);
-				FeeCenter item = feeCenterList.stream().filter(e -> "SFK".equals(e.getFeeCode())).findFirst().orElse(null);
-				if (item == null) {
-					throw new RuntimeException("数据错误请联系管理员");
-				}
-				for (FeeCenter feeCenter : feeCenterList) {
-					feeCenter.setSrcItemId(item.getId());
-				}
-				feeCenterService.updateBatchById(feeCenterList);
-			}
 		} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-			List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getIsDeleted, 0)
-				.eq(FeeCenter::getPid, agent.getId())
-				.eq(FeeCenter::getDc, "C")
-				.eq(FeeCenter::getFeeCode, "WK"));
-			if (!feeCenters.isEmpty()) {
-				BigDecimal amount = feeCenters.stream().map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
-				BigDecimal amountSum = declare.getGoodsValue().subtract(declare.getPrepaidAmount());
-				BigDecimal thisSettlementAmount = agent.getAgentItemsRList().stream().map(AgentItemsR::getThisSettlementAmount)
-					.reduce(BigDecimal.ZERO, BigDecimal::add);
-				if (amount.compareTo(amountSum) == 0) {
-					throw new RuntimeException("尾款剩余生成金额为零,生成失败");
+			if (ObjectUtils.isNotNull(agent.getAgentItemsRList())) {
+				List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getPid, agent.getId())
+					.eq(FeeCenter::getDc, "C")
+					.eq(FeeCenter::getFeeCode, "WK"));
+				if (!feeCenters.isEmpty()) {
+					BigDecimal amount = feeCenters.stream().map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal amountSum = declare.getGoodsValue().subtract(declare.getPrepaidAmount());
+					BigDecimal thisSettlementAmount = agent.getAgentItemsRList().stream().map(AgentItemsR::getThisSettlementAmount)
+						.reduce(BigDecimal.ZERO, BigDecimal::add);
+					if (amount.compareTo(amountSum) == 0) {
+						throw new RuntimeException("尾款剩余生成金额为零,生成失败");
+					}
+					BigDecimal amountSub = amountSum.subtract(amount);
+					if (thisSettlementAmount.compareTo(amountSub) > 0) {
+						throw new RuntimeException("本次生成金额大于剩余金额,剩余未生成金额:" + amountSub);
+					}
 				}
-				BigDecimal amountSub = amountSum.subtract(amount);
-				if (thisSettlementAmount.compareTo(amountSub) > 0) {
-					throw new RuntimeException("本次生成金额大于剩余金额,剩余未生成金额:" + amountSub);
+				String billNo = agent.getAgentItemsRList().stream().map(AgentItemsR::getBillNo).collect(Collectors.joining(","));
+				List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
+					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+					.eq(AgentItems::getIsDeleted, 0)
+					.apply("find_in_set(bill_no,'" + billNo + "')"));
+				for (AgentItems items : agentItemsList) {
+					items.setApplyForPaymentBalance("1");
 				}
+				agentItemsService.updateBatchById(agentItemsList);
+				for (AgentItemsR items : agent.getAgentItemsRList()) {
+					List<AgentItems> agentItems = agentItemsList.stream().filter(e -> e.getBillNo().equals(items.getBillNo()))
+						.collect(Collectors.toList());
+					List<AgentItemsR> agentItemsRList = new ArrayList<>();
+					agentItemsRList.add(items);
+					declare.setAgentItemsRList(agentItemsRList);
+					declare.setAgentItemsList(agentItems);
+					FeeCenter feeCenterSFK = cAssemblyDataWK("MYDL", declare, "WK", 1L, 1, deptId, deptName, feesList);
+					if (feeCenterSFK != null) {
+						declare.setFinalPaymentPayable(feeCenterSFK.getAmountLoc());
+						feeCenterList.add(feeCenterSFK);
+					}
+					FeeCenter feeCenterYDF = cAssemblyDataWK("MYDL", declare, "YDF", 2L, 2, deptId, deptName, feesList);
+					if (feeCenterYDF != null) {
+						feeCenterList.add(feeCenterYDF);
+					}
+					FeeCenter feeCenterSXF = cAssemblyDataWK("MYDL", declare, "SXF", 3L, 3, deptId, deptName, feesList);
+					if (feeCenterSXF != null) {
+						feeCenterList.add(feeCenterSXF);
+					}
+				}
+			} else {
+				throw new RuntimeException("请选择明细");
 			}
-			List<FeeCenter> feeCenterList = new ArrayList<>();
-			FeeCenter feeCenterSFK = cAssemblyDataWK("MYDL", declare, "WK", 1L, 1, deptId, deptName, feesList);
-			if (feeCenterSFK != null) {
-				declare.setFinalPaymentPayable(feeCenterSFK.getAmountLoc());
-				feeCenterList.add(feeCenterSFK);
-			}
-			FeeCenter feeCenterYDF = cAssemblyDataWK("MYDL", declare, "YDF", 2L, 2, deptId, deptName, feesList);
-			if (feeCenterYDF != null) {
-				feeCenterList.add(feeCenterYDF);
+			declare.setOrderStatus("已生成应付尾款");
+		}
+		if (!feeCenterList.isEmpty()) {
+			feeCenterService.saveBatch(feeCenterList);
+			String type;
+			if ("FFSQ-SK".equals(agent.getPaidApplication())) {
+				type = "FFSQ-SK";
+			} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
+				type = "FFSQ-WK";
+			} else {
+				type = "";
 			}
-			FeeCenter feeCenterSXF = cAssemblyDataWK("MYDL", declare, "SXF", 3L, 3, deptId, deptName, feesList);
-			if (feeCenterSXF != null) {
-				feeCenterList.add(feeCenterSXF);
+			FeeCenter item = feeCenterList.stream().filter(e -> type.equals(e.getFeeCode())).findFirst().orElse(null);
+			if (item == null) {
+				throw new RuntimeException("数据错误请联系管理员");
 			}
-			if (!feeCenterList.isEmpty()) {
-				feeCenterService.saveBatch(feeCenterList);
-				FeeCenter item = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())).findFirst().orElse(null);
-				if (item == null) {
-					throw new RuntimeException("数据错误请联系管理员");
-				}
-				for (FeeCenter feeCenter : feeCenterList) {
-					feeCenter.setSrcItemId(item.getId());
-				}
-				feeCenterService.updateBatchById(feeCenterList);
+			for (FeeCenter feeCenter : feeCenterList) {
+				feeCenter.setSrcItemId(item.getId());
 			}
+			feeCenterService.updateBatchById(feeCenterList);
 		}
 		baseMapper.updateById(declare);
 		return declare;
@@ -3292,7 +3280,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			map.put("agentBillReportList", new ArrayList<>());
 			map.put("agentZzsReportList", new ArrayList<>());
 			map.put(MagicValues.DATA, agentReport);
-		} else if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.THE_FIRST_ONE.equals(groupCode) && MagicValues.MYDL.equals(type)) {
+		} else if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.THE_FIRST_ONE.equals(groupCode) && MagicValues.MYDL_STL.equals(type)) {
 			Agent agent = baseMapper.selectById(billId);
 			DateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd");
 			if (agent != null) {
@@ -3312,119 +3300,89 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				} else {
 					throw new RuntimeException("获取报表表头数据失败");
 				}
-				List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
-					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
-					.eq(AgentItems::getIsDeleted, 0)
-					.eq(AgentItems::getPid, agent.getId()));
-				List<Agent> agentList = new ArrayList<>();
+				AgentFeeReport agentFeeReport = new AgentFeeReport();
+				List<AgentFeeItemsReport> agentFeeItemsReportList = new ArrayList<>();
 				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-					.eq(FeeCenter::getPid, agent.getId())
-					.eq(FeeCenter::getFeeType, "1")
+					.eq(FeeCenter::getStlPid, agent.getId())
+					.eq(FeeCenter::getDc, "D")
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 					.eq(FeeCenter::getIsDeleted, 0));
-				if (!feeCenterList.isEmpty()) {
-					List<Long> stlPids = feeCenterList.stream().map(FeeCenter::getStlPid)
-						.filter(Objects::nonNull).distinct().collect(Collectors.toList());
-					if (!stlPids.isEmpty()) {
-						agentList = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
-							.eq(Agent::getTenantId, AuthUtil.getTenantId())
-							.eq(Agent::getIsDeleted, 0)
-							.eq(Agent::getBusinessType, "MYDL-STL")
-							.in(Agent::getId, stlPids));
-					}
-				} else {
+				if (feeCenterList.isEmpty()) {
 					throw new RuntimeException("请先维护首款费用信息");
 				}
-				AgentSKReport agentSKReport = new AgentSKReport();
-				List<Map<String, Object>> mapList = new ArrayList<>();
-				List<Long> stlPids = feeCenterList.stream().filter(e -> "SFK".equals(e.getFeeCode())
-						&& "D".equals(e.getDc())).map(FeeCenter::getStlPid)
-					.filter(Objects::nonNull).distinct().collect(Collectors.toList());
-				if (!agentList.isEmpty()) {
-					List<Agent> agentList1 = agentList.stream().filter(e -> stlPids.contains(e.getId())).collect(Collectors.toList());
-					for (Agent item : agentList1) {
-						Map<String, Object> map1 = new HashMap<>();
-						map1.put("time", dateFormat.format(item.getBusinessDate()));
-						BigDecimal remainingAmount = feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode())
-								&& "D".equals(e.getDc()) && "1".equals(e.getFeeType()) && item.getId().equals(e.getStlPid()))
-							.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-						map1.put("amount", item.getActualAmount().add(item.getPostElectricFee())
-							.add(item.getServiceCharge()).subtract(remainingAmount));
-						mapList.add(map1);
-					}
-					agentSKReport.setMapList(mapList.isEmpty() ? new ArrayList<>() : mapList);
+				List<Long> ids = feeCenterList.stream().map(FeeCenter::getPid).filter(Objects::nonNull).collect(Collectors.toList());
+				List<FeeCenter> feeCenterListC = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.in(FeeCenter::getPid, ids)
+					.eq(FeeCenter::getDc, "C")
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0));
+				if (feeCenterList.isEmpty()) {
+					throw new RuntimeException("请先维护首款费用信息");
 				}
-				agentSKReport.setPaymentMethod(agent.getAdvanceRatio());
-				agentSKReport.setContractNo(agent.getContractNo());
-				agentSKReport.setPrepaidTime(dateFormat.format(agent.getBusinessDate()));
-				agentSKReport.setSkAmountUsd(agent.getPrepaidAmount());
-				agentSKReport.setAmountUsd(agent.getPrepaidAmount());
-				FeeCenter feeCenters = feeCenterList.stream().filter(e -> "SFK".equals(e.getFeeCode())
-					&& "D".equals(e.getDc()) && "1".equals(e.getFeeType())).findFirst().orElse(null);
-				if (feeCenters != null) {
-					agentSKReport.setExchangeRate(feeCenters.getExrate());
-					agentSKReport.setAmount(feeCenters.getAmount());
-					feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode())
-							&& "D".equals(e.getDc()) && "1".equals(e.getFeeType()) && e.getSrcItemId().equals(feeCenters.getId()))
-						.findFirst().ifPresent(feeCentersYDF ->
-							agentSKReport.setPostElectricFee(ObjectUtils.isNotNull(feeCentersYDF.getAmount()) ? feeCentersYDF.getAmount()
-								: new BigDecimal("0.00")));
-					feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode())
-							&& "D".equals(e.getDc()) && "1".equals(e.getFeeType()) && e.getSrcItemId().equals(feeCenters.getId()))
-						.findFirst().ifPresent(feeCentersSXF ->
-							agentSKReport.setServiceCharge(ObjectUtils.isNotNull(feeCentersSXF.getAmount()) ? feeCentersSXF.getAmount()
-								: new BigDecimal("0.00")));
-					feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode())
-							&& "D".equals(e.getDc()) && "1".equals(e.getFeeType()) && e.getSrcItemId().equals(feeCenters.getId()))
-						.findFirst().ifPresent(feeCentersYFK ->
-							agentSKReport.setRemainingAmount(ObjectUtils.isNotNull(feeCentersYFK.getAmount()) ? feeCentersYFK.getAmount()
-								: new BigDecimal("0.00")));
-				} else {
-					agentSKReport.setAmount(new BigDecimal("0.00"));
-					agentSKReport.setPostElectricFee(new BigDecimal("0.00"));
-					agentSKReport.setServiceCharge(new BigDecimal("0.00"));
-					agentSKReport.setRemainingAmount(new BigDecimal("0.00"));
-					throw new RuntimeException("未查到应收首款费用信息");
+				List<Long> stlPidC = feeCenterListC.stream().map(FeeCenter::getStlPid).filter(Objects::nonNull).collect(Collectors.toList());
+				List<Agent> agentList = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
+					.eq(Agent::getTenantId, AuthUtil.getTenantId())
+					.eq(Agent::getIsDeleted, 0)
+					.in(Agent::getId, stlPidC));
+				List<FeeCenter> feeCentersSk = feeCenterList.stream().filter(e -> ObjectUtils.isNotNull(e.getFeeType()) &&
+					"1".equals(e.getFeeType()) && "SFK".equals(e.getFeeCode()))
+					.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+					Comparator.comparing(FeeCenter::getBillNo))), ArrayList::new));
+				for (FeeCenter item : feeCentersSk) {
+					AgentFeeItemsReport agentFeeItemsReport = new AgentFeeItemsReport();
+					agentFeeItemsReport.setContractNo(item.getBillNo());
+					agentFeeItemsReport.setOrderNo(item.getOrderNo());
+					agentFeeItemsReport.setFactoryNumber(item.getFactoryNumber());
+					agentFeeItemsReport.setBillNo(item.getMblno());
+					agentFeeItemsReport.setBoxNo(item.getCntrNo());
+					agentFeeItemsReport.setGoodsName(item.getGoodsName());
+					agentFeeItemsReport.setAmountUsd(item.getAmountLoc());
+					agentFeeItemsReport.setExchangeRate(item.getExrate());
+					agentFeeItemsReport.setAmount(item.getAmount());
+					FeeCenter feeCenter = feeCenterListC.stream().filter(e-> e.getFeeCode().equals(item.getFeeCode()))
+							.findFirst().orElse(null);
+					if (feeCenter != null){
+						agentFeeItemsReport.setRealityExchangeRate(feeCenter.getStlExrate());
+						agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()));
+					}else{
+						agentFeeItemsReport.setRealityExchangeRate(null);
+						agentFeeItemsReport.setRealityAmount(null);
+					}
+					agentFeeItemsReportList.add(agentFeeItemsReport);
 				}
-				agentSKReport.setSumAmount(agentSKReport.getAmount().add(agentSKReport.getPostElectricFee()
-					.add(agentSKReport.getServiceCharge()).subtract(ObjectUtils.isNotNull(agentSKReport.getRemainingAmount())
-						? agentSKReport.getRemainingAmount() : new BigDecimal("0.00"))));
-				FeeCenter feeCentersC = feeCenterList.stream().filter(e -> "SFK".equals(e.getFeeCode())
-					&& "C".equals(e.getDc()) && "1".equals(e.getFeeType())).findFirst().orElse(null);
-				if (feeCentersC != null) {
-					agentSKReport.setRealityExchangeRate(feeCentersC.getStlExrate());
-					agentSKReport.setRealityAmount(feeCentersC.getAmount());
-					feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode())
-							&& "C".equals(e.getDc()) && "1".equals(e.getFeeType()) && e.getSrcItemId().equals(feeCentersC.getId()))
-						.findFirst().ifPresent(feeCentersYDF ->
-							agentSKReport.setRealityPostElectricFee(ObjectUtils.isNotNull(feeCentersYDF.getAmount()) ? feeCentersYDF.getAmount()
-								: new BigDecimal("0.00")));
-					feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode())
-							&& "C".equals(e.getDc()) && "1".equals(e.getFeeType()) && e.getSrcItemId().equals(feeCentersC.getId()))
-						.findFirst().ifPresent(feeCentersSXF ->
-							agentSKReport.setRealityServiceCharge(ObjectUtils.isNotNull(feeCentersSXF.getAmount()) ? feeCentersSXF.getAmount()
-								: new BigDecimal("0.00")));
-					if (!agentList.isEmpty()) {
-						agentList.stream().filter(e -> e.getId().equals(feeCentersC.getStlPid())).findFirst()
-							.ifPresent(detail -> agentSKReport.setRealityTime(dateFormat.format(detail.getBusinessDate())));
+				List<FeeCenter> feeCentersWk = feeCenterList.stream().filter(e -> ObjectUtils.isNotNull(e.getFeeType()) &&
+						"2".equals(e.getFeeType()) && "WK".equals(e.getFeeCode()))
+					.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+						Comparator.comparing(FeeCenter::getBillNo))), ArrayList::new));
+				for (FeeCenter item : feeCentersWk) {
+					AgentFeeItemsReport agentFeeItemsReport = new AgentFeeItemsReport();
+					agentFeeItemsReport.setContractNo(item.getBillNo());
+					agentFeeItemsReport.setOrderNo(item.getOrderNo());
+					agentFeeItemsReport.setFactoryNumber(item.getFactoryNumber());
+					agentFeeItemsReport.setBillNo(item.getMblno());
+					agentFeeItemsReport.setBoxNo(item.getCntrNo());
+					agentFeeItemsReport.setGoodsName(item.getGoodsName());
+					agentFeeItemsReport.setAmountUsd(item.getAmountLoc());
+					agentFeeItemsReport.setExchangeRate(item.getExrate());
+					agentFeeItemsReport.setAmount(item.getAmount());
+					FeeCenter feeCenter = feeCenterListC.stream().filter(e-> e.getFeeCode().equals(item.getFeeCode()))
+						.findFirst().orElse(null);
+					if (feeCenter != null){
+						agentFeeItemsReport.setRealityExchangeRate(feeCenter.getStlExrate());
+						agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()));
+					}else{
+						agentFeeItemsReport.setRealityExchangeRate(null);
+						agentFeeItemsReport.setRealityAmount(null);
 					}
-				} else {
-					agentSKReport.setRealityAmount(new BigDecimal("0.00"));
-					agentSKReport.setRealityPostElectricFee(new BigDecimal("0.00"));
-					agentSKReport.setRealityServiceCharge(new BigDecimal("0.00"));
+					agentFeeItemsReportList.add(agentFeeItemsReport);
 				}
-				agentSKReport.setRealitySumAmount(agentSKReport.getRealityAmount().add(agentSKReport.getRealityPostElectricFee()
-					.add(agentSKReport.getRealityServiceCharge())));
-				agentSKReport.setRepairAmount(agentSKReport.getRealitySumAmount().subtract(agentSKReport.getSumAmount())
-					.subtract(ObjectUtils.isNotNull(agentSKReport.getRemainingAmount())
-						? agentSKReport.getRemainingAmount() : new BigDecimal("0.00")));
-				agentSKReport.setAgentItems(agentItemsList);
-				agentSKReport.setDept(dept);
-				map.put(MagicValues.DATA, agentSKReport);
+
+				agentFeeReport.setDept(dept);
+				map.put(MagicValues.DATA, agentFeeReport);
 			} else {
-				map.put(MagicValues.DATA, new AgentSKReport());
+				map.put(MagicValues.DATA, new AgentFeeReport());
 			}
-		} else if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.BALANCE_PAYMENT.equals(groupCode) && MagicValues.MYDL.equals(type)) {
+		} else if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.BALANCE_PAYMENT.equals(groupCode) && MagicValues.MYDL_STL.equals(type)) {
 			Agent agent = baseMapper.selectById(billId);
 			DateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd");
 			if (agent != null) {
@@ -3467,7 +3425,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				} else {
 					throw new RuntimeException("请先维护尾款费用信息");
 				}
-				AgentSKReport agentSKReport = new AgentSKReport();
+				AgentFeeReport agentFeeReport = new AgentFeeReport();
 				List<Map<String, Object>> mapList = new ArrayList<>();
 				List<Long> stlPids = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())
 						&& "D".equals(e.getDc())).map(FeeCenter::getStlPid)
@@ -3484,79 +3442,12 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 							.add(item.getServiceCharge()).subtract(remainingAmount));
 						mapList.add(map1);
 					}
-					agentSKReport.setMapList(mapList.isEmpty() ? new ArrayList<>() : mapList);
-				}
-				agentSKReport.setPaymentMethod(agent.getAdvanceRatio());
-				agentSKReport.setContractNo(agent.getContractNo());
-				agentSKReport.setPrepaidTime(dateFormat.format(agent.getBusinessDate()));
-				agentSKReport.setSkAmountUsd(agent.getPrepaidAmount());
-				List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())
-					&& "D".equals(e.getDc()) && "2".equals(e.getFeeType())).collect(Collectors.toList());
-				if (!feeCenters.isEmpty()) {
-					agentSKReport.setExchangeRate(feeCenters.get(0).getExrate());
-					agentSKReport.setAmount(feeCenters.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
-					agentSKReport.setAmountUsd(feeCenters.stream().map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
-					List<Long> feeIds = feeCenters.stream().map(FeeCenter::getId).collect(Collectors.toList());
-					feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode())
-							&& "D".equals(e.getDc()) && "2".equals(e.getFeeType()) && feeIds.contains(e.getSrcItemId()))
-						.findFirst().ifPresent(feeCentersYDF ->
-							agentSKReport.setPostElectricFee(ObjectUtils.isNotNull(feeCentersYDF.getAmount()) ? feeCentersYDF.getAmount()
-								: new BigDecimal("0.00")));
-					feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode())
-							&& "D".equals(e.getDc()) && "2".equals(e.getFeeType()) && feeIds.contains(e.getSrcItemId()))
-						.findFirst().ifPresent(feeCentersSXF ->
-							agentSKReport.setServiceCharge(ObjectUtils.isNotNull(feeCentersSXF.getAmount()) ? feeCentersSXF.getAmount()
-								: new BigDecimal("0.00")));
-					feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode())
-							&& "D".equals(e.getDc()) && "2".equals(e.getFeeType()) && feeIds.contains(e.getSrcItemId()))
-						.findFirst().ifPresent(feeCentersYFK ->
-							agentSKReport.setRemainingAmount(ObjectUtils.isNotNull(feeCentersYFK.getAmount()) ? feeCentersYFK.getAmount()
-								: new BigDecimal("0.00")));
-				} else {
-					agentSKReport.setAmount(new BigDecimal("0.00"));
-					agentSKReport.setPostElectricFee(new BigDecimal("0.00"));
-					agentSKReport.setServiceCharge(new BigDecimal("0.00"));
-					agentSKReport.setRemainingAmount(new BigDecimal("0.00"));
-					throw new RuntimeException("未查到应收尾款费用信息");
+					agentFeeReport.setMapList(mapList.isEmpty() ? new ArrayList<>() : mapList);
 				}
-				agentSKReport.setSumAmount(agentSKReport.getAmount().add(agentSKReport.getPostElectricFee()
-					.add(agentSKReport.getServiceCharge()).subtract(ObjectUtils.isNotNull(agentSKReport.getRemainingAmount())
-						? agentSKReport.getRemainingAmount() : new BigDecimal("0.00"))));
-				List<FeeCenter> feeCentersC = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())
-					&& "C".equals(e.getDc()) && "2".equals(e.getFeeType())).collect(Collectors.toList());
-				if (!feeCentersC.isEmpty()) {
-					agentSKReport.setRealityExchangeRate(feeCentersC.get(0).getStlExrate());
-					agentSKReport.setRealityAmount(feeCentersC.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
-					List<Long> feeIds = feeCentersC.stream().map(FeeCenter::getId).collect(Collectors.toList());
-					feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode())
-							&& "C".equals(e.getDc()) && "2".equals(e.getFeeType()) && feeIds.contains(e.getSrcItemId()))
-						.findFirst().ifPresent(feeCentersYDF ->
-							agentSKReport.setRealityPostElectricFee(ObjectUtils.isNotNull(feeCentersYDF.getAmount()) ? feeCentersYDF.getAmount()
-								: new BigDecimal("0.00")));
-					feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode())
-							&& "C".equals(e.getDc()) && "2".equals(e.getFeeType()) && feeIds.contains(e.getSrcItemId()))
-						.findFirst().ifPresent(feeCentersSXF ->
-							agentSKReport.setRealityServiceCharge(ObjectUtils.isNotNull(feeCentersSXF.getAmount()) ? feeCentersSXF.getAmount()
-								: new BigDecimal("0.00")));
-					if (!agentList.isEmpty()) {
-						agentList.stream().filter(e -> e.getId().equals(feeCentersC.get(0).getStlPid())).findFirst()
-							.ifPresent(detail -> agentSKReport.setRealityTime(dateFormat.format(detail.getBusinessDate())));
-					}
-				} else {
-					agentSKReport.setRealityAmount(new BigDecimal("0.00"));
-					agentSKReport.setRealityPostElectricFee(new BigDecimal("0.00"));
-					agentSKReport.setRealityServiceCharge(new BigDecimal("0.00"));
-				}
-				agentSKReport.setRealitySumAmount(agentSKReport.getRealityAmount().add(agentSKReport.getRealityPostElectricFee()
-					.add(agentSKReport.getRealityServiceCharge())));
-				agentSKReport.setRepairAmount(agentSKReport.getRealitySumAmount().subtract(agentSKReport.getSumAmount())
-					.subtract(ObjectUtils.isNotNull(agentSKReport.getRemainingAmount())
-						? agentSKReport.getRemainingAmount() : new BigDecimal("0.00")));
-				agentSKReport.setAgentItems(agentItemsList);
-				agentSKReport.setDept(dept);
-				map.put(MagicValues.DATA, agentSKReport);
+				agentFeeReport.setDept(dept);
+				map.put(MagicValues.DATA, agentFeeReport);
 			} else {
-				map.put(MagicValues.DATA, new AgentSKReport());
+				map.put(MagicValues.DATA, new AgentFeeReport());
 			}
 		} else if (MagicValues.COST.equals(reportCode) && MagicValues.RECEIVABLE.equals(groupCode) && MagicValues.MYDL.equals(type)) {
 			Agent agent = baseMapper.selectById(billId);
@@ -4062,7 +3953,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		feeCenter.setPid(detail.getId());
 		feeCenter.setLineNo(lineNo);
 		feeCenter.setBillNo(detail.getContractNo());
-		feeCenter.setMblno(detail.getContractNo());
 		feeCenter.setBillDate(detail.getBusinessDate());
 		feeCenter.setCorpId(detail.getDomesticConsigneeId());
 		feeCenter.setCorpCnName(detail.getDomesticConsigneeCname());
@@ -4093,6 +3983,13 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		feeCenter.setElementsCnName(feesSFK.getAccElementName());
 		feeCenter.setElementsEnName(feesSFK.getElementsEnName());
 		feeCenter.setUnitNo("JOB");
+		if (ObjectUtils.isNotNull(detail.getAgentItemsList()) && !detail.getAgentItemsList().isEmpty()) {
+			feeCenter.setOrderNo(detail.getAgentItemsList().stream().map(AgentItems::getOrderNo).filter(Objects::nonNull).collect(Collectors.joining(",")));
+			feeCenter.setFactoryNumber(detail.getAgentItemsList().stream().map(AgentItems::getFactoryNumber).filter(Objects::nonNull).collect(Collectors.joining(",")));
+			feeCenter.setGoodsName(detail.getAgentItemsList().stream().map(AgentItems::getLabelProductName).filter(Objects::nonNull).collect(Collectors.joining(",")));
+		} else {
+			throw new RuntimeException("请先维护订单明细");
+		}
 		if ("SFK".equals(type)) {
 			feeCenter.setQuantity(new BigDecimal("1"));
 			feeCenter.setAmountLoc(detail.getPrepaidAmount());
@@ -4198,6 +4095,15 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		List<AgentItemsR> agentItemsRList = detail.getAgentItemsRList();
 		String billNo = agentItemsRList.stream().map(AgentItemsR::getBillNo).collect(Collectors.joining(","));
 		feeCenter.setMblno(billNo);
+		if (ObjectUtils.isNotNull(detail.getAgentItemsList()) && !detail.getAgentItemsList().isEmpty()) {
+			feeCenter.setEta(detail.getAgentItemsList().get(0).getEstimateReachHarbor());
+			feeCenter.setOrderNo(detail.getAgentItemsList().stream().map(AgentItems::getOrderNo).filter(Objects::nonNull).collect(Collectors.joining(",")));
+			feeCenter.setFactoryNumber(detail.getAgentItemsList().stream().map(AgentItems::getFactoryNumber).filter(Objects::nonNull).collect(Collectors.joining(",")));
+			feeCenter.setGoodsName(detail.getAgentItemsList().stream().map(AgentItems::getLabelProductName).filter(Objects::nonNull).collect(Collectors.joining(",")));
+			feeCenter.setCntrNo(detail.getAgentItemsList().stream().map(AgentItems::getBoxNo).filter(Objects::nonNull).collect(Collectors.joining(",")));
+		} else {
+			throw new RuntimeException("请先维护订单明细");
+		}
 		if ("WK".equals(type)) {
 			BigDecimal amount = agentItemsRList.stream().map(AgentItemsR::getThisSettlementAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 			feeCenter.setQuantity(new BigDecimal("1"));
@@ -4272,7 +4178,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		feeCenter.setPid(detail.getId());
 		feeCenter.setLineNo(lineNo);
 		feeCenter.setBillNo(detail.getContractNo());
-		feeCenter.setMblno(detail.getContractNo());
 		feeCenter.setBillDate(detail.getBusinessDate());
 		feeCenter.setCorpId(detail.getDomesticConsigneeId());
 		feeCenter.setCorpCnName(detail.getDomesticConsigneeCname());
@@ -4303,6 +4208,13 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		feeCenter.setElementsCnName(feesSFK.getAccElementName());
 		feeCenter.setElementsEnName(feesSFK.getElementsEnName());
 		feeCenter.setUnitNo("JOB");
+		if (ObjectUtils.isNotNull(detail.getAgentItemsList()) && !detail.getAgentItemsList().isEmpty()) {
+			feeCenter.setOrderNo(detail.getAgentItemsList().stream().map(AgentItems::getOrderNo).filter(Objects::nonNull).collect(Collectors.joining(",")));
+			feeCenter.setFactoryNumber(detail.getAgentItemsList().stream().map(AgentItems::getFactoryNumber).filter(Objects::nonNull).collect(Collectors.joining(",")));
+			feeCenter.setGoodsName(detail.getAgentItemsList().stream().map(AgentItems::getLabelProductName).filter(Objects::nonNull).collect(Collectors.joining(",")));
+		} else {
+			throw new RuntimeException("请先维护订单明细");
+		}
 		if ("SFK".equals(type)) {
 			feeCenter.setQuantity(new BigDecimal("1"));
 			feeCenter.setAmountLoc(detail.getPrepaidAmount());
@@ -4408,6 +4320,15 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		List<AgentItemsR> agentItemsRList = detail.getAgentItemsRList();
 		String billNo = agentItemsRList.stream().map(AgentItemsR::getBillNo).collect(Collectors.joining(","));
 		feeCenter.setMblno(billNo);
+		if (ObjectUtils.isNotNull(detail.getAgentItemsList()) && !detail.getAgentItemsList().isEmpty()) {
+			feeCenter.setEta(detail.getAgentItemsList().get(0).getEstimateReachHarbor());
+			feeCenter.setOrderNo(detail.getAgentItemsList().stream().map(AgentItems::getOrderNo).filter(Objects::nonNull).collect(Collectors.joining(",")));
+			feeCenter.setFactoryNumber(detail.getAgentItemsList().stream().map(AgentItems::getFactoryNumber).filter(Objects::nonNull).collect(Collectors.joining(",")));
+			feeCenter.setGoodsName(detail.getAgentItemsList().stream().map(AgentItems::getLabelProductName).filter(Objects::nonNull).collect(Collectors.joining(",")));
+			feeCenter.setCntrNo(detail.getAgentItemsList().stream().map(AgentItems::getBoxNo).filter(Objects::nonNull).collect(Collectors.joining(",")));
+		} else {
+			throw new RuntimeException("请先维护订单明细");
+		}
 		if ("WK".equals(type)) {
 			BigDecimal amount = agentItemsRList.stream().map(AgentItemsR::getThisSettlementAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 			feeCenter.setQuantity(new BigDecimal("1"));

+ 4 - 1
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/InOutStorageServiceImpl.java

@@ -105,6 +105,9 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
 		inOutStorage.setUpdateUser(AuthUtil.getUserId());
 		inOutStorage.setUpdateUserName(AuthUtil.getUserName());
 		if ("RK".equals(inOutStorage.getBillType())) {
+			if (ObjectUtils.isNull(inOutStorage.getStorageDate())){
+				inOutStorage.setStorageDate(new Date());
+			}
 			Bills bills = billsMapper.selectById(inOutStorage.getPid());
 			if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {
 				List<FeeCenter> feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
@@ -651,7 +654,7 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
 			.eq(InOutStorage::getSrcId, inOutStorage.getId())
 			.eq(InOutStorage::getPid, inOutStorage.getPid()));
 		if (outStorage != null) {
-			if ("1".equals(inOutStorage.getConfirmDispatchVehicles())) {
+			if ("1".equals(outStorage.getConfirmDispatchVehicles())) {
 				throw new RuntimeException("已确认出库,撤销失败");
 			}
 			baseMapper.deleteById(outStorage.getId());