Commit f8b26ff2 by yuwei

项目初始化

parent 7554d4e3
...@@ -81,7 +81,7 @@ public class ServiceIntegrationServiceImpl extends BaseServiceImpl<ServiceIntegr ...@@ -81,7 +81,7 @@ public class ServiceIntegrationServiceImpl extends BaseServiceImpl<ServiceIntegr
MD5Util mt = null; MD5Util mt = null;
try { try {
mt = MD5Util.getInstance(); mt = MD5Util.getInstance();
serviceHeader.setSecretKey(mt.encode(id)); serviceHeader.setServiceKey(mt.encode(id));
serviceHeader.setSecretKey(mt.encode(SecurityUtil.getUserId())); serviceHeader.setSecretKey(mt.encode(SecurityUtil.getUserId()));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
......
...@@ -242,6 +242,7 @@ public class ModelServiceImpl extends BaseServiceImpl<ModelDao, ModelEntity> imp ...@@ -242,6 +242,7 @@ public class ModelServiceImpl extends BaseServiceImpl<ModelDao, ModelEntity> imp
request.setSubmitter(SecurityUtil.getUserId()); request.setSubmitter(SecurityUtil.getUserId());
request.setBusinessKey(id); request.setBusinessKey(id);
request.setBusinessCode(DEFAULT_BUSINESS_CODE); request.setBusinessCode(DEFAULT_BUSINESS_CODE);
request.setBusinessAuditGroup(businessEntity.getBusinessAuditGroup());
String processDefinitionId = businessEntity.getProcessDefinitionId(); String processDefinitionId = businessEntity.getProcessDefinitionId();
request.setProcessDefinitionId(processDefinitionId); request.setProcessDefinitionId(processDefinitionId);
// 流程实例标题(动态拼接) // 流程实例标题(动态拼接)
......
...@@ -18,4 +18,11 @@ public class DataReportEntity implements Serializable { ...@@ -18,4 +18,11 @@ public class DataReportEntity implements Serializable {
private String ruleLevelId; private String ruleLevelId;
private String ruleLevelName; private String ruleLevelName;
private Integer checkErrorCount; private Integer checkErrorCount;
private String ruleTypeCode;
private String ruleTableName;
private String ruleTableComment;
private String ruleColumnName;
private String ruleColumnComment;
private Integer checkTotalCount;
} }
...@@ -33,4 +33,9 @@ public class RuleTypeEntity implements Serializable { ...@@ -33,4 +33,9 @@ public class RuleTypeEntity implements Serializable {
* 类型名称 * 类型名称
*/ */
private String name; private String name;
/**
* 类型编码
*/
private String code;
} }
...@@ -3,6 +3,9 @@ package cn.datax.service.data.quality.api.query; ...@@ -3,6 +3,9 @@ package cn.datax.service.data.quality.api.query;
import cn.datax.common.base.BaseQueryParams; import cn.datax.common.base.BaseQueryParams;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
/** /**
* <p> * <p>
...@@ -23,4 +26,6 @@ public class CheckReportQuery extends BaseQueryParams { ...@@ -23,4 +26,6 @@ public class CheckReportQuery extends BaseQueryParams {
private String ruleSource; private String ruleSource;
private String ruleTable; private String ruleTable;
private String ruleColumn; private String ruleColumn;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate checkDate;
} }
...@@ -19,4 +19,5 @@ public class RuleTypeVo implements Serializable { ...@@ -19,4 +19,5 @@ public class RuleTypeVo implements Serializable {
private String id; private String id;
private String name; private String name;
private String code;
} }
...@@ -21,7 +21,10 @@ import org.springframework.web.bind.annotation.*; ...@@ -21,7 +21,10 @@ import org.springframework.web.bind.annotation.*;
import cn.datax.common.base.BaseController; import cn.datax.common.base.BaseController;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -84,14 +87,26 @@ public class CheckReportController extends BaseController { ...@@ -84,14 +87,26 @@ public class CheckReportController extends BaseController {
} }
@GetMapping("/getReportBySource") @GetMapping("/getReportBySource")
public R getReportBySource() { public R getReportBySource(CheckReportQuery checkReportQuery) {
List<DataReportEntity> list = checkReportService.getReportBySource(); LocalDate checkDate = checkReportQuery.getCheckDate();
String date = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(checkDate);
List<DataReportEntity> list = checkReportService.getReportBySource(date);
return R.ok().setData(list); return R.ok().setData(list);
} }
@GetMapping("/getReportByType") @GetMapping("/getReportByType")
public R getReportByType() { public R getReportByType(CheckReportQuery checkReportQuery) {
List<DataReportEntity> list = checkReportService.getReportByType(); LocalDate checkDate = checkReportQuery.getCheckDate();
String date = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(checkDate);
List<DataReportEntity> list = checkReportService.getReportByType(date);
return R.ok().setData(list); return R.ok().setData(list);
} }
@GetMapping("/getReportDetail")
public R getReportDetail(CheckReportQuery checkReportQuery) {
LocalDate checkDate = checkReportQuery.getCheckDate();
String date = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(checkDate);
Map<String, Object> map = checkReportService.getReportDetail(date);
return R.ok().setData(map);
}
} }
...@@ -25,7 +25,9 @@ public interface CheckReportDao extends BaseDao<CheckReportEntity> { ...@@ -25,7 +25,9 @@ public interface CheckReportDao extends BaseDao<CheckReportEntity> {
@Override @Override
<E extends IPage<CheckReportEntity>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<CheckReportEntity> queryWrapper); <E extends IPage<CheckReportEntity>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<CheckReportEntity> queryWrapper);
List<DataReportEntity> getReportBySource(); List<DataReportEntity> getReportBySource(@Param("checkDate") String checkDate);
List<DataReportEntity> getReportByType(); List<DataReportEntity> getReportByType(@Param("checkDate") String checkDate);
List<DataReportEntity> getReportDetail(@Param("checkDate") String checkDate);
} }
...@@ -3,8 +3,10 @@ package cn.datax.service.data.quality.service; ...@@ -3,8 +3,10 @@ package cn.datax.service.data.quality.service;
import cn.datax.service.data.quality.api.entity.CheckReportEntity; import cn.datax.service.data.quality.api.entity.CheckReportEntity;
import cn.datax.common.base.BaseService; import cn.datax.common.base.BaseService;
import cn.datax.service.data.quality.api.entity.DataReportEntity; import cn.datax.service.data.quality.api.entity.DataReportEntity;
import cn.datax.service.data.quality.api.query.CheckReportQuery;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* <p> * <p>
...@@ -22,11 +24,13 @@ public interface CheckReportService extends BaseService<CheckReportEntity> { ...@@ -22,11 +24,13 @@ public interface CheckReportService extends BaseService<CheckReportEntity> {
* 按数据源统计 * 按数据源统计
* @return * @return
*/ */
List<DataReportEntity> getReportBySource(); List<DataReportEntity> getReportBySource(String checkDate);
/** /**
* 按规则类型统计 * 按规则类型统计
* @return * @return
*/ */
List<DataReportEntity> getReportByType(); List<DataReportEntity> getReportByType(String checkDate);
Map<String, Object> getReportDetail(String checkDate);
} }
...@@ -3,7 +3,10 @@ package cn.datax.service.data.quality.service.impl; ...@@ -3,7 +3,10 @@ package cn.datax.service.data.quality.service.impl;
import cn.datax.service.data.quality.api.entity.CheckReportEntity; import cn.datax.service.data.quality.api.entity.CheckReportEntity;
import cn.datax.service.data.quality.api.entity.DataReportEntity; import cn.datax.service.data.quality.api.entity.DataReportEntity;
import cn.datax.service.data.quality.api.entity.RuleLevelEntity; import cn.datax.service.data.quality.api.entity.RuleLevelEntity;
import cn.datax.service.data.quality.api.entity.RuleTypeEntity;
import cn.datax.service.data.quality.api.query.CheckReportQuery;
import cn.datax.service.data.quality.dao.RuleLevelDao; import cn.datax.service.data.quality.dao.RuleLevelDao;
import cn.datax.service.data.quality.dao.RuleTypeDao;
import cn.datax.service.data.quality.service.CheckReportService; import cn.datax.service.data.quality.service.CheckReportService;
import cn.datax.service.data.quality.mapstruct.CheckReportMapper; import cn.datax.service.data.quality.mapstruct.CheckReportMapper;
import cn.datax.service.data.quality.dao.CheckReportDao; import cn.datax.service.data.quality.dao.CheckReportDao;
...@@ -38,6 +41,9 @@ public class CheckReportServiceImpl extends BaseServiceImpl<CheckReportDao, Chec ...@@ -38,6 +41,9 @@ public class CheckReportServiceImpl extends BaseServiceImpl<CheckReportDao, Chec
@Autowired @Autowired
private RuleLevelDao ruleLevelDao; private RuleLevelDao ruleLevelDao;
@Autowired
private RuleTypeDao ruleTypeDao;
@Override @Override
public CheckReportEntity getCheckReportById(String id) { public CheckReportEntity getCheckReportById(String id) {
CheckReportEntity checkReportEntity = super.getById(id); CheckReportEntity checkReportEntity = super.getById(id);
...@@ -45,9 +51,9 @@ public class CheckReportServiceImpl extends BaseServiceImpl<CheckReportDao, Chec ...@@ -45,9 +51,9 @@ public class CheckReportServiceImpl extends BaseServiceImpl<CheckReportDao, Chec
} }
@Override @Override
public List<DataReportEntity> getReportBySource() { public List<DataReportEntity> getReportBySource(String checkDate) {
List<RuleLevelEntity> ruleLevelList = ruleLevelDao.selectList(Wrappers.emptyWrapper()); List<RuleLevelEntity> ruleLevelList = ruleLevelDao.selectList(Wrappers.emptyWrapper());
List<DataReportEntity> list = checkReportDao.getReportBySource(); List<DataReportEntity> list = checkReportDao.getReportBySource(checkDate);
// 补全数据 // 补全数据
List<DataReportEntity> differenceReportList = new ArrayList<>(); List<DataReportEntity> differenceReportList = new ArrayList<>();
// 补全数据源分组缺失的规则级别数据 // 补全数据源分组缺失的规则级别数据
...@@ -76,10 +82,22 @@ public class CheckReportServiceImpl extends BaseServiceImpl<CheckReportDao, Chec ...@@ -76,10 +82,22 @@ public class CheckReportServiceImpl extends BaseServiceImpl<CheckReportDao, Chec
} }
@Override @Override
public List<DataReportEntity> getReportByType() { public List<DataReportEntity> getReportByType(String checkDate) {
List<DataReportEntity> list = checkReportDao.getReportByType(); List<DataReportEntity> list = checkReportDao.getReportByType(checkDate);
// 排序 // 排序
list = list.stream().sorted(Comparator.comparing(DataReportEntity::getRuleTypeId)).collect(Collectors.toList()); list = list.stream().sorted(Comparator.comparing(DataReportEntity::getRuleTypeId)).collect(Collectors.toList());
return list; return list;
} }
@Override
public Map<String, Object> getReportDetail(String checkDate) {
Map<String, Object> map = new HashMap<>();
List<RuleTypeEntity> ruleTypeList = ruleTypeDao.selectList(Wrappers.emptyWrapper());
List<DataReportEntity> dataReportList = checkReportDao.getReportDetail(checkDate);
Map<String, List<DataReportEntity>> listMap = dataReportList.stream().collect(Collectors.groupingBy(DataReportEntity::getRuleTypeCode));
ruleTypeList.stream().forEach(s -> {
map.put(s.getCode(), listMap.get(s.getCode()));
});
return map;
}
} }
...@@ -53,12 +53,22 @@ ...@@ -53,12 +53,22 @@
<result column="check_error_count" property="checkErrorCount" /> <result column="check_error_count" property="checkErrorCount" />
</resultMap> </resultMap>
<resultMap id="ExtendReportResultMap" type="cn.datax.service.data.quality.api.entity.DataReportEntity" extends="ReportResultMap">
<result column="rule_type_code" property="ruleTypeCode" />
<result column="rule_table_name" property="ruleTableName" />
<result column="rule_table_comment" property="ruleTableComment" />
<result column="rule_column_name" property="ruleColumnName" />
<result column="rule_column_comment" property="ruleColumnComment" />
<result column="check_total_count" property="checkTotalCount" />
</resultMap>
<select id="getReportBySource" resultMap="ReportResultMap"> <select id="getReportBySource" resultMap="ReportResultMap">
SELECT temp.*, l.name AS rule_level_name from ( SELECT temp.*, l.name AS rule_level_name from (
SELECT r.rule_source_id, r.rule_source AS rule_source_name, r.rule_level_id, SELECT r.rule_source_id, r.rule_source AS rule_source_name, r.rule_level_id,
COALESCE(SUM(t.check_error_count), 0) AS check_error_count COALESCE(SUM(t.check_error_count), 0) AS check_error_count
FROM quality_check_rule r FROM quality_check_rule r
LEFT JOIN quality_check_report t ON t.check_batch = r.last_check_batch AND t.check_rule_id = r.id LEFT JOIN quality_check_report t ON t.check_rule_id = r.id and
t.check_date = (select max(check_date) from quality_check_report where check_rule_id = r.id and date(check_date) = #{checkDate})
GROUP BY r.rule_source_id, r.rule_source, r.rule_level_id GROUP BY r.rule_source_id, r.rule_source, r.rule_level_id
) temp LEFT JOIN quality_rule_level l ON l.id = temp.rule_level_id ) temp LEFT JOIN quality_rule_level l ON l.id = temp.rule_level_id
</select> </select>
...@@ -67,9 +77,22 @@ ...@@ -67,9 +77,22 @@
SELECT type.id AS rule_type_id, type.name AS rule_type_name, rule.id AS rule_id, rule.rule_name, SELECT type.id AS rule_type_id, type.name AS rule_type_name, rule.id AS rule_id, rule.rule_name,
level.id AS rule_level_id, level.name AS rule_level_name, COALESCE(report.check_error_count, 0) AS check_error_count level.id AS rule_level_id, level.name AS rule_level_name, COALESCE(report.check_error_count, 0) AS check_error_count
FROM quality_check_rule rule FROM quality_check_rule rule
LEFT JOIN quality_check_report report ON report.check_batch = rule.last_check_batch and report.check_rule_id = rule.id
LEFT JOIN quality_rule_type type ON type.id = rule.rule_type_id LEFT JOIN quality_rule_type type ON type.id = rule.rule_type_id
LEFT JOIN quality_rule_level level ON level.id = rule.rule_level_id LEFT JOIN quality_rule_level level ON level.id = rule.rule_level_id
LEFT JOIN quality_check_report report ON report.check_rule_id = rule.id AND
report.check_date = (select max(check_date) from quality_check_report where check_rule_id = rule.id and date(check_date) = #{checkDate})
</select>
<select id="getReportDetail" resultMap="ExtendReportResultMap">
SELECT type.id AS rule_type_id, type.code AS rule_type_code,
level.id AS rule_level_id, level.name AS rule_level_name,
rule.id AS rule_id, rule.rule_name, rule.rule_source AS rule_source_name, rule.rule_table AS rule_table_name, rule.rule_table_comment, rule.rule_column AS rule_column_name, rule.rule_column_comment,
COALESCE(report.check_total_count, 0) AS check_total_count, COALESCE(report.check_error_count, 0) AS check_error_count
FROM quality_check_rule rule
LEFT JOIN quality_rule_type type ON type.id = rule.rule_type_id
LEFT JOIN quality_rule_level level ON level.id = rule.rule_level_id
LEFT JOIN quality_check_report report ON report.check_rule_id = rule.id AND
report.check_date = (select max(check_date) from quality_check_report where check_rule_id = rule.id and date(check_date) = #{checkDate})
</select> </select>
</mapper> </mapper>
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
<resultMap id="BaseResultMap" type="cn.datax.service.data.quality.api.entity.RuleTypeEntity"> <resultMap id="BaseResultMap" type="cn.datax.service.data.quality.api.entity.RuleTypeEntity">
<result column="id" property="id" /> <result column="id" property="id" />
<result column="name" property="name" /> <result column="name" property="name" />
<result column="code" property="code" />
</resultMap> </resultMap>
<resultMap id="ExtendResultMap" type="cn.datax.service.data.quality.api.entity.RuleTypeReportEntity" extends="BaseResultMap"> <resultMap id="ExtendResultMap" type="cn.datax.service.data.quality.api.entity.RuleTypeReportEntity" extends="BaseResultMap">
...@@ -15,7 +16,7 @@ ...@@ -15,7 +16,7 @@
<!-- 通用查询结果列 --> <!-- 通用查询结果列 -->
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, id,
name name, code
</sql> </sql>
<select id="selectListForReport" resultMap="ExtendResultMap"> <select id="selectListForReport" resultMap="ExtendResultMap">
......
...@@ -34,6 +34,9 @@ public class BusinessDto implements Serializable { ...@@ -34,6 +34,9 @@ public class BusinessDto implements Serializable {
@ApiModelProperty(value = "业务组件") @ApiModelProperty(value = "业务组件")
@NotBlank(message = "业务组件不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class}) @NotBlank(message = "业务组件不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String businessComponent; private String businessComponent;
@ApiModelProperty(value = "业务审核用户组")
@NotBlank(message = "业务审核用户组不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String businessAuditGroup;
@ApiModelProperty(value = "流程定义ID") @ApiModelProperty(value = "流程定义ID")
@NotBlank(message = "流程定义ID不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class}) @NotBlank(message = "流程定义ID不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String processDefinitionId; private String processDefinitionId;
......
...@@ -25,6 +25,8 @@ public class ProcessInstanceCreateRequest implements Serializable { ...@@ -25,6 +25,8 @@ public class ProcessInstanceCreateRequest implements Serializable {
private String businessCode; private String businessCode;
@ApiModelProperty(value = "业务名称") @ApiModelProperty(value = "业务名称")
private String businessName; private String businessName;
@ApiModelProperty(value = "业务审核用户组")
private String businessAuditGroup;
@ApiModelProperty(value = "流程参数") @ApiModelProperty(value = "流程参数")
private Map<String, Object> variables = new HashMap<>(); private Map<String, Object> variables = new HashMap<>();
...@@ -33,6 +35,7 @@ public class ProcessInstanceCreateRequest implements Serializable { ...@@ -33,6 +35,7 @@ public class ProcessInstanceCreateRequest implements Serializable {
variables.put(VariablesEnum.businessKey.toString(), businessKey); variables.put(VariablesEnum.businessKey.toString(), businessKey);
variables.put(VariablesEnum.businessCode.toString(), businessCode); variables.put(VariablesEnum.businessCode.toString(), businessCode);
variables.put(VariablesEnum.businessName.toString(), businessName); variables.put(VariablesEnum.businessName.toString(), businessName);
variables.put(VariablesEnum.businessAuditGroup.toString(), businessAuditGroup);
return variables; return variables;
} }
} }
...@@ -38,6 +38,11 @@ public class BusinessEntity extends DataScopeBaseEntity { ...@@ -38,6 +38,11 @@ public class BusinessEntity extends DataScopeBaseEntity {
private String businessComponent; private String businessComponent;
/** /**
* 业务审核用户组
*/
private String businessAuditGroup;
/**
* 流程定义ID * 流程定义ID
*/ */
private String processDefinitionId; private String processDefinitionId;
......
...@@ -35,6 +35,9 @@ public enum VariablesEnum { ...@@ -35,6 +35,9 @@ public enum VariablesEnum {
/** 业务主键 */ /** 业务主键 */
businessKey, businessKey,
/** 业务审核用户组 */
businessAuditGroup,
/** 审核结果 */ /** 审核结果 */
approved; approved;
} }
...@@ -26,6 +26,7 @@ public class BusinessVo implements Serializable { ...@@ -26,6 +26,7 @@ public class BusinessVo implements Serializable {
private String businessCode; private String businessCode;
private String businessName; private String businessName;
private String businessComponent; private String businessComponent;
private String businessAuditGroup;
private String processDefinitionId; private String processDefinitionId;
private String businessTempalte; private String businessTempalte;
} }
package cn.datax.service.workflow.flowable; package cn.datax.service.workflow.flowable;
import cn.datax.common.utils.SpringContextHolder; import cn.datax.common.utils.SpringContextHolder;
import cn.datax.service.workflow.api.enums.VariablesEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.TaskService; import org.flowable.engine.TaskService;
import org.flowable.task.service.delegate.DelegateTask; import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener; import org.flowable.task.service.delegate.TaskListener;
import java.util.Map;
@Slf4j @Slf4j
public class FinalAuditCreateTaskListener implements TaskListener { public class FinalAuditCreateTaskListener implements TaskListener {
@Override @Override
public void notify(DelegateTask delegateTask) { public void notify(DelegateTask delegateTask) {
log.info("进入终审节点用户任务启动监听器"); log.info("进入终审节点用户任务启动监听器");
TaskService taskService = SpringContextHolder.getBean(TaskService.class); Map<String, Object> variables = delegateTask.getVariables();
taskService.setAssignee(delegateTask.getId(), "1214835832967581698");
// taskService.addCandidateUser(delegateTask.getId(), "");
// taskService.addCandidateGroup(delegateTask.getId(), "");
log.info("Variables:{}", delegateTask.getVariables()); log.info("Variables:{}", delegateTask.getVariables());
log.info("任务执行人:{}", delegateTask.getAssignee()); log.info("任务执行人:{}", delegateTask.getAssignee());
log.info("任务配置ID: {}", delegateTask.getTaskDefinitionKey()); log.info("任务配置ID: {}", delegateTask.getTaskDefinitionKey());
TaskService taskService = SpringContextHolder.getBean(TaskService.class);
String businessAuditGroup = (String) variables.get(VariablesEnum.businessAuditGroup.toString());
taskService.addCandidateGroup(delegateTask.getId(), businessAuditGroup);
// taskService.setAssignee(delegateTask.getId(), "1214835832967581698");
// taskService.addCandidateUser(delegateTask.getId(), "");
// taskService.addCandidateGroup(delegateTask.getId(), "");
log.info("退出终审节点用户任务启动监听器"); log.info("退出终审节点用户任务启动监听器");
} }
} }
package cn.datax.service.workflow.flowable; package cn.datax.service.workflow.flowable;
import cn.datax.common.utils.SpringContextHolder; import cn.datax.common.utils.SpringContextHolder;
import cn.datax.service.workflow.api.enums.VariablesEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.TaskService; import org.flowable.engine.TaskService;
import org.flowable.task.service.delegate.DelegateTask; import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener; import org.flowable.task.service.delegate.TaskListener;
import java.util.Map;
@Slf4j @Slf4j
public class InitialAuditCreateTaskListener implements TaskListener { public class InitialAuditCreateTaskListener implements TaskListener {
@Override @Override
public void notify(DelegateTask delegateTask) { public void notify(DelegateTask delegateTask) {
log.info("进入初审节点用户任务启动监听器"); log.info("进入初审节点用户任务启动监听器");
Map<String, Object> variables = delegateTask.getVariables();
log.info("Variables:{}", variables);
log.info("任务执行人:{}", delegateTask.getAssignee());
log.info("任务配置ID: {}", delegateTask.getTaskDefinitionKey());
TaskService taskService = SpringContextHolder.getBean(TaskService.class); TaskService taskService = SpringContextHolder.getBean(TaskService.class);
String businessAuditGroup = (String) variables.get(VariablesEnum.businessAuditGroup.toString());
taskService.addCandidateGroup(delegateTask.getId(), businessAuditGroup);
// taskService.setAssignee(delegateTask.getId(), "1214835832967581698"); // taskService.setAssignee(delegateTask.getId(), "1214835832967581698");
// taskService.addCandidateUser(delegateTask.getId(), ""); // taskService.addCandidateUser(delegateTask.getId(), "");
taskService.addCandidateGroup(delegateTask.getId(), "1214826565321543682"); // taskService.addCandidateGroup(delegateTask.getId(), "");
log.info("Variables:{}", delegateTask.getVariables());
log.info("任务执行人:{}", delegateTask.getAssignee());
log.info("任务配置ID: {}", delegateTask.getTaskDefinitionKey());
log.info("退出初审节点用户任务启动监听器"); log.info("退出初审节点用户任务启动监听器");
} }
} }
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
<result column="business_code" property="businessCode" /> <result column="business_code" property="businessCode" />
<result column="business_name" property="businessName" /> <result column="business_name" property="businessName" />
<result column="business_component" property="businessComponent" /> <result column="business_component" property="businessComponent" />
<result column="business_audit_group" property="businessAuditGroup" />
<result column="process_definition_id" property="processDefinitionId" /> <result column="process_definition_id" property="processDefinitionId" />
<result column="business_tempalte" property="businessTempalte" /> <result column="business_tempalte" property="businessTempalte" />
</resultMap> </resultMap>
...@@ -28,7 +29,7 @@ ...@@ -28,7 +29,7 @@
create_dept, create_dept,
update_by, update_by,
update_time, update_time,
remark, business_code, business_name, business_component, process_definition_id, business_tempalte remark, business_code, business_name, business_component, business_audit_group, process_definition_id, business_tempalte
</sql> </sql>
</mapper> </mapper>
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
"element-ui": "2.13.2", "element-ui": "2.13.2",
"good-storage": "^1.1.1", "good-storage": "^1.1.1",
"jsplumb": "^2.14.6", "jsplumb": "^2.14.6",
"moment": "^2.29.1",
"normalize.css": "7.0.0", "normalize.css": "7.0.0",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"path-to-regexp": "2.4.0", "path-to-regexp": "2.4.0",
......
...@@ -16,16 +16,26 @@ export function pageCheckReport(data) { ...@@ -16,16 +16,26 @@ export function pageCheckReport(data) {
}) })
} }
export function getReportBySource() { export function getReportBySource(data) {
return request({ return request({
url: '/data/quality/checkReports/getReportBySource', url: '/data/quality/checkReports/getReportBySource',
method: 'get' method: 'get',
params: data
}) })
} }
export function getReportByType() { export function getReportByType(data) {
return request({ return request({
url: '/data/quality/checkReports/getReportByType', url: '/data/quality/checkReports/getReportByType',
method: 'get' method: 'get',
params: data
})
}
export function getReportDetail(data) {
return request({
url: '/data/quality/checkReports/getReportDetail',
method: 'get',
params: data
}) })
} }
...@@ -83,3 +83,11 @@ export function updateUser(data) { ...@@ -83,3 +83,11 @@ export function updateUser(data) {
data: data data: data
}) })
} }
export function updatePassword(data) {
return request({
url: '/system/users/' + data.id + '/password',
method: 'put',
data: data
})
}
<template>
<el-dialog title="修改密码" width="30%" center append-to-body :show-close="false" :close-on-click-modal="false" :visible.sync="dialogVisible">
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="旧密码" prop="oldPassword">
<el-input v-model="form.oldPassword" type="password" placeholder="请输入旧密码" />
</el-form-item>
<el-form-item label="新密码" prop="password">
<el-input v-model="form.password" type="password" placeholder="请输入新密码" />
</el-form-item>
<el-form-item label="确认密码" prop="confirmPassword">
<el-input v-model="form.confirmPassword" type="password" placeholder="请确认密码" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" :loading="loadingOptions.loading" :disabled="loadingOptions.disabled" @click="submitForm()">保存</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</span>
</el-dialog>
</template>
<script>
import { updatePassword } from '@/api/system/user'
export default {
name: 'ChangePassword',
props: {
visible: {
type: Boolean,
default: function() {
return false
}
},
id: {
type: String,
default: function() {
return ''
}
}
},
data() {
// 确认密码验证
const validatePass = (rule, value, callback) => {
if (value.length < 1) {
return callback(new Error('确认密码不能为空'))
} else if (value !== this.form.password) {
return callback(new Error('两次输入密码不一致'))
} else {
callback()
}
}
return {
// 保存按钮
loadingOptions: {
loading: false,
disabled: false
},
form: {
id: undefined,
oldPassword: undefined,
password: undefined,
confirmPassword: undefined
},
rules: {
oldPassword: [
{ required: true, message: '旧密码不能为空', trigger: 'blur' }
],
password: [
{ required: true, message: '新密码不能为空', trigger: 'blur' },
{ min: 6, max: 16, message: '长度在6到16个字符', trigger: 'blur' }
],
confirmPassword: [
{ required: true, validator: validatePass, trigger: 'blur' }
]
}
}
},
computed: {
dialogVisible: {
get() {
return this.visible
},
set(val) {
this.$emit('update:visible', val)
}
}
},
created() {
this.form.id = this.id
},
methods: {
submitForm() {
this.$refs['form'].validate(valid => {
if (valid) {
this.loadingOptions.loading = true
this.loadingOptions.disabled = true
updatePassword(this.form).then(response => {
if (response.success) {
this.$message.success('保存成功')
setTimeout(() => {
// 2秒后跳转登录页
this.dialogVisible = false
this.$emit('handlePasswordFinished')
}, 2000)
} else {
this.$message.error('保存失败')
this.loadingOptions.loading = false
this.loadingOptions.disabled = false
}
}).catch(() => {
this.loadingOptions.loading = false
this.loadingOptions.disabled = false
})
}
})
}
}
}
</script>
<style lang="scss" scoped>
</style>
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<i class="el-icon-arrow-down el-icon--right"></i> <i class="el-icon-arrow-down el-icon--right"></i>
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item> <el-dropdown-item @click.native="handlePassword">
<i style="padding-right: 8px" class="el-icon-user"></i>修改密码 <i style="padding-right: 8px" class="el-icon-user"></i>修改密码
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item @click.native="logout"> <el-dropdown-item @click.native="logout">
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</div> </div>
<change-password :visible.sync="dialogHandlePasswordVisible" :id="user.id" @handlePasswordFinished="logout" />
</div> </div>
</template> </template>
...@@ -50,17 +51,20 @@ import AppLink from './Sidebar/Link' ...@@ -50,17 +51,20 @@ import AppLink from './Sidebar/Link'
import variables from '@/styles/variables.scss' import variables from '@/styles/variables.scss'
import { isExternal } from '@/utils/validate' import { isExternal } from '@/utils/validate'
import Screenfull from '@/components/Screenfull' import Screenfull from '@/components/Screenfull'
import ChangePassword from './Password'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
export default { export default {
name: 'Topbar', name: 'Topbar',
components: { components: {
AppLink, AppLink,
Screenfull Screenfull,
ChangePassword
}, },
data() { data() {
return { return {
routes: this.$store.state.permission.routes routes: this.$store.state.permission.routes,
dialogHandlePasswordVisible: false
} }
}, },
computed: { computed: {
...@@ -172,6 +176,9 @@ export default { ...@@ -172,6 +176,9 @@ export default {
async logout() { async logout() {
await this.$store.dispatch('user/logout') await this.$store.dispatch('user/logout')
this.$router.push(`/login?redirect=${this.$route.fullPath}`) this.$router.push(`/login?redirect=${this.$route.fullPath}`)
},
handlePassword() {
this.dialogHandlePasswordVisible = true
} }
} }
} }
......
...@@ -14,13 +14,13 @@ export default { ...@@ -14,13 +14,13 @@ export default {
...mapGetters([ ...mapGetters([
'user' 'user'
]) ])
},
mounted() {
websocket.init()
},
beforeDestroy() {
websocket.close()
} }
// mounted() {
// websocket.init()
// },
// beforeDestroy() {
// websocket.close()
// }
} }
</script> </script>
......
...@@ -43,32 +43,31 @@ ...@@ -43,32 +43,31 @@
<el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="handleLogin">Login</el-button> <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="handleLogin">Login</el-button>
<div class="tips"> <!-- <div class="tips">-->
<span style="margin-right:20px;">username: admin</span> <!-- <span style="margin-right:20px;">username: admin</span>-->
<span> password: any</span> <!-- <span> password: any</span>-->
</div> <!-- </div>-->
</el-form> </el-form>
</div> </div>
</template> </template>
<script> <script>
import { validUsername } from '@/utils/validate'
import { log } from '@/api/system/user' import { log } from '@/api/system/user'
export default { export default {
name: 'Login', name: 'Login',
data() { data() {
const validateUsername = (rule, value, callback) => { const validateUsername = (rule, value, callback) => {
if (!validUsername(value)) { if (value.length < 1) {
callback(new Error('Please enter the correct user name')) return callback(new Error('请输入用户名'))
} else { } else {
callback() callback()
} }
} }
const validatePassword = (rule, value, callback) => { const validatePassword = (rule, value, callback) => {
if (value.length < 6) { if (value.length < 1) {
callback(new Error('The password can not be less than 6 digits')) return callback(new Error('请输入密码'))
} else { } else {
callback() callback()
} }
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
</el-button-group> </el-button-group>
</div> </div>
<div class="body-wrapper"> <div class="body-wrapper">
<el-row>
<el-col :span="24">
<el-tabs type="border-card"> <el-tabs type="border-card">
<el-tab-pane label="请求头"> <el-tab-pane label="请求头">
<el-table <el-table
...@@ -27,6 +29,9 @@ ...@@ -27,6 +29,9 @@
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-col>
</el-row>
<el-divider content-position="left">服务信息</el-divider>
<el-form ref="form" :model="form" label-width="80px" disabled> <el-form ref="form" :model="form" label-width="80px" disabled>
<el-form-item label="服务名称"> <el-form-item label="服务名称">
<el-input v-model="form.serviceName" placeholder="请输入服务名称" /> <el-input v-model="form.serviceName" placeholder="请输入服务名称" />
......
...@@ -20,6 +20,17 @@ ...@@ -20,6 +20,17 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="业务审核用户组">
<el-select v-model="form.businessAuditGroup" placeholder="请选择审核用户组">
<el-option
v-for="item in roleOptions"
:key="item.id"
:label="item.roleName"
:value="item.id"
:disabled="item.status === '0'"
/>
</el-select>
</el-form-item>
<el-form-item label="流程定义ID" prop="processDefinitionId"> <el-form-item label="流程定义ID" prop="processDefinitionId">
<el-input v-model="form.processDefinitionId" placeholder="请输入流程定义ID" /> <el-input v-model="form.processDefinitionId" placeholder="请输入流程定义ID" />
</el-form-item> </el-form-item>
...@@ -46,6 +57,7 @@ ...@@ -46,6 +57,7 @@
<script> <script>
import { addBusiness } from '@/api/workflow/business' import { addBusiness } from '@/api/workflow/business'
import { listMenuForFlow } from '@/api/system/menu' import { listMenuForFlow } from '@/api/system/menu'
import { listRole } from '@/api/system/role'
export default { export default {
name: 'BusinessAdd', name: 'BusinessAdd',
...@@ -89,7 +101,8 @@ export default { ...@@ -89,7 +101,8 @@ export default {
}, },
// 状态数据字典 // 状态数据字典
statusOptions: [], statusOptions: [],
menuOptions: [] menuOptions: [],
roleOptions: []
} }
}, },
created() { created() {
...@@ -99,6 +112,7 @@ export default { ...@@ -99,6 +112,7 @@ export default {
} }
}) })
this.getMenuOptions() this.getMenuOptions()
this.getRoleList()
}, },
methods: { methods: {
showCard() { showCard() {
...@@ -107,8 +121,14 @@ export default { ...@@ -107,8 +121,14 @@ export default {
getMenuOptions() { getMenuOptions() {
listMenuForFlow().then(response => { listMenuForFlow().then(response => {
if (response.success) { if (response.success) {
const { data } = response this.menuOptions = response.data
this.menuOptions = data }
})
},
getRoleList() {
listRole().then(response => {
if (response.success) {
this.roleOptions = response.data
} }
}) })
}, },
......
...@@ -19,6 +19,17 @@ ...@@ -19,6 +19,17 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="业务审核用户组">
<el-select v-model="form.businessAuditGroup" placeholder="请选择审核用户组">
<el-option
v-for="item in roleOptions"
:key="item.id"
:label="item.roleName"
:value="item.id"
:disabled="item.status === '0'"
/>
</el-select>
</el-form-item>
<el-form-item label="流程定义ID" prop="processDefinitionId"> <el-form-item label="流程定义ID" prop="processDefinitionId">
<el-input v-model="form.processDefinitionId" placeholder="请输入流程定义ID" /> <el-input v-model="form.processDefinitionId" placeholder="请输入流程定义ID" />
</el-form-item> </el-form-item>
...@@ -45,6 +56,7 @@ ...@@ -45,6 +56,7 @@
<script> <script>
import { getBusiness } from '@/api/workflow/business' import { getBusiness } from '@/api/workflow/business'
import { listMenuForFlow } from '@/api/system/menu' import { listMenuForFlow } from '@/api/system/menu'
import { listRole } from '@/api/system/role'
export default { export default {
name: 'BusinessDetail', name: 'BusinessDetail',
...@@ -71,7 +83,8 @@ export default { ...@@ -71,7 +83,8 @@ export default {
form: {}, form: {},
// 状态数据字典 // 状态数据字典
statusOptions: [], statusOptions: [],
menuOptions: [] menuOptions: [],
roleOptions: []
} }
}, },
created() { created() {
...@@ -82,6 +95,7 @@ export default { ...@@ -82,6 +95,7 @@ export default {
} }
}) })
this.getMenuOptions() this.getMenuOptions()
this.getRoleList()
}, },
mounted() { mounted() {
this.getBusiness(this.data.id) this.getBusiness(this.data.id)
...@@ -106,6 +120,13 @@ export default { ...@@ -106,6 +120,13 @@ export default {
} }
}) })
}, },
getRoleList() {
listRole().then(response => {
if (response.success) {
this.roleOptions = response.data
}
})
}
} }
} }
</script> </script>
......
...@@ -20,6 +20,17 @@ ...@@ -20,6 +20,17 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="业务审核用户组">
<el-select v-model="form.businessAuditGroup" placeholder="请选择审核用户组">
<el-option
v-for="item in roleOptions"
:key="item.id"
:label="item.roleName"
:value="item.id"
:disabled="item.status === '0'"
/>
</el-select>
</el-form-item>
<el-form-item label="流程定义ID" prop="processDefinitionId"> <el-form-item label="流程定义ID" prop="processDefinitionId">
<el-input v-model="form.processDefinitionId" placeholder="请输入流程定义ID" /> <el-input v-model="form.processDefinitionId" placeholder="请输入流程定义ID" />
</el-form-item> </el-form-item>
...@@ -46,6 +57,7 @@ ...@@ -46,6 +57,7 @@
<script> <script>
import { getBusiness, updateBusiness } from '@/api/workflow/business' import { getBusiness, updateBusiness } from '@/api/workflow/business'
import { listMenuForFlow } from '@/api/system/menu' import { listMenuForFlow } from '@/api/system/menu'
import { listRole } from '@/api/system/role'
export default { export default {
name: 'BusinessEdit', name: 'BusinessEdit',
...@@ -87,7 +99,8 @@ export default { ...@@ -87,7 +99,8 @@ export default {
}, },
// 状态数据字典 // 状态数据字典
statusOptions: [], statusOptions: [],
menuOptions: [] menuOptions: [],
roleOptions: []
} }
}, },
created() { created() {
...@@ -98,6 +111,7 @@ export default { ...@@ -98,6 +111,7 @@ export default {
} }
}) })
this.getMenuOptions() this.getMenuOptions()
this.getRoleList()
}, },
mounted() { mounted() {
this.getBusiness(this.data.id) this.getBusiness(this.data.id)
...@@ -122,6 +136,13 @@ export default { ...@@ -122,6 +136,13 @@ export default {
} }
}) })
}, },
getRoleList() {
listRole().then(response => {
if (response.success) {
this.roleOptions = response.data
}
})
},
changeValue(value) { changeValue(value) {
const obj = this.menuOptions.find(function(item) { const obj = this.menuOptions.find(function(item) {
return item.menuCode === value return item.menuCode === value
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment