Przeglądaj źródła

君海:1.撤销付费仓储接口判断逻辑修改
2.付汇通知金额计算逻辑修改
3.审批列表增加字段

纪新园 6 miesięcy temu
rodzic
commit
e81ddb9f17

+ 12 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/check/entity/LosAuditProecess.java

@@ -358,5 +358,17 @@ public class LosAuditProecess implements Serializable {
 	@ApiModelProperty(value = "来源英文")
 	private String srcEnName;
 
+	/**
+	 * 开船日期
+	 */
+	@ApiModelProperty(value = "开船日期")
+	private Date etd;
+
+	/**
+	 * 开船日期
+	 */
+	@TableField(exist = false)
+	private List<String> etdList;
+
 
 }

+ 9 - 2
blade-service/blade-los/src/main/java/org/springblade/los/Util/BigDecimalUtils.java

@@ -15,8 +15,15 @@ public class BigDecimalUtils {
 	 * @return 结果
 	 */
 	public static String convertToEnglish(BigDecimal number) {
-		long integralPart = number.longValue();
-		return convert(integralPart).trim();
+		BigDecimal integerPart = number.setScale(0, BigDecimal.ROUND_DOWN);
+		String decimal = number.toString();
+		BigDecimal decimalAmount = new BigDecimal(decimal.substring(decimal.indexOf(".") + 1));
+		long integralPart = integerPart.longValue();
+		String uppercaseInteger = convert(integralPart).trim();
+		if (new BigDecimal("0.00").compareTo(decimalAmount) != 0) {
+			uppercaseInteger = uppercaseInteger + " POINT " + convert(decimalAmount.longValue()).trim();
+		}
+		return uppercaseInteger;
 	}
 
 	private static String convert(long number) {

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

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
+import org.springblade.common.utils.NumToWords;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;

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

@@ -1524,6 +1524,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			auditProecessDTO.setSrcId(declare.getSrcId());
 			auditProecessDTO.setSrcCnName(declare.getSrcCnName());
 			auditProecessDTO.setSrcEnName(declare.getSrcEnName());
+			if ("SE".equals(declare.getBusinessType())) {
+				auditProecessDTO.setEtd(declare.getEtd());
+			} else if ("SI".equals(declare.getBusinessType())) {
+				auditProecessDTO.setEtd(declare.getEta());
+			}
 			R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
 			if (!financeProcess.isSuccess()) {
 				throw new SecurityException("操作失败,请联系管理员");

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

@@ -372,6 +372,9 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 			}
 		}
 		Calendar calendar = Calendar.getInstance();
+		if (ObjectUtils.isNull(bills.getEta())) {
+			throw new RuntimeException("请先保存在操作");
+		}
 		calendar.setTime(bills.getEta());
 		calendar.add(Calendar.DAY_OF_MONTH, Integer.parseInt(bills.getIqNo()) - 1);
 		Date newDate = calendar.getTime();

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

@@ -94,6 +94,10 @@ public class AuditProecessController extends BladeController {
 			lambdaQueryWrapper.ge(LosAuditProecess::getBillTime, auditProecess.getBillTimeList().get(0));
 			lambdaQueryWrapper.le(LosAuditProecess::getBillTime, auditProecess.getBillTimeList().get(1));
 		}
+		if (ObjectUtils.isNotNull(auditProecess.getEtdList())) {
+			lambdaQueryWrapper.ge(LosAuditProecess::getEtd, auditProecess.getEtdList().get(0));
+			lambdaQueryWrapper.le(LosAuditProecess::getEtd, auditProecess.getEtdList().get(1));
+		}
 		lambdaQueryWrapper.and(ObjectUtils.isNotNull(auditProecess.getSrcCnName()), i -> i.like(LosAuditProecess::getSrcCnName,
 				auditProecess.getSrcCnName()).or().like(LosAuditProecess::getSrcEnName, auditProecess.getSrcCnName()));
 		lambdaQueryWrapper.ne(StringUtils.isBlank(auditProecess.getAuditStatus()), LosAuditProecess::getAuditStatus, "N");

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

@@ -208,6 +208,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 			auditProecess.setSrcId(auditProecessDTO.getSrcId());
 			auditProecess.setSrcCnName(auditProecessDTO.getSrcCnName());
 			auditProecess.setSrcEnName(auditProecessDTO.getSrcEnName());
+			auditProecess.setEtd(auditProecessDTO.getEtd());
 			//除了第一级是待审,其他都N
 			if (e.getLevelId() == 1) {
 				SimpleDateFormat simpleDateFormat = new SimpleDateFormat();

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/service/impl/FinInvoicesServiceImpl.java

@@ -970,7 +970,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 */
 							BigDecimal subAmount = e.getAmount().subtract(e.getAppliedInvoiceAmount().abs());
 							currentStlAmount = currentStlAmount.subtract(subAmount);
-							e.setAppliedAmount(e.getAmount());
+							e.setAppliedInvoiceAmount(e.getAmount());
 						}
 						feeCenterList.add(e);
 					}

