Просмотр исходного кода

贸易代理 2024年7月31日30:57:44

纪新园 1 год назад
Родитель
Сommit
3c4afc7491
17 измененных файлов с 1161 добавлено и 27 удалено
  1. 61 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentBillReport.java
  2. 75 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentCReport.java
  3. 52 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentDReport.java
  4. 58 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentFpReport.java
  5. 74 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentReport.java
  6. 121 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentSKReport.java
  7. 123 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentWKReport.java
  8. 62 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/report/AgentZzsReport.java
  9. 6 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/MagicValues.java
  10. 11 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterController.java
  11. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterService.java
  12. 157 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java
  13. 16 1
      blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/AgentController.java
  14. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IAgentService.java
  15. 336 25
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java
  16. 1 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/service/impl/ProductLaunchServiceImpl.java
  17. 4 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/service/impl/SettlementServiceImpl.java

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

@@ -0,0 +1,61 @@
+/*
+ *      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 AgentBillReport implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 申报日期
+	 */
+	private String declarationDate;
+
+	/**
+	 * 报关单号
+	 */
+	private String customsDeclarationNumber;
+
+	/**
+	 * 进口商品
+	 */
+	private String goodsName;
+
+	/**
+	 * 数量
+	 */
+	private BigDecimal number;
+
+	/**
+	 * 进口报关单外币金额
+	 */
+	private BigDecimal amount;
+
+}

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

@@ -0,0 +1,75 @@
+/*
+ *      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;
+import java.util.List;
+
+/**
+ * 贸易代理表实体类
+ *
+ * @author BladeX
+ * @since 2024-07-12
+ */
+@Data
+public class AgentCReport implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 国外客户名称(简称)
+	 */
+	private String abroadConsignorCname;
+
+	/**
+	 * 付汇时间
+	 */
+	private String paymentTime;
+
+	/**
+	 * 对外付汇申报单号
+	 */
+	private String declarationNumber;
+
+	/**
+	 * 付汇美元金额
+	 */
+	private BigDecimal paymentInUsd;
+
+	/**
+	 * 当天汇率
+	 */
+	private BigDecimal exchangeRate;
+
+	/**
+	 * 实际支付人民币金额
+	 */
+	private BigDecimal actualAmount;
+
+	/**
+	 * 邮电费
+	 */
+	private BigDecimal postElectricFee;
+	/**
+	 * 手续费
+	 */
+	private BigDecimal serviceCharge;
+
+}

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

@@ -0,0 +1,52 @@
+/*
+ *      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;
+import java.util.List;
+
+/**
+ * 贸易代理表实体类
+ *
+ * @author BladeX
+ * @since 2024-07-12
+ */
+@Data
+public class AgentDReport implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 汇款人
+	 */
+	private String remitter;
+
+	/**
+	 * 汇入时间
+	 */
+	private String remittanceTime;
+
+	/**
+	 * 汇入金额
+	 */
+	private BigDecimal remittanceAmount;
+
+}

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

@@ -0,0 +1,58 @@
+/*
+ *      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;
+import java.util.List;
+
+/**
+ * 贸易代理表实体类
+ *
+ * @author BladeX
+ * @since 2024-07-12
+ */
+@Data
+public class AgentFpReport implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 进口发票号
+	 */
+	private String invoiceNumber;
+
+	/**
+	 * 产品
+	 */
+	private String product;
+
+	/**
+	 * 数量/千克
+	 */
+	private BigDecimal quantity;
+
+	/**
+	 * 金额美金
+	 */
+	private BigDecimal money;
+
+
+}

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

@@ -0,0 +1,74 @@
+/*
+ *      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 org.springblade.system.entity.Dept;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 贸易代理表实体类
+ *
+ * @author BladeX
+ * @since 2024-07-12
+ */
+@Data
+public class AgentReport implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 合同号
+	 */
+	private String contractNo;
+
+	/**
+	 * 进口发票
+	 */
+	private List<AgentFpReport> agentFpReportList;
+
+	/**
+	 * 收款
+	 */
+	private List<AgentDReport> agentDReportList;
+
+	/**
+	 * 对外付汇
+	 */
+	private List<AgentCReport> agentCReportList;
+
+	/**
+	 * 进口报关单
+	 */
+	private List<AgentBillReport> agentBillReportList;
+
+	/**
+	 * 增值税
+	 */
+	private List<AgentZzsReport> agentZzsReportList;
+
+	/**
+	 * 部门
+	 */
+	private Dept dept;
+
+
+}

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

