Jelajahi Sumber

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

纪新园 1 tahun lalu
induk
melakukan
0f111e8318

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

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.trade.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -23,8 +24,10 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.los.business.files.entity.FilesCenter;
+import org.springblade.los.finance.fee.dto.FeeCenterReports;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.trade.dto.AgentItemsR;
+import org.springblade.system.entity.Dept;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -316,6 +319,7 @@ public class Agent implements Serializable {
 	 * 首款实收时间
 	 */
 	@ApiModelProperty(value = "首款实收时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date firstPaidInPaymentDate;
 	/**
 	 * 首款实付
@@ -348,6 +352,7 @@ public class Agent implements Serializable {
 	 * 尾款实收时间
 	 */
 	@ApiModelProperty(value = "尾款实收时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date finalPaymentReceivedDate;
 	/**
 	 * 尾款实付
@@ -495,6 +500,11 @@ public class Agent implements Serializable {
 	 */
 	@TableField(exist = false)
 	private List<FeeCenter> feeCenterListC;
+	/**
+	 * 报表打印
+	 */
+	@TableField(exist = false)
+	private List<FeeCenterReports> feeCenterReportsList;
 
 	/**
 	 * 明细
@@ -577,5 +587,49 @@ public class Agent implements Serializable {
 	@TableField(exist = false)
 	private BigDecimal unresolvedAmount;
 
+	/**
+	 * 账户银行
+	 */
+	@TableField(exist = false)
+	private String accountBank;
+	/**
+	 * 银行账号
+	 */
+	@TableField(exist = false)
+	private String accountNo;
+
+	/**
+	 * 地址
+	 */
+	@TableField(exist = false)
+	private String address;
+	/**
+	 * Swift Code
+	 */
+	@TableField(exist = false)
+	private String swiftCode;
+
+	/**
+	 * 报表表头信息
+	 */
+	@TableField(exist = false)
+	private Dept dept;
+
+	/**
+	 * CNY
+	 */
+	@TableField(exist = false)
+	private BigDecimal amount;
+	/**
+	 *  USD
+	 */
+	@TableField(exist = false)
+	private BigDecimal amountUsd;
+	/**
+	 * 合计 CNY
+	 */
+	@TableField(exist = false)
+	private BigDecimal amountLoc;
+
 
 }

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

@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springblade.los.business.files.entity.FilesCenter;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -123,5 +124,11 @@ public class StorageFee implements Serializable {
 	@TableField(exist = false)
 	private List<StorageFeeItems> storageFeeItemsList;
 
+	/**
+	 * 附件
+	 */
+	@TableField(exist = false)
+	private List<FilesCenter> filesCenterList;
+
 
 }

+ 3 - 3
blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/service/impl/BCorpsServiceImpl.java

@@ -155,10 +155,10 @@ public class BCorpsServiceImpl extends ServiceImpl<CorpsMapper, BCorps> implemen
 			if (!cname.isEmpty() && !ids.contains(bCorps.getId())) {
 				throw new RuntimeException("中文名称不允许重复");
 			}
-			if (!shortName.isEmpty() && !ids.contains(bCorps.getId())) {
-				throw new RuntimeException("中文名称不允许重复");
+			if (!uscc.isEmpty() && !ids1.contains(bCorps.getId())) {
+				throw new RuntimeException("统一社会信用代码不允许重复");
 			}
-			if (!uscc.isEmpty() && !ids2.contains(bCorps.getId())) {
+			if (!shortName.isEmpty() && !ids2.contains(bCorps.getId())) {
 				throw new RuntimeException("简称不允许重复");
 			}
 			BCorps bCorps1 = baseMapper.selectById(bCorps.getId());

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

@@ -970,6 +970,18 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					corpIds = feeCenterList.stream().map(FeeCenter::getCorpId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
 				}
 			}
+		} else if ("MYDL".equals(type)) {
+			Agent agent = agentMapper.selectById(billId);
+			if (agent != null) {
+				List<FeeCenter> feeCenterList = baseMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getDc, dc)
+					.eq(FeeCenter::getPid, billId));
+				if (!feeCenterList.isEmpty()) {
+					corpIds = feeCenterList.stream().map(FeeCenter::getCorpId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+				}
+			}
 		}
 		if (!corpIds.isEmpty()) {
 			return bCorpsService.list(new LambdaQueryWrapper<BCorps>()
@@ -1054,13 +1066,13 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					if (ObjectUtils.isNull(item.getDiscountExrate())) {
 						throw new RuntimeException("首款、尾款优惠汇率不能为空");
 					}
-					if (!"SXF".equals(item.getFeeCode())){
+					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){
+					} 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);
@@ -1102,8 +1114,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					if (agent != null) {
 						feeCenter.setBillNo(agent.getContractNo());
 						feeCenter.setBillDate(agent.getBusinessDate());
-						feeCenter.setCorpId(agent.getDomesticConsigneeId());
-						feeCenter.setCorpCnName(agent.getDomesticConsigneeCname());
+						/*feeCenter.setCorpId(agent.getDomesticConsigneeId());
+						feeCenter.setCorpCnName(agent.getDomesticConsigneeCname());*/
 						feeCenter.setBillCorpId(agent.getCorpId());
 						feeCenter.setBillCorpCnName(agent.getCorpName());
 						feeCenter.setPolId(agent.getPolId());

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

@@ -95,6 +95,7 @@ public class AgentController extends BladeController {
 		lambdaQueryWrapper.eq(Agent::getIsDeleted, 0)
 			.eq(Agent::getTenantId, AuthUtil.getTenantId())
 			.eq(ObjectUtils.isNotNull(agent.getCorpId()), Agent::getCorpId, agent.getCorpId())
+			.eq(ObjectUtils.isNotNull(agent.getOrderStatus()), Agent::getOrderStatus, agent.getOrderStatus())
 			.like(ObjectUtils.isNotNull(agent.getContractNo()), Agent::getContractNo, agent.getContractNo())
 			.like(ObjectUtils.isNotNull(agent.getBusinessNo()), Agent::getBusinessNo, agent.getBusinessNo())
 			.like(ObjectUtils.isNotNull(agent.getBillNoJoin()), Agent::getBillNoJoin, agent.getBillNoJoin())
@@ -311,6 +312,16 @@ public class AgentController extends BladeController {
 	}
 
 	/**
+	 * 撤销收款
+	 */
+	@PostMapping("/revokeCollectionOfPayments")
+	@RepeatSubmit
+	public R revokeCollectionOfPayments(@RequestBody Agent agent) {
+		Agent declare = agentService.revokeCollectionOfPayments(agent);
+		return R.data(declare);
+	}
+
+	/**
 	 * 确认付款-是否实收已收
 	 */
 	@PostMapping("/confirmReceived")
@@ -379,10 +390,11 @@ public class AgentController extends BladeController {
 	public R getReportDataTrade(@RequestParam(value = "billId") String billId,
 								@RequestParam(value = "reportCode", required = false) String reportCode,
 								@RequestParam(value = "groupCode", required = false) String groupCode,
+								@RequestParam(value = "corpIds", required = false) String corpIds,
 								@RequestParam(value = "itemIds", required = false) String itemIds,
 								@RequestParam(value = "type", required = false) String type
 	) {
-		return agentService.getReportDataTrade(billId, reportCode, groupCode,  itemIds, type);
+		return agentService.getReportDataTrade(billId, reportCode, groupCode,corpIds,  itemIds, type);
 	}
 
 

+ 9 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/StorageFeeController.java

@@ -122,5 +122,14 @@ public class StorageFeeController extends BladeController {
 		return R.status(storageFeeService.removeByIds(Func.toLongList(ids)));
 	}
 
+	/**
+	 * 详情
+	 */
+	@GetMapping("/copy")
+	public R<StorageFee> copy(StorageFee storageFee) {
+		StorageFee detail = storageFeeService.copy(storageFee);
+		return R.data(detail);
+	}
+
 
 }

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

@@ -84,5 +84,7 @@ public interface IAgentService extends IService<Agent> {
 
 	Agent detailStl(Agent agent);
 
-	R getReportDataTrade(String billId, String reportCode, String groupCode,  String itemIds, String type);
+	R getReportDataTrade(String billId, String reportCode, String groupCode,String corpIds,  String itemIds, String type);
+
+	Agent revokeCollectionOfPayments(Agent agent);
 }

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

@@ -42,4 +42,6 @@ public interface IStorageFeeService extends IService<StorageFee> {
 	R submit(StorageFee storageFee);
 
 	StorageFee detail(StorageFee storageFee);
+
+	StorageFee copy(StorageFee storageFee);
 }

+ 386 - 46
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -32,10 +32,13 @@ 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.BCorps;
 import org.springblade.los.basic.corps.entity.BCorpsBank;
 import org.springblade.los.basic.corps.service.IBCorpsBankService;
+import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.cur.entity.BCurExrate;
 import org.springblade.los.basic.cur.mapper.CurExrateMapper;
+import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.basic.fees.entity.BFees;
 import org.springblade.los.basic.fees.service.IBFeesService;
 import org.springblade.los.billno.entity.BusinessBillNo;
@@ -52,6 +55,7 @@ import org.springblade.los.check.entity.LosAuditPathsLevels;
 import org.springblade.los.check.service.IAuditPathsActsService;
 import org.springblade.los.check.service.IAuditPathsLevelsService;
 import org.springblade.los.check.service.IAuditProecessService;
+import org.springblade.los.finance.fee.dto.FeeCenterReports;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.entity.FinAccBills;
 import org.springblade.los.finance.fee.service.IFeeCenterService;
@@ -148,6 +152,10 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 
 	private final CurExrateMapper curExrateMapper;
 
+	private final IBCorpsService bCorpsService;
+
+	private final IBCurrencyService ibCurrencyService;
+
 	@Override
 	public IPage<AgentVO> selectAgentPage(IPage<AgentVO> page, AgentVO agent) {
 		return page.setRecords(baseMapper.selectAgentPage(page, agent));
@@ -474,10 +482,16 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			if ("MYDL-STL".equals(agent.getBusinessType())) {
 				String billNo = agent.getFeeCenterListC().stream().map(FeeCenter::getMblno).filter(Objects::nonNull)
 					.distinct().collect(Collectors.joining(","));
-				agent.setBillNoJoin(billNo);
+				if (ObjectUtils.isNotNull(billNo)) {
+					List<String> billNoList = Arrays.stream(billNo.split(",")).collect(Collectors.toList());
+					agent.setBillNoJoin(billNoList.stream().distinct().collect(Collectors.joining(",")));
+				}
 				String contractNo = agent.getFeeCenterListC().stream().map(FeeCenter::getBillNo).filter(Objects::nonNull)
 					.distinct().collect(Collectors.joining(","));
-				agent.setContractNo(contractNo);
+				if (ObjectUtils.isNotNull(contractNo)) {
+					List<String> contractNoList = Arrays.stream(contractNo.split(",")).collect(Collectors.toList());
+					agent.setContractNo(contractNoList.stream().distinct().collect(Collectors.joining(",")));
+				}
 				agent.setPaymentInUsd(agent.getFeeCenterListC().stream().filter(e -> "SFK,WK".contains(e.getFeeCode()))
 					.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
 				agent.setActualAmount(agent.getExchangeRate().multiply(agent.getPaymentInUsd()));
@@ -493,7 +507,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					item.setCorpCnName(agent.getAbroadConsignorCname());
 					item.setBillCorpId(agent.getCorpId());
 					item.setBillCorpCnName(agent.getCorpName());
-					item.setMblno(agent.getContractNo());
 					item.setPolId(agent.getPolId());
 					item.setPolCode(agent.getPolCode());
 					item.setPolCnName(agent.getPolCnName());
@@ -505,6 +518,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					item.setPid(agent.getId());
 				} else {
 					item.setStlPid(agent.getId());
+					item.setStlExrate(agent.getExchangeRate());
 					if ("YDF".equals(item.getFeeCode())) {
 						item.setAmount(agent.getPostElectricFee().divide(new BigDecimal(ydfCount), 2, RoundingMode.HALF_UP));
 						item.setPrice(item.getAmount());
@@ -564,14 +578,20 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			if ("MYDL-STL".equals(agent.getBusinessType())) {
 				String billNo = agent.getFeeCenterListD().stream().map(FeeCenter::getMblno).filter(Objects::nonNull)
 					.distinct().collect(Collectors.joining(","));
-				if (ObjectUtils.isNull(agent.getBillNoJoin())) {
-					agent.setBillNoJoin(billNo);
-				} else {
-					agent.setBillNoJoin(agent.getBillNoJoin() + "," + billNo);
+				if (ObjectUtils.isNotNull(billNo)) {
+					List<String> billNoList = Arrays.stream(billNo.split(",")).collect(Collectors.toList());
+					if (ObjectUtils.isNull(agent.getBillNoJoin())) {
+						agent.setBillNoJoin(billNoList.stream().distinct().collect(Collectors.joining(",")));
+					} else {
+						agent.setBillNoJoin(agent.getBillNoJoin() + "," + billNoList.stream().distinct().collect(Collectors.joining(",")));
+					}
 				}
 				String contractNo = agent.getFeeCenterListD().stream().map(FeeCenter::getBillNo).filter(Objects::nonNull)
 					.distinct().collect(Collectors.joining(","));
-				agent.setContractNo(contractNo);
+				if (ObjectUtils.isNotNull(contractNo)) {
+					List<String> contractNoList = Arrays.stream(contractNo.split(",")).collect(Collectors.toList());
+					agent.setContractNo(contractNoList.stream().distinct().collect(Collectors.joining(",")));
+				}
 				agent.setPaymentInUsd(agent.getFeeCenterListD().stream().filter(e -> "SFK,WK".contains(e.getFeeCode()))
 					.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
 				agent.setActualAmount(agent.getExchangeRate().multiply(agent.getPaymentInUsd()));
@@ -587,7 +607,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					item.setCorpCnName(agent.getDomesticConsigneeCname());
 					item.setBillCorpId(agent.getCorpId());
 					item.setBillCorpCnName(agent.getCorpName());
-					item.setMblno(agent.getContractNo());
 					item.setPolId(agent.getPolId());
 					item.setPolCode(agent.getPolCode());
 					item.setPolCnName(agent.getPolCnName());
@@ -598,6 +617,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					item.setPid(agent.getId());
 				} else {
 					item.setStlPid(agent.getId());
+					item.setStlExrate(agent.getExchangeRate());
 					if ("YDF".equals(item.getFeeCode())) {
 						item.setAmount(agent.getPostElectricFee().divide(new BigDecimal(ydfCount), 2, RoundingMode.HALF_UP));
 						item.setPrice(item.getAmount());
@@ -934,6 +954,13 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			item.setWhetherComplete(null);
 		}
 		agentNew.setAgentItemsList(!agentItemsList.isEmpty() ? agentItemsList : new ArrayList<>());
+		agentNew.setFilesCenterList(new ArrayList<>());
+		agentNew.setFeeCenterListD(new ArrayList<>());
+		agentNew.setFeeCenterListC(new ArrayList<>());
+		agentNew.setRecordListD(new ArrayList<>());
+		agentNew.setRecordListC(new ArrayList<>());
+		agentNew.setRecordInvoiceList(new ArrayList<>());
+		agentNew.setRecordRateList(new ArrayList<>());
 		agentNew.setId(null);
 		agentNew.setBusinessNo("");
 		agentNew.setBusinessStatus("录入");
@@ -2111,7 +2138,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			finAccBillsService.saveOrUpdateBatch(finAccBills);
 		}
 		this.updateBatchById(agentList);
-		agent.setOrderStatus("已结算");
+		agent.setOrderStatus("已确认");
 		updateById(agent);
 		return agent;
 	}
@@ -2484,6 +2511,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			throw new SecurityException("审核已通过,撤销失败");
 		}
 		declare.setFirstStatus("录入");
+		declare.setOrderStatus("录入");
 		String status = sysClient.getParamServiceByDept("whether.apply.for.payment", AuthUtil.getTenantId(), AuthUtil.getDeptId());
 		if (ObjectUtils.isNotNull(status) && !"0".equals(status)) {
 			R financeProcess = auditProecessService.deteleByBillIdAndType(agent.getId(), agent.getPaidApplication());
@@ -2879,6 +2907,16 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			stlAgent.setAbroadBank(agent.getAbroadBank());
 			stlAgent.setAbroadCurrency(agent.getAbroadCurrency());
 		}
+		String billNo = feeCenterList.stream().map(FeeCenter::getMblno).filter(Objects::nonNull).collect(Collectors.joining(","));
+		if (ObjectUtils.isNotNull(billNo)) {
+			List<String> billNoList = Arrays.stream(billNo.split(",")).collect(Collectors.toList());
+			stlAgent.setBillNoJoin(billNoList.stream().distinct().collect(Collectors.joining(",")));
+		}
+		String contractNo = feeCenterList.stream().map(FeeCenter::getBillNo).filter(Objects::nonNull).collect(Collectors.joining(","));
+		if (ObjectUtils.isNotNull(contractNo)) {
+			List<String> contractNoList = Arrays.stream(contractNo.split(",")).collect(Collectors.toList());
+			stlAgent.setContractNo(contractNoList.stream().distinct().collect(Collectors.joining(",")));
+		}
 		stlAgent.setGoodsValue(feeCenterList.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
 		stlAgent.setPaymentInUsd(feeCenterList.stream().filter(e -> "SFK,WK".contains(e.getFeeCode()))
 			.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -3098,13 +3136,22 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				detail.setFeeCenterListD(new ArrayList<>());
 				detail.setFeeCenterListC(new ArrayList<>());
 			}
+			List<FilesCenter> filesCenterList = filesCenterService.list(new LambdaQueryWrapper<FilesCenter>()
+				.eq(FilesCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FilesCenter::getIsDeleted, 0)
+				.eq(FilesCenter::getBusinessType, "MYDL")
+				.eq(FilesCenter::getPid, agent.getId()));
+			detail.setFilesCenterList(!filesCenterList.isEmpty() ? filesCenterList : new ArrayList<>());
 		}
 		return detail;
 	}
 
 	@Override
-	public R getReportDataTrade(String billId, String reportCode, String groupCode, String itemIds, String type) {
+	public R getReportDataTrade(String billId, String reportCode, String groupCode, String corpIds, String itemIds, String type) {
 		Map<String, Object> map = new HashMap<>();
+		List<BCorps> bCorpsLists = bCorpsService.list(new LambdaQueryWrapper<BCorps>()
+			.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+			.eq(BCorps::getIsDeleted, 0));
 		if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.ORDER_ALLOCATION.equals(groupCode) && MagicValues.MYDL.equals(type)) {
 			Agent agent = baseMapper.selectById(billId);
 			DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
@@ -3272,6 +3319,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				List<Agent> agentList = new ArrayList<>();
 				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 					.eq(FeeCenter::getPid, agent.getId())
+					.eq(FeeCenter::getFeeType, "1")
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 					.eq(FeeCenter::getIsDeleted, 0));
 				if (!feeCenterList.isEmpty()) {
@@ -3285,28 +3333,27 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 							.in(Agent::getId, stlPids));
 					}
 				} else {
-					throw new RuntimeException("请先维护首款,尾款费用信息");
-				}
-				if (agentList.isEmpty()) {
-					throw new RuntimeException("请先确认首款,尾款收费");
+					throw new RuntimeException("请先维护首款费用信息");
 				}
 				AgentSKReport agentSKReport = new AgentSKReport();
 				List<Map<String, Object>> mapList = new ArrayList<>();
 				List<Long> stlPids = feeCenterList.stream().filter(e -> "SFK".equals(e.getFeeCode())
 						&& "D".equals(e.getDc())).map(FeeCenter::getStlPid)
 					.filter(Objects::nonNull).distinct().collect(Collectors.toList());
-				List<Agent> agentList1 = agentList.stream().filter(e -> stlPids.contains(e.getId())).collect(Collectors.toList());
-				for (Agent item : agentList1) {
-					Map<String, Object> map1 = new HashMap<>();
-					map1.put("time", dateFormat.format(item.getBusinessDate()));
-					BigDecimal remainingAmount = feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode())
-							&& "D".equals(e.getDc()) && "1".equals(e.getFeeType()) && item.getId().equals(e.getStlPid()))
-						.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					map1.put("amount", item.getActualAmount().add(item.getPostElectricFee())
-						.add(item.getServiceCharge()).subtract(remainingAmount));
-					mapList.add(map1);
-				}
-				agentSKReport.setMapList(mapList.isEmpty() ? new ArrayList<>() : mapList);
+				if (!agentList.isEmpty()) {
+					List<Agent> agentList1 = agentList.stream().filter(e -> stlPids.contains(e.getId())).collect(Collectors.toList());
+					for (Agent item : agentList1) {
+						Map<String, Object> map1 = new HashMap<>();
+						map1.put("time", dateFormat.format(item.getBusinessDate()));
+						BigDecimal remainingAmount = feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode())
+								&& "D".equals(e.getDc()) && "1".equals(e.getFeeType()) && item.getId().equals(e.getStlPid()))
+							.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+						map1.put("amount", item.getActualAmount().add(item.getPostElectricFee())
+							.add(item.getServiceCharge()).subtract(remainingAmount));
+						mapList.add(map1);
+					}
+					agentSKReport.setMapList(mapList.isEmpty() ? new ArrayList<>() : mapList);
+				}
 				agentSKReport.setPaymentMethod(agent.getAdvanceRatio());
 				agentSKReport.setContractNo(agent.getContractNo());
 				agentSKReport.setPrepaidTime(dateFormat.format(agent.getBusinessDate()));
@@ -3365,7 +3412,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					agentSKReport.setRealityAmount(new BigDecimal("0.00"));
 					agentSKReport.setRealityPostElectricFee(new BigDecimal("0.00"));
 					agentSKReport.setRealityServiceCharge(new BigDecimal("0.00"));
-					throw new RuntimeException("未查到应付首款费用信息");
 				}
 				agentSKReport.setRealitySumAmount(agentSKReport.getRealityAmount().add(agentSKReport.getRealityPostElectricFee()
 					.add(agentSKReport.getRealityServiceCharge())));
@@ -3405,6 +3451,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				List<Agent> agentList = new ArrayList<>();
 				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 					.eq(FeeCenter::getPid, agent.getId())
+					.eq(FeeCenter::getFeeType, "2")
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 					.eq(FeeCenter::getIsDeleted, 0));
 				if (!feeCenterList.isEmpty()) {
@@ -3417,29 +3464,28 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 							.eq(Agent::getBusinessType, "MYDL-STL")
 							.in(Agent::getId, stlPids));
 					}
