龚焕茏
2024-04-29 e547993a3c78d0bd75f3fdef4a9878e180d73d36
合同考核结果定时任务、详情、查询、导出
20个文件已修改
280 ■■■■ 已修改文件
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractResultRecord.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractScore.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckResultVO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/CheckResultController.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/CalculateRuleMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/CheckResultMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/ContractResultRecordMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/TContractMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/ICheckResultService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateRuleServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckResultServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/ContractResultTask.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/CalculateRuleMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/CheckResultMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/ContractScoreMapper.xml 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/TContractResultRecordMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractResultRecord.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
@@ -17,14 +18,14 @@
public class ContractResultRecord {
    @TableId
    private Integer id;
    private Integer resultId;
    private Long id;
    private Long resultId;
    private String ruleIds;
    private String ruleName;
    private String deductCategory;
    private String num;
    private Double score;
    private BigDecimal score;
    private Date createTime;
    private Date auditTime;
    @TableLogic
    private String deleted;
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractScore.java
@@ -45,6 +45,9 @@
    @Excel(name = "规则")
    private String ruleName;
    @Excel(name = "扣减方式")
    private String deductCategory;
    @Excel(name = "指标")
    private String num;
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java
@@ -63,14 +63,14 @@
    /**
     * 开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd hh-mm-ss")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @NotNull
    private Date startTime;
    /**
     * 结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd hh-mm-ss")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @NotNull
    private Date endTime;
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckResultVO.java
@@ -1,5 +1,6 @@
package com.ycl.platform.domain.vo;
import annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ycl.platform.domain.entity.CheckResult;
import lombok.Data;
@@ -20,25 +21,37 @@
    private Long unitId;
    @Excel(name = "考核对象")
    private String unitName;
    private Long contractId;
    @Excel(name = "运维合同")
    private String contractName;
    private Long publishId;
    @Excel(name = "考核分数", scale = 2)
    private BigDecimal score;
    @Excel(name = "是否发布", readConverterExp = "0=未发布,1=已发布")
    private Integer publish;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "考核时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date checkTime;
    private String deleted;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date updateTime;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date createStartTime;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date createEndTime;
    public static CheckResultVO getVoByEntity(@NonNull CheckResult entity, CheckResultVO vo) {
        if (vo == null) {
            vo = new CheckResultVO();
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.entity.ContractResultRecord;
import com.ycl.platform.domain.vo.CheckResultVO;
import com.ycl.platform.service.ICheckResultService;
import com.ycl.system.AjaxResult;
@@ -33,11 +34,22 @@
     * 查询考核结果列表
     */
   @PreAuthorize("@ss.hasPermi('system:result:list')")
    @GetMapping("/list")
    public TableDataInfo list(CheckResult checkResult)
    @PostMapping("/list")
    public TableDataInfo list(@RequestBody CheckResultVO checkResult)
    {
        startPage();
        List<CheckResultVO> list = checkResultService.selectCheckResultList(checkResult);
        return getDataTable(list);
    }
    /**
     * 查询考核结果列表
     */
   @PreAuthorize("@ss.hasPermi('system:result:query')")
    @GetMapping("/record/list")
    public TableDataInfo recordList(Long resultId)
    {
        List<ContractResultRecord> list = checkResultService.selectCheckResultRecordList(resultId);
        return getDataTable(list);
    }
@@ -47,10 +59,10 @@
    @PreAuthorize("@ss.hasPermi('system:result:export')")
    @Log(title = "考核结果", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, CheckResult checkResult)
    public void export(HttpServletResponse response, CheckResultVO checkResult)
    {
        List<CheckResult> list = checkResultService.selectCheckResult(checkResult);
        ExcelUtil<CheckResult> util = new ExcelUtil<>(CheckResult.class);
        List<CheckResultVO> list = checkResultService.selectCheckResultList(checkResult);
        ExcelUtil<CheckResultVO> util = new ExcelUtil<>(CheckResultVO.class);
        util.exportExcel(response, list, "考核结果数据");
    }
@@ -87,6 +99,16 @@
    }
    /**
     * 发布考核结果
     */
    @PreAuthorize("@ss.hasPermi('system:result:publish')")
    @PutMapping("/publish/{id}")
    public AjaxResult publish(@PathVariable("id") Long id)
    {
        return toAjax(checkResultService.publish(id));
    }
    /**
     * 删除考核结果
     */
    @PreAuthorize("@ss.hasPermi('system:result:remove')")