@@ -0,0 +1,121 @@
+/*
+ *      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 io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.los.trade.entity.AgentItems;
+import org.springblade.system.entity.Dept;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 贸易代理表实体类
+ *
+ * @author BladeX
+ * @since 2024-07-12
+ */
+@Data
+public class AgentSKReport implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 合同号
+	 */
+	private String contractNo;
+
+	/**
+	 * 提单号
+	 */
+	private String billNo;
+
+	/**
+	 * 预付时间
+	 */
+	private String prepaidTime;
+	/**
+	 * 首款金额
+	 */
+	private BigDecimal skAmountUsd;
+
+	/**
+	 * 汇率
+	 */
+	private BigDecimal exchangeRate;
+
+	/**
+	 * 首款金额
+	 */
+	private BigDecimal skAmount;
+	/**
+	 * 邮电费
+	 */
+	private BigDecimal postElectricFee;
+	/**
+	 * 手续费
+	 */
+	private BigDecimal serviceCharge;
+	/**
+	 * 货款剩余金额
+	 */
+	private BigDecimal remainingAmount;
+	/**
+	 * 总计金额
+	 */
+	private BigDecimal sumAmount;
+
+	/**
+	 * 实付汇率
+	 */
+	private BigDecimal realityExchangeRate;
+
+	/**
+	 * 实付首款金额
+	 */
+	private BigDecimal realitySkAmount;
+	/**
+	 * 实付邮电费
+	 */
+	private BigDecimal realityPostElectricFee;
+	/**
+	 * 实付手续费
+	 */
+	private BigDecimal realityServiceCharge;
+	/**
+	 * 实付总计金额
+	 */
+	private BigDecimal realitySumAmount;
+	/**
+	 * 需补金额
+	 */
+	private BigDecimal repairAmount;
+	/**
+	 * 实付时间
+	 */
+	private String realityTime;
+
+	/**
+	 * 明细
+	 */
+	private List<AgentItems> agentItems;
+
+
+}

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

@@ -0,0 +1,123 @@
+/*
+ *      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 org.springblade.los.trade.entity.AgentItems;
+import org.springblade.system.entity.Dept;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 贸易代理表实体类
+ *
+ * @author BladeX
+ * @since 2024-07-12
+ */
+@Data
+public class AgentWKReport implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 合同号
+	 */
+	private String contractNo;
+
+	/**
+	 * 提单号
+	 */
+	private String billNo;
+
+	/**
+	 * 预付金额
+	 */
+	private BigDecimal prepaidAmount;
+	/**
+	 * 预付时间
+	 */
+	private String prepaidTime;
+	/**
+	 * 尾款金额
+	 */
+	private BigDecimal wkAmountUsd;
+
+	/**
+	 * 汇率
+	 */
+	private BigDecimal exchangeRate;
+
+	/**
+	 * 尾款金额
+	 */
+	private BigDecimal wkAmount;
+	/**
+	 * 邮电费
+	 */
+	private BigDecimal postElectricFee;
+	/**
+	 * 手续费
+	 */
+	private BigDecimal serviceCharge;
+	/**
+	 * 货款剩余金额
+	 */
+	private BigDecimal remainingAmount;
+	/**
+	 * 总计金额
+	 */
+	private BigDecimal sumAmount;
+
+	/**
+	 * 实付汇率
+	 */
+	private BigDecimal realityExchangeRate;
+
+	/**
+	 * 实付尾款金额
+	 */
+	private BigDecimal realityWkAmount;
+	/**
+	 * 实付邮电费
+	 */
+	private BigDecimal realityPostElectricFee;
+	/**
+	 * 实付手续费
+	 */
+	private BigDecimal realityServiceCharge;
+	/**
+	 * 实付总计金额
+	 */
+	private BigDecimal realitySumAmount;
+	/**
+	 * 需补金额
+	 */
+	private BigDecimal repairAmount;
+	/**
+	 * 实付时间
+	 */
+	private String realityTime;
+
+	/**
+	 * 明细
+	 */
+	private List<AgentItems> agentItems;
+
+}

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

