Browse Source

Merge remote-tracking branch 'origin/dev' into dev

liyuan 8 months ago
parent
commit
8d44518d4d

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

@@ -5256,7 +5256,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 							item.setAmountDr(amountDr);
 							item.setAmountCr(amountCr);
 							item.setAmountDrUsd(amountDrUsd);
-							item.setAmountDrUsd(amountCrUsd);
+							item.setAmountCrUsd(amountCrUsd);
 							item.setAmountDrLoc(amountDr.add(ibCurrencyService.converterCny(MagicValues.USD, amountDrUsd, MagicValues.D, "1")));
 							item.setAmountCrLoc(amountCr.add(ibCurrencyService.converterCny(MagicValues.USD, amountCrUsd, MagicValues.C, "1")));
 							item.setAmountProfitUpdate(amountDr.subtract(amountCr));
@@ -6178,7 +6178,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 							item.setAmountDr(amountDr);
 							item.setAmountCr(amountCr);
 							item.setAmountDrUsd(amountDrUsd);
-							item.setAmountDrUsd(amountCrUsd);
+							item.setAmountCrUsd(amountCrUsd);
 							item.setAmountDrLoc(amountDr.add(ibCurrencyService.converterCny(MagicValues.USD, amountDrUsd, MagicValues.D, "1")));
 							item.setAmountCrLoc(amountCr.add(ibCurrencyService.converterCny(MagicValues.USD, amountCrUsd, MagicValues.C, "1")));
 							item.setAmountProfitUpdate(amountDr.subtract(amountCr));

+ 6 - 2
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java

