Browse Source

job定时任务 : 设置网格考核最终得分表:工作得分数值

feature/dangjian
zhangyongzhangyong 6 years ago
parent
commit
ad75251e27
  1. 7
      esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/feign/KpiFeignClient.java
  2. 10
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/dao/KpiFormulaDao.java
  3. 13
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/dao/KpiMetaDataDao.java
  4. 10
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/dao/KpiRuleDao.java
  5. 12
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/dao/KpiRuleParamDao.java
  6. 11
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/feign/AdminFeignClient.java
  7. 5
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/feign/fallback/AdminFeignClientFallback.java
  8. 150
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/service/impl/KpiRuleServiceImpl.java
  9. 16
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/resources/mapper/KpiFormulaDao.xml
  10. 15
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/resources/mapper/KpiMetaDataDao.xml
  11. 2
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/resources/mapper/KpiResultGridDao.xml
  12. 17
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/resources/mapper/KpiRuleDao.xml
  13. 15
      esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/resources/mapper/KpiRuleParamDao.xml

7
esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/feign/KpiFeignClient.java

@ -6,13 +6,14 @@ import com.elink.esua.epdc.feign.fallback.KpiFeignClientFallBack;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* @author: qushutong
* @Date: 2019/12/12 18:46
* @Description: kpi模块
*/
@FeignClient(name = ServiceConstant.EPDC_KPI_SERVER, fallback = KpiFeignClientFallBack.class,url = "http://127.0.0.1:9066")
@FeignClient(name = ServiceConstant.EPDC_KPI_SERVER, fallback = KpiFeignClientFallBack.class)
public interface KpiFeignClient {
/***
@ -25,6 +26,6 @@ public interface KpiFeignClient {
@GetMapping(value = "kpi/metaData/buildMetaData", consumes = MediaType.APPLICATION_JSON_VALUE)
Result runKpiMateData();
@GetMapping("")
Result startTaskByRuleCode(String ruleCode);
@GetMapping("kpi/rule/calcByCode/{ruleCode}")
Result startTaskByRuleCode(@PathVariable("ruleCode") String ruleCode);
}

10
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/dao/KpiFormulaDao.java

@ -17,6 +17,7 @@
package com.elink.esua.epdc.dao;
import com.elink.esua.epdc.dto.KpiFormulaDTO;
import com.elink.esua.epdc.dto.result.KpiFormulaDictResultDTO;
import com.elink.esua.epdc.entity.KpiFormulaEntity;
import com.elink.esua.epdc.commons.mybatis.dao.BaseDao;
@ -41,4 +42,13 @@ public interface KpiFormulaDao extends BaseDao<KpiFormulaEntity> {
* @Date 2019/11/27 14:11
**/
List<KpiFormulaDictResultDTO> selectListKpiFormulaDictResultDTO();
/**
* @Description: 查询公式运行方法
* @Param: [id]
* @return: com.elink.esua.epdc.dto.KpiFormulaDTO
* @Author: zy
* @Date: 2019-12-18
*/
KpiFormulaDTO queryFormula(String id);
}

13
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/dao/KpiMetaDataDao.java

@ -18,9 +18,13 @@
package com.elink.esua.epdc.dao;
import com.elink.esua.epdc.commons.mybatis.dao.BaseDao;
import com.elink.esua.epdc.dto.KpiMetaDataDTO;
import com.elink.esua.epdc.entity.KpiMetaDataEntity;
import org.apache.ibatis.annotations.Mapper;
import java.math.BigDecimal;
import java.util.Map;
/**
* 绩效考核的元数据
*
@ -29,5 +33,14 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface KpiMetaDataDao extends BaseDao<KpiMetaDataEntity> {
/**
* @Description: 获取 运行公式 参数具体值
* @Param: [map] dataCodestartDateendDatedeptId
* @return: com.elink.esua.epdc.dto.KpiMetaDataDTO
* @Author: zy
* @Date: 2019-12-18
*/
KpiMetaDataDTO queryFormulaParamValue(Map<String, Object> map);
}

10
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/dao/KpiRuleDao.java

@ -18,6 +18,7 @@
package com.elink.esua.epdc.dao;
import com.elink.esua.epdc.commons.mybatis.dao.BaseDao;
import com.elink.esua.epdc.dto.KpiRuleDTO;
import com.elink.esua.epdc.dto.KpiRuleParamDTO;
import com.elink.esua.epdc.dto.result.KpiRuleQueryResultDTO;
import com.elink.esua.epdc.entity.KpiRuleEntity;
@ -62,4 +63,13 @@ public interface KpiRuleDao extends BaseDao<KpiRuleEntity> {
**/
KpiRuleQueryResultDTO queryDetailInfo(String id);
/**
* @Description: 根据考核规则编码查询符合考核规则 元公式
* @Param: [ruleCode] 考核规则编码
* 规则生成方式为0 元公式
* @return: com.elink.esua.epdc.dao.KpiRuleDao
* @Author: zy
* @Date: 2019-12-18
*/
KpiRuleDTO queryKpiRuleMetaFormula(String ruleCode);
}