+ 56 - 23
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

@@ -1642,33 +1642,66 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			.eq(FinStlBillsItems::getIsDeleted, 0)
 			.eq(FinStlBillsItems::getPid, bills.getId()));
 		List<FeeCenter> feeCenterList = new ArrayList<>();
+		List<FinAccBills> finAccBillsList = new ArrayList<>();
 		for (FinStlBillsItems item : finStlBillsItemsList) {
-			item.setIsApproved(1);
-			item.setUpdateUser(AuthUtil.getUserId());
-			item.setUpdateTime(new Date());
-			item.setUpdateUserName(AuthUtil.getUserName());
-		}
-		/*-----------------------费用中心数据处理--------------------------- */
-		List<FeeCenter> feeCenters = new ArrayList<>();
-		if (!finStlBillsItemsList.isEmpty()) {
-			List<Long> ids = finStlBillsItemsList.stream().map(FinStlBillsItems::getSourceId).filter(Objects::nonNull).collect(Collectors.toList());
-			if (!ids.isEmpty()) {
-				feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-					.eq(FeeCenter::getIsDeleted, 0)
-					.in(FeeCenter::getId, ids)
-					.orderByDesc(FeeCenter::getCreateTime));
+			FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
+			if (finAccBills == null) {
+				throw new RuntimeException("未找到账单明细,操作失败");
+			}
+			if ("CNY".equals(item.getCurCode())) {
+				if (item.getCurrentStlAmount().abs().compareTo(finAccBills.getAppliedAmount().abs()) > 0) {
+					throw new RuntimeException("本次申请金额大于未申请金额");
+				}
+				finAccBills.setAppliedAmount(finAccBills.getAppliedAmount().subtract(item.getCurrentStlAmount()));
+			} else {
+				if (item.getCurrentStlAmount().abs().compareTo(finAccBills.getAppliedAmountUsd().abs()) > 0) {
+					throw new RuntimeException("本次申请金额大于未申请金额");
+				}
+				finAccBills.setAppliedAmountUsd(finAccBills.getAppliedAmountUsd().subtract(item.getCurrentStlAmount()));
+			}
+			finAccBillsList.add(finAccBills);
+			//计算字段null值处理
+			item.setStlTtlAmount(ObjectUtils.isNotNull(item.getStlTtlAmount()) ? item.getStlTtlAmount() : new BigDecimal("0.00"));
+			item.setUnsettledAmount(ObjectUtils.isNotNull(item.getUnsettledAmount()) ? item.getUnsettledAmount() : new BigDecimal("0.00"));
+			item.setCurrentStlAmount(ObjectUtils.isNotNull(item.getCurrentStlAmount()) ? item.getCurrentStlAmount() : new BigDecimal("0.00"));
+			item.setCurrentStlDiscount(ObjectUtils.isNotNull(item.getCurrentStlDiscount()) ? item.getCurrentStlDiscount() : new BigDecimal("0.00"));
+			List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getAccBillId, finAccBills.getId())
+				.eq(FeeCenter::getAccStatus, 1)
+				.apply("applied_amount != 0")
+				.orderByDesc(FeeCenter::getCreateTime));
+			BigDecimal currentStlAmount = item.getCurrentStlAmount();
+			for (FeeCenter e : feeCenters) {
+				if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
+					break;
+				} else {
+					//计算字段null值处理
+					e.setAmount(ObjectUtils.isNotNull(e.getAmount()) ? e.getAmount() : new BigDecimal("0.00"));
+					e.setUnsettledAmount(ObjectUtils.isNotNull(e.getUnsettledAmount()) ? e.getUnsettledAmount() : new BigDecimal("0.00"));
+					e.setStlTtlAmount(ObjectUtils.isNotNull(e.getStlTtlAmount()) ? e.getStlTtlAmount() : new BigDecimal("0.00"));
+
+					if (e.getAppliedAmount().abs().compareTo(currentStlAmount.abs()) > 0) {
+						e.setAppliedAmount(e.getAppliedAmount().subtract(currentStlAmount));
+						currentStlAmount = new BigDecimal("0.00");
+					} else if (e.getAppliedAmount().abs().compareTo(currentStlAmount.abs()) == 0) {
+						e.setAppliedAmount(e.getAppliedAmount().subtract(currentStlAmount));
+						currentStlAmount = new BigDecimal("0.00");
+					} else {
+						e.setAppliedAmount(new BigDecimal("0.00"));
+						currentStlAmount = currentStlAmount.subtract(e.getAmount());
+					}
+					feeCenterList.add(e);
+				}
+			}
+			if (currentStlAmount.compareTo(new BigDecimal("0.00")) != 0) {
+				throw new RuntimeException("撤销金额计算错误,操作失败");
 			}