-				}else {
-					throw new RuntimeException("请先维护首款,尾款费用信息");
-				}
-				if (agentList.isEmpty()) {
-					throw new RuntimeException("请先确认首款,尾款收费");
+				} else {
+					throw new RuntimeException("请先维护尾款费用信息");
 				}
 				AgentSKReport agentSKReport = new AgentSKReport();
 				List<Map<String, Object>> mapList = new ArrayList<>();
 				List<Long> stlPids = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())
 						&& "D".equals(e.getDc())).map(FeeCenter::getStlPid)
 					.filter(Objects::nonNull).distinct().collect(Collectors.toList());
-				List<Agent> agentList1 = agentList.stream().filter(e -> stlPids.contains(e.getId())).collect(Collectors.toList());
-				for (Agent item : agentList1) {
-					Map<String, Object> map1 = new HashMap<>();
-					map1.put("time", dateFormat.format(item.getBusinessDate()));
-					BigDecimal remainingAmount = feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode())
-							&& "D".equals(e.getDc()) && "2".equals(e.getFeeType()) && item.getId().equals(e.getStlPid()))
-						.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-					map1.put("amount", item.getActualAmount().add(item.getPostElectricFee())
-						.add(item.getServiceCharge()).subtract(remainingAmount));
-					mapList.add(map1);
-				}
-				agentSKReport.setMapList(mapList.isEmpty() ? new ArrayList<>() : mapList);
+				if (!agentList.isEmpty()) {
+					List<Agent> agentList1 = agentList.stream().filter(e -> stlPids.contains(e.getId())).collect(Collectors.toList());
+					for (Agent item : agentList1) {
+						Map<String, Object> map1 = new HashMap<>();
+						map1.put("time", dateFormat.format(item.getBusinessDate()));
+						BigDecimal remainingAmount = feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode())
+								&& "D".equals(e.getDc()) && "2".equals(e.getFeeType()) && item.getId().equals(e.getStlPid()))
+							.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+						map1.put("amount", item.getActualAmount().add(item.getPostElectricFee())
+							.add(item.getServiceCharge()).subtract(remainingAmount));
+						mapList.add(map1);
+					}
+					agentSKReport.setMapList(mapList.isEmpty() ? new ArrayList<>() : mapList);
+				}
 				agentSKReport.setPaymentMethod(agent.getAdvanceRatio());
 				agentSKReport.setContractNo(agent.getContractNo());
 				agentSKReport.setPrepaidTime(dateFormat.format(agent.getBusinessDate()));
