Browse Source

烟台凯越v2.0

wzy 11 months ago
parent
commit
8506683574

+ 25 - 0
mjava-kaiyue_yt/pom.xml

@@ -25,5 +25,30 @@
             <scope>compile</scope>
         </dependency>
     </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
+                <configuration>
+                    <includeSystemScope>true</includeSystemScope>
+                    <!-- 如果没有该配置,devtools不会生效: 打包时关闭 -->
+                    <fork>false</fork>
+                    <!-- 避免中文乱码 -->
+                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
+                </configuration>
+                <!-- 允许生成可运行jar -->
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
 
 </project>

+ 8 - 0
mjava-kaiyue_yt/src/main/java/com/malk/kaiyue/controller/KYController.java

@@ -59,6 +59,14 @@ public class KYController extends DDCallbackController {
         return kyService.getEmployeeAnnualLeaveNum(map);
     }
 
+    //获取员工真实假期余额
+    @PostMapping("/getUserLeaveInfo")
+    McR getUserLeaveInfo(@RequestBody Map map) {
+        String userId = map.get("userId").toString();
+        Map result = kyService.getUserLeaveInfo(userId);
+        return McR.success(result);
+    }
+
     //每年1月1日 01:00定时更新员工年假数
     @Scheduled(cron = "0 0 1 1 1 ? ")
     @GetMapping("/cronUpdateEmployeeAnnualLeaveNum")

+ 1 - 0
mjava-kaiyue_yt/src/main/java/com/malk/kaiyue/service/KYService.java

@@ -37,4 +37,5 @@ public interface KYService {
      */
     McR updateEmployeeAnnualLeaveNum();
 
+    Map getUserLeaveInfo(String userId);
 }

+ 92 - 0
mjava-kaiyue_yt/src/main/java/com/malk/kaiyue/service/impl/KYServiceImpl.java

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -355,6 +356,97 @@ public class KYServiceImpl implements KYService {
         return McR.success();
     }
 
