From 8470e06b5ce5189162f9f6cd3f2cea7d14ad80af Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 28 四月 2025 10:37:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java |  133 +++++++++++++++++++++++++++++++++++++-------
 1 files changed, 112 insertions(+), 21 deletions(-)

diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
index 7ddc86e..a8ef908 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -1078,27 +1078,31 @@
         data.setCurrentOutDoneNum(getSumTotalByList(currentDoneNum,0,1));//浠婃棩瀹屾垚閲�
         data.setCurrentInNum(beforeInNum.add(data.getCurrentInDoneNum()).add(currentInNum));//褰撳墠鍏ュ簱鎬讳换鍔℃垚閲�
         data.setCurrentOutNum(beforeOutNum.add(data.getCurrentOutDoneNum()).add(currentOutNum));//褰撳墠鍑哄簱鎬讳换鍔℃垚閲�
-
-        //------------浠婃棩鍑哄叆搴撴晥鐜�----------------
-        BigDecimal outHours = getTotalDoneTimes(currentDoneNum,0);//
-        BigDecimal inHours = getTotalDoneTimes(currentDoneNum,1);//
-        if(outHours.compareTo(new BigDecimal(0))>0){
-            data.setTodayOutRate(data.getCurrentOutDoneNum().divide(outHours,2));//褰撳墠鍏ュ簱鎬讳换鍔℃垚閲�
-        }
-        if(inHours.compareTo(new BigDecimal(0))>0){
-            data.setTodayInRate(data.getCurrentInDoneNum().divide(inHours,2));//褰撳墠鍏ュ簱鎬讳换鍔℃垚閲�
-        }
+        data.setTodayOutRate(getDayTotalRata(data.getCurrentOutDoneNum(),DateUtil.getToday()));//褰撴棩鍑哄簱鏁堢巼
+        data.setTodayInRate(getDayTotalRata(data.getCurrentInDoneNum(),DateUtil.getToday()));//褰撴棩鍏ュ簱鏁堢巼
+        data.setMonthOutRate(getMonthRata(monthNum,Constants.ZERO));//鏈湀鍑哄簱鏁堢巼
+        data.setMonthInRate(getMonthRata(monthNum,Constants.ONE));//鏈湀鍑哄簱鏁堢巼
+        //------------浠婃棩鍑哄叆搴撴晥鐜�---------------- 
+//        BigDecimal outHours = getTotalDoneTimes(currentDoneNum,0);//
+//        BigDecimal inHours = getTotalDoneTimes(currentDoneNum,1);//
+//
+//        if(outHours.compareTo(new BigDecimal(0))>0){
+//            data.setTodayOutRate(data.getCurrentOutDoneNum().divide(outHours,2));//褰撳墠鍏ュ簱鎬讳换鍔℃垚閲�
+//        }
+//        if(inHours.compareTo(new BigDecimal(0))>0){
+//            data.setTodayInRate(data.getCurrentInDoneNum().divide(inHours,2));//褰撳墠鍏ュ簱鎬讳换鍔℃垚閲�
+//        }
         //------------鏈湀鍑哄叆搴撴晥鐜�----------------
 //        BigDecimal outMonthNum = getSumTotalByList(monthNum,0,null).add(data.getCurrentOutDoneNum());
-        BigDecimal inMonthNum = getSumTotalByList(monthNum,1,null).add(data.getCurrentInDoneNum());
-        BigDecimal outMonthHours = getTotalDoneTimes(monthNum,0).add(outHours);//
-        BigDecimal inMonthHours = getTotalDoneTimes(monthNum,1).add(inHours);//
-        if(outMonthHours.compareTo(new BigDecimal(0))>0){
-            data.setMonthOutRate(data.getMonthOutTotal().divide(outMonthHours,0,BigDecimal.ROUND_HALF_UP));//鏈湀鍏ュ簱鏁堢巼
-        }
-        if(inMonthHours.compareTo(new BigDecimal(0))>0){
-            data.setMonthInRate(inMonthNum.divide(inMonthHours,0,BigDecimal.ROUND_HALF_UP));//鏈湀鍏ュ簱鏁堢巼
-        }
+//        BigDecimal inMonthNum = getSumTotalByList(monthNum,1,null).add(data.getCurrentInDoneNum());
+//        BigDecimal outMonthHours = getTotalDoneTimes(monthNum,0).add(outHours);//
+//        BigDecimal inMonthHours = getTotalDoneTimes(monthNum,1).add(inHours);//
+//        if(outMonthHours.compareTo(new BigDecimal(0))>0){
+//            data.setMonthOutRate(data.getMonthOutTotal().divide(outMonthHours,0,BigDecimal.ROUND_HALF_UP));//鏈湀鍑哄簱鏁堢巼
+//        }
+//        if(inMonthHours.compareTo(new BigDecimal(0))>0){
+//            data.setMonthInRate(inMonthNum.divide(inMonthHours,0,BigDecimal.ROUND_HALF_UP));//鏈湀鍏ュ簱鏁堢巼
+//        }
         return data;
     }
 