@@ -3500,7 +3546,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					agentSKReport.setRealityAmount(new BigDecimal("0.00"));
 					agentSKReport.setRealityPostElectricFee(new BigDecimal("0.00"));
 					agentSKReport.setRealityServiceCharge(new BigDecimal("0.00"));
-					throw new RuntimeException("未查到应付尾款费用信息");
 				}
 				agentSKReport.setRealitySumAmount(agentSKReport.getRealityAmount().add(agentSKReport.getRealityPostElectricFee()
 					.add(agentSKReport.getRealityServiceCharge())));
@@ -3513,10 +3558,287 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			} else {
 				map.put(MagicValues.DATA, new AgentSKReport());
 			}
+		} else if (MagicValues.COST.equals(reportCode) && MagicValues.RECEIVABLE.equals(groupCode) && MagicValues.MYDL.equals(type)) {
+			Agent agent = baseMapper.selectById(billId);
+			if (agent != null) {
+				R<Dept> res = sysClient.getDept(agent.getAffiliatedCompanyId());
+				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("获取报表表头数据失败");
+				}
+				LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getDc, MagicValues.D)
+					.eq(FeeCenter::getIsDeleted, 0);
+				lambdaQueryWrapper.eq(FeeCenter::getPid, billId);
+				if (ObjectUtils.isNotNull(corpIds)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCorpId, corpIds);
+				} else {
+					if (ObjectUtils.isNotNull(itemIds)) {
+						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
+					}
+				}
+				List<FeeCenter> feeCenterList = feeCenterService.list(lambdaQueryWrapper);
+				BigDecimal amountDr = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountDrUsd = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountDrLoc = new BigDecimal(MagicValues.ZERO);
+				List<FeeCenterReports> feeCenterReportsList = new ArrayList<>();
+				for (FeeCenter item : feeCenterList) {
+					BCorps bCorps = bCorpsLists.stream().filter(e -> e.getId().equals(item.getCorpId())).findFirst().orElse(null);
+					if (bCorps != null) {
+						item.setCorpCnName(bCorps.getShortName());
+					}
+					if (MagicValues.D.equals(item.getDc())) {
+						if (MagicValues.USD.equals(item.getCurCode())) {
+							amountDrUsd = amountDrUsd.add(item.getAmountLoc());
+						} else if (MagicValues.CNY.equals(item.getCurCode())) {
+							amountDr = amountDr.add(item.getAmount());
+						} else {
+							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(), "1");
+							amountDrUsd = amountDrUsd.add(usd);
+						}
+					}
+					FeeCenterReports feeCenterReports = new FeeCenterReports();
+					feeCenterReports.setRemarks(item.getRemarks());
+					feeCenterReports.setPid(item.getPid());
+					feeCenterReports.setCorpCnName(item.getCorpCnName());
+					feeCenterReports.setFeeCnName(item.getFeeCnName());
+					feeCenterReports.setAmountD(item.getAmount());
+					feeCenterReports.setAmountUsdD(item.getAmountLoc());
+					feeCenterReports.setHblno(item.getMblno());
+					feeCenterReports.setAmount(item.getQuantity() + "*" + item.getPrice());
+					feeCenterReportsList.add(feeCenterReports);
+				}
+				agent.setFeeCenterReportsList(feeCenterReportsList);
+				amountDrLoc = amountDrLoc.add(ibCurrencyService.converterCny(MagicValues.USD, amountDrUsd, MagicValues.D, "1")).add(amountDr);
+				agent.setAmount(amountDr);
+				agent.setAmountUsd(amountDrUsd);
+				agent.setAmountLoc(amountDrLoc);
+				List<BCorpsBank> bCorpsBanks = bCorpsBankService.list(new LambdaQueryWrapper<BCorpsBank>()
+					.eq(BCorpsBank::getTenantId, AuthUtil.getTenantId())
+					.eq(BCorpsBank::getIsDeleted, 0)
+					.eq(BCorpsBank::getPid, agent.getDomesticConsigneeId()));
+				if (!bCorpsBanks.isEmpty()) {
+					agent.setAccountBank(bCorpsBanks.get(0).getAccountBank());
+					agent.setAccountNo(bCorpsBanks.get(0).getAccountNo());
+					agent.setAddress(bCorpsBanks.get(0).getAddress());
+					agent.setSwiftCode(bCorpsBanks.get(0).getSwiftCode());
+				}
+				agent.setDept(dept);
+				map.put(MagicValues.DATA, agent);
+			} else {
+				map.put(MagicValues.DATA, null);
+			}
+		} else if (MagicValues.COST.equals(reportCode) && MagicValues.MEET.equals(groupCode) && MagicValues.MYDL.equals(type)) {
+			Agent agent = baseMapper.selectById(billId);
+			if (agent != null) {
+				R<Dept> res = sysClient.getDept(agent.getAffiliatedCompanyId());
+				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("获取报表表头数据失败");
+				}
+				LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getDc, MagicValues.C)
+					.eq(FeeCenter::getIsDeleted, 0);
+				lambdaQueryWrapper.eq(FeeCenter::getPid, billId);
+				if (ObjectUtils.isNotNull(corpIds)) {
+					lambdaQueryWrapper.eq(FeeCenter::getCorpId, corpIds);
+				} else {
+					if (ObjectUtils.isNotNull(itemIds)) {
+						lambdaQueryWrapper.apply("find_in_set(id,'" + itemIds + "')");
+					}
+				}
+				List<FeeCenter> feeCenterList = feeCenterService.list(lambdaQueryWrapper);
+				BigDecimal amountCr = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountCrUsd = new BigDecimal(MagicValues.ZERO);
+				BigDecimal amountCrLoc = new BigDecimal(MagicValues.ZERO);
+				List<FeeCenterReports> feeCenterReportsList = new ArrayList<>();
+				for (FeeCenter item : feeCenterList) {
+					BCorps bCorps = bCorpsLists.stream().filter(e -> e.getId().equals(item.getCorpId())).findFirst().orElse(null);
+					if (bCorps != null) {
+						item.setCorpCnName(bCorps.getShortName());
+					}
+					if (MagicValues.C.equals(item.getDc())) {
+						if (MagicValues.USD.equals(item.getCurCode())) {
+							amountCrUsd = amountCrUsd.add(item.getAmountLoc());
+						} else if (MagicValues.CNY.equals(item.getCurCode())) {
+							amountCr = amountCr.add(item.getAmount());
+						} else {
+							BigDecimal usd = ibCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(), "1");
+							amountCrUsd = amountCrUsd.add(usd);
+						}
+					}
+					FeeCenterReports feeCenterReports = new FeeCenterReports();
+					feeCenterReports.setRemarks(item.getRemarks());
+					feeCenterReports.setPid(item.getPid());
+					feeCenterReports.setCorpCnName(item.getCorpCnName());
+					feeCenterReports.setFeeCnName(item.getFeeCnName());
+					feeCenterReports.setAmountC(item.getAmount());
+					feeCenterReports.setAmountUsdC(item.getAmountLoc());
+					feeCenterReports.setHblno(item.getMblno());
+					feeCenterReports.setAmount(item.getQuantity() + "*" + item.getPrice());
+					feeCenterReportsList.add(feeCenterReports);
+				}
+				agent.setFeeCenterReportsList(feeCenterReportsList);
+				amountCrLoc = amountCrLoc.add(ibCurrencyService.converterCny(MagicValues.USD, amountCrUsd, MagicValues.C, "1")).add(amountCr);
+				agent.setAmount(amountCr);
+				agent.setAmountUsd(amountCrUsd);
+				agent.setAmountLoc(amountCrLoc);
+				agent.setDept(dept);
+				map.put(MagicValues.DATA, agent);
+			} else {
+				map.put(MagicValues.DATA, null);
+			}
 		}
 		return R.data(map);
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public Agent revokeCollectionOfPayments(Agent agent) {
+		if (agent.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		agent.setOrderStatus("录入");
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getStlPid, agent.getId())
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getDc, "D"));
+		if (feeCenterList.isEmpty()) {
+			throw new RuntimeException("未找到费用明细");
+		}
+		String billNo = feeCenterList.stream().map(FeeCenter::getBillNo).filter(Objects::nonNull).distinct().collect(Collectors.joining(","));
+		List<Agent> agentList = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
+			.eq(Agent::getTenantId, AuthUtil.getTenantId())
+			.eq(Agent::getIsDeleted, 0)
+			.eq(Agent::getBusinessType, "MYDL")
+			.apply("find_in_set(contract_no,'" + billNo + "')"));
+		if (agentList.isEmpty()) {
+			throw new RuntimeException("未查到贸易代理单据信息");
+		}
+		List<Long> agentIdList = agentList.stream().map(Agent::getId).distinct().collect(Collectors.toList());
+		BigDecimal firstPaidInPayment = feeCenterList.stream().filter(e -> "SFK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
+			.reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal finalPaymentReceived = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
+			.reduce(BigDecimal.ZERO, BigDecimal::add);
+		for (Agent item : agentList) {
+			if (new BigDecimal("0").compareTo(firstPaidInPayment) != 0) {
+				item.setFirstPaidInPayment(new BigDecimal("0.00"));
+				item.setFirstPaidInPaymentDate(null);
+				item.setOrderStatus("未收货款");
+				item.setWhetherReceivedDownPayments("未收货款");
+			}
+			if (new BigDecimal("0").compareTo(finalPaymentReceived) != 0) {
+				BigDecimal amount = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode()) && item.getContractNo().equals(e.getBillNo()))
+					.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+				item.setFinalPaymentReceived(item.getFinalPaymentReceived().add(amount));
+				item.setFinalPaymentReceivedDate(null);
+				item.setOrderStatus("部分货款");
+			}
+		}
+		List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
+			.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+			.eq(AgentItems::getIsDeleted, 0)
+			.in(AgentItems::getPid, agentIdList));
+		if (!agentItemsList.isEmpty()) {
+			for (AgentItems items : agentItemsList) {
+				if (ObjectUtils.isNull(items.getPaymentRecord())) {
+					items.setPaymentRecord("应收首付款/应收尾款/应付首付款/应付尾款");
+				}
+				/*if (new BigDecimal("0").compareTo(firstPaidInPayment) != 0) {
+					String msg = "应收首付款/已收款/时间:" + formattedDate;
+					items.setPaymentRecord(items.getPaymentRecord().replaceAll("应收首付款", msg));
+				} else if (new BigDecimal("0").compareTo(finalPaymentReceived) != 0) {
+					String msg = "应收尾款/已收款/时间:" + formattedDate;
+					items.setPaymentRecord(items.getPaymentRecord().replaceAll("应收尾款", msg));
+				}*/
+			}
+			agentItemsService.updateBatchById(agentItemsList);
+		}
+		BigDecimal advanceChargeAmount = feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
+			.reduce(BigDecimal.ZERO, BigDecimal::add);
+		if (new BigDecimal("0").compareTo(advanceChargeAmount) != 0) {
+			AdvanceCharge advanceCharge = advanceChargeService.getOne(new LambdaQueryWrapper<AdvanceCharge>()
+				.eq(AdvanceCharge::getTenantId, AuthUtil.getTenantId())
+				.eq(AdvanceCharge::getIsDeleted, 0)
+				.eq(AdvanceCharge::getCorpId, agentList.get(0).getDomesticConsigneeId()));
+			if (advanceCharge != null) {
+				advanceCharge.setAdvancePaymentBalance(advanceCharge.getAdvancePaymentBalance().add(advanceChargeAmount));
+				advanceCharge.setOutOverpaymen(advanceCharge.getOutOverpaymen().add(advanceChargeAmount));
+				advanceChargeService.updateById(advanceCharge);
+			}
+		}
+		List<FeeCenter> feeCenters = new ArrayList<>();
+		for (FeeCenter item : feeCenterList) {
+			if (0 == item.getStlStatus()) {
+				throw new RuntimeException("费用:" + item.getFeeCnName() + "已撤销");
+			}
+			//费用明细
+			item.setAccBillId(0L);
+			item.setAccBillNo("");
+			item.setAccDate(null);
+			item.setAccAmount(item.getAmount());
+			item.setAccStatus(1);
+			item.setAccById(0L);
+			item.setAccByName("");
+			item.setStlOrgAmount(new BigDecimal("0.00"));
+			item.setStlCurCode("");
+			item.setStlAmount(new BigDecimal("0.00"));
+			item.setStlAmountLoc(new BigDecimal("0.00"));
+			item.setStlStatus(0);
+			item.setStlDate(null);
+			item.setStlById(0L);
+			item.setStlByName("");
+			item.setUnsettledAmount(item.getAmount());
+			item.setStlTtlAmount(new BigDecimal("0.00"));
+			item.setStlBillId(0L);
+			item.setStlBillNo("");
+			feeCenters.add(item);
+		}
+		feeCenterService.updateBatchById(feeCenters);
+		List<Long> accBillId = feeCenterList.stream().map(FeeCenter::getAccBillId).collect(Collectors.toList());
+		if (!accBillId.isEmpty()){
+			List<FinStlBillsItems> stlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
+				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBillsItems::getIsDeleted, 0)
+				.in(FinStlBillsItems::getAccBillId, accBillId));
+			if (!stlBillsItemsList.isEmpty()){
+				List<Long> stlPid = stlBillsItemsList.stream().map(FinStlBillsItems::getPid).collect(Collectors.toList());
+				finStlBillsService.removeByIds(stlPid);
+				finStlBillsItemsService.removeByIds(stlBillsItemsList.stream().map(FinStlBillsItems::getId).collect(Collectors.toList()));
+			}
+			finAccBillsService.removeByIds(accBillId);
+		}
+		updateById(agent);
+		this.updateBatchById(agentList);
+		return agent;
+	}
+
 	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");
