|
|
@@ -18,6 +18,7 @@ package org.springblade.los.finance.stl.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import io.seata.spring.annotation.GlobalTransactional;
|
|
|
@@ -26,10 +27,17 @@ import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.los.basic.business.entity.BusinessType;
|
|
|
import org.springblade.los.basic.business.service.IBusinessTypeService;
|
|
|
+import org.springblade.los.basic.cur.service.IBCurrencyService;
|
|
|
import org.springblade.los.billno.entity.BusinessBillNo;
|
|
|
import org.springblade.los.billno.service.IBusinessBillNoService;
|
|
|
import org.springblade.los.business.sea.entity.Bills;
|
|
|
import org.springblade.los.business.sea.mapper.BillsMapper;
|
|
|
+import org.springblade.los.check.dto.LosAuditProecessDTO;
|
|
|
+import org.springblade.los.check.entity.LosAuditPathsActs;
|
|
|
+import org.springblade.los.check.entity.LosAuditPathsLevels;
|
|
|
+import org.springblade.los.check.service.IAuditPathsActsService;
|
|
|
+import org.springblade.los.check.service.IAuditPathsLevelsService;
|
|
|
+import org.springblade.los.check.service.IAuditProecessService;
|
|
|
import org.springblade.los.finance.fee.entity.FinAccBills;
|
|
|
import org.springblade.los.finance.fee.service.IFinAccBillsService;
|
|
|
import org.springblade.los.finance.stl.entity.FinStlBills;
|
|
|
@@ -45,6 +53,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
@@ -75,6 +84,14 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
|
|
|
private final IBusinessTypeService bBusinessTypeService;
|
|
|
|
|
|
+ private final IBCurrencyService bCurrencyService;
|
|
|
+
|
|
|
+ private final IAuditPathsActsService auditPathsActsService;
|
|
|
+
|
|
|
+ private final IAuditPathsLevelsService auditPathsLevelsService;
|
|
|
+
|
|
|
+ private final IAuditProecessService auditProecessService;
|
|
|
+
|
|
|
@Override
|
|
|
public IPage<FinStlBillsVO> selectFinStlBillsPage(IPage<FinStlBillsVO> page, FinStlBillsVO finStlBills) {
|
|
|
return page.setRecords(baseMapper.selectFinStlBillsPage(page, finStlBills));
|
|
|
@@ -171,7 +188,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
|
|
|
- public R confirm(FinStlBills finStlBills) {
|
|
|
+ public R confirmReconciliation(FinStlBills finStlBills) {
|
|
|
if (finStlBills.getId() == null) {
|
|
|
throw new RuntimeException("缺少必要参数");
|
|
|
}
|
|
|
@@ -220,7 +237,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
throw new RuntimeException("未找到对应账单信息");
|
|
|
}
|
|
|
}
|
|
|
- detail.setIsChecked(1);
|
|
|
+ detail.setStatus(3);
|
|
|
baseMapper.updateById(detail);
|
|
|
return R.data(detail);
|
|
|
}
|
|
|
@@ -228,7 +245,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
|
|
|
- public R revoke(FinStlBills finStlBills) {
|
|
|
+ public R revokeReconciliation(FinStlBills finStlBills) {
|
|
|
if (finStlBills.getId() == null) {
|
|
|
throw new RuntimeException("缺少必要参数");
|
|
|
}
|
|
|
@@ -236,7 +253,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
|
|
|
for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
|
|
|
item.setIsChecked(0);
|
|
|
- item.setBillDate(finStlBills.getBillDate());
|
|
|
+ item.setBillDate(null);
|
|
|
item.setUpdateUser(AuthUtil.getUserId());
|
|
|
item.setUpdateTime(new Date());
|
|
|
item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
@@ -280,7 +297,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
throw new RuntimeException("未找到对应账单信息");
|
|
|
}
|
|
|
}
|
|
|
- detail.setIsChecked(2);
|
|
|
+ detail.setStatus(0);
|
|
|
baseMapper.updateById(detail);
|
|
|
return R.data(detail);
|
|
|
}
|
|
|
@@ -307,4 +324,470 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
return R.data("操作成功");
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R confirmSettlement(FinStlBills finStlBills) {
|
|
|
+ if (finStlBills.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ FinStlBills detail = baseMapper.selectById(finStlBills.getId());
|
|
|
+ if ("D".equals(detail.getDc())) {
|
|
|
+ if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
|
|
|
+ List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
|
|
|
+ item.setIsCleared(1);
|
|
|
+ item.setBillDate(finStlBills.getBillDate());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ boolean status = Boolean.FALSE;
|
|
|
+ if ("CNY".equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().add(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(finAccBills.getStlAmountDr()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().add(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount());
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(cny));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountDr().compareTo(finAccBills.getStlAmountDr()) == 0 &&
|
|
|
+ finAccBills.getAmountDrUsd().compareTo(finAccBills.getStlAmountDrUsd()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ finAccBills.setStlBillId(detail.getId());
|
|
|
+ finAccBills.setStlBillNo(detail.getBillNo());
|
|
|
+ finAccBills.setStlDate(new Date());
|
|
|
+ finAccBills.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ finAccBills.setUpdateTime(new Date());
|
|
|
+ finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ finAccBillsList.add(finAccBills);
|
|
|
+ if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
|
|
|
+ Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
|
|
|
+ if (bills != null) {
|
|
|
+ bills.setBillingStatus(bills.getBillingStatus() + 1);
|
|
|
+ billsMapper.updateById(bills);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
|
|
|
+ if (bills != null) {
|
|
|
+ bills.setBillingStatus(bills.getBillingStatus() + 1);
|
|
|
+ billsMapper.updateById(bills);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
|
|
|
+ finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
+ }
|
|
|
+ detail.setStatus(3);
|
|
|
+ } else {
|
|
|
+ if (detail.getIsApproved() == 1) {
|
|
|
+ //审批数据
|
|
|
+ LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
|
|
|
+ //获取审批级次
|
|
|
+ List<LosAuditPathsLevels> auditPathsLevels = null;
|
|
|
+ // 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
|
|
|
+ LosAuditPathsActs pathsActs = null;
|
|
|
+ //是否开启流程
|
|
|
+ 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 (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);
|
|
|
+ } else {
|
|
|
+ if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
|
|
|
+ List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
|
|
|
+ item.setIsCleared(1);
|
|
|
+ item.setBillDate(finStlBills.getBillDate());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ boolean status = Boolean.FALSE;
|
|
|
+ if ("CNY".equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().add(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(finAccBills.getStlAmountCr()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().add(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount());
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(cny));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountCr().compareTo(finAccBills.getStlAmountCr()) == 0 &&
|
|
|
+ finAccBills.getAmountCrUsd().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ finAccBills.setStlBillId(detail.getId());
|
|
|
+ finAccBills.setStlBillNo(detail.getBillNo());
|
|
|
+ finAccBills.setStlDate(new Date());
|
|
|
+ finAccBills.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ finAccBills.setUpdateTime(new Date());
|
|
|
+ finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ finAccBillsList.add(finAccBills);
|
|
|
+ if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
|
|
|
+ Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
|
|
|
+ if (bills != null) {
|
|
|
+ bills.setBillingStatus(bills.getBillingStatus() + 1);
|
|
|
+ billsMapper.updateById(bills);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
|
|
|
+ if (bills != null) {
|
|
|
+ bills.setBillingStatus(bills.getBillingStatus() + 1);
|
|
|
+ billsMapper.updateById(bills);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
|
|
|
+ finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
+ }
|
|
|
+ detail.setStatus(3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ baseMapper.updateById(detail);
|
|
|
+ return R.data(detail);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R revokeSettlement(FinStlBills finStlBills) {
|
|
|
+ if (finStlBills.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ FinStlBills detail = baseMapper.selectById(finStlBills.getId());
|
|
|
+ if ("D".equals(detail.getDc())) {
|
|
|
+ if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
|
|
|
+ List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
|
|
|
+ item.setIsCleared(0);
|
|
|
+ item.setBillDate(null);
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ boolean status = Boolean.FALSE;
|
|
|
+ if ("CNY".equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().subtract(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(finAccBills.getStlAmountDr()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().subtract(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount());
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(cny));
|
|
|
+ }
|
|
|
+
|
|
|
+ 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(finAccBills.getStlAmountDr()) == 0 &&
|
|
|
+ finAccBills.getAmountDrUsd().compareTo(finAccBills.getStlAmountDrUsd()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finAccBills.setStlBillId(detail.getId());
|
|
|
+ finAccBills.setStlBillNo(detail.getBillNo());
|
|
|
+ finAccBills.setStlDate(new Date());
|
|
|
+ finAccBills.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ finAccBills.setUpdateTime(new Date());
|
|
|
+ finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ finAccBillsList.add(finAccBills);
|
|
|
+ if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
|
|
|
+ Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
|
|
|
+ if (bills != null) {
|
|
|
+ bills.setBillingStatus(bills.getBillingStatus() - 1);
|
|
|
+ billsMapper.updateById(bills);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
|
|
|
+ if (bills != null) {
|
|
|
+ bills.setBillingStatus(bills.getBillingStatus() - 1);
|
|
|
+ billsMapper.updateById(bills);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
|
|
|
+ finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
+ }
|
|
|
+ detail.setIsCleared(0);
|
|
|
+ } else {
|
|
|
+ if (detail.getIsApproved() == 1) {
|
|
|
+ if (detail.getStatus() > 1) {
|
|
|
+ throw new RuntimeException("正在审核中,撤销失败");
|
|
|
+ }
|
|
|
+ R financeProcess = auditProecessService.deteleByBillId(detail.getId());
|
|
|
+ if (!financeProcess.isSuccess()) {
|
|
|
+ throw new SecurityException("操作失败,请联系管理员");
|
|
|
+ }
|
|
|
+ detail.setStatus(0);
|
|
|
+ } else {
|
|
|
+ if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
|
|
|
+ List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
|
|
|
+ item.setIsCleared(0);
|
|
|
+ item.setBillDate(null);
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ boolean status = Boolean.FALSE;
|
|
|
+ if ("CNY".equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().subtract(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(finAccBills.getStlAmountCr()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().subtract(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount());
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(cny));
|
|
|
+ }
|
|
|
+ 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(finAccBills.getStlAmountCr()) == 0 &&
|
|
|
+ finAccBills.getAmountCrUsd().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finAccBills.setStlBillId(detail.getId());
|
|
|
+ finAccBills.setStlBillNo(detail.getBillNo());
|
|
|
+ finAccBills.setStlDate(new Date());
|
|
|
+ finAccBills.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ finAccBills.setUpdateTime(new Date());
|
|
|
+ finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ finAccBillsList.add(finAccBills);
|
|
|
+ if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
|
|
|
+ Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
|
|
|
+ if (bills != null) {
|
|
|
+ bills.setBillingStatus(bills.getBillingStatus() - 1);
|
|
|
+ billsMapper.updateById(bills);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
|
|
|
+ if (bills != null) {
|
|
|
+ bills.setBillingStatus(bills.getBillingStatus() - 1);
|
|
|
+ billsMapper.updateById(bills);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
|
|
|
+ finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
+ }
|
|
|
+ detail.setIsCleared(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ baseMapper.updateById(detail);
|
|
|
+ return R.data(detail);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R passCheck(Long id) {
|
|
|
+ FinStlBills bills = baseMapper.selectById(id);
|
|
|
+ if (bills == null) {
|
|
|
+ throw new SecurityException("审批通过失败");
|
|
|
+ }
|
|
|
+ List<FinStlBillsItems> finStlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
+ .eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBillsItems::getIsDeleted, 0)
|
|
|
+ .eq(FinStlBillsItems::getPid, bills.getId()));
|
|
|
+ List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ for (FinStlBillsItems item : finStlBillsItemsList) {
|
|
|
+ item.setIsCleared(1);
|
|
|
+ item.setBillDate(bills.getBillDate());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ boolean status = Boolean.FALSE;
|
|
|
+ if ("CNY".equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().add(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(finAccBills.getStlAmountCr()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().add(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount());
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(cny));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountCr().compareTo(finAccBills.getStlAmountCr()) == 0 &&
|
|
|
+ finAccBills.getAmountCrUsd().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ finAccBills.setStlBillId(bills.getId());
|
|
|
+ finAccBills.setStlBillNo(bills.getBillNo());
|
|
|
+ finAccBills.setStlDate(new Date());
|
|
|
+ finAccBills.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ finAccBills.setUpdateTime(new Date());
|
|
|
+ finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ finAccBillsList.add(finAccBills);
|
|
|
+ if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
|
|
|
+ Bills detail = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
|
|
|
+ if (detail != null) {
|
|
|
+ detail.setBillingStatus(detail.getBillingStatus() + 1);
|
|
|
+ billsMapper.updateById(detail);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Bills detail = billsMapper.selectById(finAccBills.getBusinessBillId());
|
|
|
+ if (detail != null) {
|
|
|
+ detail.setBillingStatus(detail.getBillingStatus() + 1);
|
|
|
+ billsMapper.updateById(detail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finStlBillsItemsService.saveOrUpdateBatch(finStlBillsItemsList);
|
|
|
+ finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
+ bills.setIsCleared(1);
|
|
|
+ bills.setStatus(3);
|
|
|
+ baseMapper.updateById(bills);
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R underReview(Long id) {
|
|
|
+ FinStlBills bills = baseMapper.selectById(id);
|
|
|
+ if (bills == null) {
|
|
|
+ throw new SecurityException("审批通过失败");
|
|
|
+ }
|
|
|
+ bills.setStatus(2);
|
|
|
+ baseMapper.updateById(bills);
|
|
|
+
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R passCancel(Long id) {
|
|
|
+ FinStlBills bills = baseMapper.selectById(id);
|
|
|
+ if (bills == null) {
|
|
|
+ throw new SecurityException("审批通过失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ bills.setStatus(4);
|
|
|
+ baseMapper.updateById(bills);
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R confirmSignFor(FinStlBills finStlBills) {
|
|
|
+ if (finStlBills.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ FinStlBills detail = baseMapper.selectById(finStlBills.getId());
|
|
|
+ if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
|
|
|
+ for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
|
|
|
+ item.setIsSignfor(1);
|
|
|
+ item.setSignforDate(new Date());
|
|
|
+ item.setSignforId(AuthUtil.getUserId());
|
|
|
+ item.setSignforName(AuthUtil.getUserName());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
|
|
|
+ }
|
|
|
+ return R.data(detail);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R revokeSignFor(FinStlBills finStlBills) {
|
|
|
+ if (finStlBills.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ FinStlBills detail = baseMapper.selectById(finStlBills.getId());
|
|
|
+ if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
|
|
|
+ for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
|
|
|
+ item.setIsSignfor(0);
|
|
|
+ item.setSignforDate(null);
|
|
|
+ item.setSignforId(0L);
|
|
|
+ item.setSignforName("");
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
|
|
|
+ }
|
|
|
+ return R.data(detail);
|
|
|
+ }
|
|
|
+
|
|
|
}
|