|
|
@ -26,8 +26,8 @@ import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; |
|
|
|
import com.elink.esua.epdc.commons.tools.constant.FieldConstant; |
|
|
|
import com.elink.esua.epdc.commons.tools.constant.NumConstant; |
|
|
|
import com.elink.esua.epdc.commons.tools.constant.StrConstant; |
|
|
|
import com.elink.esua.epdc.commons.tools.exception.RenException; |
|
|
|
import com.elink.esua.epdc.commons.tools.page.PageData; |
|
|
|
import com.elink.esua.epdc.commons.tools.redis.UserDetailRedis; |
|
|
|
import com.elink.esua.epdc.commons.tools.security.user.SecurityUser; |
|
|
|
import com.elink.esua.epdc.commons.tools.security.user.UserDetail; |
|
|
|
import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; |
|
|
@ -51,7 +51,6 @@ import com.elink.esua.epdc.entity.KpiRuleEntity; |
|
|
|
import com.elink.esua.epdc.enums.KpiCycleEnum; |
|
|
|
import com.elink.esua.epdc.excel.KpiManualScoreTemplateExcel; |
|
|
|
import com.elink.esua.epdc.feign.AdminFeignClient; |
|
|
|
import com.elink.esua.epdc.redis.KpiManualScoreRedis; |
|
|
|
import com.elink.esua.epdc.service.KpiManualScoreService; |
|
|
|
import com.elink.esua.epdc.utils.StreamUtils; |
|
|
|
import com.google.common.collect.Lists; |
|
|
@ -64,8 +63,6 @@ import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
import java.text.ParseException; |
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
import java.time.LocalDate; |
|
|
|
import java.time.YearMonth; |
|
|
|
import java.util.*; |
|
|
@ -81,23 +78,16 @@ public class KpiManualScoreServiceImpl extends BaseServiceImpl<KpiManualScoreDao |
|
|
|
|
|
|
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
|
|
|
@Autowired |
|
|
|
private KpiManualScoreRedis kpiManualScoreRedis; |
|
|
|
@Autowired |
|
|
|
private KpiManualScoreRuleDao kpiManualScoreRuleDao; |
|
|
|
@Autowired |
|
|
|
private KpiRuleDao kpiRuleDao; |
|
|
|
@Autowired |
|
|
|
private UserDetailRedis userDetailRedis; |
|
|
|
@Autowired |
|
|
|
private AdminFeignClient adminFeignClient; |
|
|
|
//设置日期格式
|
|
|
|
private SimpleDateFormat monthFormat = new SimpleDateFormat("yyyy-MM"); |
|
|
|
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageData<KpiManualScoreDTO> page(Map<String, Object> params) { |
|
|
|
String ruleId = params.containsKey("ruleId") ? params.get("ruleId").toString() : null; |
|
|
|
String createdTime = params.containsKey("createdTime") ? params.get("createdTime").toString() : null; |
|
|
|
String createdTime = params.containsKey(FieldConstant.CREATED_TIME_HUMP) ? params.get(FieldConstant.CREATED_TIME_HUMP).toString() : null; |
|
|
|
QueryWrapper<KpiManualScoreEntity> wrapper = new QueryWrapper<>(); |
|
|
|
wrapper.eq(StringUtils.isNotBlank(ruleId), "RULE_ID", ruleId); |
|
|
|
wrapper.between(StringUtils.isNotBlank(createdTime), "DATE_FORMAT(CREATED_TIME, '%Y-%m' )", createdTime, createdTime); |
|
|
@ -141,23 +131,42 @@ public class KpiManualScoreServiceImpl extends BaseServiceImpl<KpiManualScoreDao |
|
|
|
|
|
|
|
// 考核规则
|
|
|
|
KpiRuleEntity kpiRuleEntity = kpiRuleDao.selectById(ruleId); |
|
|
|
// 考核周期
|
|
|
|
String kpiCycle = kpiRuleEntity.getKpiCycle(); |
|
|
|
checkMonthAndCycle(kpiCycle, scoreStartDateMonth); |
|
|
|
|
|
|
|
return new Result(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据选择的月份和考核周期,判断是否可以进行考核打分 |
|
|
|
* |
|
|
|
* @param kpiCycle |
|
|
|
* @param scoreStartDateMonth |
|
|
|
* @return void |
|
|
|
* @author work@yujt.net.cn |
|
|
|
* @date 2019/12/16 15:38 |
|
|
|
*/ |
|
|
|
private void checkMonthAndCycle(String kpiCycle, YearMonth scoreStartDateMonth) { |
|
|
|
|
|
|
|
YearMonth now = YearMonth.now(); |
|
|
|
if (now.compareTo(scoreStartDateMonth) <= NumConstant.ZERO) { |
|
|
|
throw new RenException("只能针对过去的月份进行考核打分"); |
|
|
|
} |
|
|
|
|
|
|
|
if (kpiRuleEntity.getKpiCycle().equals(KpiCycleEnum.KPI_CYCLE_MONTH.getValue())) { |
|
|
|
} else if (kpiRuleEntity.getKpiCycle().equals(KpiCycleEnum.KPI_CYCLE_QUARTER.getValue())) { |
|
|
|
int monthValue = scoreStartDateMonth.getMonthValue(); |
|
|
|
// 只有1,4,7,10 月份可以进行季度打分
|
|
|
|
|
|
|
|
// 季度打分
|
|
|
|
if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_QUARTER.getValue())) { |
|
|
|
if (monthValue != NumConstant.ONE && monthValue != NumConstant.FOUR |
|
|
|
&& monthValue != NumConstant.SEVEN && monthValue != NumConstant.TEN) { |
|
|
|
return new Result().error("季度打分只能在1/4/7/10月份进行"); |
|
|
|
throw new RenException("季度打分只能在1/4/7/10月份进行"); |
|
|
|
} |
|
|
|
} else { |
|
|
|
int monthValue = scoreStartDateMonth.getMonthValue(); |
|
|
|
// 只有1月份可以进行年度打分
|
|
|
|
} else if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_YEAR.getValue())) { |
|
|
|
if (monthValue != NumConstant.ONE) { |
|
|
|
return new Result().error("年度打分只能在1月份进行"); |
|
|
|
throw new RenException("年度打分只能在1月份进行"); |
|
|
|
} |
|
|
|
} |
|
|
|
return new Result(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -301,7 +310,7 @@ public class KpiManualScoreServiceImpl extends BaseServiceImpl<KpiManualScoreDao |
|
|
|
tempEntityList.get(0).getRuleId(), |
|
|
|
DateUtils.format(tempEntityList.get(0).getScoreStartDate())); |
|
|
|
} finally { |
|
|
|
// logger.info("记得删除文件哦");
|
|
|
|
// 删除文件
|
|
|
|
this.deleteAllFilesOfDir(f); |
|
|
|
} |
|
|
|
return new Result(); |
|
|
@ -339,11 +348,7 @@ public class KpiManualScoreServiceImpl extends BaseServiceImpl<KpiManualScoreDao |
|
|
|
public KpiManualScoreDTO get(String id) { |
|
|
|
KpiManualScoreEntity entity = baseDao.selectById(id); |
|
|
|
KpiManualScoreDTO kpiManualScoreDTO = ConvertUtils.sourceToTarget(entity, KpiManualScoreDTO.class); |
|
|
|
try { |
|
|
|
kpiManualScoreDTO.setScoreStartMonth(monthFormat.parse(monthFormat.format(kpiManualScoreDTO.getScoreStartDate()))); |
|
|
|
} catch (ParseException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
kpiManualScoreDTO.setScoreStartMonth(kpiManualScoreDTO.getScoreStartDate()); |
|
|
|
return kpiManualScoreDTO; |
|
|
|
} |
|
|
|
|
|
|
@ -355,10 +360,12 @@ public class KpiManualScoreServiceImpl extends BaseServiceImpl<KpiManualScoreDao |
|
|
|
KpiManualScoreRuleEntity kpiManualScoreRuleEntity = kpiManualScoreRuleDao.selectOneKpiManualScoreRuleByRuleId(kpiRuleEntity.getId()); |
|
|
|
if (null == kpiManualScoreRuleEntity) { |
|
|
|
return new Result().error("没有找到关联的手动打分项"); |
|
|
|
} else if (null != kpiManualScoreRuleEntity && dto.getScore().compareTo(kpiManualScoreRuleEntity.getFullMarks()) == NumConstant.ONE) { |
|
|
|
return new Result().error("得分不能高于满分"); |
|
|
|
} else if (dto.getScore().compareTo(kpiManualScoreRuleEntity.getFullMarks()) == NumConstant.ONE) { |
|
|
|
return new Result().error("得分不能高于满分:" + kpiManualScoreRuleEntity.getFullMarks()); |
|
|
|
} |
|
|
|
|
|
|
|
YearMonth scoreStartMonth = LocalDateUtils.dateToYearMonth(dto.getScoreStartMonth()); |
|
|
|
|
|
|
|
// 考核部门基本信息
|
|
|
|
Result<SysDeptDTO> sysDeptDTOResult = adminFeignClient.getSysDeptDTO(Long.valueOf(dto.getDeptId())); |
|
|
|
if (!sysDeptDTOResult.success()) { |
|
|
@ -368,16 +375,22 @@ public class KpiManualScoreServiceImpl extends BaseServiceImpl<KpiManualScoreDao |
|
|
|
return new Result().error("所选部门不在当前规则考核范围内"); |
|
|
|
} |
|
|
|
|
|
|
|
Date scoreEndDateMonth = new Date(); |
|
|
|
if (kpiRuleEntity.getKpiCycle().equals(KpiCycleEnum.KPI_CYCLE_MONTH.getValue())) { |
|
|
|
scoreEndDateMonth = dto.getScoreStartMonth(); |
|
|
|
} else if (kpiRuleEntity.getKpiCycle().equals(KpiCycleEnum.KPI_CYCLE_QUARTER.getValue())) { |
|
|
|
scoreEndDateMonth = stepMonth(dto.getScoreStartMonth(), 2); |
|
|
|
} else if (kpiRuleEntity.getKpiCycle().equals(KpiCycleEnum.KPI_CYCLE_YEAR.getValue())) { |
|
|
|
scoreEndDateMonth = stepMonth(dto.getScoreStartMonth(), 11); |
|
|
|
// 考核周期
|
|
|
|
String kpiCycle = kpiRuleEntity.getKpiCycle(); |
|
|
|
checkMonthAndCycle(kpiCycle, scoreStartMonth); |
|
|
|
|
|
|
|
// 考核开始日
|
|
|
|
dto.setScoreStartDate(LocalDateUtils.localDateToDate(scoreStartMonth.atDay(NumConstant.ONE))); |
|
|
|
|
|
|
|
// 考核结束日
|
|
|
|
if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_MONTH.getValue())) { |
|
|
|
dto.setScoreEndDate(LocalDateUtils.localDateToDate(scoreStartMonth.atEndOfMonth())); |
|
|
|
} else if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_QUARTER.getValue())) { |
|
|
|
dto.setScoreEndDate(LocalDateUtils.localDateToDate(scoreStartMonth.plusMonths(NumConstant.TWO).atEndOfMonth())); |
|
|
|
} else if (kpiCycle.equals(KpiCycleEnum.KPI_CYCLE_YEAR.getValue())) { |
|
|
|
dto.setScoreEndDate(LocalDateUtils.localDateToDate(scoreStartMonth.plusMonths(NumConstant.ELEVEN).atEndOfMonth())); |
|
|
|
} |
|
|
|
dto.setScoreStartDate(getFirstDayDateOfMonth(dto.getScoreStartMonth())); |
|
|
|
dto.setScoreEndDate(getLastDayOfMonth(scoreEndDateMonth)); |
|
|
|
|
|
|
|
//根据部门ID获取上级所有部门信息
|
|
|
|
Result<ParentAndAllDeptDTO> parentAndAllDeptDTOResult = adminFeignClient.getParentAndAllDept(String.valueOf(dto.getDeptId())); |
|
|
|
if (!parentAndAllDeptDTOResult.success()) { |
|
|
@ -387,7 +400,11 @@ public class KpiManualScoreServiceImpl extends BaseServiceImpl<KpiManualScoreDao |
|
|
|
dto.setAllDeptIds(parentAndAllDeptDTOResult.getData().getAllDeptIds()); |
|
|
|
dto.setParentDeptNames(parentAndAllDeptDTOResult.getData().getParentDeptNames()); |
|
|
|
dto.setParentDeptIds(parentAndAllDeptDTOResult.getData().getParentDeptIds()); |
|
|
|
UserDetail user = SecurityUser.getUser(); |
|
|
|
dto.setCreatorDeptId(user.getDeptId()); |
|
|
|
dto.setCreatorDeptName(user.getDeptName()); |
|
|
|
KpiManualScoreEntity entity = ConvertUtils.sourceToTarget(dto, KpiManualScoreEntity.class); |
|
|
|
|
|
|
|
baseDao.delete(getUniqueWrapper(entity)); |
|
|
|
insert(entity); |
|
|
|
return new Result(); |
|
|
@ -401,7 +418,7 @@ public class KpiManualScoreServiceImpl extends BaseServiceImpl<KpiManualScoreDao |
|
|
|
KpiManualScoreRuleEntity kpiManualScoreRuleEntity = kpiManualScoreRuleDao.selectOneKpiManualScoreRuleByRuleId(dto.getRuleId()); |
|
|
|
if (null == kpiManualScoreRuleEntity) { |
|
|
|
return new Result().error("没有找到关联的手动打分项"); |
|
|
|
} else if (null != kpiManualScoreRuleEntity && dto.getScore().compareTo(kpiManualScoreRuleEntity.getFullMarks()) == NumConstant.ONE) { |
|
|
|
} else if (dto.getScore().compareTo(kpiManualScoreRuleEntity.getFullMarks()) == NumConstant.ONE) { |
|
|
|
return new Result().error("得分不能高于满分"); |
|
|
|
} |
|
|
|
updateById(entity); |
|
|
@ -431,64 +448,6 @@ public class KpiManualScoreServiceImpl extends BaseServiceImpl<KpiManualScoreDao |
|
|
|
return wrapper; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* @param sourceDate |
|
|
|
* @param month |
|
|
|
* @return java.util.Date |
|
|
|
* @Author yinzuomei |
|
|
|
* @Description |
|
|
|
* @Date 2019/12/5 13:46 |
|
|
|
**/ |
|
|
|
public Date stepMonth(Date sourceDate, int month) { |
|
|
|
Calendar c = Calendar.getInstance(); |
|
|
|
c.setTime(sourceDate); |
|
|
|
c.add(Calendar.MONTH, month); |
|
|
|
return c.getTime(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @param date |
|
|
|
* @return java.util.Date |
|
|
|
* @Author yinzuomei |
|
|
|
* @Description 获取传入日期所在月的第一天 |
|
|
|
* @Date 2019/12/5 13:46 |
|
|
|
**/ |
|
|
|
public Date getFirstDayDateOfMonth(Date date) { |
|
|
|
|
|
|
|
final Calendar cal = Calendar.getInstance(); |
|
|
|
|
|
|
|
cal.setTime(date); |
|
|
|
|
|
|
|
final int last = cal.getActualMinimum(Calendar.DAY_OF_MONTH); |
|
|
|
|
|
|
|
cal.set(Calendar.DAY_OF_MONTH, last); |
|
|
|
|
|
|
|
return cal.getTime(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @param date |
|
|
|
* @return java.util.Date |
|
|
|
* @Author yinzuomei |
|
|
|
* @Description 获取传入日期所在月的最后一天 |
|
|
|
* @Date 2019/12/5 13:47 |
|
|
|
**/ |
|
|
|
public Date getLastDayOfMonth(Date date) { |
|
|
|
|
|
|
|
final Calendar cal = Calendar.getInstance(); |
|
|
|
|
|
|
|
cal.setTime(date); |
|
|
|
|
|
|
|
final int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH); |
|
|
|
|
|
|
|
cal.set(Calendar.DAY_OF_MONTH, last); |
|
|
|
|
|
|
|
return cal.getTime(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private QueryWrapper<KpiManualScoreEntity> getWrapper(Map<String, Object> params) { |
|
|
|
String id = (String) params.get(FieldConstant.ID_HUMP); |
|
|
|
|
|
|
|