@@ -3532,6 +3854,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		feeCenter.setPid(detail.getId());
 		feeCenter.setLineNo(lineNo);
 		feeCenter.setBillNo(detail.getContractNo());
+		feeCenter.setMblno(detail.getContractNo());
 		feeCenter.setBillDate(detail.getBusinessDate());
 		feeCenter.setCorpId(detail.getDomesticConsigneeId());
 		feeCenter.setCorpCnName(detail.getDomesticConsigneeCname());
@@ -3567,6 +3890,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			feeCenter.setAmountLoc(detail.getPrepaidAmount());
 			if (ObjectUtils.isNotNull(detail.getExchangeRate())) {
 				feeCenter.setExrate(detail.getExchangeRate());
+				feeCenter.setStlExrate(detail.getExchangeRate());
+				feeCenter.setDiscountExrate(detail.getExchangeRate());
 				feeCenter.setPrice(detail.getPrepaidAmount().multiply(detail.getExchangeRate()));
 				feeCenter.setAmount(detail.getPrepaidAmount().multiply(detail.getExchangeRate()));
 			}
@@ -3585,6 +3910,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			return feeCenter;
 		} else if ("SXF".equals(type)) {
 			feeCenter.setQuantity(new BigDecimal("1"));
+			feeCenter.setStlExrate(detail.getExchangeRate());
+			feeCenter.setDiscountExrate(detail.getExchangeRate());
 			BigDecimal prepaidAmount = detail.getPrepaidAmount().multiply(detail.getExchangeRate());
 			String serviceCharge = sysClient.getParamServiceByDept("service.charge", AuthUtil.getTenantId(), AuthUtil.getDeptId());
 			if (ObjectUtils.isNotNull(serviceCharge)) {
@@ -3669,6 +3996,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			feeCenter.setAmountLoc(amount);
 			if (ObjectUtils.isNotNull(detail.getExchangeRate())) {
 				feeCenter.setExrate(detail.getExchangeRate());
+				feeCenter.setStlExrate(detail.getExchangeRate());
+				feeCenter.setDiscountExrate(detail.getExchangeRate());
 				feeCenter.setPrice(feeCenter.getAmountLoc().multiply(detail.getExchangeRate()));
 				feeCenter.setAmount(feeCenter.getAmountLoc().multiply(detail.getExchangeRate()));
 			}
@@ -3689,6 +4018,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			feeCenter.setQuantity(new BigDecimal("1"));
 			BigDecimal amount = agentItemsRList.stream().map(AgentItemsR::getThisSettlementAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 			BigDecimal prepaidAmount = amount.multiply(detail.getExchangeRate());
+			feeCenter.setStlExrate(detail.getExchangeRate());
+			feeCenter.setDiscountExrate(detail.getExchangeRate());
 			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);
@@ -3733,6 +4064,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		feeCenter.setPid(detail.getId());
 		feeCenter.setLineNo(lineNo);
 		feeCenter.setBillNo(detail.getContractNo());
+		feeCenter.setMblno(detail.getContractNo());
 		feeCenter.setBillDate(detail.getBusinessDate());
 		feeCenter.setCorpId(detail.getDomesticConsigneeId());
 		feeCenter.setCorpCnName(detail.getDomesticConsigneeCname());
@@ -3768,6 +4100,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			feeCenter.setAmountLoc(detail.getPrepaidAmount());
 			if (ObjectUtils.isNotNull(detail.getExchangeRate())) {
 				feeCenter.setExrate(detail.getExchangeRate());
+				feeCenter.setStlExrate(detail.getExchangeRate());
+				feeCenter.setDiscountExrate(detail.getExchangeRate());
 				feeCenter.setPrice(detail.getPrepaidAmount().multiply(detail.getExchangeRate()));
 				feeCenter.setAmount(detail.getPrepaidAmount().multiply(detail.getExchangeRate()));
 			}
@@ -3787,6 +4121,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		} else if ("SXF".equals(type)) {
 			feeCenter.setQuantity(new BigDecimal("1"));
 			BigDecimal prepaidAmount = detail.getPrepaidAmount().multiply(detail.getExchangeRate());
+			feeCenter.setStlExrate(detail.getExchangeRate());
+			feeCenter.setDiscountExrate(detail.getExchangeRate());
 			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);
@@ -3870,6 +4206,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			feeCenter.setAmountLoc(amount);
 			if (ObjectUtils.isNotNull(detail.getExchangeRate())) {
 				feeCenter.setExrate(detail.getExchangeRate());
+				feeCenter.setStlExrate(detail.getExchangeRate());
+				feeCenter.setDiscountExrate(detail.getExchangeRate());
 				feeCenter.setPrice(feeCenter.getAmountLoc().multiply(detail.getExchangeRate()));
 				feeCenter.setAmount(feeCenter.getAmountLoc().multiply(detail.getExchangeRate()));
 			}
@@ -3890,6 +4228,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			feeCenter.setQuantity(new BigDecimal("1"));
 			BigDecimal amount = agentItemsRList.stream().map(AgentItemsR::getThisSettlementAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 			BigDecimal prepaidAmount = amount.multiply(detail.getExchangeRate());
+			feeCenter.setStlExrate(detail.getExchangeRate());
+			feeCenter.setDiscountExrate(detail.getExchangeRate());
 			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);

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

@@ -232,7 +232,7 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
 				}
 			}
 		} else {
-			if (ObjectUtils.isNotNull(inOutStorage.getOutStorageDate())) {
+			if (ObjectUtils.isNull(inOutStorage.getOutStorageDate())) {
 				inOutStorage.setOutStorageDate(new Date());
 			}
 			InOutStorage inStorage = baseMapper.selectById(inOutStorage.getSrcId());
@@ -256,7 +256,7 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
 				StorageFee storageFee = storageFeeService.getOne(new LambdaQueryWrapper<StorageFee>()
 					.eq(StorageFee::getTenantId, AuthUtil.getTenantId())
 					.eq(StorageFee::getIsDeleted, 0)
-					.eq(StorageFee::getStatus, 1)
+					.eq(StorageFee::getStatus, 0)
 					.eq(StorageFee::getWarehouseId, inOutStorage.getWarehouseId())
 					.eq(StorageFee::getGoodsType, inOutStorage.getGoodsType())
 					.eq(StorageFee::getCorpId, bills.getCorpId()));

+ 79 - 4
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/StorageFeeServiceImpl.java

@@ -25,17 +25,21 @@ import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.los.Util.IDeptUtils;
+import org.springblade.los.business.files.entity.FilesCenter;
+import org.springblade.los.business.files.service.IFilesCenterService;
 import org.springblade.los.trade.entity.StorageFee;
 import org.springblade.los.trade.entity.StorageFeeItems;
 import org.springblade.los.trade.mapper.StorageFeeMapper;
 import org.springblade.los.trade.service.IStorageFeeItemsService;
 import org.springblade.los.trade.service.IStorageFeeService;
 import org.springblade.los.trade.vo.StorageFeeVO;
-import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 贸易代理-仓储费 服务实现类
@@ -47,13 +51,12 @@ import java.util.Date;
 @AllArgsConstructor
 public class StorageFeeServiceImpl extends ServiceImpl<StorageFeeMapper, StorageFee> implements IStorageFeeService {
 
-
-	private final ISysClient sysClient;
-
 	private final IDeptUtils deptUtils;
 
 	private final IStorageFeeItemsService storageFeeItemsService;
 
+	private final IFilesCenterService filesCenterService;
+
 	@Override
 	public IPage<StorageFeeVO> selectStorageFeePage(IPage<StorageFeeVO> page, StorageFeeVO storageFee) {
 		return page.setRecords(baseMapper.selectStorageFeePage(page, storageFee));
@@ -68,13 +71,29 @@ public class StorageFeeServiceImpl extends ServiceImpl<StorageFeeMapper, Storage
 		if (ObjectUtils.isNotNull(deptUtils.getDeptPid())) {
 			deptId = deptUtils.getDeptPid();
 		}
+		List<StorageFee> count = baseMapper.selectList(new LambdaQueryWrapper<StorageFee>()
+			.eq(StorageFee::getTenantId, AuthUtil.getTenantId())
+			.eq(StorageFee::getIsDeleted, 0)
+			.eq(StorageFee::getCorpId, storageFee.getCorpId())
+			.eq(StorageFee::getWarehouseId, storageFee.getWarehouseId())
+			.eq(StorageFee::getGoodsType, storageFee.getGoodsType())
+		);
 		if (storageFee.getId() == null) {
+			if (!count.isEmpty()) {
+				throw new RuntimeException("客户:" + storageFee.getCorpName() + "仓库" + storageFee.getWarehouseName() + "" +
+					"类别" + storageFee.getGoodsType() + "不允许重复");
+			}
 			storageFee.setCreateTime(new Date());
 			storageFee.setCreateUser(AuthUtil.getUserId());
 			if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
 				storageFee.setCreateDept(deptId);
 			}
 		} else {
+			List<Long> ids = count.stream().map(StorageFee::getId).distinct().collect(Collectors.toList());
+			if (!count.isEmpty() && !ids.contains(storageFee.getId())) {
+				throw new RuntimeException("客户:" + storageFee.getCorpName() + "仓库" + storageFee.getWarehouseName() + "" +
+					"类别" + storageFee.getGoodsType() + "不允许重复");
+			}
 			storageFee.setUpdateUser(AuthUtil.getUserId());
 			storageFee.setUpdateTime(new Date());
 		}
@@ -95,6 +114,27 @@ public class StorageFeeServiceImpl extends ServiceImpl<StorageFeeMapper, Storage
 			}
 			storageFeeItemsService.saveOrUpdateBatch(storageFee.getStorageFeeItemsList());
 		}
+		if (ObjectUtils.isNotNull(storageFee.getFilesCenterList()) && !storageFee.getFilesCenterList().isEmpty()) {
+			for (FilesCenter item : storageFee.getFilesCenterList()) {
+				if (item.getId() == null) {
+					item.setBusinessType("CCF");
+					item.setSerialNo(1);
+					item.setSort(1);
+					item.setPid(storageFee.getId());
+					item.setCreateTime(new Date());
+					item.setCreateUser(AuthUtil.getUserId());
+					item.setCreateUserName(AuthUtil.getUserName());
+					if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+						item.setCreateDept(deptId + "");
+					}
+				} else {
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setUpdateUserName(AuthUtil.getUserName());
+				}
+			}
+			filesCenterService.saveOrUpdateBatch(storageFee.getFilesCenterList());
+		}
 		return R.data(storageFee);
 	}
 