@@ -0,0 +1,62 @@
+/*
+ *      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;
+import java.util.List;
+
+/**
+ * 贸易代理表实体类
+ *
+ * @author BladeX
+ * @since 2024-07-12
+ */
+@Data
+public class AgentZzsReport implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 进口增值税
+	 */
+	private BigDecimal valueAddedTax;
+
+	/**
+	 * 税票号
+	 */
+	private String taxInvoiceNumber;
+
+	/**
+	 * 税票日期
+	 */
+	private String taxInvoiceDate;
+
+	/**
+	 * 扣缴税款时间
+	 */
+	private String withholdingTaxesTime;
+
+	/**
+	 * 国内客户支付时间
+	 */
+	private String timeOfPayment;
+
+
+}

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

@@ -27,12 +27,18 @@ public class MagicValues {
 	public static final String DISPATCH_NOTICE = "派车通知单";
 	public static final String INCOMING_NOTIFICATION = "入货通知";
 	public static final String SALES_REPORT = "销售报告";
+
+	public static final String ORDER_ALLOCATION = "配单";
+
+	public static final String THE_FIRST_ONE = "首款";
+	public static final String BALANCE_PAYMENT = "尾款";
 	public static final String MASTER_BILLS = "MASTER 提单";
 	public static final String BILLS_DETAIL = "提单详情";
 	public static final String HYCK = "HYCK";
 	public static final String HYJK = "HYJK";
 	public static final String KYCK = "KYCK";
 	public static final String KYJK = "KYJK";
+	public static final String MYDL = "MYDL";
 	public static final String AMEND = "AMEND";
 	public static final String AMEND_SI = "AMENDSI";
 	public static final String AMEND_SE = "AMENDSE";

+ 11 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterController.java

@@ -264,6 +264,17 @@ public class FeeCenterController extends BladeController {
 	}
 
 	/**
+	 * 模板导入
+	 */
+	@PostMapping("/templateImportTrade")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入feeCenter")
+	@RepeatSubmit
+	public R<List<FeeCenter>> templateImportTrade(@Valid @RequestBody LosBFeesTemplate losBFeesTemplate) {
+		return feeCenterService.templateImportTrade(losBFeesTemplate);
+	}
+
+	/**
 	 * 物流-费用中心
 	 */
 	@GetMapping("/selectByAccNoList")

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterService.java

@@ -82,4 +82,6 @@ public interface IFeeCenterService extends IService<FeeCenter> {
 	R submitTrade(FeeCenter feeCenter);
 
 	R submitListTrade(List<FeeCenter> feeCenter);
+
+	R<List<FeeCenter>> templateImportTrade(LosBFeesTemplate losBFeesTemplate);
 }

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

@@ -1050,7 +1050,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					.collect(Collectors.toList());
 				BigDecimal profit = new BigDecimal("0.00");
 				for (FeeCenter item : feeCenters) {
-					if (ObjectUtils.isNull(item.getDiscountExrate())){
+					if (ObjectUtils.isNull(item.getDiscountExrate())) {
 						throw new RuntimeException("首款、尾款优惠汇率不能为空");
 					}
 					BigDecimal amount = item.getAmountLoc().multiply(item.getDiscountExrate());
@@ -1124,4 +1124,160 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 		return R.data(feeCenterList);
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R<List<FeeCenter>> templateImportTrade(LosBFeesTemplate losBFeesTemplate) {
+		List<FeeCenter> list = new ArrayList<>();
+		String text = "";
+		if ("HYJK".equals(losBFeesTemplate.getBusinessTypeCode())) {
+			Bills bills = billsMapper.selectById(losBFeesTemplate.getBillNoId());
+			if (bills == null) {
+				throw new RuntimeException("未找到主表信息");
+			}
+			if (!losBFeesTemplate.getFeesTemplateItemsList().isEmpty()) {
+				int count = 1;
+				for (FeesTemplateItems items : losBFeesTemplate.getFeesTemplateItemsList()) {
+					FeeCenter feeCenter = new FeeCenter();
+					feeCenter.setElementsCnName(items.getElementsCnName());
+					feeCenter.setElementsEnName(items.getElementsEnName());
+					feeCenter.setElementsId(items.getElementsId());
+					feeCenter.setElementsCode(items.getElementsCode());
+					feeCenter.setPid(bills.getId());
+					feeCenter.setCntrNo(bills.getQuantityCntrTypesDescr());
+					feeCenter.setBillNo(bills.getBillNo());
+					feeCenter.setBusinessType(bills.getBusinessType());
+					feeCenter.setBillType(bills.getBillType());
+					feeCenter.setBillDate(bills.getBillDate());
+					feeCenter.setBillCorpId(bills.getCorpId());
+					feeCenter.setBillCorpCnName(bills.getCorpCnName());
+					feeCenter.setBillCorpEnName(bills.getCorpEnName());
+					feeCenter.setLineId(bills.getLineId());
+					feeCenter.setLineCnName(bills.getLineCnName());
+					feeCenter.setLineEnName(bills.getLineEnName());
+					feeCenter.setVesselId(bills.getVesselId());
+					feeCenter.setVesselCnName(bills.getVesselCnName());
+					feeCenter.setVesselEnName(bills.getVesselEnName());
+					feeCenter.setVoyageNo(bills.getVoyageNo());
+					feeCenter.setMblno(bills.getMblno());
+					feeCenter.setHblno(bills.getHblno());
+					feeCenter.setEtd(bills.getEtd());
+					feeCenter.setEta(bills.getEta());
+					feeCenter.setPolId(bills.getPolId());
+					feeCenter.setPolCode(bills.getPolCode());
+					feeCenter.setPolCnName(bills.getPolCnName());
+					feeCenter.setPolEnName(bills.getPolEnName());
+					feeCenter.setPodId(bills.getPodId());
+					feeCenter.setPodCode(bills.getPodCode());
+					feeCenter.setPodCnName(bills.getPodCnName());
+					feeCenter.setPodEnName(bills.getPodEnName());
+					feeCenter.setDc(losBFeesTemplate.getDc());
+					feeCenter.setPaymode(bills.getMpaymode());
+					feeCenter.setDc(losBFeesTemplate.getDc());
+					feeCenter.setSort(count);
+					count++;
+					feeCenter.setCorpId(bills.getCorpId());
+					feeCenter.setCorpCnName(bills.getCorpCnName());
+					feeCenter.setCorpEnName(bills.getCorpEnName());
+					feeCenter.setFeeId(items.getFeeId());
+					feeCenter.setFeeCode(items.getFeeCode());
+					feeCenter.setFeeCnName(items.getFeeCnName());
+					feeCenter.setFeeEnName(items.getFeeEnName());
+					feeCenter.setUnitNo(items.getUnitNo());
+					feeCenter.setPrice(items.getPrice());
+					feeCenter.setCurCode(items.getCurCode());
+					if (ObjectUtils.isNotNull(feeCenter.getCurCode())) {
+						BCurrency bCurrency = new BCurrency();
+						bCurrency.setDate(bills.getEtd());
+						bCurrency.setDc(losBFeesTemplate.getDc());
+						List<BCurrency> bCurrencyList = bCurrencyService.getExrate(bCurrency);
+						if (!bCurrencyList.isEmpty()) {
+							BCurrency currency = bCurrencyList.stream().filter(e -> e.getCode().equals(feeCenter.getCurCode())).findFirst().orElse(null);
+							if (currency != null) {
+								feeCenter.setExrate(currency.getExrate());
+							} else {
+								throw new RuntimeException("未找到汇率信息");
+							}
+						}
+					}
+					feeCenter.setQuantity(items.getQuantity());
+					feeCenter.setAmount(items.getPrice().multiply(items.getQuantity()));
+					list.add(feeCenter);
+				}
+			}
+			this.saveOrUpdateBatch(list);
+		} else if ("MYDL".equals(losBFeesTemplate.getBusinessTypeCode())) {
+			Agent agent = agentMapper.selectById(losBFeesTemplate.getBillNoId());
+			if (agent == null) {
+				throw new RuntimeException("未找到主表信息");
+			}
+			if (!losBFeesTemplate.getFeesTemplateItemsList().isEmpty()) {
+				int count = 1;
+				for (FeesTemplateItems items : losBFeesTemplate.getFeesTemplateItemsList()) {
+					FeeCenter feeCenter = new FeeCenter();
+					feeCenter.setElementsCnName(items.getElementsCnName());
+					feeCenter.setElementsEnName(items.getElementsEnName());
+					feeCenter.setElementsId(items.getElementsId());
+					feeCenter.setElementsCode(items.getElementsCode());
+					feeCenter.setPid(agent.getId());
+					feeCenter.setBusinessType(agent.getBusinessType());
+					feeCenter.setBillNo(agent.getBusinessNo());
+					feeCenter.setBillDate(agent.getBusinessDate());
+					if ("D".equals(losBFeesTemplate.getDc())) {
+						feeCenter.setCorpId(agent.getDomesticConsigneeId());
+						feeCenter.setCorpCnName(agent.getDomesticConsigneeCname());
+					} else {
+						feeCenter.setCorpId(agent.getAbroadConsignorId());
+						feeCenter.setCorpCnName(agent.getAbroadConsignorCname());
+					}
+					feeCenter.setBillCorpId(agent.getCorpId());
+					feeCenter.setBillCorpCnName(agent.getCorpName());
+					feeCenter.setMblno(agent.getContractNo());
+					feeCenter.setPolId(agent.getPolId());
+					feeCenter.setPolCode(agent.getPolCode());
+					feeCenter.setPolCnName(agent.getPolCnName());
+					feeCenter.setPolEnName(agent.getPolEnName());
+					feeCenter.setPodId(agent.getPodId());
+					feeCenter.setPodCode(agent.getPodCode());
+					feeCenter.setPodCnName(agent.getPodCnName());
+					feeCenter.setPodEnName(agent.getPodEnName());
+					feeCenter.setPid(agent.getId());
+					feeCenter.setDc(losBFeesTemplate.getDc());
+					feeCenter.setSort(count);
+					count++;
+					feeCenter.setFeeId(items.getFeeId());
+					feeCenter.setFeeCode(items.getFeeCode());
+					feeCenter.setFeeCnName(items.getFeeCnName());
+					feeCenter.setFeeEnName(items.getFeeEnName());
+					feeCenter.setUnitNo(items.getUnitNo());
+					feeCenter.setPrice(items.getPrice());
+					feeCenter.setCurCode(items.getCurCode());
+					if (ObjectUtils.isNotNull(feeCenter.getCurCode())) {
+						BCurrency bCurrency = new BCurrency();
+						bCurrency.setDate(agent.getContractDate());
+						bCurrency.setDc(losBFeesTemplate.getDc());
+						List<BCurrency> bCurrencyList = bCurrencyService.getExrate(bCurrency);
+						if (!bCurrencyList.isEmpty()) {
+							BCurrency currency = bCurrencyList.stream().filter(e -> e.getCode().equals(feeCenter.getCurCode())).findFirst().orElse(null);
+							if (currency != null) {
+								feeCenter.setExrate(currency.getExrate());
+							} else {
+								throw new RuntimeException("未找到汇率信息");
+							}
+						}
+					}
+					feeCenter.setQuantity(items.getQuantity());
+					feeCenter.setAmount(items.getPrice().multiply(items.getQuantity()));
+					list.add(feeCenter);
+				}
+			}
+			this.saveOrUpdateBatch(list);
+		}
+		if (ObjectUtils.isNotNull(text)) {
+			return R.data(list, text + "未导入!!!");
+		} else {
+			return R.data(list);
+		}
+	}
+
 }

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

@@ -198,7 +198,7 @@ public class AgentController extends BladeController {
 	 * 单据复制
 	 */
 	@GetMapping("/copyAgent")
-	public R copyAgent(@RequestBody Agent agent) {
+	public R copyAgent( Agent agent) {
 		Agent declare = agentService.copyAgent(agent);
 		return R.data(declare);
 	}
@@ -370,5 +370,20 @@ public class AgentController extends BladeController {
 		return R.data(declare);
 	}
 
+	/**
+	 * 获取模本数据加信息
+	 */
+	@GetMapping("/getReportDataTrade")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入reports")
+	public R getReportDataTrade(@RequestParam(value = "billId") String billId,
+								@RequestParam(value = "reportCode", required = false) String reportCode,
+								@RequestParam(value = "groupCode", required = false) String groupCode,
+								@RequestParam(value = "itemIds", required = false) String itemIds,
+								@RequestParam(value = "type", required = false) String type
+	) {
+		return agentService.getReportDataTrade(billId, reportCode, groupCode,  itemIds, type);
+	}
+
 
 }

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

@@ -83,4 +83,6 @@ public interface IAgentService extends IService<Agent> {
 	R generate(List<FeeCenter> feeCenterList);
 
 	Agent detailStl(Agent agent);
+
+	R getReportDataTrade(String billId, String reportCode, String groupCode,  String itemIds, String type);
 }

+ 336 - 25
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -29,6 +29,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.los.Util.IDeptUtils;
+import org.springblade.los.Util.MagicValues;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.corps.entity.BCorpsBank;
@@ -66,6 +67,7 @@ import org.springblade.los.finance.stl.service.IFinStlBillsService;
 import org.springblade.los.trade.dto.AgentItemsR;
 import org.springblade.los.trade.entity.*;
 import org.springblade.los.trade.mapper.AgentMapper;
+import org.springblade.los.trade.report.*;
 import org.springblade.los.trade.service.IAdvanceChargeItemService;
 import org.springblade.los.trade.service.IAdvanceChargeService;
 import org.springblade.los.trade.service.IAgentItemsService;
@@ -81,6 +83,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.ZoneId;
@@ -178,28 +181,30 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				} else {
 					detail.setFeeCenterListC(new ArrayList<>());
 				}
-				List<Agent> agentList = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
-					.eq(Agent::getTenantId, AuthUtil.getTenantId())
-					.eq(Agent::getIsDeleted, 0)
-					.in(Agent::getId, ids));
-				if (!agentList.isEmpty()) {
-					for (Agent item : agentList) {
-						Record record = new Record();
-						record.setPid(agent.getId());
-						record.setSrcId(item.getId());
-						record.setAmount(item.getActualAmount());
-						record.setDate(item.getBusinessDate());
-						record.setBillNo(item.getBillNoJoin());
-						record.setRemarks(item.getRemarks());
-						record.setCustomsDeclarationNo(item.getDeclarationNumber());
-						if ("D".equals(item.getDc())) {
-							record.setStatus("付汇已结算");
-							record.setSrcType("STL-D-FH");
-						} else {
-							record.setStatus("购汇已结算");
-							record.setSrcType("STL-C-GH");
+				if (!ids.isEmpty()){
+					List<Agent> agentList = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
+						.eq(Agent::getTenantId, AuthUtil.getTenantId())
+						.eq(Agent::getIsDeleted, 0)
+						.in(Agent::getId, ids));
+					if (!agentList.isEmpty()) {
+						for (Agent item : agentList) {
+							Record record = new Record();
+							record.setPid(agent.getId());
+							record.setSrcId(item.getId());
+							record.setAmount(item.getActualAmount());
+							record.setDate(item.getBusinessDate());
+							record.setBillNo(item.getBillNoJoin());
+							record.setRemarks(item.getRemarks());
+							record.setCustomsDeclarationNo(item.getDeclarationNumber());
+							if ("D".equals(item.getDc())) {
+								record.setStatus("付汇已结算");
+								record.setSrcType("STL-D-FH");
+							} else {
+								record.setStatus("购汇已结算");
+								record.setSrcType("STL-C-GH");
+							}
+							recordList.add(record);
 						}
-						recordList.add(record);
 					}
 				}
 				if (!recordList.isEmpty()) {
@@ -490,8 +495,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					item.setBusinessType(agent.getBusinessType());
 					item.setBillNo(agent.getBusinessNo());
 					item.setBillDate(agent.getBusinessDate());
-					item.setCorpId(agent.getDomesticConsigneeId());
-					item.setCorpCnName(agent.getDomesticConsigneeCname());
+					item.setCorpId(agent.getAbroadConsignorId());
+					item.setCorpCnName(agent.getAbroadConsignorCname());
 					item.setBillCorpId(agent.getCorpId());
 					item.setBillCorpCnName(agent.getCorpName());
 					item.setMblno(agent.getContractNo());
@@ -733,7 +738,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		Agent detail = baseMapper.selectById(agent.getId());
 		Agent agentNew = new Agent();
 		BeanUtil.copyProperties(detail, agentNew);
-		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+		/*List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getPid, agent.getId()));
@@ -890,7 +895,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				item.setAuditStatus("0");
 			}
 			agentNew.setFeeCenterListC(!feeCenterListC.isEmpty() ? feeCenterListC : new ArrayList<>());
-		}
+		}*/
 		List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
 			.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
 			.eq(AgentItems::getIsDeleted, 0)
@@ -911,6 +916,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		agentNew.setBusinessNo("");
 		agentNew.setBusinessStatus("录入");
 		agentNew.setOrderStatus(null);
+		agentNew.setBillNoFormat("MYDL");
+		agentNew.setBusinessTypeCode("MYDL");
 		return agentNew;
 	}
 
@@ -2101,6 +2108,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			bills.setBillType("DD");
 			bills.setBusinessType("SI");
 			bills.setSeaType("I");
+			bills.setBillDate(new Date());
 			bills.setBillNo((String) clientBillNo.getData());
 			bills.setCreateTime(new Date());
 			bills.setCreateUser(AuthUtil.getUserId());
@@ -2139,6 +2147,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				bills.setCommodityShName(agentItemsList.get(0).getLabelProductName());
 				bills.setCommodityCnName(agentItemsList.get(0).getLabelProductName());
 				bills.setCommodityEnName(agentItemsList.get(0).getLabelProductName());
+				bills.setCommodityDescr(agentItemsList.get(0).getLabelProductName());
 				bills.setMconsigneeCntyCode(agentItemsList.get(0).getOrderReleaseMethod());
 				StringBuilder ids = new StringBuilder();
 				for (AgentItems id : itemsList) {
@@ -2832,6 +2841,308 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		return detail;
 	}
 
+	@Override
+	public R getReportDataTrade(String billId, String reportCode, String groupCode, String itemIds, String type) {
+		Map<String, Object> map = new HashMap<>();
+		R<Dept> res = sysClient.getDept(deptUtils.getDeptPid());
+		Dept dept;
+		if (res.isSuccess() && res.getData() != null) {
+			dept = res.getData();
+			String status = sysClient.getParamServiceNew("is.update.default");
+			if ("1".equals(status)) {
+				R<User> resUser = userClient.userInfoById(AuthUtil.getUserId());
+				if (resUser.isSuccess() && resUser.getData() != null) {
+					dept.setEmail(resUser.getData().getEmail());
+					dept.setTel(resUser.getData().getPhone());
+					dept.setContacts(resUser.getData().getRealName());
+				}
+			}
+		} else {
+			throw new RuntimeException("获取报表表头数据失败");
+		}
+		if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.ORDER_ALLOCATION.equals(groupCode) && MagicValues.MYDL.equals(type)) {
+			Agent agent = baseMapper.selectById(billId);
+			DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+			AgentReport agentReport = new AgentReport();
+			if (agent != null) {
+				agentReport.setContractNo(agent.getContractNo());
+				// todo 发票
+				agentReport.setAgentFpReportList(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()) {
+						List<Agent> 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()) {
+							//收款
+							List<FeeCenter> feeCenterListD = feeCenterList.stream().filter(e -> "D".equals(e.getDc())).collect(Collectors.toList());
+							if (!feeCenterListD.isEmpty()) {
+								List<AgentDReport> agentDReportList = new ArrayList<>();
+								List<Long> stlPidsD = feeCenterListD.stream().map(FeeCenter::getStlPid)
+									.filter(Objects::nonNull).distinct().collect(Collectors.toList());
+								for (Long id : stlPidsD) {
+									Agent stlAgent = agentList.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null);
+									if (stlAgent != null) {
+										List<FeeCenter> feeCenters = feeCenterListD.stream().filter(e -> "WK,SFK".contains(e.getFeeCode())
+											&& stlAgent.getId().equals(e.getStlPid())).collect(Collectors.toList());
+										if (!feeCenters.isEmpty()) {
+											AgentDReport agentDReport = new AgentDReport();
+											agentDReport.setRemitter(feeCenters.get(0).getCorpCnName());
+											agentDReport.setRemittanceTime(dateFormat.format(stlAgent.getBusinessDate()));
+											agentDReport.setRemittanceAmount(feeCenters.stream().map(FeeCenter::getAmountLoc)
+												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+											agentDReportList.add(agentDReport);
+										}
+									}
+								}
+								agentReport.setAgentDReportList(agentDReportList);
+							}
+							//付汇
+							List<FeeCenter> feeCenterListC = feeCenterList.stream().filter(e -> "C".equals(e.getDc())).collect(Collectors.toList());
+							if (!feeCenterListC.isEmpty()) {
+								List<AgentCReport> agentCReportList = new ArrayList<>();
+								List<Long> stlPidsC = feeCenterListC.stream().map(FeeCenter::getStlPid)
+									.filter(Objects::nonNull).distinct().collect(Collectors.toList());
+								for (Long id : stlPidsC) {
+									Agent stlAgent = agentList.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null);
+									if (stlAgent != null) {
+										List<FeeCenter> feeCenters = feeCenterListC.stream().filter(e -> stlAgent.getId().equals(e.getStlPid()))
+											.collect(Collectors.toList());
+										if (!feeCenters.isEmpty()) {
+											AgentCReport agentCReport = new AgentCReport();
+											agentCReport.setAbroadConsignorCname(feeCenters.get(0).getCorpCnName());
+											agentCReport.setPaymentTime(dateFormat.format(stlAgent.getBusinessDate()));
+											agentCReport.setDeclarationNumber(stlAgent.getDeclarationNumber());
+											agentCReport.setPaymentInUsd(feeCenters.stream().filter(e -> "WK,SFK".contains(e.getFeeCode()))
+												.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+											agentCReport.setExchangeRate(stlAgent.getExchangeRate());
+											agentCReport.setActualAmount(agentCReport.getPaymentInUsd().multiply(agentCReport.getExchangeRate()));
+											agentCReport.setPostElectricFee(feeCenters.stream().filter(e -> "YDF".equals(e.getFeeCode()))
+												.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+											agentCReport.setServiceCharge(feeCenters.stream().filter(e -> "SXF".equals(e.getFeeCode()))
+												.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+											agentCReportList.add(agentCReport);
+										}
+									}
+								}
+								agentReport.setAgentCReportList(agentCReportList);
+							}
+						}
+					}
+				}
+				List<Bills> billsList = billsService.list(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.eq(Bills::getIsDeleted, 0)
+					.eq(Bills::getBookingNo, agent.getContractNo()));
+				List<AgentBillReport> agentBillReportList = new ArrayList<>();
+				if (!billsList.isEmpty()) {
+					List<Long> billIds = billsList.stream().map(Bills::getId).distinct().collect(Collectors.toList());
+					List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+						.eq(PreContainers::getIsDeleted, 0)
+						.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
+						.in(PreContainers::getPid, billIds));
+					for (Bills item : billsList) {
+						AgentBillReport agentBillReport = new AgentBillReport();
+						agentBillReport.setDeclarationDate(dateFormat.format(item.getBillDate()));
+						agentBillReport.setCustomsDeclarationNumber(item.getBillNo());
+						agentBillReport.setGoodsName(item.getCommodityCnName());
+						agentBillReport.setNumber(item.getQuantity());
+						if (!preContainersList.isEmpty()) {
+							BigDecimal reduce = preContainersList.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getPrice().multiply(y.getNumber())), BigDecimal::add);
+							agentBillReport.setAmount(reduce);
+						}
+						agentBillReportList.add(agentBillReport);
+					}
+				}
+				agentReport.setAgentBillReportList(agentBillReportList);
+				// todo 增值税
+				agentReport.setAgentZzsReportList(new ArrayList<>());
+			}
+			agentReport.setDept(dept);
+			map.put(MagicValues.DATA, agentReport);
+		} 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()) {
+							}
+						}
+					}
+					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);
+					}
+				}
+			}
+			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()) {
+							}
+						}
+					}
+					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);
+					}
+				}
+			}
+			map.put(MagicValues.DATA, agentWKReportList);
+			map.put("dept", dept);
+		} else {
+			map.put(MagicValues.DATA, null);
+		}
+		return R.data(map);
+	}
+
 	private FeeCenter assemblyDataSK(String businessType, Agent detail, String type, long lineNo, int sort, long deptId, String deptName, List<BFees> feesList) {
 		FeeCenter feeCenter = new FeeCenter();
 		feeCenter.setFeeType("1");

+ 1 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/service/impl/ProductLaunchServiceImpl.java

@@ -1009,6 +1009,7 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 			if (pjGoodsDesc != null) {
 				//商品id
 				productLaunch.setGoodsId(pjGoodsDesc.getId());
+				productLaunch.setCname(pjGoodsDesc.getCname());
 				productLaunch.setBrandId(pjGoodsDesc.getBrandId());
 				productLaunch.setBrandName(pjGoodsDesc.getBrandName());
 				productLaunch.setBrandItem(pjGoodsDesc.getBrandItem());

+ 4 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/service/impl/SettlementServiceImpl.java

@@ -237,6 +237,8 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, PjSettl
 						} else {
 							pjOrder.setActualPaymentStatus(3);
 						}
+					}else{
+						throw new RuntimeException("数据错误,请删除明细重新添加");
 					}
 				}
 				pjOrder.setUpdateTime(new Date());
@@ -345,6 +347,8 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, PjSettl
 						} else {
 							pjOrder.setActualPaymentStatus(3);
 						}
+					}else{
+						throw new RuntimeException("数据错误,请删除明细重新添加");
 					}
 				}
 				pjOrder.setUpdateTime(new Date());