@@ -348,8 +348,12 @@ public class FinAccBillsController extends BladeController {
 		List<FinAccBillsVO> list = finAccBillsService.listAccBill(listAccBillVO);
 		for (FinAccBillsVO item : list) {
 			item.setQuantityCntrTypesDescr(item.getQuantityCntrDescr());
-			BigDecimal amount = item.getAppliedAmount().subtract(item.getAppliedAmountStl());
-			item.setAppliedCurrentStlAmount(item.getAmount().subtract(amount).subtract(item.getStlTtlAmount()));
+			if("C".equals(listAccBillVO.getDc())){
+				BigDecimal amount = item.getAppliedAmount().subtract(item.getAppliedAmountStl());
+				item.setAppliedCurrentStlAmount(item.getAmount().subtract(amount).subtract(item.getStlTtlAmount()));
+			}else{
+				item.setAppliedCurrentStlAmount(item.getAmount().subtract(item.getStlTtlAmount()));
+			}
 			item.setAppliedInvoiceCurrentStlAmount(item.getAmount().subtract(item.getStlTtlAmount()));
 			item.setReconciliationCurrentAmount(item.getAmount().subtract(item.getReconciliationAmount()));
 			BigDecimal invoice = item.getAppliedInvoiceAmount().subtract(item.getAppliedInvoiceAmountStl());

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

@@ -20,7 +20,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -146,17 +145,21 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 			if (1 == item.getAccStatus()) {
 				throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单");
 			}
-			if ("1".equals(status)){
+			boolean amountStatus = true;
+			if (new BigDecimal("0.00").compareTo(item.getAmount()) > 0) {
+				amountStatus = false;
+			}
+			if ("1".equals(status)) {
 				if (ObjectUtils.isNotNull(item.getPid()) && ObjectUtils.isNotNull(item.getCorpId()) &&
 					ObjectUtils.isNotNull(item.getDc()) && ObjectUtils.isNotNull(item.getElementsId()) && ObjectUtils.isNotNull(item.getCurCode())) {
-					item.setBillKey(item.getPid() + "-" + item.getCorpId() + "-" + item.getDc() + "-" + item.getElementsCode() + "-" + item.getCurCode());
+					item.setBillKey(item.getPid() + "-" + item.getCorpId() + "-" + item.getDc() + "-" + item.getElementsCode() + "-" + item.getCurCode() + "-" + amountStatus);
 				} else {
 					throw new RuntimeException("单据号、单位、费用类型、核算要素不能为空");
 				}
-			}else{
+			} else {
 				if (ObjectUtils.isNotNull(item.getPid()) && ObjectUtils.isNotNull(item.getCorpId()) &&
 					ObjectUtils.isNotNull(item.getDc()) && ObjectUtils.isNotNull(item.getFeeId()) && ObjectUtils.isNotNull(item.getCurCode())) {
-					item.setBillKey(item.getPid() + "-" + item.getCorpId() + "-" + item.getDc() + "-" + item.getFeeCode() + "-" + item.getCurCode());
+					item.setBillKey(item.getPid() + "-" + item.getCorpId() + "-" + item.getDc() + "-" + item.getFeeCode() + "-" + item.getCurCode() + "-" + amountStatus);
 				} else {
 					throw new RuntimeException("单据号、单位、费用类型、费用名称不能为空");
 				}
@@ -457,7 +460,7 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 	@Override
 	public List<FinAccBillsVO> listAccBill(ListAccBillVO finAccBills) {
 		String whetherPostIdOpen = sysClient.getParamService("whether.postId.open");
-		if (ObjectUtils.isNotNull(whetherPostIdOpen) && "1".equals(whetherPostIdOpen)){
+		if (ObjectUtils.isNotNull(whetherPostIdOpen) && "1".equals(whetherPostIdOpen)) {
 			if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("财务")) {
 				finAccBills.setPostId(AuthUtil.getPostId());
 			}

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

@@ -48,7 +48,6 @@ import org.springblade.los.finance.invoices.service.IFinInvoiceItemDetailService
 import org.springblade.los.finance.invoices.service.IFinInvoicesItemsService;
 import org.springblade.los.finance.invoices.service.IFinInvoicesService;
 import org.springblade.los.finance.invoices.vo.FinInvoicesVO;
-import org.springblade.los.finance.stl.entity.FinStlBillsItems;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -316,36 +315,40 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				if ("CNY".equals(item.getCurCode())) {
 					if ("C".equals(finAccBills.getAccountDc())) {
 						if (ObjectUtils.isNull(item.getApplySrcId())) {
-							if (item.getCurrentAmount().compareTo(finAccBills.getAmountCrLoc().subtract(finAccBills.getAppliedInvoiceAmount()).subtract(finAccBills.getUninvoicedAmount())) > 0) {
+							if (item.getCurrentAmount().abs().compareTo(finAccBills.getAmountCrLoc().abs()
+								.subtract((finAccBills.getAppliedInvoiceAmount().abs().subtract(finAccBills.getAppliedInvoiceAmountStl().abs()))).subtract(finAccBills.getUninvoicedAmount().abs())) > 0) {
 								throw new RuntimeException("本次开票金额大于未开票金额");
 							}
 						}
 					} else {
 						if (ObjectUtils.isNull(item.getApplySrcId())) {
-							if (item.getCurrentAmount().compareTo(finAccBills.getAmountDrLoc().subtract(finAccBills.getAppliedInvoiceAmount()).subtract(finAccBills.getUninvoicedAmount())) > 0) {
+							if (item.getCurrentAmount().abs().compareTo(finAccBills.getAmountDrLoc().abs()
+								.subtract((finAccBills.getAppliedInvoiceAmount().abs().subtract(finAccBills.getAppliedInvoiceAmountStl().abs()))).subtract(finAccBills.getUninvoicedAmount().abs())) > 0) {
 								throw new RuntimeException("本次开票金额大于未开票金额");
 							}
 						}
 					}
 					finAccBills.setUninvoicedAmount(finAccBills.getUninvoicedAmount().add(item.getCurrentAmount()));
-					if (ObjectUtils.isNull(item.getApplySrcId())) {
+					if (ObjectUtils.isNotNull(item.getApplySrcId())) {
 						finAccBills.setAppliedInvoiceAmountStl(finAccBills.getAppliedInvoiceAmountStl().add(item.getCurrentAmount()));
 					}
 				} else {
 					if ("C".equals(finAccBills.getAccountDc())) {
 						if (ObjectUtils.isNull(item.getApplySrcId())) {
-							if (item.getCurrentAmount().compareTo(finAccBills.getAmountCrLoc().subtract(finAccBills.getAppliedInvoiceAmountUsd()).subtract(finAccBills.getUninvoicedAmountUsd())) > 0) {
+							if (item.getCurrentAmount().abs().compareTo(finAccBills.getAmountCrLoc().abs()
+								.subtract((finAccBills.getAppliedInvoiceAmountUsd().abs().subtract(finAccBills.getAppliedInvoiceAmountStlUsd().abs()))).subtract(finAccBills.getUninvoicedAmountUsd().abs())) > 0) {
 								throw new RuntimeException("本次开票金额大于未开票金额");
 							}
 						}
 					} else {
 						if (ObjectUtils.isNull(item.getApplySrcId())) {
-							if (item.getCurrentAmount().compareTo(finAccBills.getAmountDrLoc().subtract(finAccBills.getAppliedInvoiceAmountUsd()).subtract(finAccBills.getUninvoicedAmountUsd())) > 0) {
+							if (item.getCurrentAmount().abs().compareTo(finAccBills.getAmountDrLoc().abs()
+								.subtract((finAccBills.getAppliedInvoiceAmountUsd().abs().subtract(finAccBills.getAppliedInvoiceAmountStlUsd().abs()))).subtract(finAccBills.getUninvoicedAmountUsd().abs())) > 0) {
 								throw new RuntimeException("本次开票金额大于未开票金额");
 							}
 						}
 					}
-					if (ObjectUtils.isNull(item.getApplySrcId())) {
+					if (ObjectUtils.isNotNull(item.getApplySrcId())) {
 						finAccBills.setAppliedInvoiceAmountStlUsd(finAccBills.getAppliedInvoiceAmountStlUsd().add(item.getCurrentAmount()));
 					}
 					finAccBills.setUninvoicedAmountUsd(finAccBills.getUninvoicedAmountUsd().add(item.getCurrentAmount()));
@@ -355,7 +358,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 					.in(FeeCenter::getAccBillId, finAccBills.getId())
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 					.eq(FeeCenter::getAccStatus, 1)
-					.apply("amount > uninvoiced_amount")
+					.apply("IF( amount < 0, amount < uninvoiced_amount, amount > uninvoiced_amount )")
 					.eq(FeeCenter::getIsDeleted, 0));
 				BigDecimal currentStlAmount = item.getCurrentAmount();
 				for (FeeCenter feeCenter : feeCenters) {
@@ -374,17 +377,17 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 					feeCenter.setInvoiceAmountLoc(detail.getAmountLoc());
 					feeCenter.setInvoiceById(detail.getCreateUser());
 					feeCenter.setInvoiceByName(detail.getCreateUserName());
-					if (feeCenter.getAmount().subtract(feeCenter.getUninvoicedAmount()).compareTo(currentStlAmount) > 0) {
+					if (feeCenter.getAmount().abs().subtract(feeCenter.getUninvoicedAmount().abs()).compareTo(currentStlAmount.abs()) > 0) {
 						if (ObjectUtils.isNotNull(item.getApplySrcId())) {
 							feeCenter.setAppliedInvoiceAmountStl(feeCenter.getAppliedInvoiceAmountStl().add(currentStlAmount));
 						}
 						feeCenter.setUninvoicedAmount(feeCenter.getUninvoicedAmount().add(currentStlAmount));
 						currentStlAmount = new BigDecimal("0.00");
-					} else if (feeCenter.getAmount().subtract(feeCenter.getUninvoicedAmount()).compareTo(currentStlAmount) == 0) {
+					} else if (feeCenter.getAmount().abs().subtract(feeCenter.getUninvoicedAmount().abs()).compareTo(currentStlAmount.abs()) == 0) {
 						if (ObjectUtils.isNotNull(item.getApplySrcId())) {
-							feeCenter.setAppliedInvoiceAmountStl(feeCenter.getAmount());
+							feeCenter.setAppliedInvoiceAmountStl(feeCenter.getAppliedInvoiceAmountStl().add(currentStlAmount));
 						}
-						feeCenter.setUninvoicedAmount(feeCenter.getAmount());
+						feeCenter.setUninvoicedAmount(feeCenter.getUninvoicedAmount().add(currentStlAmount));
 						currentStlAmount = new BigDecimal("0.00");
 					} else {
 						if (ObjectUtils.isNotNull(item.getApplySrcId())) {
@@ -407,7 +410,17 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 					item.setGenerateInvoices("1");
 				}
 				if (!finInvoicesItemsList.isEmpty()) {
-					FinInvoices finInvoices1 = baseMapper.selectById(finInvoicesItemsList.get(0).getPid());
+					List<Long> pidList = finInvoicesItemsList.stream().map(FinInvoicesItems::getPid).distinct().collect(Collectors.toList());
+					List<FinInvoices> finInvoicesList = baseMapper.selectList(new LambdaQueryWrapper<FinInvoices>()
+						.eq(FinInvoices::getTenantId, AuthUtil.getTenantId())
+						.eq(FinInvoices::getIsDeleted, 0)
+						.in(FinInvoices::getId, pidList));
+					for (FinInvoices item : finInvoicesList){
+						item.setBillStatus("1");
+						baseMapper.updateById(item);
+					}
+					finInvoicesItemsService.saveOrUpdateBatch(finInvoicesItemsList);
+					/*FinInvoices finInvoices1 = baseMapper.selectById(finInvoicesItemsList.get(0).getPid());
 					List<FinInvoicesItems> finInvoicesItemsList1 = finInvoicesItemsService.list(new LambdaQueryWrapper<FinInvoicesItems>()
 						.eq(FinInvoicesItems::getTenantId, AuthUtil.getTenantId())
 						.eq(FinInvoicesItems::getIsDeleted, 0)
@@ -416,13 +429,12 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 					if (finInvoicesItemsList.size() == finInvoicesItemsList1.size()) {
 						finInvoices1.setBillStatus("1");
 						baseMapper.updateById(finInvoices1);
-					}
-					finInvoicesItemsService.saveOrUpdateBatch(finInvoicesItemsList);
+					}*/
 				}
 			}
 			feeCenterService.saveOrUpdateBatch(feeCenterList);
 			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
-			updateBillsStatus(finInvoices.getFinInvoicesItemsList(),feeCenterList);
+			updateBillsStatus(finInvoices.getFinInvoicesItemsList(), feeCenterList);
 		} else {
 			throw new RuntimeException("请选择明细");
 		}
@@ -535,7 +547,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 		}
 	}*/
 
-	private void updateBillsStatus(List<FinInvoicesItems> finStlBillsItemsList,  List<FeeCenter> feeCenters) {
+	private void updateBillsStatus(List<FinInvoicesItems> finStlBillsItemsList, List<FeeCenter> feeCenters) {
 		String billNoHYD = finStlBillsItemsList.stream()
 			.filter(e -> ("SE".equals(e.getBusinessType()) || "SI".equals(e.getBusinessType()))
 				&& "D".equals(e.getDc())).map(FinInvoicesItems::getBillNo)
@@ -782,30 +794,30 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				finAccBills.setUpdateUserName(AuthUtil.getUserName());
 				if ("CNY".equals(item.getCurCode())) {
 					if ("C".equals(finAccBills.getAccountDc())) {
-						if (item.getCurrentAmount().compareTo(finAccBills.getUninvoicedAmount()) > 0) {
+						if (item.getCurrentAmount().abs().compareTo(finAccBills.getUninvoicedAmount().abs()) > 0) {
 							throw new RuntimeException("本次开票金额大于已开票金额");
 						}
 					} else {
-						if (item.getCurrentAmount().compareTo(finAccBills.getUninvoicedAmount()) > 0) {
+						if (item.getCurrentAmount().abs().compareTo(finAccBills.getUninvoicedAmount().abs()) > 0) {
 							throw new RuntimeException("本次开票金额大于已开票金额");
 						}
 					}
-					if (ObjectUtils.isNull(item.getApplySrcId())) {
+					if (ObjectUtils.isNotNull(item.getApplySrcId())) {
 						finAccBills.setAppliedInvoiceAmountStl(finAccBills.getAppliedInvoiceAmountStl().subtract(item.getCurrentAmount()));
 					}
 					finAccBills.setUninvoicedAmount(finAccBills.getUninvoicedAmount().subtract(item.getCurrentAmount()));
 				} else {
 					if ("C".equals(finAccBills.getAccountDc())) {
-						if (item.getCurrentAmount().compareTo(finAccBills.getUninvoicedAmountUsd()) > 0) {
+						if (item.getCurrentAmount().abs().compareTo(finAccBills.getUninvoicedAmountUsd().abs()) > 0) {
 							throw new RuntimeException("本次开票金额大于已开票金额");
 						}
 					} else {
-						if (item.getCurrentAmount().compareTo(finAccBills.getUninvoicedAmountUsd()) > 0) {
+						if (item.getCurrentAmount().abs().compareTo(finAccBills.getUninvoicedAmountUsd().abs()) > 0) {
 							throw new RuntimeException("本次开票金额大于已开票金额");
 						}
 					}
-					if (ObjectUtils.isNull(item.getApplySrcId())) {
-						finAccBills.setAppliedInvoiceAmountStlUsd(finAccBills.getAppliedInvoiceAmountStl().subtract(item.getCurrentAmount()));
+					if (ObjectUtils.isNotNull(item.getApplySrcId())) {
+						finAccBills.setAppliedInvoiceAmountStlUsd(finAccBills.getAppliedInvoiceAmountStlUsd().subtract(item.getCurrentAmount()));
 					}
 					finAccBills.setUninvoicedAmountUsd(finAccBills.getUninvoicedAmountUsd().subtract(item.getCurrentAmount()));
 				}
@@ -833,13 +845,13 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 					feeCenter.setInvoiceAmountLoc(new BigDecimal("0.00"));
 					feeCenter.setInvoiceById(0L);
 					feeCenter.setInvoiceByName("");
-					if (feeCenter.getUninvoicedAmount().compareTo(currentStlAmount) > 0) {
+					if (feeCenter.getUninvoicedAmount().abs().compareTo(currentStlAmount.abs()) > 0) {
 						if (ObjectUtils.isNotNull(item.getApplySrcId())) {
 							feeCenter.setAppliedInvoiceAmountStl(feeCenter.getAppliedInvoiceAmountStl().subtract(currentStlAmount));
 						}
 						feeCenter.setUninvoicedAmount(feeCenter.getUninvoicedAmount().subtract(currentStlAmount));
 						currentStlAmount = new BigDecimal("0.00");
-					} else if (feeCenter.getUninvoicedAmount().compareTo(currentStlAmount) == 0) {
+					} else if (feeCenter.getUninvoicedAmount().abs().compareTo(currentStlAmount.abs()) == 0) {
 						if (ObjectUtils.isNotNull(item.getApplySrcId())) {
 							feeCenter.setAppliedInvoiceAmountStl(feeCenter.getAppliedInvoiceAmountStl().subtract(currentStlAmount));
 						}
@@ -874,7 +886,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 			}
 			feeCenterService.saveOrUpdateBatch(feeCenterList);
 			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
-			updateBillsStatus(finInvoices.getFinInvoicesItemsList(),feeCenterList);
+			updateBillsStatus(finInvoices.getFinInvoicesItemsList(), feeCenterList);
 		} else {
 			throw new RuntimeException("请选择明细");
 		}
@@ -907,11 +919,11 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				if ("CNY".equals(item.getCurCode())) {
 					BigDecimal amount = finAccBills.getAppliedInvoiceAmount().subtract(finAccBills.getAppliedInvoiceAmountStl());
 					if ("C".equals(finAccBills.getAccountDc())) {
-						if (item.getCurrentAmount().compareTo(finAccBills.getAmountCr().subtract(amount)) > 0) {
+						if (item.getCurrentAmount().abs().compareTo(finAccBills.getAmountCr().abs().subtract(amount.abs())) > 0) {
 							throw new RuntimeException("本次申请金额大于未申请金额");
 						}
 					} else {
-						if (item.getCurrentAmount().compareTo(finAccBills.getAmountDr().subtract(amount)) > 0) {
+						if (item.getCurrentAmount().abs().compareTo(finAccBills.getAmountDr().abs().subtract(amount.abs())) > 0) {
 							throw new RuntimeException("本次申请金额大于未申请金额");
 						}
 					}
@@ -919,11 +931,11 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				} else {
 					BigDecimal amount = finAccBills.getAppliedInvoiceAmountUsd().subtract(finAccBills.getAppliedInvoiceAmountStlUsd());
 					if ("C".equals(finAccBills.getAccountDc())) {
-						if (item.getCurrentAmount().compareTo(finAccBills.getAmountCrUsd().subtract(amount)) > 0) {
+						if (item.getCurrentAmount().abs().compareTo(finAccBills.getAmountCrUsd().abs().subtract(amount.abs())) > 0) {
 							throw new RuntimeException("本次申请金额大于未申请金额");
 						}
 					} else {
-						if (item.getCurrentAmount().compareTo(finAccBills.getAmountDrUsd().subtract(amount)) > 0) {
+						if (item.getCurrentAmount().abs().compareTo(finAccBills.getAmountDrUsd().abs().subtract(amount.abs())) > 0) {
 							throw new RuntimeException("本次申请金额大于未申请金额");
 						}
 					}
@@ -937,7 +949,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 					.eq(FeeCenter::getIsDeleted, 0)
 					.eq(FeeCenter::getAccBillId, finAccBills.getId())
 					.eq(FeeCenter::getAccStatus, 1)
-					.apply("amount > applied_invoice_amount")
+					.apply("IF( amount < 0, amount < applied_invoice_amount, amount > applied_invoice_amount )")
 					.orderByDesc(FeeCenter::getCreateTime));
 				BigDecimal currentStlAmount = item.getCurrentAmount();
 				for (FeeCenter e : feeCenters) {
@@ -946,15 +958,19 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 					} else {
 						//计算字段null值处理
 						e.setAmount(ObjectUtils.isNotNull(e.getAmount()) ? e.getAmount() : new BigDecimal("0.00"));
-						if (e.getAmount().subtract(e.getAppliedInvoiceAmount()).compareTo(currentStlAmount) > 0) {
+						if (e.getAmount().abs().subtract(e.getAppliedInvoiceAmount().abs()).compareTo(currentStlAmount.abs()) > 0) {
 							e.setAppliedInvoiceAmount(e.getAppliedInvoiceAmount().add(currentStlAmount));
 							currentStlAmount = new BigDecimal("0.00");
-						} else if (e.getAmount().subtract(e.getAppliedInvoiceAmount()).compareTo(currentStlAmount) == 0) {
+						} else if (e.getAmount().abs().subtract(e.getAppliedInvoiceAmount().abs()).compareTo(currentStlAmount.abs()) == 0) {
 							e.setAppliedInvoiceAmount(e.getAppliedInvoiceAmount().add(currentStlAmount));
 							currentStlAmount = new BigDecimal("0.00");
 						} else {
-							currentStlAmount = currentStlAmount.subtract((e.getAmount().subtract(e.getAppliedInvoiceAmount())));
+							/*currentStlAmount = currentStlAmount.subtract(e.getAmount().subtract(e.getAppliedInvoiceAmount()));
 							e.setAppliedInvoiceAmount(e.getAmount());
+*/
+							BigDecimal subAmount = e.getAmount().subtract(e.getAppliedInvoiceAmount().abs());
+							currentStlAmount = currentStlAmount.subtract(subAmount);
+							e.setAppliedAmount(e.getAmount());
 						}
 						feeCenterList.add(e);
 					}
@@ -1001,12 +1017,12 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
 				if ("CNY".equals(item.getCurCode())) {
-					if (item.getCurrentAmount().compareTo(finAccBills.getAppliedInvoiceAmount()) > 0) {
+					if (item.getCurrentAmount().abs().compareTo(finAccBills.getAppliedInvoiceAmount().abs()) > 0) {
 						throw new RuntimeException("本次申请金额大于未申请金额");
 					}
 					finAccBills.setAppliedInvoiceAmount(finAccBills.getAppliedInvoiceAmount().subtract(item.getCurrentAmount()));
 				} else {
-					if (item.getCurrentAmount().compareTo(finAccBills.getAppliedInvoiceAmountUsd()) > 0) {
+					if (item.getCurrentAmount().abs().compareTo(finAccBills.getAppliedInvoiceAmountUsd().abs()) > 0) {
 						throw new RuntimeException("本次申请金额大于未申请金额");
 					}
 					finAccBills.setAppliedInvoiceAmountUsd(finAccBills.getAppliedInvoiceAmountUsd().subtract(item.getCurrentAmount()));
@@ -1027,10 +1043,10 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 					} else {
 						//计算字段null值处理
 						e.setAmount(ObjectUtils.isNotNull(e.getAmount()) ? e.getAmount() : new BigDecimal("0.00"));
-						if (e.getAppliedInvoiceAmount().compareTo(currentStlAmount) > 0) {
+						if (e.getAppliedInvoiceAmount().abs().compareTo(currentStlAmount.abs()) > 0) {
 							e.setAppliedInvoiceAmount(e.getAppliedInvoiceAmount().subtract(currentStlAmount));
 							currentStlAmount = new BigDecimal("0.00");
-						} else if (e.getAppliedInvoiceAmount().compareTo(currentStlAmount) == 0) {
+						} else if (e.getAppliedInvoiceAmount().abs().compareTo(currentStlAmount.abs()) == 0) {
 							e.setAppliedInvoiceAmount(e.getAppliedInvoiceAmount().subtract(currentStlAmount));
 							currentStlAmount = new BigDecimal("0.00");
 						} else {

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

@@ -371,11 +371,11 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					finAccBills.setUpdateTime(new Date());
 					finAccBills.setUpdateUserName(AuthUtil.getUserName());
 					if ("D".equals(finAccBills.getAccountDc())) {
-						if (finAccBills.getAmountDrLoc().compareTo(item.getCurrentStlAmount()) < 0) {
+						if (finAccBills.getAmountDrLoc().abs().compareTo(item.getCurrentStlAmount().abs()) < 0) {
 							throw new RuntimeException("本次对账金额大于账单应收金额");
 						}
 					} else {
-						if (finAccBills.getAmountCrLoc().compareTo(item.getCurrentStlAmount()) < 0) {
+						if (finAccBills.getAmountCrLoc().abs().compareTo(item.getCurrentStlAmount().abs()) < 0) {
 							throw new RuntimeException("本次对账金额大于账单应付金额");
 						}
 					}
@@ -383,30 +383,30 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					if ("CNY".equals(item.getCurCode())) {
 						finAccBills.setReconciliationAmount(finAccBills.getReconciliationAmount().add(item.getCurrentStlAmount()));
 						if ("D".equals(finAccBills.getAccountDc())) {
-							if (finAccBills.getAmountDr().compareTo(finAccBills.getReconciliationAmount()) > 0) {
+							if (finAccBills.getAmountDr().abs().compareTo(finAccBills.getReconciliationAmount().abs()) > 0) {
 								isChecked = 1;
-							} else if (finAccBills.getAmountDr().compareTo(finAccBills.getReconciliationAmount()) == 0) {
+							} else if (finAccBills.getAmountDr().abs().compareTo(finAccBills.getReconciliationAmount().abs()) == 0) {
 								isChecked = 2;
 							}
 						} else {
-							if (finAccBills.getAmountCr().compareTo(finAccBills.getReconciliationAmount()) > 0) {
+							if (finAccBills.getAmountCr().abs().compareTo(finAccBills.getReconciliationAmount().abs()) > 0) {
 								isChecked = 1;
-							} else if (finAccBills.getAmountCr().compareTo(finAccBills.getReconciliationAmount()) == 0) {
+							} else if (finAccBills.getAmountCr().abs().compareTo(finAccBills.getReconciliationAmount().abs()) == 0) {
 								isChecked = 2;
 							}
 						}
 					} else {
 						finAccBills.setReconciliationAmountUsd(finAccBills.getReconciliationAmountUsd().add(item.getCurrentStlAmount()));
 						if ("D".equals(finAccBills.getAccountDc())) {
-							if (finAccBills.getAmountDrUsd().compareTo(finAccBills.getReconciliationAmountUsd()) > 0) {
+							if (finAccBills.getAmountDrUsd().abs().compareTo(finAccBills.getReconciliationAmountUsd().abs()) > 0) {
 								isChecked = 1;
-							} else if (finAccBills.getAmountDrUsd().compareTo(finAccBills.getReconciliationAmountUsd()) == 0) {
+							} else if (finAccBills.getAmountDrUsd().abs().compareTo(finAccBills.getReconciliationAmountUsd().abs()) == 0) {
 								isChecked = 2;
 							}
 						} else {
-							if (finAccBills.getAmountCrUsd().compareTo(finAccBills.getReconciliationAmountUsd()) > 0) {
+							if (finAccBills.getAmountCrUsd().abs().compareTo(finAccBills.getReconciliationAmountUsd().abs()) > 0) {
 								isChecked = 1;
-							} else if (finAccBills.getAmountCrUsd().compareTo(finAccBills.getReconciliationAmountUsd()) == 0) {
+							} else if (finAccBills.getAmountCrUsd().abs().compareTo(finAccBills.getReconciliationAmountUsd().abs()) == 0) {
 								isChecked = 2;
 							}
 						}
@@ -418,7 +418,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						.in(FeeCenter::getAccBillId, finAccBills.getId())
 						.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 						.eq(FeeCenter::getAccStatus, 1)
-						.apply("amount > reconciliation_amount")
+						.apply("IF( amount < 0, amount < reconciliation_amount, amount > reconciliation_amount )")
 						.eq(FeeCenter::getIsDeleted, 0));
 					BigDecimal currentStlAmount = item.getCurrentStlAmount();
 					for (FeeCenter feeCenter : feeCenters) {
@@ -432,14 +432,18 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
 							break;
 						} else {
-							if (feeCenter.getAmount().subtract(feeCenter.getReconciliationAmount()).compareTo(currentStlAmount) > 0) {
+							if (feeCenter.getAmount().abs().subtract(feeCenter.getReconciliationAmount().abs()).compareTo(currentStlAmount.abs()) > 0) {
 								feeCenter.setReconciliationAmount(feeCenter.getReconciliationAmount().add(currentStlAmount));
 								currentStlAmount = new BigDecimal("0.00");
-							} else if (feeCenter.getAmount().subtract(feeCenter.getReconciliationAmount()).compareTo(currentStlAmount) == 0) {
+							} else if (feeCenter.getAmount().abs().subtract(feeCenter.getReconciliationAmount().abs()).compareTo(currentStlAmount.abs()) == 0) {
 								feeCenter.setReconciliationAmount(feeCenter.getReconciliationAmount().add(currentStlAmount));
 								currentStlAmount = new BigDecimal("0.00");
 							} else {
-								currentStlAmount = currentStlAmount.subtract((feeCenter.getAmount().subtract(feeCenter.getReconciliationAmount())));
+								if (new BigDecimal("0.00").compareTo(currentStlAmount) > 0){
+									currentStlAmount = currentStlAmount.add((feeCenter.getAmount().abs().subtract(feeCenter.getReconciliationAmount().abs())).abs());
+								}else{
+									currentStlAmount = currentStlAmount.subtract((feeCenter.getAmount().subtract(feeCenter.getReconciliationAmount())));
+								}
 								feeCenter.setReconciliationAmount(feeCenter.getAmount());
 							}
 						}
@@ -859,30 +863,30 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					finAccBills.setUpdateUserName(AuthUtil.getUserName());
 					int isChecked = 0;
 					if ("CNY".equals(item.getCurCode())) {
-						if (finAccBills.getReconciliationAmount().compareTo(item.getCurrentStlAmount()) < 0) {
+						if (finAccBills.getReconciliationAmount().abs().compareTo(item.getCurrentStlAmount().abs()) < 0) {
 							throw new RuntimeException("撤销失败,本次对账金额大于已对账金额");
 						}
 						finAccBills.setReconciliationAmount(finAccBills.getReconciliationAmount().subtract(item.getCurrentStlAmount()));
 						if ("D".equals(finAccBills.getAccountDc())) {
-							if (finAccBills.getAmountDr().compareTo(finAccBills.getReconciliationAmount()) > 0) {
+							if (finAccBills.getAmountDr().abs().compareTo(finAccBills.getReconciliationAmount().abs()) > 0) {
 								isChecked = 1;
 							}
 						} else {
-							if (finAccBills.getAmountCr().compareTo(finAccBills.getReconciliationAmount()) > 0) {
+							if (finAccBills.getAmountCr().abs().compareTo(finAccBills.getReconciliationAmount().abs()) > 0) {
 								isChecked = 1;
 							}
 						}
 					} else {
-						if (finAccBills.getReconciliationAmountUsd().compareTo(item.getCurrentStlAmount()) < 0) {
+						if (finAccBills.getReconciliationAmountUsd().abs().compareTo(item.getCurrentStlAmount().abs()) < 0) {
 							throw new RuntimeException("撤销失败,本次对账金额大于已对账金额");
 						}
 						finAccBills.setReconciliationAmountUsd(finAccBills.getReconciliationAmountUsd().subtract(item.getCurrentStlAmount()));
 						if ("D".equals(finAccBills.getAccountDc())) {
-							if (finAccBills.getAmountDrUsd().compareTo(finAccBills.getReconciliationAmountUsd()) > 0) {
+							if (finAccBills.getAmountDrUsd().abs().compareTo(finAccBills.getReconciliationAmountUsd().abs()) > 0) {
 								isChecked = 1;
 							}
 						} else {
-							if (finAccBills.getAmountCrUsd().compareTo(finAccBills.getReconciliationAmountUsd()) > 0) {
+							if (finAccBills.getAmountCrUsd().abs().compareTo(finAccBills.getReconciliationAmountUsd().abs()) > 0) {
 								isChecked = 1;
 							}
 						}
@@ -907,10 +911,10 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
 							break;
 						} else {
-							if (feeCenter.getReconciliationAmount().compareTo(currentStlAmount) > 0) {
+							if (feeCenter.getReconciliationAmount().abs().compareTo(currentStlAmount.abs()) > 0) {
 								feeCenter.setReconciliationAmount(feeCenter.getReconciliationAmount().subtract(currentStlAmount));
 								currentStlAmount = new BigDecimal("0.00");
-							} else if (feeCenter.getReconciliationAmount().compareTo(currentStlAmount) == 0) {
+							} else if (feeCenter.getReconciliationAmount().abs().compareTo(currentStlAmount.abs()) == 0) {
 								feeCenter.setReconciliationAmount(feeCenter.getReconciliationAmount().subtract(currentStlAmount));
 								currentStlAmount = new BigDecimal("0.00");
 							} else {
@@ -1069,8 +1073,8 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				item.setStlTtlAmount(item.getStlTtlAmount().add(item.getCurrentStlAmount().add(item.getCurrentStlDiscount())));
 				item.setUnsettledAmount(item.getAmount().subtract(item.getStlTtlAmount()));
 				if ("D".equals(item.getDc())) {
-					if (finAccBills.getStlAmountDr().compareTo(finAccBills.getAmountDr()) > 0 ||
-						finAccBills.getStlAmountDrUsd().compareTo(finAccBills.getAmountDrUsd()) > 0
+					if (finAccBills.getStlAmountDr().abs().compareTo(finAccBills.getAmountDr().abs()) > 0 ||
+						finAccBills.getStlAmountDrUsd().abs().compareTo(finAccBills.getAmountDrUsd().abs()) > 0
 					) {
 						throw new RuntimeException("结算金额大于账单金额,操作失败");
 					}
@@ -1088,14 +1092,14 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 							finAccBills.setAppliedAmountStlUsd(finAccBills.getAppliedAmountStl().add(item.getCurrentStlAmount()));
 						}
 					}
-					if (finAccBills.getAmountDr().compareTo(finAccBills.getStlAmountDr()) == 0 &&
-						finAccBills.getAmountDrUsd().compareTo(finAccBills.getStlAmountDrUsd()) == 0) {
+					if (finAccBills.getAmountDr().abs().compareTo(finAccBills.getStlAmountDr().abs()) == 0 &&
+						finAccBills.getAmountDrUsd().abs().compareTo(finAccBills.getStlAmountDrUsd().abs()) == 0) {
 						status = true;
 					}
 				}
 				else if ("C".equals(item.getDc())) {
-					if (finAccBills.getStlAmountCr().compareTo(finAccBills.getAmountCr()) > 0 ||
-						finAccBills.getStlAmountCrUsd().compareTo(finAccBills.getAmountCrUsd()) > 0
+					if (finAccBills.getStlAmountCr().abs().compareTo(finAccBills.getAmountCr().abs()) > 0 ||
+						finAccBills.getStlAmountCrUsd().abs().compareTo(finAccBills.getAmountCrUsd().abs()) > 0
 					) {
 						throw new RuntimeException("结算金额大于账单金额,操作失败");
 					}
@@ -1113,8 +1117,8 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 							finAccBills.setAppliedAmountStlUsd(finAccBills.getAppliedAmountStlUsd().add(item.getCurrentStlAmount()));
 						}
 					}
-					if (finAccBills.getAmountCr().compareTo(finAccBills.getStlAmountCr()) == 0 &&
-						finAccBills.getAmountCrUsd().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
+					if (finAccBills.getAmountCr().abs().compareTo(finAccBills.getStlAmountCr().abs()) == 0 &&
+						finAccBills.getAmountCrUsd().abs().compareTo(finAccBills.getStlAmountCrUsd().abs()) == 0) {
 						status = true;
 					}
 				}
@@ -1135,12 +1139,12 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					.eq(FeeCenter::getIsDeleted, 0)
 					.eq(FeeCenter::getAccBillId, finAccBills.getId())
 					.eq(FeeCenter::getAccStatus, 1)
-					.apply("amount > stl_ttl_amount")
+					.apply("IF( amount < 0, amount < stl_ttl_amount, amount > stl_ttl_amount )")
 					.orderByDesc(FeeCenter::getCreateTime));
-				BigDecimal currentStlAmount = item.getCurrentStlAmount().abs();
+				BigDecimal currentStlAmount = item.getCurrentStlAmount();
 				BigDecimal stlTtlAmount = feeCenters.stream().map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 				if (item.getCurrentStlAmount().compareTo(new BigDecimal("0.00")) == 0 ||
-					item.getCurrentStlAmount().compareTo(item.getAmount().subtract(stlTtlAmount)) > 0) {
+					item.getCurrentStlAmount().abs().compareTo(item.getAmount().abs().subtract(stlTtlAmount).abs()) > 0) {
 					throw new RuntimeException("本次结算金额不能为零或大于未结算金额");
 				}
 				for (FeeCenter e : feeCenters) {
@@ -1170,13 +1174,13 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						e.setStlByName(detail.getCreateUserName());
 						if (!ids.isEmpty()) {
 //							if ("D".equals(e.getDc())) {
-							if (e.getAmount().subtract(e.getStlTtlAmount()).compareTo(currentStlAmount) > 0) {
+							if (e.getAmount().abs().subtract(e.getStlTtlAmount().abs()).compareTo(currentStlAmount.abs()) > 0) {
 								e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()).subtract(currentStlAmount));
 								e.setStlTtlAmount(e.getAmount().subtract(e.getUnsettledAmount()));
 //								e.setAppliedAmountStl(e.getAmount().subtract(e.getUnsettledAmount()).subtract(e.getAppliedAmountStl()));
 								e.setAppliedAmountStl(e.getAppliedAmountStl().add(currentStlAmount));
 								currentStlAmount = new BigDecimal("0.00");
-							} else if (e.getAmount().subtract(e.getStlTtlAmount()).compareTo(currentStlAmount) == 0) {
+							} else if (e.getAmount().abs().subtract(e.getStlTtlAmount().abs()).compareTo(currentStlAmount.abs()) == 0) {
 								e.setUnsettledAmount(new BigDecimal("0.00"));
 								e.setStlTtlAmount(e.getAmount().subtract(e.getUnsettledAmount()));
 //								e.setAppliedAmountStl(e.getAmount().subtract(e.getUnsettledAmount()).subtract(e.getAppliedAmountStl()));
@@ -1208,11 +1212,11 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 								}
 							}*/
 						} else {
-							if (e.getAmount().subtract(e.getStlTtlAmount()).compareTo(currentStlAmount) > 0) {
+							if (e.getAmount().abs().subtract(e.getStlTtlAmount().abs()).compareTo(currentStlAmount.abs()) > 0) {
 								e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()).subtract(currentStlAmount));
 								e.setStlTtlAmount(e.getAmount().subtract(e.getUnsettledAmount()));
 								currentStlAmount = new BigDecimal("0.00");
-							} else if (e.getAmount().subtract(e.getStlTtlAmount()).compareTo(currentStlAmount) == 0) {
+							} else if (e.getAmount().abs().subtract(e.getStlTtlAmount().abs()).compareTo(currentStlAmount.abs()) == 0) {
 								e.setUnsettledAmount(new BigDecimal("0.00"));
 								e.setStlTtlAmount(e.getAmount().subtract(e.getUnsettledAmount()));
 								currentStlAmount = new BigDecimal("0.00");
@@ -1394,12 +1398,12 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					if (finAccBills.getAmountDr().compareTo(new BigDecimal("0.00")) == 0 &&
 						finAccBills.getAmountDrUsd().compareTo(new BigDecimal("0.00")) == 0) {
 						finAccBills.setIsCleared(0);
-					} else if (finAccBills.getAmountDr().compareTo(new BigDecimal("0.00")) < 0 ||
-						finAccBills.getAmountDrUsd().compareTo(new BigDecimal("0.00")) < 0) {
+					} else if (finAccBills.getAmountDr().abs().compareTo(new BigDecimal("0.00")) < 0 ||
+						finAccBills.getAmountDrUsd().abs().compareTo(new BigDecimal("0.00")) < 0) {
 						throw new RuntimeException("撤销金额大于账单金额,操作失败");
 					} else {
-						if (finAccBills.getAmountDr().compareTo(finAccBills.getStlAmountDr()) == 0 &&
-							finAccBills.getAmountDrUsd().compareTo(finAccBills.getStlAmountDrUsd()) == 0) {
+						if (finAccBills.getAmountDr().abs().compareTo(finAccBills.getStlAmountDr().abs()) == 0 &&
+							finAccBills.getAmountDrUsd().abs().compareTo(finAccBills.getStlAmountDrUsd().abs()) == 0) {
 							status = true;
 						}
 						if (status) {
@@ -1428,12 +1432,12 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					if (finAccBills.getAmountCr().compareTo(new BigDecimal("0.00")) == 0 &&
 						finAccBills.getAmountCrUsd().compareTo(new BigDecimal("0.00")) == 0) {
 						finAccBills.setIsCleared(0);
-					} else if (finAccBills.getAmountCr().compareTo(new BigDecimal("0.00")) < 0 ||
-						finAccBills.getAmountCrUsd().compareTo(new BigDecimal("0.00")) < 0) {
+					} else if (finAccBills.getAmountCr().abs().compareTo(new BigDecimal("0.00")) < 0 ||
+						finAccBills.getAmountCrUsd().abs().compareTo(new BigDecimal("0.00")) < 0) {
 						throw new RuntimeException("撤销金额大于账单金额,操作失败");
 					} else {
-						if (finAccBills.getAmountCr().compareTo(finAccBills.getStlAmountCr()) == 0 &&
-							finAccBills.getAmountCrUsd().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
+						if (finAccBills.getAmountCr().abs().compareTo(finAccBills.getStlAmountCr()) == 0 &&
+							finAccBills.getAmountCrUsd().abs().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
 							status = true;
 						}
 						if (status) {
@@ -1458,7 +1462,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					.eq(FeeCenter::getAccStatus, 1)
 					.apply("stl_ttl_amount != 0")
 					.orderByDesc(FeeCenter::getCreateTime));
-				BigDecimal currentStlAmount = item.getCurrentStlAmount().abs();
+				BigDecimal currentStlAmount = item.getCurrentStlAmount();
 				for (FeeCenter e : feeCenters) {
 					if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
 						break;
@@ -1481,15 +1485,15 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						e.setStlById(0L);
 						e.setStlByName("");
 						if (!ids.isEmpty()) {
-							if (e.getStlTtlAmount().compareTo(currentStlAmount) > 0) {
+							if (e.getStlTtlAmount().abs().compareTo(currentStlAmount.abs()) > 0) {
 								e.setStlTtlAmount(e.getStlTtlAmount().subtract(currentStlAmount));
 								e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
 								e.setAppliedAmountStl(e.getAppliedAmountStl().subtract(currentStlAmount));
 								currentStlAmount = new BigDecimal("0.00");
-							} else if (e.getStlTtlAmount().compareTo(currentStlAmount) == 0) {
+							} else if (e.getStlTtlAmount().abs().compareTo(currentStlAmount.abs()) == 0) {
 								e.setStlTtlAmount(new BigDecimal("0.00"));
 								e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
-								e.setAppliedAmountStl(e.getAmount().subtract(e.getUnsettledAmount()).subtract(e.getAppliedAmountStl()));
+								e.setAppliedAmountStl(e.getAmount().subtract(e.getAppliedAmountStl()).subtract(currentStlAmount));
 								currentStlAmount = new BigDecimal("0.00");
 							} else {
 								e.setStlTtlAmount(new BigDecimal("0.00"));
@@ -1498,11 +1502,11 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 								currentStlAmount = currentStlAmount.subtract(e.getAmount());
 							}
 						} else {
-							if (e.getStlTtlAmount().compareTo(currentStlAmount) > 0) {
+							if (e.getStlTtlAmount().abs().compareTo(currentStlAmount.abs()) > 0) {
 								e.setStlTtlAmount(e.getStlTtlAmount().subtract(currentStlAmount));
 								e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
 								currentStlAmount = new BigDecimal("0.00");
-							} else if (e.getStlTtlAmount().compareTo(currentStlAmount) == 0) {
+							} else if (e.getStlTtlAmount().abs().compareTo(currentStlAmount.abs()) == 0) {
 								e.setStlTtlAmount(new BigDecimal("0.00"));
 								e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
 								currentStlAmount = new BigDecimal("0.00");
@@ -1820,25 +1824,25 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
 				if ("CNY".equals(item.getCurCode())) {
-					BigDecimal amount = finAccBills.getAppliedAmount().subtract(finAccBills.getAppliedAmountStl());
+					BigDecimal amount = finAccBills.getAppliedAmount().subtract(finAccBills.getAppliedAmountStl().abs());
 					if ("D".equals(finAccBills.getAccountDc())) {
-						if (item.getCurrentStlAmount().compareTo(finAccBills.getAmountDrLoc().subtract(amount).subtract(finAccBills.getStlAmountDrLoc())) > 0) {
+						if (item.getCurrentStlAmount().abs().compareTo(finAccBills.getAmountDrLoc().abs().subtract(amount.abs()).subtract(finAccBills.getStlAmountDrLoc().abs())) > 0) {
 							throw new RuntimeException("本次申请金额大于未申请金额");
 						}
 					} else {
-						if (item.getCurrentStlAmount().compareTo(finAccBills.getAmountCrLoc().subtract(amount).subtract(finAccBills.getStlAmountCrLoc())) > 0) {
+						if (item.getCurrentStlAmount().abs().compareTo(finAccBills.getAmountCrLoc().abs().subtract(amount.abs()).subtract(finAccBills.getStlAmountCrLoc().abs())) > 0) {
 							throw new RuntimeException("本次申请金额大于未申请金额");
 						}
 					}
 					finAccBills.setAppliedAmount(finAccBills.getAppliedAmount().add(item.getCurrentStlAmount()));
 				} else {
-					BigDecimal amount = finAccBills.getAppliedAmountUsd().subtract(finAccBills.getAppliedAmountStlUsd());
+					BigDecimal amount = finAccBills.getAppliedAmountUsd().subtract(finAccBills.getAppliedAmountStlUsd().abs());
 					if ("D".equals(finAccBills.getAccountDc())) {
-						if (item.getCurrentStlAmount().compareTo(finAccBills.getAmountDrLoc().subtract(amount).subtract(finAccBills.getStlAmountDrLoc())) > 0) {
+						if (item.getCurrentStlAmount().abs().compareTo(finAccBills.getAmountDrLoc().abs().subtract(amount.abs()).subtract(finAccBills.getStlAmountDrLoc().abs())) > 0) {
 							throw new RuntimeException("本次申请金额大于未申请金额");
 						}
 					} else {
-						if (item.getCurrentStlAmount().compareTo(finAccBills.getAmountCrLoc().subtract(amount).subtract(finAccBills.getStlAmountCrLoc())) > 0) {
+						if (item.getCurrentStlAmount().abs().compareTo(finAccBills.getAmountCrLoc().abs().subtract(amount.abs()).subtract(finAccBills.getStlAmountCrLoc().abs())) > 0) {
 							throw new RuntimeException("本次申请金额大于未申请金额");
 						}
 					}
@@ -1856,7 +1860,8 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					.eq(FeeCenter::getIsDeleted, 0)
 					.eq(FeeCenter::getAccBillId, finAccBills.getId())
 					.eq(FeeCenter::getAccStatus, 1)
-					.apply("amount > stl_ttl_amount + applied_amount - applied_amount_stl")
+					.apply("IF( amount < 0, abs(amount) > abs(stl_ttl_amount) + abs(applied_amount) - abs(applied_amount_stl)," +
+						" amount > stl_ttl_amount + applied_amount - applied_amount_stl )")
 					.orderByDesc(FeeCenter::getCreateTime));
 				BigDecimal currentStlAmount = item.getCurrentStlAmount();
 				for (FeeCenter e : feeCenters) {
@@ -1867,14 +1872,14 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						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.getAmount().subtract(e.getAppliedAmount()).subtract(e.getStlTtlAmount()).compareTo(currentStlAmount) > 0) {
+						if (e.getAmount().abs().subtract(e.getAppliedAmount().abs()).subtract(e.getStlTtlAmount().abs()).compareTo(currentStlAmount.abs()) > 0) {
 							e.setAppliedAmount(e.getAppliedAmount().add(currentStlAmount));
 							currentStlAmount = new BigDecimal("0.00");
-						} else if (e.getAmount().subtract(e.getAppliedAmount()).subtract(e.getStlTtlAmount()).compareTo(currentStlAmount) == 0) {
+						} else if (e.getAmount().abs().subtract(e.getAppliedAmount().abs()).subtract(e.getStlTtlAmount().abs()).compareTo(currentStlAmount.abs()) == 0) {
 							e.setAppliedAmount(e.getAppliedAmount().add(currentStlAmount));
 							currentStlAmount = new BigDecimal("0.00");
 						} else {
-							BigDecimal subAmount = e.getAmount().subtract(e.getAppliedAmount());
+							BigDecimal subAmount = e.getAmount().subtract(e.getAppliedAmount().abs());
 							currentStlAmount = currentStlAmount.subtract(subAmount);
 							e.setAppliedAmount(e.getAmount());
 						}
@@ -1920,12 +1925,12 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
 				if ("CNY".equals(item.getCurCode())) {
-					if (item.getCurrentStlAmount().compareTo(finAccBills.getAppliedAmount()) > 0) {
+					if (item.getCurrentStlAmount().abs().compareTo(finAccBills.getAppliedAmount().abs()) > 0) {
 						throw new RuntimeException("本次申请金额大于未申请金额");
 					}
 					finAccBills.setAppliedAmount(finAccBills.getAppliedAmount().subtract(item.getCurrentStlAmount()));
 				} else {
-					if (item.getCurrentStlAmount().compareTo(finAccBills.getAppliedAmountUsd()) > 0) {
+					if (item.getCurrentStlAmount().abs().compareTo(finAccBills.getAppliedAmountUsd().abs()) > 0) {
 						throw new RuntimeException("本次申请金额大于未申请金额");
 					}
 					finAccBills.setAppliedAmountUsd(finAccBills.getAppliedAmountUsd().subtract(item.getCurrentStlAmount()));
@@ -1953,10 +1958,10 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						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().compareTo(currentStlAmount) > 0) {
+						if (e.getAppliedAmount().abs().compareTo(currentStlAmount.abs()) > 0) {
 							e.setAppliedAmount(e.getAppliedAmount().subtract(currentStlAmount));
 							currentStlAmount = new BigDecimal("0.00");
-						} else if (e.getAppliedAmount().compareTo(currentStlAmount) == 0) {
+						} else if (e.getAppliedAmount().abs().compareTo(currentStlAmount.abs()) == 0) {
 							e.setAppliedAmount(e.getAppliedAmount().subtract(currentStlAmount));
 							currentStlAmount = new BigDecimal("0.00");
 						} else {