12
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/dao/KpiRuleParamDao.java

@ -18,9 +18,12 @@
package com.elink.esua.epdc.dao;
import com.elink.esua.epdc.commons.mybatis.dao.BaseDao;
import com.elink.esua.epdc.dto.KpiRuleParamDTO;
import com.elink.esua.epdc.entity.KpiRuleParamEntity;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 公式参数表
*
@ -38,4 +41,13 @@ public interface KpiRuleParamDao extends BaseDao<KpiRuleParamEntity> {
* @Date 2019/11/27 16:36
**/
int deleteByRuleId(String id);
/**
* @Description: 根据 考核规则表-主键查询公式参数表
* @Param: [ruleId] 规则ID
* @return: java.util.List<com.elink.esua.epdc.dto.KpiRuleParamDTO>
* @Author: zy
* @Date: 2019-12-18
*/
List<KpiRuleParamDTO> queryFormulaParam(String ruleId);
}

11
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/feign/AdminFeignClient.java

@ -64,4 +64,15 @@ public interface AdminFeignClient {
@GetMapping("/sys/dept/getDeptInfoById/{deptId}/{leaderFlag}")
Result<DeptLevelAndLeaderDTO> getDeptInfoById(@PathVariable("deptId") Long deptId,
@PathVariable("leaderFlag") String leaderFlag);
/**
* 根据部门ID获取上级所有部门信息
*
* @param deptId
* @return com.elink.esua.epdc.commons.tools.utils.Result<ParentAndAllDeptDTO>
* @author zy
* @date 2019-12-19
*/
@GetMapping("/sys/dept/getParentAndAllDept/{deptId}")
Result<ParentAndAllDeptDTO> getParentAndAllDept(@PathVariable("deptId") String deptId);
}

5
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/java/com/elink/esua/epdc/feign/fallback/AdminFeignClientFallback.java

@ -41,4 +41,9 @@ public class AdminFeignClientFallback implements AdminFeignClient {
public Result<DeptLevelAndLeaderDTO> getDeptInfoById(Long deptId, String leaderFlag) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "getDeptInfoById", deptId, leaderFlag);
}
@Override
public Result<ParentAndAllDeptDTO> getParentAndAllDept(String deptId) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "getParentAndAllDept", deptId, deptId);
}
}

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

