提交修改

This commit is contained in:
quyixiao 2020-10-26 15:37:58 +08:00
commit 4aa5aa4dd4
22 changed files with 657 additions and 564 deletions

View File

@ -8,10 +8,9 @@ import lombok.Data;
import java.util.Date;
/**
* <p>
* 菜单权限表
* </p>*流程图lz_flow的父
* @author quyixiao
* @since 2020-10-14
* @since 2020-10-26
*/
@Data
@ -39,12 +38,15 @@ public class FlowChart implements java.io.Serializable {
//是否可允许不启用节点 0不可1可以
@ApiModelProperty(value = "是否可允许不启用节点 0不可1可以", name = "status")
private Integer status;
//1可配置细节0不可配置细节一般线下操作比如执行中
@ApiModelProperty(value = "1可配置细节0不可配置细节一般线下操作。比如执行中", name = "type")
//1可配置细节0不可配置细节一般线下操作比如执行中不可配置细节的允许自动跳过该节点比如还未到改节点时人为设置该节点后面的操作那么所有相关的都自动跳过
@ApiModelProperty(value = "1可配置细节0不可配置细节一般线下操作。比如执行中,不可配置细节的允许自动跳过该节点。比如,还未到改节点时,人为设置该节点后面的操作,那么所有相关的都自动跳过", name = "type")
private Integer type;
//执行步骤第几步从0开始
@ApiModelProperty(value = "执行步骤第几步从0开始", name = "stepIndex")
private Integer stepIndex;
//当前是目标确认还是评分0目标制定1目标确认2执行中3结果值录入4评分5考核结束
@ApiModelProperty(value = "当前是目标确认还是评分0目标制定1目标确认2执行中3结果值录入4评分5考核结束", name = "flowProcess")
private Integer flowProcess;
/**
*
* @return
@ -136,14 +138,14 @@ public class FlowChart implements java.io.Serializable {
}
/**
* 0启用1不启用
* 是否可允许不启用节点 0不可1可以
* @return
*/
public Integer getStatus() {
return status;
}
/**
* 0启用1不启用
* 是否可允许不启用节点 0不可1可以
* @param status
*/
public void setStatus(Integer status) {
@ -151,14 +153,14 @@ public class FlowChart implements java.io.Serializable {
}
/**
* 1可配置细节0不可配置细节一般线下操作比如执行中
* 1可配置细节0不可配置细节一般线下操作比如执行中不可配置细节的允许自动跳过该节点比如还未到改节点时人为设置该节点后面的操作那么所有相关的都自动跳过
* @return
*/
public Integer getType() {
return type;
}
/**
* 1可配置细节0不可配置细节一般线下操作比如执行中
* 1可配置细节0不可配置细节一般线下操作比如执行中不可配置细节的允许自动跳过该节点比如还未到改节点时人为设置该节点后面的操作那么所有相关的都自动跳过
* @param type
*/
public void setType(Integer type) {
@ -180,6 +182,21 @@ public class FlowChart implements java.io.Serializable {
this.stepIndex = stepIndex;
}
/**
* 当前是目标确认还是评分0目标制定1目标确认2执行中3结果值录入4评分5考核结束
* @return
*/
public Integer getFlowProcess() {
return flowProcess;
}
/**
* 当前是目标确认还是评分0目标制定1目标确认2执行中3结果值录入4评分5考核结束
* @param flowProcess
*/
public void setFlowProcess(Integer flowProcess) {
this.flowProcess = flowProcess;
}
@Override
public String toString() {
return "FlowChart{" +
@ -192,6 +209,7 @@ public class FlowChart implements java.io.Serializable {
",status=" + status +
",type=" + type +
",stepIndex=" + stepIndex +
",flowProcess=" + flowProcess +
"}";
}
}

View File

@ -1,6 +1,7 @@
package com.lz.modules.flow.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lz.common.utils.R;
import com.lz.modules.flow.entity.FlowStart;
import java.util.List;
@ -33,4 +34,6 @@ public interface FlowStartService extends IService<FlowStart> {
FlowStart selectFlowStartByName(String name);
R saveStart(FlowStart flowStart);
}

View File

@ -5,6 +5,7 @@ import com.lz.common.utils.R;
import com.lz.modules.flow.entity.ResultModel;
import com.lz.modules.flow.entity.ResultTagetLib;
import com.lz.modules.flow.model.ResultModelDto;
import com.lz.modules.flow.req.ResultModelDetailReq;
import java.util.List;
@ -41,4 +42,5 @@ public interface ResultModelService extends IService<ResultModel> {
R deleteResultModelByGroupId(Long id);
R saveDetail(ResultModelDetailReq resultModelDetailReq);
}

View File

@ -1,11 +1,37 @@
package com.lz.modules.flow.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lz.common.emun.ChartOptType;
import com.lz.common.emun.CheckStaffType;
import com.lz.common.utils.R;
import com.lz.common.utils.StringUtil;
import com.lz.modules.app.entity.StaffEntity;
import com.lz.modules.app.entity.StaffSimpleInfo;
import com.lz.modules.app.service.StaffService;
import com.lz.modules.flow.dao.FlowStartMapper;
import com.lz.modules.flow.entity.FlowStart;
import com.lz.modules.flow.service.FlowStartService;
import com.lz.modules.flow.entity.*;
import com.lz.modules.flow.model.DepartManagers;
import com.lz.modules.flow.model.ResultModelDto;
import com.lz.modules.flow.model.ResultTagetLibDto;
import com.lz.modules.flow.service.*;
import com.lz.modules.performance.service.ResultTagetLibService;
import com.lz.modules.sys.entity.app.ResultDetail;
import com.lz.modules.sys.entity.app.ResultRecord;
import com.lz.modules.sys.service.app.ResultDetailService;
import com.lz.modules.sys.service.app.ResultRecordService;
import org.apache.commons.collections.map.HashedMap;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* <p>
@ -23,6 +49,39 @@ public class FlowStartServiceImpl extends ServiceImpl<FlowStartMapper, FlowStart
@Autowired
private FlowStartMapper flowStartMapper;
@Autowired
private EvaluationStartStaffService evaluationStartStaffService;
@Autowired
private ResultModelService resultModelService;
@Autowired
private FlowChartDetailRecordService flowChartDetailRecordService;
@Autowired
private FlowService flowService;
@Autowired
private FlowApprovalRoleService flowApprovalRoleService;
@Autowired
private FlowChartService flowChartService;
@Autowired
private ResultRecordService resultRecordService;
@Autowired
private ResultDetailService resultDetailService;
@Autowired
private ResultTagetLibService resultTagetLibService;
@Autowired
private StaffService staffService;
@Autowired
private EvaluationGroupService evaluationGroupService;
@Override
@ -63,5 +122,373 @@ public class FlowStartServiceImpl extends ServiceImpl<FlowStartMapper, FlowStart
return flowStartMapper.selectFlowStartByName(name);
}
@Override
public R saveStart(FlowStart flowStart){
//下面生成或者合并发起绩效
if(flowStart.getStartTime() == null){
return R.error("未设置有效考核月份");
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月");
String startDate = sdf.format(flowStart.getStartTime());
if(flowStart.getCycleType().intValue() != 0){
//月份
if(flowStart.getEndTime() == null){
return R.error("未设置有效考核结束月份");
}
String endDate = sdf.format(flowStart.getStartTime());
flowStart.setName(startDate + "-" + endDate + "绩效考核");
}else{
flowStart.setName(startDate + "绩效考核");
}
FlowStart flowStart1 = selectFlowStartByName(flowStart.getName());
if(flowStart1 == null){
insertFlowStart(flowStart);
}else{
flowStart.setId(flowStart1.getId());
}
Map<Long, String> chartNameMaps = new HashedMap();//流程节点与流程名称对应map下面多次循环减少数据库查找
Map<String, List<StaffEntity>> staffManages = new HashedMap();//部门(id+几级)和部门几级管理对应关系减少数据库查找
//下面开始初始化流程
List<Long> ids = Arrays.stream(flowStart.getGroupIds().split(",")).map(new Function<String, Long>() {
@Override
public Long apply(String s) {
return Long.parseLong(s);
}
}).collect(Collectors.toList());
List<EvaluationGroup> evaluationGroups = evaluationGroupService.selectEvaluationGroupByIds(ids);
for (int n = 0; n < evaluationGroups.size(); n++
) {
EvaluationGroup evaluationGroup = evaluationGroups.get(n);
//下面初始化员工考核流程
List<StaffSimpleInfo> staffIds = evaluationGroupService.selectAllStaffSimpleInfoByGroupId(evaluationGroup);
if(staffIds.size() == 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚
return R.error(evaluationGroup.getName() + "——无有效考核人员");
}
List<ResultModelDto> resultModelDtos = resultModelService.selectResultDtoByGroupId(evaluationGroup.getId());
if(resultModelDtos.size() == 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚
return R.error(evaluationGroup.getName() + "——没有设置考核模板");
}
List<FlowChartDetailRecord> flowChartDetailRecords
= flowChartDetailRecordService.selectFlowChartDetailRecordByGroupId(evaluationGroup.getId());
if(flowChartDetailRecords.size() == 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚
return R.error(evaluationGroup.getName() + "——没有设置考核流程");
}
List<StaffEntity> staffManagers = null;
if(!StringUtil.isEmpty(evaluationGroup.getManagerIds())){
List<Long> mIds = Arrays.stream(evaluationGroup.getManagerIds().split(","))
.map(new Function<String, Long>() {
@Override
public Long apply(String s) {
return Long.parseLong(s);
}
}).collect(Collectors.toList());
//查找在职的管理人员
staffManagers = staffService.selectOnJobByIds(mIds);
}
if(staffManagers == null || staffManagers.size() == 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚
return R.error(evaluationGroup.getName() + "——没有设置绩效管理人员");
}
//下面拷贝一份考评组信息发起后所使用的考评组id为复制后的id
evaluationGroup.setCopyId(evaluationGroup.getId());
evaluationGroup.setId(null);
evaluationGroup.setGmtCreate(null);
evaluationGroup.setGmtModified(null);
evaluationGroupService.insertEvaluationGroup(evaluationGroup);
//拷贝考评组的指标信息
List<ResultTagetLib> resultTagetLibs = new ArrayList<>();
for (ResultModelDto dto:resultModelDtos
) {
dto.setEvaluationGroupId(evaluationGroup.getId());//设置拷贝组的id
//下面拷贝一份考评组信息的维度信息
ResultModel resultModel = new ResultModel();
BeanUtils.copyProperties(dto, resultModel);
resultModel.setId(null);
resultModelService.insertResultModel(resultModel);
List<ResultTagetLibDto> libDtos = resultTagetLibService.selectResultTagetLibDtoByModelId(dto.getId());
dto.setTagetLibs(libDtos);
for (ResultTagetLibDto libDto: libDtos
) {
//下面拷贝考评组里面的指标信息
ResultTagetLib resultTagetLib = new ResultTagetLib();
BeanUtils.copyProperties(libDto, resultTagetLib);
resultTagetLib.setModelId(resultModel.getId());//设置新的维度id
resultTagetLib.setId(null);
resultTagetLibs.add(resultTagetLib);
}
}
if(resultTagetLibs.size() > 0){
//插入备份的考评组指标信息
resultTagetLibService.insertResultTagetLibs(resultTagetLibs);
}
//下面初始化lz_flow流程表 lz_flow_approval_role流程审批表
List<FlowApprovalRole> flowApprovalRoles = new ArrayList<>();
int stepIndex = 0;
for (FlowChartDetailRecord flowChartDetailRecord:flowChartDetailRecords
) {
Flow flow = new Flow();
flow.setFlowId(evaluationGroup.getId());
flow.setOpt("+");
flow.setStartId(flowStart.getId());
flow.setChartId(flowChartDetailRecord.getChartId());
String optName;
if(chartNameMaps.containsKey(flowChartDetailRecord.getChartId())){//缓存
optName = chartNameMaps.get(flowChartDetailRecord.getChartId());
}else{//查找数据库
FlowChart flowChart = flowChartService.selectFlowChartById(flowChartDetailRecord.getChartId());
chartNameMaps.put(flowChart.getId(), flowChart.getName());
optName = flowChart.getName();
}
flow.setOptDesc(optName);
flowService.insertFlow(flow);
if(flowChartDetailRecord.getOptType().intValue() == ChartOptType.APPOINT.getCode()){//指定人员的
String[] optIds = flowChartDetailRecord.getOptIds().split(",");
for (String id:optIds
) {
/*String[] roleIds = flowChartDetailRecord.getRoleIds().split(",");
for (String roleId:roleIds
) {
FlowApprovalRole flowApprovalRole = new FlowApprovalRole();
flowApprovalRole.setFlowId(flow.getId());
flowApprovalRole.setApprovalId(Long.parseLong(id));
flowApprovalRole.setStepType(flowChartDetailRecord.getStepType());
flowApprovalRole.setRoleId(roleId);
flowApprovalRole.setType(flowChartDetailRecord.getOptType());
flowApprovalRoles.add(flowApprovalRole);
flowApprovalRole.setStepIndex(stepIndex);
}*/
FlowApprovalRole flowApprovalRole = new FlowApprovalRole();
flowApprovalRole.setFlowId(flow.getId());
flowApprovalRole.setApprovalId(Long.parseLong(id));
flowApprovalRole.setStepType(flowChartDetailRecord.getStepType());
flowApprovalRole.setRoleId(flowChartDetailRecord.getRoleIds());
flowApprovalRole.setType(flowChartDetailRecord.getOptType());
flowApprovalRoles.add(flowApprovalRole);
flowApprovalRole.setStepIndex(stepIndex);
}
stepIndex++;
}else{
FlowApprovalRole flowApprovalRole = new FlowApprovalRole();
flowApprovalRole.setFlowId(flow.getId());
flowApprovalRole.setStepType(flowChartDetailRecord.getStepType());
flowApprovalRole.setRoleId(flowChartDetailRecord.getRoleIds());
flowApprovalRole.setType(flowChartDetailRecord.getOptType());
flowApprovalRoles.add(flowApprovalRole);
flowApprovalRole.setStepIndex(stepIndex);
/*String[] roleIds = flowChartDetailRecord.getRoleIds().split(",");
for (String roleId:roleIds
) {
FlowApprovalRole flowApprovalRole = new FlowApprovalRole();
flowApprovalRole.setFlowId(flow.getId());
flowApprovalRole.setStepType(flowChartDetailRecord.getStepType());
flowApprovalRole.setRoleId(roleId);
flowApprovalRole.setType(flowChartDetailRecord.getOptType());
flowApprovalRoles.add(flowApprovalRole);
flowApprovalRole.setStepIndex(stepIndex);
}*/
stepIndex++;
}
}
//插入记录
if(flowApprovalRoles.size() > 0){
flowApprovalRoleService.insertFlowApprovalRoles(flowApprovalRoles);
//初始化lz_result_details数据
List<ResultDetail> resultDetails = new ArrayList<>();
List<EvaluationStartStaff> evaluationStartStaffs = new ArrayList<>();
//下面初始化管理人员对应关系
for (StaffEntity entity:staffManagers
) {
EvaluationStartStaff evaluationStartStaff = new EvaluationStartStaff();
evaluationStartStaff.setEvaluationId(evaluationGroup.getId());
evaluationStartStaff.setEvaluationName(evaluationGroup.getName());
evaluationStartStaff.setStaffId(entity.getId());
evaluationStartStaff.setStartId(flowStart.getId());
evaluationStartStaff.setType(CheckStaffType.MANAGER.getCode());
evaluationStartStaffs.add(evaluationStartStaff);
}
//下面初始化参与人员
for (StaffSimpleInfo staffInfo:staffIds
) {
EvaluationStartStaff evaluationStartStaff = new EvaluationStartStaff();
evaluationStartStaff.setEvaluationId(evaluationGroup.getId());
evaluationStartStaff.setEvaluationName(evaluationGroup.getName());
evaluationStartStaff.setStaffId(staffInfo.getId());
evaluationStartStaff.setStartId(flowStart.getId());
evaluationStartStaff.setType(CheckStaffType.STAFF.getCode());
evaluationStartStaffs.add(evaluationStartStaff);
//初始化lz_result_records数据
ResultRecord resultRecord = new ResultRecord();
resultRecord.setDepartmentId(staffInfo.getDepartmentId());
resultRecord.setDepartmentName(staffInfo.getDepartmentName());
resultRecord.setStaffId(staffInfo.getId());
resultRecord.setStaffName(staffInfo.getName());
resultRecord.setType(1);//设置为提交目标
resultRecord.setStatus(0);//设置为新建
resultRecord.setStartId(flowStart.getId());
resultRecord.setEvaluationId(evaluationGroup.getId());
resultRecord.setFlowProcess(0);//设置为目标制定
//下面初始化flow_staff_id_role字段步骤为0的
String roleJSON = "[";
for (int i = 0; i < flowApprovalRoles.size() ;i++){
FlowApprovalRole approvalRole = flowApprovalRoles.get(i);
if(approvalRole.getStepIndex().intValue() == 0){//找到所有步骤为0的人员
Long staffId = approvalRole.getApprovalId();//默认为指定人员
if(approvalRole.getType().intValue() == ChartOptType.SELF.getCode()){
//制定人员为自己的
staffId = staffInfo.getId();
if(i == 0){//目前只设置一个多个不明确是否支持roleJSON是支持多个的
//设置当前审批员工id current_approval_staff_id
resultRecord.setCurrentApprovalStaffId(staffInfo.getId());
//设置当前审批员工姓名 current_approval_staff_name
resultRecord.setCurrentApprovalStaffName(staffInfo.getName());
}
} else if(approvalRole.getType().intValue() > 0){//当设置为几级领导时
///查找领导如果不存在那么设置管理人员
List<StaffEntity> staffLeader;
String key = staffInfo.getDepartmentId() + approvalRole.getType();
if(staffManages.containsKey(key)){
staffLeader = staffManages.get(staffInfo.getDepartmentId());
}else{
DepartManagers departManagers =
staffService.findLeader(staffInfo.getId(), approvalRole.getType());
staffLeader = departManagers.getManagers();
staffManages.put(key, departManagers.getManagers());
}
if(staffLeader.size() == 0){
//没有领导通知到组设置的绩效管理人员
for (StaffEntity entity:staffManagers
) {
roleJSON += ("{\"roleId\":0,\"staffId\":" + entity.getId() + "},");//这里写死了权限为0的即为找不到领导
}
if(i == 0){//目前只设置一个多个不明确是否支持roleJSON是支持多个的
//设置当前审批员工id current_approval_staff_id
resultRecord.setCurrentApprovalStaffId(staffManagers.get(0).getId());
//设置当前审批员工姓名 current_approval_staff_name
resultRecord.setCurrentApprovalStaffName(staffManagers.get(0).getName());
}
}else{
for(int j = 0; j <staffLeader.size(); j++ ){
StaffEntity staff = staffLeader.get(j);
roleJSON += ("{\"roleId\":"+ approvalRole.getRoleId() +
",\"staffId\":" + staff.getId() + "},");
}
if(i == 0){//目前只设置一个多个不明确是否支持roleJSON是支持多个的
//设置当前审批员工id current_approval_staff_id
resultRecord.setCurrentApprovalStaffId(staffLeader.get(0).getId());
//设置当前审批员工姓名 current_approval_staff_name
resultRecord.setCurrentApprovalStaffName(staffLeader.get(0).getName());
}
}
continue;
}else{
if(i == 0){//目前只设置一个多个不明确是否支持roleJSON是支持多个的
//设置当前审批员工id current_approval_staff_id
resultRecord.setCurrentApprovalStaffId(approvalRole.getApprovalId());
//设置当前审批员工姓名 current_approval_staff_name
resultRecord.setCurrentApprovalStaffName("");
}
}
roleJSON += ("{\"roleId\":"+ approvalRole.getRoleId() +
",\"staffId\":" + staffId + "},");
continue;
}
break;
}
roleJSON += "]";
roleJSON = roleJSON.replace(",]", "]");
resultRecord.setFlowStaffIdRole(roleJSON);
resultRecordService.insertResultRecord(resultRecord);
//下面生成ResultDetail对象
for (ResultModelDto modelDto:resultModelDtos
) {
if(modelDto.getTagetLibs() != null && modelDto.getTagetLibs().size() > 0){//模板里面有添加指标
for (ResultTagetLibDto libDto:
modelDto.getTagetLibs()) {
ResultDetail resultDetail = new ResultDetail();
resultDetail.setRecordId(resultRecord.getId());
resultDetail.setTarget(libDto.getName());
resultDetail.setType(modelDto.getType());
resultDetail.setKeyResult(libDto.getKeyResult());
resultDetail.setCheckWeight(libDto.getWeight());
resultDetail.setStaffId(staffInfo.getId());
resultDetail.setPriority(libDto.getOrderBy());
resultDetails.add(resultDetail);
}
}
}
}
//如果有数据插入lz_result_detail表
if(resultDetails.size() > 0){
//
resultDetailService.insertResultDetails(resultDetails);
}
evaluationStartStaffService.insertEvaluationStartStaffs(evaluationStartStaffs);
//下面通知所有参与考核人员
//如果有下面通知所有管理人员
}else{
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚
return R.error(evaluationGroup.getName() + "——初始化考核流程失败");
}
}
return R.ok("发起成功");
}
}

View File

@ -6,13 +6,19 @@ import com.lz.modules.flow.dao.ResultModelMapper;
import com.lz.modules.flow.entity.ResultModel;
import com.lz.modules.flow.entity.ResultTagetLib;
import com.lz.modules.flow.model.ResultModelDto;
import com.lz.modules.flow.req.ResultModelDetailReq;
import com.lz.modules.flow.req.ResultModelItemReq;
import com.lz.modules.flow.req.ResultTagetLibItemReq;
import com.lz.modules.flow.service.ResultModelService;
import com.lz.modules.performance.service.ResultTagetLibService;
import com.lz.modules.sys.entity.app.ResultDetail;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@ -35,6 +41,8 @@ public class ResultModelServiceImpl extends ServiceImpl<ResultModelMapper, Resul
@Autowired
private ResultTagetLibService resultTargetLibService;
private static int maxInsertSQL = 100;
@ -95,6 +103,73 @@ public class ResultModelServiceImpl extends ServiceImpl<ResultModelMapper, Resul
return R.ok();
}
@Override
public R saveDetail(ResultModelDetailReq resultModelDetailReq){
BigDecimal modelWeight = BigDecimal.ZERO;
int resultModelOrderBy = 0;
for (ResultModelItemReq itemReq:
resultModelDetailReq.getModelItems()) {
modelWeight = modelWeight.add(itemReq.getWeight());
if(modelWeight.compareTo(BigDecimal.ONE) == 1){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚
return R.error("维度权重之和不能能超过100%");
}
ResultModel resultModel = new ResultModel();
BeanUtils.copyProperties(itemReq, resultModel);
resultModel.setCalculateId(resultModelDetailReq.getCalculateId());
resultModel.setGradeGroupId(resultModelDetailReq.getGradeGroupId());
resultModel.setGradeStatus(resultModelDetailReq.getGradeStatus());
resultModel.setEvaluationGroupId(resultModelDetailReq.getEvaluationGroupId());
resultModel.setOrderBy(resultModelOrderBy);
if(resultModel.getId() == null){
resultModelMapper.insertResultModel(resultModel);
}else{
resultModelMapper.updateResultModelById(resultModel);
}
if(itemReq.getTagetLibItems() != null){
int libOrderBy = 0;
List<ResultTagetLib> inserts = new ArrayList<>();
List<ResultTagetLib> updates = new ArrayList<>();
BigDecimal tagLibWeight = BigDecimal.ZERO;
for (ResultTagetLibItemReq req:itemReq.getTagetLibItems()
) {
ResultTagetLib resultTagetLib = new ResultTagetLib();
BeanUtils.copyProperties(req, resultTagetLib);
resultTagetLib.setModelId(resultModel.getId());
resultTagetLib.setOrderBy(libOrderBy);
tagLibWeight = tagLibWeight.add(req.getWeight());
if(tagLibWeight.compareTo(resultModel.getWeight()) == 1){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚
return R.error(resultModel.getName() +
"维度的指标之和不能大于" + (resultModel.getWeight().multiply(BigDecimal.valueOf(100))) + "%");
}
if(resultTagetLib.getId() != null && resultTagetLib.getId().intValue() > 0){
updates.add(resultTagetLib);
}else{
inserts.add(resultTagetLib);
}
if(resultTagetLib.getIsDelete() == null || resultTagetLib.getIsDelete().intValue() == 0){
libOrderBy++;
}
}
if(inserts.size() > 0){
resultTargetLibService.insertResultTagetLibs(inserts);
}
if(updates.size() > 0){
resultTargetLibService.updateBatchById(updates);
}
if(resultModel.getIsDelete() == null || resultModel.getIsDelete().intValue() == 0){
resultModelOrderBy++;
}
}
}
return R.ok();
}
}

