Browse Source

贸易代理 2024年8月5日09:26:38

纪新园 1 year ago
parent
commit
f72a803b7b

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

@@ -930,5 +930,11 @@ public class FeeCenter implements Serializable {
 	@ApiModelProperty(value = "利润")
 	private BigDecimal profit;
 
+	/**
+	 * 来源明细id
+	 */
+	@ApiModelProperty(value = "来源明细id")
+	private Long srcItemId;
+
 }
 

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

@@ -355,6 +355,26 @@ public class AgentView implements Serializable {
 	 */
 	@ApiModelProperty(value = "尾款实付时间")
 	private Date finalPaymentInFullDate;
+	/**
+	 * 国外发货人
+	 */
+	@ApiModelProperty(value = "国外发货人")
+	private Long abroadConsignorId;
+	/**
+	 * 国外发货人中文
+	 */
+	@ApiModelProperty(value = "国外发货人中文")
+	private String abroadConsignorCname;
+	/**
+	 * 国内收货人
+	 */
+	@ApiModelProperty(value = "国内收货人")
+	private Long domesticConsigneeId;
+	/**
+	 * 国内收货人中文
+	 */
+	@ApiModelProperty(value = "国内收货人中文")
+	private String domesticConsigneeCname;
 
 
 }

+ 13 - 10
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentSKReport.java

