diff --git a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java index 3bbf3ff8..74fd3224 100644 --- a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java +++ b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java @@ -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 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 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 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 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 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; } diff --git a/src/main/java/com/lz/modules/flow/model/CalculateModel.java b/src/main/java/com/lz/modules/flow/model/CalculateModel.java index 47302e8b..f4442859 100644 --- a/src/main/java/com/lz/modules/flow/model/CalculateModel.java +++ b/src/main/java/com/lz/modules/flow/model/CalculateModel.java @@ -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;//计算方法 + - * / } diff --git a/src/main/java/com/lz/modules/flow/model/ResultRecordDetailDto.java b/src/main/java/com/lz/modules/flow/model/ResultRecordDetailDto.java index 868f7ce3..141291f6 100644 --- a/src/main/java/com/lz/modules/flow/model/ResultRecordDetailDto.java +++ b/src/main/java/com/lz/modules/flow/model/ResultRecordDetailDto.java @@ -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 recortModelDtos; + @ApiModelProperty(value = "当前指标权重之和", name = "weight") + BigDecimal weight; /** * * @return