ycl-server/src/main/java/com/ycl/platform/mapper/CalculateRuleMapper.java
@@ -67,5 +67,5 @@
     * @param unitId 运维单位
     * @return 数据
     */
    List<CalculateRuleCascaderVO> getRuleListByUnitId(Integer unitId);
    List<CalculateRuleCascaderVO> getRuleListByUnitId(Integer unitId, String now);
}
ycl-server/src/main/java/com/ycl/platform/mapper/CheckResultMapper.java
@@ -2,6 +2,9 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ycl.platform.domain.entity.CheckResult;
import com.ycl.platform.domain.vo.CheckResultVO;
import java.util.List;
/**
 * 考核结果Mapper接口
@@ -10,4 +13,5 @@
 * @date 2024-04-01
 */
public interface CheckResultMapper extends BaseMapper<CheckResult> {
    List<CheckResultVO> selectCheckResultList(CheckResultVO checkResult);
}
ycl-server/src/main/java/com/ycl/platform/mapper/ContractResultRecordMapper.java
@@ -2,12 +2,20 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ycl.platform.domain.entity.ContractResultRecord;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @author gonghl
 */
public interface ContractResultRecordMapper extends BaseMapper<ContractResultRecord> {
    /**
     * 批量保存考核结果
     * @param contractResultRecord 集合
     */
    void saveBatch(List<ContractResultRecord> contractResultRecord);
}
ycl-server/src/main/java/com/ycl/platform/mapper/TContractMapper.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ycl.platform.domain.entity.TContract;
import java.util.List;
/**
 * 【请填写功能名称】Mapper接口
 *
@@ -10,4 +12,5 @@
 * @date 2024-03-12
 */
public interface TContractMapper extends BaseMapper<TContract> {
    List<TContract> selectAll();
}
ycl-server/src/main/java/com/ycl/platform/service/ICheckResultService.java
@@ -29,8 +29,7 @@
     * @param checkResult 考核结果
     * @return 考核结果集合
     */
    public List<CheckResultVO> selectCheckResultList(CheckResult checkResult);
    public List<CheckResult> selectCheckResult(CheckResult checkResult);
    public List<CheckResultVO> selectCheckResultList(CheckResultVO checkResult);
    /**
     * 新增考核结果
@@ -69,4 +68,13 @@
     * @param contractResultRecord 集合
     */
    void saveBatchRecord(List<ContractResultRecord> contractResultRecord);
    /**
     * 根据考核结果查询记录
     * @param resultId 考核结果id
     * @return 考核结果记录
     */
    List<ContractResultRecord> selectCheckResultRecordList(Long resultId);
    Boolean publish(Long id);
}
ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateRuleServiceImpl.java
@@ -144,6 +144,6 @@
    @Override
    public List<CalculateRuleCascaderVO> getRuleListByUnitId(Integer unitId) {
        return TreeUtils.build(calculateRuleMapper.getRuleListByUnitId(unitId), 0L);
        return TreeUtils.build(calculateRuleMapper.getRuleListByUnitId(unitId, DateUtils.getDate()), 0L);
    }
}
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckResultServiceImpl.java
@@ -1,5 +1,7 @@
package com.ycl.platform.service.impl;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.platform.domain.entity.CheckResult;
import com.ycl.platform.domain.entity.ContractResultRecord;
@@ -9,6 +11,7 @@
import com.ycl.platform.service.ICheckResultService;
import com.ycl.platform.service.ITContractService;
import com.ycl.platform.service.YwUnitService;
import com.ycl.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import utils.DateUtils;
@@ -52,20 +55,8 @@
     * @return 考核结果
     */
    @Override
    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);
    public List<CheckResultVO> selectCheckResultList(CheckResultVO checkResult) {
        return checkResultMapper.selectCheckResultList(checkResult);
    }
    /**
@@ -115,6 +106,24 @@
    @Override
    public void saveBatchRecord(List<ContractResultRecord> contractResultRecord) {
        // contractResultRecordMapper
        if (!contractResultRecord.isEmpty()) {
            contractResultRecordMapper.saveBatch(contractResultRecord);
        }
    }
    @Override
    public List<ContractResultRecord> selectCheckResultRecordList(Long resultId) {
        return new LambdaQueryChainWrapper<>(contractResultRecordMapper)
                .eq(ContractResultRecord::getResultId, resultId)
                .list();
    }
    @Override
    public Boolean publish(Long id) {
        return new LambdaUpdateChainWrapper<>(checkResultMapper)
                .eq(CheckResult::getId, id)
                .set(CheckResult::getPublish, 1)
                .set(CheckResult::getPublishId, SecurityUtils.getLoginUser().getUserId())
                .update();
    }
}
ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java
@@ -47,19 +47,7 @@
     */
    @Override
    public List<ContractScore> selectDefaultScoreList(ContractScore contractScore) {
        return new LambdaQueryChainWrapper<>(contractScoreMapper)
                .eq(ObjectUtils.isNotEmpty(contractScore.getUnitId()), ContractScore::getUnitId, contractScore.getUnitId())
                .between(ObjectUtils.isNotEmpty(contractScore.getCreateStartTime()), ContractScore::getCreateTime, contractScore.getCreateStartTime(), contractScore.getCreateEndTime())
                .between(ObjectUtils.isNotEmpty(contractScore.getAuditingStartTime()), ContractScore::getAuditingTime, contractScore.getAuditingStartTime(), contractScore.getAuditingEndTime())
                .eq(ObjectUtils.isNotEmpty(contractScore.getAuditingStatus()), ContractScore::getAuditingStatus, contractScore.getAuditingStatus())
                .orderByDesc(ContractScore::getCreateTime)
                .list()
                .stream().peek(
                        item -> {
                            item.setUnitName(ywunitMapper.selectById(item.getUnitId()).getUnitName());
                            item.setContractName(contractMapper.selectById(item.getContractId()).getName());
                        }
                ).toList();
        return contractScoreMapper.selectDefaultScoreList(contractScore);
    }
    @Override
ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
@@ -198,11 +198,7 @@
    @Override
    public List<TContract> selectAll() {
        return list(new LambdaQueryWrapper<TContract>()
                .orderByDesc(TContract::getCreateTime))
                .stream().peek(
                        tContract -> tContract.setUnitName(ywUnitService.getById(tContract.getUnitId()).getUnitName())
                ).toList();
        return baseMapper.selectAll();
    }
    @Override