@@ -43,18 +43,17 @@ public class AgentSKReport implements Serializable {
 	private String contractNo;
 
 	/**
-	 * 提单号
-	 */
-	private String billNo;
-
-	/**
 	 * 预付时间
 	 */
 	private String prepaidTime;
 	/**
-	 * 首款金额
+	 * 预付金额(美金)
 	 */
 	private BigDecimal skAmountUsd;
+	/**
+	 * 尾款金额(美金)
+	 */
+	private BigDecimal amountUsd;
 
 	/**
 	 * 汇率
@@ -62,9 +61,9 @@ public class AgentSKReport implements Serializable {
 	private BigDecimal exchangeRate;
 
 	/**
-	 * 首款金额
+	 * 金额RMB
 	 */
-	private BigDecimal skAmount;
+	private BigDecimal amount;
 	/**
 	 * 邮电费
 	 */
@@ -88,9 +87,9 @@ public class AgentSKReport implements Serializable {
 	private BigDecimal realityExchangeRate;
 
 	/**
-	 * 实付首款金额
+	 * 实付金额RMB
 	 */
-	private BigDecimal realitySkAmount;
+	private BigDecimal realityAmount;
 	/**
 	 * 实付邮电费
 	 */
@@ -117,5 +116,9 @@ public class AgentSKReport implements Serializable {
 	 */
 	private List<AgentItems> agentItems;
 
+	private Dept dept;
+
+	private String paymentMethod;
+
 
 }

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java

@@ -242,8 +242,8 @@ public class AuditProecessController extends BladeController {
 			"aea-approve".equals(proecess.getCheckType()) || "aia-approve".equals(proecess.getCheckType())) {
 			auditProecessService.amendsCheck(auditProecess);
 		} else if ("MYDL".equals(proecess.getCheckType()) || "FFSQ-SK".equals(proecess.getCheckType())
-			|| "FFSQ-WK".equals(proecess.getCheckType())|| "YSQR-SK".equals(proecess.getCheckType())
-			|| "YSQR-WK".equals(proecess.getCheckType())) {
+			|| "FFSQ-WK".equals(proecess.getCheckType())|| "YSQR-D".equals(proecess.getCheckType())
+			|| "YSQR-C".equals(proecess.getCheckType())) {
 			auditProecessService.agentCheck(auditProecess);
 		}
 		return R.data(auditProecess);

+ 16 - 16
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -3312,13 +3312,13 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 						+ "单据日期:" + billsDate + ",请审核。"
 						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
-				} else if ("贸易代理首款应收确认".equals(auditProecess.getProcessType())) {
-					message.setMessageBody("您有新的贸易代理首款应收待确认,业务单号:" + proecessTemp.getBillNo() + ","
+				} else if ("贸易代理货款收费确认".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的贸易代理货款收费待确认,业务单号:" + proecessTemp.getBillNo() + ","
 						+ "单据日期:" + billsDate + ",请审核。"
 						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
-				} else if ("贸易代理尾款应收确认".equals(auditProecess.getProcessType())) {
-					message.setMessageBody("您有新的贸易代理尾款应收待确认,业务单号:" + proecessTemp.getBillNo() + ","
+				} else if ("贸易代理货款付费确认".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的贸易代理货款付费待确认,业务单号:" + proecessTemp.getBillNo() + ","
 						+ "单据日期:" + billsDate + ",请审核。"
 						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
@@ -3354,10 +3354,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					sendMessage.setMessageBody("您的贸易代理首款付费申请未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				} else if ("贸易代理尾款付费申请".equals(auditProecess.getProcessType())) {
 					sendMessage.setMessageBody("您的贸易代理尾款付费申请未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				} else if ("贸易代理首款应收确认".equals(auditProecess.getProcessType())) {
-					sendMessage.setMessageBody("您的贸易代理首款应收确认未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				} else if ("贸易代理尾款应收确认".equals(auditProecess.getProcessType())) {
-					sendMessage.setMessageBody("您的贸易代理尾款应收确认未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("贸易代理货款收费确认".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的贸易代理货款收费确认未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("贸易代理货款付费确认".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的贸易代理货款付费确认未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
@@ -3390,10 +3390,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					sendMessage.setMessageBody("您的贸易代理首款付费申请已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				} else if ("贸易代理尾款付费申请".equals(auditProecess.getProcessType())) {
 					sendMessage.setMessageBody("您的贸易代理尾款付费申请已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				} else if ("贸易代理首款应收确认".equals(auditProecess.getProcessType())) {
-					sendMessage.setMessageBody("您的贸易代理首款应收确认已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				} else if ("贸易代理尾款应收确认".equals(auditProecess.getProcessType())) {
-					sendMessage.setMessageBody("您的贸易代理尾款应收确认已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("贸易代理货款收费确认".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的贸易代理货款收费确认已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("贸易代理货款付费确认".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的贸易代理货款付费确认已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
@@ -3423,10 +3423,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					sendMessage.setMessageBody("您的贸易代理首款付费申请未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				} else if ("贸易代理尾款付费申请".equals(auditProecess.getProcessType())) {
 					sendMessage.setMessageBody("您的贸易代理尾款付费申请未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				} else if ("贸易代理首款应收确认".equals(auditProecess.getProcessType())) {
-					sendMessage.setMessageBody("您的贸易代理首款应收确认未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				} else if ("贸易代理尾款应收确认".equals(auditProecess.getProcessType())) {
-					sendMessage.setMessageBody("您的贸易代理尾款应收确认未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("贸易代理货款收费确认".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的贸易代理货款收费确认未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("贸易代理货款付费确认".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的贸易代理货款付费确认未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {

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

@@ -1046,16 +1046,33 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				if (agent == null) {
 					throw new RuntimeException("未找到主表信息");
 				}
-				List<FeeCenter> feeCenters = list.stream().filter(e -> "SFK,WK".contains(e.getFeeCode()))
+				List<FeeCenter> feeCenters = list.stream().filter(e -> "SFK,WK,SXF".contains(e.getFeeCode()) && "C".equals(e.getDc()))
 					.collect(Collectors.toList());
 				BigDecimal profit = new BigDecimal("0.00");
+				String serviceCharge = sysClient.getParamServiceByDept("service.charge", AuthUtil.getTenantId(), AuthUtil.getDeptId());
 				for (FeeCenter item : feeCenters) {
 					if (ObjectUtils.isNull(item.getDiscountExrate())) {
 						throw new RuntimeException("首款、尾款优惠汇率不能为空");
 					}
-					BigDecimal amount = item.getAmountLoc().multiply(item.getDiscountExrate());
-					item.setProfit(item.getAmount().subtract(amount));
-					profit = profit.add(item.getAmount().subtract(amount));
+					if (!"SXF".equals(item.getFeeCode())){
+						BigDecimal amount = item.getAmountLoc().multiply(item.getDiscountExrate());
+						item.setProfit(item.getAmount().subtract(amount));
+						profit = profit.add(item.getAmount().subtract(amount));
+					}else{
+						FeeCenter feeCenter = feeCenters.stream().filter(e-> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
+						if (feeCenter != null){
+							BigDecimal serviceChargeAmount = new BigDecimal("0.00");
+							if (ObjectUtils.isNotNull(serviceCharge)) {
+								serviceChargeAmount = new BigDecimal("1").divide(new BigDecimal(serviceCharge), serviceCharge.length(), RoundingMode.HALF_UP);
+							} else {
+								serviceChargeAmount = new BigDecimal("1").divide(new BigDecimal("1000"), serviceCharge.length(), RoundingMode.HALF_UP);
+							}
+							BigDecimal amount = feeCenter.getAmountLoc().multiply(item.getDiscountExrate()).multiply(serviceChargeAmount);
+							BigDecimal amountSum = item.getAmount().subtract(amount);
+							item.setProfit(amountSum);
+							profit = profit.add(amountSum);
+						}
+					}
 				}
 				agent.setProfit(profit);
 				agentMapper.updateById(agent);

+ 0 - 1
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/AgentController.java

@@ -153,7 +153,6 @@ public class AgentController extends BladeController {
 		return agentService.submit(agent);
 	}
 
-
 	/**
 	 * 删除 贸易代理表
 	 */

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/AgentViewController.java

@@ -80,6 +80,8 @@ public class AgentViewController extends BladeController {
 		lambdaQueryWrapper.eq(AgentView::getTenantId, AuthUtil.getTenantId())
 			.eq(AgentView::getIsDeleted, 0)
 			.eq(ObjectUtils.isNotNull(agentView.getCorpId()), AgentView::getCorpId, agentView.getCorpId())
+			.eq(ObjectUtils.isNotNull(agentView.getAbroadConsignorId()), AgentView::getAbroadConsignorId, agentView.getAbroadConsignorId())
+			.eq(ObjectUtils.isNotNull(agentView.getDomesticConsigneeId()), AgentView::getDomesticConsigneeId, agentView.getDomesticConsigneeId())
 			.eq(ObjectUtils.isNotNull(agentView.getBusinessStatus()), AgentView::getBusinessStatus, agentView.getBusinessStatus())
 			.eq(ObjectUtils.isNotNull(agentView.getWhetherSail()), AgentView::getWhetherSail, agentView.getWhetherSail())
 			.eq(ObjectUtils.isNotNull(agentView.getWhetherReachHarbor()), AgentView::getWhetherReachHarbor, agentView.getWhetherReachHarbor())

+ 358 - 175
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -476,6 +476,20 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				agent.setPostElectricFee(new BigDecimal("0"));
 			}
 		}
+		String serviceCharge = sysClient.getParamServiceByDept("service.charge", AuthUtil.getTenantId(), AuthUtil.getDeptId());
+		if ("MYDL-STL".equals(agent.getBusinessType())) {
+			if (ObjectUtils.isNotNull(serviceCharge)) {
+				BigDecimal serviceChargeAmount = new BigDecimal("1").divide(new BigDecimal(serviceCharge), serviceCharge.length(), RoundingMode.HALF_UP);
+				BigDecimal amount = serviceChargeAmount.multiply(agent.getActualAmount());
+				if (amount.compareTo(new BigDecimal("1000")) > 0) {
+					agent.setServiceCharge(new BigDecimal("1000"));
+				} else {
+					agent.setServiceCharge(amount);
+				}
+			} else {
+				agent.setServiceCharge(new BigDecimal("0.00"));
+			}
+		}
 		List<FeeCenter> feeCenterList = new ArrayList<>();
 		if (ObjectUtils.isNotNull(agent.getFeeCenterListC()) && !agent.getFeeCenterListC().isEmpty()) {
 			long ydfCount = 0L;
@@ -538,16 +552,32 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				}
 			}
 			feeCenterList.addAll(agent.getFeeCenterListC());
-			List<FeeCenter> feeCenters = agent.getFeeCenterListC().stream().filter(e -> "SFK,WK".contains(e.getFeeCode()))
+			List<FeeCenter> feeCenters = agent.getFeeCenterListC().stream().filter(e -> "SFK,WK,SXF".contains(e.getFeeCode()))
 				.collect(Collectors.toList());
 			BigDecimal profit = new BigDecimal("0.00");
 			for (FeeCenter item : feeCenters) {
 				if (ObjectUtils.isNull(item.getDiscountExrate())) {
-					throw new RuntimeException("首款、尾款优惠汇率不能为空");
+					throw new RuntimeException("首款、尾款,手续费优惠汇率不能为空");
+				}
+				if (!"SXF".equals(item.getFeeCode())) {
+					BigDecimal amount = item.getAmountLoc().multiply(item.getDiscountExrate());
+					item.setProfit(item.getAmount().subtract(amount));
+					profit = profit.add(item.getAmount().subtract(amount));
+				} else {
+					FeeCenter feeCenter = feeCenters.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
+					if (feeCenter != null) {
+						BigDecimal serviceChargeAmount = new BigDecimal("0.00");
+						if (ObjectUtils.isNotNull(serviceCharge)) {
+							serviceChargeAmount = new BigDecimal("1").divide(new BigDecimal(serviceCharge), serviceCharge.length(), RoundingMode.HALF_UP);
+						} else {
+							serviceChargeAmount = new BigDecimal("1").divide(new BigDecimal("1000"), serviceCharge.length(), RoundingMode.HALF_UP);
+						}
+						BigDecimal amount = feeCenter.getAmountLoc().multiply(item.getDiscountExrate()).multiply(serviceChargeAmount);
+						BigDecimal amountSum = item.getAmount().subtract(amount);
+						item.setProfit(amountSum);
+						profit = profit.add(amountSum);
+					}
 				}
-				BigDecimal amount = item.getAmountLoc().multiply(item.getDiscountExrate());
-				item.setProfit(item.getAmount().subtract(amount));
-				profit = profit.add(item.getAmount().subtract(amount));
 			}
 			agent.setProfit(profit);
 		}
@@ -619,20 +649,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		if (!feeCenterList.isEmpty()) {
 			feeCenterService.saveOrUpdateBatch(feeCenterList);
 		}
-		if ("MYDL-STL".equals(agent.getBusinessType())) {
-			String serviceCharge = sysClient.getParamServiceByDept("service.charge", AuthUtil.getTenantId(), AuthUtil.getDeptId());
-			if (ObjectUtils.isNotNull(serviceCharge)) {
-				BigDecimal serviceChargeAmount = new BigDecimal("1").divide(new BigDecimal(serviceCharge), serviceCharge.length(), RoundingMode.HALF_UP);
-				BigDecimal amount = serviceChargeAmount.multiply(agent.getActualAmount());
-				if (amount.compareTo(new BigDecimal("1000")) > 0) {
-					agent.setServiceCharge(new BigDecimal("1000"));
-				} else {
-					agent.setServiceCharge(amount);
-				}
-			} else {
-				agent.setServiceCharge(new BigDecimal("0.00"));
-			}
-		}
 		this.saveOrUpdate(agent);
 		return R.data(agent);
 	}
@@ -1005,7 +1021,15 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			feeCenterList.add(feeCenterYFK);
 		}
 		if (!feeCenterList.isEmpty()) {
-			feeCenterService.saveOrUpdateBatch(feeCenterList);
+			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);
 		}
 		baseMapper.updateById(detail);
 		return detail;
@@ -1092,7 +1116,15 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			feeCenterList.add(feeCenterYFK);
 		}
 		if (!feeCenterList.isEmpty()) {
-			feeCenterService.saveOrUpdateBatch(feeCenterList);
+			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);
 		}
 		baseMapper.updateById(detail);
 		return detail;
@@ -1399,6 +1431,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			item.setStlAmount(data.getAmountDr());
 			item.setStlAmountLoc(data.getAmountDr());
 			item.setStlStatus(1);
+			item.setStlDate(agent.getBusinessDate());
 			item.setStlById(AuthUtil.getUserId());
 			item.setStlByName(AuthUtil.getUserName());
 			item.setUnsettledAmount(new BigDecimal("0.00"));
@@ -2003,6 +2036,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			item.setStlAmount(data.getAmountDr());
 			item.setStlAmountLoc(data.getAmountDr());
 			item.setStlStatus(1);
+			item.setStlDate(agent.getBusinessDate());
 			item.setStlById(AuthUtil.getUserId());
 			item.setStlByName(AuthUtil.getUserName());
 			item.setUnsettledAmount(new BigDecimal("0.00"));
@@ -2690,7 +2724,15 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				feeCenterList.add(feeCenterSXF);
 			}
 			if (!feeCenterList.isEmpty()) {
-				feeCenterService.saveOrUpdateBatch(feeCenterList);
+				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>()
@@ -2727,7 +2769,15 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				feeCenterList.add(feeCenterSXF);
 			}
 			if (!feeCenterList.isEmpty()) {
-				feeCenterService.saveOrUpdateBatch(feeCenterList);
+				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);
 			}
 		}
 		baseMapper.updateById(declare);
@@ -2767,10 +2817,18 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			.eq(Agent::getTenantId, AuthUtil.getTenantId())
 			.eq(Agent::getIsDeleted, 0)
 			.apply("find_in_set(id,'" + ids + "')"));
-		List<Long> corpIdList = agentList.stream().map(Agent::getCorpId).distinct().collect(Collectors.toList());
-		if (!corpIdList.isEmpty() && corpIdList.size() != 1) {
-			throw new RuntimeException("请选择单个客户申请费用");
+		if ("D".equals(dc)) {
+			List<Long> domesticConsigneeId = agentList.stream().map(Agent::getDomesticConsigneeId).distinct().collect(Collectors.toList());
+			if (!domesticConsigneeId.isEmpty() && domesticConsigneeId.size() != 1) {
+				throw new RuntimeException("请选择单个国内收货人生成收款");
+			}
+		} else {
+			List<Long> abroadConsignorId = agentList.stream().map(Agent::getAbroadConsignorId).distinct().collect(Collectors.toList());
+			if (!abroadConsignorId.isEmpty() && abroadConsignorId.size() != 1) {
+				throw new RuntimeException("请选择单个国外发货人生成付款");
+			}
 		}
+
 		List<Long> idList = agentList.stream().map(Agent::getId).distinct().collect(Collectors.toList());
 		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getIsDeleted, 0)
@@ -2895,10 +2953,118 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			item.setStlPid(stlAgent.getId());
 		}
 		feeCenterService.saveOrUpdateBatch(feeCenterList);
+		Integer actId = null;
+		String processType = "";
+		String checkType = "";
 		if ("D".equals(stlAgent.getDc())) {
 			stlAgent.setFeeCenterListD(feeCenterList);
+			actId = 1125;
+			processType = "贸易代理货款收费确认";
+			checkType = "YSQR-D";
 		} else {
 			stlAgent.setFeeCenterListC(feeCenterList);
+			actId = 1126;
+			processType = "贸易代理货款付费确认";
+			checkType = "YSQR-C";
+		}
+
+		//获取审批级次
+		List<LosAuditPathsLevels> auditPathsLevels;
+		// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
+		LosAuditPathsActs pathsActs;
+		//是否开启流程
+		LambdaQueryWrapper<LosAuditPathsActs> auditPathsActsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		auditPathsActsLambdaQueryWrapper
+			.eq(LosAuditPathsActs::getIsEnable, 1)
+			.eq(LosAuditPathsActs::getFidStatus, "status")
+			.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
+			.eq(LosAuditPathsActs::getSalesCompanyId, deptUtils.getDeptPid())
+			.eq(LosAuditPathsActs::getActId, actId);
+		pathsActs = auditPathsActsService.getOne(auditPathsActsLambdaQueryWrapper);
+		//获取审批信息
+		LosAuditPathsActs losAuditPathsActs = auditPathsActsService.getOne(new LambdaQueryWrapper<LosAuditPathsActs>()
+			.eq(LosAuditPathsActs::getActId, actId)
+			.eq(LosAuditPathsActs::getFidStatus, "status")
+			.eq(LosAuditPathsActs::getSalesCompanyId, deptUtils.getDeptPid())
+			.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId()));
+		Long pathId = losAuditPathsActs.getPathId();
+		auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
+			.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
+		String status = sysClient.getParamServiceByDept("whether.apply.for.payment", AuthUtil.getTenantId(), AuthUtil.getDeptId());
+		if (ObjectUtils.isNull() || "0".equals(status)) {
+			String toUserId = "";
+			if (!auditPathsLevels.isEmpty()) {
+				toUserId = auditPathsLevels.stream().map(LosAuditPathsLevels::getAuditUserId).collect(Collectors.joining(","));
+			}
+			if (ObjectUtils.isNotNull(toUserId)) {
+				List<User> userList = userClient.selectUserList(toUserId);
+				List<Message> messageList = new ArrayList<>();
+				for (User item : userList) {
+					Message sendMessage = new Message();
+					sendMessage.setParameter(String.valueOf(agent.getId()));
+					sendMessage.setUserName(AuthUtil.getUserName());
+					sendMessage.setUserId(AuthUtil.getUserId());
+					sendMessage.setToUserId(item.getId());
+					sendMessage.setToUserName(item.getRealName());
+					sendMessage.setMessageType(1);
+					sendMessage.setTenantId(AuthUtil.getTenantId());
+					sendMessage.setCreateUser(AuthUtil.getUserId());
+					sendMessage.setCreateTime(new Date());
+					sendMessage.setUrl(agent.getUrl());
+					sendMessage.setPageLabel(agent.getPageLabel());
+					sendMessage.setPageStatus(agent.getPageStatus());
+					if ("YSQR-SK".equals(agent.getPaidApplication())) {
+						sendMessage.setMessageBody("您有新的贸易代理货款收费确认" + ",业务单号:" + stlAgent.getBusinessNo());
+					} else if ("YSQR-WK".equals(agent.getPaidApplication())) {
+						sendMessage.setMessageBody("您有新的贸易代理货款付费确认" + ",业务单号:" + stlAgent.getBusinessNo());
+					}
+					messageList.add(sendMessage);
+				}
+				R save = messageClient.saveList(messageList);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+		} else {
+			//审批数据
+			LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
+			auditProecessDTO.setTimes(1);
+			auditProecessDTO.setProcessType(processType);
+			// 没开启审批流直接走 通过流程
+			if (pathsActs == null || pathsActs.getIsEnable() == 2) {
+				throw new SecurityException("当前租户未查询到审批流配置");
+			} else {
+				if (CollectionUtils.isEmpty(auditPathsLevels)) {
+					throw new SecurityException("开启审批失败:未查询到审批信息");
+				}
+				// 绑定审核类型
+				auditProecessDTO.setCheckType(checkType);
+				auditProecessDTO.setPaidApplication(agent.getPaidApplication());
+				// 追加跳转路由url
+				auditProecessDTO.setUrl(agent.getUrl());
+				auditProecessDTO.setPageStatus(agent.getPageStatus());
+				auditProecessDTO.setPageLabel(agent.getPageLabel());
+				auditProecessDTO.setOrderRemark(stlAgent.getRemarks());
+				auditProecessDTO.setPathsLevelsList(auditPathsLevels);
+				auditProecessDTO.setActId(1);
+				auditProecessDTO.setSrcBillId(stlAgent.getId());
+				auditProecessDTO.setBillId(stlAgent.getId());
+				auditProecessDTO.setBillNo(stlAgent.getBusinessNo());
+				auditProecessDTO.setSendUserId(AuthUtil.getUserId());
+				auditProecessDTO.setSendName(AuthUtil.getUserName());
+				auditProecessDTO.setSendTime(new Date());
+				auditProecessDTO.setBillTime(stlAgent.getCreateTime());
+				auditProecessDTO.setTenantId(AuthUtil.getTenantId());
+				auditProecessDTO.setCorpId(stlAgent.getCorpId());
+				auditProecessDTO.setSalesCompanyId(deptUtils.getDeptPid());
+				auditProecessDTO.setSalesCompanyName(stlAgent.getCreateDeptName());
+				auditProecessDTO.setPayAmount(stlAgent.getSumAmount());
+				auditProecessDTO.setReceivableAmount(stlAgent.getSumAmount());
+				R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
+				if (!financeProcess.isSuccess()) {
+					throw new SecurityException("操作失败,请联系管理员");
+				}
+			}
 		}
 		return R.data(stlAgent);
 	}
@@ -3073,174 +3239,191 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		} else if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.THE_FIRST_ONE.equals(groupCode) && MagicValues.MYDL.equals(type)) {
 			Agent agent = baseMapper.selectById(billId);
 			DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-			List<AgentSKReport> agentSKReportList = new ArrayList<>();
 			if (agent != null) {
 				List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
 					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
 					.eq(AgentItems::getIsDeleted, 0)
-					.eq(AgentItems::getPid, agent.getId())
-					.apply("find_in_set(id,'" + itemIds + "')"));
-				if (!agentItemsList.isEmpty()) {
-					List<Agent> agentList = new ArrayList<>();
-					List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-						.eq(FeeCenter::getPid, agent.getId())
-						.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));
-							if (!agentList.isEmpty()) {
-							}
-						}
+					.eq(AgentItems::getPid, agent.getId()));
+				List<Agent> agentList = new ArrayList<>();
+				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getPid, agent.getId())
+					.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));
 					}