+    @Override
+    public Map getUserLeaveInfo(String userId) {
+        long currentTime = System.currentTimeMillis();
+
+        Map leaveMap = new HashMap();
+
+        //年假余额
+        BigDecimal annualLeaveNum = new BigDecimal(0.00);
+
+        //查询员工年假余额
+        List<Map> leaveQuotasList = new ArrayList<>();
+        getLeaveNum("3dcd4b8c-1b88-4206-9b52-cc9e2fde2e38",userId,0,50,leaveQuotasList);
+
+        if (Objects.nonNull(leaveQuotasList)){
+            for (Map leaveQuotas : leaveQuotasList) {
+                if ((long) leaveQuotas.get("start_time") <= currentTime && currentTime <= (long) leaveQuotas.get("end_time")){
+                    if (Objects.isNull(leaveQuotas.get("quota_num_per_hour")) && Objects.nonNull(leaveQuotas.get("quota_num_per_day"))){
+                        annualLeaveNum = annualLeaveNum.add(new BigDecimal(String.valueOf(leaveQuotas.get("quota_num_per_day"))).divide(new BigDecimal(100)));
+                    }
+                    if (Objects.nonNull(leaveQuotas.get("used_num_per_day"))){
+                        annualLeaveNum = annualLeaveNum.subtract(new BigDecimal(String.valueOf(leaveQuotas.get("used_num_per_day"))).divide(new BigDecimal(100)));
+                    }
+                }
+            }
+        }
+
+        if (annualLeaveNum.compareTo(new BigDecimal(8)) == 1 || annualLeaveNum.compareTo(new BigDecimal(8)) == 0){
+            annualLeaveNum = annualLeaveNum.subtract(new BigDecimal(8));
+            leaveMap.put("可预支年假",8);
+            leaveMap.put("实际年假余额",annualLeaveNum);
+            leaveMap.put("已预支年假",0);
+        }else {
+            BigDecimal relYearLeave = annualLeaveNum.remainder(new BigDecimal(0.5));
+            leaveMap.put("可预支年假",annualLeaveNum.subtract(relYearLeave));
+            leaveMap.put("实际年假余额",annualLeaveNum.subtract(new BigDecimal(8)));
+            leaveMap.put("已预支年假",new BigDecimal(8).subtract(annualLeaveNum).add(relYearLeave));
+        }
+
+        //获取员工调休假余额
+        List<Map> leaveQuotasList2 = new ArrayList<>();
+        getLeaveNum("b6301b0e-193a-4bce-b225-2f67a5d6244b",userId,0,10,leaveQuotasList2);
+
+        //调休假余额
+        int compensatoryLeaveNum = 0;
+        if (Objects.nonNull(leaveQuotasList2)){
+            for (Map leaveQuotas : leaveQuotasList2) {
+                if ((long) leaveQuotas.get("start_time") <= currentTime && currentTime <= (long) leaveQuotas.get("end_time")){
+                    if (Objects.isNull(leaveQuotas.get("quota_num_per_day")) && Objects.nonNull(leaveQuotas.get("quota_num_per_hour"))){
+                        compensatoryLeaveNum += ((int) leaveQuotas.get("quota_num_per_hour")) / 100;
+                    }
+                    if (Objects.nonNull(leaveQuotas.get("used_num_per_hour"))){
+                        compensatoryLeaveNum -= ((int) leaveQuotas.get("used_num_per_hour")) / 100;
+                    }
+                }
+            }
+        }
+        if (compensatoryLeaveNum >= 80){
+            leaveMap.put("可预支调休",80);
+            leaveMap.put("实际加班小时数",compensatoryLeaveNum-80);
+            leaveMap.put("已预支调休",0);
+        }else {
+            leaveMap.put("可预支调休",compensatoryLeaveNum);
+            leaveMap.put("实际加班小时数",0);
+            leaveMap.put("已预支调休",80-compensatoryLeaveNum);
+        }
+
+        return leaveMap;
+
+    }
+
+    private List<Map> getLeaveNum(String leave_code,String userId,int offset,int size,List<Map> leaveQuotasList) {
+        Map body = new HashMap();
+        body.put("leave_code",leave_code);
+        body.put("op_userid",ddConf.getOperator());
+        body.put("userids",userId);
+        body.put("offset",offset);
+        body.put("size",size);
+
+        DDR_New ddrNew = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/attendance/vacation/quota/list", null, ddClient.initTokenParams(), body, DDR_New.class);
+        Map result = (Map) ddrNew.getResult();
+        if (Objects.nonNull(result.get("leave_quotas"))){
+            leaveQuotasList.addAll((List<Map>) result.get("leave_quotas"));
+        }
+
+        if ((boolean) result.get("has_more")){
+            getLeaveNum(leave_code,userId,offset+size,size,leaveQuotasList);
+        }
+        return leaveQuotasList;
+    }
+
+
     /**
      * 检查该更新事件在5s内是否处理过,应对钉钉瞬间重复回调
      *

+ 49 - 15
mjava-kaiyue_yt/src/main/resources/application-prod.yml

@@ -1,13 +1,13 @@
 # 环境配置
 server:
-  port: 9013
+  port: 8114
   servlet:
     context-path: /api/kaiyue
 
 # condition
 spel:
-  scheduling: true        # 定时任务是否执行
-  multiSource: false      # 是否多数据源配置
+  scheduling: false        # 定时任务是否执行
+  multiSource: false       # 是否多数据源配置
 
 spring:
   # database
@@ -18,19 +18,54 @@ spring:
     username: root
     password: mu123
     url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+    # 主库
+    primary:
+      username: root
+      password: mu123
+      jdbc-url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+    # 从库
+    slave:
+      username: root
+      password: mu123
+      jdbc-url: jdbc:mysql://127.0.0.1:3306/mjava_slave?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
   jpa:
+    hibernate:
+      ddl-auto: none      # JPA对表没有任何操作
+    show-sql: true
     database: MYSQL
     database-platform: org.hibernate.dialect.MySQL57Dialect
 
+# filepath
+file:
+  path:
+    file: /Users/malk/server/_Tool/var/mjava/tmp/file/
+    image: /Users/malk/server/_Tool/var/mjava/tmp/image/
+    tmp: /Users/malk/server/_Tool/var/mjava/tmp/
+  source:
+    fonts: /Users/malk/server/_Tool/fonts/simsun.ttc
+logging:
+  file:
+    path: /Users/malk/server/_Tool/var/mjava/log
+
 # dingtalk
 dingtalk:
-  agentId: 2673435445
-  appKey: dingozv6fzkpqkiupd3d
-  appSecret: bO4AA6ujXj8xgLBJI5pR7ns0vRsHCn8Ng9fTf9WF95HTOlCW0oybYpHsuxXuBPiO
-  corpId: dingcc1b1ffad0d5ca1d
-  aesKey:
-  token:
-  operator: ""   # OA管理员账号 [0开头需要转一下字符串]
+  agentId: 2999477924
+  appKey: dingzorik72leqm5qgpj
+  appSecret: csxfrSOZy02aXvc4IkqM9dFqz7cEDgUogvJaBIq_rtIbvjZLDKiVkHdVgKeNfoVQ
+  corpId: ding43bb7be8e7bdc63224f2f5cc6abecb85
+  aesKey: 7txhFmSyWIXIrEvwlNfcuMfOQe19K6hqCdIaXMHLO2K
+  token: 24VR2Bnu
+  operator: "02421908021891243060"   # OA管理员账号 [0开头需要转一下字符串]
+
+  #高级假期
+  #agentId: 3047931226
+  #appKey: dingzwmsgsh53i0vntbu
+  #appSecret: E2ro4owsTwPxba_4ntLg01kYn4-W_Ti6IU3MaALj-f_xQkXhnSDccEE5Iad-fnuk
+  #corpId: dingc905d8a60b6a641b24f2f5cc6abecb85
+  #aesKey: hEWViCdQbFxRoRwPDi64tRegzAkuoIpp5Oq3JSngWXi
+  #token: wKJlvqvPrEkNd849
+  #operator: "344749020127590108"   # OA管理员账号 [0开头需要转一下字符串]
+
 
 # aliwork
 aliwork:
@@ -39,8 +74,7 @@ aliwork:
 
 # teambition
 teambition:
-  AppID: 659cf4922fefb4a7ec89137b
-  AppSecret: ploT7pyTcEVz91i5IIBZ8Pw7LbrOWPYD
-  TenantId: 655f1512ad7db5a6a70cf7b1                # 管理后台 - 企业xx - 企业ID
-  OperatorId: 65682c174655a82b4fa04dfe              # 公共账号, 需要有操作权限 [x]
-  ApiHost: https://tb.awinic.com:443/gateway        # 私有部署
+  AppID: 65956b5dd0ac095d62d0e592
+  AppSecret: gjQUoqKa1PHjTiyQFFuachfqKPyNeacA
+  TenantId: 6034c885e71842e1e5bb5218        # 管理后台 - 企业xx - 企业ID
+  OperatorId: 5e698cca21f5ad70dfba7d2b      # 公共账号, 需要有操作权限 [牧语]

+ 3 - 0
mjava-kaiyue_yt/src/main/resources/application.yml

@@ -0,0 +1,3 @@
+spring:
+  profiles:
+    active: prod