Browse Source

计划bug处理

dev-v1.0.3^2
庄锐波 4 months ago
parent
commit
ad7efa59f4
  1. 9
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/ServiceInvocation.java
  2. 71
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java
  3. 3
      zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js
  4. 16
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/notice/cp_notice_edit.vue
  5. 91
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/scanEntQRCode.vue

9
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/ServiceInvocation.java

@ -92,7 +92,7 @@ public class ServiceInvocation {
GCMParameterSpec params = new GCMParameterSpec(128, content, 0, 12); GCMParameterSpec params = new GCMParameterSpec(128, content, 0, 12);
try { try {
Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5Padding"); Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(2, getSecretKey(encryptPass), params); cipher.init(2, getSecretKey(encryptPass), params);
byte[] decryptData = cipher.doFinal(content, 12, content.length - 12); byte[] decryptData = cipher.doFinal(content, 12, content.length - 12);
return new String(decryptData); return new String(decryptData);
@ -330,6 +330,13 @@ public class ServiceInvocation {
} }
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
String appKey = "MzBjZDYzMmQxOGMyNGJjMmI0NzY1MzU0OTQzMjc5ODc6U3pzejIwMjQ=";
String accessToken="0gr5LUGGWWBs7lK/W5/6JFoY1fNlHDkBh1BEL4xiWgQ38xvalIBwj+Q91hPlXTVWNuOPiUEwEcOr3zRF";
String secretKey = gatewayAesDecode(appKey, accessToken);
log.info("secretKey:{}",secretKey);
}
public static void main1(String[] args) throws Exception {
// 参数设定 // 参数设定
String appId = "67a83c8a136346cd98f844359902a23c"; String appId = "67a83c8a136346cd98f844359902a23c";
String appKey = "NjdhODNjOGExMzYzNDZjZDk4Zjg0NDM1OTkwMmEyM2M6TXNzcTIwMjQ="; String appKey = "NjdhODNjOGExMzYzNDZjZDk4Zjg0NDM1OTkwMmEyM2M6TXNzcTIwMjQ=";

71
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java

@ -1,26 +1,20 @@
package com.zdxt.enforcementcode.controller.app.enforcement; package com.zdxt.enforcementcode.controller.app.enforcement;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import com.zdxt.enforcementcode.common.commonenum.PlatformTypeEnums; import com.zdxt.enforcementcode.common.commonenum.PlatformTypeEnums;
import com.zdxt.enforcementcode.common.util.CommonUtil; import com.zdxt.enforcementcode.common.util.CommonUtil;
import com.zdxt.enforcementcode.controller.app.utils.HttpUtil;
import com.zdxt.enforcementcode.service.enforcement.IAppEnfLoginService; import com.zdxt.enforcementcode.service.enforcement.IAppEnfLoginService;
import com.zdxt.enforcementcode.controller.app.LoginController; import com.zdxt.enforcementcode.controller.app.LoginController;
import com.zdxt.enforcementcode.domain.vo.SrzDeptVo; import com.zdxt.enforcementcode.domain.vo.SrzDeptVo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Hex;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysDeptService; import org.dromara.system.service.ISysDeptService;
import org.dromara.system.service.ISysUserService; import org.dromara.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -37,15 +31,6 @@ public class AppEnfLoginController extends LoginController {
private final ISysDeptService sysDeptService; private final ISysDeptService sysDeptService;
private final IAppEnfLoginService appEnfLoginService; private final IAppEnfLoginService appEnfLoginService;
@Value("${szypt.corpid}")
private String szyptCorpid;
@Value("${szypt.agentid}")
private String szyptAgentid;
@Value("${szypt.corpsecret}")
private String szyptCorpsecret;
@Value("${szypt.url}")
private String szyptUrl;
/** /**
* 执法端用户登录 * 执法端用户登录
* *
@ -156,60 +141,4 @@ public class AppEnfLoginController extends LoginController {
String code = params.get("code"); String code = params.get("code");
return appEnfLoginService.szyptLogin(code); return appEnfLoginService.szyptLogin(code);
} }
/**
* 深圳易平台使用权限签名算法
*/
@GetMapping("/szyptGetToken")
@ResponseBody
public R<Map<String, Object>> szyptGetToken(@RequestParam("code") String code, @RequestParam("url") String url){
try {
System.out.println("====================== 获取政务微信认证签名URL ======================");
log.info("获取政务微信认证签名code:{}",code);
log.info("获取政务微信认证签名URL:{}",url);
// 获取 access_token
String accessTokenJson = HttpUtil.HttpSendGet(szyptUrl + "/cgi-bin/gettoken?corpid="+szyptCorpid+"&corpsecret="+szyptCorpsecret, null);
JSONObject tokenObj = JSONObject.parseObject(accessTokenJson);
String token = tokenObj.getString("access_token");
String jsapiTicket = HttpUtil.HttpSendGet(szyptUrl + "/cgi-bin/get_jsapi_ticket?access_token="+token, null);
JSONObject ticketObj = JSONObject.parseObject(jsapiTicket);
String ticket = ticketObj.getString("ticket");
log.info("====================== jsapiTicket start ======================");
log.info("ticket: {}",ticket);
log.info("====================== jsapiTicket end ======================");
long timestamp = System.currentTimeMillis() / 1000;
//随机字符串
String nonceStr = "Wm3WZYTPz0wzccnW";
String signature = getSignature(ticket, nonceStr, timestamp, url);
log.info("signature: {}",signature);
Map<String, Object> data = new HashMap<>();
data.put("agentid", szyptAgentid);
data.put("corpid", szyptCorpid);
data.put("timestamp", timestamp);
data.put("nonceStr", nonceStr);
data.put("signature", signature);
return R.ok(data);
} catch (Exception e) {
log.error(e.getMessage());
e.printStackTrace();
}
return R.ok();
}
private String getSignature(String ticket, String nonceStr, long timestamp, String url) {
try {
String unEncryptStr = "jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url;
MessageDigest sha = MessageDigest.getInstance("SHA");
// 调用digest方法,进行加密操作
byte[] cipherBytes = sha.digest(unEncryptStr.getBytes());
String encryptStr = Hex.encodeHexString(cipherBytes);
return encryptStr;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
} }

3
zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js

@ -6,9 +6,6 @@ const baseUrl = "/app-enf";
export const enforcementLogin = (params, success, error) => _post(baseUrl + "/login/szyptLogin", params, success, error); export const enforcementLogin = (params, success, error) => _post(baseUrl + "/login/szyptLogin", params, success, error);
export const enforcementLoginByPassword = (params, success, error) => _post(baseUrl + "/login/do", params, success, error); export const enforcementLoginByPassword = (params, success, error) => _post(baseUrl + "/login/do", params, success, error);
// 深圳易平台
export const szyptGetToken = (params, success, error) => _get(baseUrl + "/login/szyptGetToken",params,success,error);
// endregion // endregion
// region 企业模块 // region 企业模块

16
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/notice/cp_notice_edit.vue

@ -617,15 +617,13 @@ const onBack = () => { router.back(); };
// 表单校验 // 表单校验
const validate = (isDraft) => { const validate = (isDraft) => {
if (!isDraft) { if (!form.value.enforceDate) { showToast('请选择执法日期'); return false; }
if (!form.value.enforceDate) { showToast('请选择执法日期'); return false; } if (!form.value.enforceTime) { showToast('请选择执法时段'); return false; }
if (!form.value.enforceTime) { showToast('请选择执法时段'); return false; } if (!form.value.enforceContent) { showToast('请输入执法事项'); return false; }
if (!form.value.enforceContent) { showToast('请输入执法事项'); return false; } if (!form.value.enforceRequirement) { showToast('请输入执法要求'); return false; }
if (!form.value.enforceRequirement) { showToast('请输入执法要求'); return false; } if (!form.value.enterpriseName) { showToast('请输入企业名称'); return false; }
if (!form.value.enterpriseName) { showToast('请输入企业名称'); return false; } if (personList.value.length === 0) { showToast('请添加执法人员'); return false; }
if (personList.value.length === 0) { showToast('请添加执法人员'); return false; } if (personList.value.length < 2) { showToast('执法人员不得少于2人'); return false; }
if (personList.value.length < 2) { showToast('执法人员不得少于2人'); return false; }
}
return true; return true;
}; };

91
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/scanEntQRCode.vue

@ -95,7 +95,7 @@ import { ref, reactive, onMounted, onBeforeUnmount, nextTick } from 'vue';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
import { showFailToast, showSuccessToast, showToast, showConfirmDialog } from 'vant'; import { showFailToast, showSuccessToast, showToast, showConfirmDialog } from 'vant';
import { baseUrl, appEnv } from '@/config/env.js'; import { baseUrl, appEnv } from '@/config/env.js';
import { getEntInfoByQRCode, queryEnterpriseListAndQrInfo, szyptGetToken } from '@/api/enforcement/index'; import { getEntInfoByQRCode, queryEnterpriseListAndQrInfo } from '@/api/enforcement/index';
import wx from 'weixin-js-sdk'; import wx from 'weixin-js-sdk';
const router = useRouter(); const router = useRouter();
@ -209,60 +209,53 @@ const onFileSelected = async (event) => {
// ---------- prod 环境:wx.scanQRCode ---------- // ---------- prod 环境:wx.scanQRCode ----------
const openWxScan = () => { const openWxScan = () => {
let fullUrl = window.location.href; // TODO: 对接实际微信 JSSDK token 接口后启用
let code = fullUrl.substring(fullUrl.indexOf('code=') + 5, fullUrl.indexOf('&state=')); // 当前仅预留调用骨架,需配合服务端 szyptGetToken 接口获取签名
let paramUrl = window.location.href.split("#")[0]; const fullUrl = window.location.href;
let param = {code: code, url: paramUrl}; const paramUrl = fullUrl.split('#')[0];
szyptGetToken(param, success => { showToast('正在调起微信扫码...');
let resMsg = success.data; // 以下为 wx.config + wx.scanQRCode 的标准流程
console.log(resMsg); // 实际使用时需先调用服务端接口获取 config 参数
wx.config({ szyptGetToken({ url: paramUrl }, (res) => {
// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 const data = res.data;
debug: false, wx.config({
// 必填,公众号的唯一标识 debug: false,
appId: resMsg.corpid, appId: data.corpid,
// 必填,生成签名的时间戳 timestamp: data.timestamp,
timestamp: resMsg.timestamp, nonceStr: data.nonceStr,
// 必填,生成签名的随机串 signature: data.signature,
nonceStr: resMsg.nonceStr, jsApiList: ['scanQRCode'],
// 必填,签名,见附录1 });
signature: resMsg.signature, wx.ready(() => {
// 必填,需要使用的JS接口列表,所有JS接口列表见附录2 wxClickScan();
jsApiList: ["scanQRCode"], });
}); wx.error((err) => {
wx.ready(() => { console.error('wx.config 失败', err);
//微信扫一扫请求操作 showFailToast('微信配置失败,请重试');
ClickScan()
});
wx.error((res) => {
console.log("获取失败", res);
});
}, error => {
}); });
});
// 开发阶段直接尝试调用(在微信浏览器内有效)
wxClickScan();
}; };
const ClickScan = () => { const wxClickScan = () => {
wx.scanQRCode({ wx.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果, needResult: 1,
scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有 scanType: ['qrCode', 'barCode'],
success: (res) => { success: (res) => {
// 页面跳转 console.log('wx 扫码返回:', res);
console.log("=========== 扫码返回 ===========") handleScanResult(res.resultStr);
console.log(res)
if(isHttpLink(res.resultStr)){
handleScanResult(res.resultStr);
}else{
showFailToast("该二维码不正确");
}
}, },
error: function(res) { error: (res) => {
console.log("错误回调",res) console.error('wx 扫码错误:', res);
if (res.errMsg.indexOf('function_not_exist') > 0) { if (res.errMsg && res.errMsg.indexOf('function_not_exist') > 0) {
showFailToast('版本过低请升级') showFailToast('版本过低请升级');
} }
}, },
cancel: (res) => { cancel: () => {
console.log('err', res); console.log('用户取消扫码');
}, },
}); });
}; };
@ -286,7 +279,7 @@ const handleScanResult = (resultStr) => {
// 将企业信息存入 sessionStorage,预览页直接使用,无需再调接口 // 将企业信息存入 sessionStorage,预览页直接使用,无需再调接口
sessionStorage.setItem('enterpriseScanData', JSON.stringify(data)); sessionStorage.setItem('enterpriseScanData', JSON.stringify(data));
// 跳转企业详情预览页,携带执法类型参数和企业编号 // 跳转企业详情预览页,携带执法类型参数和企业编号
router.push({ router.push({
path: '/enforcement/enterpriseScanPreview', path: '/enforcement/enterpriseScanPreview',
query: { type: enforceType, enterpriseNumber: data.enterpriseNumber } query: { type: enforceType, enterpriseNumber: data.enterpriseNumber }
}); });
@ -401,7 +394,7 @@ const selectEnterprise = (item) => {
showSearchModal.value = false; showSearchModal.value = false;
router.push({ router.push({
path: '/enforcement/enterpriseScanPreview', path: '/enforcement/enterpriseScanPreview',
query: { query: {
enterpriseNumber: item.enterpriseNumber, enterpriseNumber: item.enterpriseNumber,
type: enforceType type: enforceType
} }

Loading…
Cancel
Save