-					List<String> billNos = agentItemsList.stream().map(AgentItems::getBillNo).filter(Objects::nonNull)
-						.distinct().collect(Collectors.toList());
-					BigDecimal amount = agent.getPrepaidAmount();
-					BigDecimal sumAmount = agent.getGoodsValue();
-					for (String item : billNos) {
-						AgentSKReport agentSKReport = new AgentSKReport();
-						agentSKReport.setContractNo(agent.getContractNo());
-						agentSKReport.setBillNo(item);
-						agentSKReport.setPrepaidTime(dateFormat.format(agent.getBusinessDate()));
-						agentSKReport.setSkAmountUsd(sumAmount.subtract(amount));
-						List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> "SK".equals(e.getFeeCode())
-							&& "D".equals(e.getDc())).collect(Collectors.toList());
-						if (!feeCenters.isEmpty()) {
-							agentSKReport.setExchangeRate(feeCenters.get(0).getExrate());
-						}
-						agentSKReport.setSkAmount(feeCenterList.stream().filter(e -> "SK".equals(e.getFeeCode()) && "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentSKReport.setPostElectricFee(feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode()) && "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentSKReport.setServiceCharge(feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode()) && "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentSKReport.setRemainingAmount(feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode()) && "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentSKReport.setSumAmount(agentSKReport.getSkAmount().add(agentSKReport.getPostElectricFee()
-							.add(agentSKReport.getServiceCharge()).subtract(agentSKReport.getRemainingAmount())));
-						List<FeeCenter> feeCentersC = feeCenterList.stream().filter(e -> "SK".equals(e.getFeeCode())
-							&& "C".equals(e.getDc())).collect(Collectors.toList());
-						if (!feeCentersC.isEmpty()) {
-							agentSKReport.setRealityExchangeRate(feeCentersC.get(0).getStlExrate());
-						}
-						agentSKReport.setRealitySkAmount(feeCenterList.stream().filter(e -> "SK".equals(e.getFeeCode()) && "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentSKReport.setRealityPostElectricFee(feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode()) && "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentSKReport.setRealityServiceCharge(feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode()) && "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentSKReport.setRealitySumAmount(agentSKReport.getRealitySkAmount().add(agentSKReport.getRealityPostElectricFee()
-							.add(agentSKReport.getRealityServiceCharge())));
-						agentSKReport.setRepairAmount(agentSKReport.getRealitySumAmount().subtract(agentSKReport.getSumAmount())
-							.subtract(agentSKReport.getRemainingAmount()));
-						if (!agentList.isEmpty()) {
-							if (!feeCentersC.isEmpty()) {
-								Agent detail = agentList.stream().filter(e -> e.getId().equals(feeCentersC.get(0).getStlPid())).findFirst().orElse(null);
-								if (detail != null) {
-									agentSKReport.setRealityTime(dateFormat.format(detail.getBusinessDate()));
-								}
-							}
-						}
-						agentSKReport.setAgentItems(agentItemsList.stream().filter(e -> e.getBillNo().equals(item)).collect(Collectors.toList()));
-						agentSKReportList.add(agentSKReport);
+				}
+				AgentSKReport agentSKReport = new AgentSKReport();
+				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"));
+				}
+				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())));
 					}