@@ -108,6 +148,41 @@ public class StorageFeeServiceImpl extends ServiceImpl<StorageFeeMapper, Storage
 			.eq(StorageFeeItems::getTenantId, AuthUtil.getTenantId())
 			.eq(StorageFeeItems::getIsDeleted, 0)
 			.eq(StorageFeeItems::getPid, detail.getId())));
+		List<FilesCenter> filesCenterList = filesCenterService.list(new LambdaQueryWrapper<FilesCenter>()
+			.eq(FilesCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FilesCenter::getIsDeleted, 0)
+			.eq(FilesCenter::getBusinessType, "MYDL")
+			.eq(FilesCenter::getPid, detail.getId()));
+		detail.setFilesCenterList(!filesCenterList.isEmpty() ? filesCenterList : new ArrayList<>());
+		return detail;
+	}
+
+	@Override
+	public StorageFee copy(StorageFee storageFee) {
+		if (storageFee.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		StorageFee detail = baseMapper.selectById(storageFee.getId());
+		List<StorageFeeItems> storageFeeItemsList = storageFeeItemsService.list(new LambdaQueryWrapper<StorageFeeItems>()
+			.eq(StorageFeeItems::getTenantId, AuthUtil.getTenantId())
+			.eq(StorageFeeItems::getIsDeleted, 0)
+			.eq(StorageFeeItems::getPid, detail.getId()));
+		for (StorageFeeItems item : storageFeeItemsList) {
+			item.setId(null);
+			item.setPid(null);
+			item.setCreateTime(null);
+			item.setCreateUser(null);
+			item.setCreateDept(null);
+			item.setUpdateUser(null);
+			item.setUpdateTime(null);
+		}
+		detail.setId(null);
+		detail.setCreateTime(null);
+		detail.setCreateUser(null);
+		detail.setCreateDept(null);
+		detail.setUpdateUser(null);
+		detail.setUpdateTime(null);
+		detail.setStorageFeeItemsList(storageFeeItemsList);
 		return detail;
 	}