增加返回绩效详情时,返回当前指标权重之和

This commit is contained in:
wulin 2020-10-28 17:32:08 +08:00
parent 8587ce74fe
commit b5347a0aee
3 changed files with 58 additions and 8 deletions

View File

@ -35,6 +35,8 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
@ -346,24 +348,30 @@ public class ResultRecordController extends AbstractController {
//获取计算公式
List<CalculateModel> calculateModels = getCalculate(resultModels.get(0).getCalculateId());
resultRecordDetailDto.setGradeGroupId(resultModels.get(0).getGradeGroupId());//设置评分等级
StaffEntity staffEntity = staffService.selectStaffById(resultRecord.getStaffId());
resultRecordDetailDto.setAvatar(staffEntity.getAvatar());
resultRecordDetailDto.setJobNumber(staffEntity.getJobNumber());
List<ResultRecortModelDto> resultRecortModelDtos = new ArrayList<>();
BigDecimal weight = BigDecimal.ZERO;
for (ResultModel model:resultModels
) {
resultRecordDetailDto.setGradeGroupId(model.getGradeGroupId());
setCalculateValue(calculateModels, model);
ResultRecortModelDto resultRecortModelDto = new ResultRecortModelDto();
BeanUtils.copyProperties(model, resultRecortModelDto);
List<ResultDetailDto> detailDtos =
resultDetailService.selectDtosByRecordId(resultRecord.getId(), model.getType());
for (ResultDetailDto dto:detailDtos
) {
dto.setCalculate(setCalculateValue(calculateModels, dto)) ;
weight = weight.add(dto.getCheckWeight());
}
//下面设置计算公式
resultRecortModelDto.setWeight(weight);
resultRecortModelDto.setDetailDtos(detailDtos);
resultRecortModelDtos.add(resultRecortModelDto);
}
resultRecordDetailDto.setRecortModelDtos(resultRecortModelDtos);
return R.ok().put("data", resultRecordDetailDto);
@ -371,6 +379,40 @@ public class ResultRecordController extends AbstractController {
}
private String setCalculateValue(List<CalculateModel> calculateModels, Object model){
String mName = model.getClass().getName();//.replace("req", "dto");
String cal = "";
for (CalculateModel calculate:calculateModels
) {
if(mName.contains("." + calculate.getTaboleBeanName())){//支持表名生成的req和dto
//获取值
try {
Class<?> clazz = model.getClass();
Method method = clazz.getMethod("get" + calculate.getFieldBeanName());
Object obj = method.invoke(model);
if(obj != null){
calculate.setFieldValue(obj.toString());
}
if(calculate.getFieldValue() == null){
cal += calculate.getFieldBeanName();
}else{
cal += calculate.getFieldValue();
}
if(calculate.getOpt() != null){
cal += calculate.getOpt();
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
return cal;
}
private List<CalculateModel> getCalculate(Long id){
ResultCalculate resultCalculate =
resultCalculateService.selectResultCalculateById(id);
@ -384,7 +426,8 @@ public class ResultRecordController extends AbstractController {
) {
char b = chars[i];
if(b == '*' || b == '/' || b == '+' || b == '-'){
calculateModel.setFieldName(getBeanName(value));
calculateModel.setFieldName(value);
calculateModel.setFieldBeanName(getBeanName(value));
calculateModel.setOpt(String.valueOf(b));
calculateModels.add(calculateModel);
calculateModel = null;
@ -394,9 +437,9 @@ public class ResultRecordController extends AbstractController {
}else if(b == '>'){
if(type == 0){
calculateModel.setTableName(value);
value = value.replace("lz_", "");//去掉lz_前缀
calculateModel.setTableName(getBeanName(value));
calculateModel.setTaboleBeanName(getBeanName(value));
}
type--;
type *= -1;
@ -408,7 +451,8 @@ public class ResultRecordController extends AbstractController {
}
value += String.valueOf(b);
if(i == chars.length - 1){
calculateModel.setFieldName(getBeanName(value));
calculateModel.setFieldName(value);
calculateModel.setFieldBeanName(getBeanName(value));
calculateModels.add(calculateModel);
break;
}

View File

@ -6,7 +6,10 @@ import lombok.Data;
* */
@Data
public class CalculateModel {
private String tableName;//表明对象名称
private String tableName;//表名
private String taboleBeanName;//类的可能名称
private String fieldName;//字段属性名称
private String fieldBeanName;//字段的名称
private String fieldValue;//取得的字段的值
private String opt;//计算方法 + - * /
}

View File

@ -73,7 +73,10 @@ public class ResultRecordDetailDto {
//当前是目标确认还是评分0目标制定1目标确认2执行中3结果值录入4评分5考核结束
@ApiModelProperty(value = "当前是目标确认还是评分0目标制定1目标确认2执行中3结果值录入4评分5考核结束", name = "flowProcess")
private Integer flowProcess;
@ApiModelProperty(value = "考核维度合计", name = "recortModelDtos")
List<ResultRecortModelDto> recortModelDtos;
@ApiModelProperty(value = "当前指标权重之和", name = "weight")
BigDecimal weight;
/**
*
* @return