mirror of
https://gitee.com/guchengwuyue/crm.git
synced 2026-06-06 02:38:44 +08:00
合同回款发票流程审核优化
This commit is contained in:
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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());
|
||||
//判断当前步骤是不是最后一个人,如果是 开始审核后开始存储下一步信息
|
||||
|
||||
@ -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());
|
||||
//判断当前步骤是不是最后一个人,如果是 开始审核后开始存储下一步信息
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
@ -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)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新
|
||||
createFlowStepList(flowId, list);
|
||||
flowStepMapper.updateBatch(list);
|
||||
// deleteFlowStepByFlowId(flowId);
|
||||
// list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新
|
||||
// createFlowStepList(flowId, list);
|
||||
}
|
||||
|
||||
private void deleteFlowStepByFlowId(Long flowId) {
|
||||
flowStepMapper.deleteByFlowId(flowId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteFlowStep(Long id) {
|
||||
flowStepMapper.deleteById(id);
|
||||
}
|
||||
|
||||
}
|
||||
@ -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());
|
||||
//判断当前步骤是不是最后一个人,如果是 开始审核后开始存储下一步信息
|
||||
|
||||
Reference in New Issue
Block a user