Browse Source

Merge remote-tracking branch 'origin/master'

zhangcl 1 tháng trước cách đây
mục cha
commit
140eaa111f

+ 0 - 38
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/constant/OaFlow.java

@@ -1,38 +0,0 @@
-package cn.iocoder.yudao.module.pms.constant;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.stereotype.Component;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.RestTemplate;
-
-import javax.annotation.Resource;
-
-@Component
-public class OaFlow {
-    @Value("${oa.appid}")
-    private String appid;
-    @Value("${oa.cpk}")
-    private String cpk;
-    @Value("${oa.register}")
-    private String registerUrl;
-    @Value("${oa.gettoken}")
-    private String tokenUrl;
-
-
-    @Resource
-    private RestTemplate restTemplate;;
-
-
-    public void regist() throws Exception{
-        HttpHeaders headers = new HttpHeaders();
-        headers.add("appid", appid);
-        headers.add("cpk", cpk);
-
-        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
-        String result = restTemplate.postForObject(registerUrl, requestEntity, String.class);
-        System.out.println("result:" + result);
-
-    }
-}

+ 2 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/IotDeviceController.java

@@ -10,7 +10,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.pms.ThingsModelDTO;
-import cn.iocoder.yudao.module.pms.constant.OaFlow;
+import cn.iocoder.yudao.module.pms.oa.OaFlow;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceallotlog.vo.IotDeviceAllotSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonRelationSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDevicePageReqVO;
@@ -557,7 +557,7 @@ public class IotDeviceController {
     @GetMapping("/oa/register")
     public void oaRegister() {
         try {
-            oaFlow.regist();
+            oaFlow.getToken();
         } catch (Exception e) {
             throw new RuntimeException(e);
         }

+ 2 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/vo/IotDeviceRespVO.java

@@ -226,4 +226,6 @@ public class IotDeviceRespVO {
     private boolean runningWorkOrder = false;
 
     private String vehicleName;
+    private String assetOwnership;
+    private String useProject;
 }

+ 44 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/oa/E9ApiTokenUtil.java

@@ -0,0 +1,44 @@
+package cn.iocoder.yudao.module.pms.oa;
+
+import javax.crypto.Cipher;
+import java.security.KeyFactory;
+import java.security.PublicKey;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+
+public class E9ApiTokenUtil {
+    public static String encryptString(String pubkey, String plaintext) {
+        PublicKey publicKey = null;
+        try {
+            publicKey = getFromBase64String(pubkey);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        if (publicKey == null || plaintext == null) {
+            return null;
+        }
+        byte[] data = plaintext.getBytes();
+        try {
+            byte[] en_data = encrypt(publicKey, data);
+            return Base64.getEncoder().encodeToString(en_data);
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        return null;
+    }
+    public static PublicKey getFromBase64String(String publicKeyString) throws
+            Exception {
+        byte[] keyBytes = publicKeyString.getBytes();
+        byte[] ks = Base64.getDecoder().decode(keyBytes);
+        X509EncodedKeySpec spec = new X509EncodedKeySpec(ks);
+        KeyFactory kf = KeyFactory.getInstance("RSA");
+        return kf.generatePublic(spec);
+    }
+    public static byte[] encrypt(PublicKey publicKey, byte[] data) throws Exception {
+        Cipher ci = Cipher.getInstance("RSA/ECB/PKCS1Padding");
+        ci.init(Cipher.ENCRYPT_MODE, publicKey);
+        return ci.doFinal(data);
+    }
+}

+ 70 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/oa/OaFlow.java

@@ -0,0 +1,70 @@
+package cn.iocoder.yudao.module.pms.oa;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+@Component
+public class OaFlow {
+    @Value("${oa.appid}")
+    private String appid;
+    @Value("${oa.cpk}")
+    private String cpk;
+    @Value("${oa.register}")
+    private String registerUrl;
+    @Value("${oa.gettoken}")
+    private String tokenUrl;
+    @Value("${oa.userUrl}")
+    private String userUrl;
+    private static String spk = "";
+    private static String secret = "";
+
+
+    public void regist() throws Exception{
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("appid", appid);
+        headers.add("cpk", cpk);
+
+        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
+        RestTemplate restTemplate = SslSkippingRestTemplate.createRestTemplate();
+
+        String result = restTemplate.postForObject(registerUrl, requestEntity, String.class);
+        JSONObject jsonObject = JSON.parseObject(result);
+        spk = String.valueOf(jsonObject.get("spk"));
+        secret = String.valueOf(jsonObject.get("secret"));
+        System.out.println("result:" + result);
+
+    }
+
+    public void getToken() throws Exception{
+        if (StringUtils.isBlank(spk) || StringUtils.isBlank(secret)) {
+            regist();
+        }
+        String secretEn = E9ApiTokenUtil.encryptString(spk, secret);
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("appid", appid);
+        headers.add("secret", secretEn);
+
+        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
+        RestTemplate restTemplate = SslSkippingRestTemplate.createRestTemplate();
+
+        String result = restTemplate.postForObject(tokenUrl, requestEntity, String.class);
+        JSONObject jsonObject = JSON.parseObject(result);
+        String token = String.valueOf(jsonObject.get("token"));
+        System.out.println("result:" + result);
+
+        HttpHeaders headersOut = new HttpHeaders();
+        headersOut.add("Authorization", token);
+
+        HttpEntity<MultiValueMap<String, String>> requestEntityOut = new HttpEntity<>(headersOut);
+        String user = restTemplate.postForObject(userUrl, requestEntityOut, String.class);
+        JSONObject userInfo = JSON.parseObject(result);
+        System.out.println("user:" + user);
+    }
+}

+ 18 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/oa/OaVo.java

@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.pms.oa;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OaVo {
+    private String workflowId;
+    private String requestName;
+    private List<MainData> mainData;
+
+    @Data
+    public static class MainData{
+        private String fieldName;
+        private String fieldValue;
+    }
+}

+ 43 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/oa/SslSkippingRestTemplate.java

@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.module.pms.oa;
+
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+import javax.net.ssl.*;
+import java.security.cert.X509Certificate;
+
+public class SslSkippingRestTemplate {
+
+    public static RestTemplate createRestTemplate() {
+        try {
+            // 创建不验证证书的SSL上下文
+            TrustManager[] trustAllCerts = new TrustManager[]{
+                    new X509TrustManager() {
+                        public X509Certificate[] getAcceptedIssuers() {
+                            return null;
+                        }
+                        public void checkClientTrusted(X509Certificate[] certs, String authType) {
+                        }
+                        public void checkServerTrusted(X509Certificate[] certs, String authType) {
+                        }
+                    }
+            };
+
+            SSLContext sslContext = SSLContext.getInstance("SSL");
+            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+
+            // 获取SSL连接工厂
+            HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
+
+            // 创建不验证主机名的主机名验证器
+            HostnameVerifier allHostsValid = (hostname, session) -> true;
+            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
+
+            // 创建RestTemplate并设置自定义请求工厂
+            SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
+            return new RestTemplate(requestFactory);
+        } catch (Exception e) {
+            throw new RuntimeException("创建RestTemplate失败", e);
+        }
+    }
+}

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceServiceImpl.java

@@ -128,6 +128,7 @@ public class IotDeviceServiceImpl implements IotDeviceService {
         List<IotDeviceDO> iotDeviceDOS = iotDeviceMapper.selectList();
         for (DeviceImportExcelVO deviceImportExcelVO : list) {
             iotDeviceDOS.stream().filter(e -> e.getDeviceCode().equals(deviceImportExcelVO.getDeviceCode())).forEach(f ->{
+                f.setEnableDate(deviceImportExcelVO.getEnableDate());
                 f.setAssetOwnership(deviceImportExcelVO.getAssetOwnership());
                 f.setUseProject(deviceImportExcelVO.getUseProject());
                 iotDeviceMapper.updateById(f);

+ 3 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotTreeServiceImpl.java

@@ -199,15 +199,16 @@ public class IotTreeServiceImpl implements IotTreeService {
                 IotTreeDO iotTreeDO = new IotTreeDO();
                 iotTreeDO.setOriginId(deviceDO.getId());
                 iotTreeDO.setType("device");
-                iotTreeDO.setName(deviceDO.getDeviceName());
+                iotTreeDO.setName(deviceDO.getDeviceCode()+deviceDO.getDeviceName());
                 iotTreeDO.setDeleted(false);
                 iotTreeDO.setDeptId(deviceDO.getDeptId());
                 iotTreeDO.setParentId(iotTreeDOS.get(0).getId());
                 trees.add(iotTreeDO);
             IotInfoClassifyDO classifyDO = new IotInfoClassifyDO();
-            classifyDO.setName(deviceDO.getDeviceName()+"的设备资料");
+            classifyDO.setName(deviceDO.getDeviceCode()+deviceDO.getDeviceName()+"的设备资料");
             classifyDO.setDeviceId(deviceDO.getId());
             classifyDO.setParentId(0L);
+            classifyDO.setStatus(0);
             classifyDO.setDeptId(deviceDO.getDeptId());
             classifies.add(classifyDO);
 //            }

+ 13 - 3
yudao-server/src/main/resources/application-dev.yaml

@@ -164,9 +164,9 @@ logging:
 
 --- #################### 钉微应用相关配置 ####################
 dingtalk:
-  AGENT_ID: 3687646006  # DeepOil 微应用 agent_id
-  APP_KEY: dingmr9ez0ecgbmscfeb # 钉钉微应用 appkey
-  APP_SECRET: VhG_zMdTvIBwA_0Ef8FJ0foH3VYYo5T-kw0ukX_PBA8Ah1xl7AjDw5RVYCU0DTpe # 钉钉微应用 appkey
+  AGENT_ID: 3687646006xxxxxxxxxxx  # DeepOil 微应用 agent_id
+  APP_KEY: dingmr9ez0ecgbmscfebxxxxxxx # 钉钉微应用 appkey
+  APP_SECRET: VhG_zMdTvIBwA_0Ef8FJ0foH3VYYo5T-kw0ukX_PBA8Ah1xl7AjDw5RVYCU0DTpexxxxxxx # 钉钉微应用 appkey
   GET_ACCESS_TOKEN_URL: https://oapi.dingtalk.com/gettoken  # 获取access_token
   URL_GET_USERINFO_BYCODE: https://oapi.dingtalk.com/sns/getuserinfo_bycode # 通过二维码扫码获取UNIONID
   URL_GET_USERINFO_BYUNIONID: https://oapi.dingtalk.com/topapi/user/getbyunionid # 通过UNIONID获取用户信息
@@ -274,3 +274,13 @@ pf4j:
   pluginsDir: ${user.home}/plugins # 插件目录
 system:
   url: https://iot.deepoil.cc/
+
+oa:
+  register: https://172.17.25.231/api/ec/dev/auth/regist
+  gettoken: https://172.17.25.231/api/ec/dev/auth/applytoken
+  outMaintain: https://172.17.25.231/api/workflow/paService/doCreateRequest
+  userUrl: https://172.17.25.231/api/hrm/resful/getHrmUserInfoWithPage
+  #  appid: EEAA5436-7577-4BE0-8C6C-89E9D88805EE
+#  appid: EEAA5436-7577-4BE0-8C6C-89E9D88805E1
+  appid: tw
+  cpk: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApmtQUp9M82/z22P7am5owQCknjQnjF4U4ckEh7XVtJVQZrZx7d1lCPfoYrwOKEM4DEV7khW6++4Zv5caJ/9nqPn4QFwCqJWVmCEm9vC1BA6i2yfa4bmTxdR1/oeU/Af9pDFlvv5GC9XyilO7CIKu19Ce50v7aN6h1Tjix+h5Ba8e12XAEpEZk9pFroEYfR4lrecvi1pQOwRw8YzDRC4lhGNOo5Cen1rGjk7dwzzgs4uEv9ZyPZoVJnty5P9JE/ctboEf3x4jbqIliuCRgOyXYsLlp+N282CKcWZ35URkGw2orKyG1U6L1hNoj7kkpvAo8Zagf97SdZ0nYdRBIHv6PQIDAQAB