@ -28,17 +28,13 @@ import com.elink.esua.epdc.commons.tools.utils.ConvertUtils;
import com.elink.esua.epdc.commons.tools.constant.FieldConstant;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.constant.KpiFieldConstant;
import com.elink.esua.epdc.dao.KpiFormulaDao;
import com.elink.esua.epdc.dao.KpiRuleDao;
import com.elink.esua.epdc.dao.KpiRuleParamDao;
import com.elink.esua.epdc.dto.KpiRuleDTO;
import com.elink.esua.epdc.dto.KpiRuleParamDTO;
import com.elink.esua.epdc.dao.*;
import com.elink.esua.epdc.dto.*;
import com.elink.esua.epdc.dto.form.KpiRuleSaveOrUpdateFormDTO;
import com.elink.esua.epdc.dto.result.KpiRuleQueryResultDTO;
import com.elink.esua.epdc.entity.KpiFormulaEntity;
import com.elink.esua.epdc.entity.KpiRuleEntity;
import com.elink.esua.epdc.entity.KpiRuleParamEntity;
import com.elink.esua.epdc.entity.*;
import com.elink.esua.epdc.enums.KpiRuleModeEnum;
import com.elink.esua.epdc.feign.AdminFeignClient;
import com.elink.esua.epdc.service.KpiRuleService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@ -46,10 +42,14 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 考核规则表
@ -62,10 +62,19 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private KpiRuleParamDao kpiRuleParamDao;
private KpiRuleParamDao kpiRuleParamDao;//公式参数表
@Autowired
private KpiFormulaDao kpiFormulaDao;
private KpiFormulaDao kpiFormulaDao;//绩效考核公式表
@Autowired
private KpiRuleDao kpiRuleDao; //考核规则表
@Autowired
private KpiMetaDataDao kpiMetaDataDao; //绩效考核元数据表
@Autowired
private AdminFeignClient adminFeignClient;
@Autowired
private KpiResultGridDao kpiResultGridDao; //网格考核最终得分表
@Override
public PageData<KpiRuleDTO> page(Map<String, Object> params) {
@ -269,6 +278,119 @@ public class KpiRuleServiceImpl extends BaseServiceImpl<KpiRuleDao, KpiRuleEntit
@Override
public Result<List<KpiRuleDTO>> calcByRuleCode(String ruleCode) {
return null;
//每次JOB启动时,根据当前时间,获取上一个月的:月初-月末时间
Calendar c=Calendar.getInstance();
c.add(Calendar.MONTH, -1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int lastMonthMaxDay=c.getActualMaximum(Calendar.DAY_OF_MONTH); // 上月天数
c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59);
String gtimeEnd = sdf.format(c.getTime()); //按格式输出: 上月最后一天
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01");
String gtimeStart = sdf2.format(c.getTime()); //按格式输出: 上月第一天
//查询考核规则表
KpiRuleDTO kpiRuleDTO = kpiRuleDao.queryKpiRuleMetaFormula(ruleCode);
//根据 考核规则表-外键(公式id),查询绩效考核公式表,待运行公式方法
KpiFormulaDTO kpiFormulaDTO = kpiFormulaDao.queryFormula(kpiRuleDTO.getReferenceId());
//根据 考核规则表-主键,查询公式参数表,排序:1,2,3,4,5
List<KpiRuleParamDTO> kpiRuleParamDTO = kpiRuleParamDao.queryFormulaParam(kpiRuleDTO.getId());
int j = 0;
while (true){
Result<List<Long>> departmentalList = adminFeignClient.pageDeptIdByTypeKey("grid_party",30,j+1); //得到所有的网格id
if (departmentalList.getData().size() > 0){
j++;
for (int n = 0; n < departmentalList.getData().size(); n++) {
int paramLength = 0;
BigDecimal[] paramValue = new BigDecimal[kpiFormulaDTO.getParamAmount()];
Map<String, Object> map = new HashMap<String, Object>();
map.put("startDate",gtimeStart);
map.put("endDate",gtimeEnd);
map.put("deptId", departmentalList.getData().get(n).longValue());
for (int i = 0; i < kpiRuleParamDTO.size() ; i++) { //按照参数数量遍历
map.put("dataCode",kpiRuleParamDTO.get(i).getMetaDataCode());
KpiMetaDataDTO dataValue = kpiMetaDataDao.queryFormulaParamValue(map); //查询具体分值
if (dataValue != null) {
paramValue[i] = dataValue.getDataValue();
paramLength++;
}
}
if (paramLength == kpiFormulaDTO.getParamAmount()){ //参数准备完全时,执行js运算
BigDecimal workScore;
try{
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");//获得一个javascipt的执行引擎
engine.eval(kpiFormulaDTO.getFormula()); //执行js代码:参数为:公式运行方法
boolean flag=engine instanceof Invocable;//是否可调用方法
if(!flag){
return new Result().error("运行方法异常");
}else{
Invocable in = (Invocable)engine;
//执行js中的函数 参数:js方法名 + 参数
Double result=(Double) in.invokeFunction(kpiFormulaDTO.getFunctionName(), paramValue);
Double workScoreDoouble = (double) Math.round(result*100)/100;
workScore = new BigDecimal(workScoreDoouble);
// 网格考核最终得分 表操作
KpiResultGridEntity kpiManualScoreEntity = new KpiResultGridEntity();
kpiManualScoreEntity.setWorkScore(workScore);
kpiManualScoreEntity.setGridId(departmentalList.getData().get(n).longValue());
kpiManualScoreEntity.setStartDate(sdf2.parse(gtimeStart));
kpiManualScoreEntity.setEndDate(sdf2.parse(gtimeEnd));
kpiManualScoreEntity.setKpiCycle(kpiRuleDTO.getKpiCycle());
this.saveOrUpdateKpiResult(kpiManualScoreEntity);
}
}catch(Exception e){
e.printStackTrace();
return new Result().error("运行方法异常"+e.getMessage());
}
}
}
}else {
break;
}
}
return new Result();
}
/**
* 更新或插入考核结果
*
* @param kpiResultGridEntity deptId, scoreStartDate, scoreEndDate, workScore
* @return void
* @author zhangyong
* @date 2019/12/18 15:56
*/
private void saveOrUpdateKpiResult(KpiResultGridEntity kpiResultGridEntity) {
//运算结果存储在 网格考核最终得分表 manual_score字段,:唯一性条件(deptId,scoreStartDate,scoreEndDate)
KpiResultGridDTO kpiResultGridDto = getKpiresultGrid(kpiResultGridEntity.getGridId(), kpiResultGridEntity.getStartDate(), kpiResultGridEntity.getEndDate());
Result<ParentAndAllDeptDTO> deptInfo = adminFeignClient.getParentAndAllDept(kpiResultGridEntity.getGridId().toString()); //查询部门信息
if (kpiResultGridDto != null) { //update
kpiResultGridEntity.setId(kpiResultGridDto.getId());
kpiResultGridDao.updateById(kpiResultGridEntity);
}else {
kpiResultGridEntity.setParentDeptIds(deptInfo.getData().getParentDeptIds());
kpiResultGridEntity.setParentDeptNames(deptInfo.getData().getParentDeptNames());
kpiResultGridEntity.setAllDeptIds(deptInfo.getData().getAllDeptIds());
kpiResultGridEntity.setAllDeptNames(deptInfo.getData().getAllDeptNames());
kpiResultGridDao.insert(kpiResultGridEntity);
}
}
/**
* 查询考核结果
*
* @param deptId 部门id
* @param stateDate 开始日期
* @param endDate 结束日期
* @return com.elink.esua.epdc.dto.KpiResultGridDTO
* @author zy
* @date 2019/12/19 15:56
*/
private KpiResultGridDTO getKpiresultGrid(Long deptId, Date stateDate, Date endDate) {
Map<String, Object> map = new HashMap<>();
map.put("deptId", deptId);
map.put("scoreStartDate", stateDate);
map.put("scoreEndDate", endDate);
return kpiResultGridDao.selectManualScoringISExist(map);
}
}

