合同回款发票流程审核优化

This commit is contained in:
hupeng
2024-12-20 13:21:50 +08:00
parent 23fab5997a
commit 39738fcb9d
8 changed files with 78 additions and 21 deletions

View File

@ -27,7 +27,7 @@
<url>https://gitee.com/guchengwuyue/yshop-crm</url>
<properties>
<revision>1.0.0</revision>
<revision>1.1.3</revision>
<!-- Maven 相关 -->
<java.version>17</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>

View File

@ -14,7 +14,7 @@
<url>https://gitee.com/guchengwuyue/yshop-crm</url>
<properties>
<revision>1.0.0</revision>
<revision>1.1.3</revision>
<flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
<!-- 统一依赖管理 -->
<spring.boot.version>3.2.2</spring.boot.version>

View File

@ -95,7 +95,15 @@ public class CrmFlowController {
@Operation(summary = "获得审批人列表")
@Parameter(name = "flowType", description = "contract")
public CommonResult<List<Long>> getFlowUserIds(@RequestParam("flowType") String flowType) {
return success(flowService.getFlowUserIds(flowType));
return success(flowService.getFlowUserIds(flowType,0L));
}
@DeleteMapping("/delete-step")
@Operation(summary = "删除审批步骤")
@Parameter(name = "id", description = "编号", required = true)
public CommonResult<Boolean> deleteFlowStep(@RequestParam("id") Long id) {
flowService.deleteFlowStep(id);
return success(true);
}

View File

@ -34,6 +34,7 @@ import co.yixiang.yshop.module.crm.enums.ContractStatusEnum;
import co.yixiang.yshop.module.crm.enums.FlowStepEnum;
import co.yixiang.yshop.module.crm.enums.RelationEnum;
import co.yixiang.yshop.module.crm.enums.TypesEnum;
import co.yixiang.yshop.module.crm.service.crmflow.CrmFlowService;
import co.yixiang.yshop.module.crm.service.crmoperatelog.CrmOperatelogService;
import co.yixiang.yshop.module.product.dal.dataobject.storeproductattrvalue.StoreProductAttrValueDO;
import co.yixiang.yshop.module.product.dal.mysql.storeproduct.StoreProductMapper;
@ -102,6 +103,8 @@ public class CrmContractServiceImpl implements CrmContractService {
private CrmOperatelogService crmOperatelogService;
@Resource
private AdminUserApi adminUserApi;
@Resource
private CrmFlowService flowService;
private static final String LOCK_KEY = "contract:check:lock";
@ -294,6 +297,15 @@ public class CrmContractServiceImpl implements CrmContractService {
.nickname(SecurityFrameworkUtils.getLoginUserNickname())
.build();
CrmFlowStepDO crmFlowStepDO = flowStepMapper.selectById(crmContractDO.getStepId());
if(crmFlowStepDO == null){
throw exception(new ErrorCode(202412042,"当前审核人不存在无法审核!"));
}
List<Long> userIds = flowService.getFlowUserIds("",crmFlowStepDO.getId());
if(!userIds.contains(loginAdminId)){
throw exception(new ErrorCode(202412041,"当前审核人已经变更无法审核!"));
}
RLock lock = redissonClient.getLock(LOCK_KEY);
if (lock.tryLock()) {
//加锁防止并发审核
@ -306,7 +318,6 @@ public class CrmContractServiceImpl implements CrmContractService {
crmContractDO.setCheckAdminId(checkAdminId);
if(ShopCommonEnum.AGREE_1.getValue().equals(checkInfoVO.getAgreeType())){
//查询当前合同处于那一步骤
CrmFlowStepDO crmFlowStepDO = flowStepMapper.selectById(crmContractDO.getStepId());
if(crmFlowStepDO.getRelation() < count){
crmContractDO.setCheckStatus(ContractStatusEnum.STATUS_1.getValue());
//判断当前步骤是不是最后一个人,如果是 开始审核后开始存储下一步信息

View File

@ -24,6 +24,7 @@ import co.yixiang.yshop.module.crm.enums.ContractStatusEnum;
import co.yixiang.yshop.module.crm.enums.FlowStepEnum;
import co.yixiang.yshop.module.crm.enums.RelationEnum;
import co.yixiang.yshop.module.crm.enums.TypesEnum;
import co.yixiang.yshop.module.crm.service.crmflow.CrmFlowService;
import co.yixiang.yshop.module.crm.service.crmoperatelog.CrmOperatelogService;
import co.yixiang.yshop.module.system.api.user.AdminUserApi;
import co.yixiang.yshop.module.system.dal.dataobject.user.AdminUserDO;
@ -85,6 +86,8 @@ public class CrmContractReceivablesServiceImpl implements CrmContractReceivables
private CrmFlowLogMapper crmFlowLogMapper;
@Resource
private AdminUserApi adminUserApi;
@Resource
private CrmFlowService flowService;
private static final String LOCK_KEY = "receivables:check:lock";
@ -238,6 +241,16 @@ public class CrmContractReceivablesServiceImpl implements CrmContractReceivables
.nickname(SecurityFrameworkUtils.getLoginUserNickname())
.build();
CrmFlowStepDO crmFlowStepDO = flowStepMapper.selectById(receivablesDO.getStepId());
if(crmFlowStepDO == null){
throw exception(new ErrorCode(202412044,"当前审核人不存在无法审核!"));
}
List<Long> userIds = flowService.getFlowUserIds("",crmFlowStepDO.getId());
if(!userIds.contains(loginAdminId)){
throw exception(new ErrorCode(202412043,"当前审核人已经变更无法审核!"));
}
RLock lock = redissonClient.getLock(LOCK_KEY);
if (lock.tryLock()) {
//加锁防止并发审核
@ -250,7 +263,6 @@ public class CrmContractReceivablesServiceImpl implements CrmContractReceivables
receivablesDO.setCheckAdminId(checkAdminId);
if(ShopCommonEnum.AGREE_1.getValue().equals(checkInfoVO.getAgreeType())){
//查询当前合同处于那一步骤
CrmFlowStepDO crmFlowStepDO = flowStepMapper.selectById(receivablesDO.getStepId());
if(crmFlowStepDO.getRelation() < count){
receivablesDO.setCheckStatus(ContractStatusEnum.STATUS_1.getValue());
//判断当前步骤是不是最后一个人,如果是 开始审核后开始存储下一步信息

View File

@ -66,8 +66,11 @@ public interface CrmFlowService {
/**
* 获取第一级审核人
* @param flowType
* @param stepId 不揍ID
* @return
*/
List<Long> getFlowUserIds(String flowType);
List<Long> getFlowUserIds(String flowType,Long stepId);
void deleteFlowStep(Long id);
}

View File

@ -107,19 +107,25 @@ public class CrmFlowServiceImpl implements CrmFlowService {
}
@Override
public List<Long> getFlowUserIds(String flowType) {
public List<Long> getFlowUserIds(String flowType,Long stepId) {
List<Long> list = new ArrayList<>();
CrmFlowDO crmFlowDO = flowMapper.selectOne(new LambdaQueryWrapper<CrmFlowDO>()
.eq(CrmFlowDO::getTypes,flowType)
.orderByDesc(CrmFlowDO::getId)
.last("limit 1"));
if(crmFlowDO == null){
return list;
CrmFlowStepDO crmFlowStepDO = null;
if(stepId > 0){
crmFlowStepDO = flowStepMapper.selectById(stepId);
}else{
CrmFlowDO crmFlowDO = flowMapper.selectOne(new LambdaQueryWrapper<CrmFlowDO>()
.eq(CrmFlowDO::getTypes,flowType)
.orderByDesc(CrmFlowDO::getId)
.last("limit 1"));
if(crmFlowDO == null){
return list;
}
crmFlowStepDO = flowStepMapper.selectOne(new LambdaQueryWrapper<CrmFlowStepDO>()
.eq(CrmFlowStepDO::getFlowId,crmFlowDO.getId())
.orderByAsc(CrmFlowStepDO::getId)
.last("limit 1"));
}
CrmFlowStepDO crmFlowStepDO = flowStepMapper.selectOne(new LambdaQueryWrapper<CrmFlowStepDO>()
.eq(CrmFlowStepDO::getFlowId,crmFlowDO.getId())
.orderByAsc(CrmFlowStepDO::getId)
.last("limit 1"));
if(FlowStepEnum.TYPE_2.getValue().equals(crmFlowStepDO.getType())){
list.add(crmFlowStepDO.getAdminIds());
}else if(FlowStepEnum.TYPE_3.getValue().equals(crmFlowStepDO.getType())){
@ -143,13 +149,19 @@ public class CrmFlowServiceImpl implements CrmFlowService {
}
private void updateFlowStepList(Long flowId, List<CrmFlowStepDO> list) {
deleteFlowStepByFlowId(flowId);
list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
createFlowStepList(flowId, list);
flowStepMapper.updateBatch(list);
// deleteFlowStepByFlowId(flowId);
// list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
// createFlowStepList(flowId, list);
}
private void deleteFlowStepByFlowId(Long flowId) {
flowStepMapper.deleteByFlowId(flowId);
}
@Override
public void deleteFlowStep(Long id) {
flowStepMapper.deleteById(id);
}
}

View File

@ -26,6 +26,7 @@ import co.yixiang.yshop.module.crm.dal.mysql.crmflow.CrmFlowStepMapper;
import co.yixiang.yshop.module.crm.dal.mysql.crmflowlog.CrmFlowLogMapper;
import co.yixiang.yshop.module.crm.dal.mysql.crminvoice.CrmInvoiceMapper;
import co.yixiang.yshop.module.crm.enums.*;
import co.yixiang.yshop.module.crm.service.crmflow.CrmFlowService;
import co.yixiang.yshop.module.system.api.user.AdminUserApi;
import co.yixiang.yshop.module.system.dal.dataobject.user.AdminUserDO;
import co.yixiang.yshop.module.system.dal.mysql.user.AdminUserMapper;
@ -79,6 +80,8 @@ public class CrmInvoiceServiceImpl implements CrmInvoiceService {
private AdminUserMapper userMapper;
@Resource
private CrmFlowLogMapper crmFlowLogMapper;
@Resource
private CrmFlowService flowService;
private static final String LOCK_KEY = "invoice:check:lock";
@ -225,6 +228,15 @@ public class CrmInvoiceServiceImpl implements CrmInvoiceService {
.nickname(SecurityFrameworkUtils.getLoginUserNickname())
.build();
CrmFlowStepDO crmFlowStepDO = flowStepMapper.selectById(invoiceDO.getStepId());
if(crmFlowStepDO == null){
throw exception(new ErrorCode(202412045,"当前审核人不存在无法审核!"));
}
List<Long> userIds = flowService.getFlowUserIds("",crmFlowStepDO.getId());
if(!userIds.contains(loginAdminId)){
throw exception(new ErrorCode(202412046,"当前审核人已经变更无法审核!"));
}
RLock lock = redissonClient.getLock(LOCK_KEY);
if (lock.tryLock()) {
//加锁防止并发审核
@ -237,7 +249,6 @@ public class CrmInvoiceServiceImpl implements CrmInvoiceService {
invoiceDO.setCheckAdminId(checkAdminId);
if(ShopCommonEnum.AGREE_1.getValue().equals(checkInfoVO.getAgreeType())){
//查询当前合同处于那一步骤
CrmFlowStepDO crmFlowStepDO = flowStepMapper.selectById(invoiceDO.getStepId());
if(crmFlowStepDO.getRelation() < count){
invoiceDO.setCheckStatus(ContractStatusEnum.STATUS_1.getValue());
//判断当前步骤是不是最后一个人,如果是 开始审核后开始存储下一步信息