ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckResult.java
@@ -1,10 +1,11 @@ package com.ycl.platform.domain.entity; import annotation.Excel; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.ycl.system.entity.BaseEntity; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import lombok.Data; import java.math.BigDecimal; import java.util.Date; @@ -15,126 +16,34 @@ * @author ruoyi * @date 2024-04-01 */ public class CheckResult extends BaseEntity { @TableName("t_contract_result") @Data public class CheckResult { private static final long serialVersionUID = 1L; /** */ private Long id; /** 考核对象 */ @Excel(name = "考核对象") private Long deptId; private Long unitId; /** 考核发布 */ @Excel(name = "运维合同") private Long contractId; @Excel(name = "考核发布") private Long publishId; /** 考核类型 */ @Excel(name = "考核类型") private Long examineCategory; /** 考核分数 */ @Excel(name = "考核分数") private BigDecimal checkScore; private BigDecimal score; /** 是否发布 */ @Excel(name = "是否发布") private Long publish; private Integer publish; /** 考核时间 */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "考核时间", width = 30, dateFormat = "yyyy-MM-dd") private Date checkTime; /** 逻辑删除 */ @TableLogic private String deleted; public void setId(Long id) { this.id = id; } public Long getId() { return id; } public void setDeptId(Long deptId) { this.deptId = deptId; } public Long getDeptId() { return deptId; } public void setPublishId(Long publishId) { this.publishId = publishId; } public Long getPublishId() { return publishId; } public void setExamineCategory(Long examineCategory) { this.examineCategory = examineCategory; } public Long getExamineCategory() { return examineCategory; } public void setCheckScore(BigDecimal checkScore) { this.checkScore = checkScore; } public BigDecimal getCheckScore() { return checkScore; } public void setPublish(Long publish) { this.publish = publish; } public Long getPublish() { return publish; } public void setCheckTime(Date checkTime) { this.checkTime = checkTime; } public Date getCheckTime() { return checkTime; } public void setDeleted(String deleted) { this.deleted = deleted; } public String getDeleted() { return deleted; } @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) .append("id", getId()) .append("deptId", getDeptId()) .append("publishId", getPublishId()) .append("examineCategory", getExamineCategory()) .append("checkScore", getCheckScore()) .append("publish", getPublish()) .append("checkTime", getCheckTime()) .append("updateTime", getUpdateTime()) .append("deleted", getDeleted()) .toString(); } private Date updateTime; } ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractResultRecord.java
New file @@ -0,0 +1,31 @@ package com.ycl.platform.domain.entity; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; /** * @author ghl * @since 2024/4/28 下午 5:45 */ @Data @TableName("t_contract_result_record") public class ContractResultRecord { @TableId private Integer id; private Integer resultId; private String ruleIds; private String ruleName; private String num; private Double score; private Date createTime; private Date auditTime; @TableLogic private String deleted; } ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractScore.java
@@ -43,7 +43,6 @@ private Long[] ruleIdsArray; @Excel(name = "规则") @TableField(exist = false) private String ruleName; @Excel(name = "指标") ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java
@@ -49,7 +49,7 @@ * 单位id */ @NotBlank private Integer unitId; private Long unitId; @TableField(exist = false) private String unitName; ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckResultVO.java
New file @@ -0,0 +1,50 @@ package com.ycl.platform.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ycl.platform.domain.entity.CheckResult; import lombok.Data; import lombok.experimental.Accessors; import org.springframework.beans.BeanUtils; import org.springframework.lang.NonNull; import java.math.BigDecimal; import java.util.Date; /** * @author gonghl */ @Data @Accessors(chain = true) public class CheckResultVO { private Long id; private Long unitId; private String unitName; private Long contractId; private String contractName; private Long publishId; private BigDecimal score; private Integer publish; @JsonFormat(pattern = "yyyy-MM-dd") private Date checkTime; private String deleted; private Date updateTime; public static CheckResultVO getVoByEntity(@NonNull CheckResult entity, CheckResultVO vo) { if (vo == null) { vo = new CheckResultVO(); } BeanUtils.copyProperties(entity, vo); return vo; } } ycl-server/src/main/java/com/ycl/platform/controller/CheckResultController.java
@@ -2,6 +2,7 @@ import annotation.Log; import com.ycl.platform.domain.entity.CheckResult; import com.ycl.platform.domain.vo.CheckResultVO; import com.ycl.platform.service.ICheckResultService; import com.ycl.system.AjaxResult; import com.ycl.system.controller.BaseController; @@ -36,7 +37,7 @@ public TableDataInfo list(CheckResult checkResult) { startPage(); List<CheckResult> list = checkResultService.selectCheckResultList(checkResult); List<CheckResultVO> list = checkResultService.selectCheckResultList(checkResult); return getDataTable(list); } @@ -48,8 +49,8 @@ @PostMapping("/export") public void export(HttpServletResponse response, CheckResult checkResult) { List<CheckResult> list = checkResultService.selectCheckResultList(checkResult); ExcelUtil<CheckResult> util = new ExcelUtil<CheckResult>(CheckResult.class); List<CheckResult> list = checkResultService.selectCheckResult(checkResult); ExcelUtil<CheckResult> util = new ExcelUtil<>(CheckResult.class); util.exportExcel(response, list, "考核结果数据"); } ycl-server/src/main/java/com/ycl/platform/mapper/CheckResultMapper.java
@@ -3,61 +3,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.platform.domain.entity.CheckResult; import java.util.List; /** * 考核结果Mapper接口 * * @author ruoyi * @date 2024-04-01 */ public interface CheckResultMapper extends BaseMapper<CheckResult> { /** * 查询考核结果 * * @param id 考核结果主键 * @return 考核结果 */ public CheckResult selectCheckResultById(Long id); /** * 查询考核结果列表 * * @param checkResult 考核结果 * @return 考核结果集合 */ public List<CheckResult> selectCheckResultList(CheckResult checkResult); /** * 新增考核结果 * * @param checkResult 考核结果 * @return 结果 */ public int insertCheckResult(CheckResult checkResult); /** * 修改考核结果 * * @param checkResult 考核结果 * @return 结果 */ public int updateCheckResult(CheckResult checkResult); /** * 删除考核结果 * * @param id 考核结果主键 * @return 结果 */ public int deleteCheckResultById(Long id); /** * 批量删除考核结果 * * @param ids 需要删除的数据主键集合 * @return 结果 */ public int deleteCheckResultByIds(Long[] ids); public interface CheckResultMapper extends BaseMapper<CheckResult> { } ycl-server/src/main/java/com/ycl/platform/mapper/ContractResultRecordMapper.java
New file @@ -0,0 +1,15 @@ package com.ycl.platform.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.platform.domain.entity.ContractResultRecord; /** * @author gonghl */ public interface ContractResultRecordMapper extends BaseMapper<ContractResultRecord> { } ycl-server/src/main/java/com/ycl/platform/service/ICheckResultService.java
@@ -1,6 +1,9 @@ package com.ycl.platform.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ycl.platform.domain.entity.CheckResult; import com.ycl.platform.domain.entity.ContractResultRecord; import com.ycl.platform.domain.vo.CheckResultVO; import java.util.List; @@ -10,7 +13,7 @@ * @author ruoyi * @date 2024-04-01 */ public interface ICheckResultService public interface ICheckResultService extends IService<CheckResult> { /** * 查询考核结果 @@ -26,7 +29,8 @@ * @param checkResult 考核结果 * @return 考核结果集合 */ public List<CheckResult> selectCheckResultList(CheckResult checkResult); public List<CheckResultVO> selectCheckResultList(CheckResult checkResult); public List<CheckResult> selectCheckResult(CheckResult checkResult); /** * 新增考核结果 @@ -59,4 +63,10 @@ * @return 结果 */ public int deleteCheckResultById(Long id); /** * 批量保存考核结果 * @param contractResultRecord 集合 */ void saveBatchRecord(List<ContractResultRecord> contractResultRecord); } ycl-server/src/main/java/com/ycl/platform/service/IContractScoreService.java
@@ -39,4 +39,11 @@ * @return 结果 */ boolean audit(ContractScore contractScore); /** * 根据合同id查询本月合同打分 * @param id id * @return 数据 */ List<ContractScore> getDateRangeScoreByContractId(Long id, String startTime, String endTime); } ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java
@@ -39,4 +39,10 @@ * @return 规则 */ List<CalculateMoneyRule> selectMoneyRules(Integer contractId); /** * 查询所有正在使用的合同 * @return 数据 */ List<TContract> selectUsingContract(); } ycl-server/src/main/java/com/ycl/platform/service/impl/CheckResultServiceImpl.java
@@ -2,12 +2,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.platform.domain.entity.CheckResult; import com.ycl.platform.domain.entity.ContractResultRecord; import com.ycl.platform.domain.vo.CheckResultVO; import com.ycl.platform.mapper.CheckResultMapper; import com.ycl.platform.mapper.ContractResultRecordMapper; import com.ycl.platform.service.ICheckResultService; import com.ycl.platform.service.ITContractService; import com.ycl.platform.service.YwUnitService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import utils.DateUtils; import java.util.Arrays; import java.util.List; /** @@ -17,10 +23,16 @@ * @date 2024-04-01 */ @Service public class CheckResultServiceImpl extends ServiceImpl<CheckResultMapper, CheckResult> implements ICheckResultService { public class CheckResultServiceImpl extends ServiceImpl<CheckResultMapper, CheckResult> implements ICheckResultService { @Autowired private CheckResultMapper checkResultMapper; @Autowired private ContractResultRecordMapper contractResultRecordMapper; @Autowired private YwUnitService unitService; @Autowired private ITContractService contractService; /** * 查询考核结果 @@ -29,9 +41,8 @@ * @return 考核结果 */ @Override public CheckResult selectCheckResultById(Long id) { return checkResultMapper.selectCheckResultById(id); public CheckResult selectCheckResultById(Long id) { return checkResultMapper.selectById(id); } /** @@ -41,9 +52,20 @@ * @return 考核结果 */ @Override public List<CheckResult> selectCheckResultList(CheckResult checkResult) { return checkResultMapper.selectCheckResultList(checkResult); public List<CheckResultVO> selectCheckResultList(CheckResult checkResult) { return checkResultMapper.selectList(null).stream().map( item -> { CheckResultVO checkResultVO = CheckResultVO.getVoByEntity(item, null); checkResultVO.setUnitName(unitService.getById(item.getUnitId()).getUnitName()); checkResultVO.setContractName(contractService.getById(item.getContractId()).getName()); return checkResultVO; } ).toList(); } @Override public List<CheckResult> selectCheckResult(CheckResult checkResult) { return checkResultMapper.selectList(null); } /** @@ -53,9 +75,8 @@ * @return 结果 */ @Override public int insertCheckResult(CheckResult checkResult) { return checkResultMapper.insertCheckResult(checkResult); public int insertCheckResult(CheckResult checkResult) { return checkResultMapper.insert(checkResult); } /** @@ -65,10 +86,9 @@ * @return 结果 */ @Override public int updateCheckResult(CheckResult checkResult) { public int updateCheckResult(CheckResult checkResult) { checkResult.setUpdateTime(DateUtils.getNowDate()); return checkResultMapper.updateCheckResult(checkResult); return checkResultMapper.updateById(checkResult); } /** @@ -78,9 +98,8 @@ * @return 结果 */ @Override public int deleteCheckResultByIds(Long[] ids) { return checkResultMapper.deleteCheckResultByIds(ids); public int deleteCheckResultByIds(Long[] ids) { return checkResultMapper.deleteBatchIds(Arrays.asList(ids)); } /** @@ -90,8 +109,12 @@ * @return 结果 */ @Override public int deleteCheckResultById(Long id) { return checkResultMapper.deleteCheckResultById(id); public int deleteCheckResultById(Long id) { return checkResultMapper.deleteById(id); } @Override public void saveBatchRecord(List<ContractResultRecord> contractResultRecord) { // contractResultRecordMapper } } ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java
@@ -10,6 +10,7 @@ import com.ycl.platform.mapper.YwUnitMapper; import com.ycl.platform.service.IContractScoreService; import com.ycl.system.entity.SysUser; import com.ycl.utils.DateUtils; import com.ycl.utils.SecurityUtils; import enumeration.general.AuditingStatus; import org.apache.commons.lang3.ObjectUtils; @@ -57,9 +58,6 @@ item -> { item.setUnitName(ywunitMapper.selectById(item.getUnitId()).getUnitName()); item.setContractName(contractMapper.selectById(item.getContractId()).getName()); item.setRuleIdsArray(Arrays.stream(item.getRuleIds().split(",")).map(Long::parseLong).toArray(Long[]::new)); List<CalculateRule> list = new LambdaQueryChainWrapper<>(calculateRuleMapper).in(CalculateRule::getId, item.getRuleIdsArray()).list(); item.setRuleName(String.join(" / ", new String[]{list.get(0).getRuleName(), list.get(1).getRuleDesc(), list.get(2).getRuleCondition()})); } ).toList(); } @@ -79,6 +77,9 @@ contractScore.setAuditingStatus(AuditingStatus.WAIT); contractScore.setDeleted("0"); contractScore.setRuleIds(Arrays.stream(contractScore.getRuleIdsArray()).map(String::valueOf).collect(Collectors.joining(","))); contractScore.setRuleIdsArray(Arrays.stream(contractScore.getRuleIds().split(",")).map(Long::parseLong).toArray(Long[]::new)); List<CalculateRule> list = new LambdaQueryChainWrapper<>(calculateRuleMapper).in(CalculateRule::getId, contractScore.getRuleIdsArray()).list(); contractScore.setRuleName(String.join(" / ", new String[]{list.get(0).getRuleName(), list.get(1).getRuleDesc(), list.get(2).getRuleCondition()})); return super.save(contractScore); } @@ -91,10 +92,19 @@ @Override public boolean audit(ContractScore contractScore) { SysUser user = SecurityUtils.getLoginUser().getUser(); contractScore.setRuleIds(Arrays.stream(contractScore.getRuleIdsArray()).map(String::valueOf).collect(Collectors.joining(","))); contractScore.setAuditingTime(com.ycl.utils.DateUtils.getNowDate()); contractScore.setAuditingUser(user.getNickName()); contractScore.setAuditingUserId(user.getUserId()); return super.updateById(contractScore); } @Override public List<ContractScore> getDateRangeScoreByContractId(Long id, String startTime, String endTime) { return new LambdaQueryChainWrapper<>(contractScoreMapper) .eq(ContractScore::getContractId, id) .between(ContractScore::getCreateTime, startTime, endTime) .eq(ContractScore::getAuditingStatus, AuditingStatus.PASS) .list(); } } ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
@@ -209,4 +209,12 @@ public List<CalculateMoneyRule> selectMoneyRules(Integer contractId) { return calculateMoneyRuleService.selectMoneyRules(contractId); } @Override public List<TContract> selectUsingContract() { return new LambdaQueryChainWrapper<>(baseMapper) .gt(TContract::getStartTime, DateUtils.getNowDate()) .lt(TContract::getEndTime, DateUtils.getNowDate()) .list(); } } ycl-server/src/main/java/com/ycl/task/ContractResultTask.java
New file @@ -0,0 +1,79 @@ package com.ycl.task; import com.ycl.platform.domain.entity.CheckResult; import com.ycl.platform.domain.entity.ContractResultRecord; import com.ycl.platform.domain.entity.ContractScore; import com.ycl.platform.domain.entity.TContract; import com.ycl.platform.service.ICheckResultService; import com.ycl.platform.service.IContractScoreService; import com.ycl.platform.service.ITContractService; import com.ycl.utils.DateUtils; import com.ycl.utils.bean.BeanUtils; import jakarta.annotation.PostConstruct; import lombok.Data; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; /** * @author ghl * @since 2024/4/28 下午 4:14 */ @Component @Data public class ContractResultTask { private final ITContractService contractService; private final IContractScoreService contractScoreService; private final ICheckResultService checkResultService; private String startTime; private String endTime; /** * 每个月1号执行 */ @Scheduled(cron = "0 0 0 1 * ?") // @PostConstruct // 多表 public void contractResultTask() { // 查询有效期内的合同 List<TContract> list = contractService.selectUsingContract(); getLastMonth(); for (TContract tContract : list) { // 上个月扣分记录 List<ContractScore> contractScore = contractScoreService.getDateRangeScoreByContractId(tContract.getId(), startTime, endTime); // 新增考核结果 CheckResult checkResult = new CheckResult(); checkResult.setUnitId(tContract.getUnitId()); checkResult.setContractId(tContract.getId()); checkResult.setPublish(0); checkResult.setCheckTime(DateUtils.getNowDate()); checkResultService.save(checkResult); // 新增考核结果记录 List<ContractResultRecord> contractResultRecord = new ArrayList<>(); BeanUtils.copyBeanProp(contractResultRecord, contractScore); checkResultService.saveBatchRecord(contractResultRecord); } } /** * 获取上个月的第一天和最后一天 */ public void getLastMonth() { LocalDate currentDate = LocalDate.now().minusMonths(1); LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1); String firstDay = firstDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); LocalDate lastDayOfMonth = currentDate.withDayOfMonth(currentDate.lengthOfMonth()); String lastDay = lastDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); this.startTime = firstDay; this.endTime = lastDay; } } ycl-server/src/main/resources/mapper/zgyw/CalculateRuleMapper.xml
@@ -47,7 +47,7 @@ from t_calculate_rule where deleted = 0 and contract_id in (select id from t_contract where unit_id = #{unitId}) in (select id from t_contract where unit_id = #{unitId} and deleted = 0 and start_time <![CDATA[ <= ]]> now() and end_time >= now() ) </select> <insert id="insertDefaultRule" useGeneratedKeys="true" keyProperty="id"> ycl-server/src/main/resources/mapper/zgyw/CheckResultMapper.xml
New file @@ -0,0 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ycl.platform.mapper.CheckResultMapper"> </mapper> ycl-server/src/main/resources/mapper/zgyw/TContractResultRecordMapper.xml
New file @@ -0,0 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ycl.platform.mapper.ContractResultRecordMapper"> </mapper>