From 21cbdad6f59a045910b22bb3bf771e47d56c096f Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期五, 13 六月 2025 11:36:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java |   69 +++++++++++++++++++++++++++++++++-
 1 files changed, 67 insertions(+), 2 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java
index 8b79829..31517e7 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java
@@ -3,6 +3,7 @@
 
 import cn.hutool.core.date.DatePattern;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -19,6 +20,10 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -30,7 +35,8 @@
  */
 @Service
 public class MdcEquipmentPunchServiceImpl extends ServiceImpl<MdcEquipmentPunchMapper, MdcEquipmentPunch> implements IMdcEquipmentPunchService {
-
+    @Resource
+    private MdcEquipmentPunchMapper mdcEquipmentPunchMapper;
     @Resource
     private IMdcEquipmentService mdcEquipmentService;
 
@@ -136,13 +142,16 @@
             MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch();
             if (first.isPresent()) {
                 equipmentPunch = first.get();
+                //宸插瓨鍦ㄨ褰曡鏄庡凡鎵撲笅鐝崱锛屾晠灏嗘槸鍚︾己鍗$疆涓哄惁
+                equipmentPunch.setIsAbsent(0);
             }else {
                 equipmentPunch.setEquipmentId(equipment);
                 equipmentPunch.setPunchUser(userId);
                 equipmentPunch.setRecordDate(currentDate);
                 equipmentPunch.setShiftSchedule(mdcEquipmentPunch.getShiftSchedule());
-                equipmentPunch.setIsAbsent(0);
                 equipmentPunch.setIsEarly(0);
+                //姝e父鎵撳崱鏃跺厛灏嗘槸鍚︾己鍗$疆涓衡�滄槸鈥濓紝闃叉鏈墦涓嬬彮鍗℃椂鏃犳硶璋冩暣鐘舵��
+                equipmentPunch.setIsAbsent(1);
             }
             equipmentPunch.setCheckInTime(mdcEquipmentPunch.getCheckInTime());
             //鎵撳崱鏃堕棿澶т簬8锛�30/17:00鏃朵负杩熷埌鎵撳崱
@@ -214,6 +223,7 @@
             MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch();
             if (mdcEquipmentPunchOptional.isPresent()) {
                 equipmentPunch = mdcEquipmentPunchOptional.get();
+                equipmentPunch.setIsAbsent(0);
             }else {
                 equipmentPunch.setIsAbsent(1);
                 equipmentPunch.setIsLate(0);
@@ -231,4 +241,59 @@
 
         this.saveOrUpdateBatch(list);
     }
+
+    @Override
+    public void fillPunchRates(List<MdcEquipmentPunch> punchList) {
+
+        // 鑾峰彇鏄ㄥぉ鏃ユ湡
+        LocalDate yesterday = LocalDate.now().minusDays(1);
+        String yesterdayStr = yesterday.format(DateTimeFormatter.ofPattern(DatePattern.PURE_DATE_PATTERN)); // 鏍煎紡鍖栦负 "yyyy-MM-dd"
+
+
+        // 鑾峰彇鎬昏澶囨暟
+        int totalDevices = mdcEquipmentPunchMapper.getTotalDeviceCount();
+        if (totalDevices == 0) return;
+
+        // 缁熻鍚勭被鍨嬫墦鍗′汉鏁�
+        int morningIn = mdcEquipmentPunchMapper.countMorningShiftIn(yesterdayStr);
+        int eveningIn = mdcEquipmentPunchMapper.countEveningShiftIn(yesterdayStr);
+        int morningOut = mdcEquipmentPunchMapper.countMorningShiftOut(yesterdayStr);
+        int eveningOut = mdcEquipmentPunchMapper.countEveningShiftOut(yesterdayStr);
+
+
+        // 璁剧疆鎵撳崱鐜囧埌姣忎釜 DTO
+        for (MdcEquipmentPunch dto : punchList) {
+            dto.setMorningShiftInRate(calculateRate(morningIn, totalDevices));
+            dto.setEveningShiftInRate(calculateRate(eveningIn, totalDevices));
+            dto.setMorningShiftOutRate(calculateRate(morningOut, totalDevices));
+            dto.setEveningShiftOutRate(calculateRate(eveningOut, totalDevices));
+
+            // 璁剧疆鎵撳崱璁惧鏁伴噺瀛楁
+            dto.setMorningShiftInDeviceNum(morningIn);
+            dto.setMorningShiftOutDeviceNum(morningOut);
+            dto.setEveningShiftInDeviceNum(eveningIn);
+            dto.setEveningShiftOutDeviceNum(eveningOut);
+            dto.setDeviceCountNum(totalDevices);
+        }
+    }
+
+    // 璁$畻鐧惧垎姣斿苟淇濈暀涓や綅灏忔暟
+    private BigDecimal calculateRate(int actual, int total) {
+        if (total == 0) return BigDecimal.ZERO;
+        return new BigDecimal(actual)
+                .divide(new BigDecimal(total), 4, RoundingMode.HALF_UP)
+                .multiply(BigDecimal.valueOf(100))
+                .setScale(2, RoundingMode.HALF_UP); // 淇濈暀涓や綅灏忔暟
+    }
+
+    @Override
+    public List<MdcEquipmentPunch> getYesterdayRecords(String  targetDate) {
+        // 鏋勯�犳煡璇㈡潯浠讹細record_date = targetDate.toString()
+        QueryWrapper<MdcEquipmentPunch> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("record_date", targetDate);
+
+        // 鎵ц鏌ヨ骞惰繑鍥炵粨鏋�
+        return baseMapper.selectList(queryWrapper);
+    }
+
 }

--
Gitblit v1.9.3