5 Commits 10fb6f26ce ... 43af805fb4

Autore SHA1 Messaggio Data
  wzy 43af805fb4 Merge branch 'master' of https://mc.cloudpure.cn/mjava/cont 3 settimane fa
  wzy b77e650a35 思库 3 settimane fa
  wzy 9e61952e7e 灵明光子 3 settimane fa
  wzy 5a8ecf1fa1 金轮 3 settimane fa
  wzy bc0fab90f4 中车 3 settimane fa

+ 6 - 0
mjava-jinlun/src/main/java/com/malk/jinlun/schedule/JinlunTask.java

@@ -56,4 +56,10 @@ public class JinlunTask {
         jinlunTaskService.syncXingneng();
     }
 
+    //定时同步销售订单
+    @Scheduled(cron = "0 6 0 * * ?")
+    public void syncSaleOrder(){
+        jinlunTaskService.syncSaleOrder();
+    }
+
 }

+ 4 - 1
mjava-jinlun/src/main/java/com/malk/jinlun/service/CpClient.java

@@ -1,5 +1,6 @@
 package com.malk.jinlun.service;
 
+import java.util.List;
 import java.util.Map;
 
 public interface CpClient {
@@ -11,7 +12,9 @@ public interface CpClient {
 
     Map getCpBo(String schemaCode, String objectId, String userId);
 
-    Map getCpBoList(String schemaCode, Map queryCondition,int page, int size, String userId);
+    Map getCpBoList(String schemaCode, Map queryCondition, Map options,int page, int size, String userId);
+
+    List<Map> getCpUserInfo(String corpId, List<String> departmentIds, List<String> ids, String mobile, String name, int page, int size);
 
     Map getCpBoResultData(Map result);
 

+ 3 - 0
mjava-jinlun/src/main/java/com/malk/jinlun/service/JinlunTaskService.java

@@ -12,4 +12,7 @@ public interface JinlunTaskService {
     void syncSaleReturn();
 
     void syncXingneng();
+
+    void syncSaleOrder();
+
 }

+ 41 - 1
mjava-jinlun/src/main/java/com/malk/jinlun/service/impl/CpClientImpl.java

@@ -12,7 +12,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 @Service
 public class CpClientImpl implements CpClient {
@@ -139,11 +141,12 @@ public class CpClientImpl implements CpClient {
      * @return
      */
     @Override
-    public Map getCpBoList(String schemaCode, Map queryCondition,int page, int size, String userId){
+    public Map getCpBoList(String schemaCode, Map queryCondition, Map options,int page, int size, String userId){
         Map body = new HashMap();
 
         body.put("queryCondition",queryCondition);
         body.put("schemaCode",schemaCode);
+        body.put("options",options);
         body.put("page",page);
         body.put("size",size);
         body.put("showTotal",true);
@@ -163,6 +166,43 @@ public class CpClientImpl implements CpClient {
         return result;
     }
 
+    /**
+     * 云枢分页查询用户详情
+     * @param corpId
+     * @param departmentIds
+     * @param ids
+     * @param mobile
+     * @param name
+     * @param page
+     * @param size
+     * @return
+     */
+    @Override
+    public List<Map> getCpUserInfo(String corpId, List<String> departmentIds, List<String> ids, String mobile, String name, int page, int size) {
+        Map body = new HashMap();
+        if (Objects.nonNull(corpId)) body.put("corpId",corpId);
+        if (Objects.nonNull(departmentIds)) body.put("departmentIds",departmentIds);
+        if (Objects.nonNull(ids)) body.put("ids",ids);
+        if (Objects.nonNull(mobile)) body.put("mobile",mobile);
+        if (Objects.nonNull(name)) body.put("name",name);
+
+        body.put("page",page);
+        body.put("size",size);
+
+        String s = UtilHttp.doPost(cloudpivotConfig.getRedirectUri() + "openapi/v3/organization/user/detail/query", CloudpivotConfig.initTokenHeader(getCpAccessToken()), null, body);
+
+        Map result = (Map) JSONObject.parse(s);
+
+        isSuccess(result);
+
+        Map data = UtilMap.getMap(result, "data");
+
+        List<Map> content = UtilMap.getList(data, "content");
+
+        return content;
+    }
+
+
     //获取云枢表单详情返回结果中单据字段值
     @Override
     public Map getCpBoResultData(Map result){

File diff suppressed because it is too large
+ 248 - 6
mjava-jinlun/src/main/java/com/malk/jinlun/service/impl/JinlunTaskServiceImpl.java


+ 2 - 2
mjava-jinlun/src/main/resources/application-dev.yml

@@ -5,7 +5,7 @@ server:
 
 spring:
   datasource:
-    url: jdbc:mysql://192.168.0.12:3306/cloudpivot?serverTimezone=GMT%2B8
+    url: jdbc:mysql://172.16.10.1:3306/cloudpivot?serverTimezone=GMT%2B8
     username: root
     password: test123456!@#$%
     driver-class-name: com.mysql.cj.jdbc.Driver
@@ -40,7 +40,7 @@ cloudpivot:
   grant_type: client_credentials
   client_id: xclient
   client_secret: 0a417ecce58c31b32364ce19ca8fcd15
-  redirect_uri: http://192.168.0.12/api/
+  redirect_uri: http://172.16.10.1/api/
   operator_user_id: 8ac194c0811240a6b483ebc86aeb9147
 
 kingdee:

+ 2 - 2
mjava-jinlun/src/main/resources/application-prod.yml

@@ -5,7 +5,7 @@ server:
 
 spring:
   datasource:
-    url: jdbc:mysql://192.168.0.12:3306/cloudpivot?serverTimezone=GMT%2B8
+    url: jdbc:mysql://172.16.10.1:3306/cloudpivot?serverTimezone=GMT%2B8
     username: root
     password: test123456!@#$%
     driver-class-name: com.mysql.cj.jdbc.Driver
@@ -40,7 +40,7 @@ cloudpivot:
   grant_type: client_credentials
   client_id: xclient
   client_secret: 0a417ecce58c31b32364ce19ca8fcd15
-  redirect_uri: http://192.168.0.12/api/
+  redirect_uri: http://172.16.10.1/api/
   operator_user_id: 8ac194c0811240a6b483ebc86aeb9147
 
 kingdee:

+ 4 - 0
mjava-jinlun/src/test/java/com/malk/jinlun/DdTest.java

@@ -71,6 +71,10 @@ public class DdTest {
     public void test7() {
         jinlunTaskService.syncSaleReturn();
     }
+    @Test
+    public void test16() {
+        jinlunTaskService.syncSaleOrder();
+    }
 
     @Test
     public void test8() {

+ 5 - 5
mjava-lingmingguangzi/src/main/java/com/malk/lingmingguangzi/service/LingmingguangziServiceImpl.java

@@ -544,8 +544,8 @@ public class LingmingguangziServiceImpl implements LingmingguangziService {
             detail.put("die_model","");//
             return detail;
         }).collect(Collectors.toList());
-        //附件
-        List<Map> list2 = (List<Map>) formData.get("tableField_ly8fxusx");
+        //附件  20250413 附件过大可能上传超时 暂时不推送erp
+        /*List<Map> list2 = (List<Map>) formData.get("tableField_ly8fxusx");
 
         String[] ERP_FILEPATHS = new String[]{filePathSz,filePathXg,filePathZj,filePathHz};
         String[] ERP_ENVS = new String[]{"深圳","香港","浙江","杭州"};
@@ -585,7 +585,7 @@ public class LingmingguangziServiceImpl implements LingmingguangziService {
                         break;
                     }
                 }
-                /*if ("深圳".equals(type)){
+                if ("深圳".equals(type)){
                     //将downloadurl下载到本地
                     try {
                         downloadFile(ydDownloadUrl, filePathSz,fileName);
@@ -627,12 +627,12 @@ public class LingmingguangziServiceImpl implements LingmingguangziService {
                     } catch (UnsupportedEncodingException e) {
                         throw new RuntimeException(e);
                     }
-                }*/
+                }
 
                 return detail;
             }).collect(Collectors.toList());
             body.put("makSoFilesList",makSoFilesList);
-        }
+        }*/
         body.put("makSoDetailList",makSoDetailList);
 
 

+ 1 - 1
mjava-lingmingguangzi/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: dev
+    active: prod
   servlet:
     multipart:
       max-file-size: 100MB

+ 29 - 0
mjava-siku/src/main/java/com/malk/siku/schedule/SikuTask.java

@@ -0,0 +1,29 @@
+package com.malk.siku.schedule;
+
+import com.malk.siku.service.SikuTaskService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+/**
+ * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class SikuTask {
+
+    @Autowired
+    private SikuTaskService sikuTaskService;
+
+    //定时同步借款台账
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void syncMaterial(){
+        sikuTaskService.syncLoanManage();
+    }
+
+}

+ 6 - 0
mjava-siku/src/main/java/com/malk/siku/service/SikuTaskService.java

@@ -0,0 +1,6 @@
+package com.malk.siku.service;
+
+public interface SikuTaskService {
+    void syncLoanManage();
+
+}

+ 214 - 0
mjava-siku/src/main/java/com/malk/siku/service/impl/SikuTaskServiceImpl.java

@@ -0,0 +1,214 @@
+package com.malk.siku.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McException;
+import com.malk.server.dingtalk.DDR_New;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.siku.service.SikuTaskService;
+import com.malk.siku.utils.MkBxUtil;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Slf4j
+@Service
+public class SikuTaskServiceImpl implements SikuTaskService {
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private DDClient ddClient;
+
+    @Override
+    public void syncLoanManage() {
+        try {
+            //删除宜搭借款台账
+            List<List<String>> formInstanceIdListList = new ArrayList<>();//实例id集合,每100条
+
+            DDR_New ddrNew = new DDR_New();
+            int pageSize = 50;
+            int pageNumber = 0;
+            do {
+                pageNumber++;
+
+                ddrNew = retryQueryData(YDParam.builder()
+                        .formUuid("FORM-14F79868B683481295062CD1D643E06EVB7B")
+                        .searchFieldJson("")
+                        .pageNumber(pageNumber)
+                        .pageSize(pageSize)
+                        .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
+
+                formInstanceIdListList.addAll(Collections.singleton((List<String>) ddrNew.getData()));
+
+//                Thread.sleep(1000);
+            }while (ddrNew.getPageNumber() * pageSize < ddrNew.getTotalCount());
+
+            for (List<String> formInstanceIdList : formInstanceIdListList) {
+                if (!formInstanceIdList.isEmpty()){
+                    retryOperateData(YDParam.builder()
+                            .formUuid("FORM-14F79868B683481295062CD1D643E06EVB7B")
+                            .formInstanceIdList(formInstanceIdList)
+                            .build(), YDConf.FORM_OPERATION.delete_batch);
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+        //查询每刻最新借款台账
+        List<Map> loanManageList = MkBxUtil.loanManageList();
+
+        for (Map loanManage : loanManageList) {
+            String code = UtilMap.getString(loanManage, "code");//台账编号\
+            String formCode = UtilMap.getString(loanManage, "formCode");//借款单单据号
+
+            String legalEntityName = UtilMap.getString(loanManage, "legalEntityName");//所属公司
+            String departmentName = UtilMap.getString(loanManage, "departmentName");//借款部门
+            String employeeName = UtilMap.getString(loanManage, "employeeName");//借款人
+            List<String> employeeDdUser = getDdUserId(employeeName);
+            String responseUserName = UtilMap.getString(loanManage, "responseUserName");//负责人
+            List<String> responseDdUser = getDdUserId(responseUserName);
+
+            String formName = UtilMap.getString(loanManage, "formName");//事由
+            String formSubTypeName = UtilMap.getString(loanManage, "formSubTypeName");//单据类型
+            long submittedAt = UtilMap.getLong(loanManage, "submittedAt");//提单时间
+            long expectRepaymentTime = UtilMap.getLong(loanManage, "expectRepaymentTime");//预计归还时间
+            int loanAge = UtilMap.getInt(loanManage, "loanAge");//账龄
+            Double amount = UtilMap.getDouble(UtilMap.getMap(loanManage, "approvedAmount"), "amount");//借款金额
+            Double owedAmount = UtilMap.getDouble(UtilMap.getMap(loanManage, "owedAmount"), "amount");//未归还(未核销)
+            Double pendingAmount = UtilMap.getDouble(UtilMap.getMap(loanManage, "pendingAmount"), "amount");//核销中金额
+
+            //借款单详情
+            Map loanDetailInfo = MkBxUtil.loanDetailInfo(formCode);
+            Map customObject = UtilMap.getMap(loanDetailInfo, "customObject");
+
+            Map cf0 = UtilMap.getMap(customObject, "CF0");
+            String projectCode = UtilMap.getString(cf0, "detailBusinessCode");//项目流水号
+            String projectName = UtilMap.getString(cf0, "text");//项目名称
+
+            long settledAt = UtilMap.getLong(loanDetailInfo, "settledAt");//支付时间
+
+            Map formData = new HashMap();
+            formData.put("textField_mnsly3li",code);
+            formData.put("textField_mnsly3lb",legalEntityName);
+            formData.put("textField_mnsly3lc",departmentName);
+            formData.put("employeeField_mnsly3mc",employeeDdUser);
+            formData.put("employeeField_mnsly3md",responseDdUser);
+            formData.put("textField_mnsm8q6f",projectName);
+            formData.put("textField_mnwtwu9z",projectCode);
+            formData.put("textareaField_mnsly3ll",formName);
+            formData.put("textField_mnsly3lg",formSubTypeName);
+            formData.put("dateField_mnsly3lx",submittedAt);
+            formData.put("dateField_mnsly3ly",expectRepaymentTime);
+            formData.put("dateField_mnsly3m3",settledAt);
+            formData.put("numberField_mnsly3m4",loanAge);
+            formData.put("numberField_mnsly3m5",amount);
+            formData.put("numberField_mnsly3ma",owedAmount);
+            formData.put("numberField_mnsly3mb",pendingAmount);
+
+            //同步宜搭借款台账
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-14F79868B683481295062CD1D643E06EVB7B")
+                    .formDataJson(JSONObject.toJSONString(formData))
+                    .build(), YDConf.FORM_OPERATION.create);
+        }
+        System.out.println("111");
+
+    }
+
+
+    //自带重试的operateData方法
+    private Object retryOperateData(YDParam param, YDConf.FORM_OPERATION formOperation) {
+        int maxAttempts = 3; // 尝试的最大次数
+        int attempt = 0;
+
+        Object result = null;
+
+        while (attempt < maxAttempts) {
+            try {
+                result = ydClient.operateData(param, formOperation);
+
+                return result;
+            } catch (McException e) {
+                log.info("错误信息:{}",e.getMessage());
+                if (e.getMessage().equals("The request has failed due to a temporary failure of the server.")) {
+                    attempt++;
+                    // 线程睡眠3秒
+                    try {
+                        Thread.sleep(5000);
+                        log.info("尝试第{}次,param:{},FORM_OPERATION:{},异常信息:{}", attempt, JSONObject.toJSONString(param), formOperation,e.getMessage());
+                    } catch (InterruptedException ie) {
+                        Thread.currentThread().interrupt(); // 重新设置中断状态
+                        System.err.println("Sleep interrupted: " + ie.getMessage());
+                    }
+                }
+            } catch (Exception e) {
+                log.error("操作失败,param:{},FORM_OPERATION:{},异常信息:{}", JSONObject.toJSONString(param), formOperation,e.getMessage());
+
+                throw new RuntimeException(e);
+            }
+
+        }
+
+        throw new RuntimeException("超出最大重试次数,param:"+JSONObject.toJSONString(param)+",FORM_OPERATION:{}"+formOperation);
+    }
+
+
+    //自带重试的queryData方法
+    private DDR_New retryQueryData(YDParam param, YDConf.FORM_QUERY formQuery) {
+        int maxAttempts = 3; // 尝试的最大次数
+        int attempt = 0;
+
+        DDR_New result = null;
+
+        while (attempt < maxAttempts) {
+            try {
+                result = ydClient.queryData(param, formQuery);
+
+                return result;
+            } catch (McException e) {
+                log.info("错误信息:{}",e.getMessage());
+                if (e.getMessage().equals("The request has failed due to a temporary failure of the server.")) {
+                    attempt++;
+                    // 线程睡眠3秒
+                    try {
+                        Thread.sleep(5000);
+                        log.info("尝试第{}次,param:{},FORM_QUERY:{},异常信息:{}", attempt, JSONObject.toJSONString(param), formQuery,e.getMessage());
+                    } catch (InterruptedException ie) {
+                        Thread.currentThread().interrupt(); // 重新设置中断状态
+                        System.err.println("Sleep interrupted: " + ie.getMessage());
+                    }
+                }
+            } catch (Exception e) {
+                log.error("操作失败,param:{},FORM_QUERY:{},异常信息:{}", JSONObject.toJSONString(param), formQuery,e.getMessage());
+
+                throw new RuntimeException(e);
+            }
+
+        }
+
+        throw new RuntimeException("超出最大重试次数,param:"+JSONObject.toJSONString(param)+",FORM_QUERY:{}"+formQuery);
+    }
+
+    //根据员工名字匹配员工id
+    private List<String> getDdUserId(String Name){
+        HashMap body = new HashMap();
+
+        body.put("queryWord", Name);
+        body.put("offset",0);
+        body.put("size",1);
+
+        String s1 = UtilHttp.doPost("https://api.dingtalk.com/v1.0/contact/users/search", ddClient.initTokenHeader(), null, body);
+
+        List<String> list = JSONObject.parseObject(s1).getJSONArray("list").toJavaList(String.class);
+
+        return list;
+    }
+}

+ 0 - 8
mjava-siku/src/main/resources/application-dev.yml

@@ -26,14 +26,6 @@ aliwork:
   systemToken: Y2D66JB1A0B2OMK6OMB29AB8VMP43KJ7UCDKMG46
 
 mk:
-  #每刻报销-测试环境
-  bx:
-    appCode: AP52Y01LHHTAP9
-    appSecret: N4WuERLteAUPaWebnsHy
-  #每刻云票-测试环境
-  yp:
-    appCode: AP53EP1SVDS1N9
-    appSecret: qF4nm3nPnyXYcrWcr5jl
   downloadFilePath: d:\\
   downloadUrl: http://localhost:9037/api/siku/
 

+ 40 - 32
mjava-zhongche/src/main/java/com/malk/zhongche/service/impl/ZhongcheServiceImpl.java

@@ -71,20 +71,20 @@ public class ZhongcheServiceImpl implements ZhongcheService {
 
         String executorId = UtilMap.getString(taskInfo, "executorId");//执行者id
 
-        Map ddUserInfo = tbClient.idMapQuery(executorId, true).get(0);
-
-        Map extra = UtilMap.getMap(ddUserInfo, "extra");
-
-        String ddUserId = UtilMap.getString(extra, "userId");//执行人钉钉userid
-        Map userInfoById = ddClient_contacts.getUserInfoById(ddClient.getAccessToken(),ddUserId);
-        String ddUserName = UtilMap.getString(userInfoById, "name");//执行人钉钉姓名
         Map ddUser = new HashMap();
-        ddUser.put("label",ddUserName);
-        ddUser.put("value",ddUserId);
-        ddUser.put("emplId",ddUserId);
+        if (Strings.isNotBlank(executorId)){
+            Map ddUserInfo = tbClient.idMapQuery(executorId, true).get(0);
+            Map extra = UtilMap.getMap(ddUserInfo, "extra");
+            String ddUserId = UtilMap.getString(extra, "userId");//执行人钉钉userid
+            Map userInfoById = ddClient_contacts.getUserInfoById(ddClient.getAccessToken(),ddUserId);
+            String ddUserName = UtilMap.getString(userInfoById, "name");//执行人钉钉姓名
+            ddUser.put("label",ddUserName);
+            ddUser.put("value",ddUserId);
+            ddUser.put("emplId",ddUserId);
+        }
 
-        long startDate = extracted(UtilMap.getString(taskInfo, "startDate"));//任务开始时间
-        long dueDate = extracted(UtilMap.getString(taskInfo, "dueDate"));//任务截止时间
+        Long startDate = extracted(UtilMap.getString(taskInfo, "startDate"));//任务开始时间
+        Long dueDate = extracted(UtilMap.getString(taskInfo, "dueDate"));//任务截止时间
 
         String tfsId = UtilMap.getString(taskInfo, "tfsId");//任务状态id
 
@@ -93,15 +93,18 @@ public class ZhongcheServiceImpl implements ZhongcheService {
         Map tfsInfo = tbClient.queryProjectCustomFlowStatus(projectId, body).get(0);
         String tfsName = UtilMap.getString(tfsInfo, "name");//任务状态
 
-
-        //获取tb任务上级任务
         String parentTaskId = UtilMap.getString(taskInfo, "parentTaskId");
-        Map parentTaskInfo = tbClient.queryTaskDetail(parentTaskId, null, null).get(0);
-        String parentTaskName = UtilMap.getString(parentTaskInfo, "content");
+        String parentTaskName = "";
+        String rootTaskName = "";
+        if (Strings.isNotBlank(parentTaskId)){
+            //获取tb任务上级任务
+            Map parentTaskInfo = tbClient.queryTaskDetail(parentTaskId, null, null).get(0);
+            parentTaskName = UtilMap.getString(parentTaskInfo, "content");
 
-        //获取tb顶级任务
-        Map rootTaskInfo = getRootTask(parentTaskId);
-        String rootTaskName = UtilMap.getString(rootTaskInfo, "content");
+            //获取tb顶级任务
+            Map rootTaskInfo = getRootTask(parentTaskId);
+            rootTaskName = UtilMap.getString(rootTaskInfo, "content");
+        }
 
         Map result = new HashMap();
         result.put("wtls", wtls);
@@ -193,22 +196,27 @@ public class ZhongcheServiceImpl implements ZhongcheService {
     }
 
     //转换时区并返回时间戳
-    private static long extracted(String dueDate) {
-        // 1. 解析为 Instant(UTC 时间)
-        Instant instant = Instant.parse(dueDate);
+    private static Long extracted(String dateStr) {
+        if (Strings.isNotBlank(dateStr)){
+            // 1. 解析为 Instant(UTC 时间)
+            Instant instant = Instant.parse(dateStr);
+
+            // 2. 转换为目标时区(Asia/Shanghai, UTC+8)
+            ZoneId shanghaiZone = ZoneId.of("Asia/Shanghai");
+            ZonedDateTime shanghaiTime = instant.atZone(shanghaiZone);
 
-        // 2. 转换为目标时区(Asia/Shanghai, UTC+8)
-        ZoneId shanghaiZone = ZoneId.of("Asia/Shanghai");
-        ZonedDateTime shanghaiTime = instant.atZone(shanghaiZone);
+            // 3. 转换为时间戳(毫秒)
+            long timestamp = shanghaiTime.toInstant().toEpochMilli();
 
-        // 3. 转换为时间戳(毫秒)
-        long timestamp = shanghaiTime.toInstant().toEpochMilli();
+            // 输出结果
+            System.out.println("UTC 时间: " + instant);
+            System.out.println("上海时间: " + shanghaiTime);
+            System.out.println("时间戳(毫秒): " + timestamp);
 
-        // 输出结果
-        System.out.println("UTC 时间: " + instant);
-        System.out.println("上海时间: " + shanghaiTime);
-        System.out.println("时间戳(毫秒): " + timestamp);
+            return timestamp;
+        }else {
+            return null;
+        }
 
-        return timestamp;
     }
 }