@@ -213,8 +209,8 @@
    @Override
    public List<TContract> selectUsingContract() {
        return new LambdaQueryChainWrapper<>(baseMapper)
                .gt(TContract::getStartTime, DateUtils.getNowDate())
                .lt(TContract::getEndTime, DateUtils.getNowDate())
                .le(TContract::getStartTime, DateUtils.getDate())
                .ge(TContract::getEndTime, DateUtils.getDate())
                .list();
    }
}
ycl-server/src/main/java/com/ycl/task/ContractResultTask.java
@@ -9,14 +9,14 @@
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 org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
/**
@@ -36,11 +36,11 @@
    private String endTime;
    /**
     * 每个月1号执行
     * 每个月1号执行,统计考核结果
     */
    @Scheduled(cron = "0 0 0 1 * ?")
    // @PostConstruct
    // 多表
    @Transactional
    // @PostConstruct //启动时执行一次
    public void contractResultTask() {
        // 查询有效期内的合同
        List<TContract> list = contractService.selectUsingContract();
@@ -49,17 +49,49 @@
            // 上个月扣分记录
            List<ContractScore> contractScore = contractScoreService.getDateRangeScoreByContractId(tContract.getId(), startTime, endTime);
            // 新增考核结果
            CheckResult checkResult = getCheckResult(tContract, contractScore);
            checkResultService.save(checkResult);
            // 新增考核结果记录
            List<ContractResultRecord> contractResultRecord = getContractResultRecord(contractScore, checkResult);
            checkResultService.saveBatchRecord(contractResultRecord);
        }
    }
    /**
     * 保存考核记录
     *
     * @param contractScore 扣分
     * @param checkResult   考核结果
     * @return 考核记录
     */
    private List<ContractResultRecord> getContractResultRecord(List<ContractScore> contractScore, CheckResult checkResult) {
        return contractScore.stream().map(
                item -> {
                    ContractResultRecord record = new ContractResultRecord();
                    BeanUtils.copyProperties(item, record);
                    record.setResultId(checkResult.getId());
                    record.setCreateTime(DateUtils.getNowDate());
                    return record;
                }
        ).toList();
    }
    /**
     * 计算考核结果
     *
     * @param tContract     合同
     * @param contractScore 扣分
     * @return 考核结果
     */
    private CheckResult getCheckResult(TContract tContract, List<ContractScore> contractScore) {
            CheckResult checkResult = new CheckResult();
            checkResult.setUnitId(tContract.getUnitId());
            checkResult.setContractId(tContract.getId());
            checkResult.setPublish(0);
        checkResult.setDeleted("0");
            checkResult.setCheckTime(DateUtils.getNowDate());
            checkResultService.save(checkResult);
            // 新增考核结果记录
            List<ContractResultRecord> contractResultRecord = new ArrayList<>();
            BeanUtils.copyBeanProp(contractResultRecord, contractScore);
            checkResultService.saveBatchRecord(contractResultRecord);
        }
        checkResult.setScore(contractScore.isEmpty() ? new BigDecimal("100") : new BigDecimal("100").subtract(contractScore.stream().map(ContractScore::getScore).reduce(BigDecimal::add).get()));
        return checkResult;
    }
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} and deleted = 0 and start_time <![CDATA[ <=  ]]> now() and end_time >= now() )
            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
