|
|
@@ -25,6 +25,7 @@ import io.seata.spring.annotation.GlobalTransactional;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.core.tool.utils.BeanUtil;
|
|
|
import org.springblade.los.basic.business.entity.BusinessType;
|
|
|
import org.springblade.los.basic.business.service.IBusinessTypeService;
|
|
|
import org.springblade.los.basic.cur.service.IBCurrencyService;
|
|
|
@@ -42,6 +43,10 @@ import org.springblade.los.finance.fee.entity.FeeCenter;
|
|
|
import org.springblade.los.finance.fee.entity.FinAccBills;
|
|
|
import org.springblade.los.finance.fee.service.IFeeCenterService;
|
|
|
import org.springblade.los.finance.fee.service.IFinAccBillsService;
|
|
|
+import org.springblade.los.finance.invoices.entity.FinInvoices;
|
|
|
+import org.springblade.los.finance.invoices.entity.FinInvoicesItems;
|
|
|
+import org.springblade.los.finance.invoices.mapper.FinInvoicesItemsMapper;
|
|
|
+import org.springblade.los.finance.invoices.mapper.FinInvoicesMapper;
|
|
|
import org.springblade.los.finance.stl.entity.FinStlBills;
|
|
|
import org.springblade.los.finance.stl.entity.FinStlBillsItems;
|
|
|
import org.springblade.los.finance.stl.entity.FinStlBillsVoucherItems;
|
|
|
@@ -97,6 +102,10 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
|
|
|
private final IFeeCenterService feeCenterService;
|
|
|
|
|
|
+ private final FinInvoicesItemsMapper finInvoicesItemsMapper;
|
|
|
+
|
|
|
+ private final FinInvoicesMapper finInvoicesMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public IPage<FinStlBillsVO> selectFinStlBillsPage(IPage<FinStlBillsVO> page, FinStlBillsVO finStlBills) {
|
|
|
return page.setRecords(baseMapper.selectFinStlBillsPage(page, finStlBills));
|
|
|
@@ -246,11 +255,13 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
.filter(e -> "USD".equals(e.getCurrentStlCurCode()) && "C".equals(e.getDc())).map(FinStlBillsItems::getCurrentStlAmountNet)
|
|
|
.filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
finStlBills.setAmountCrUsdNet(amountCrUSDTax);
|
|
|
-
|
|
|
finStlBills.setAmountDrLoc(amountDrCNY.add(bCurrencyService.converterCny("USD", amountDrUSD)));
|
|
|
finStlBills.setAmountCrLoc(amountCrCNY.add(bCurrencyService.converterCny("USD", amountCrUSD)));
|
|
|
+ finStlBills.setAmountSub(finStlBills.getAmountCrLoc().subtract(finStlBills.getAmountDrLoc()));
|
|
|
finStlBills.setAmountDrLocNet(amountDrCNYTax.add(bCurrencyService.converterCny("USD", amountDrUSDTax)));
|
|
|
finStlBills.setAmountCrLocNet(amountCrCNYTax.add(bCurrencyService.converterCny("USD", amountCrUSDTax)));
|
|
|
+ finStlBills.setAmountSubLoc(finStlBills.getAmountCrLocNet().subtract(finStlBills.getAmountDrLocNet()));
|
|
|
+
|
|
|
}
|
|
|
this.saveOrUpdate(finStlBills);
|
|
|
return R.data(finStlBills);
|
|
|
@@ -295,7 +306,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
.eq(FeeCenter::getIsDeleted, 0));
|
|
|
List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 1);
|
|
|
feeCenterService.saveOrUpdateBatch(feeCenterListNew);
|
|
|
- List<Bills> billsList = new ArrayList<>();
|
|
|
+ /*List<Bills> billsList = new ArrayList<>();
|
|
|
List<Long> ids = finAccBillsList.stream().map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
List<Long> idsD = finAccBillsList.stream().filter(e -> "D".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
List<Long> idsC = finAccBillsList.stream().filter(e -> "C".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
@@ -335,7 +346,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
} else {
|
|
|
billsMapper.updateById(item);
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
}
|
|
|
detail.setStatus(3);
|
|
|
@@ -354,6 +365,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
item.setCheckStatus(1);
|
|
|
item.setCheckById(detail.getCreateUser());
|
|
|
item.setCheckByName(detail.getCreateUserName());
|
|
|
+ item.setReconciliationAmount(item.getReconciliationAmount().add(item.getAmount()));
|
|
|
} else {
|
|
|
item.setCheckBillId(0L);
|
|
|
item.setCheckBillNo("");
|
|
|
@@ -362,6 +374,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
item.setCheckStatus(0);
|
|
|
item.setCheckById(0L);
|
|
|
item.setCheckByName("");
|
|
|
+ item.setReconciliationAmount(item.getReconciliationAmount().subtract(item.getAmount()));
|
|
|
}
|
|
|
}
|
|
|
return feeCenterList;
|
|
|
@@ -440,7 +453,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 2);
|
|
|
feeCenterService.saveOrUpdateBatch(feeCenterListNew);
|
|
|
finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
- List<Bills> billsList = new ArrayList<>();
|
|
|
+ /*List<Bills> billsList = new ArrayList<>();
|
|
|
List<Long> ids = finAccBillsList.stream().map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
List<Long> idsD = finAccBillsList.stream().filter(e -> "D".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
List<Long> idsC = finAccBillsList.stream().filter(e -> "C".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
@@ -480,7 +493,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
Bills bills = reconciliation(item, countD, divideIdsD, countC, divideIdsC, idsD, idsC);
|
|
|
billsMapper.updateById(bills);
|
|
|
}
|
|
|
-
|
|
|
+*/
|
|
|
}
|
|
|
detail.setStatus(0);
|
|
|
detail.setIsChecked(2);
|
|
|
@@ -547,10 +560,6 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
finAccBills.setStlAmountCr(ObjectUtils.isNotNull(finAccBills.getStlAmountCr()) ? finAccBills.getStlAmountCr() : new BigDecimal("0.00"));
|
|
|
finAccBills.setStlAmountCrLoc(ObjectUtils.isNotNull(finAccBills.getStlAmountCrLoc()) ? finAccBills.getStlAmountCrLoc() : new BigDecimal("0.00"));
|
|
|
finAccBills.setStlAmountCrUsd(ObjectUtils.isNotNull(finAccBills.getStlAmountCrUsd()) ? finAccBills.getStlAmountCrUsd() : new BigDecimal("0.00"));
|
|
|
- if (item.getCurrentStlAmount().compareTo(new BigDecimal("0.00")) == 0 ||
|
|
|
- item.getCurrentStlAmount().compareTo(item.getUnsettledAmount()) > 0) {
|
|
|
- throw new RuntimeException("本次结算金额不能为零或大于未结算金额");
|
|
|
- }
|
|
|
item.setStlTtlAmount(item.getStlTtlAmount().add(item.getCurrentStlAmount().add(item.getCurrentStlDiscount())));
|
|
|
item.setUnsettledAmount(item.getAmount().subtract(item.getStlTtlAmount()));
|
|
|
/**-----------------------账单数据处理 收--------------------------- */
|
|
|
@@ -605,7 +614,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
finAccBillsList.add(finAccBills);
|
|
|
/**-----------------------业务单据状态修改--------------------------- */
|
|
|
- if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
|
|
|
+ /*if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
|
|
|
Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
|
|
|
if (bills != null) {
|
|
|
bills.setBillingStatus(bills.getBillingStatus() + 1);
|
|
|
@@ -651,7 +660,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
Bills billsDetail = settlement(bills, countD, countC);
|
|
|
billsMapper.updateById(billsDetail);
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
/**-----------------------业务单据状态修改--------------------------- */
|
|
|
/**-----------------------费用中心数据处理--------------------------- */
|
|
|
List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
@@ -662,6 +671,11 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
.apply("amount != stl_ttl_amount")
|
|
|
.orderByDesc(FeeCenter::getCreateTime));
|
|
|
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) {
|
|
|
+ throw new RuntimeException("本次结算金额不能为零或大于未结算金额");
|
|
|
+ }
|
|
|
for (FeeCenter e : feeCenters) {
|
|
|
if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
break;
|
|
|
@@ -767,10 +781,6 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
finAccBills.setStlAmountCr(ObjectUtils.isNotNull(finAccBills.getStlAmountCr()) ? finAccBills.getStlAmountCr() : new BigDecimal("0.00"));
|
|
|
finAccBills.setStlAmountCrLoc(ObjectUtils.isNotNull(finAccBills.getStlAmountCrLoc()) ? finAccBills.getStlAmountCrLoc() : new BigDecimal("0.00"));
|
|
|
finAccBills.setStlAmountCrUsd(ObjectUtils.isNotNull(finAccBills.getStlAmountCrUsd()) ? finAccBills.getStlAmountCrUsd() : new BigDecimal("0.00"));
|
|
|
- if (item.getCurrentStlAmount().compareTo(new BigDecimal("0.00")) == 0 ||
|
|
|
- item.getCurrentStlAmount().compareTo(item.getUnsettledAmount()) > 0) {
|
|
|
- throw new RuntimeException("本次结算金额不能为零或大于未结算金额");
|
|
|
- }
|
|
|
item.setStlTtlAmount(item.getStlTtlAmount().subtract(item.getCurrentStlAmount().subtract(item.getCurrentStlDiscount())));
|
|
|
item.setUnsettledAmount(item.getAmount().subtract(item.getStlTtlAmount()));
|
|
|
/**-----------------------账单数据处理 收--------------------------- */
|
|
|
@@ -840,7 +850,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
finAccBillsList.add(finAccBills);
|
|
|
/**-----------------------业务单据状态修改--------------------------- */
|
|
|
- if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
|
|
|
+ /*if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
|
|
|
Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
|
|
|
if (bills != null) {
|
|
|
bills.setBillingStatus(bills.getBillingStatus() + 1);
|
|
|
@@ -886,7 +896,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
Bills billsDetail = settlement(bills, countD, countC);
|
|
|
billsMapper.updateById(billsDetail);
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
/**-----------------------业务单据状态修改--------------------------- */
|
|
|
/**-----------------------费用中心数据处理--------------------------- */
|
|
|
List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
@@ -897,6 +907,11 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
.apply("stl_ttl_amount != 0")
|
|
|
.orderByDesc(FeeCenter::getCreateTime));
|
|
|
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(stlTtlAmount) > 0) {
|
|
|
+ throw new RuntimeException("本次结算金额不能为零或大于已结算金额");
|
|
|
+ }
|
|
|
for (FeeCenter e : feeCenters) {
|
|
|
if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
break;
|
|
|
@@ -1100,79 +1115,130 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
|
|
|
public R settlementApprove(FinStlBills finStlBills) {
|
|
|
if (finStlBills.getId() == null) {
|
|
|
throw new RuntimeException("缺少必要参数");
|
|
|
}
|
|
|
FinStlBills detail = baseMapper.selectById(finStlBills.getId());
|
|
|
- if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
|
|
|
- //审批数据
|
|
|
- LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
|
|
|
- //获取审批级次
|
|
|
- List<LosAuditPathsLevels> auditPathsLevels;
|
|
|
- // 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
|
|
|
- LosAuditPathsActs pathsActs;
|
|
|
- //是否开启流程
|
|
|
- LambdaQueryWrapper<LosAuditPathsActs> auditPathsActsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
- auditPathsActsLambdaQueryWrapper
|
|
|
- .eq(LosAuditPathsActs::getIsEnable, 1)
|
|
|
- .eq(LosAuditPathsActs::getFidStatus, "status")
|
|
|
- .eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(LosAuditPathsActs::getSalesCompanyId, AuthUtil.getDeptId())
|
|
|
- .eq(LosAuditPathsActs::getActId, 1109);
|
|
|
- pathsActs = auditPathsActsService.getOne(auditPathsActsLambdaQueryWrapper);
|
|
|
- //获取审批信息
|
|
|
- LosAuditPathsActs losAuditPathsActs = auditPathsActsService.getOne(new LambdaQueryWrapper<LosAuditPathsActs>()
|
|
|
- .eq(LosAuditPathsActs::getActId, 1109)
|
|
|
- .eq(LosAuditPathsActs::getFidStatus, "status")
|
|
|
- .eq(LosAuditPathsActs::getSalesCompanyId, AuthUtil.getDeptId())
|
|
|
- .eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId()));
|
|
|
- Long pathId = losAuditPathsActs.getPathId();
|
|
|
- auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
|
|
|
- .eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
|
|
|
- auditProecessDTO.setTimes(1);
|
|
|
- auditProecessDTO.setProcessType("付费申请");
|
|
|
+ //审批数据
|
|
|
+ LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
|
|
|
+ //获取审批级次
|
|
|
+ List<LosAuditPathsLevels> auditPathsLevels;
|
|
|
+ // 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
|
|
|
+ LosAuditPathsActs pathsActs;
|
|
|
+ //是否开启流程
|
|
|
+ LambdaQueryWrapper<LosAuditPathsActs> auditPathsActsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ auditPathsActsLambdaQueryWrapper
|
|
|
+ .eq(LosAuditPathsActs::getIsEnable, 1)
|
|
|
+ .eq(LosAuditPathsActs::getFidStatus, "status")
|
|
|
+ .eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(LosAuditPathsActs::getSalesCompanyId, AuthUtil.getDeptId())
|
|
|
+ .eq(LosAuditPathsActs::getActId, 1109);
|
|
|
+ pathsActs = auditPathsActsService.getOne(auditPathsActsLambdaQueryWrapper);
|
|
|
+ //获取审批信息
|
|
|
+ LosAuditPathsActs losAuditPathsActs = auditPathsActsService.getOne(new LambdaQueryWrapper<LosAuditPathsActs>()
|
|
|
+ .eq(LosAuditPathsActs::getActId, 1109)
|
|
|
+ .eq(LosAuditPathsActs::getFidStatus, "status")
|
|
|
+ .eq(LosAuditPathsActs::getSalesCompanyId, AuthUtil.getDeptId())
|
|
|
+ .eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId()));
|
|
|
+ Long pathId = losAuditPathsActs.getPathId();
|
|
|
+ auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
|
|
|
+ .eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
|
|
|
+ auditProecessDTO.setTimes(1);
|
|
|
+ auditProecessDTO.setProcessType("付费申请");
|
|
|
|
|
|
- // 没开启审批流直接走 通过流程
|
|
|
- if (pathsActs == null || pathsActs.getIsEnable() == 2) {
|
|
|
- throw new SecurityException("当前租户未查询到审批流配置");
|
|
|
- } else {
|
|
|
+ // 没开启审批流直接走 通过流程
|
|
|
+ if (pathsActs == null || pathsActs.getIsEnable() == 2) {
|
|
|
+ throw new SecurityException("当前租户未查询到审批流配置");
|
|
|
+ } else {
|
|
|
|
|
|
- if (CollectionUtils.isEmpty(auditPathsLevels)) {
|
|
|
- throw new SecurityException("开启审批失败:未查询到审批信息");
|
|
|
+ if (CollectionUtils.isEmpty(auditPathsLevels)) {
|
|
|
+ throw new SecurityException("开启审批失败:未查询到审批信息");
|
|
|
+ }
|
|
|
+ // 绑定审核类型
|
|
|
+ auditProecessDTO.setCheckType("HYCK-FFSQ");
|
|
|
+ // 追加跳转路由url
|
|
|
+ auditProecessDTO.setUrl(finStlBills.getUrl());
|
|
|
+ auditProecessDTO.setPageStatus(finStlBills.getPageStatus());
|
|
|
+ auditProecessDTO.setPageLabel(finStlBills.getPageLabel());
|
|
|
+ auditProecessDTO.setOrderRemark(detail.getRemarks());
|
|
|
+ auditProecessDTO.setPathsLevelsList(auditPathsLevels);
|
|
|
+ auditProecessDTO.setActId(1);
|
|
|
+ auditProecessDTO.setSrcBillId(detail.getId());
|
|
|
+ auditProecessDTO.setBillId(detail.getId());
|
|
|
+ auditProecessDTO.setBillNo(detail.getBillNo());
|
|
|
+ auditProecessDTO.setSendUserId(AuthUtil.getUserId());
|
|
|
+ auditProecessDTO.setSendName(AuthUtil.getUserName());
|
|
|
+ auditProecessDTO.setSendTime(new Date());
|
|
|
+ auditProecessDTO.setBillTime(detail.getCreateTime());
|
|
|
+ auditProecessDTO.setTenantId(AuthUtil.getTenantId());
|
|
|
+ auditProecessDTO.setCorpId(detail.getCorpId());
|
|
|
+ auditProecessDTO.setSalesCompanyId(Long.parseLong(detail.getCreateDept()));
|
|
|
+ auditProecessDTO.setSalesCompanyName(detail.getCreateDeptName());
|
|
|
+ R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
|
|
|
+ if (!financeProcess.isSuccess()) {
|
|
|
+ throw new SecurityException("操作失败,请联系管理员");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ detail.setStatus(1);
|
|
|
+ if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
+ for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
|
|
|
+ FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ //计算字段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("amount != stl_ttl_amount + applied_amount")
|
|
|
+ .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.getAmount().subtract(e.getAppliedAmount()).subtract(e.getStlTtlAmount()).compareTo(currentStlAmount) > 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) {
|
|
|
+ e.setAppliedAmount(e.getAppliedAmount().add(currentStlAmount));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else {
|
|
|
+ e.setAppliedAmount(e.getAmount());
|
|
|
+ currentStlAmount = currentStlAmount.subtract(e.getAmount());
|
|
|
+ }
|
|
|
+ feeCenterList.add(e);
|
|
|
+ }
|
|
|
}
|
|
|
- // 绑定审核类型
|
|
|
- auditProecessDTO.setCheckType("HYCK-FFSQ");
|
|
|
- // 追加跳转路由url
|
|
|
- auditProecessDTO.setUrl(finStlBills.getUrl());
|
|
|
- auditProecessDTO.setPageStatus(finStlBills.getPageStatus());
|
|
|
- auditProecessDTO.setPageLabel(finStlBills.getPageLabel());
|
|
|
- auditProecessDTO.setOrderRemark(detail.getRemarks());
|
|
|
- auditProecessDTO.setPathsLevelsList(auditPathsLevels);
|
|
|
- auditProecessDTO.setActId(1);
|
|
|
- auditProecessDTO.setSrcBillId(detail.getId());
|
|
|
- auditProecessDTO.setBillId(detail.getId());
|
|
|
- auditProecessDTO.setBillNo(detail.getBillNo());
|
|
|
- auditProecessDTO.setSendUserId(AuthUtil.getUserId());
|
|
|
- auditProecessDTO.setSendName(AuthUtil.getUserName());
|
|
|
- auditProecessDTO.setSendTime(new Date());
|
|
|
- auditProecessDTO.setBillTime(detail.getCreateTime());
|
|
|
- auditProecessDTO.setTenantId(AuthUtil.getTenantId());
|
|
|
- auditProecessDTO.setCorpId(detail.getCorpId());
|
|
|
- auditProecessDTO.setSalesCompanyId(Long.parseLong(detail.getCreateDept()));
|
|
|
- auditProecessDTO.setSalesCompanyName(detail.getCreateDeptName());
|
|
|
- R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
|
|
|
- if (!financeProcess.isSuccess()) {
|
|
|
- throw new SecurityException("操作失败,请联系管理员");
|
|
|
+ if (currentStlAmount.compareTo(new BigDecimal("0.00")) != 0) {
|
|
|
+ throw new RuntimeException("结算金额计算错误,操作失败");
|
|
|
}
|
|
|
+ /**-----------------------费用中心数据处理--------------------------- */
|
|
|
}
|
|
|
- detail.setStatus(1);
|
|
|
+ feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
}
|
|
|
baseMapper.updateById(detail);
|
|
|
return R.data(detail);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
|
|
|
public R revokeSettlementApprove(FinStlBills finStlBills) {
|
|
|
if (finStlBills.getId() == null) {
|
|
|
throw new RuntimeException("缺少必要参数");
|
|
|
@@ -1187,6 +1253,54 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
throw new SecurityException("操作失败,请联系管理员");
|
|
|
}
|
|
|
detail.setStatus(0);
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
+ for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
|
|
|
+ FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ //计算字段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().compareTo(currentStlAmount) > 0) {
|
|
|
+ e.setAppliedAmount(e.getAppliedAmount().subtract(currentStlAmount));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else if (e.getAppliedAmount().compareTo(currentStlAmount) == 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("撤销金额计算错误,操作失败");
|
|
|
+ }
|
|
|
+ /**-----------------------费用中心数据处理--------------------------- */
|
|
|
+ }
|
|
|
+ feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
}
|
|
|
baseMapper.updateById(detail);
|
|
|
return R.data(detail);
|
|
|
@@ -1213,4 +1327,85 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
}
|
|
|
return detail;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R generateFinStlBills(String billId, String dc) {
|
|
|
+ if (ObjectUtils.isNull(billId) || ObjectUtils.isNull(dc)) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ List<FinStlBillsItems> finStlBillsItemsList = new ArrayList<>();
|
|
|
+ FinStlBills finStlBills = new FinStlBills();
|
|
|
+ finStlBills.setBusinessType("STL");
|
|
|
+ finStlBills.setBillDate(new Date());
|
|
|
+ if ("D".equals(dc)) {
|
|
|
+ List<FinInvoices> finInvoices = finInvoicesMapper.selectList(new LambdaQueryWrapper<FinInvoices>()
|
|
|
+ .eq(FinInvoices::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinInvoices::getIsDeleted, 0)
|
|
|
+ .apply("find_in_set(id,'" + billId + "')"));
|
|
|
+ if (finInvoices.size() > 0) {
|
|
|
+ finStlBills.setCorpId(finInvoices.get(0).getCorpId());
|
|
|
+ finStlBills.setCorpCnName(finInvoices.get(0).getCorpCnName());
|
|
|
+ finStlBills.setCorpEnName(finInvoices.get(0).getCorpEnName());
|
|
|
+ finStlBills.setBusinessTypes(finInvoices.get(0).getBusinessTypes());
|
|
|
+ finStlBills.setDc(dc);
|
|
|
+ finStlBills.setRequestNo(finInvoices.stream().map(FinInvoices::getBillNo).filter(Objects::nonNull).distinct()
|
|
|
+ .collect(Collectors.joining(",")));
|
|
|
+ }
|
|
|
+
|
|
|
+ List<FinInvoicesItems> finInvoicesItems = finInvoicesItemsMapper.selectList(new LambdaQueryWrapper<FinInvoicesItems>()
|
|
|
+ .eq(FinInvoicesItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinInvoicesItems::getIsDeleted, 0)
|
|
|
+ .apply("find_in_set(pid,'" + billId + "')"));
|
|
|
+ if (finInvoicesItems.size() > 0) {
|
|
|
+ for (FinInvoicesItems item : finInvoicesItems) {
|
|
|
+ FinStlBillsItems finStlBillsItems = new FinStlBillsItems();
|
|
|
+ BeanUtil.copyProperties(item, finStlBillsItems);
|
|
|
+ finStlBillsItems.setId(null);
|
|
|
+ finStlBillsItems.setCurrentStlCurCode(item.getCurrentCurCode());
|
|
|
+ finStlBillsItems.setCurrentStlExrate(item.getCurrentExrate());
|
|
|
+ finStlBillsItems.setCurrentStlTaxRate(item.getCurrentTaxRate());
|
|
|
+ finStlBillsItems.setCurrentStlSurRate(item.getCurrentSurRate());
|
|
|
+ finStlBillsItems.setCurrentStlDiscount(item.getAmountDiscount());
|
|
|
+ finStlBillsItems.setCurrentStlAmountTax(item.getCurrentAmountTax());
|
|
|
+ finStlBillsItems.setCurrentStlAmountNet(item.getCurrentAmountNet());
|
|
|
+ finStlBillsItems.setCurrentStlAmount(item.getCurrentAmount());
|
|
|
+ finStlBillsItems.setCurrentStlAmountLoc(item.getCurrentAmountLoc());
|
|
|
+ finStlBillsItems.setCurrentInvoiceAmount(item.getCurrentAmount());
|
|
|
+ finStlBillsItems.setCurrentInvoiceAmountLoc(item.getCurrentAmountLoc());
|
|
|
+ finStlBillsItems.setInvoiceBillId(item.getId());
|
|
|
+ finStlBillsItems.setInvoiceNo(item.getBillNo());
|
|
|
+ finStlBillsItemsList.add(finStlBillsItems);
|
|
|
+ }
|
|
|
+ finStlBills.setFinStlBillsItemsList(finStlBillsItemsList);
|
|
|
+ }
|
|
|
+ } else if ("C".equals(dc)) {
|
|
|
+ List<FinStlBills> finStlBills1 = baseMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
|
|
|
+ .eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBills::getIsDeleted, 0)
|
|
|
+ .apply("find_in_set(id,'" + billId + "')"));
|
|
|
+ if (finStlBills1.size() > 0) {
|
|
|
+ finStlBills.setCorpId(finStlBills1.get(0).getCorpId());
|
|
|
+ finStlBills.setCorpCnName(finStlBills1.get(0).getCorpCnName());
|
|
|
+ finStlBills.setCorpEnName(finStlBills1.get(0).getCorpEnName());
|
|
|
+ finStlBills.setBusinessTypes(finStlBills1.get(0).getBusinessTypes());
|
|
|
+ finStlBills.setDc(dc);
|
|
|
+ finStlBills.setRequestNo(finStlBills1.stream().map(FinStlBills::getBillNo).filter(Objects::nonNull).distinct()
|
|
|
+ .collect(Collectors.joining(",")));
|
|
|
+ }
|
|
|
+ List<FinStlBillsItems> finInvoicesItems = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
+ .eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBillsItems::getIsDeleted, 0)
|
|
|
+ .apply("find_in_set(pid,'" + billId + "')"));
|
|
|
+ if (finInvoicesItems.size() > 0) {
|
|
|
+ for (FinStlBillsItems item : finInvoicesItems) {
|
|
|
+ FinStlBillsItems finStlBillsItems = new FinStlBillsItems();
|
|
|
+ BeanUtil.copyProperties(item, finStlBillsItems);
|
|
|
+ finStlBillsItems.setId(null);
|
|
|
+ finStlBillsItemsList.add(finStlBillsItems);
|
|
|
+ }
|
|
|
+ finStlBills.setFinStlBillsItemsList(finStlBillsItemsList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.data(finStlBills);
|
|
|
+ }
|
|
|
}
|