From ec5a6ede3f88abebdf7a280744ea762757f310aa Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期二, 30 四月 2024 13:41:27 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ycl-server/src/main/java/com/ycl/task/ContractResultTask.java |  111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 111 insertions(+), 0 deletions(-)

diff --git a/ycl-server/src/main/java/com/ycl/task/ContractResultTask.java b/ycl-server/src/main/java/com/ycl/task/ContractResultTask.java
new file mode 100644
index 0000000..758c3a8
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/task/ContractResultTask.java
@@ -0,0 +1,111 @@
+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 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.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 * ?")
+    @Transactional
+    // @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 = getCheckResult(tContract, contractScore);
+            checkResultService.save(checkResult);
+            // 鏂板鑰冩牳缁撴灉璁板綍
+            List<ContractResultRecord> contractResultRecord = getContractResultRecord(contractScore, checkResult);
+            checkResultService.saveBatchRecord(contractResultRecord);
+        }
+    }
+
+    /**
+     * 淇濆瓨鑰冩牳璁板綍
+     *
+     * @param contractScore 鎵e垎
+     * @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 鎵e垎
+     * @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());
+        checkResult.setScore(contractScore.isEmpty() ? new BigDecimal("100") : new BigDecimal("100").subtract(contractScore.stream().map(ContractScore::getScore).reduce(BigDecimal::add).get()));
+        return checkResult;
+    }
+
+
+    /**
+     * 鑾峰彇涓婁釜鏈堢殑绗竴澶╁拰鏈�鍚庝竴澶�
+     */
+    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;
+    }
+
+}

--
Gitblit v1.8.0