From 213d2fa16fec45efbc570b9b6b396eeea061712e Mon Sep 17 00:00:00 2001 From: liujun Date: Wed, 26 Jun 2024 14:23:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=8C=A0=E5=AD=A6=E9=99=A2=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E5=AF=B9=E6=8E=A5=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zcloud/flow/util/GJRSAUtils.java | 126 ++++++++++++++++ .../java/com/zcloud/flow/util/GJSHAUtils.java | 54 +++++++ .../com/zcloud/flow/util/SendMessageUtil.java | 139 ++++++++++++++++++ .../com/zcloud/flow/util/dto/UserDTO.java | 38 +++++ .../zcloud/flow/xgf/GuFen/GuFenSupervise.java | 26 ++++ .../flow/xgf/GuFen/GuFenWeiTuoSupervise.java | 28 +++- .../flow/xgf/JiTuan/JiTuanSupervise.java | 27 +++- .../xgf/JiTuan/JiTuanWeiTuoSupervise.java | 26 ++++ .../zcloud/flow/xgf/YiBan/YiBanSupervise.java | 34 ++++- .../service/xgf/impl/XgfUserServiceImpl.java | 7 + src/main/resources/application-dev.properties | 5 + .../resources/application-local.properties | 5 + .../resources/application-master.properties | 6 + 13 files changed, 515 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/zcloud/flow/util/GJRSAUtils.java create mode 100644 src/main/java/com/zcloud/flow/util/GJSHAUtils.java create mode 100644 src/main/java/com/zcloud/flow/util/SendMessageUtil.java create mode 100644 src/main/java/com/zcloud/flow/util/dto/UserDTO.java diff --git a/src/main/java/com/zcloud/flow/util/GJRSAUtils.java b/src/main/java/com/zcloud/flow/util/GJRSAUtils.java new file mode 100644 index 00000000..9324c3da --- /dev/null +++ b/src/main/java/com/zcloud/flow/util/GJRSAUtils.java @@ -0,0 +1,126 @@ +package com.zcloud.flow.util; + +import com.zcloud.util.Base64Utils; + +import javax.crypto.Cipher; +import java.io.ByteArrayOutputStream; +import java.security.Key; +import java.security.KeyFactory; +import java.security.spec.KeySpec; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; + +public class GJRSAUtils { + private static final String CRYPTO_METHOD = "RSA"; + private static final String CYPHER = "RSA/ECB/PKCS1Padding"; + private static final String CHARSET = "UTF-8"; + + private GJRSAUtils() { + } + + public static String encrypt(String clearText, String pubKey) { + String encryptedBase64 = ""; + ByteArrayOutputStream out = null; + + try { + byte[] bs = clearText.getBytes(CHARSET); + out = new ByteArrayOutputStream(); + int LEN = 128; + byte[] tmp = new byte[LEN]; + int length = 0; + + for (int i = 0; i < bs.length; ++i) { + if (length == LEN) { + byte[] bb = encrypt(tmp, 0, length, pubKey); + out.write(bb); + tmp = new byte[LEN]; + length = 0; + } + + tmp[length] = bs[i]; + ++length; + } + + if (length > 0) { + byte[] bb = encrypt(tmp, 0, length, pubKey); + out.write(bb); + } + + encryptedBase64 = new String(Base64Utils.encode(out.toByteArray())); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (out != null) { + try { + out.close(); + } catch (Exception ignore) { + } + } + + } + + return encryptedBase64.replaceAll("(\\r|\\n)", ""); + } + + public static String decrypt(String encryptedBase64, String privateKey) { + String decryptedString = ""; + ByteArrayOutputStream out = null; + + try { + byte[] encryptedBytes = Base64Utils.decode(encryptedBase64); + out = new ByteArrayOutputStream(); + int LEN = 256; + byte[] tmp = new byte[LEN]; + int length = 0; + + for (int i = 0; i < encryptedBytes.length; ++i) { + if (length == LEN) { + byte[] bb = decrypt(tmp, 0, length, privateKey); + out.write(bb); + tmp = new byte[LEN]; + length = 0; + } + + tmp[length] = encryptedBytes[i]; + ++length; + } + + if (length > 0) { + byte[] bb = decrypt(tmp, 0, length, privateKey); + out.write(bb); + } + + decryptedString = new String(out.toByteArray(), CHARSET); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (out != null) { + try { + out.close(); + } catch (Exception ignore) { + } + } + + } + + return decryptedString; + } + + private static byte[] encrypt(byte[] bs, int index, int length, String pub_key) throws Exception { + KeyFactory keyFac = KeyFactory.getInstance(CRYPTO_METHOD); + KeySpec keySpec = new X509EncodedKeySpec(Base64Utils.decode(pub_key.trim())); + Key key = keyFac.generatePublic(keySpec); + Cipher cipher = Cipher.getInstance(CYPHER); + cipher.init(1, key); + return cipher.doFinal(bs, index, length); + } + + private static byte[] decrypt(byte[] encryptedBytes, int index, int length, String private_key) throws Exception { + KeyFactory keyFac = KeyFactory.getInstance(CRYPTO_METHOD); + KeySpec keySpec = new PKCS8EncodedKeySpec(Base64Utils.decode(private_key.trim())); + Key key = keyFac.generatePrivate(keySpec); + Cipher cipher = Cipher.getInstance(CYPHER); + cipher.init(2, key); + return cipher.doFinal(encryptedBytes, index, length); + } +} diff --git a/src/main/java/com/zcloud/flow/util/GJSHAUtils.java b/src/main/java/com/zcloud/flow/util/GJSHAUtils.java new file mode 100644 index 00000000..e5fa226d --- /dev/null +++ b/src/main/java/com/zcloud/flow/util/GJSHAUtils.java @@ -0,0 +1,54 @@ +package com.zcloud.flow.util; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; + +public class GJSHAUtils { + private static final String[] HEX_DIGITS = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; + + private GJSHAUtils() { + } + + public static String sha256(String text) { + try { + MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); + byte[] bytes = text.getBytes(StandardCharsets.UTF_8); + messageDigest.update(bytes); + return byteArrayToHexString(messageDigest.digest()); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + public static String sha256(byte[] bytes) { + try { + MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.update(bytes); + return byteArrayToHexString(messageDigest.digest()); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + private static String byteArrayToHexString(byte[] bytes) { + StringBuilder stringBuilder = new StringBuilder(); + int bytesLen = bytes.length; + for (int i = 0; i < bytesLen; ++i) { + byte tem = bytes[i]; + stringBuilder.append(byteToHexString(tem)); + } + return stringBuilder.toString(); + } + + private static String byteToHexString(byte b) { + int n = b; + if (b < 0) { + n = 256 + b; + } + int d1 = n / 16; + int d2 = n % 16; + return HEX_DIGITS[d1] + HEX_DIGITS[d2]; + } +} diff --git a/src/main/java/com/zcloud/flow/util/SendMessageUtil.java b/src/main/java/com/zcloud/flow/util/SendMessageUtil.java new file mode 100644 index 00000000..9da5ec57 --- /dev/null +++ b/src/main/java/com/zcloud/flow/util/SendMessageUtil.java @@ -0,0 +1,139 @@ +package com.zcloud.flow.util; + +import cn.hutool.core.util.RandomUtil; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.zcloud.flow.util.dto.UserDTO; +import lombok.extern.apachecommons.CommonsLog; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * 工匠学院 + */ + +@Component +public class SendMessageUtil { + + /** + * 工匠学苑 服务地址(测试环境) + **/ + @Value("${gongJiangXueYuanTestUrl}") + public static String SERVER_URL_TEST; + /** + * 工匠学苑 服务地址(生产环境) + **/ + @Value("${gongJiangXueYuanProdUrl}") + public static String SERVER_URL_PROD; + + /** + * 工匠学苑 RSA公钥 + **/ + @Value("${gongJiangXueYuanSendPublicKey}") + public static String RSA_PUBLIC_KEY; + /** + * 系统对接密钥 + **/ + @Value("${gongJiangXueYuanSendPrivateKey}") + public static final String SECRET_KEY = "58e5e358b220335e7b1c6cc3576ceecc28b4a95d96cbbe0"; + + /** + * 签名 header + **/ + public static final String SIGN_HEADER = "gjxy-sign"; + /** + * 随机字符串 header + **/ + public static final String NONCE_HEADER = "gjxy-nonce"; + /** + * 时间戳 header + **/ + public static final String TIMESTAMP_HEADER = "gjxy-timestamp"; + + public void sendMessage(List users) throws Exception { + for (UserDTO user : users) { + Map paramDataMap = new HashMap<>(); + paramDataMap.put("userList", user); + // 发起请求 + String body = createPostFormHttpRequest("/API-BACKEND/openapi/user/v1/syncNotify", paramDataMap); + } + } + + /** + * post请求 + * + * @param uri 接口地址 + * @param paramDataMap 请求参数(明文) + * @return String + */ + public static String createPostFormHttpRequest(String uri, Map paramDataMap) throws Exception { + // 参数RSA加密 + String paramDataJsonStr = JSON.toJSONString(paramDataMap); + String paramDataRsaEncrypt = GJRSAUtils.encrypt(paramDataJsonStr, RSA_PUBLIC_KEY); + + // 请求参数 + Map paramMap = new HashMap<>(); + paramMap.put("param", paramDataRsaEncrypt); + + // 时间戳 + String timestamp = String.valueOf(System.currentTimeMillis()); + // 随机字符串 + String nonce = RandomUtil.randomString(16); + // 签名 + String sign = signBySHA256(SECRET_KEY, nonce, timestamp, paramMap); + Map lmap = new HashMap<>(); + lmap.put("param", paramDataMap); + HttpResponse response = HttpUtil.createPost(SERVER_URL_TEST + uri) + .header(NONCE_HEADER, nonce) + .header(SIGN_HEADER, sign) + .header(TIMESTAMP_HEADER, timestamp) + .form("param", paramDataRsaEncrypt) + .execute(); + return response.body(); + } + + /** + * 构建签名 + * + * @param secretKey 对接密钥 + * @param nonce 随机字符串 + * @param timestamp 时间戳 + * @param paramMap 请求参数(明文) + * @return String + */ + private static String signBySHA256(String secretKey, String nonce, String timestamp, Map paramMap) { + try { + // 参数名排序 + List paramNames = new ArrayList<>(paramMap.keySet()); + Collections.sort(paramNames); + StringBuilder result = new StringBuilder(); + // 拼接参数字符串 + for (String paramName : paramNames) { + if (result.length() > 1) { + result.append("|"); + } + if (paramName != null && paramName.length() > 0) { + String value; + if (paramMap.get(paramName) == null) { + value = ""; + } else { + value = paramMap.get(paramName).toString(); + if (value.length() > 4096) { + value = value.substring(0, 4096); + } + } + result.append(paramName).append("=").append(value); + } + } + result.append(":").append(nonce).append(":").append(secretKey).append("&").append(timestamp); + return GJSHAUtils.sha256(result.toString()); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } +} diff --git a/src/main/java/com/zcloud/flow/util/dto/UserDTO.java b/src/main/java/com/zcloud/flow/util/dto/UserDTO.java new file mode 100644 index 00000000..e61ddc6c --- /dev/null +++ b/src/main/java/com/zcloud/flow/util/dto/UserDTO.java @@ -0,0 +1,38 @@ +package com.zcloud.flow.util.dto; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class UserDTO { + /** + * 用户名 + */ + private String userName; + /** + * 姓名 + */ + private String realName; + /** + * 性别 + */ + private String userSex; + /** + * 身份证号码 + */ + private String idCard; + /** + * 组织树(所属企业/部门) + * 示例:河北XXX总公司/河北XXX分公司/XXX部门 + */ + private String orgTree; + /** + * 免冠照片url地址 + */ + private String avatarUrl; + /** + * 手机号码 + */ + private String phoneNumber; +} diff --git a/src/main/java/com/zcloud/flow/xgf/GuFen/GuFenSupervise.java b/src/main/java/com/zcloud/flow/xgf/GuFen/GuFenSupervise.java index 43ed5672..2c99c7d3 100644 --- a/src/main/java/com/zcloud/flow/xgf/GuFen/GuFenSupervise.java +++ b/src/main/java/com/zcloud/flow/xgf/GuFen/GuFenSupervise.java @@ -3,7 +3,10 @@ package com.zcloud.flow.xgf.GuFen; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.NodeComponent; import com.zcloud.entity.PageData; +import com.zcloud.flow.util.SendMessageUtil; +import com.zcloud.flow.util.dto.UserDTO; import com.zcloud.mapper.datasource.xgf.XgfFlowsMapper; +import com.zcloud.mapper.datasource.xgf.XgfUserDetailsMapper; import com.zcloud.mapper.datasource.xgf.XgfUserMapper; import com.zcloud.service.xgf.XgfUserService; import com.zcloud.util.DateUtil; @@ -11,6 +14,8 @@ import com.zcloud.flow.xgf.util.XgfFlowDto; import org.apache.commons.lang3.StringUtils; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; @LiteflowComponent("GuFenSupervise") @SuppressWarnings("all") @@ -25,6 +30,11 @@ public class GuFenSupervise extends NodeComponent { @Resource private XgfUserMapper xgfUserMapper; + @Resource + private XgfUserDetailsMapper xgfUserDetailsMapper; + @Resource + private SendMessageUtil sendMessageUtil; + @Override public boolean isAccess() { XgfFlowDto info = this.getRequestData(); @@ -85,6 +95,22 @@ public class GuFenSupervise extends NodeComponent { entity.put("STATUS", "2"); xgfUserMapper.edit(entity); + // created by liu jun 2024-06-26 工匠学院对接 + condition.clear(); + condition.put("XGF_USER_ID", flows.getString("FLOWS_ID")); + PageData entityInfo = xgfUserDetailsMapper.findById(condition); + UserDTO userDTO = UserDTO.builder() + .userName(entity.getString("USERNAME")) + .realName(entity.getString("NAME")) + .userSex("0".equals(entityInfo.getString("SEX")) ? "男" : "女") + .phoneNumber(entity.getString("USERNAME")) + .idCard(entityInfo.getString("CARD_ID")) + .orgTree("集团外公司(含外协单位)/"+ entity.getString("BELONG_TO_CORP_NAME")) + .avatarUrl(entityInfo.getString("PHOTO")) + .build(); + List list = new ArrayList(); + list.add(userDTO); + sendMessageUtil.sendMessage(list); // 保存操作记录 xgfUserService.saveLog(info, info.getSTATUS(), "1"); } diff --git a/src/main/java/com/zcloud/flow/xgf/GuFen/GuFenWeiTuoSupervise.java b/src/main/java/com/zcloud/flow/xgf/GuFen/GuFenWeiTuoSupervise.java index 4c399549..099b1851 100644 --- a/src/main/java/com/zcloud/flow/xgf/GuFen/GuFenWeiTuoSupervise.java +++ b/src/main/java/com/zcloud/flow/xgf/GuFen/GuFenWeiTuoSupervise.java @@ -3,8 +3,11 @@ package com.zcloud.flow.xgf.GuFen; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.NodeComponent; import com.zcloud.entity.PageData; +import com.zcloud.flow.util.SendMessageUtil; +import com.zcloud.flow.util.dto.UserDTO; import com.zcloud.mapper.datasource.bus.CorpInfoMapper; import com.zcloud.mapper.datasource.xgf.XgfFlowsMapper; +import com.zcloud.mapper.datasource.xgf.XgfUserDetailsMapper; import com.zcloud.mapper.datasource.xgf.XgfUserMapper; import com.zcloud.service.xgf.XgfUserService; import com.zcloud.util.DateUtil; @@ -13,6 +16,8 @@ import com.zcloud.flow.xgf.util.XgfFlowDto; import org.apache.commons.lang3.StringUtils; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; @LiteflowComponent("GuFenWeiTuoSupervise") @SuppressWarnings("all") @@ -30,9 +35,13 @@ public class GuFenWeiTuoSupervise extends NodeComponent { @Resource private CorpInfoMapper corpInfoMapper; + @Resource + private XgfUserDetailsMapper xgfUserDetailsMapper; + @Resource + private SendMessageUtil sendMessageUtil; + @Override public boolean isAccess() { - System.out.println("2???????"); XgfFlowDto info = this.getRequestData(); // 如果指针没有数据,赋值后自动结束 if (StringUtils.isBlank(info.getIterator())) { @@ -87,6 +96,23 @@ public class GuFenWeiTuoSupervise extends NodeComponent { entity.put("CHECK_STEP", Integer.parseInt(entity.get("CHECK_STEP").toString()) + 1); xgfUserMapper.edit(entity); + // created by liu jun 2024-06-26 工匠学院对接 + condition.clear(); + condition.put("XGF_USER_ID", flows.getString("FLOWS_ID")); + PageData entityInfo = xgfUserDetailsMapper.findById(condition); + UserDTO userDTO = UserDTO.builder() + .userName(entity.getString("USERNAME")) + .realName(entity.getString("NAME")) + .userSex("0".equals(entityInfo.getString("SEX")) ? "男" : "女") + .phoneNumber(entity.getString("USERNAME")) + .idCard(entityInfo.getString("CARD_ID")) + .orgTree("集团外公司(含外协单位)/"+ entity.getString("BELONG_TO_CORP_NAME")) + .avatarUrl(entityInfo.getString("PHOTO")) + .build(); + List list = new ArrayList(); + list.add(userDTO); + sendMessageUtil.sendMessage(list); + // 保存操作记录 xgfUserService.saveLog(info, info.getSTATUS(), "1"); info.setIterator(""); diff --git a/src/main/java/com/zcloud/flow/xgf/JiTuan/JiTuanSupervise.java b/src/main/java/com/zcloud/flow/xgf/JiTuan/JiTuanSupervise.java index 03d76e6d..47cd9e7e 100644 --- a/src/main/java/com/zcloud/flow/xgf/JiTuan/JiTuanSupervise.java +++ b/src/main/java/com/zcloud/flow/xgf/JiTuan/JiTuanSupervise.java @@ -3,14 +3,19 @@ package com.zcloud.flow.xgf.JiTuan; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.NodeComponent; import com.zcloud.entity.PageData; +import com.zcloud.flow.util.SendMessageUtil; +import com.zcloud.flow.util.dto.UserDTO; import com.zcloud.flow.xgf.util.XgfFlowDto; import com.zcloud.mapper.datasource.xgf.XgfFlowsMapper; +import com.zcloud.mapper.datasource.xgf.XgfUserDetailsMapper; import com.zcloud.mapper.datasource.xgf.XgfUserMapper; import com.zcloud.service.xgf.XgfUserService; import com.zcloud.util.DateUtil; import org.apache.commons.lang3.StringUtils; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; @LiteflowComponent("JiTuanSupervise") public class JiTuanSupervise extends NodeComponent { @@ -24,6 +29,11 @@ public class JiTuanSupervise extends NodeComponent { @Resource private XgfUserMapper xgfUserMapper; + @Resource + private XgfUserDetailsMapper xgfUserDetailsMapper; + @Resource + private SendMessageUtil sendMessageUtil; + @Override public boolean isAccess() { @@ -84,7 +94,22 @@ public class JiTuanSupervise extends NodeComponent { entity.put("CHECK_STEP", Integer.parseInt(entity.get("CHECK_STEP").toString()) + 1); entity.put("STATUS", "2"); xgfUserMapper.edit(entity); - + // created by liu jun 2024-06-26 工匠学院对接 + condition.clear(); + condition.put("XGF_USER_ID", flows.getString("FLOWS_ID")); + PageData entityInfo = xgfUserDetailsMapper.findById(condition); + UserDTO userDTO = UserDTO.builder() + .userName(entity.getString("USERNAME")) + .realName(entity.getString("NAME")) + .userSex("0".equals(entityInfo.getString("SEX")) ? "男" : "女") + .phoneNumber(entity.getString("USERNAME")) + .idCard(entityInfo.getString("CARD_ID")) + .orgTree("集团外公司(含外协单位)/"+ entity.getString("BELONG_TO_CORP_NAME")) + .avatarUrl(entityInfo.getString("PHOTO")) + .build(); + List list = new ArrayList(); + list.add(userDTO); + sendMessageUtil.sendMessage(list); // 保存操作记录 xgfUserService.saveLog(info, info.getSTATUS(), "1"); } diff --git a/src/main/java/com/zcloud/flow/xgf/JiTuan/JiTuanWeiTuoSupervise.java b/src/main/java/com/zcloud/flow/xgf/JiTuan/JiTuanWeiTuoSupervise.java index 783cf372..c7bb8747 100644 --- a/src/main/java/com/zcloud/flow/xgf/JiTuan/JiTuanWeiTuoSupervise.java +++ b/src/main/java/com/zcloud/flow/xgf/JiTuan/JiTuanWeiTuoSupervise.java @@ -3,9 +3,12 @@ package com.zcloud.flow.xgf.JiTuan; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.NodeComponent; import com.zcloud.entity.PageData; +import com.zcloud.flow.util.SendMessageUtil; +import com.zcloud.flow.util.dto.UserDTO; import com.zcloud.flow.xgf.util.XgfFlowDto; import com.zcloud.mapper.datasource.bus.CorpInfoMapper; import com.zcloud.mapper.datasource.xgf.XgfFlowsMapper; +import com.zcloud.mapper.datasource.xgf.XgfUserDetailsMapper; import com.zcloud.mapper.datasource.xgf.XgfUserMapper; import com.zcloud.service.xgf.XgfUserService; import com.zcloud.util.DateUtil; @@ -13,6 +16,8 @@ import com.zcloud.util.Jurisdiction; import org.apache.commons.lang3.StringUtils; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; @LiteflowComponent("JiTuanWeiTuoSupervise") public class JiTuanWeiTuoSupervise extends NodeComponent { @@ -29,6 +34,11 @@ public class JiTuanWeiTuoSupervise extends NodeComponent { @Resource private CorpInfoMapper corpInfoMapper; + @Resource + private XgfUserDetailsMapper xgfUserDetailsMapper; + @Resource + private SendMessageUtil sendMessageUtil; + @Override public boolean isAccess() { XgfFlowDto info = this.getRequestData(); @@ -86,6 +96,22 @@ public class JiTuanWeiTuoSupervise extends NodeComponent { entity.put("CHECK_STEP", Integer.parseInt(entity.get("CHECK_STEP").toString()) + 1); xgfUserMapper.edit(entity); + // created by liu jun 2024-06-26 工匠学院对接 + condition.clear(); + condition.put("XGF_USER_ID", flows.getString("FLOWS_ID")); + PageData entityInfo = xgfUserDetailsMapper.findById(condition); + UserDTO userDTO = UserDTO.builder() + .userName(entity.getString("USERNAME")) + .realName(entity.getString("NAME")) + .userSex("0".equals(entityInfo.getString("SEX")) ? "男" : "女") + .phoneNumber(entity.getString("USERNAME")) + .idCard(entityInfo.getString("CARD_ID")) + .orgTree("集团外公司(含外协单位)/"+ entity.getString("BELONG_TO_CORP_NAME")) + .avatarUrl(entityInfo.getString("PHOTO")) + .build(); + List list = new ArrayList(); + list.add(userDTO); + sendMessageUtil.sendMessage(list); // 保存操作记录 xgfUserService.saveLog(info, info.getSTATUS(), "1"); } diff --git a/src/main/java/com/zcloud/flow/xgf/YiBan/YiBanSupervise.java b/src/main/java/com/zcloud/flow/xgf/YiBan/YiBanSupervise.java index 3f02448a..558a2df0 100644 --- a/src/main/java/com/zcloud/flow/xgf/YiBan/YiBanSupervise.java +++ b/src/main/java/com/zcloud/flow/xgf/YiBan/YiBanSupervise.java @@ -3,8 +3,11 @@ package com.zcloud.flow.xgf.YiBan; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.NodeComponent; import com.zcloud.entity.PageData; +import com.zcloud.flow.util.SendMessageUtil; +import com.zcloud.flow.util.dto.UserDTO; import com.zcloud.mapper.datasource.bus.CorpInfoMapper; import com.zcloud.mapper.datasource.xgf.XgfFlowsMapper; +import com.zcloud.mapper.datasource.xgf.XgfUserDetailsMapper; import com.zcloud.mapper.datasource.xgf.XgfUserMapper; import com.zcloud.flow.xgf.util.XgfFlowDto; import com.zcloud.service.xgf.XgfUserService; @@ -13,9 +16,12 @@ import com.zcloud.util.Jurisdiction; import org.apache.commons.lang3.StringUtils; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; @LiteflowComponent("YiBanSupervise") -@SuppressWarnings("all") public class YiBanSupervise extends NodeComponent { @Resource @@ -27,6 +33,11 @@ public class YiBanSupervise extends NodeComponent { @Resource private XgfUserMapper xgfUserMapper; + @Resource + private XgfUserDetailsMapper xgfUserDetailsMapper; + @Resource + private SendMessageUtil sendMessageUtil; + @Resource private CorpInfoMapper corpInfoMapper; @@ -102,10 +113,10 @@ public class YiBanSupervise extends NodeComponent { flows.put("APPOINT_ONE_TIME", DateUtil.getTime()); flows.put("APPOINT_ONE_STATUS", info.getSTATUS()); flows.put("APPOINT_ONE_OPINION", info.getOPINION()); - flows.put("OPINION",info.getOPINION()); + flows.put("OPINION", info.getOPINION()); if ("0".equals(info.getSTATUS())) { // 打回至相关方端 - xgfUserService.repulse(flows,info); + xgfUserService.repulse(flows, info); // 保存操作记录 xgfUserService.saveLog(info, info.getSTATUS(), "0"); } else { @@ -118,7 +129,22 @@ public class YiBanSupervise extends NodeComponent { entity.put("STATUS", "2"); entity.put("CHECK_STEP", Integer.parseInt(entity.get("CHECK_STEP").toString()) + 1); xgfUserMapper.edit(entity); - + // created by liu jun 2024-06-26 工匠学院对接 + condition.clear(); + condition.put("XGF_USER_ID", flows.getString("FLOWS_ID")); + PageData entityInfo = xgfUserDetailsMapper.findById(condition); + UserDTO userDTO = UserDTO.builder() + .userName(entity.getString("USERNAME")) + .realName(entity.getString("NAME")) + .userSex("0".equals(entityInfo.getString("SEX")) ? "男" : "女") + .phoneNumber(entity.getString("USERNAME")) + .idCard(entityInfo.getString("CARD_ID")) + .orgTree("集团外公司(含外协单位)/"+ entity.getString("BELONG_TO_CORP_NAME")) + .avatarUrl(entityInfo.getString("PHOTO")) + .build(); + List list = new ArrayList(); + list.add(userDTO); + sendMessageUtil.sendMessage(list); // 保存操作记录 xgfUserService.saveLog(info, info.getSTATUS(), "1"); } diff --git a/src/main/java/com/zcloud/service/xgf/impl/XgfUserServiceImpl.java b/src/main/java/com/zcloud/service/xgf/impl/XgfUserServiceImpl.java index f2408266..4c507728 100644 --- a/src/main/java/com/zcloud/service/xgf/impl/XgfUserServiceImpl.java +++ b/src/main/java/com/zcloud/service/xgf/impl/XgfUserServiceImpl.java @@ -931,6 +931,13 @@ public class XgfUserServiceImpl implements XgfUserService { flow.put("APPOINT_SEVEN_USER_ID", ""); } + /** + * 保存操作记录 + * @param info + * @param status 通过标识符 + * @param endFlag 流程结束标识符 + * @throws Exception + */ public void saveLog(PageData info, String status, String endFlag) throws Exception { /* 保存审批记录 */ PageData condition = new PageData(); diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 17b3cfa2..0ab7bff0 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -132,3 +132,8 @@ heBeiQinAnFile=https://file.zcloudchina.com/YTHFile liteflow.rule-source=flow.xml liteflow.print-execution-log=false + +gongJiangXueYuanSendPublicKey=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzbwmqhb5xVejFQFoa8NF2FGtb2nMtpalZ2Zcy78tL/5Y5Od78EKb9dALuv4b+F/PexynKrQDlnRhAouuqF8S1LuC0njbWSaFMofCeyeoltSQTEcjwzEAOPH9CnzGOZQ19tB2vEamVoLefWC4H0V+e5hWv7DDCm3bLNaHhMnR1/o0ASZqzIHYDEzVZNGrxR8WIhxUh7fORk75nEUyz2S6WKq1MlOkm8ZssMsFW+KacRTnexn8Q2p8/7/3zRCScLoH3pHA+J35nuP+doigUmPJzwHfPsr1QeYdadtuwZdfCZVQ7U4R4vB83NsSElAgTW+xHzy7Y1EcgZgYfSedetb03QIDAQAB +gongJiangXueYuanSendPrivateKey=58e5e358b220335e7b1c6cc3576ceecc28b4a95d96cbbe0 +gongJiangXueYuanTestUrl=http://fy04.bjttsx.com +gongJiangXueYuanProdUrl=https://gjxy.bjttsx.com diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 023e9b32..33943a5b 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -107,3 +107,8 @@ gwj-baseimgpath=https://qgqy.qhdsafety.com/file/ gwj-backendaddr=http://192.168.0.31:8991/qa-prevention-gwj/ cfd.prevention.api.url=http://192.168.0.31:7021/qa-regulatory-cfd + +gongJiangXueYuanSendPublicKey=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzbwmqhb5xVejFQFoa8NF2FGtb2nMtpalZ2Zcy78tL/5Y5Od78EKb9dALuv4b+F/PexynKrQDlnRhAouuqF8S1LuC0njbWSaFMofCeyeoltSQTEcjwzEAOPH9CnzGOZQ19tB2vEamVoLefWC4H0V+e5hWv7DDCm3bLNaHhMnR1/o0ASZqzIHYDEzVZNGrxR8WIhxUh7fORk75nEUyz2S6WKq1MlOkm8ZssMsFW+KacRTnexn8Q2p8/7/3zRCScLoH3pHA+J35nuP+doigUmPJzwHfPsr1QeYdadtuwZdfCZVQ7U4R4vB83NsSElAgTW+xHzy7Y1EcgZgYfSedetb03QIDAQAB +gongJiangXueYuanSendPrivateKey=58e5e358b220335e7b1c6cc3576ceecc28b4a95d96cbbe0 +gongJiangXueYuanTestUrl=http://fy04.bjttsx.com +gongJiangXueYuanProdUrl=https://gjxy.bjttsx.com \ No newline at end of file diff --git a/src/main/resources/application-master.properties b/src/main/resources/application-master.properties index 2eacb8de..09150b70 100644 --- a/src/main/resources/application-master.properties +++ b/src/main/resources/application-master.properties @@ -104,3 +104,9 @@ biaoZhunShuJuKu=https://file.zcloudchina.com/ liteflow.rule-source=flow.xml liteflow.print-execution-log=false + +gongJiangXueYuanSendPublicKey=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzbwmqhb5xVejFQFoa8NF2FGtb2nMtpalZ2Zcy78tL/5Y5Od78EKb9dALuv4b+F/PexynKrQDlnRhAouuqF8S1LuC0njbWSaFMofCeyeoltSQTEcjwzEAOPH9CnzGOZQ19tB2vEamVoLefWC4H0V+e5hWv7DDCm3bLNaHhMnR1/o0ASZqzIHYDEzVZNGrxR8WIhxUh7fORk75nEUyz2S6WKq1MlOkm8ZssMsFW+KacRTnexn8Q2p8/7/3zRCScLoH3pHA+J35nuP+doigUmPJzwHfPsr1QeYdadtuwZdfCZVQ7U4R4vB83NsSElAgTW+xHzy7Y1EcgZgYfSedetb03QIDAQAB +gongJiangXueYuanSendPrivateKey=58e5e358b220335e7b1c6cc3576ceecc28b4a95d96cbbe0 +gongJiangXueYuanTestUrl=http://fy04.bjttsx.com +gongJiangXueYuanProdUrl=https://gjxy.bjttsx.com +