-		}
-		for (FeeCenter e : feeCenters) {
-			e.setApproverId(AuthUtil.getUserId());
-			e.setApproverName(AuthUtil.getUserName());
-			e.setApproveTime(new Date());
-			e.setAuditStatus("3");
-			feeCenterList.add(e);
 		}
 		feeCenterService.saveOrUpdateBatch(feeCenterList);
-		finStlBillsItemsService.saveOrUpdateBatch(finStlBillsItemsList);
+		finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+		updateBillsStatus(finStlBillsItemsList, 4, feeCenterList);
 		bills.setStatus(4);
 		baseMapper.updateById(bills);
 		return R.success("操作成功");

+ 156 - 42
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -581,7 +581,12 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 							throw new RuntimeException("优惠汇率不能大于结算汇率");
 						}
 						if ("SFK,WK".contains(item.getFeeCode())) {
-							item.setAmount(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+							if ("USD".equals(item.getCurCode())) {
+								item.setAmount(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+							} else {
+								item.setAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								item.setStlExrate(new BigDecimal("1.00"));
+							}
 							item.setPrice(item.getAmount());
 						}
 						if ("YDF".equals(item.getFeeCode())) {
@@ -619,9 +624,16 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				}
 				if ("录入".equals(agent.getOrderStatus())) {
 					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));
+						if ("USD".equals(item.getCurCode())) {
+							BigDecimal amount = item.getAmountLoc().multiply(item.getDiscountExrate());
+							item.setProfit(item.getAmount().subtract(amount));
+							profit = profit.add(item.getAmount().subtract(amount));
+						} else {
+							BigDecimal amount = item.getAmountLoc();
+							item.setProfit(item.getAmount().subtract(amount));
+							profit = profit.add(item.getAmount().subtract(amount));
+							item.setDiscountExrate(new BigDecimal("1.00"));
+						}
 					} else {
 						FeeCenter feeCenter = feeCenters.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
 						if (feeCenter != null) {
@@ -632,10 +644,18 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 								serviceChargeAmount = new BigDecimal("1").divide(new BigDecimal("1000"), serviceCharge.length(), RoundingMode.HALF_UP);
 							}
 							if (ObjectUtils.isNotNull(item.getDiscountExrate())) {
-								BigDecimal amount = feeCenter.getAmountLoc().multiply(item.getDiscountExrate()).multiply(serviceChargeAmount);
-								BigDecimal amountSum = item.getAmount().subtract(amount);
-								item.setProfit(amountSum);
-								profit = profit.add(amountSum);
+								if ("USD".equals(item.getCurCode())) {
+									BigDecimal amount = feeCenter.getAmountLoc().multiply(item.getDiscountExrate()).multiply(serviceChargeAmount);
+									BigDecimal amountSum = item.getAmount().subtract(amount);
+									item.setProfit(amountSum);
+									profit = profit.add(amountSum);
+								} else {
+									BigDecimal amount = feeCenter.getAmountLoc().multiply(serviceChargeAmount);
+									BigDecimal amountSum = item.getAmount().subtract(amount);
+									item.setProfit(amountSum);
+									profit = profit.add(amountSum);
+									item.setDiscountExrate(new BigDecimal("1.00"));
+								}
 							} else {
 								item.setProfit(new BigDecimal("0.00"));
 								profit = profit.add(new BigDecimal("0.00"));
@@ -690,8 +710,14 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 //					item.setExrate(agent.getExchangeRate());
 						item.setDiscountExrate(agent.getExchangeRate());
 						if ("SFK,WK".contains(item.getFeeCode())) {
-							item.setAmount(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
-							item.setPrice(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+							if ("USD".equals(item.getCurCode())) {
+								item.setAmount(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+								item.setPrice(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+							} else {
+								item.setAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								item.setPrice(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								item.setDiscountExrate(new BigDecimal("1.00"));
+							}
 						}
 						if ("YDF".equals(item.getFeeCode())) {
 							item.setAmount(agent.getPostElectricFee().divide(new BigDecimal(ydfCount), 2, RoundingMode.HALF_UP));
@@ -1235,9 +1261,14 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				throw new RuntimeException("费用:" + item.getFeeCnName() + "已确认");
 			}
 			if ("SFK,WK".contains(item.getFeeCode())) {
-				item.setAmount(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+				if ("USD".equals(item.getCurCode())) {
+					item.setAmount(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+					item.setStlExrate(agent.getExchangeRate());
+				} else {
+					item.setAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+					item.setStlExrate(new BigDecimal("1.00"));
+				}
 				item.setPrice(item.getAmount());
-				item.setStlExrate(agent.getExchangeRate());
 			}
 			//账单明细
 			FinAccBills data = finAccBillsList.stream().filter(e -> e.getId().equals(item.getAccBillId())).findFirst().orElse(null);
@@ -1771,12 +1802,23 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		}
 		for (FeeCenter item : feeCenterList) {
 			if ("SFK,WK".contains(item.getFeeCode())) {
-				item.setAmount(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+				if ("USD".equals(item.getCurCode())) {
+					item.setAmount(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+					item.setStlExrate(agent.getExchangeRate());
+				} else {
+					item.setAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+					item.setStlExrate(new BigDecimal("1.00"));
+				}
 				item.setPrice(item.getAmount());
-				item.setDiscountExrate(agent.getDiscountRate());
-				BigDecimal discountAmount = agent.getDiscountRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP);
-				item.setProfit(item.getAmount().subtract(discountAmount));
-				item.setStlExrate(agent.getExchangeRate());
+				if ("USD".equals(item.getCurCode())) {
+					BigDecimal discountAmount = agent.getDiscountRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP);
+					item.setProfit(item.getAmount().subtract(discountAmount));
+					item.setDiscountExrate(agent.getDiscountRate());
+				} else {
+					BigDecimal discountAmount = item.getAmountLoc().setScale(2, RoundingMode.HALF_UP);
+					item.setProfit(item.getAmount().subtract(discountAmount));
+					item.setDiscountExrate(new BigDecimal("1.00"));
+				}
 			}
 		}
 		BigDecimal amountC = feeCenterList.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -1900,12 +1942,23 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		for (FeeCenter item : feeCentersList) {
 			if ("SFK,WK".contains(item.getFeeCode()) && "C".equals(item.getDc()) && 0 == item.getStlStatus()
 				&& feeCenterIds.contains(item.getId())) {
-				item.setAmount(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+				if ("USD".equals(item.getCurCode())) {
+					item.setAmount(agent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+					item.setStlExrate(agent.getExchangeRate());
+				} else {
+					item.setAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+					item.setStlExrate(new BigDecimal("1.00"));
+				}
 				item.setPrice(item.getAmount());
-				item.setDiscountExrate(agent.getDiscountRate());
-				BigDecimal discountAmount = agent.getDiscountRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP);
-				item.setProfit(item.getAmount().subtract(discountAmount));
-				item.setStlExrate(agent.getExchangeRate());
+				if ("USD".equals(item.getCurCode())) {
+					BigDecimal discountAmount = agent.getDiscountRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP);
+					item.setProfit(item.getAmount().subtract(discountAmount));
+					item.setDiscountExrate(agent.getDiscountRate());
+				} else {
+					BigDecimal discountAmount = item.getAmountLoc().setScale(2, RoundingMode.HALF_UP);
+					item.setProfit(item.getAmount().subtract(discountAmount));
+					item.setDiscountExrate(new BigDecimal("1.00"));
+				}
 			}
 			if (1 == item.getStlStatus()) {
 				throw new RuntimeException("费用:" + item.getFeeCnName() + "已确认");
@@ -2175,7 +2228,11 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		BigDecimal serviceChargeDiscount = new BigDecimal("0.00");
 		for (FeeCenter item : feeCenters1) {
 			if ("SFK,WK".contains(item.getFeeCode())) {
-				goodsValue = goodsValue.add(item.getAmountLoc().multiply(item.getDiscountExrate()));
+				if ("USD".equals(item.getCurCode())) {
+					goodsValue = goodsValue.add(item.getAmountLoc().multiply(item.getDiscountExrate()));
+				} else {
+					goodsValue = goodsValue.add(item.getAmountLoc());
+				}
 			}
 		}
 		if (ObjectUtils.isNotNull(serviceCharge)) {
@@ -3159,8 +3216,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			if ("5".equals(item.getAuditStatus())) {
 				throw new RuntimeException("费用:" + item.getFeeCnName() + "已申请");
 			}
-			item.setStlExrate(stlAgent.getExchangeRate());
-			item.setDiscountExrate(stlAgent.getExchangeRate());
 			if (!"SXF,YDF,YFK,WK,SFK,DLF,ZZS,GS".contains(item.getFeeCode())) {
 				if ("CNY".equals(item.getCurCode())) {
 					otherAmount = otherAmount.add(item.getAmount());
@@ -3178,10 +3233,21 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				tariff = tariff.add(item.getAmount());
 			}
 			if ("SFK,WK".contains(item.getFeeCode())) {
-				item.setAmount(stlAgent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
-				item.setStlExrate(stlAgent.getExchangeRate());
+				if ("USD".equals(item.getCurCode())) {
+					item.setStlExrate(stlAgent.getExchangeRate());
+					item.setAmount(stlAgent.getExchangeRate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+				} else {
+					item.setAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+					item.setStlExrate(new BigDecimal("1.00"));
+				}
 				item.setPrice(item.getAmount());
-				item.setProfit(item.getAmount().subtract(item.getDiscountExrate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP)));
+				if ("USD".equals(item.getCurCode())) {
+					item.setDiscountExrate(stlAgent.getExchangeRate());
+					item.setProfit(item.getAmount().subtract(item.getDiscountExrate().multiply(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP)));
+				} else {
+					item.setProfit(item.getAmount().subtract(item.getAmountLoc()).setScale(2, RoundingMode.HALF_UP));
+					item.setDiscountExrate(new BigDecimal("1.00"));
+				}
 			}
 			if ("YDF".equals(item.getFeeCode())) {
 				item.setAmount(stlAgent.getPostElectricFee().divide(new BigDecimal(ydfCount), 2, RoundingMode.HALF_UP));
@@ -3545,7 +3611,11 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 						}
 						agentFeeItemsReport.setSkAmountUsd(item.getAmountLoc());
 						agentFeeItemsReport.setExchangeRate(item.getExrate());
-						agentFeeItemsReport.setAmount(item.getAmountLoc().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
+						if ("USD".equals(item.getCurCode())) {
+							agentFeeItemsReport.setAmount(item.getAmountLoc().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
+						} else {
+							agentFeeItemsReport.setAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+						}
 						if (!feeCenterListC.isEmpty()) {
 							FeeCenter feeCenter = feeCenterListC.stream().filter(e -> e.getFeeCode().equals(item.getFeeCode())
 									&& ObjectUtils.isNotNull(e.getFeeType()) && "1".equals(e.getFeeType()) && "SFK".equals(e.getFeeCode()))
@@ -3556,10 +3626,18 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 									report.setDate(dateFormat.format(feeCenter.getStlDate()));
 								}
 								report.setExchangeRate(feeCenter.getDiscountExrate());
-								report.setDiscountAmount(item.getAmountLoc().multiply(feeCenter.getDiscountExrate()).setScale(2, RoundingMode.HALF_UP));
+								if ("USD".equals(item.getCurCode())) {
+									report.setDiscountAmount(item.getAmountLoc().multiply(feeCenter.getDiscountExrate()).setScale(2, RoundingMode.HALF_UP));
+								} else {
+									report.setDiscountAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								}
 								reportList.add(report);
 								agentFeeItemsReport.setRealityExchangeRate(feeCenter.getStlExrate());
-								agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()).setScale(2, RoundingMode.HALF_UP));
+								if ("USD".equals(item.getCurCode())) {
+									agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()).setScale(2, RoundingMode.HALF_UP));
+								} else {
+									agentFeeItemsReport.setRealityAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								}
 							} else {
 								agentFeeItemsReport.setRealityExchangeRate(null);
 								agentFeeItemsReport.setRealityAmount(null);
@@ -3625,7 +3703,11 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 						}
 						agentFeeItemsReport.setWkAmountUsd(item.getAmountLoc());
 						agentFeeItemsReport.setExchangeRate(item.getExrate());
-						agentFeeItemsReport.setAmount(agentFeeItemsReport.getWkAmountUsd().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
+						if ("USD".equals(item.getCurCode())) {
+							agentFeeItemsReport.setAmount(agentFeeItemsReport.getWkAmountUsd().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
+						} else {
+							agentFeeItemsReport.setAmount(agentFeeItemsReport.getWkAmountUsd().setScale(2, RoundingMode.HALF_UP));
+						}
 						if (!feeCenterListC.isEmpty()) {
 							FeeCenter feeCenter = feeCenterListC.stream().filter(e -> e.getFeeCode().equals(item.getFeeCode())
 									&& ObjectUtils.isNotNull(e.getFeeType()) && "2".equals(e.getFeeType()) && "WK".equals(e.getFeeCode()))
@@ -3636,10 +3718,18 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 									report.setDate(dateFormat.format(feeCenter.getStlDate()));
 								}
 								report.setExchangeRate(feeCenter.getDiscountExrate());
-								report.setDiscountAmount(item.getAmountLoc().multiply(feeCenter.getDiscountExrate()).setScale(2, RoundingMode.HALF_UP));
+								if ("USD".equals(item.getCurCode())) {
+									report.setDiscountAmount(item.getAmountLoc().multiply(feeCenter.getDiscountExrate()).setScale(2, RoundingMode.HALF_UP));
+								} else {
+									report.setDiscountAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								}
 								reportList.add(report);
 								agentFeeItemsReport.setRealityExchangeRate(feeCenter.getStlExrate());
-								agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()).setScale(2, RoundingMode.HALF_UP));
+								if ("USD".equals(item.getCurCode())) {
+									agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()).setScale(2, RoundingMode.HALF_UP));
+								} else {
+									agentFeeItemsReport.setRealityAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								}
 							} else {
 								agentFeeItemsReport.setRealityExchangeRate(null);
 								agentFeeItemsReport.setRealityAmount(null);
@@ -3871,7 +3961,11 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 						}
 						agentFeeItemsReport.setSkAmountUsd(item.getAmountLoc());
 						agentFeeItemsReport.setExchangeRate(item.getExrate());
-						agentFeeItemsReport.setAmount(item.getAmountLoc().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
+						if ("USD".equals(item.getCurCode())) {
+							agentFeeItemsReport.setAmount(item.getAmountLoc().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
+						} else {
+							agentFeeItemsReport.setAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+						}
 						if (!feeCenterListC.isEmpty()) {
 							FeeCenter feeCenter = feeCenterListC.stream().filter(e -> e.getFeeCode().equals(item.getFeeCode())
 									&& ObjectUtils.isNotNull(e.getFeeType()) && "1".equals(e.getFeeType()) && "SFK".equals(e.getFeeCode()))
@@ -3882,10 +3976,18 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 									report.setDate(dateFormat.format(feeCenter.getStlDate()));
 								}
 								report.setExchangeRate(feeCenter.getDiscountExrate());
-								report.setDiscountAmount(item.getAmountLoc().multiply(feeCenter.getDiscountExrate()).setScale(2, RoundingMode.HALF_UP));
+								if ("USD".equals(item.getCurCode())) {
+									report.setDiscountAmount(item.getAmountLoc().multiply(feeCenter.getDiscountExrate()).setScale(2, RoundingMode.HALF_UP));
+								} else {
+									report.setDiscountAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								}
 								reportList.add(report);
 								agentFeeItemsReport.setRealityExchangeRate(feeCenter.getStlExrate());
-								agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()).setScale(2, RoundingMode.HALF_UP));
+								if ("USD".equals(item.getCurCode())) {
+									agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()).setScale(2, RoundingMode.HALF_UP));
+								} else {
+									agentFeeItemsReport.setRealityAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								}
 							} else {
 								agentFeeItemsReport.setRealityExchangeRate(null);
 								agentFeeItemsReport.setRealityAmount(null);
@@ -3950,7 +4052,11 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 						}
 						agentFeeItemsReport.setWkAmountUsd(item.getAmountLoc());
 						agentFeeItemsReport.setExchangeRate(item.getExrate());
-						agentFeeItemsReport.setAmount(agentFeeItemsReport.getWkAmountUsd().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
+						if ("USD".equals(item.getCurCode())) {
+							agentFeeItemsReport.setAmount(agentFeeItemsReport.getWkAmountUsd().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
+						} else {
+							agentFeeItemsReport.setAmount(agentFeeItemsReport.getWkAmountUsd().setScale(2, RoundingMode.HALF_UP));
+						}
 						if (!feeCenterListC.isEmpty()) {
 							FeeCenter feeCenter = feeCenterListC.stream().filter(e -> e.getFeeCode().equals(item.getFeeCode())
 									&& ObjectUtils.isNotNull(e.getFeeType()) && "2".equals(e.getFeeType()) && "WK".equals(e.getFeeCode()))
@@ -3961,10 +4067,18 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 									report.setDate(dateFormat.format(feeCenter.getStlDate()));
 								}
 								report.setExchangeRate(feeCenter.getDiscountExrate());
-								report.setDiscountAmount(item.getAmountLoc().multiply(feeCenter.getDiscountExrate()).setScale(2, RoundingMode.HALF_UP));
+								if ("USD".equals(item.getCurCode())) {
+									report.setDiscountAmount(item.getAmountLoc().multiply(feeCenter.getDiscountExrate()).setScale(2, RoundingMode.HALF_UP));
+								} else {
+									report.setDiscountAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								}
 								reportList.add(report);
 								agentFeeItemsReport.setRealityExchangeRate(feeCenter.getStlExrate());
-								agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()).setScale(2, RoundingMode.HALF_UP));
+								if ("USD".equals(item.getCurCode())) {
+									agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()).setScale(2, RoundingMode.HALF_UP));
+								} else {
+									agentFeeItemsReport.setRealityAmount(item.getAmountLoc().setScale(2, RoundingMode.HALF_UP));
+								}
 							} else {
 								agentFeeItemsReport.setRealityExchangeRate(null);
 								agentFeeItemsReport.setRealityAmount(null);
@@ -4397,7 +4511,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				invoicing.setInvoicingItemList(invoicingItemList.isEmpty() ? new ArrayList<>() : invoicingItemList);
 				if (!invoicingItemList.isEmpty()) {
 					AgentItems agentItems = agentItemsService.getById(invoicingItemList.get(0).getSrcId());
-					if (agentItems != null){
+					if (agentItems != null) {
 						Agent agent = baseMapper.selectById(agentItems.getPid());
 						if (agent != null) {
 							invoicing.setEta(agent.getContractDate());
@@ -4421,7 +4535,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 									.reduce(BigDecimal.ZERO, BigDecimal::add));
 								invoicing.setOtherAmount(feeCenterList.stream().filter(e -> !"GS,ZNJ,ZZS".contains(e.getFeeCode())).map(FeeCenter::getAmount)
 									.reduce(BigDecimal.ZERO, BigDecimal::add));
-								invoicing.setAmountTotal(invoicing.getTariff().add(invoicing.getLateFee()).add(invoicing.getValueAddedTax())
+								invoicing.setAmountTotal(invoicing.getAmount().add(invoicing.getTariff()).add(invoicing.getLateFee()).add(invoicing.getValueAddedTax())
 									.add(invoicing.getOtherAmount()));
 							}
 						}

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

@@ -125,7 +125,7 @@ public class InvoicingServiceImpl extends ServiceImpl<InvoicingMapper, Invoicing
 				}
 			}
 			invoicingItemService.saveOrUpdateBatch(invoicing.getInvoicingItemList());
-			invoicing.setInvoiceAmount(invoicing.getInvoicingItemList().stream().map(InvoicingItem::getAmount)
+			invoicing.setInvoiceAmount(invoicing.getInvoicingItemList().stream().map(InvoicingItem::getThisAmount)
 				.reduce(BigDecimal.ZERO, BigDecimal::add));
 		}
 		return R.data(invoicing);

+ 18 - 5
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/PayableStorageFeesServiceImpl.java

@@ -587,12 +587,12 @@ public class PayableStorageFeesServiceImpl extends ServiceImpl<PayableStorageFee
 			.eq(PayableStorageFees::getIsDeleted, 0)
 			.eq(PayableStorageFees::getWarehouseId, payableStorageFees.getWarehouseId())
 			.ne(PayableStorageFees::getId, payableStorageFees.getId()));
+		List<PayableStorageFeesItems> itemsList = new ArrayList<>();
 		if (!lastFeesList.isEmpty()) {
-			for (PayableStorageFees item : lastFeesList) {
-				if (payableStorageFees.getChargingEndDate().compareTo(item.getChargingEndDate()) < 0) {
-					throw new RuntimeException("撤销失败,请按仓储费计费截止时间操作");
-				}
-			}
+			itemsList = payableStorageFeesItemsService.list(new LambdaQueryWrapper<PayableStorageFeesItems>()
+				.eq(PayableStorageFeesItems::getTenantId, AuthUtil.getTenantId())
+				.eq(PayableStorageFeesItems::getIsDeleted, 0)
+				.in(PayableStorageFeesItems::getPid, lastFeesList.stream().map(PayableStorageFees::getId).distinct().collect(Collectors.toList())));
 		}
 		if (payableStorageFees.getStorageFeesItemsList().isEmpty()) {
 			throw new RuntimeException("明细不能为空");
@@ -614,6 +614,19 @@ public class PayableStorageFeesServiceImpl extends ServiceImpl<PayableStorageFee
 		}
 		List<InOutStorage> inOutStorageListNew = new ArrayList<>();
 		for (PayableStorageFeesItems item : payableStorageFees.getStorageFeesItemsList()) {
+			if (!itemsList.isEmpty()) {
+				List<PayableStorageFeesItems> feesItemsList = itemsList.stream().filter(e -> e.getContractNumber().equals(item.getContractNumber()))
+					.collect(Collectors.toList());
+				if (!feesItemsList.isEmpty()) {
+					List<Long> pidList = feesItemsList.stream().map(PayableStorageFeesItems::getPid).distinct().collect(Collectors.toList());
+					List<PayableStorageFees> payableStorageFeesList = lastFeesList.stream().filter(e -> pidList.contains(e.getId())).collect(Collectors.toList());
+					for (PayableStorageFees feesItem : payableStorageFeesList) {
+						if (payableStorageFees.getChargingEndDate().compareTo(feesItem.getChargingEndDate()) < 0) {
+							throw new RuntimeException("撤销失败,请按仓储费计费截止时间操作");
+						}
+					}
+				}
+			}
 			InOutStorage inOutStorage = inOutStorageList.stream().filter(e -> e.getId().equals(item.getItemId())).findFirst().orElse(null);
 			if (inOutStorage != null) {
 				if (item.getChargingStartDate().compareTo(inOutStorage.getStorageDate()) > 0) {