@@ -1110,10 +1114,9 @@
         if(platformLogList!=null && platformLogList.size()>0){
             return new BigDecimal((double)(platformLogList.stream().map(m->Long.valueOf(m.getParam3())).reduce(Long.valueOf(0),Long::sum))/(double)60);
         }
-
         return new BigDecimal(0);
-
     }
+
     private BigDecimal getTotalDoneTimes(List<PlatformJob> list, Integer type) {
         BigDecimal r = new BigDecimal(0);
         if(list==null || list.size() == 0){
@@ -1149,6 +1152,94 @@
         return r;
     }
 
+
+    private BigDecimal getMonthRata(List<PlatformJob> list, Integer type) {
+        BigDecimal r = new BigDecimal(0);
+        if(list==null || list.size() == 0){
+            return r;
+        }
+        List<PlatformJob> jobList= new ArrayList<>();
+        for(PlatformJob job : list) {
+            if (!(Constants.equalsInteger(job.getStatus(), Constants.PlatformJobStatus.DONE.getKey())
+                    || Constants.equalsInteger(job.getStatus(), Constants.PlatformJobStatus.LEAVED.getKey())
+                    || Constants.equalsInteger(job.getStatus(), Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()))) {
+                //鍙煡璇㈠畬鎴愭暟鎹�
+                continue;
+            }
+            if (type != null && type == 0 && (Constants.equalsInteger(job.getType(), Constants.ONE) || Constants.equalsInteger(job.getType(), Constants.THREE))) {
+                //鍑哄簱
+                jobList.add(job);
+            }
+            if (type != null && type == 1 && (Constants.equalsInteger(job.getType(), Constants.ZERO) || Constants.equalsInteger(job.getType(), Constants.TWO) || Constants.equalsInteger(job.getType(), Constants.FOUR))) {
+                //鍏ュ簱
+                jobList.add(job);
+            }
+        }
+        if(CollectionUtils.isNotEmpty(jobList)){
+            //鑾峰彇浠诲姟鏁版嵁
+            List<String> jobDataList = list.stream().filter(i->Objects.nonNull(i.getDoneDate())).map(i->DateUtil.formatDate(i.getDoneDate(),"yyyy-MM-dd")).collect(Collectors.toList());
+            for (String jobDate:jobDataList) {
+                //杩囨护褰撳ぉ鐨勬暟鎹�
+                List<PlatformJob> platformJobList = list.stream().
+                        filter(i->jobDate.equals(DateUtil.formatDate(i.getDoneDate(),"yyyy-MM-dd"))).collect(Collectors.toList());
+                if(CollectionUtils.isNotEmpty(platformJobList)){
+                    //鑾峰彇浠婂ぉ鐨�
+                    r = r.add(this.getDayTotalRata(getSumTotalByList(platformJobList,type,null),jobDate));
+                }
+            }
+        }
+        return r;
+    }
+
+
+    private BigDecimal getDayTotalRata(BigDecimal totalAmount,String today) {
+        BigDecimal r = new BigDecimal(0);
+        //鏌ヨ浠婃棩鏈�鏃�/鏈�鏅氱殑浣滀笟鏁版嵁
+        List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>()
+                .lambda()
+                .apply(" ( to_days(param1) =  '"+today+"' or to_days(param2) =  '"+today+"' ) ")
+        );
+        if(totalAmount.compareTo(BigDecimal.ZERO)==0||CollectionUtils.isEmpty(platformLogList)){
+            return BigDecimal.ZERO;
+        }
+        if(platformLogList!=null && platformLogList.size()>0){
+            return this.getWorkTime(totalAmount,platformLogList);
+        }
+        return r;
+    }
+
+    /**
+     * 鏌ヨ浣滀笟鏃堕暱锛堝皬鏃讹級
+     * @param totalAmount
+     * @param platformLogList
+     * @return
+     */
+    public BigDecimal getWorkTime(BigDecimal totalAmount,List<PlatformLog> platformLogList){
+        if(CollectionUtils.isEmpty(platformLogList)){
+            return BigDecimal.ZERO;
+        }
+        //鑾峰彇寮�濮嬫椂闂�
+        List<Long> startTimeList = platformLogList.stream().filter(i->Objects.nonNull(i.getParam1())).map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam1()).getTime()).collect(Collectors.toList());
+        Long startTime  = Collections.min(startTimeList);
+        //鑾峰彇缁撴潫鏃堕棿
+        List<Long> endTimeList = platformLogList.stream().filter(i->Objects.nonNull(i.getParam2())).map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam2()).getTime()).collect(Collectors.toList());
+        Long endTime = Collections.max(endTimeList);
+        if(Objects.isNull(startTime)
+            || Objects.isNull(endTime) || (startTime>=endTime)){
+            return BigDecimal.ZERO;
+        }
+        return   totalAmount.divide(new BigDecimal(( endTime - startTime )+"").divide(new BigDecimal("3600000"),2,BigDecimal.ROUND_HALF_UP),2,BigDecimal.ROUND_HALF_UP) ;
+    }
+
+
+
+
+
+
+
+
+
+
     private BigDecimal  getSumTotalByList(List<PlatformJob> list,Integer type,Integer status) {
         BigDecimal r = new BigDecimal(0);
         if(list==null || list.size() == 0){

--
Gitblit v1.9.3