package com.highdatas.mdm.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.highdatas.mdm.entity.Flows;
import com.highdatas.mdm.entity.MaintainField;
import com.highdatas.mdm.entity.TUserRole;
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.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.highdatas.mdm.service.act.TaskService;
import com.highdatas.mdm.util.DbUtils;
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
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;
@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));
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;
}
String taskAssigneeUserId = nestTaskAssignee.getUserId();
if (!StringUtils.isEmpty(taskAssigneeUserId)){
return taskAssigneeUserId.equalsIgnoreCase(userId);
}
String roleId = nestTaskAssignee.getRoleId();
if (StringUtils.isEmpty(roleId)) {
return false;
}
List userRoles = userRoleService.selectList(new EntityWrapper().eq("role_id", roleId));
long count = userRoles.stream().map(tUserRole -> tUserRole.getUserId()).filter(s -> s.equalsIgnoreCase(userId)).count();
if (count == 0) {
return false;
}else {
return true;
}
}
@Override
public void aduitFinish(Flows flows) {
if (flows.getBusinessType().equals(ActivitiBusinessType.maintain)){
String maintainId = flows.getBusinessId();
masterModifiedService.dealFlow(maintainId, flows.getStatus());
maintainService.dealFlow(maintainId, flows.getStatus());
}
if (flows.getBusinessType().equals(ActivitiBusinessType.field)){
String maintainId = flows.getBusinessId();
maintainFieldService.dealFlow(maintainId, flows.getStatus());
}
}
}