From 84f8abcf2d19ccd55e8a406d4de7fab5c885bd5b Mon Sep 17 00:00:00 2001 From: niujiyi <18272501226@163.com> Date: Thu, 14 May 2026 11:03:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=81=E4=B8=9A=E7=AB=AF-=E5=A4=84=E7=BD=AE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=B5=A6=E5=8F=91=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E4=B8=8D=E9=99=90=E5=88=B6=E5=8F=82=E6=95=B0=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=AF=84=E4=BB=B7=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enforcementcode/common/util/HttpUtil.java | 21 + .../common/util/ServiceInvocation.java | 369 ++++++++++++++++++ .../AppEnterpriseComplaintController.java | 13 + .../domain/EnforcementRegistration.java | 5 + .../bo/EnforcementEducationServicesBo.java | 8 - .../domain/bo/EnforcementLawNoticeListBo.java | 16 - .../domain/bo/EnterpriseEvaluateBo.java | 5 + .../enforcementcode/domain/bo/FileDataBo.java | 17 + .../domain/bo/MssqAddOrderBo.java | 165 ++++++++ .../domain/bo/MssqBaseDomainBo.java | 34 ++ .../domain/bo/MssqOrderFlowBo.java | 72 ++++ .../enterprise/AppEnterpriseComplaintVo.java | 6 + .../service/IMssqApiService.java | 62 +++ .../IAppEnterpriseComplaintService.java | 9 + .../AppEnterpriseComplaintServiceImpl.java | 54 ++- .../impl/EnterpriseEvaluateServiceImpl.java | 15 +- .../service/impl/MssqApiServiceImpl.java | 226 +++++++++++ .../src/main/resources/application-dev.yml | 9 + 18 files changed, 1077 insertions(+), 29 deletions(-) create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/ServiceInvocation.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/FileDataBo.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqAddOrderBo.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqBaseDomainBo.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqOrderFlowBo.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IMssqApiService.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/MssqApiServiceImpl.java diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/HttpUtil.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/HttpUtil.java index 09477b1c..532f5db4 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/HttpUtil.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/HttpUtil.java @@ -3,12 +3,14 @@ package com.zdxt.enforcementcode.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.net.ssl.X509TrustManager; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.security.cert.X509Certificate; import java.util.Map; public class HttpUtil { @@ -60,4 +62,23 @@ public class HttpUtil { return ""; } + + public static class TrustAnyTrustManager implements X509TrustManager + { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public X509Certificate[] getAcceptedIssuers() + { + return new X509Certificate[] {}; + } + } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/ServiceInvocation.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/ServiceInvocation.java new file mode 100644 index 00000000..aea12dfc --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/ServiceInvocation.java @@ -0,0 +1,369 @@ +package com.zdxt.enforcementcode.common.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; +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.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.crypto.*; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import java.io.*; +import java.net.ConnectException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 民生诉求氢气 + */ +@Component +public class ServiceInvocation { + private static final Logger log = LoggerFactory.getLogger(ServiceInvocation.class); + /** + * 密钥生成【核心网关】 + * + * @param appKey 授权码 + * @param appId 请求者标识 + * @param rtime 请求时间戳 + * @return 加密后的sign + */ + public static String gatewaySignEncode(String appId, String appKey, String rtime) throws Exception { + String inputString = appId + rtime; + return encode(appKey, inputString); + } + + /** + * 应用公钥appKey进行HMAC-SHA256计算并进行base64转码产生签名 + * + * @param appKey + * @param inputStr + * @return + * @throws NoSuchAlgorithmException + * @throws UnsupportedEncodingException + * @throws InvalidKeyException + */ + private static String encode(String appKey, String inputStr) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException { + String sign; + Mac hmacSha256 = Mac.getInstance("HmacSHA256"); + byte[] keyBytes = appKey.getBytes("UTF-8"); + hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256")); + byte[] hmacSha256Bytes = hmacSha256.doFinal(inputStr.getBytes("UTF-8")); + sign = new String(Base64.encodeBase64(hmacSha256Bytes), "UTF-8"); + return sign; + } + + /** + * 解密 解密过程: 1.构造密钥生成器 2.根据ecnodeRules规则初始化密钥生成器 3.产生密钥 4.创建和初始化密码器 + * 5.将加密后的字符串反纺成byte[]数组 6.将加密内容解密 + */ + public static String gatewayAesDecode(String encryptPass, String base64Content) { + byte[] content = cn.hutool.core.codec.Base64.decode(base64Content); + if (content.length < 28) { + throw new IllegalArgumentException(); + } else { + GCMParameterSpec params = new GCMParameterSpec(128, content, 0, 12); + + try { + Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5Padding"); + cipher.init(2, getSecretKey(encryptPass), params); + byte[] decryptData = cipher.doFinal(content, 12, content.length - 12); + return new String(decryptData); + } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException | InvalidKeyException var6) { + log.error("解密失败:{}", var6.getMessage()); + return null; + } + } + } + + private static SecretKeySpec getSecretKey(String encryptPass) throws NoSuchAlgorithmException { + KeyGenerator kg = KeyGenerator.getInstance("AES"); + SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); + secureRandom.setSeed(encryptPass.getBytes()); + kg.init(128, secureRandom); + SecretKey secretKey = kg.generateKey(); + return new SecretKeySpec(secretKey.getEncoded(), "AES"); + } + + /** + * http请求过程 + * + * @param requestUrl 请求的url,在服务调用过程中url为获取token的url(格式为ip:port/auth/token)或者是服务调用的url + * @param requestMethod 获取token时,请求方法为POST;调用服务是请求方法依据服务注册时定义。 + * @param appIdorSecretKey 获取token时该参数为appId;抵用服务时该参数为SecretKey + * @param currTime 该参数为当前时间 + * @param sign 该参数为head参数gateway_sig,由秘钥生成方法gatewaySignEncode生成。 + * @return + */ + public static JSONObject httpRequest(String requestUrl, String requestMethod, String reqBody, String appIdorSecretKey, + String currTime, String sign) throws Exception { + JSONObject jsonObject; + StringBuffer buffer = new StringBuffer(); + InputStream inputStream = null; + try { + System.setProperty("http.agent", "Chrome"); + URL url = new URL(requestUrl); + HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection(); + httpUrlConnection.setRequestMethod(requestMethod); + httpUrlConnection.setDoOutput(true); + httpUrlConnection.setDoInput(true); + httpUrlConnection.setRequestProperty("gateway_appid", appIdorSecretKey); + httpUrlConnection.setRequestProperty("gateway_rtime", currTime); + httpUrlConnection.setRequestProperty("gateway_sig", sign); + if ("POST".equalsIgnoreCase(requestMethod) && StringUtils.isNotBlank(reqBody)) { + httpUrlConnection.setRequestProperty("Content-Type", "application/json"); + httpUrlConnection.setRequestProperty("Accept", "application/json"); + OutputStream os = httpUrlConnection.getOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8"); + osw.write(reqBody); + osw.flush(); + osw.close(); + } + httpUrlConnection.connect(); + inputStream = httpUrlConnection.getInputStream(); + InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); + BufferedReader bufferReader = new BufferedReader(inputStreamReader); + String str; + while ((str = bufferReader.readLine()) != null) { + buffer.append(str); + } + String buffer2str = buffer.toString(); + jsonObject = JSONObject.parseObject(buffer2str); + bufferReader.close(); + inputStreamReader.close(); + inputStream.close(); + inputStream = null; + httpUrlConnection.disconnect(); + } catch (ConnectException ce) { + log.error("Server connect time out!",ce); + System.out.println("Server connect time out!"); + throw new ConnectException(); + } catch (IOException ioe) { + log.error("ioexception request error",ioe); + throw new IOException(); + } catch (Exception e) { + log.error("http request error!",e); + throw e; + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } + return jsonObject; + } + public static JSONObject httpRequestForInterface(String requestUrl, String requestMethod, String reqBody, String appIdorSecretKey, + String currTime, String sign) throws Exception { + JSONObject jsonObject=new JSONObject(); + StringBuffer buffer = new StringBuffer(); + InputStream inputStream = null; + try { + System.setProperty("http.agent", "Chrome"); + URL url = new URL(requestUrl); + HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection(); + httpUrlConnection.setRequestMethod(requestMethod); + httpUrlConnection.setDoOutput(true); + httpUrlConnection.setDoInput(true); + httpUrlConnection.setRequestProperty("gateway_appid", appIdorSecretKey); + httpUrlConnection.setRequestProperty("gateway_rtime", currTime); + httpUrlConnection.setRequestProperty("gateway_sig", sign); + if ("POST".equalsIgnoreCase(requestMethod) && StringUtils.isNotBlank(reqBody)) { + httpUrlConnection.setRequestProperty("Content-Type", "application/json"); + httpUrlConnection.setRequestProperty("Accept", "application/json"); + OutputStream os = httpUrlConnection.getOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8"); + osw.write(reqBody); + osw.flush(); + osw.close(); + } + httpUrlConnection.connect(); + inputStream = httpUrlConnection.getInputStream(); + InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); + BufferedReader bufferReader = new BufferedReader(inputStreamReader); + String str; + while ((str = bufferReader.readLine()) != null) { + buffer.append(str); + } + String buffer2str = buffer.toString(); + + jsonObject.put("code",httpUrlConnection.getResponseCode()); + jsonObject.put("result",buffer2str); + bufferReader.close(); + inputStreamReader.close(); + inputStream.close(); + inputStream = null; + httpUrlConnection.disconnect(); + } catch (ConnectException ce) { + log.error("Server connect time out!",ce); + throw new ConnectException(); + } catch (IOException ioe) { + log.error("ioexception request error",ioe); + throw new IOException(); + } catch (Exception e) { + log.error("http request error!",e); + throw e; + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } + return jsonObject; + } + public static String httpRequestForInterface2Form(String requestUrl, String requestMethod, String reqBody, String appIdorSecretKey, + String currTime, String sign) throws Exception { + CloseableHttpResponse response=null; + InputStream inputStream = null; + try { + System.setProperty("http.agent", "Chrome"); + + HttpPost post = new HttpPost(requestUrl); + post.setHeader("gateway_appid", appIdorSecretKey); + post.setHeader("gateway_rtime", currTime); + post.setHeader("gateway_sig", sign); + Map param = JSON.parseObject(reqBody,Map.class); + List paramList = new ArrayList<>(); + for(String key : param.keySet()){ + NameValuePair pair = new BasicNameValuePair(key,param.get(key)); + paramList.add(pair); + } + + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[] { new HttpUtil.TrustAnyTrustManager() }, new SecureRandom()); + Registry registry = RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.INSTANCE) + .register("https",new SSLConnectionSocketFactory(sc)) + .build(); + PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager(registry); + CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(manager).build(); + HttpEntity entity = new UrlEncodedFormEntity(paramList,"utf-8"); + post.setEntity(entity); + RequestConfig config = RequestConfig.custom(). + setConnectTimeout(3000). + setSocketTimeout(3000). + build(); + post.setConfig(config); + response = httpClient.execute(post); + } catch (ConnectException ce) { + log.error("Server connect time out!",ce); + throw new ConnectException(); + } catch (IOException ioe) { + log.error("ioexception request error",ioe); + throw new IOException(); + } catch (Exception e) { + log.error("http request error!",e); + throw e; + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } + return EntityUtils.toString(response.getEntity(),"utf-8"); + } + + private static void test(String id, String code,String invokingServiceRequestMethod, String invokingServiceUrl,String reqBodyForUrl) throws Exception { + // 参数设定 + String appId = id; + String appKey = code; + String currTime = System.currentTimeMillis() + ""; + //服务聚合获取tokenUrl + String generateTokenUrl = "http://10.132.108.3/mssqApi/auth/token"; + // 服务调用的请求方法 + // 1.获取本地签名 + String tokenSign = gatewaySignEncode(appId, appKey, currTime); + // 2.调用获取token接口 + JSONObject jsonObject = httpRequest(generateTokenUrl, "POST", "", appId, currTime, tokenSign); + JSONObject jsonObjectBody = JSONObject.parseObject(jsonObject.getString("body")); + if (jsonObjectBody != null) { + String accessToken = jsonObjectBody.getString("access_token"); + // 3.在获得服务调用秘钥access_token后,根据自己的appKey使用AES解密算法对返回值进行解密,最终获取签名密钥secretKey + String secretKey = gatewayAesDecode(appKey, accessToken); + // 4.获取本地签名 + String sign = gatewaySignEncode(appId, secretKey, currTime); + //4.调用服务接口 + JSONObject serviceJsonData = httpRequestForInterface(invokingServiceUrl, invokingServiceRequestMethod, reqBodyForUrl, appId, currTime, sign); + String codeValue = serviceJsonData.getString("code"); + if (codeValue.equals("200")) { + log.info("请求url:{},响应成功!",invokingServiceUrl); + } else { + log.error("请求url:{},响应失败!",invokingServiceUrl); + } + } else { + } + } + + public static void main(String[] args) throws Exception { + // 参数设定 + String appId = "67a83c8a136346cd98f844359902a23c"; + String appKey = "NjdhODNjOGExMzYzNDZjZDk4Zjg0NDM1OTkwMmEyM2M6TXNzcTIwMjQ="; + /*String appId = "ea5acb3cceb24365b415e9affa560d49"; + String appKey = "ZWE1YWNiM2NjZWIyNDM2NWI0MTVlOWFmZmE1NjBkNDk6eDEyMzQ1Ng==";*/ + + String currTime = String.valueOf(System.currentTimeMillis()); + //服务聚合获取tokenUrl + String generateTokenUrl = "http://10.132.108.3/mssqApi/auth/token"; + String invokingServiceUrl="http://10.132.108.3/mssqApi/auth/token"; + String invokingServiceRequestMethod="POST"; + // 服务调用的请求方法 + // 1.获取本地签名 + String tokenSign = gatewaySignEncode(appId, appKey, currTime); + // 2.调用获取token接口 + JSONObject jsonObject = httpRequest(generateTokenUrl, "POST", "", appId, currTime, tokenSign); + JSONObject jsonObjectBody = JSONObject.parseObject(jsonObject.getString("body")); + System.out.println(jsonObject); + if (jsonObjectBody != null) { + String accessToken = jsonObjectBody.getString("access_token"); + // 3.在获得服务调用秘钥access_token后,根据自己的appKey使用AES解密算法对返回值进行解密,最终获取签名密钥secretKey + String secretKey = gatewayAesDecode(appKey, accessToken); + // 4.获取本地签名 + String sign = gatewaySignEncode(appId, secretKey, currTime); +// //4.调用服务接口 + JSONObject serviceJsonData = httpRequestForInterface(invokingServiceUrl, invokingServiceRequestMethod, "", appId, currTime, sign); +// String codeValue = serviceJsonData.getString("code"); +// if (codeValue.equals("200")) { +// log.info("请求url:{},响应成功!",invokingServiceUrl); +// } else { +// log.error("请求url:{},响应失败!",invokingServiceUrl); +// } + } else {} +// test(appId,appKey,"post","",""); + } + +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseComplaintController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseComplaintController.java index ba7667d4..0bd57c58 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseComplaintController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseComplaintController.java @@ -1,5 +1,6 @@ package com.zdxt.enforcementcode.controller.app.enterprise; +import com.zdxt.enforcementcode.domain.bo.MssqOrderFlowBo; import com.zdxt.enforcementcode.domain.bo.enterprise.AppEnterpriseComplaintBo; import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnterpriseComplaintVo; import com.zdxt.enforcementcode.service.enterprise.IAppEnterpriseComplaintService; @@ -15,6 +16,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 企业端-投诉建议 */ @@ -83,4 +86,14 @@ public class AppEnterpriseComplaintController extends BaseController { return list; } + /** + * 企业端-投诉进度查询-处置进度 + */ + @ApiResponse(description = "投诉建议-处置进度") + @GetMapping("/disposalProgress") + public R> disposalProgress(@RequestParam String id) { + List list = appEnterpriseComplaintService.disposalProgress(id); + return R.ok(list); + } + } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/EnforcementRegistration.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/EnforcementRegistration.java index cc86d5f2..f83374e6 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/EnforcementRegistration.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/EnforcementRegistration.java @@ -312,4 +312,9 @@ public class EnforcementRegistration { * 执法案件id */ private String lawCaseId; + + /** + * 是否评价 0:未评价 1:已评价 + */ + private Integer hasEvaluate; } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementEducationServicesBo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementEducationServicesBo.java index 7ac7ce4a..18ccfccf 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementEducationServicesBo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementEducationServicesBo.java @@ -23,31 +23,26 @@ public class EnforcementEducationServicesBo extends BaseEntity { /** * 主键ID */ - @NotBlank(message = "主键ID不能为空", groups = { EditGroup.class }) private String id; /** * 标题 */ - @NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class }) private String title; /** * 发布部门ID(多个用逗号分隔) */ - @NotBlank(message = "发布部门ID(多个用逗号分隔)不能为空", groups = { AddGroup.class, EditGroup.class }) private String publishDeptIds; /** * 发布部门名称(冗余存储) */ - @NotBlank(message = "发布部门名称(冗余存储)不能为空", groups = { AddGroup.class, EditGroup.class }) private String publishDeptNames; /** * 发布平台 0-全部 1-监督端 2-执法端 3-企业端 */ - @NotNull(message = "发布平台 0-全部 1-监督端 2-执法端 3-企业端不能为空", groups = { AddGroup.class, EditGroup.class }) private Long targetPlatform; /** @@ -58,7 +53,6 @@ public class EnforcementEducationServicesBo extends BaseEntity { /** * 来源类型 1|原生 2|转载 */ - @NotNull(message = "来源类型 1|原生 2|转载不能为空", groups = { AddGroup.class, EditGroup.class }) private Long sourceType; /** @@ -79,13 +73,11 @@ public class EnforcementEducationServicesBo extends BaseEntity { /** * 浏览次数 */ - @NotNull(message = "浏览次数不能为空", groups = { AddGroup.class, EditGroup.class }) private Long viewCount; /** * 是否删除 0=否 1=是 */ - @NotNull(message = "是否删除 0=否 1=是不能为空", groups = { AddGroup.class, EditGroup.class }) private Long isDelete; /** diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementLawNoticeListBo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementLawNoticeListBo.java index e6dc3ba8..39ec6dc5 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementLawNoticeListBo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementLawNoticeListBo.java @@ -21,56 +21,44 @@ import java.util.Date; @Data public class EnforcementLawNoticeListBo extends BaseEntity { - - - - /** * 执法日期 */ - @NotBlank(message = "执法日期不能为空", groups = { AddGroup.class, EditGroup.class }) private String enforceDate; /** * 执法时段 1=上午 2=下午 3=其他 */ - @NotNull(message = "执法时段 1=上午 2=下午 3=其他不能为空", groups = { AddGroup.class, EditGroup.class }) private Long enforcePeriod; /** * 执法单位ID */ - @NotBlank(message = "执法单位ID不能为空", groups = { AddGroup.class, EditGroup.class }) private String deptId; /** * 执法单位名称 */ - @NotBlank(message = "执法单位名称不能为空", groups = { AddGroup.class, EditGroup.class }) private String deptName; /** * 执法人员姓名(多人员逗号分隔) */ - @NotBlank(message = "执法人员姓名(多人员逗号分隔)不能为空", groups = { AddGroup.class, EditGroup.class }) private String enforceUserNames; /** * 执法人员证件编号(多人员逗号分隔) */ - @NotBlank(message = "执法人员证件编号(多人员逗号分隔)不能为空", groups = { AddGroup.class, EditGroup.class }) private String enforceUserCodes; /** * 被检查企业ID */ - @NotBlank(message = "被检查企业ID不能为空", groups = { AddGroup.class, EditGroup.class }) private String companyId; /** * 被检查企业名称 */ - @NotBlank(message = "被检查企业名称不能为空", groups = { AddGroup.class, EditGroup.class }) private String companyName; /** @@ -82,13 +70,11 @@ public class EnforcementLawNoticeListBo extends BaseEntity { /** * 执法事项 */ - @NotBlank(message = "执法事项不能为空", groups = { AddGroup.class, EditGroup.class }) private String enforceContent; /** * 执法要求 */ - @NotBlank(message = "执法要求不能为空", groups = { AddGroup.class, EditGroup.class }) private String enforceRequirement; /** @@ -99,13 +85,11 @@ public class EnforcementLawNoticeListBo extends BaseEntity { /** * 预告状态 1=草稿 2=已发布 3=已取消 4=已执行 */ - @NotNull(message = "预告状态 1=草稿 2=已发布 3=已取消 4=已执行不能为空", groups = { AddGroup.class, EditGroup.class }) private Long status; /** * 是否删除 0=否 1=是 */ - @NotNull(message = "是否删除 0=否 1=是不能为空", groups = { AddGroup.class, EditGroup.class }) private Long isDelete; diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnterpriseEvaluateBo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnterpriseEvaluateBo.java index 1a54c765..600cdece 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnterpriseEvaluateBo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnterpriseEvaluateBo.java @@ -131,5 +131,10 @@ public class EnterpriseEvaluateBo extends BaseEntity { */ private Long problem5; + /** + * 是否评价 0:未评价 1:已评价 + */ + private Integer hasEvaluate; + } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/FileDataBo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/FileDataBo.java new file mode 100644 index 00000000..c0cfbdf3 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/FileDataBo.java @@ -0,0 +1,17 @@ +package com.zdxt.enforcementcode.domain.bo; + +import lombok.Data; + + +@Data +public class FileDataBo { + /** + * 附件名称 + */ + private String fileName; + /** + * 附件数据流,需要转成Base64编码格式 + */ + private String fileBytes; + +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqAddOrderBo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqAddOrderBo.java new file mode 100644 index 00000000..e1c4e355 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqAddOrderBo.java @@ -0,0 +1,165 @@ +package com.zdxt.enforcementcode.domain.bo; + +import lombok.Data; + +import java.util.List; + +/** + * 民生诉求工单Bo + */ +@Data +public class MssqAddOrderBo extends MssqBaseDomainBo { + + /** + * 诉求标题 + */ + private String requestTopic; + /** + * 诉求内容 + */ + private String requestContent; + + /** + * 联系人姓名 + */ + private String contactName; + + /** + * 联系人电话 + */ + private String contactTel; + + /** + * 证件类型:字典参数类型:zjlx + */ + private Integer certType; + + /** + * 证件号码 + */ + private String certCode; + + /** + * 联系地址 + */ + private String contactAddress; + /** + * 事发地址 + */ + private String requestArea; + + /** + * 事发详细地址X坐标 + */ + private String addressX; + + /** + * 事发详细地址Y坐标 + */ + private String addressY; + /** + * 来源渠道:字典参数类型:sqly + */ + private Integer requestFrom; + + /** + * 公开意向 y—公开 n—不公开 + */ + private String pubIntent; + + /** + * 工单类型:字典参数类型:sqlx + */ + private Integer orderType; + + /** + * 是否党员: 1: 是; 0: 否 + */ + private Integer isParty; + /** + * 第三方系统工单id + */ + private String extendId; + + /** + * 事发地址所属区 + */ + private String area; + + /** + * 事发地址所属街道 + */ + private String street; + + /** + * 是否保密: 1: 是; 0: 否 + */ + private Integer isSecrecy; + /** + * 事项编码 + */ + private String actCode; + + /** + * 诉求分类(个人/商事主体): 1: 个人; 2: 商事主体 + */ + private Integer formUserNature; + /** + * 涉事主体 + */ + private String thingSubject; + + /** + * 涉事主体地址(如:**区**街道**) + */ + private String subjectAddress; + + /** + * 上传附件数据集 + */ + private List fileDatas; + + + /** 工单编码 */ + private String proWoCode; + /** 工单编码,可以传递多个,最多20个 */ + private List proWoCodes; + /** 开始时间 YYYY-MM-DD HH24:MI:SS */ + private String startTime; + /** 结束时间 YYYY-MM-DD HH24:MI:SS */ + private String endTime; + + private String appId; + private String sign; + private String timestamp; + /** 评价渠道 */ + private String pf; + /** 回调网址 */ + private String backUrl; + /** 评价业务,诉求工单代码值4 */ + private String assessServiceType; + /** 业务主键(诉求工单编号) */ + private String assessServiceCode; + /** 评价对象名称(诉求工单事项名称,若无则传诉求工单标题) */ + private String assessObjectName; + /** 评价对象编码(诉求工单事项编号,若无则传诉求工单编号) */ + private String assessObjectCode; + /** 部门编码(处理部门编码,区平台可以用区编码,编码需要保持与通过工作门户下发的一致) */ + private String deptCode; + /** 评价人名称 */ + private String evaluatorName; + /** 评价人联系号码 */ + private String evaluatorPapersPhone; + /** 附件地址 */ + private List uploadPaths; + private String uploadPath; + + /** + * 获取工单流程信息-工单编码参数 + */ + private String orderCode; + + +} + + diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqBaseDomainBo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqBaseDomainBo.java new file mode 100644 index 00000000..ac11e577 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqBaseDomainBo.java @@ -0,0 +1,34 @@ +package com.zdxt.enforcementcode.domain.bo; + +import lombok.Data; + +@Data +public class MssqBaseDomainBo { + + /** + * 认证token + */ + private String accessToken; + /** + * 分配的appId + */ + private String appid; + /** + * 请求头携带的appId + */ + private String gatewayAppId; + /** + * 请求头携带的签名 + */ + private String gatewaySig; + + /** + * 请求方式 + */ + private String invokingServiceRequestMethod; + /** + * 请求头携带的当前时间的时间戳 + */ + private String gatewayRtime; + +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqOrderFlowBo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqOrderFlowBo.java new file mode 100644 index 00000000..3bd5b0aa --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/MssqOrderFlowBo.java @@ -0,0 +1,72 @@ +package com.zdxt.enforcementcode.domain.bo; + + +import lombok.Data; + +@Data +public class MssqOrderFlowBo { + + /** + * 审批部门 + */ + private String appOrgName; + + /** + * 审批人名称 + */ + private String approveUserName; + + /** + * 审批时间 + */ + private String approveTime; + + /** + * 审批意见 + */ + private String approveContent; + /** + * 操作类型名 + */ + private String operName; + + /** + * 状态 + */ + private Integer state; + + /** + * 文件 + */ + private String appOrgShortname; + + + class AppFiles { + /** + * 文件名称 + */ + private String fileName; + /** + * 文件地址 + */ + private String fileUrl; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileUrl() { + return fileUrl; + } + + public void setFileUrl(String fileUrl) { + this.fileUrl = fileUrl; + } + + } +} + diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/AppEnterpriseComplaintVo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/AppEnterpriseComplaintVo.java index e47fdda3..665e6726 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/AppEnterpriseComplaintVo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/AppEnterpriseComplaintVo.java @@ -1,6 +1,7 @@ package com.zdxt.enforcementcode.domain.vo.enterprise; import cn.idev.excel.annotation.ExcelProperty; +import com.zdxt.enforcementcode.domain.bo.MssqOrderFlowBo; import com.zdxt.enforcementcode.domain.vo.ZdxtFileVo; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; @@ -212,4 +213,9 @@ public class AppEnterpriseComplaintVo implements Serializable { */ @ExcelProperty(value = "创建时间") private Date createTime; + + /** + * 民生诉求数据处置流程 + */ + private List mssqOrderFlows; } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IMssqApiService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IMssqApiService.java new file mode 100644 index 00000000..9ed9359c --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IMssqApiService.java @@ -0,0 +1,62 @@ +package com.zdxt.enforcementcode.service; + +import com.zdxt.enforcementcode.domain.bo.MssqAddOrderBo; +import com.zdxt.enforcementcode.domain.bo.MssqBaseDomainBo; + +/** + * 民生诉求接口实现类 + */ +public interface IMssqApiService { + + /** + * 添加民生诉求工单 + * @param mssqAddOrder + * @return + */ + String addMssqOrder(MssqAddOrderBo mssqAddOrder) throws Exception; + + /** + * 获取token + * @return + * @throws Exception + */ + MssqBaseDomainBo getMssqToken() throws Exception; + MssqBaseDomainBo getMssqHcpToken() throws Exception; + + /** + * 诉求工单评价页面 + * @param mssqAddOrder + * @return + * @throws Exception + */ + String mssqAppraise(MssqAddOrderBo mssqAddOrder) throws Exception; + + /** + * 查询办结信息 + * @param mssqAddOrder + * @return + * @throws Exception + */ + String mssqQueryEndInfo(MssqAddOrderBo mssqAddOrder); + + /** + * 查询工单满意度 + * @param mssqAddOrder + * @return + * @throws Exception + */ + String mssqQuerySatisfy(MssqAddOrderBo mssqAddOrder) throws Exception; + + /** + * 文件下载 + * @param mssqAddOrder + * @return + * @throws Exception + */ + String mssqDownFile(MssqAddOrderBo mssqAddOrder) throws Exception; + + String queryMssq(MssqAddOrderBo mssqAddOrder, String url); + + + +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseComplaintService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseComplaintService.java index 28adb09c..93b89118 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseComplaintService.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseComplaintService.java @@ -1,11 +1,13 @@ package com.zdxt.enforcementcode.service.enterprise; import com.zdxt.enforcementcode.domain.bo.EnterpriseComplaintBo; +import com.zdxt.enforcementcode.domain.bo.MssqOrderFlowBo; import com.zdxt.enforcementcode.domain.bo.enterprise.AppEnterpriseComplaintBo; import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnterpriseComplaintVo; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import java.util.Collection; +import java.util.List; /** * 企业执法-在线投诉Service接口 @@ -62,4 +64,11 @@ public interface IAppEnterpriseComplaintService { * @return 分页结果 */ TableDataInfo getAllCheckList(AppEnterpriseComplaintBo bo, PageQuery pageQuery); + + /** + * 企业端-查询投诉建议处理进度 + * @param id + * @return + */ + List disposalProgress(String id); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseComplaintServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseComplaintServiceImpl.java index c5bfd695..6a21ffbe 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseComplaintServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseComplaintServiceImpl.java @@ -1,16 +1,17 @@ package com.zdxt.enforcementcode.service.enterprise.impl; import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.zdxt.enforcementcode.domain.EnforcementRegistration; -import com.zdxt.enforcementcode.domain.EnterpriseComplaint; -import com.zdxt.enforcementcode.domain.NonEnforcementRegistration; -import com.zdxt.enforcementcode.domain.ZdxtFile; +import com.zdxt.enforcementcode.domain.*; import com.zdxt.enforcementcode.domain.bo.EnterpriseComplaintBo; import com.zdxt.enforcementcode.common.commonenum.AppEnterpriseComplaintEnums; +import com.zdxt.enforcementcode.domain.bo.MssqAddOrderBo; +import com.zdxt.enforcementcode.domain.bo.MssqOrderFlowBo; import com.zdxt.enforcementcode.domain.bo.enterprise.AppEnterpriseComplaintBo; import com.zdxt.enforcementcode.domain.vo.ZdxtFileVo; import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnterpriseComplaintVo; @@ -18,9 +19,11 @@ import com.zdxt.enforcementcode.mapper.ZdxtFileMapper; import com.zdxt.enforcementcode.mapper.enterprise.AppEnforcementRegistrationMapper; import com.zdxt.enforcementcode.mapper.enterprise.AppEnterpriseComplaintMapper; import com.zdxt.enforcementcode.mapper.enterprise.AppNonEnforcementRegistrationMapper; +import com.zdxt.enforcementcode.service.IMssqApiService; import com.zdxt.enforcementcode.service.enterprise.IAppEnterpriseComplaintService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.utils.Lists; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -62,6 +65,9 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain @Autowired private ISysDeptService deptService; + @Autowired + private IMssqApiService mssqApiService; + /** * 企业端-投诉建议详情 * @@ -234,6 +240,46 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain return TableDataInfo.build(page); } + /** + * 企业端-投诉建议查询处理进度 + * @param id + * @return + */ + @Override + public List disposalProgress(String id) { + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EnterpriseComplaint::getId, id); + AppEnterpriseComplaintVo appEnterpriseComplaintVo = baseMapper.selectVoOne(queryWrapper); + if(StringUtils.isNotEmpty(appEnterpriseComplaintVo.getProWoCode())){ + log.info("查询投诉信息:{}", JSONObject.toJSONString(appEnterpriseComplaintVo)); + + //查询民生诉求接口 获取处置进度,判断是否存在诉求工单编码 + log.info("查询工单编码:{}",appEnterpriseComplaintVo.getProWoCode()); + //查询工单处置流程信息 + MssqAddOrderBo mssqAddOrder = new MssqAddOrderBo(); + mssqAddOrder.setProWoCode(appEnterpriseComplaintVo.getProWoCode()); + String mssq =null; + try { + //查询进度详细信息 TODO 异常捕捉之后,前端超时 + mssq = mssqApiService.queryMssq(mssqAddOrder, "/api/API_YX/proProcess/queryAppInfo"); + log.info("查询工单信息结果返回:{}",mssq); + JSONObject jsonObject = JSONObject.parseObject(mssq); + //获取进度数据 + List approveDatas = JSONArray.parseArray(jsonObject.getString("approveDatas"), MssqOrderFlowBo.class); + //列表排序反转 + Collections.reverse(approveDatas); + appEnterpriseComplaintVo.setMssqOrderFlows(approveDatas); + return approveDatas; + } catch (Exception e) { + e.printStackTrace(); + log.info("查询工单信息结果异常,{}",mssq); + } + } + + return Lists.newArrayList(); + } + /** * 处理部门过滤:从投诉事项编码提取信用代码查部门 * @param complaintItemCodes 投诉事项编码,多个逗号隔开 diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseEvaluateServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseEvaluateServiceImpl.java index f78b4bc9..d7c6ea6d 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseEvaluateServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseEvaluateServiceImpl.java @@ -1,6 +1,10 @@ package com.zdxt.enforcementcode.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.zdxt.enforcementcode.domain.EnforcementRegistration; +import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnforcementRegistrationVo; +import com.zdxt.enforcementcode.mapper.enterprise.AppEnforcementRegistrationMapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -34,6 +38,8 @@ public class EnterpriseEvaluateServiceImpl implements IEnterpriseEvaluateService private final EnterpriseEvaluateMapper baseMapper; + private final AppEnforcementRegistrationMapper appEnforcementRegistrationMapper; + /** * 查询企业端-执法评价 * @@ -109,7 +115,14 @@ public class EnterpriseEvaluateServiceImpl implements IEnterpriseEvaluateService public Boolean insertByBo(EnterpriseEvaluateBo bo) { EnterpriseEvaluate add = MapstructUtils.convert(bo, EnterpriseEvaluate.class); validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; + boolean flag =false; + flag= baseMapper.insert(add) > 0; + + //更新评价状态为已评价 + LambdaUpdateWrapper lqw = new LambdaUpdateWrapper<>(); + lqw.eq(EnforcementRegistration::getId, bo.getEnforcementId()); + lqw.set(EnforcementRegistration::getHasEvaluate, bo.getHasEvaluate()); + flag= appEnforcementRegistrationMapper.update(lqw)>0; if (flag) { bo.setId(add.getId()); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/MssqApiServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/MssqApiServiceImpl.java new file mode 100644 index 00000000..af2a07db --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/MssqApiServiceImpl.java @@ -0,0 +1,226 @@ +package com.zdxt.enforcementcode.service.impl; + +import com.alibaba.fastjson.JSONObject; + +import com.zdxt.enforcementcode.common.util.ServiceInvocation; +import com.zdxt.enforcementcode.domain.bo.MssqAddOrderBo; +import com.zdxt.enforcementcode.domain.bo.MssqBaseDomainBo; +import com.zdxt.enforcementcode.service.IMssqApiService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import static com.zdxt.enforcementcode.common.util.ServiceInvocation.gatewaySignEncode; +import static com.zdxt.enforcementcode.common.util.ServiceInvocation.httpRequest; + + +@Service +public class MssqApiServiceImpl implements IMssqApiService { + + + private static final Logger log = LoggerFactory.getLogger(MssqApiServiceImpl.class); + + @Value("${mssq.apiUrl}") + private String mssqUrl; + + @Value("${mssq.appId}") + private String appId; + + @Value("${mssq.appKey}") + private String appKey; + + @Value("${mssq.hcpappid}") + private String hcpAppId; + + @Value("${mssq.hcpsign}") + private String hcpSign; + + @Value("${mssq.hcptimestamp}") + private String hcpTimestamp; + + @Override + public String addMssqOrder(MssqAddOrderBo mssqAddOrder) throws Exception { + MssqBaseDomainBo mssqToken = this.getMssqToken(); + mssqAddOrder.setAccessToken(mssqToken.getAccessToken()); + //appId + mssqAddOrder.setAppid(appId); + //签名 + mssqAddOrder.setGatewaySig(mssqToken.getGatewaySig()); + //请求时间戳 + mssqAddOrder.setGatewayRtime(mssqToken.getGatewayRtime()); + //请求类型 + mssqAddOrder.setInvokingServiceRequestMethod("POST"); + String s = JSONObject.toJSONString(mssqAddOrder); + log.info("民生诉求token:{}",JSONObject.toJSONString(mssqToken)); + log.info("民生诉求工单新增,上传参数:{}",s); + JSONObject serviceJsonData = ServiceInvocation.httpRequestForInterface(mssqUrl + "/api/API_YX/handlerProcess/channelAddOrder", + mssqAddOrder.getInvokingServiceRequestMethod(), s, appId, mssqToken.getGatewayRtime(), mssqToken.getGatewaySig()); + String jsonRes = serviceJsonData.getString("result"); + return jsonRes; + } + + @Override + public MssqBaseDomainBo getMssqToken() throws Exception { + MssqBaseDomainBo mssqBaseDomain = new MssqBaseDomainBo(); + String currTime = String.valueOf(System.currentTimeMillis()); + String invokingServiceRequestMethod="POST"; + // 服务调用的请求方法 + // 1.获取本地签名 + String tokenSign = gatewaySignEncode(appId, appKey, currTime); + // 2.调用获取token接口 + JSONObject jsonObject = httpRequest(mssqUrl + "/auth/token", "POST", "", appId, currTime, tokenSign); + log.info("民生诉求获取auth:{}",jsonObject.toJSONString()); + JSONObject jsonObjectBody = JSONObject.parseObject(jsonObject.getString("body")); +// log.info("民生诉求获取token接口:{}",jsonObject); + if (jsonObjectBody != null) { + String accessToken = jsonObjectBody.getString("access_token"); + log.info("民生诉求获取token:{}",accessToken); + // 3.在获得服务调用秘钥access_token后,根据自己的appKey使用AES解密算法对返回值进行解密,最终获取签名密钥secretKey + String secretKey = ServiceInvocation.gatewayAesDecode(appKey, accessToken); + log.info("民生诉求获取secretKey:{}",secretKey); + // 4.获取本地签名 + String sign = gatewaySignEncode(appId, secretKey, currTime); + mssqBaseDomain.setAccessToken(accessToken); + log.info("民生诉求获取sign:{}",sign); + //签名 + mssqBaseDomain.setGatewaySig(sign); + } + //当前时间戳 + mssqBaseDomain.setGatewayRtime(currTime); + + return mssqBaseDomain; + } + + @Override + public String mssqAppraise(MssqAddOrderBo mssqAddOrder) throws Exception { + MssqBaseDomainBo mssqToken = this.getMssqToken(); + mssqAddOrder.setAccessToken(mssqToken.getAccessToken()); + //appId + mssqAddOrder.setAppId(hcpAppId); + mssqAddOrder.setSign(hcpSign); + mssqAddOrder.setTimestamp(hcpTimestamp); + //签名 + mssqAddOrder.setGatewaySig(mssqToken.getGatewaySig()); + //请求时间戳 + mssqAddOrder.setGatewayRtime(mssqToken.getGatewayRtime()); + //请求类型 + mssqAddOrder.setInvokingServiceRequestMethod("POST"); + + /** 评价渠道 */ + mssqAddOrder.setPf("2"); + /** 评价业务,诉求工单代码值4 */ + mssqAddOrder.setAssessServiceType("4"); + /** 回调网址 */ +// mssqAddOrder.setBackUrl("http://jdm.szssfj.cn/enterprise"); + /** 业务主键(诉求工单编号) */ +// mssqAddOrder.setAssessServiceCode("082407081009143119701"); + /** 评价对象名称(诉求工单事项名称,若无则传诉求工单标题) */ +// mssqAddOrder.setAssessObjectName("测试工单"); + /** 评价对象编码(诉求工单事项编号,若无则传诉求工单编号) */ +// mssqAddOrder.setAssessObjectCode("082407081009143119701"); + /** 部门编码(处理部门编码,区平台可以用区编码,编码需要保持与通过工作门户下发的一致) */ +// mssqAddOrder.setDeptCode("151615"); + /** 评价人名称 */ +// mssqAddOrder.setEvaluatorName("测试"); + /** 评价人联系号码 */ +// mssqAddOrder.setEvaluatorPapersPhone("18528845598"); + + + String s = JSONObject.toJSONString(mssqAddOrder); + log.info("民生诉求token:{}",JSONObject.toJSONString(mssqToken)); + log.info("民生诉求查询工单状态,上传参数:{}",s); + String serviceJsonData = ServiceInvocation.httpRequestForInterface2Form(mssqUrl + "/api/hcp-api/comprehensive/comprehensiveView", + mssqAddOrder.getInvokingServiceRequestMethod(), s, appId, mssqToken.getGatewayRtime(), mssqToken.getGatewaySig()); +// String jsonRes = serviceJsonData.getString("result"); + JSONObject jsonObj = JSONObject.parseObject(serviceJsonData); + JSONObject jsonData = jsonObj.getJSONObject("data"); + String url = null; + try { + url = jsonData.getString("url"); + } catch (Exception e){ e.printStackTrace(); } + return url; + } + + @Override + public String mssqQueryEndInfo(MssqAddOrderBo mssqAddOrder) { + mssqAddOrder.setAppid(appId); + return this.queryMssq(mssqAddOrder, "/api/API_YX/proProcess/queryEndInfo"); + } + + @Override + public String mssqQuerySatisfy(MssqAddOrderBo mssqAddOrder) throws Exception { + mssqAddOrder.setAppid(appId); + return this.queryMssq(mssqAddOrder, "/api/API_YX/proProcess/querySatisfy"); + } + + @Override + public String mssqDownFile(MssqAddOrderBo mssqAddOrder) throws Exception { + mssqAddOrder.setAppid(appId); + return this.queryMssq(mssqAddOrder, "/api/API_YX/fast/downFile"); + } + + @Override + public String queryMssq(MssqAddOrderBo mssqAddOrder, String url) { + MssqBaseDomainBo mssqToken = null; + try { + mssqToken = this.getMssqToken(); + } catch (Exception e) { + e.printStackTrace(); + } + mssqAddOrder.setAccessToken(mssqToken.getAccessToken()); + //appId + mssqAddOrder.setAppid(appId); + //签名 + mssqAddOrder.setGatewaySig(mssqToken.getGatewaySig()); + //请求时间戳 + mssqAddOrder.setGatewayRtime(mssqToken.getGatewayRtime()); + //请求类型 + mssqAddOrder.setInvokingServiceRequestMethod("POST"); + String s = JSONObject.toJSONString(mssqAddOrder); + log.info("民生诉求token:{}",JSONObject.toJSONString(mssqToken)); + log.info("民生诉求查询工单状态,上传参数:{}",s); + JSONObject serviceJsonData = null; + try { + serviceJsonData = ServiceInvocation.httpRequestForInterface(mssqUrl + url, + mssqAddOrder.getInvokingServiceRequestMethod(), s, appId, mssqToken.getGatewayRtime(), mssqToken.getGatewaySig()); + } catch (Exception e) { + e.printStackTrace(); + } + log.info("民生诉求查询结果:{}",serviceJsonData.toJSONString()); + String jsonRes = serviceJsonData.getString("result"); + return jsonRes; + } + + @Override + public MssqBaseDomainBo getMssqHcpToken() throws Exception { + MssqBaseDomainBo mssqBaseDomain = new MssqBaseDomainBo(); + String currTime = String.valueOf(System.currentTimeMillis()); + String invokingServiceRequestMethod="POST"; + // 服务调用的请求方法 + // 1.获取本地签名 + String tokenSign = gatewaySignEncode(appId, appKey, currTime); + // 2.调用获取token接口 + JSONObject jsonObject = httpRequest(mssqUrl + "/auth/token", "POST", "", hcpAppId, hcpTimestamp, hcpSign); + log.info("民生诉求获取auth:{}",jsonObject.toJSONString()); + JSONObject jsonObjectBody = JSONObject.parseObject(jsonObject.getString("body")); +// log.info("民生诉求获取token接口:{}",jsonObject); + if (jsonObjectBody != null) { + String accessToken = jsonObjectBody.getString("access_token"); + log.info("民生诉求获取token:{}",accessToken); + // 3.在获得服务调用秘钥access_token后,根据自己的appKey使用AES解密算法对返回值进行解密,最终获取签名密钥secretKey + String secretKey = ServiceInvocation.gatewayAesDecode(appKey, accessToken); + log.info("民生诉求获取secretKey:{}",secretKey); + // 4.获取本地签名 + String sign = gatewaySignEncode(appId, secretKey, currTime); + mssqBaseDomain.setAccessToken(accessToken); + log.info("民生诉求获取sign:{}",sign); + //签名 + mssqBaseDomain.setGatewaySig(sign); + } + //当前时间戳 + mssqBaseDomain.setGatewayRtime(currTime); + + return mssqBaseDomain; + } +} diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml index ce484129..2e74d098 100644 --- a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml +++ b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml @@ -299,3 +299,12 @@ siq: # 模拟数据开关(true=使用模拟数据,false=调用真实接口) mock: enabled: true + +#民生诉求工单接口 测试环境 +mssq: + appId: ENC(iYSWCYHguGJTOxTcUjFcq4Tkp0HpU/7UqmxGtda3ORKF7a5UZiz612YlxZ9I4zL+) + appKey: ENC(m81tKAp6NtfW/97e3NNfnfq/1TN79M9JL9UY82dhKPxWJkedAuRJPNDBULZDv4ue5vFXcAHDGtWMsH6flq06B7MdjoYGrDc7) + apiUrl: ENC(2fR5TkUb/A0p4+Gp/As+LJsVCjq7pgNwJIG2OAk2yWLXY/q7DNaCDQ==) + hcpappid: zfjdm + hcpsign: ENC(SZL+KT860YpMBuK6GbNWTp0TYVeSu/DTYjKPRCm5xVJk9tI+O6/hqsE5zH9orApgjX6ggAS2hbGefmUsJwIkos0YtIgueK89ilDHtEy6/S0RWrnoi6F9aByxVG/mAwPxTPIXxwUECjvuET1rByTi7juNbufzWzJfYrH4dFXLmzbF5Cv5jJHM8R7Rq6DGL9X9UCqmROJygXv9KvrxN3OcnVoTHb0wQepEq6kplkd3SswLnPSDpb7q5vcs1XMxYcFRDLyqjmQYVRcx3HMsQZOGkTahOdzIfI/tL4D4upgYK1TFpaCiBL98vX/bh/s9RPmiHkyqMd8/R/NnoB8q5/5LldqxBhPCBi6RbPFGM/UfojdXeS5z2Uk/2w==) + hcptimestamp: 20240710172956