@@ -3,4 +3,25 @@
<mapper namespace="com.ycl.platform.mapper.CheckResultMapper">
    <select id="selectCheckResultList" resultType="com.ycl.platform.domain.vo.CheckResultVO">
        SELECT c.*,
        u.unit_name AS unitName,
        ct.name AS contractName
        FROM t_contract_result c
        LEFT JOIN
        t_yw_unit u ON c.unit_id = u.id and u.deleted = '0'
        LEFT JOIN
        t_contract ct ON c.contract_id = ct.id and ct.deleted = '0'
        where
        c.deleted = '0'
        <if test="unitId != null">
            AND c.unit_id = #{unitId}
        </if>
        <if test="createStartTime != null">
            AND c.check_time BETWEEN #{createStartTime} AND #{createEndTime}
        </if>
        <if test="publish != null">
            AND c.publish = #{publish}
        </if>
    </select>
</mapper>
ycl-server/src/main/resources/mapper/zgyw/ContractScoreMapper.xml
@@ -22,12 +22,33 @@
        select id, publish_id, template_id, num, score, create_user, create_user_name, update_user, update_user_name, create_time, update_time from t_contract_score
    </sql>
    <select id="selectDefaultScoreList" resultMap="DefaultScoreResult">
        <include refid="selectDefaultScoreVo"/>
        <where>
            <if test="publishId != null "> and publish_id = #{publishId}</if>
            <if test="templateId != null "> and template_id = #{templateId}</if>
        </where>
    <select id="selectDefaultScoreList" resultType="com.ycl.platform.domain.entity.ContractScore">
        SELECT
        cs.*,
        u.unit_name AS unitName,
        c.name AS contractName
        FROM
        t_contract_score cs
        LEFT JOIN
        t_yw_unit u ON cs.unit_id = u.id and u.deleted = '0'
        LEFT JOIN
        t_contract c ON cs.contract_id = c.id and c.deleted = '0'
        where
            cs.deleted = '0'
        <if test="unitId != null">
            AND cs.unit_id = #{unitId}
        </if>
        <if test="createStartTime != null">
            AND cs.create_time BETWEEN #{createStartTime} AND #{createEndTime}
        </if>
        <if test="auditingStartTime != null">
            AND cs.auditing_time BETWEEN #{auditingStartTime} AND #{auditingEndTime}
        </if>
        <if test="auditingStatus != null">
            AND cs.auditing_status = #{auditingStatus}
        </if>
        ORDER BY
        cs.create_time DESC
    </select>
    <select id="selectDefaultScoreById" resultMap="DefaultScoreResult">
ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml
@@ -4,4 +4,12 @@
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ycl.platform.mapper.TContractMapper">
    <select id="selectAll" resultType="com.ycl.platform.domain.entity.TContract">
        select a.*, b.unit_name
        from t_contract a
                 left join t_yw_unit b on a.unit_id = b.id and b.deleted = '0'
        where a.deleted = '0'
        order by create_time desc
    </select>
</mapper>
ycl-server/src/main/resources/mapper/zgyw/TContractResultRecordMapper.xml
@@ -4,4 +4,11 @@
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ycl.platform.mapper.ContractResultRecordMapper">
    <insert id="saveBatch">
        insert into t_contract_result_record(rule_name, create_time, rule_ids, result_id, num, score, deleted, deduct_category) values
        <foreach collection="contractResultRecord" item="item" separator=",">
            (#{item.ruleName}, #{item.createTime}, #{item.ruleIds}, #{item.resultId}, #{item.num}, #{item.score}, 0, #{item.deductCategory})
        </foreach>
    </insert>
</mapper>