Browse Source

Merge branch 'master' of https://mc.cloudpure.cn/mjava/cont

wzy 2 weeks ago
parent
commit
3b96e36868

+ 10 - 0
mjava-chuizi/pom.xml

@@ -21,6 +21,16 @@
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.13</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.5.13</version>
+        </dependency>
         <dependency>
             <groupId>com.malk</groupId>
             <artifactId>base</artifactId>

+ 12 - 2
mjava-chuizi/src/main/java/com/malk/chuizi/delegate/DDDelegate.java

@@ -33,6 +33,7 @@ public class DDDelegate implements DDEvent {
     @Autowired
     private DDClient_Workflow ddClient_workflow;
     // 审批任务回调执行业务逻辑
+
     @Async
     @Override
     public void executeEvent_Task_Finish(String processInstanceId, String processCode, boolean isAgree, String remark) {
@@ -72,10 +73,19 @@ public class DDDelegate implements DDEvent {
             String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);
             Map processData = ddClient_workflow.getProcessInstanceId(token, processInstanceId);
             log.info("开始执行回调:{}",processInstanceId);
-            if ("PROC-82233BD3-A274-4B90-8710-97D9F9663634".equals(processCode)){
+            //差旅报销
+            String TRAVEL_REIMBURSEMENT = "PROC-D362D97E-916B-4865-B932-13D4A3B4DF1C";
+            //油卡充值
+            String RECHARGE_FUEL_CARD = "PROC-65D446B1-EF01-4E6D-A66A-519B4C62A4D6";
+            //付款申请
+            String PAYMENT_APPLICATION = "PROC-82233BD3-A274-4B90-8710-97D9F9663634";
+
+            if (PAYMENT_APPLICATION.equals(processCode)){
                 chuiZiService.saveAccountsPayable(processData);
-            }else if ("PROC-D362D97E-916B-4865-B932-13D4A3B4DF1C".equals(processCode)){
+            }else if (TRAVEL_REIMBURSEMENT.equals(processCode)){
                 chuiZiService.saveOtherMeet(processData);
+            } else if (RECHARGE_FUEL_CARD.equals(processCode)) {
+                chuiZiService.rechargeFuelCard(processData);
             }
         }
         log.info("审批实例回调执行业务逻辑, {}", approveResult);

+ 2 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/service/ChuiZiService.java

@@ -14,4 +14,6 @@ public interface ChuiZiService {
     McR saveOtherMeet(Map processData);
 
     McR saveAccountsPayable(Map processData);
+
+    McR rechargeFuelCard(Map processData);
 }

+ 50 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/service/impl/ChuiZiServiceImpl.java

@@ -12,6 +12,7 @@ import com.kingdee.bos.webapi.sdk.K3CloudApi;
 import com.malk.chuizi.config.KDWebApiConf;
 import com.malk.chuizi.entity.*;
 import com.malk.chuizi.service.ChuiZiService;
+import com.malk.chuizi.utils.HttpUtils;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McR;
@@ -20,11 +21,13 @@ import com.malk.service.aliwork.YDClient;
 import com.malk.service.dingtalk.DDClient;
 import com.malk.service.dingtalk.DDClient_Personnel;
 import com.malk.service.dingtalk.DDClient_Workflow;
+import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.*;
 
@@ -388,6 +391,53 @@ public class ChuiZiServiceImpl implements ChuiZiService {
         return McR.success();
     }
 
+    @Override
+    public McR rechargeFuelCard(Map processData) {
+        //身份认证参数
+        Map headers = new HashMap();
+        headers.put("EngineCode","o3mum9h68yl3v8g1o3ft2aek7");
+        headers.put("EngineSecret","yeFjbv44SHwG9GThAfNCmJYqM+FfKYNTHp6Lw31T7KwhB3qKu5dv2w==");
+        headers.put("Content-Type","application/json");
+
+        List<Map> formComponentValues = (List<Map>) processData.get("formComponentValues");
+
+        Map<String, Object> mainData = new HashMap<>();
+        formComponentValues.forEach(e->{
+            String name = e.get("name").toString();
+            mainData.put(name, e.get("value"));
+        });
+
+
+        Map<String, String> paramMap = new HashMap();
+        paramMap.put("ActionName",   "LoadBizObjects");
+        paramMap.put("SchemaCode", "D285303f3713e1dfc2d4bb5be5c41ce4b1d545b");
+        paramMap.put("Filter","{\"FromRowNum\":0,\"RequireCount\": false,\"ReturnItems\":[],\"SortByCollection\":[],\"ToRowNum\":500,\"Matcher\":{\"Type\":\"And\",\"Matchers\":[{\"Type\":\"And\",\"Matchers\":[{\"Type\":\"Item\",\"Name\":\"F0000002\",\"Operator\":2,\"Value\":\""+mainData.get("车牌").toString()+"\"}]}]}}");
+
+        final String[] BizObject = {"",""};
+        String result = HttpUtils.httpPost("https://www.h3yun.com/OpenApi/Invoke",   paramMap, headers);
+        log.info(result);
+        JSONObject jsonObject = (JSONObject) JSONObject.parse(result);
+        jsonObject = (JSONObject) jsonObject.get("ReturnData");
+        JSONArray jsonArray = JSONArray.parseArray(jsonObject.get("BizObjectArray").toString());
+        jsonArray.forEach(e->{
+            JSONObject value = (JSONObject) JSONObject.parse(e.toString());
+            BizObject[0] = value.getString("ObjectId");
+            BizObject[1] = value.get("F0000006").toString();
+        });
+        System.out.println(BizObject[0]+" "+BizObject[1]);
+        System.out.println(jsonArray);
+        double amount = BizObject[1] == null || BizObject[1].isEmpty() ? 0.0 : Double.parseDouble(BizObject[1]);
+        paramMap.put("ActionName","UpdateBizObject");
+        paramMap.put("SchemaCode","D285303f3713e1dfc2d4bb5be5c41ce4b1d545b");
+        paramMap.put("BizObjectId",BizObject[0]);
+        paramMap.remove("Filter");
+        paramMap.put("BizObject",JSON.toJSONString(UtilMap.map("F0000006",BigDecimal.valueOf(amount).add(BigDecimal.valueOf(100)))));
+
+        result = HttpUtils.httpPost("https://www.h3yun.com/OpenApi/Invoke",   paramMap, headers);
+        log.info(result);
+        return McR.success();
+    }
+
     public String getNumberByUserId(String workingEmployeeIds) {
 //        log.info("根据钉钉人员id获取员工工号:{}",workingEmployeeIds);
         List<String> filterList = new ArrayList<>();

+ 285 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/utils/HttpUtils.java

@@ -0,0 +1,285 @@
+package com.malk.chuizi.utils;
+
+
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.config.SocketConfig;
+import org.apache.http.conn.DnsResolver;
+import org.apache.http.conn.HttpConnectionFactory;
+import org.apache.http.conn.ManagedHttpClientConnection;
+import org.apache.http.conn.routing.HttpRoute;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.DefaultConnectionReuseStrategy;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
+import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.ManagedHttpClientConnectionFactory;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.impl.conn.SystemDefaultDnsResolver;
+import org.apache.http.impl.io.DefaultHttpRequestWriterFactory;
+import org.apache.http.impl.io.DefaultHttpResponseParserFactory;
+import org.apache.http.util.EntityUtils;
+
+import java.nio.charset.Charset;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * http请求封装
+ *
+ * @author lh
+ * @date 2022-09-23
+ */
+@Slf4j
+public class HttpUtils {
+
+    /**
+     * 默认请求类型
+     */
+    private static final String DEFAULT_CONTENT_TYPE = "application/json";
+
+    /**
+     * 默认编码
+     */
+    private static final String DEFAULT_ENCODING = "utf-8";
+
+    /**
+     * GBK编码
+     */
+    private static final String GBK_ENCODING = "GBK";
+
+    /**
+     * 默认超时时间
+     */
+    private static final int DEFAULT_TIME_OUT = 60;
+
+    private static PoolingHttpClientConnectionManager manager = null;
+
+    private static CloseableHttpClient httpClient = null;
+
+    /**
+     * 获取httpclient对象
+     *
+     * @return
+     */
+    public static synchronized CloseableHttpClient getHttpClient(int timeOut) {
+        if (null == httpClient) {
+            log.info("============================================创建");
+            // 注册访问协议相关的socket工厂
+            Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+                    .register("http", PlainConnectionSocketFactory.INSTANCE)
+                    .register("https", SSLConnectionSocketFactory.getSystemSocketFactory())
+                    .build();
+
+            // httpConnection工厂
+            HttpConnectionFactory<HttpRoute, ManagedHttpClientConnection> connectionFactory =
+                    new ManagedHttpClientConnectionFactory(DefaultHttpRequestWriterFactory.INSTANCE
+                            , DefaultHttpResponseParserFactory.INSTANCE);
+
+            // DNS解析器
+            DnsResolver dnsResolver = SystemDefaultDnsResolver.INSTANCE;
+            // 创建池化连接管理器
+            manager = new PoolingHttpClientConnectionManager(socketFactoryRegistry, connectionFactory, dnsResolver);
+            // socket配置
+            SocketConfig socketConfig = SocketConfig.custom().setTcpNoDelay(true).build();
+            manager.setDefaultSocketConfig(socketConfig);
+            // 连接池最大连接数
+            manager.setMaxTotal(300);
+            manager.setDefaultMaxPerRoute(200);
+            // 5s检测一次连接池连接
+            manager.setValidateAfterInactivity(5 * 1000);
+            // 默认请求配置
+            RequestConfig requestConfig = RequestConfig.custom()
+                    // 连接超时时间
+                    .setConnectTimeout(timeOut * 1000)
+                    // 等待数据超时时间
+                    .setSocketTimeout(timeOut * 1000)
+                    // 从连接池获取连接超时时间
+                    .setConnectionRequestTimeout(timeOut * 1000)
+                    .build();
+            // 创建httpclient
+            httpClient = HttpClients.custom()
+                    .setConnectionManager(manager)
+                    // 连接池不共享
+                    .setConnectionManagerShared(false)
+                    // 定期回收空闲连接
+                    .evictIdleConnections(timeOut, TimeUnit.SECONDS)
+                    // 定期回收过期连接
+                    .evictExpiredConnections()
+                    .setConnectionTimeToLive(timeOut, TimeUnit.SECONDS)
+                    // 设置默认请求
+                    .setDefaultRequestConfig(requestConfig)
+                    // 连接重用策略
+                    .setConnectionReuseStrategy(DefaultConnectionReuseStrategy.INSTANCE)
+                    // 长连接配置
+                    .setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE)
+                    // 设置重试次数
+                    .setRetryHandler(new DefaultHttpRequestRetryHandler(0, false))
+                    .build();
+
+            // jvm停止或重启时,关闭连接池释放连接
+            Runtime.getRuntime().addShutdownHook(new Thread() {
+
+                @Override
+                public void run() {
+                    try {
+                        if (null != httpClient) {
+                            httpClient.close();
+                        }
+                    } catch (Exception e) {
+                        log.error("httpclient关闭异常:{}", e);
+                    }
+                }
+            });
+        }
+        return httpClient;
+    }
+
+    /**
+     * http请求
+     *
+     * @param url
+     * @param params
+     * @return
+     */
+    public static String httpPost(String url, Map params,Map<String,String> headers) {
+        log.info("POST请求url:{}", url);
+        log.info("POST请求参数:{}",JSON.toJSONString(params));
+        CloseableHttpClient httpClient = getHttpClient(DEFAULT_TIME_OUT);
+        HttpPost httpPost = new HttpPost(url);
+
+        if (null != headers){
+            for (String key:headers.keySet()){
+                httpPost.setHeader(key,headers.get(key).toString());
+            }
+        }
+
+        String json = JSON.toJSONString(params);
+        StringEntity stringEntity = new StringEntity(json, DEFAULT_ENCODING);
+        stringEntity.setContentEncoding(DEFAULT_ENCODING);
+        httpPost.setEntity(stringEntity);
+        String result = null;
+        try (CloseableHttpResponse response = httpClient.execute(httpPost);) {
+            HttpEntity entity = response.getEntity();
+            if (null != entity) {
+                result = EntityUtils.toString(entity, ContentType.getOrDefault(entity).getCharset());
+                EntityUtils.consume(entity);
+            }
+        } catch (Exception e) {
+            log.error("接口请求异常:{}", e);
+        }
+        return result;
+    }
+
+    /**
+     * http请求(POST请求,GBK编码)
+     *
+     * @param url
+     * @param params
+     * @return
+     */
+    public static String httpPostGBK(String url, Map params,Map<String,String> headers) {
+        log.info("POST请求url:{}", url);
+        log.info("POST请求参数:{}",JSON.toJSONString(params));
+        CloseableHttpClient httpClient = getHttpClient(DEFAULT_TIME_OUT);
+        HttpPost httpPost = new HttpPost(url);
+
+        if (null != headers){
+            for (String key:headers.keySet()){
+                httpPost.setHeader(key,headers.get(key).toString());
+            }
+        }
+
+        String json = JSON.toJSONString(params);
+        StringEntity stringEntity = new StringEntity(json, DEFAULT_ENCODING);
+        stringEntity.setContentEncoding(DEFAULT_ENCODING);
+        httpPost.setEntity(stringEntity);
+        String result = null;
+        try (CloseableHttpResponse response = httpClient.execute(httpPost);) {
+            HttpEntity entity = response.getEntity();
+            if (null != entity) {
+//                result = EntityUtils.toString(entity, ContentType.getOrDefault(entity).getCharset());
+                result = EntityUtils.toString(entity, Charset.defaultCharset());
+                EntityUtils.consume(entity);
+            }
+        } catch (Exception e) {
+            log.error("接口请求异常:{}", e);
+        }
+        return result;
+    }
+
+    /**
+     * http请求(POST请求,GBK编码)
+     *
+     * @param url
+     * @param params
+     * @param headers
+     * @param timeOut 超时时间
+     * @return
+     */
+    public static String httpPostGBK(String url, Map params, Map<String, String> headers, int timeOut) {
+        log.info("POST请求url:{}", url);
+        log.info("POST请求参数:{}", JSON.toJSONString(params));
+        CloseableHttpClient httpClient = getHttpClient(timeOut);
+        HttpPost httpPost = new HttpPost(url);
+
+        if (null != headers) {
+            for (String key : headers.keySet()) {
+                httpPost.setHeader(key, headers.get(key).toString());
+            }
+        }
+
+        String json = JSON.toJSONString(params);
+        StringEntity stringEntity = new StringEntity(json, DEFAULT_ENCODING);
+        stringEntity.setContentEncoding(DEFAULT_ENCODING);
+        httpPost.setEntity(stringEntity);
+        String result = null;
+        try (CloseableHttpResponse response = httpClient.execute(httpPost);) {
+            HttpEntity entity = response.getEntity();
+            if (null != entity) {
+//                result = EntityUtils.toString(entity, ContentType.getOrDefault(entity).getCharset());
+                result = EntityUtils.toString(entity, Charset.defaultCharset());
+                EntityUtils.consume(entity);
+            }
+        } catch (Exception e) {
+            log.error("接口请求异常:{}", e);
+        }
+        return result;
+    }
+
+    /**
+     * http请求
+     *
+     * @param url
+     * @return
+     */
+    public static String httpGet(String url) {
+        log.info("请求url:{}", url);
+        CloseableHttpClient httpClient = getHttpClient(DEFAULT_TIME_OUT);
+        HttpGet httpGet = new HttpGet(url);
+        String result = null;
+        try (CloseableHttpResponse response = httpClient.execute(httpGet);) {
+            HttpEntity entity = response.getEntity();
+            if (null != entity) {
+                result = EntityUtils.toString(entity, ContentType.getOrDefault(entity).getCharset());
+                EntityUtils.consume(entity);
+            }
+        } catch (Exception e) {
+            log.error("接口请求异常:{}", e);
+        }
+        return result;
+    }
+}
+

+ 4 - 4
mjava-chuizi/src/main/resources/application-prod.yml

@@ -29,13 +29,13 @@ dingtalk:
 #正式环境 锤子塑业2025数据中心
 kingdee:
   # 第三方系统登录授权的账套ID
-  X-KDApi-AcctID: 670624589dd479
+  X-KDApi-AcctID: 685e63e9aca3fc
   # 第三方系统登录授权的用户
-  X-KDApi-UserName: administrator
+  X-KDApi-UserName: Administrator
   # 第三方系统登录授权的应用ID
-  X-KDApi-AppID: 309474_23ev0dtszrH/7/xH0c5OQY9MTJ0aWOmu
+  X-KDApi-AppID: 317159_X6cCSwGoUnC9Xa/J1/SDRY/r0s6c6plG
   # 第三方系统登录授权的应用密钥
-  X-KDApi-AppSec: c9545d83ed7b44728dc0288ca3b3c07d
+  X-KDApi-AppSec: 97078d7261424da48fe4789b61c70d07
   # 服务Url地址(公有云统一走网关sdk底层已处理,无需传X-KDApi-ServerUrl,下面这行需要注释)
   X-KDApi-ServerUrl: http://124.71.139.0:8283/K3cloud
   # 账套语系,默认2052

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

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