View File

@ -2,25 +2,16 @@ package com.lz.modules.performance.controller;
import com.lz.common.utils.PageUtils;
import com.lz.common.utils.R;
import com.lz.modules.flow.entity.EvaluationGroup;
import com.lz.modules.flow.service.EvaluationGroupService;
import com.lz.modules.performance.req.ChartResultReq;
import com.lz.modules.equipment.entity.model.BasePage;
import com.lz.modules.performance.res.ChartStatisticalRes;
import com.lz.modules.performance.res.ResultRankListRes;
import com.lz.modules.performance.res.TaskListRes;
import com.lz.modules.performance.service.ChartResultService;
import com.lz.modules.sys.controller.AbstractController;
import io.swagger.annotations.*;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.function.ToLongFunction;
/**
* @Author: djc
@ -36,19 +27,30 @@ public class ChartController extends AbstractController{
@PostMapping("chart/result")
@ApiOperation("获取绩效报表统计")
@ApiImplicitParam(name = "startId",value = "考核周期标识id", required = true, dataType = "Long",paramType = "query")
@ApiResponses({@ApiResponse(code = 200,message = "成功",response = ChartStatisticalRes.class)})
public R chartResult(@RequestBody @ApiParam(name = "body",value = "body请求体",required = true) ChartResultReq req){
List<ChartStatisticalRes> chartStatisticalRes = chartResultService.chartReport(req);
public R chartResult(@RequestParam Long startId){
List<ChartStatisticalRes> chartStatisticalRes = chartResultService.chartReport(startId);
return R.ok().put("data",chartStatisticalRes);
}
@PostMapping("chart/rank")
@PostMapping("chart/starts")
@ApiOperation("获取考核类型列表")
@ApiResponses({@ApiResponse(code = 200,message = "成功",response = ChartStatisticalRes.class)})
public R chartStarts(@RequestBody BasePage req){
return R.ok().put("data","");
}
/*@PostMapping("chart/rank")
@ApiOperation("获取绩排名列表")
@ApiResponses({@ApiResponse(code = 200,message = "成功",response = ResultRankListRes.class)})
public R rankList(@RequestBody @ApiParam(name = "body",value = "body请求体",required = true) ChartResultReq req){
PageUtils pageUtils = chartResultService.resultRankList(req);
return R.ok().put("data",pageUtils);
}
}*/