+				}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);
+			} else {
+				map.put(MagicValues.DATA, new AgentSKReport());
 			}
-			map.put(MagicValues.DATA, agentSKReportList);
-			map.put("dept", dept);
 		} else if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.BALANCE_PAYMENT.equals(groupCode) && MagicValues.MYDL.equals(type)) {
 			Agent agent = baseMapper.selectById(billId);
 			DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-			List<AgentWKReport> agentWKReportList = new ArrayList<>();
 			if (agent != null) {
 				List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
 					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
 					.eq(AgentItems::getIsDeleted, 0)
-					.eq(AgentItems::getPid, agent.getId())
-					.apply("find_in_set(id,'" + itemIds + "')"));
-				if (!agentItemsList.isEmpty()) {
-					List<Agent> agentList = new ArrayList<>();
-					List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-						.eq(FeeCenter::getPid, agent.getId())
-						.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));
-							if (!agentList.isEmpty()) {
-							}
-						}
+					.eq(AgentItems::getPid, agent.getId()));
+				List<Agent> agentList = new ArrayList<>();
+				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getPid, agent.getId())
+					.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));
 					}
-					List<String> billNos = agentItemsList.stream().map(AgentItems::getBillNo).filter(Objects::nonNull)
-						.distinct().collect(Collectors.toList());
-					BigDecimal amount = agent.getPrepaidAmount();
-					BigDecimal sumAmount = agent.getGoodsValue();
-					for (String item : billNos) {
-						AgentWKReport agentWKReport = new AgentWKReport();
-						agentWKReport.setContractNo(agent.getContractNo());
-						agentWKReport.setBillNo(item);
-						agentWKReport.setPrepaidAmount(amount);
-						agentWKReport.setPrepaidTime(dateFormat.format(agent.getBusinessDate()));
-						agentWKReport.setWkAmountUsd(sumAmount.subtract(amount));
-						List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())
-							&& "D".equals(e.getDc())).collect(Collectors.toList());
-						if (!feeCenters.isEmpty()) {
-							agentWKReport.setExchangeRate(feeCenters.get(0).getExrate());
-						}
-						agentWKReport.setWkAmount(feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode()) && "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentWKReport.setPostElectricFee(feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode()) && "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentWKReport.setServiceCharge(feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode()) && "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentWKReport.setRemainingAmount(feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode()) && "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentWKReport.setSumAmount(agentWKReport.getWkAmount().add(agentWKReport.getPostElectricFee()
-							.add(agentWKReport.getServiceCharge()).subtract(agentWKReport.getRemainingAmount())));
-						List<FeeCenter> feeCentersC = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())
-							&& "C".equals(e.getDc())).collect(Collectors.toList());
-						if (!feeCentersC.isEmpty()) {
-							agentWKReport.setRealityExchangeRate(feeCentersC.get(0).getStlExrate());
-						}
-						agentWKReport.setRealityWkAmount(feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode()) && "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentWKReport.setRealityPostElectricFee(feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode()) && "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentWKReport.setRealityServiceCharge(feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode()) && "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						agentWKReport.setRealitySumAmount(agentWKReport.getRealityWkAmount().add(agentWKReport.getRealityPostElectricFee()
-							.add(agentWKReport.getRealityServiceCharge())));
-						agentWKReport.setRepairAmount(agentWKReport.getRealitySumAmount().subtract(agentWKReport.getSumAmount())
-							.subtract(agentWKReport.getRemainingAmount()));
-						if (!agentList.isEmpty()) {
-							if (!feeCentersC.isEmpty()) {
-								Agent detail = agentList.stream().filter(e -> e.getId().equals(feeCentersC.get(0).getStlPid())).findFirst().orElse(null);
-								if (detail != null) {
-									agentWKReport.setRealityTime(dateFormat.format(detail.getBusinessDate()));
-								}
-							}
-						}
-						agentWKReport.setAgentItems(agentItemsList.stream().filter(e -> e.getBillNo().equals(item)).collect(Collectors.toList()));
-						agentWKReportList.add(agentWKReport);
+				}
+				AgentSKReport agentSKReport = new AgentSKReport();
+				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"));
+				}
+				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);
+			} else {
+				map.put(MagicValues.DATA, new AgentSKReport());
 			}
-			map.put(MagicValues.DATA, agentWKReportList);
-			map.put("dept", dept);
-		} else {
-			map.put(MagicValues.DATA, null);
 		}
 		return R.data(map);
 	}

+ 3 - 1
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/DispatchVehiclesServiceImpl.java

@@ -37,7 +37,6 @@ import org.springblade.los.trade.service.IInOutStorageService;
 import org.springblade.los.trade.vo.DispatchVehiclesVO;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
-import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -110,6 +109,9 @@ public class DispatchVehiclesServiceImpl extends ServiceImpl<DispatchVehiclesMap
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R generateWarehouseEntry(DispatchVehicles dispatchVehicles) {
+		if (0 == dispatchVehicles.getWhetherWarehousing()) {
+			throw new RuntimeException("次派车信息不予入库");
+		}
 		Long deptId = 0L;
 		String deptName = "";
 		//获取部门ids对应中文名