package com.highdatas.mdm.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.highdatas.mdm.entity.Flows;
import com.highdatas.mdm.entity.MaintainField;
import com.highdatas.mdm.mapper.FlowsMapper;
import com.highdatas.mdm.mapper.SysFieldMapper;
import com.highdatas.mdm.pojo.ActivitiBusinessType;
import com.highdatas.mdm.pojo.ActivitiStatus;
import com.highdatas.mdm.pojo.NextTaskUserInfo;
import com.highdatas.mdm.service.*;
import com.highdatas.mdm.service.act.IdentityService;
import com.highdatas.mdm.service.act.TaskService;
import com.highdatas.mdm.util.DbUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
* 服务实现类
*
*
* @author kimi
* @since 2019-12-19
*/
@Service
@Slf4j
public class FlowsServiceImpl extends ServiceImpl implements IFlowsService {
@Autowired
IMaintainFieldService maintainFieldService;
@Autowired
TaskService taskService;
@Autowired
SysFieldMapper fieldMapper;
@Autowired
ITUserRoleService userRoleService;
@Autowired
IMasterModifiedService masterModifiedService;
@Autowired
IMaintainService maintainService;
@Autowired
IdentityService identityService;
@Autowired
ISysViewService viewService;
@Autowired
IMasterAuthorSubscribeService subscribeService;
@Autowired
ISysMenuService menuService;
@Override
public MaintainField createNowVerion(String tableName, String maintainId, String userId) {
MaintainField nowMaintain = maintainFieldService.getNextMaintain(tableName, userId);
// 搬运新版本字段
String maintainParams;
if (StringUtils.isEmpty(maintainId)) {
maintainParams = "maintain_field_id is null and table_name = " + DbUtils.quotedStr(tableName);
}else {
maintainParams = "maintain_field_id = " + DbUtils.quotedStr(maintainId);
}
if (nowMaintain != null) {
String maintainFieldId = DbUtils.quotedStr(nowMaintain.getId());
fieldMapper.tansNewVersion(maintainFieldId, maintainParams);
}
return nowMaintain;
}
@Override
public ActivitiStatus getStatusByBusinessId(String businessId) {
Flows flows = selectOne(new EntityWrapper().eq("business_id", businessId).orderBy("create_time desc"));
if (flows == null){
return null;
}
return flows.getStatus();
}
@Override
public boolean isNextAudit(Flows flows, String userId) {
NextTaskUserInfo nestTaskAssignee = taskService.getNestTaskAssignee(flows.getWorkflowId());
if (nestTaskAssignee == null){
return false;
}
List userIdList = nestTaskAssignee.getUserIdList();
if (userIdList.contains(userId)) {
return true;
}
List roleIdList = nestTaskAssignee.getRoleIdList();
if (roleIdList == null || roleIdList.isEmpty()) {
return false;
}
List roleByUser = identityService.getRoleByUser(userId);
if (roleByUser == null || roleByUser.isEmpty()) {
return false;
}
long count = roleByUser.stream().filter(roleId -> roleIdList.contains(roleId)).count();
if (count == 0) {
return false;
}else {
return true;
}
}
@Override
public void aduitFinish(Flows flows) {
// 新增线程
new Thread(() -> {
log.info("处理 生成版本后的操作");
if (flows.getBusinessType().equals(ActivitiBusinessType.maintain)){
String maintainId = flows.getBusinessId();
log.info("flow-maintain:" + maintainId);
masterModifiedService.dealFlow(maintainId, flows.getStatus());
log.info("flow-masterModifiedService end");
maintainService.dealFlow(maintainId, flows.getStatus());
log.info("flow-maintainService end");
viewService.dealFlow(maintainId, flows.getStatus());
log.info("flow-viewService end");
subscribeService.dealFlow(maintainId, flows.getStatus());
log.info("flow-subscribeService end");
menuService.dealFlow(maintainId, flows.getStatus(), flows.getUserId());
log.info("flow-menuService end");
}
if (flows.getBusinessType().equals(ActivitiBusinessType.field)){
String maintainId = flows.getBusinessId();
maintainFieldService.dealFlow(maintainId, flows.getStatus());
}
}).start();
}
}