View File

@ -49,35 +49,7 @@ public class FlowStartController {
@Autowired
private EvaluationGroupService evaluationGroupService;
@Autowired
private EvaluationStartStaffService evaluationStartStaffService;
@Autowired
private ResultModelService resultModelService;
@Autowired
private FlowChartDetailRecordService flowChartDetailRecordService;
@Autowired
private FlowService flowService;
@Autowired
private FlowApprovalRoleService flowApprovalRoleService;
@Autowired
private FlowChartService flowChartService;
@Autowired
private ResultRecordService resultRecordService;
@Autowired
private ResultDetailService resultDetailService;
@Autowired
private ResultTagetLibService resultTagetLibService;
@Autowired
private StaffService staffService;
@ -104,378 +76,7 @@ public class FlowStartController {
@PostMapping("/save")
@ApiOperation("发起新的考核任务")
public R save(@RequestBody @ApiParam FlowStart flowStart) {
//下面生成或者合并发起绩效
if(flowStart.getStartTime() == null){
return R.error("未设置有效考核月份");
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月");
String startDate = sdf.format(flowStart.getStartTime());
if(flowStart.getCycleType().intValue() != 0){
//月份
if(flowStart.getEndTime() == null){
return R.error("未设置有效考核结束月份");
}
String endDate = sdf.format(flowStart.getStartTime());
flowStart.setName(startDate + "-" + endDate + "绩效考核");
}else{
flowStart.setName(startDate + "绩效考核");
}
FlowStart flowStart1 = flowStartService.selectFlowStartByName(flowStart.getName());
if(flowStart1 == null){
flowStartService.insertFlowStart(flowStart);
}else{
flowStart.setId(flowStart1.getId());
}
Map<Long, String> chartNameMaps = new HashedMap();//流程节点与流程名称对应map下面多次循环减少数据库查找
Map<String, List<StaffEntity>> staffManages = new HashedMap();//部门(id+几级)和部门几级管理对应关系减少数据库查找
//下面开始初始化流程
List<Long> ids = Arrays.stream(flowStart.getGroupIds().split(",")).map(new Function<String, Long>() {
@Override
public Long apply(String s) {
return Long.parseLong(s);
}
}).collect(Collectors.toList());
List<EvaluationGroup> evaluationGroups = evaluationGroupService.selectEvaluationGroupByIds(ids);
for (int n = 0; n < evaluationGroups.size(); n++
) {
EvaluationGroup evaluationGroup = evaluationGroups.get(n);
//下面初始化员工考核流程
List<StaffSimpleInfo> staffIds = evaluationGroupService.selectAllStaffSimpleInfoByGroupId(evaluationGroup);
if(staffIds.size() == 0){
if(n == 0){//如果一个组都没有添加那么直接删除
flowStartService.deleteFlowStartById(flowStart.getId());
}
return R.error(evaluationGroup.getName() + "——无有效考核人员");
}
List<ResultModelDto> resultModelDtos = resultModelService.selectResultDtoByGroupId(evaluationGroup.getId());
if(resultModelDtos.size() == 0){
if(n == 0){//如果一个组都没有添加那么直接删除
flowStartService.deleteFlowStartById(flowStart.getId());
}
return R.error(evaluationGroup.getName() + "——没有设置考核模板");
}
List<FlowChartDetailRecord> flowChartDetailRecords
= flowChartDetailRecordService.selectFlowChartDetailRecordByGroupId(evaluationGroup.getId());
if(flowChartDetailRecords.size() == 0){
if(n == 0){//如果一个组都没有添加那么直接删除
flowStartService.deleteFlowStartById(flowStart.getId());
}
return R.error(evaluationGroup.getName() + "——没有设置考核流程");
}
List<StaffEntity> staffManagers = null;
if(!StringUtil.isEmpty(evaluationGroup.getManagerIds())){
List<Long> mIds = Arrays.stream(evaluationGroup.getManagerIds().split(","))
.map(new Function<String, Long>() {
@Override
public Long apply(String s) {
return Long.parseLong(s);
}
}).collect(Collectors.toList());
//查找在职的管理人员
staffManagers = staffService.selectOnJobByIds(mIds);
}
if(staffManagers == null || staffManagers.size() == 0){
if(n == 0){//如果一个组都没有添加那么直接删除
flowStartService.deleteFlowStartById(flowStart.getId());
}
return R.error(evaluationGroup.getName() + "——没有设置绩效管理人员");
}
//下面拷贝一份考评组信息发起后所使用的考评组id为复制后的id
evaluationGroup.setCopyId(evaluationGroup.getId());
evaluationGroup.setId(null);
evaluationGroup.setGmtCreate(null);
evaluationGroup.setGmtModified(null);
evaluationGroupService.insertEvaluationGroup(evaluationGroup);
//拷贝考评组的指标信息
List<ResultTagetLib> resultTagetLibs = new ArrayList<>();
for (ResultModelDto dto:resultModelDtos
) {
dto.setEvaluationGroupId(evaluationGroup.getId());//设置拷贝组的id
//下面拷贝一份考评组信息的维度信息
ResultModel resultModel = new ResultModel();
BeanUtils.copyProperties(dto, resultModel);
resultModel.setId(null);
resultModelService.insertResultModel(resultModel);
List<ResultTagetLibDto> libDtos = resultTagetLibService.selectResultTagetLibDtoByModelId(dto.getId());
dto.setTagetLibs(libDtos);
for (ResultTagetLibDto libDto: libDtos
) {
//下面拷贝考评组里面的指标信息
ResultTagetLib resultTagetLib = new ResultTagetLib();
BeanUtils.copyProperties(libDto, resultTagetLib);
resultTagetLib.setModelId(resultModel.getId());//设置新的维度id
resultTagetLib.setId(null);
resultTagetLibs.add(resultTagetLib);
}
}
if(resultTagetLibs.size() > 0){
//插入备份的考评组指标信息
resultTagetLibService.insertResultTagetLibs(resultTagetLibs);
}
//下面初始化lz_flow流程表 lz_flow_approval_role流程审批表
List<FlowApprovalRole> flowApprovalRoles = new ArrayList<>();
int stepIndex = 0;
for (FlowChartDetailRecord flowChartDetailRecord:flowChartDetailRecords
) {
Flow flow = new Flow();
flow.setFlowId(evaluationGroup.getId());
flow.setOpt("+");
flow.setStartId(flowStart.getId());
flow.setChartId(flowChartDetailRecord.getChartId());
String optName;
if(chartNameMaps.containsKey(flowChartDetailRecord.getChartId())){//缓存
optName = chartNameMaps.get(flowChartDetailRecord.getChartId());
}else{//查找数据库
FlowChart flowChart = flowChartService.selectFlowChartById(flowChartDetailRecord.getChartId());
chartNameMaps.put(flowChart.getId(), flowChart.getName());
optName = flowChart.getName();
}
flow.setOptDesc(optName);
flowService.insertFlow(flow);
if(flowChartDetailRecord.getOptType().intValue() == ChartOptType.APPOINT.getCode()){//指定人员的
String[] optIds = flowChartDetailRecord.getOptIds().split(",");
for (String id:optIds
) {
/*String[] roleIds = flowChartDetailRecord.getRoleIds().split(",");
for (String roleId:roleIds
) {
FlowApprovalRole flowApprovalRole = new FlowApprovalRole();
flowApprovalRole.setFlowId(flow.getId());
flowApprovalRole.setApprovalId(Long.parseLong(id));
flowApprovalRole.setStepType(flowChartDetailRecord.getStepType());
flowApprovalRole.setRoleId(roleId);
flowApprovalRole.setType(flowChartDetailRecord.getOptType());
flowApprovalRoles.add(flowApprovalRole);
flowApprovalRole.setStepIndex(stepIndex);
}*/
FlowApprovalRole flowApprovalRole = new FlowApprovalRole();
flowApprovalRole.setFlowId(flow.getId());
flowApprovalRole.setApprovalId(Long.parseLong(id));
flowApprovalRole.setStepType(flowChartDetailRecord.getStepType());
flowApprovalRole.setRoleId(flowChartDetailRecord.getRoleIds());
flowApprovalRole.setType(flowChartDetailRecord.getOptType());
flowApprovalRoles.add(flowApprovalRole);
flowApprovalRole.setStepIndex(stepIndex);
}
stepIndex++;
}else{
FlowApprovalRole flowApprovalRole = new FlowApprovalRole();
flowApprovalRole.setFlowId(flow.getId());
flowApprovalRole.setApprovalId(Long.parseLong(flowChartDetailRecord.getRoleIds()));
flowApprovalRole.setStepType(flowChartDetailRecord.getStepType());
flowApprovalRole.setRoleId(flowChartDetailRecord.getRoleIds());
flowApprovalRole.setType(flowChartDetailRecord.getOptType());
flowApprovalRoles.add(flowApprovalRole);
flowApprovalRole.setStepIndex(stepIndex);
/*String[] roleIds = flowChartDetailRecord.getRoleIds().split(",");
for (String roleId:roleIds
) {
FlowApprovalRole flowApprovalRole = new FlowApprovalRole();
flowApprovalRole.setFlowId(flow.getId());
flowApprovalRole.setStepType(flowChartDetailRecord.getStepType());
flowApprovalRole.setRoleId(roleId);
flowApprovalRole.setType(flowChartDetailRecord.getOptType());
flowApprovalRoles.add(flowApprovalRole);
flowApprovalRole.setStepIndex(stepIndex);
}*/
stepIndex++;
}
}
//插入记录
if(flowApprovalRoles.size() > 0){
flowApprovalRoleService.insertFlowApprovalRoles(flowApprovalRoles);
//初始化lz_result_details数据
List<ResultDetail> resultDetails = new ArrayList<>();
List<EvaluationStartStaff> evaluationStartStaffs = new ArrayList<>();
//下面初始化管理人员对应关系
for (StaffEntity entity:staffManagers
) {
EvaluationStartStaff evaluationStartStaff = new EvaluationStartStaff();
evaluationStartStaff.setEvaluationId(evaluationGroup.getId());
evaluationStartStaff.setEvaluationName(evaluationGroup.getName());
evaluationStartStaff.setStaffId(entity.getId());
evaluationStartStaff.setStartId(flowStart.getId());
evaluationStartStaff.setType(CheckStaffType.MANAGER.getCode());
evaluationStartStaffs.add(evaluationStartStaff);
}
//下面初始化参与人员
for (StaffSimpleInfo staffInfo:staffIds
) {
EvaluationStartStaff evaluationStartStaff = new EvaluationStartStaff();
evaluationStartStaff.setEvaluationId(evaluationGroup.getId());
evaluationStartStaff.setEvaluationName(evaluationGroup.getName());
evaluationStartStaff.setStaffId(staffInfo.getId());
evaluationStartStaff.setStartId(flowStart.getId());
evaluationStartStaff.setType(CheckStaffType.STAFF.getCode());
evaluationStartStaffs.add(evaluationStartStaff);
//初始化lz_result_records数据
ResultRecord resultRecord = new ResultRecord();
resultRecord.setDepartmentId(staffInfo.getDepartmentId());
resultRecord.setDepartmentName(staffInfo.getDepartmentName());
resultRecord.setStaffId(staffInfo.getId());
resultRecord.setStaffName(staffInfo.getName());
resultRecord.setType(1);//设置为提交目标
resultRecord.setStatus(0);//设置为新建
resultRecord.setStartId(flowStart.getId());
resultRecord.setEvaluationId(evaluationGroup.getId());
resultRecord.setFlowProcess(0);//设置为目标制定
//下面初始化flow_staff_id_role字段步骤为0的
String roleJSON = "[";
for (int i = 0; i < flowApprovalRoles.size() ;i++){
FlowApprovalRole approvalRole = flowApprovalRoles.get(i);
if(approvalRole.getStepIndex().intValue() == 0){//找到所有步骤为0的人员
Long staffId = approvalRole.getApprovalId();//默认为指定人员
if(approvalRole.getType().intValue() == ChartOptType.SELF.getCode()){
//制定人员为自己的
staffId = staffInfo.getId();
if(i == 0){//目前只设置一个多个不明确是否支持roleJSON是支持多个的
//设置当前审批员工id current_approval_staff_id
resultRecord.setCurrentApprovalStaffId(staffInfo.getId());
//设置当前审批员工姓名 current_approval_staff_name
resultRecord.setCurrentApprovalStaffName(staffInfo.getName());
}
} else if(approvalRole.getType().intValue() > 0){//当设置为几级领导时
///查找领导如果不存在那么设置管理人员
List<StaffEntity> staffLeader;
String key = staffInfo.getDepartmentId() + approvalRole.getType();
if(staffManages.containsKey(key)){
staffLeader = staffManages.get(staffInfo.getDepartmentId());
}else{
DepartManagers departManagers =
staffService.findLeader(staffInfo.getId(), approvalRole.getType());
staffLeader = departManagers.getManagers();
staffManages.put(key, departManagers.getManagers());
}
if(staffLeader.size() == 0){
//没有领导通知到组设置的绩效管理人员
for (StaffEntity entity:staffManagers
) {
roleJSON += ("{\"roleId\":0,\"staffId\":" + entity.getId() + "},");//这里写死了权限为0的即为找不到领导
}
if(i == 0){//目前只设置一个多个不明确是否支持roleJSON是支持多个的
//设置当前审批员工id current_approval_staff_id
resultRecord.setCurrentApprovalStaffId(staffManagers.get(0).getId());
//设置当前审批员工姓名 current_approval_staff_name
resultRecord.setCurrentApprovalStaffName(staffManagers.get(0).getName());
}
}else{
for(int j = 0; j <staffLeader.size(); j++ ){
StaffEntity staff = staffLeader.get(j);
roleJSON += ("{\"roleId\":"+ approvalRole.getRoleId() +
",\"staffId\":" + staff.getId() + "},");
}
if(i == 0){//目前只设置一个多个不明确是否支持roleJSON是支持多个的
//设置当前审批员工id current_approval_staff_id
resultRecord.setCurrentApprovalStaffId(staffLeader.get(0).getId());
//设置当前审批员工姓名 current_approval_staff_name
resultRecord.setCurrentApprovalStaffName(staffLeader.get(0).getName());
}
}
continue;
}else{
if(i == 0){//目前只设置一个多个不明确是否支持roleJSON是支持多个的
//设置当前审批员工id current_approval_staff_id
resultRecord.setCurrentApprovalStaffId(approvalRole.getApprovalId());
//设置当前审批员工姓名 current_approval_staff_name
resultRecord.setCurrentApprovalStaffName("");
}
}
roleJSON += ("{\"roleId\":"+ approvalRole.getRoleId() +
",\"staffId\":" + staffId + "},");
continue;
}
break;
}
roleJSON += "]";
roleJSON = roleJSON.replace(",]", "]");
resultRecord.setFlowStaffIdRole(roleJSON);
resultRecordService.insertResultRecord(resultRecord);
//下面生成ResultDetail对象
for (ResultModelDto modelDto:resultModelDtos
) {
if(modelDto.getTagetLibs() != null && modelDto.getTagetLibs().size() > 0){//模板里面有添加指标
for (ResultTagetLibDto libDto:
modelDto.getTagetLibs()) {
ResultDetail resultDetail = new ResultDetail();
resultDetail.setRecordId(resultRecord.getId());
resultDetail.setTarget(libDto.getName());
resultDetail.setType(modelDto.getType());
resultDetail.setKeyResult(libDto.getKeyResult());
resultDetail.setCheckWeight(libDto.getWeight());
resultDetail.setStaffId(staffInfo.getId());
resultDetail.setPriority(libDto.getOrderBy());
resultDetails.add(resultDetail);
}
}
}
}
//如果有数据插入lz_result_detail表
if(resultDetails.size() > 0){
//
resultDetailService.insertResultDetails(resultDetails);
}
evaluationStartStaffService.insertEvaluationStartStaffs(evaluationStartStaffs);
//下面通知所有参与考核人员
//如果有下面通知所有管理人员
}else{
return R.error(evaluationGroup.getName() + "——初始化考核流程失败");
}
}
return R.ok();
return flowStartService.saveStart(flowStart);
}

View File

@ -14,8 +14,10 @@ import com.lz.modules.performance.service.ResultTagetLibService;
import io.swagger.annotations.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@ -88,56 +90,8 @@ public class ResultModelController {
@PostMapping("/saveDetail")
@ApiOperation("保存模板中的考核维度及指标")
public R saveDetail(@RequestBody @ApiParam ResultModelDetailReq resultModelDetailReq) {
int resultModelOrderBy = 0;
for (ResultModelItemReq itemReq:
resultModelDetailReq.getModelItems()) {
ResultModel resultModel = new ResultModel();
BeanUtils.copyProperties(itemReq, resultModel);
resultModel.setCalculateId(resultModelDetailReq.getCalculateId());
resultModel.setGradeGroupId(resultModelDetailReq.getGradeGroupId());
resultModel.setGradeStatus(resultModelDetailReq.getGradeStatus());
resultModel.setEvaluationGroupId(resultModelDetailReq.getEvaluationGroupId());
resultModel.setOrderBy(resultModelOrderBy);
if(resultModel.getId() != null && resultModel.getId().intValue() > 0){
resultModelService.updateResultModelById(resultModel);
}else{
resultModelService.insertResultModel(resultModel);
}
if(itemReq.getTagetLibItems() != null){
int libOrderBy = 0;
List<ResultTagetLib> inserts = new ArrayList<>();
List<ResultTagetLib> updates = new ArrayList<>();
for (ResultTagetLibItemReq req:itemReq.getTagetLibItems()
) {
ResultTagetLib resultTagetLib = new ResultTagetLib();
BeanUtils.copyProperties(req, resultTagetLib);
resultTagetLib.setModelId(resultModel.getId());
resultTagetLib.setOrderBy(libOrderBy);
if(resultTagetLib.getId() != null && resultTagetLib.getId().intValue() > 0){
updates.add(resultTagetLib);
}else{
inserts.add(resultTagetLib);
}
if(resultTagetLib.getIsDelete() == null || resultTagetLib.getIsDelete().intValue() == 0){
libOrderBy++;
}
return resultModelService.saveDetail(resultModelDetailReq);
}
if(inserts.size() > 0){
resultTagetLibService.insertResultTagetLibs(inserts);
}
if(updates.size() > 0){
resultTagetLibService.updateBatchById(updates);
}
if(resultModel.getIsDelete() == null || resultModel.getIsDelete().intValue() == 0){
resultModelOrderBy++;
}
}
}
return R.ok();
}

View File

@ -1,31 +0,0 @@
package com.lz.modules.performance.req;
import com.lz.modules.equipment.entity.model.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.YearMonth;
/**
* @Author: djc
* @Desc:
* @Date: 2020/10/14 16:50
*/
@Data
@ApiModel(value = "绩效报表请求实体")
public class ChartResultReq extends BasePage{
//考核类型 月度 季度
@ApiModelProperty(value = "考核类型 月度,自定义",name = "type")
private int type = 0;
@ApiModelProperty(value = "如果为月度 默认当前月",name = "month")
private String month = YearMonth.now().toString();
@ApiModelProperty(value = "自定义起始时间",name = "startTime")
private String startTime;
@ApiModelProperty(value = "自定义结束时间",name = "endTime")
private String endTime;
}

View File

@ -0,0 +1,12 @@
package com.lz.modules.performance.res;
import lombok.Data;
@Data
public class ChartStart{
private String time;
private Long startId;
}

View File

@ -0,0 +1,19 @@
package com.lz.modules.performance.res;
import lombok.Data;
import java.util.List;
/**
* @Author: djc
* @Desc:
* @Date: 2020/10/26 14:21
*/
@Data
public class ChartStartsRes {
private int type;
private List<ChartStart> list;
}

View File

@ -2,7 +2,6 @@ package com.lz.modules.performance.service;
import com.lz.common.utils.PageUtils;
import com.lz.modules.performance.req.AssessTaskReq;
import com.lz.modules.performance.req.ChartResultReq;
import com.lz.modules.performance.res.ChartStatisticalRes;
import java.util.List;
@ -15,5 +14,5 @@ import java.util.List;
public interface AssessService {
PageUtils userTaskList(AssessTaskReq req,Long userId);
List<ChartStatisticalRes> chartResult(ChartResultReq req);
//List<ChartStatisticalRes> chartResult(ChartResultReq req);
}

View File

@ -1,12 +1,9 @@
package com.lz.modules.performance.service;
import com.lz.common.utils.PageUtils;
import com.lz.modules.performance.req.ChartResultReq;
import com.lz.modules.performance.res.ChartStatistical;
import com.lz.modules.performance.res.ChartStatisticalRes;
import com.lz.modules.performance.res.ResultRankListRes;
import java.math.BigDecimal;
import java.util.List;
/**
@ -16,10 +13,12 @@ import java.util.List;
*/
public interface ChartResultService {
List<ChartStatisticalRes> chartReport(ChartResultReq req);
List<ChartStatisticalRes> chartReport(Long startId);
List<ChartStatistical> countDepartmentAndStaffNum(List<String>staffIds);
PageUtils resultRankList(ChartResultReq req);
//PageUtils resultRankList(ChartResultReq req);
void chartStarts();
}

View File

@ -9,7 +9,6 @@ import com.lz.modules.flow.service.FlowChangeService;
import com.lz.modules.flow.service.FlowRecordService;
import com.lz.modules.performance.dto.TaskListDto;
import com.lz.modules.performance.req.AssessTaskReq;
import com.lz.modules.performance.req.ChartResultReq;
import com.lz.modules.performance.res.ChartStatisticalRes;
import com.lz.modules.performance.res.TaskListRes;
import com.lz.modules.performance.service.AssessService;
@ -67,9 +66,4 @@ public class AssessServiceImpl implements AssessService {
return data;
}
@Override
public List<ChartStatisticalRes> chartResult(ChartResultReq req) {
return null;
}
}

View File

@ -6,20 +6,22 @@ import com.lz.common.utils.PageUtils;
import com.lz.modules.app.entity.DepartmentsStaffRelateEntity;
import com.lz.modules.app.service.DepartmentsStaffRelateService;
import com.lz.modules.app.service.StaffService;
import com.lz.modules.flow.entity.FlowStart;
import com.lz.modules.flow.service.EvaluationGroupService;
import com.lz.modules.performance.req.AssessDetailReq;
import com.lz.modules.performance.req.ChartResultReq;
import com.lz.modules.flow.service.FlowStartService;
import com.lz.modules.performance.res.ChartStart;
import com.lz.modules.performance.res.ChartStartsRes;
import com.lz.modules.performance.res.ChartStatistical;
import com.lz.modules.performance.res.ChartStatisticalRes;
import com.lz.modules.performance.service.ChartResultService;
import com.lz.modules.sys.dao.app.ResultRecordMapper;
import com.lz.modules.sys.service.app.ResultRecordService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Consumer;
/**
* @Author: djc
@ -39,21 +41,21 @@ public class ChartResultServiceImpl implements ChartResultService {
private ResultRecordMapper resultRecordMapper;
@Autowired
private StaffService staffService;
@Autowired
private FlowStartService flowStartService;
@Override
public List<ChartStatisticalRes> chartReport(ChartResultReq req) {
public List<ChartStatisticalRes> chartReport(Long startId) {
List<ChartStatisticalRes> data = new ArrayList<>();
AssessDetailReq query = new AssessDetailReq();
ChartStatisticalRes res;
BeanUtils.copyProperties(req,query);
List<ChartStatistical> process = resultRecordService.countNumByFlowProcess(query);
List<ChartStatistical> process = resultRecordService.countNumByFlowProcess(startId);
res = new ChartStatisticalRes();
res.setType(0);
res.setStatisticals(process);
data.add(res);
List<ChartStatistical> scoreLevel = resultRecordService.countNumByScoreLevel(query);
List<ChartStatistical> scoreLevel = resultRecordService.countNumByScoreLevel(startId);
res = new ChartStatisticalRes();
res.setType(1);
res.setStatisticals(scoreLevel);
@ -99,11 +101,26 @@ public class ChartResultServiceImpl implements ChartResultService {
return data;
}
@Override
/* @Override
public PageUtils resultRankList(ChartResultReq req) {
PageUtils pageUtils = PageUtils.startPage(req.getCurrPage(), req.getPageSize()).doSelect(
page -> resultRecordMapper.selectResultRankList(page,req)
);
return pageUtils;
}*/
@Override
public void chartStarts() {
List<ChartStartsRes> res = new ArrayList<>();
List<FlowStart> list = flowStartService.list(new QueryWrapper<FlowStart>().eq("is_delete", 0).orderByAsc("start_time"));
list.forEach(new Consumer<FlowStart>() {
@Override
public void accept(FlowStart flowStart) {
if(flowStart.getCycleType()==0){
ChartStart chartStart = new ChartStart();
}
}
});
}
}

View File

@ -16,8 +16,6 @@ import com.lz.modules.app.req.ReportListReq;
import com.lz.modules.app.req.ResultRecordReq;
import com.lz.modules.app.resp.OwnResultResp;
import com.lz.modules.flow.model.ResultRecordDto;
import com.lz.modules.performance.req.AssessDetailReq;
import com.lz.modules.performance.req.ChartResultReq;
import com.lz.modules.performance.res.AssessManagerDetailRes;
import com.lz.modules.performance.res.ChartStatistical;
import com.lz.modules.sys.entity.app.ResultRecord;
@ -74,11 +72,11 @@ public interface ResultRecordMapper extends BaseMapper<ResultRecord> {
List<ResultRecord> selectResultRecordAllByStaffId(@Param("staffId") Long staffId);
List<ChartStatistical> countNumByFlowProcess(@Param("req") AssessDetailReq req);
List<ChartStatistical> countNumByFlowProcess(@Param("startId") Long startId);
List<ChartStatistical> countNumByScoreLevel(@Param("req") AssessDetailReq req);
List<ChartStatistical> countNumByScoreLevel(@Param("startId") Long startId);
List<ResultRecord> selectResultRankList(@Param("page") IPage page, @Param("req") ChartResultReq req);
//List<ResultRecord> selectResultRankList(@Param("page") IPage page, @Param("req") ChartResultReq req);
void batchDeleteByStartId(@Param("startId")Long startId);

View File

@ -102,9 +102,9 @@ public interface ResultRecordService extends IService<ResultRecord> {
List<ResultRecord> selectResultRecordAllByStaffId(Long staffId);
List<ChartStatistical> countNumByFlowProcess(AssessDetailReq req);
List<ChartStatistical> countNumByFlowProcess(Long startId);
List<ChartStatistical> countNumByScoreLevel(AssessDetailReq req);
List<ChartStatistical> countNumByScoreLevel(Long startId);
void batchDeleteByStaffIds(List<String> staffIds);

View File

@ -737,13 +737,13 @@ public class ResultRecordServiceImpl extends ServiceImpl<ResultRecordMapper, Res
}
@Override
public List<ChartStatistical> countNumByFlowProcess(AssessDetailReq req) {
return resultRecordMapper.countNumByFlowProcess(req);
public List<ChartStatistical> countNumByFlowProcess(Long startId) {
return resultRecordMapper.countNumByFlowProcess(startId);
}
@Override
public List<ChartStatistical> countNumByScoreLevel(AssessDetailReq req) {
return resultRecordMapper.countNumByScoreLevel(req);
public List<ChartStatistical> countNumByScoreLevel(Long startId) {
return resultRecordMapper.countNumByScoreLevel(startId);
}
@Override
@ -847,7 +847,6 @@ public class ResultRecordServiceImpl extends ServiceImpl<ResultRecordMapper, Res
break;
}
}
resultRecord.setFlowStaffIdRole(currentFlowRecord.getFlowStaffIdRole());
resultRecord.setCurrentApprovalStaffId(currentFlowRecord.getApprovalStaffId());
resultRecord.setCurrentApprovalStaffName(currentFlowRecord.getApprovalStaffName());

View File

@ -353,11 +353,11 @@
</select>
<select id="countNumByFlowProcess" resultType="com.lz.modules.performance.res.ChartStatistical">
SELECT count(flow_process) num,flow_process as 'desc' from lz_result_record where is_delete=0 GROUP BY flow_process
SELECT count(flow_process) num,flow_process as 'desc' from lz_result_record where is_delete=0 and start_id =#{startId} GROUP BY flow_process
</select>
<select id="countNumByScoreLevel" resultType="com.lz.modules.performance.res.ChartStatistical">
SELECT count(score_level) num,score_level as 'desc' from lz_result_record where is_delete=0 GROUP BY score_level
SELECT count(score_level) num,score_level as 'desc' from lz_result_record where is_delete=0 and start_id =#{startId} GROUP BY score_level
</select>
<select id="selectResultRankList" resultType="com.lz.modules.performance.res.ResultRankListRes">

View File

@ -13,12 +13,13 @@
<result column="status" property="status"/>
<result column="type" property="type"/>
<result column="step_index" property="stepIndex"/>
<result column="flow_process" property="flowProcess"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id AS id, is_delete AS isDelete, gmt_create AS gmtCreate, gmt_modified AS gmtModified, name AS name, process_id AS processId, status AS status, type AS type, step_index AS stepIndex
id AS id, is_delete AS isDelete, gmt_create AS gmtCreate, gmt_modified AS gmtModified, name AS name, process_id AS processId, status AS status, type AS type, step_index AS stepIndex, flow_process AS flowProcess
</sql>
@ -31,30 +32,32 @@
<insert id="insertFlowChart" parameterType="FlowChart" useGeneratedKeys="true" keyProperty="id" >
insert into lz_flow_chart(
<if test="name != null">name, </if>
<if test="processId != null">process_id, </if>
<if test="status != null">status, </if>
<if test="type != null">type, </if>
<if test="stepIndex != null">step_index, </if>
is_delete,
gmt_create,
gmt_modified
<if test="name != null">name, </if>
<if test="processId != null">process_id, </if>
<if test="status != null">status, </if>
<if test="type != null">type, </if>
<if test="stepIndex != null">step_index, </if>
<if test="flowProcess != null">flow_process, </if>
is_delete,
gmt_create,
gmt_modified
)values(
<if test="name != null">#{ name}, </if>
<if test="processId != null">#{ processId}, </if>
<if test="status != null">#{ status}, </if>
<if test="type != null">#{ type}, </if>
<if test="stepIndex != null">#{ stepIndex}, </if>
0,
now(),
now()
<if test="name != null">#{ name}, </if>
<if test="processId != null">#{ processId}, </if>
<if test="status != null">#{ status}, </if>
<if test="type != null">#{ type}, </if>
<if test="stepIndex != null">#{ stepIndex}, </if>
<if test="flowProcess != null">#{ flowProcess}, </if>
0,
now(),
now()
)
</insert>
<update id="updateFlowChartById" parameterType="FlowChart" >
update
lz_flow_chart
lz_flow_chart
<trim prefix="set" suffixOverrides=",">
<if test="isDelete != null">is_delete = #{isDelete},</if>
<if test="gmtCreate != null">gmt_create = #{gmtCreate},</if>
@ -62,7 +65,8 @@
<if test="processId != null">process_id = #{processId},</if>
<if test="status != null">status = #{status},</if>
<if test="type != null">type = #{type},</if>
<if test="stepIndex != null">step_index = #{stepIndex}</if>
<if test="stepIndex != null">step_index = #{stepIndex},</if>
<if test="flowProcess != null">flow_process = #{flowProcess}</if>
</trim>
,gmt_modified = now()
where id = #{id}
@ -71,15 +75,16 @@
<update id="updateCoverFlowChartById" parameterType="FlowChart" >
update
lz_flow_chart
set
lz_flow_chart
set
is_delete = #{isDelete},
gmt_create = #{gmtCreate},
name = #{name},
process_id = #{processId},
status = #{status},
type = #{type},
step_index = #{stepIndex}
step_index = #{stepIndex},
flow_process = #{flowProcess}
,gmt_modified = now()
where id = #{id}
</update>

View File

@ -96,7 +96,7 @@ public class MysqlMain {
//list.add(new TablesBean("lz_flow_chart_detail_record"));
//list.add(new TablesBean("lz_flow_approval_role"));
list.add(new TablesBean("lz_flow_record"));
list.add(new TablesBean("lz_flow_chart"));
List<TablesBean> list2 = new ArrayList<TablesBean>();
Map<String, String> map = MysqlUtil2ShowCreateTable.getComments();