Browse Source

工作计划代码优化

feature/dangjian
zhangyongzhangyong 6 years ago
parent
commit
3bce400f9e
  1. 94
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/service/impl/KpiRuleServiceImpl.java

94
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/service/impl/KpiRuleServiceImpl.java

@ -33,6 +33,7 @@ import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.constant.KpiFieldConstant;
import com.elink.esua.epdc.dao.*;
import com.elink.esua.epdc.dto.*;
import com.elink.esua.epdc.dto.form.KpiMetaDataOfEventsFormDTO;
import com.elink.esua.epdc.dto.form.KpiRuleSaveOrUpdateFormDTO;
import com.elink.esua.epdc.dto.result.KpiRuleQueryResultDTO;
import com.elink.esua.epdc.entity.*;
@ -41,6 +42,7 @@ import com.elink.esua.epdc.enums.KpiRuleModeEnum;
import com.elink.esua.epdc.service.KpiRuleService;
import com.elink.esua.epdc.utils.DeptUtils;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -53,6 +55,7 @@ import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.util.*;
@ -62,6 +65,7 @@ import java.util.*;
* @author qu qu@elink-cn.com
* @since v1.0.0 2019-11-27
*/
@Slf4j
@Service
public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntity> implements KpiRuleService {
private Logger logger = LoggerFactory.getLogger(getClass());
@ -306,13 +310,11 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
* @Date: 2019-12-19
*/
public Result calcWorkScoreByRuleCode(String ruleCode){
// 每次JOB启动时,根据当前时间,获取上一个月的:月初-月末时间
YearMonth now = YearMonth.now();
Date startDate = LocalDateUtils.localDateToDate(now.minusMonths(NumConstant.ONE).atDay(NumConstant.ONE));
Date endDate = LocalDateUtils.localDateToDate(now.minusMonths(NumConstant.ONE).atEndOfMonth());
// 查询考核规则表
KpiRuleDTO kpiRuleDTO = kpiRuleDao.queryKpiRuleMetaFormula(ruleCode);
//每次JOB启动时,根据当前时间,获取时间范围
Map<String, Date> mapDate = this.initKpiParam(kpiRuleDTO.getKpiCycle(), "calcWorkScoreByRuleCode");
if (mapDate != null){
// 根据 考核规则表-外键(公式id),查询绩效考核公式表,待运行公式方法
KpiFormulaDTO kpiFormulaDTO = kpiFormulaDao.queryFormula(kpiRuleDTO.getReferenceId());
// 根据 考核规则表-主键,查询公式参数表,排序:1,2,3,4,5
@ -324,14 +326,12 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
int pageSize = NumConstant.THIRTY;
int pageIndex = NumConstant.ONE;
List<Long> deptIdList = deptUtils.getDeptIdList(OrganizationTypeConstant.ORG_TYPE_GRID_PARTY, pageSize, pageIndex);
do {
for (Long deptId : deptIdList) {
BigDecimal[] paramValue = selectArrayOfMetaDate(deptId, startDate, endDate, metaDateCodeList);
BigDecimal[] paramValue = selectArrayOfMetaDate(deptId, mapDate.get("startDate"), mapDate.get("endDate"), metaDateCodeList);
//参数准备完全时,执行js运算
if (paramValue.length == kpiFormulaDTO.getParamAmount()) {
BigDecimal workScore;
@ -354,8 +354,8 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
KpiResultGridEntity kpiManualScoreEntity = new KpiResultGridEntity();
kpiManualScoreEntity.setWorkScore(workScore);
kpiManualScoreEntity.setGridId(deptId);
kpiManualScoreEntity.setStartDate(startDate);
kpiManualScoreEntity.setEndDate(endDate);
kpiManualScoreEntity.setStartDate(mapDate.get("startDate"));
kpiManualScoreEntity.setEndDate(mapDate.get("endDate"));
kpiManualScoreEntity.setKpiCycle(kpiRuleDTO.getKpiCycle());
this.saveOrUpdateKpiResult(kpiManualScoreEntity);
} catch (Exception e) {
@ -364,11 +364,10 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
}
}
}
pageIndex++;
deptIdList = deptUtils.getDeptIdList(OrganizationTypeConstant.ORG_TYPE_GRID_PARTY, pageSize, pageIndex);
} while (CollUtil.isNotEmpty(deptIdList));
}
return new Result();
}
@ -386,21 +385,13 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
// 根据 考核规则表-外键(公式id),查询绩效考核公式表,待运行公式方法
KpiFormulaDTO kpiFormulaDTO = kpiFormulaDao.queryFormula(kpiRuleDTO.getReferenceId());
YearMonth now = YearMonth.now();//2019/12
Date endDate = LocalDateUtils.localDateToDate(now.minusMonths(NumConstant.ONE).atEndOfMonth());
// 考核周期
String kpiCycle = kpiRuleDTO.getKpiCycle();
// 考核结束日
kpiResultGridEntity.setEndDate(endDate);
// 考核开始日
if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_MONTH.getValue())) {
kpiResultGridEntity.setStartDate(LocalDateUtils.localDateToDate(now.minusMonths(NumConstant.ONE).atDay(NumConstant.ONE)));
} else if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_QUARTER.getValue())) {
kpiResultGridEntity.setStartDate(LocalDateUtils.localDateToDate(now.minusMonths(NumConstant.THREE).atDay(NumConstant.ONE)));
} else if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_YEAR.getValue())) {
kpiResultGridEntity.setStartDate(LocalDateUtils.localDateToDate(now.minusMonths(NumConstant.ELEVEN).atDay(NumConstant.ONE)));
}
//每次JOB启动时,根据当前时间,获取时间范围
Map<String, Date> mapDate = this.initKpiParam(kpiCycle, "calcBaseGridFinalScoreByRuleCode");
if (mapDate != null) {
kpiResultGridEntity.setEndDate(mapDate.get("endDate"));
kpiResultGridEntity.setStartDate(mapDate.get("startDate"));
//查询网格最终得分:所有网格
List<KpiResultGridEntity> resultGrid = kpiResultGridDao.selectKpiResultGrid(kpiResultGridEntity);
for (KpiResultGridEntity kpi : resultGrid){
@ -430,6 +421,7 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
return new Result().error("运行方法异常" + e.getMessage());
}
}
}
return new Result();
}
@ -511,20 +503,13 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
KpiResultSuperiorEntity kpiResultSuperiorEntity = new KpiResultSuperiorEntity();
KpiRuleDTO kpiRuleDTO = kpiRuleDao.queryKpiRuleMetaFormula(ruleCode);// 查询考核规则表
YearMonth now = YearMonth.now();
Date endDate = LocalDateUtils.localDateToDate(now.minusMonths(NumConstant.ONE).atEndOfMonth());
// 考核周期
String kpiCycle = kpiRuleDTO.getKpiCycle();
// 考核结束日
kpiResultSuperiorEntity.setEndDate(endDate);
// 考核开始日
if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_MONTH.getValue())) {
kpiResultSuperiorEntity.setStartDate(LocalDateUtils.localDateToDate(now.minusMonths(NumConstant.ONE).atDay(NumConstant.ONE)));
} else if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_QUARTER.getValue())) {
kpiResultSuperiorEntity.setStartDate(LocalDateUtils.localDateToDate(now.minusMonths(NumConstant.THREE).atDay(NumConstant.ONE)));
} else if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_YEAR.getValue())) {
kpiResultSuperiorEntity.setStartDate(LocalDateUtils.localDateToDate(now.minusMonths(NumConstant.ELEVEN).atDay(NumConstant.ONE)));
}
//每次JOB启动时,根据当前时间,获取时间范围
Map<String, Date> mapDate = this.initKpiParam(kpiCycle, "calcDistrictStreetGeneralRule");
if (mapDate != null) {
kpiResultSuperiorEntity.setEndDate(mapDate.get("endDate"));
kpiResultSuperiorEntity.setStartDate(mapDate.get("startDate"));
kpiResultSuperiorEntity.setKpiCycle(kpiCycle);
// 根据 考核规则表-主键,查询公式参数表,排序:1,2,3,4,5,6
@ -542,6 +527,7 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
this.assessmentScoreCalculation(kpiRuleDTO.getReferenceId(),
kpiResultSuperiorEntity.getStartDate(),kpiResultSuperiorEntity.getEndDate(),
metaDateCodeList,OrganizationTypeConstant.ORG_TYPE_STREET_DEPT,kpiCycle);
}
return new Result();
}
@ -628,4 +614,38 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
return new Result().ok(calculationScore);
}
/**
* 根据月 以及当前月份初始化统计元数据值的参数用于模块间调用
*
* @param kpiCycle
* @param methodName 调用此方法的方法名用于日志打印
* @return java.util.Date 若返回空值当前月份无法针对传入的考核周期进行考核
* @author zhangyong
* @date 2019/12/24
*/
private Map<String,Date> initKpiParam(String kpiCycle, String methodName) {
LocalDate startDate = null;
YearMonth now = YearMonth.now();
if (KpiCycleEnum.KPI_CYCLE_MONTH.getValue().equals(kpiCycle)) {
startDate = now.minusMonths(NumConstant.ONE).atDay(NumConstant.ONE);
} else if (KpiCycleEnum.KPI_CYCLE_QUARTER.getValue().equals(kpiCycle)) {
int monthValue = now.getMonthValue();
if (monthValue == NumConstant.ONE || monthValue == NumConstant.FOUR || monthValue == NumConstant.SEVEN || monthValue == NumConstant.TEN) {
startDate = now.minusMonths(NumConstant.THREE).atDay(NumConstant.ONE);
}
} else if (KpiCycleEnum.KPI_CYCLE_YEAR.getValue().equals(kpiCycle)) {
if (now.getMonthValue() == NumConstant.ONE) {
startDate = now.minusMonths(NumConstant.TWELVE).atDay(NumConstant.ONE);
}
}
if (null == startDate) {
log.error("当前时间:{},无法按照{}执行绩效考核{}", LocalDateTime.now().toString(), kpiCycle, methodName);
return null;
}
log.info("开始执行:{},当前时间:{},考核周期:{}", methodName, LocalDateTime.now().toString(), kpiCycle);
Map<String,Date> map = new HashMap<String, Date>();
map.put("startDate", LocalDateUtils.localDateToDate(startDate));
map.put("endDate", LocalDateUtils.localDateToDate(YearMonth.now().minusMonths(NumConstant.ONE).atEndOfMonth()));
return map;
}
}

Loading…
Cancel
Save