16
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/resources/mapper/KpiFormulaDao.xml

@ -33,4 +33,20 @@
ORDER BY
ekf.CREATED_TIME DESC
</select>
<!-- 查询 公式运行方法 -->
<select id="queryFormula" resultType="com.elink.esua.epdc.dto.KpiFormulaDTO">
SELECT
ID id,
CODE code,
NAME name,
FUNCTION_NAME functionName,
FORMULA formula,
PARAM_AMOUNT paramAmount
FROM
epdc_kpi_formula
WHERE
ID = #{id}
AND DEL_FLAG = 0
</select>
</mapper>

15
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/resources/mapper/KpiMetaDataDao.xml

@ -20,5 +20,20 @@
<result property="delFlag" column="DEL_FLAG"/>
</resultMap>
<!-- 获取 运行公式 参数具体值 -->
<select id="queryFormulaParamValue" resultType="com.elink.esua.epdc.dto.KpiMetaDataDTO">
SELECT
ID id,
data_value dataValue
FROM
epdc_kpi_meta_data
WHERE
data_code = #{dataCode}
and start_date = STR_TO_DATE(#{startDate},'%Y-%m-%d')
and end_date = STR_TO_DATE(#{endDate},'%Y-%m-%d')
and dept_id = #{deptId}
and del_flag = 0
</select>
</mapper>

2
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/resources/mapper/KpiResultGridDao.xml

@ -11,7 +11,7 @@
manual_score manualScore,
start_date startDate,
end_date endDate,
grid_leader gridLeader,
leader_name leaderName,
kpi_cycle kpiCycle,
parent_dept_ids parentDeptIds,
parent_dept_names parentDeptNames,

17
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/resources/mapper/KpiRuleDao.xml

@ -129,4 +129,21 @@
and ekr.id=#{id}
</select>
<!--根据考核规则编码,查询符合考核规则 的 元公式-->
<select id="queryKpiRuleMetaFormula" resultType="com.elink.esua.epdc.dto.KpiRuleDTO">
SELECT
ID id,
rule_name ruleName,
rule_code ruleCode,
rule_mode ruleMode,
reference_id referenceId,
kpi_cycle kpiCycle,
dept_type_key deptTypeKey
FROM
epdc_kpi_rule
WHERE
rule_code = #{ruleCode}
AND rule_mode = 0
AND DEL_FLAG = 0
</select>
</mapper>

15
esua-epdc/epdc-module/epdc-kpi/epdc-kpi-server/src/main/resources/mapper/KpiRuleParamDao.xml

@ -19,4 +19,19 @@
<update id="deleteByRuleId">
delete from epdc_kpi_rule_param where rule_id=#{id}
</update>
<!-- 规则ID,查询公式参数表 -->
<select id="queryFormulaParam" resultType="com.elink.esua.epdc.dto.KpiRuleParamDTO">
SELECT
ID id,
RULE_ID ruleId,
META_DATA_CODE metaDataCode,
SORT sort
FROM
epdc_kpi_rule_param
WHERE
rule_id = #{ruleId}
AND DEL_FLAG = 0
ORDER BY sort
</select>
</mapper>

Loading…
Cancel
Save