1.1.58 开票流程优化,添加开票比例校验。

dev
yinq 4 weeks ago
parent 74080946e3
commit 39f52238ec

@ -30,7 +30,7 @@ public abstract class AbstractWorkflowService<T> {
startProcess.setBusinessId(strategy.getBusinessId(bo));
startProcess.setVariables(strategy.getVariables(bo));
FlowConfigEnum flowConfigEnum = strategy.getFlowConfig(bo);
startProcess.setFlowConfig(flowConfigEnum.getFlowCode(), flowConfigEnum.getBusinessTitle(), strategy.getBusinessCode(bo));
startProcess.setFlowConfig(flowConfigEnum.getFlowCode(), strategy.getBusinessTitle(bo), strategy.getBusinessCode(bo));
boolean flagOne = this.doStartWorkflow(startProcess);
if (!flagOne) {

@ -20,4 +20,11 @@ public interface WorkflowStrategy<T> {
Map<String, Object> getVariables(T bo);
FlowConfigEnum getFlowConfig(T bo);
/**
*
*/
default String getBusinessTitle(T bo) {
return getFlowConfig(bo).getBusinessTitle();
}
}

@ -207,6 +207,11 @@ public class ErpFinInvoiceInfoBo extends BaseEntity {
*/
private String requestDeptName;
/**
* ID
*/
private Long managerId;
private List<ErpFinInvoiceDetail> erpFinInvoiceDetailList;
private List<Long> toDeletedInvoiceDetailIdList;

@ -767,7 +767,7 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService {
}
/**
*
* returned_rate
*/
private String resolveInvoiceStatus(Long contractId) {
List<ErpFinInvoiceInfo> invoices = finInvoiceInfoMapper.selectList(Wrappers.<ErpFinInvoiceInfo>lambdaQuery()
@ -776,9 +776,8 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService {
if (CollUtil.isEmpty(invoices)) {
return OrderInvoiceStatusConstant.NOT_INVOICED;
}
boolean hasCompleted = false;
boolean hasInProgress = false;
BigDecimal completedAmount = BigDecimal.ZERO;
boolean hasCompleted = false;
for (ErpFinInvoiceInfo invoice : invoices) {
if (OAStatusEnum.APPROVING.getStatus().equals(invoice.getInvoiceStatus())
|| BusinessStatusEnum.WAITING.getStatus().equals(invoice.getFlowStatus())) {
@ -786,19 +785,16 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService {
}
if (OAStatusEnum.COMPLETED.getStatus().equals(invoice.getInvoiceStatus())) {
hasCompleted = true;
if (invoice.getIssueAmount() != null) {
completedAmount = completedAmount.add(invoice.getIssueAmount());
if (invoice.getReturnedRate() != null
&& invoice.getReturnedRate().compareTo(BigDecimal.valueOf(100)) == 0) {
return OrderInvoiceStatusConstant.INVOICED;
}
}
}
if (!hasCompleted) {
return hasInProgress ? OrderInvoiceStatusConstant.PARTIAL_INVOICED : OrderInvoiceStatusConstant.NOT_INVOICED;
if (hasCompleted || hasInProgress) {
return OrderInvoiceStatusConstant.PARTIAL_INVOICED;
}
BigDecimal contractAmount = resolveContractAmount(contractId);
if (contractAmount.compareTo(BigDecimal.ZERO) <= 0 || completedAmount.compareTo(contractAmount) >= 0) {
return OrderInvoiceStatusConstant.INVOICED;
}
return OrderInvoiceStatusConstant.PARTIAL_INVOICED;
return OrderInvoiceStatusConstant.NOT_INVOICED;
}
/**

@ -2,6 +2,8 @@ package org.dromara.oa.erp.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.enums.OAStatusEnum;
@ -246,6 +248,33 @@ public class ErpFinInvoiceInfoServiceImpl extends AbstractWorkflowService<ErpFin
&& entity.getIssuancePercentage().compareTo(ONE_HUNDRED) > 0) {
throw new ServiceException("本次开具发票比例不能超过100%");
}
validContractIssuancePercentageTotal(entity);
}
/**
* 100%
*/
private void validContractIssuancePercentageTotal(ErpFinInvoiceInfo entity) {
if (entity.getContractId() == null) {
return;
}
BigDecimal currentPercentage = entity.getIssuancePercentage() == null ? ZERO : entity.getIssuancePercentage();
LambdaQueryWrapper<ErpFinInvoiceInfo> qw = Wrappers.lambdaQuery(ErpFinInvoiceInfo.class)
.eq(ErpFinInvoiceInfo::getContractId, entity.getContractId())
.eq(ErpFinInvoiceInfo::getDelFlag, "0")
.ne(ErpFinInvoiceInfo::getInvoiceStatus, OAStatusEnum.INVALID.getStatus());
if (entity.getInvoiceId() != null) {
qw.ne(ErpFinInvoiceInfo::getInvoiceId, entity.getInvoiceId());
}
List<ErpFinInvoiceInfo> existingList = baseMapper.selectList(qw);
BigDecimal totalPercentage = existingList.stream()
.map(ErpFinInvoiceInfo::getIssuancePercentage)
.filter(Objects::nonNull)
.reduce(ZERO, BigDecimal::add)
.add(currentPercentage);
if (totalPercentage.compareTo(ONE_HUNDRED) > 0) {
throw new ServiceException("同一合同本次开具发票比例之和不能超过100%");
}
}
private void validInvoiceDetailList(List<ErpFinInvoiceDetail> detailList) {

@ -1,7 +1,7 @@
package org.dromara.oa.workflow.strategy;
import org.dromara.common.core.enums.OAStatusEnum;
import org.dromara.oa.erp.domain.bo.ErpBudgetInfoBo;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.oa.erp.domain.bo.ErpFinInvoiceInfoBo;
import org.dromara.workflow.enums.FlowConfigEnum;
import org.dromara.workflow.strategy.WorkflowStrategy;
@ -39,6 +39,7 @@ public class InvoiceWorkflowStrategy implements WorkflowStrategy<ErpFinInvoiceIn
variables.put("projectId", bo.getProjectId());
variables.put("projectName", bo.getProjectName());
variables.put("earlyFlag", bo.getEarlyFlag());
variables.put("managerId", bo.getManagerId());
return variables;
}
@ -46,4 +47,13 @@ public class InvoiceWorkflowStrategy implements WorkflowStrategy<ErpFinInvoiceIn
public FlowConfigEnum getFlowConfig(ErpFinInvoiceInfoBo bo) {
return FlowConfigEnum.INVOICE;
}
@Override
public String getBusinessTitle(ErpFinInvoiceInfoBo bo) {
String title = getFlowConfig(bo).getBusinessTitle();
if (StringUtils.isNotBlank(bo.getProjectName())) {
return bo.getProjectName() + title;
}
return title;
}
}

Loading…
Cancel
Save