From 363c0f2d5ac2cec13e28bcba4f46f272dff448dc Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 28 Jul 2022 16:55:55 +0800
Subject: [PATCH] 20220727 保存代码
---
src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java | 15
src/main/resources/mapper/modules/MallTeamLeaderMapper.xml | 2
src/main/java/cc/mrbird/febs/mall/entity/MallTeamLeader.java | 3
src/main/java/cc/mrbird/febs/pay/util/HttpsRequest.java | 186 ++++++++++++++
src/main/resources/mapper/modules/MallMemberMapper.xml | 2
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java | 17 +
src/main/java/cc/mrbird/febs/pay/util/HttpsRequest2.java | 213 ++++++++++++++++
src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java | 2
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java | 8
src/main/java/cc/mrbird/febs/pay/util/HttpResponse.java | 58 ++++
src/main/resources/templates/febs/views/modules/leader/leaderList.html | 18 +
src/main/java/cc/mrbird/febs/pay/util/HttpRequest.java | 196 +++++++++++++++
src/main/java/cc/mrbird/febs/pay/util/WechatConfigure.java | 24 +
13 files changed, 726 insertions(+), 18 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java
index f1135fc..1eeebc2 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java
@@ -12,12 +12,10 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
@@ -57,4 +55,13 @@
return iAdminMallTeamLeaderService.selectList(mallTeamLeader);
}
+ /**
+ * 团长信息--取消团长
+ */
+ @GetMapping("leaderCancel/{id}")
+ @ControllerEndpoint(operation = "团长信息--取消团长", exceptionMessage = "取消团长失败")
+ public FebsResponse leaderCancel(@NotNull(message = "{required}") @PathVariable Long id) {
+ return iAdminMallTeamLeaderService.leaderCancel(id);
+ }
+
}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallTeamLeader.java b/src/main/java/cc/mrbird/febs/mall/entity/MallTeamLeader.java
index a91d2aa..0d3f0bf 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallTeamLeader.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallTeamLeader.java
@@ -15,11 +15,12 @@
//用户ID
private Long memberId;
- //申请状态 1:审核通过 2:审核不通过 3:申请中
+ //申请状态 1:审核通过 2:审核不通过 3:申请中 4:已取消
private Integer state;
public static final Integer STATE_YES = 1;
public static final Integer STATE_NO = 2;
public static final Integer STATE_ING = 3;
+ public static final Integer STATE_CANCEL = 4;
//团长姓名
private String name;
//手机号码
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java
index b4ac3bf..fcf3239 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java
@@ -20,4 +20,6 @@
FebsResponse leaderUpdate(AdminLeaderUpdateDto adminLeaderUpdateDto);
List<AdminSelectListLeaderVo> selectList(MallTeamLeader mallTeamLeader);
+
+ FebsResponse leaderCancel(Long id);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java
index fbc4bed..31e930d 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java
@@ -12,6 +12,7 @@
import cc.mrbird.febs.mall.vo.AdminMallTeamLeaderVo;
import cc.mrbird.febs.mall.vo.AdminSelectListLeaderVo;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -76,4 +77,20 @@
}
return list;
}
+
+ @Override
+ public FebsResponse leaderCancel(Long id) {
+ MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id);
+ if(ObjectUtil.isEmpty(mallTeamLeader)){
+ return new FebsResponse().fail().message("团长信息不存在");
+ }
+ Integer state = mallTeamLeader.getState();
+ if(MallTeamLeader.STATE_YES != state){
+ return new FebsResponse().fail().message("团长的状态不是审核通过");
+ }
+ mallTeamLeader.setState(MallTeamLeader.STATE_CANCEL);
+ this.baseMapper.updateById(mallTeamLeader);
+ return new FebsResponse().success().message("已取消");
+ }
+
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
index 0b5f278..6043076 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
@@ -45,6 +45,10 @@
if(CollUtil.isNotEmpty(mallTeamLeaders)){
return new FebsResponse().fail().message("正在申请中");
}
+ List<MallTeamLeader> mallTeamLeaderCancel = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_CANCEL);
+ if(CollUtil.isNotEmpty(mallTeamLeaderCancel)){
+ return new FebsResponse().fail().message("当前用户无法申请");
+ }
MallTeamLeader mallTeamLeader = MallTeamLeaderConversion.INSTANCE.dtoToEntity(apiApplayLeaderDto);
mallTeamLeader.setMemberId(memberId);
mallTeamLeader.setState(MallTeamLeader.STATE_ING);
@@ -68,10 +72,13 @@
List<MallTeamLeader> mallTeamLeadersIng = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_ING);
List<MallTeamLeader> mallTeamLeadersNo = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_NO);
List<MallTeamLeader> mallTeamLeadersYes = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_YES);
+ List<MallTeamLeader> mallTeamLeadersCancel = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_CANCEL);
if(CollUtil.isNotEmpty(mallTeamLeadersIng) ||CollUtil.isNotEmpty(mallTeamLeadersYes)){
apiMallleaderStateVo.setState(2);
}else if(CollUtil.isNotEmpty(mallTeamLeadersNo)){
apiMallleaderStateVo.setState(1);
+ }else if(CollUtil.isNotEmpty(mallTeamLeadersCancel)){
+ apiMallleaderStateVo.setState(2);
}else{
apiMallleaderStateVo.setState(1);
}
@@ -82,6 +89,7 @@
public FebsResponse getApiLeaderInfoVoById(Long id) {
MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id);
ApiLeaderInfoVo apiLeaderInfoVo = new ApiLeaderInfoVo();
+ apiLeaderInfoVo.setId(mallTeamLeader.getId());
apiLeaderInfoVo.setName(mallTeamLeader.getName());
apiLeaderInfoVo.setPhone(mallTeamLeader.getPhone());
apiLeaderInfoVo.setAddressPic(mallTeamLeader.getAddressPic());
diff --git a/src/main/java/cc/mrbird/febs/pay/util/HttpRequest.java b/src/main/java/cc/mrbird/febs/pay/util/HttpRequest.java
new file mode 100644
index 0000000..0446ba2
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/util/HttpRequest.java
@@ -0,0 +1,196 @@
+package cc.mrbird.febs.pay.util;
+
+import javax.net.ssl.HttpsURLConnection;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Map;
+
+public class HttpRequest {
+ public static final String SEND_POST = "POST";
+ public static final String SEND_GET = "GET";
+ private HttpRequest() {
+ }
+
+ public static HttpRequest createHttpRequest() {
+ return new HttpRequest();
+ }
+
+ public HttpResponse sendHttpGet(String urlString, Map<String, String> params) throws IOException {
+
+ if (params != null) {
+ StringBuffer param = new StringBuffer();
+ int i = 0;
+ for (String key : params.keySet()) {
+ if (i == 0)
+ param.append("?");
+ else
+ param.append("&");
+ param.append(key).append("=").append((String) params.get(key));
+ i++;
+ }
+ urlString = urlString + param;
+ }
+ URL url = new URL(urlString);
+ HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
+ urlConnection.setRequestMethod("GET");
+ urlConnection.setDoOutput(true);
+ urlConnection.setDoInput(true);
+ urlConnection.setUseCaches(false);
+
+ HttpResponse response = new HttpResponse();
+ response.setInputStream(urlConnection.getInputStream());
+ response.setContentType(urlConnection.getContentType());
+ response.setContentLength(urlConnection.getContentLength());
+
+ response.setFileName(urlConnection.getRequestProperty("filename"));
+ return response;
+ }
+
+ public HttpResponse sendHttpPost(String urlString, Map<String, String> params, String filePath, String contentType)
+ throws IOException {
+ if (params != null) {
+ StringBuffer param = new StringBuffer();
+ int i = 0;
+ for (String key : params.keySet()) {
+ if (i == 0)
+ param.append("?");
+ else
+ param.append("&");
+ param.append(key).append("=").append((String) params.get(key));
+ i++;
+ }
+ urlString = urlString + param;
+ }
+
+ URL url = new URL(urlString);
+ HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
+
+ urlConnection.setRequestMethod("POST");
+ urlConnection.setDoOutput(true);
+ urlConnection.setDoInput(true);
+ urlConnection.setUseCaches(false);
+
+ File file = new File(filePath);
+
+ urlConnection.setRequestProperty("Connection", "Keep-Alive");
+ urlConnection.setRequestProperty("Charset", "UTF-8");
+
+ String BOUNDARY = "----------" + System.currentTimeMillis();
+ urlConnection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("--");
+ sb.append(BOUNDARY);
+ sb.append("\r\n");
+ sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n");
+ sb.append("Content-Type:application/octet-stream\r\n\r\n");
+
+ byte[] head = sb.toString().getBytes("utf-8");
+
+ OutputStream out1 = new DataOutputStream(urlConnection.getOutputStream());
+
+ out1.write(head);
+
+ DataInputStream in1 = new DataInputStream(new FileInputStream(file));
+ int bytes = 0;
+ byte[] bufferOut = new byte[1024];
+ while ((bytes = in1.read(bufferOut)) != -1) {
+ out1.write(bufferOut, 0, bytes);
+ }
+ in1.close();
+
+ byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");
+
+ out1.write(foot);
+
+ out1.flush();
+ out1.close();
+
+ FileInputStream in = new FileInputStream(file);
+
+ OutputStream out = urlConnection.getOutputStream();
+ byte[] buf = new byte[1024];
+ int hasRead = 0;
+ while ((hasRead = in.read(buf)) > 0) {
+ out.write(buf, 0, hasRead);
+ }
+ in.close();
+ out.flush();
+ out.close();
+
+ HttpResponse response = new HttpResponse();
+ response.setInputStream(urlConnection.getInputStream());
+
+ return response;
+ }
+
+ public HttpResponse sendHttpsGet(String urlString, Map<String, String> params) throws IOException {
+ if (params != null) {
+ StringBuffer param = new StringBuffer();
+ int i = 0;
+ for (String key : params.keySet()) {
+ if (i == 0)
+ param.append("?");
+ else
+ param.append("&");
+ param.append(key).append("=").append((String) params.get(key));
+ i++;
+ }
+ urlString = urlString + param;
+ }
+
+ URL url = new URL(urlString);
+ HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
+
+ urlConnection.setRequestMethod("GET");
+ urlConnection.setDoOutput(true);
+ urlConnection.setDoInput(true);
+ urlConnection.setUseCaches(false);
+
+ HttpResponse response = new HttpResponse();
+ response.setInputStream(urlConnection.getInputStream());
+ response.setContentType(urlConnection.getContentType());
+ response.setContentLength(urlConnection.getContentLength());
+
+ return response;
+ }
+
+ public HttpResponse sendHttpsPost(String urlString, Map<String, String> params, String sendData)
+ throws IOException {
+ if (params != null) {
+ StringBuffer param = new StringBuffer();
+ int i = 0;
+ for (String key : params.keySet()) {
+ if (i == 0)
+ param.append("?");
+ else
+ param.append("&");
+ param.append(key).append("=").append((String) params.get(key));
+ i++;
+ }
+ urlString = urlString + param;
+ }
+
+ URL url = new URL(urlString);
+ HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
+
+ urlConnection.setRequestMethod("POST");
+ urlConnection.setDoOutput(true);
+ urlConnection.setDoInput(true);
+ urlConnection.setUseCaches(false);
+
+ if (sendData != null) {
+ urlConnection.getOutputStream().write(sendData.getBytes("utf-8"));
+ urlConnection.getOutputStream().flush();
+ urlConnection.getOutputStream().close();
+ }
+
+ HttpResponse response = new HttpResponse();
+ response.setInputStream(urlConnection.getInputStream());
+ response.setContentType(urlConnection.getContentType());
+ response.setContentLength(urlConnection.getContentLength());
+
+ return response;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/util/HttpResponse.java b/src/main/java/cc/mrbird/febs/pay/util/HttpResponse.java
new file mode 100644
index 0000000..314f7b1
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/util/HttpResponse.java
@@ -0,0 +1,58 @@
+package cc.mrbird.febs.pay.util;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+public class HttpResponse {
+ private InputStream inputStream;
+ private String fileName;
+ private String contentType;
+ private int contentLength;
+ public String getFileName() {
+ return this.fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public InputStream getInputStream() {
+ return this.inputStream;
+ }
+
+ public void setInputStream(InputStream inputStream) {
+ this.inputStream = inputStream;
+ }
+
+ public String getContentType() {
+ return this.contentType;
+ }
+
+ public void setContentType(String contentType) {
+ this.contentType = contentType;
+ }
+
+ public int getContentLength() {
+ return this.contentLength;
+ }
+
+ public void setContentLength(int contentLength) {
+ this.contentLength = contentLength;
+ }
+
+ public String getDataString() {
+ StringBuilder sb = new StringBuilder();
+ try {
+ InputStreamReader isr = new InputStreamReader(getInputStream(), "utf-8");
+ char[] cbuf = new char[1024];
+ int hasRead = 0;
+ while ((hasRead = isr.read(cbuf)) > 0) {
+ sb.append(cbuf, 0, hasRead);
+ }
+ isr.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return sb.toString();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cc/mrbird/febs/pay/util/HttpsRequest.java b/src/main/java/cc/mrbird/febs/pay/util/HttpsRequest.java
new file mode 100644
index 0000000..a9b3a2d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/util/HttpsRequest.java
@@ -0,0 +1,186 @@
+package cc.mrbird.febs.pay.util;
+
+import cc.mrbird.febs.pay.service.IServiceRequest;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ConnectTimeoutException;
+import org.apache.http.conn.ConnectionPoolTimeoutException;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.net.SocketTimeoutException;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+
+/**
+ * User: rizenguo
+ * Date: 2014/10/29
+ * Time: 14:36
+ */
+public class HttpsRequest implements IServiceRequest {
+
+ public interface ResultListener {
+
+
+ public void onConnectionPoolTimeoutError();
+
+ }
+
+ //表示请求器是否已经做了初始化工作
+ private boolean hasInit = false;
+
+ //连接超时时间,默认10秒
+ private int socketTimeout = 10000;
+
+ //传输超时时间,默认30秒
+ private int connectTimeout = 30000;
+
+ //请求器的配置
+ private RequestConfig requestConfig;
+
+ //HTTP请求器
+ private CloseableHttpClient httpClient;
+
+ public HttpsRequest() throws UnrecoverableKeyException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException, IOException {
+ init();
+ }
+
+ private void init() throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyManagementException {
+
+ /* KeyStore keyStore = KeyStore.getInstance("PKCS12");
+ FileInputStream instream = new FileInputStream(new File(Configure.getCertLocalPath()));//加载本地的证书进行https加密传输
+ try {
+ keyStore.load(instream, Configure.getCertPassword().toCharArray());//设置证书密码
+ } catch (CertificateException e) {
+ e.printStackTrace();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ } finally {
+ instream.close();
+ }
+
+ // Trust own CA and all self-signed certs
+ SSLContext sslcontext = SSLContexts.custom()
+ .loadKeyMaterial(keyStore, Configure.getCertPassword().toCharArray())
+ .build();
+ // Allow TLSv1 protocol only
+ SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
+ sslcontext,
+ new String[]{"TLSv1"},
+ null,
+ SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+*/
+ httpClient = HttpClients.custom().build();
+ //根据默认超时限制初始化requestConfig
+ requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();
+ hasInit = true;
+ }
+
+ /**
+ * 通过Https往API post xml数据
+ *
+ * @param url API地址
+ * @param xmlObj 要提交的XML数据对象
+ * @return API回包的实际数据
+ * @throws IOException
+ * @throws KeyStoreException
+ * @throws UnrecoverableKeyException
+ * @throws NoSuchAlgorithmException
+ * @throws KeyManagementException
+ */
+
+ public String sendPost(String url, Object xmlObj) throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyManagementException {
+
+ if (!hasInit) {
+ init();
+ }
+
+ String result = null;
+
+ HttpPost httpPost = new HttpPost(url);
+
+ //解决XStream对出现双下划线的bug
+ XStream xStreamForRequestPostData = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));
+
+ //将要提交给API的数据对象转换成XML格式数据Post给API
+ String postDataXML = xStreamForRequestPostData.toXML(xmlObj);
+
+ //得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别
+ StringEntity postEntity = new StringEntity(postDataXML, "UTF-8");
+ httpPost.addHeader("Content-Type", "text/xml");
+ httpPost.setEntity(postEntity);
+
+ //设置请求器的配置
+ httpPost.setConfig(requestConfig);
+
+
+ try {
+ HttpResponse response = httpClient.execute(httpPost);
+
+ HttpEntity entity = response.getEntity();
+
+ result = EntityUtils.toString(entity, "UTF-8");
+
+ } catch (ConnectionPoolTimeoutException e) {
+// log.e("http get throw ConnectionPoolTimeoutException(wait time out)");
+
+ } catch (ConnectTimeoutException e) {
+// log.e("http get throw ConnectTimeoutException");
+
+ } catch (SocketTimeoutException e) {
+// log.e("http get throw SocketTimeoutException");
+
+ } catch (Exception e) {
+ e.printStackTrace();
+// log.e("http get throw Exception");
+
+ } finally {
+ httpPost.abort();
+ }
+
+ return result;
+ }
+
+ /**
+ * 设置连接超时时间
+ *
+ * @param socketTimeout 连接时长,默认10秒
+ */
+ public void setSocketTimeout(int socketTimeout) {
+ this.socketTimeout = socketTimeout;
+ resetRequestConfig();
+ }
+
+ /**
+ * 设置传输超时时间
+ *
+ * @param connectTimeout 传输时长,默认30秒
+ */
+ public void setConnectTimeout(int connectTimeout) {
+ this.connectTimeout = connectTimeout;
+ resetRequestConfig();
+ }
+
+ private void resetRequestConfig(){
+ requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();
+ }
+
+ /**
+ * 允许商户自己做更高级更复杂的请求器配置
+ *
+ * @param requestConfig 设置HttpsRequest的请求器配置
+ */
+ public void setRequestConfig(RequestConfig requestConfig) {
+ this.requestConfig = requestConfig;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/util/HttpsRequest2.java b/src/main/java/cc/mrbird/febs/pay/util/HttpsRequest2.java
new file mode 100644
index 0000000..ace9851
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/util/HttpsRequest2.java
@@ -0,0 +1,213 @@
+package cc.mrbird.febs.pay.util;
+
+import cc.mrbird.febs.pay.service.IServiceRequest;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ConnectTimeoutException;
+import org.apache.http.conn.ConnectionPoolTimeoutException;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLContexts;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+import javax.net.ssl.SSLContext;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.SocketTimeoutException;
+import java.security.*;
+import java.security.cert.CertificateException;
+
+/**
+ * User: rizenguo
+ * Date: 2014/10/29
+ * Time: 14:36
+ */
+public class HttpsRequest2 implements IServiceRequest {
+
+ public interface ResultListener {
+
+
+ public void onConnectionPoolTimeoutError();
+
+ }
+
+ //表示请求器是否已经做了初始化工作
+ private boolean hasInit = false;
+
+ //连接超时时间,默认10秒
+ private int socketTimeout = 10000;
+
+ //传输超时时间,默认30秒
+ private int connectTimeout = 30000;
+
+ //请求器的配置
+ private RequestConfig requestConfig;
+
+ //HTTP请求器
+ private CloseableHttpClient httpClient;
+ //证书地址
+ private String certLocalPath;
+ //商户号
+ private String mchId;
+
+ public HttpsRequest2() throws UnrecoverableKeyException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException, IOException {
+
+ }
+
+ private void init() throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyManagementException {
+
+ KeyStore keyStore = KeyStore.getInstance("PKCS12");
+ FileInputStream instream = new FileInputStream(new File(certLocalPath));//加载本地的证书进行https加密传输
+ try {
+ keyStore.load(instream, mchId.toCharArray());//设置证书密码
+ } catch (CertificateException e) {
+ e.printStackTrace();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ } finally {
+ instream.close();
+ }
+ // Trust own CA and all self-signed certs
+ SSLContext sslcontext = SSLContexts.custom()
+ .loadKeyMaterial(keyStore, mchId.toCharArray())
+ .build();
+ // Allow TLSv1 protocol only
+ SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
+ sslcontext,
+ new String[]{"TLSv1"},
+ null,
+ SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+
+
+ httpClient = HttpClients.custom()
+ .setSSLSocketFactory(sslsf)
+ .build();
+ // httpClient = HttpClients.custom().build();
+ //根据默认超时限制初始化requestConfig
+ requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();
+ hasInit = true;
+ }
+
+ /**
+ * 通过Https往API post xml数据
+ *
+ * @param url API地址
+ * @param xmlObj 要提交的XML数据对象
+ * @return API回包的实际数据
+ * @throws IOException
+ * @throws KeyStoreException
+ * @throws UnrecoverableKeyException
+ * @throws NoSuchAlgorithmException
+ * @throws KeyManagementException
+ */
+
+ public String sendPost(String url, Object xmlObj) throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyManagementException {
+
+ if (!hasInit) {
+ init();
+ }
+
+ String result = null;
+
+ HttpPost httpPost = new HttpPost(url);
+
+ //解决XStream对出现双下划线的bug
+ XStream xStreamForRequestPostData = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));
+
+ //将要提交给API的数据对象转换成XML格式数据Post给API
+ String postDataXML = xStreamForRequestPostData.toXML(xmlObj);
+
+ //得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别
+ StringEntity postEntity = new StringEntity(postDataXML, "UTF-8");
+ httpPost.addHeader("Content-Type", "text/xml");
+ httpPost.setEntity(postEntity);
+
+ //设置请求器的配置
+ httpPost.setConfig(requestConfig);
+
+
+ try {
+ HttpResponse response = httpClient.execute(httpPost);
+
+ HttpEntity entity = response.getEntity();
+
+ result = EntityUtils.toString(entity, "UTF-8");
+
+ } catch (ConnectionPoolTimeoutException e) {
+// log.e("http get throw ConnectionPoolTimeoutException(wait time out)");
+
+ } catch (ConnectTimeoutException e) {
+// log.e("http get throw ConnectTimeoutException");
+
+ } catch (SocketTimeoutException e) {
+// log.e("http get throw SocketTimeoutException");
+
+ } catch (Exception e) {
+ e.printStackTrace();
+// log.e("http get throw Exception");
+
+ } finally {
+ httpPost.abort();
+ }
+
+ return result;
+ }
+
+ /**
+ * 设置连接超时时间
+ *
+ * @param socketTimeout 连接时长,默认10秒
+ */
+ public void setSocketTimeout(int socketTimeout) {
+ this.socketTimeout = socketTimeout;
+ resetRequestConfig();
+ }
+
+ /**
+ * 设置传输超时时间
+ *
+ * @param connectTimeout 传输时长,默认30秒
+ */
+ public void setConnectTimeout(int connectTimeout) {
+ this.connectTimeout = connectTimeout;
+ resetRequestConfig();
+ }
+
+ private void resetRequestConfig(){
+ requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();
+ }
+
+ /**
+ * 允许商户自己做更高级更复杂的请求器配置
+ *
+ * @param requestConfig 设置HttpsRequest的请求器配置
+ */
+ public void setRequestConfig(RequestConfig requestConfig) {
+ this.requestConfig = requestConfig;
+ }
+
+
+ public String getMchId() {
+ return mchId;
+ }
+
+ public void setMchId(String mchId) {
+ this.mchId = mchId;
+ }
+
+ public String getCertLocalPath() {
+ return certLocalPath;
+ }
+
+ public void setCertLocalPath(String certLocalPath) {
+ this.certLocalPath = certLocalPath;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/util/WechatConfigure.java b/src/main/java/cc/mrbird/febs/pay/util/WechatConfigure.java
index f69cd9f..ab2a6ef 100644
--- a/src/main/java/cc/mrbird/febs/pay/util/WechatConfigure.java
+++ b/src/main/java/cc/mrbird/febs/pay/util/WechatConfigure.java
@@ -7,18 +7,23 @@
/**
* 发送http请求类
*/
- public static String HttpsRequestClassName = "com.matrix.component.wechat.externalInterface.common.HttpsRequest";
+ public static String HttpsRequestClassName = "cc.mrbird.febs.pay.util.HttpsRequest";
+
public static final String TRADE_TYPE_JSAPI = "JSAPI";
- // 2)被扫支付查询API
+ /**
+ * 发送 SSL请求,企业付款,退款用
+ */
+ public static String HttpsRequestClassName2 = "cc.mrbird.febs.pay.util.HttpsRequest2";
+
+ // 被扫支付查询API
public static String PAY_QUERY_API = "https://api.mch.weixin.qq.com/pay/orderquery";
-
-
/**
* 微信商户号
*/
public static final String WECHARPAY_MCHID = "1605533690";
+
/**
* 支付秘钥
*/
@@ -28,21 +33,18 @@
* 小程序APPID
*/
public static final String MINIPROGRAM_APPID = "wx5cc58f796224af61";
- // 8) 企业付款API
+
+ // 企业付款API
public static String COM_PAY_API="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
- /**
- * 发送 SSL请求,企业付款,退款用
- */
- public static String HttpsRequestClassName2 = "com.matrix.component.wechat.externalInterface.common.HttpsRequest2";
-
- // 3)退款API
+ // 退款API
public static String REFUND_API = "https://api.mch.weixin.qq.com/secapi/pay/refund";
/**
* 成功
*/
public static final String CODE_SUCCESS = "SUCCESS";
+
/**
* SUCCESS报文
*/
diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml
index 94ea777..dd74bb6 100644
--- a/src/main/resources/mapper/modules/MallMemberMapper.xml
+++ b/src/main/resources/mapper/modules/MallMemberMapper.xml
@@ -33,7 +33,7 @@
</if>
</if>
</where>
- order by m.CREATED_TIME desc
+ GROUP BY m.id order by m.CREATED_TIME desc
</select>
<select id="getMallMemberInfoById" resultType="cc.mrbird.febs.mall.vo.MallMemberVo">
diff --git a/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml b/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
index b80a2d7..d15f0f8 100644
--- a/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
+++ b/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
@@ -146,7 +146,7 @@
select
a.*
from mall_team_leader a
- where a.unique_code = #{uniqueCode} limit 1
+ where a.unique_code = #{uniqueCode} and a.state = 1 limit 1
</select>
<select id="selectLeaderByLonAndLat" resultType="cc.mrbird.febs.mall.entity.MallTeamLeader">
diff --git a/src/main/resources/templates/febs/views/modules/leader/leaderList.html b/src/main/resources/templates/febs/views/modules/leader/leaderList.html
index 74430e9..841d023 100644
--- a/src/main/resources/templates/febs/views/modules/leader/leaderList.html
+++ b/src/main/resources/templates/febs/views/modules/leader/leaderList.html
@@ -20,6 +20,7 @@
<option value="1">通过</option>
<option value="2">不通过</option>
<option value="3">申请中</option>
+ <option value="4">取消</option>
</select>
</div>
</div>
@@ -97,6 +98,11 @@
}
});
}
+ if (layEvent === 'leaderCancel') {
+ febs.modal.confirm('取消', '确认取消该团长?', function () {
+ leaderCancel(data.id);
+ });
+ }
if (layEvent === 'seeImgThumb') {
var t = $view.find('#seeImgThumb'+data.id+'');
//页面层
@@ -113,6 +119,13 @@
});
}
});
+
+ function leaderCancel(id) {
+ febs.get(ctx + 'admin/leader/leaderCancel/' + id, null, function () {
+ febs.alert.success('操作成功');
+ $query.click();
+ });
+ }
// 查询按钮
$query.on('click', function () {
@@ -148,6 +161,8 @@
return '<span style="color:red;">拒绝</span>'
}else if (d.state === 3) {
return '<span style="color:blue;">待审核</span>'
+ }else if (d.state === 4) {
+ return '<span style="color:blue;">已取消</span>'
}else{
return ''
}
@@ -157,6 +172,9 @@
if (d.state === 3) {
return ''
+ '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="leaderUpdate" shiro:hasPermission="user:update">审核</button>'
+ }else if(d.state === 1) {
+ return ''
+ + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="leaderCancel" shiro:hasPermission="user:update">取消</button>'
}else{
return '';
}
--
Gitblit v1.9.1