Browse Source

Merge branches 'dev' and 'dev_heart' of http://git.elinkit.com.cn:7070/r/epmet-cloud into dev_heart

 Conflicts:
	epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java
	epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java
	epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java
master
yinzuomei 5 years ago
parent
commit
cd90485f19
  1. 2
      epmet-auth/deploy/docker-compose-dev.yml
  2. 4
      epmet-auth/pom.xml
  3. 6
      epmet-auth/src/main/java/com/epmet/dto/form/GovWxmpEnteOrgFormDTO.java
  4. 30
      epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java
  5. 37
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/FileUtils.java
  6. 80
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java
  7. 33
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/InputStreamResponseHandler.java
  8. 33
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/Utf8ResponseHandler.java
  9. 18
      epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/QrCodeDTO.java
  10. 27
      epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/OssFeignClient.java
  11. 13
      epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/fallback/OssFeignClientFallback.java
  12. 15
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java
  13. 5
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CodeCustomerDTO.java
  14. 5
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CodeCommonFormDTO.java
  15. 25
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/OpenAppIdFormDTO.java
  16. 26
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/RemoveBindFormDTO.java
  17. 2
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SubmitAuditFormDTO.java
  18. 2
      epmet-module/epmet-third/epmet-third-server/deploy/docker-compose-dev.yml
  19. 2
      epmet-module/epmet-third/epmet-third-server/pom.xml
  20. 26
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/AppLetAuthorizationController.java
  21. 4
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CodeController.java
  22. 4
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/WarrantController.java
  23. 9
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/BindingAccountDao.java
  24. 10
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/CustomerMpDao.java
  25. 6
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CodeCustomerEntity.java
  26. 11
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/redis/RedisThird.java
  27. 17
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/AppLetAuthorizationService.java
  28. 2
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/WarrantService.java
  29. 77
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/AppLetAuthorizationServiceImpl.java
  30. 93
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CodeServiceImpl.java
  31. 8
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ComponentVerifyTicketServiceImpl.java
  32. 5
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/WarrantServiceImpl.java
  33. 10
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxMaCodeConstant.java
  34. 2
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/param/WxMaCodeSubmitAuditRequest.java
  35. 2
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxMaCodeService.java
  36. 8
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxLoginServiceImpl.java
  37. 10
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxMaCodeServiceImpl.java
  38. 9
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/BindingAccountDao.xml
  39. 2
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CodeOperationHistoryDao.xml
  40. 19
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CustomerMpDao.xml
  41. 11
      epmet-module/gov-mine/gov-mine-client/src/main/java/com/epmet/dto/form/GovFootBarFormDTO.java
  42. 2
      epmet-module/gov-mine/gov-mine-server/deploy/docker-compose-dev.yml
  43. 2
      epmet-module/gov-mine/gov-mine-server/pom.xml
  44. 18
      epmet-module/gov-mine/gov-mine-server/src/main/java/com/epmet/controller/AppController.java
  45. 21
      epmet-module/gov-mine/gov-mine-server/src/main/java/com/epmet/feign/OperCustomizeFeignClient.java
  46. 22
      epmet-module/gov-mine/gov-mine-server/src/main/java/com/epmet/feign/fallback/OperCustomizeFeignClientFallBack.java
  47. 2
      epmet-module/oper-crm/oper-crm-server/deploy/docker-compose-dev.yml
  48. 2
      epmet-module/oper-crm/oper-crm-server/deploy/docker-compose-test.yml
  49. 2
      epmet-module/oper-crm/oper-crm-server/pom.xml
  50. 2
      epmet-module/oper-crm/oper-crm-server/src/main/java/com/epmet/controller/CustomerController.java
  51. 5
      epmet-module/oper-crm/oper-crm-server/src/main/java/com/epmet/service/impl/CustomerServiceImpl.java
  52. 4
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/CustomerFootBarFormDTO.java
  53. 14
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java
  54. 9
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java
  55. 2
      epmet-module/oper-customize/oper-customize-server/deploy/docker-compose-dev.yml
  56. 2
      epmet-module/oper-customize/oper-customize-server/pom.xml
  57. 4
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/CustomerFootBarController.java
  58. 3
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/CustomerFootBarDao.java
  59. 4
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/CustomerFootBarEntity.java
  60. 2
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/CustomerFootBarService.java
  61. 4
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/CustomerFootBarServiceImpl.java
  62. 11
      epmet-module/oper-customize/oper-customize-server/src/main/resources/db/migration/V0.0.2__add_footbar_columns.sql
  63. 22
      epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/CustomerFootBarDao.xml
  64. 10
      epmet-module/resi-mine/resi-mine-client/src/main/java/com/epmet/resi/mine/dto/from/ResiFootBarFormDTO.java
  65. 2
      epmet-module/resi-mine/resi-mine-server/deploy/docker-compose-dev.yml
  66. 9
      epmet-module/resi-mine/resi-mine-server/pom.xml
  67. 39
      epmet-module/resi-mine/resi-mine-server/src/main/java/com/epmet/modules/app/controller/AppController.java
  68. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/constant/RoleKeyConstants.java
  69. 2
      epmet-user/epmet-user-server/deploy/docker-compose-dev.yml
  70. 2
      epmet-user/epmet-user-server/deploy/docker-compose-test.yml
  71. 2
      epmet-user/epmet-user-server/pom.xml
  72. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/StaffRoleDao.java
  73. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/StaffRoleService.java
  74. 30
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerStaffServiceImpl.java
  75. 8
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/StaffRoleServiceImpl.java
  76. 1
      epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.4__add_rootmanager.sql
  77. 18
      epmet-user/epmet-user-server/src/main/resources/mapper/StaffRoleDao.xml

2
epmet-auth/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
epmet-auth-server:
container_name: epmet-auth-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-auth:0.3.44
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-auth:0.3.48
ports:
- "8081:8081"
network_mode: host # 使用现有网络

4
epmet-auth/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.44</version>
<version>0.3.48</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>epmet-cloud</artifactId>
@ -182,6 +182,8 @@
<!--政府端小程序配置-->
<gov.wx.ma.appId>wx3d1372029eb816a3</gov.wx.ma.appId>
<gov.wx.ma.secret>651f02d71ed3f123dfb584b8bf0f4d8b</gov.wx.ma.secret>
<!--<gov.wx.ma.appId>wx2679392c4cc2af22</gov.wx.ma.appId>
<gov.wx.ma.secret>e5e72147737cfeb2b0f3a43624cadb3f</gov.wx.ma.secret>-->
</properties>
</profile>

6
epmet-auth/src/main/java/com/epmet/dto/form/GovWxmpEnteOrgFormDTO.java

@ -38,5 +38,11 @@ public class GovWxmpEnteOrgFormDTO implements Serializable {
*/
@NotBlank(message = "组织id不能为空",groups = {AddUserInternalGroup.class})
private String rootAgencyId;
/**
* 客户appIdexJson文件中获取
*/
@NotBlank(message = "appId不能为空",groups = {AddUserInternalGroup.class})
private String appId;
}

30
epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java

@ -19,12 +19,10 @@ import com.epmet.constant.SmsTemplateConstant;
import com.epmet.dto.CustomerAgencyDTO;
import com.epmet.dto.CustomerStaffDTO;
import com.epmet.dto.GovStaffRoleDTO;
import com.epmet.dto.UserWechatDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.EpmetUserFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgFeignClient;
import com.epmet.feign.*;
import com.epmet.jwt.JwtTokenProperties;
import com.epmet.jwt.JwtTokenUtils;
import com.epmet.redis.CaptchaRedis;
@ -67,6 +65,8 @@ public class GovLoginServiceImpl implements GovLoginService {
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Autowired
private EpmetUserOpenFeignClient userOpenFeignClient;
@Autowired
private EpmetThirdFeignClient epmetThirdFeignClient;
/**
* @param formDTO
@ -272,8 +272,24 @@ public class GovLoginServiceImpl implements GovLoginService {
throw new RenException(customerStaffDTOResult.getCode());
}
CustomerStaffDTO customerStaff = customerStaffDTOResult.getData();
//2、解析微信用户
WxMaJscode2SessionResult wxMaJscode2SessionResult = loginService.getWxMaUser(LoginConstant.APP_GOV, formDTO.getWxCode());
/*//2、解析微信用户
WxMaJscode2SessionResult wxMaJscode2SessionResult = loginService.getWxMaUser(LoginConstant.APP_GOV, formDTO.getWxCode());*/
//2020.7.24 获取微信信息接口调整,改调用微信api的方式 sun
//2.调用epmet_third服务,校验appId是否有效以及是否授权,校验通过的调用微信API获取用户基本信息
WxLoginFormDTO resiLoginFormDTO = new WxLoginFormDTO();
resiLoginFormDTO.setAppId(formDTO.getAppId());
resiLoginFormDTO.setWxCode(formDTO.getWxCode());
Result<UserWechatDTO> result = epmetThirdFeignClient.resiAndWorkLogin(resiLoginFormDTO);
if (!result.success()) {
logger.error("工作端小程序登陆,调用epmet_third服务获取数据失败");
throw new RenException(result.getCode());
}
UserWechatDTO userWechatDTO = result.getData();
WxMaJscode2SessionResult wxMaJscode2SessionResult = new WxMaJscode2SessionResult();
wxMaJscode2SessionResult.setOpenid(userWechatDTO.getWxOpenId());
wxMaJscode2SessionResult.setSessionKey(userWechatDTO.getSessionKey());
wxMaJscode2SessionResult.setUnionid("");
//3、记录staff_wechat,并记录用户激活状态,激活时间
this.savestaffwechat(customerStaff.getUserId(), wxMaJscode2SessionResult.getOpenid());
//4、记录登录日志
@ -437,7 +453,7 @@ public class GovLoginServiceImpl implements GovLoginService {
govTokenDto.setUserId(staffId);
govTokenDto.setOpenId(wxMaJscode2SessionResult.getOpenid());
govTokenDto.setSessionKey(wxMaJscode2SessionResult.getSessionKey());
govTokenDto.setUnionId(wxMaJscode2SessionResult.getUnionid());
govTokenDto.setUnionId(null == wxMaJscode2SessionResult.getUnionid() ? "" : wxMaJscode2SessionResult.getUnionid());
govTokenDto.setToken(token);
govTokenDto.setUpdateTime(System.currentTimeMillis());
govTokenDto.setExpireTime(jwtTokenUtils.getExpiration(token).getTime());

37
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/FileUtils.java

@ -0,0 +1,37 @@
package com.epmet.commons.tools.utils;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
public class FileUtils {
/**
* 创建临时文件.
*
* @param inputStream 输入文件流
* @param name 文件名
* @param ext 扩展名
* @param tmpDirFile 临时文件夹目录
*/
public static File createTmpFile(InputStream inputStream, String name, String ext, File tmpDirFile) throws IOException {
File resultFile = File.createTempFile(name, '.' + ext, tmpDirFile);
resultFile.deleteOnExit();
org.apache.commons.io.FileUtils.copyToFile(inputStream, resultFile);
return resultFile;
}
/**
* 创建临时文件.
*
* @param inputStream 输入文件流
* @param name 文件名
* @param ext 扩展名
*/
public static File createTmpFile(InputStream inputStream, String name, String ext) throws IOException {
return createTmpFile(inputStream, name, ext, Files.createTempDirectory("weixin-java-tools-temp").toFile());
}
}

80
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java

@ -8,9 +8,8 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.*;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
@ -52,6 +51,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
/**
* desc: http 工具类
@ -314,7 +314,7 @@ public class HttpClientManager {
*
* @author: jianjun liu
*/
public Result<Byte[]> sendGetFile(String url, Map<String, Object> params) {
public Result<File> sendGetFile(String url, Map<String, Object> params) {
try {
URIBuilder builder = new URIBuilder(url);
@ -329,11 +329,73 @@ public class HttpClientManager {
return executeToByte(httpGet);
} catch (Exception e) {
log.error("sendGet exception", e);
return new Result<Byte[]>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
return new Result<File>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
private Result<Byte[]> executeToByte(HttpRequestBase httpMethod) {
private Result<File> executeToByte(HttpRequestBase httpMethod) {
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpMethod);
log.debug("http send response:{}", JSON.toJSONString(response));
if (response != null && response.getStatusLine() != null) {
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
InputStream inputStream = InputStreamResponseHandler.INSTANCE.handleResponse(response);
Header[] contentTypeHeader = response.getHeaders("Content-Type");
if (contentTypeHeader != null && contentTypeHeader.length > 0) {
// 出错
if (ContentType.TEXT_PLAIN.getMimeType()
.equals(ContentType.parse(contentTypeHeader[0].getValue()).getMimeType())) {
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
}
}
File file = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), "jpg");
return new Result<File>().ok(file);
} else {
log.warn("execute http method fail,httpStatus:{0}", response.getStatusLine().getStatusCode());
}
}
} catch (Exception e) {
log.error("execute exception", e);
return new Result<File>().error(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage());
} finally {
httpMethod.releaseConnection();
try {
if (response != null) {
response.close();
}
} catch (IOException e) {
}
}
return new Result<File>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
/**
* 获取下载文件的字节数组
* @param url
* @param params
* @return
*/
public Result<byte[]> getDownloadFilebytes(String url, Map<String, Object> params) {
try {
URIBuilder builder = new URIBuilder(url);
if (!CollectionUtils.isEmpty(params)) {
Set<String> set = params.keySet();
for (String key : set) {
builder.setParameter(key, params.get(key) == null ? "" : String.valueOf(params.get(key)));
}
}
HttpGet httpGet = new HttpGet(builder.build());
httpGet.setConfig(requestConfig);
return executeTobyte(httpGet);
} catch (Exception e) {
log.error("sendGet exception", e);
return new Result<byte[]>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
private Result<byte[]> executeTobyte(HttpRequestBase httpMethod) {
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpMethod);
@ -347,14 +409,14 @@ public class HttpClientManager {
while (-1 != (n = in.read(buffer))) {
output.write(buffer, 0, n);
}
return new Result<Byte[]>().ok(ArrayUtils.toObject(output.toByteArray()));
return new Result<byte[]>().ok(output.toByteArray());
} else {
log.warn("execute http method fail,httpStatus:{0}", response.getStatusLine().getStatusCode());
}
}
} catch (Exception e) {
log.error("execute exception", e);
return new Result<Byte[]>().error(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage());
return new Result<byte[]>().error(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage());
} finally {
httpMethod.releaseConnection();
try {
@ -364,7 +426,7 @@ public class HttpClientManager {
} catch (IOException e) {
}
}
return new Result<Byte[]>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
return new Result<byte[]>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
private static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException {

33
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/InputStreamResponseHandler.java

@ -0,0 +1,33 @@
package com.epmet.commons.tools.utils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.InputStream;
/**
* 输入流响应处理器.
*
* @author Daniel Qian
*/
public class InputStreamResponseHandler implements ResponseHandler<InputStream> {
public static final ResponseHandler<InputStream> INSTANCE = new InputStreamResponseHandler();
private static final int STATUS_CODE_300 = 300;
@Override
public InputStream handleResponse(final HttpResponse response) throws IOException {
final StatusLine statusLine = response.getStatusLine();
final HttpEntity entity = response.getEntity();
if (statusLine.getStatusCode() >= STATUS_CODE_300) {
EntityUtils.consume(entity);
throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase());
}
return entity == null ? null : entity.getContent();
}
}

33
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/Utf8ResponseHandler.java

@ -0,0 +1,33 @@
package com.epmet.commons.tools.utils;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
/**
* copy from {@link org.apache.http.impl.client.BasicResponseHandler}
*
* @author Daniel Qian
*/
public class Utf8ResponseHandler implements ResponseHandler<String> {
public static final ResponseHandler<String> INSTANCE = new Utf8ResponseHandler();
@Override
public String handleResponse(final HttpResponse response) throws IOException {
final StatusLine statusLine = response.getStatusLine();
final HttpEntity entity = response.getEntity();
if (statusLine.getStatusCode() >= 300) {
EntityUtils.consume(entity);
throw new HttpResponseException(statusLine.getStatusCode(), statusLine.toString());
}
return entity == null ? null : EntityUtils.toString(entity, Consts.UTF_8);
}
}

18
epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/QrCodeDTO.java

@ -0,0 +1,18 @@
package com.epmet.dto;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/7/24 10:10
*/
@Data
public class QrCodeDTO implements Serializable {
private static final long serialVersionUID = -1787470699926486609L;
private byte[] qrCode;
private MultipartFile media;
}

27
epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/OssFeignClient.java

@ -9,16 +9,13 @@
package com.epmet.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.UploadDTO;
import com.epmet.dto.QrCodeDTO;
import com.epmet.dto.result.UploadImgResultDTO;
import com.epmet.feign.fallback.OssFeignClientFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
/**
* OSS
@ -26,22 +23,18 @@ import org.springframework.web.multipart.MultipartFile;
* @author Mark sunlightcs@gmail.c om
* @since 1.1.0
*/
@FeignClient(name = ServiceConstant.EPMET_OSS_SERVER, configuration = OssFeignClient.MultipartSupportConfig.class)
@FeignClient(name = ServiceConstant.EPMET_OSS_SERVER, fallback = OssFeignClientFallback.class)
public interface OssFeignClient {
/**
* 文件上传
* @param file 文件
* @param dto 文件
* @return 返回路径
*/
@PostMapping(value = "oss/file/upload", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},
consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<UploadDTO> upload(@RequestPart("file") MultipartFile file);
@PostMapping(value = "oss/file/uploadwximg", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<UploadImgResultDTO> uploadWxImg(QrCodeDTO dto);
class MultipartSupportConfig {
@Bean
public Encoder feignFormEncoder() {
return new SpringFormEncoder();
}
}
@PostMapping(value ="oss/file/uploadqrcode", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<UploadImgResultDTO> uploadQrCode(QrCodeDTO dto );
}

13
epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/fallback/OssFeignClientFallback.java

@ -8,8 +8,12 @@
package com.epmet.feign.fallback;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.QrCodeDTO;
import com.epmet.dto.UploadDTO;
import com.epmet.dto.result.UploadImgResultDTO;
import com.epmet.feign.OssFeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
@ -24,7 +28,12 @@ import org.springframework.web.multipart.MultipartFile;
public class OssFeignClientFallback implements OssFeignClient {
@Override
public Result<UploadDTO> upload(MultipartFile file) {
return new Result<UploadDTO>().error();
public Result<UploadImgResultDTO> uploadWxImg(QrCodeDTO dto) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_OSS_SERVER, "uploadWxImg", dto);
}
@Override
public Result<UploadImgResultDTO> uploadQrCode(QrCodeDTO dto) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_OSS_SERVER, "uploadQrCode", dto);
}
}

15
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java

@ -18,6 +18,7 @@ import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AliyunGroup;
import com.epmet.commons.tools.validator.group.QcloudGroup;
import com.epmet.commons.tools.validator.group.QiniuGroup;
import com.epmet.dto.QrCodeDTO;
import com.epmet.dto.UploadDTO;
import com.epmet.dto.result.UploadImgResultDTO;
import com.epmet.entity.OssEntity;
@ -98,7 +99,7 @@ public class OssController {
@PostMapping("upload")
@ApiOperation(value = "上传文件")
public Result<UploadDTO> upload(@RequestParam("file") MultipartFile file) throws Exception {
public Result<UploadDTO> upload(@RequestPart("file") MultipartFile file) throws Exception {
if (file.isEmpty()) {
return new Result<UploadDTO>().error(ModuleErrorCode.UPLOAD_FILE_EMPTY);
}
@ -141,6 +142,18 @@ public class OssController {
return ossService.uploadImg(file);
}
@PostMapping("uploadwximg")
public Result<UploadImgResultDTO> uploadWxImg(QrCodeDTO dto) {
return ossService.uploadImg(dto.getMedia());
}
@PostMapping("uploadqrcode")
public Result<UploadImgResultDTO> uploadQrCode(QrCodeDTO dto) {
String url = OssFactory.build().uploadSuffix(dto.getQrCode(), "jpg");
UploadImgResultDTO result = new UploadImgResultDTO();
result.setUrl(url);
return new Result<UploadImgResultDTO>().ok(result);
}
/**
* 上传客户logo(考虑到以后可能会针对不同的业务有不同的限制条件这里不再使用通用的接口
* 针对每一个业务新建上传接口)

5
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CodeCustomerDTO.java

@ -83,6 +83,11 @@ public class CodeCustomerDTO implements Serializable {
*/
private String status;
/**
* 二维码
*/
private String qrCode;
/**
* 乐观锁
*/

5
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CodeCommonFormDTO.java

@ -20,6 +20,7 @@ public class CodeCommonFormDTO implements Serializable {
* 代码ID
*/
private String codeId;
private Integer page;
private Integer limit;
private String path;
private Integer page = 1;
private Integer limit = 999;
}

25
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/OpenAppIdFormDTO.java

@ -0,0 +1,25 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @CreateTime 2020/7/24 16:31
*/
@Data
public class OpenAppIdFormDTO implements Serializable {
private static final long serialVersionUID = 4181403694668558506L;
/**
* 客户端类型
*/
private String clientType;
/**
* 客户ID
*/
private String customerId;
}

26
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/RemoveBindFormDTO.java

@ -0,0 +1,26 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author zxc
* @CreateTime 2020/7/23 9:09
*/
@Data
public class RemoveBindFormDTO implements Serializable {
private static final long serialVersionUID = 1920195626466407047L;
public interface RemoveBind extends CustomerClientShowGroup {}
/**
* 客户端类型 resi居民端 work工作端
*/
@NotBlank(message = "客户端类型不能为空",groups = {RemoveBindFormDTO.RemoveBind.class})
private String clientType;
}

2
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SubmitAuditFormDTO.java

@ -39,7 +39,7 @@ public class SubmitAuditFormDTO implements Serializable {
/**
* 预览信息小程序页面截图和操作录屏
*/
private List<PreviewInfoBean> previewInfo;
private PreviewInfoBean previewInfo;
/**
* 用户生成内容场景UGC信息安全声明
*/

2
epmet-module/epmet-third/epmet-third-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
epmet-third-server:
container_name: epmet-third-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-third-server:0.0.48
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-third-server:0.0.58
ports:
- "8110:8110"
network_mode: host # 使用现有网络

2
epmet-module/epmet-third/epmet-third-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.0.48</version>
<version>0.0.58</version>
<parent>
<groupId>com.epmet</groupId>

26
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/AppLetAuthorizationController.java

@ -5,6 +5,8 @@ import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.GoToAuthFormDTO;
import com.epmet.dto.form.OpenAppIdFormDTO;
import com.epmet.dto.form.RemoveBindFormDTO;
import com.epmet.dto.result.GoToAuthResultDTO;
import com.epmet.service.AppLetAuthorizationService;
import org.springframework.beans.factory.annotation.Autowired;
@ -36,4 +38,28 @@ public class AppLetAuthorizationController {
return new Result().ok(goToAuthResultDTO);
}
/**
* @Description 将公众号/小程序从开放平台帐号下解绑
* @param tokenDto
* @param formDTO
* @author zxc
*/
@PostMapping("removeBind")
public Result removeBind(@LoginUser TokenDto tokenDto , @RequestBody RemoveBindFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO,RemoveBindFormDTO.RemoveBind.class);
appLetAuthorizationService.removeBind(tokenDto,formDTO);
return new Result();
}
/**
* @Description 查看小程序绑定的开放平台账号
* @param formDTO
* @author zxc
*/
@PostMapping("getopenappidbyauthappid")
public Result<String> getOpenAppId( @RequestBody OpenAppIdFormDTO formDTO){
String openAppId = appLetAuthorizationService.getOpenAppId(formDTO);
return new Result<String>().ok(openAppId);
}
}

4
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CodeController.java

@ -161,9 +161,9 @@ public class CodeController {
* @date 2020/7/16 10:16
*/
@PostMapping("history")
public Result<PageData> history(@RequestBody CodeCommonFormDTO formDTO) {
public Result<List<CodeHistoryResultDTO>> history(@RequestBody CodeCommonFormDTO formDTO) {
PageData result = codeService.history(formDTO);
return new Result<PageData>().ok(result);
return new Result<List<CodeHistoryResultDTO>>().ok(result.getList());
}
/**

4
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/WarrantController.java

@ -26,9 +26,9 @@ public class WarrantController {
private WarrantService warrantService;
@RequestMapping(value ="/{APPID}/callback")
public void acceptMessageAndEvent(HttpServletRequest request, @PathVariable("APPID") String appid,
public String acceptMessageAndEvent(HttpServletRequest request, @PathVariable("APPID") String appid,
HttpServletResponse response)throws IOException, DocumentException, AesException {
warrantService.acceptMessageAndEvent(request, appid, response);
return warrantService.acceptMessageAndEvent(request, appid, response);
}
}

9
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/BindingAccountDao.java

@ -21,6 +21,7 @@ import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.BindingAccountFormDTO;
import com.epmet.entity.BindingAccountEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 公众号/小程序绑定开放平台帐号表
@ -37,5 +38,13 @@ public interface BindingAccountDao extends BaseDao<BindingAccountEntity> {
* @author zxc
*/
void insertBindingAccount(BindingAccountFormDTO formDTO);
/**
* @Description 更新绑定状态
* @param customerId
* @param authAppId
* @author zxc
*/
void updateBindStatus(@Param("customerId")String customerId,@Param("authAppId")String authAppId);
}

10
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/CustomerMpDao.java

@ -58,7 +58,7 @@ public interface CustomerMpDao extends BaseDao<CustomerMpEntity> {
* @param customerId
* @author zxc
*/
List<String> selectAuthCount(@Param("customerId")String customerId);
Integer selectAuthCount(@Param("customerId")String customerId);
/**
* @Description 回填customer_mp的appId
@ -115,4 +115,12 @@ public interface CustomerMpDao extends BaseDao<CustomerMpEntity> {
* @author zxc
*/
Integer checkBind(String authAppId,String clientType);
/**
* @Description 根据客户Id和客户端类型查询AppId
* @param customerId
* @param clientType
* @author zxc
*/
String getAppId(@Param("customerId")String customerId,@Param("clientType")String clientType);
}

6
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CodeCustomerEntity.java

@ -83,4 +83,10 @@ public class CodeCustomerEntity extends BaseEpmetEntity {
*/
private String status;
/**
* 二维码
*/
private String qrCode;
}

11
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/redis/RedisThird.java

@ -126,4 +126,15 @@ public class RedisThird {
redisUtils.hMSet(key, map,NOT_EXPIRE);
}
/**
* @Description 获取授权信息
* @param customerId
* @param clientType
* @author zxc
*/
public Map<String,Object> getAuthInfo(String customerId,String clientType){
String key = ThirdRedisKeyConstant.AUTH_INFO_REDIS_KEY + customerId + ThirdRedisKeyConstant.COLON + clientType;
return redisUtils.hGetAll(key);
}
}

17
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/AppLetAuthorizationService.java

@ -2,6 +2,8 @@ package com.epmet.service;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.form.GoToAuthFormDTO;
import com.epmet.dto.form.OpenAppIdFormDTO;
import com.epmet.dto.form.RemoveBindFormDTO;
import com.epmet.dto.result.GoToAuthResultDTO;
/**
@ -17,4 +19,19 @@ public interface AppLetAuthorizationService {
*/
GoToAuthResultDTO goToAuth(TokenDto tokenDto, GoToAuthFormDTO formDTO);
/**
* @Description 将公众号/小程序从开放平台帐号下解绑
* @param tokenDto
* @param formDTO
* @author zxc
*/
void removeBind(TokenDto tokenDto, RemoveBindFormDTO formDTO);
/**
* @Description 查看小程序绑定的开放平台账号
* @param formDTO
* @author zxc
*/
String getOpenAppId(OpenAppIdFormDTO formDTO);
}

2
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/WarrantService.java

@ -13,6 +13,6 @@ import java.io.IOException;
*/
public interface WarrantService {
void acceptMessageAndEvent(HttpServletRequest request,String appid,HttpServletResponse response)throws IOException, DocumentException, AesException;
String acceptMessageAndEvent(HttpServletRequest request,String appid,HttpServletResponse response)throws IOException, DocumentException, AesException;
}

77
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/AppLetAuthorizationServiceImpl.java

@ -1,9 +1,22 @@
package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.constant.ModuleConstant;
import com.epmet.dao.BindingAccountDao;
import com.epmet.dao.CustomerMpDao;
import com.epmet.dao.OpenPlatformAccountDao;
import com.epmet.dao.PaCustomerAgencyDao;
import com.epmet.dto.form.GoToAuthFormDTO;
import com.epmet.dto.form.OpenAppIdFormDTO;
import com.epmet.dto.form.RemoveBindFormDTO;
import com.epmet.dto.result.AuthorizationInfoResultDTO;
import com.epmet.dto.result.GoToAuthResultDTO;
import com.epmet.redis.RedisThird;
import com.epmet.service.AppLetAuthorizationService;
import com.epmet.service.ComponentVerifyTicketService;
import com.epmet.wxapi.constant.WxMaCodeConstant;
@ -12,6 +25,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @Author zxc
* @CreateTime 2020/7/10 15:52
@ -24,6 +39,17 @@ public class AppLetAuthorizationServiceImpl implements AppLetAuthorizationServic
private PaCustomerAgencyDao paCustomerAgencyDao;
@Autowired
private ComponentVerifyTicketService componentVerifyTicketService;
@Autowired
private ComponentVerifyTicketServiceImpl componentVerifyTicketServiceImpl;
@Autowired
private OpenPlatformAccountDao openPlatformAccountDao;
@Autowired
private CustomerMpDao customerMpDao;
@Autowired
private RedisThird redisThird;
@Autowired
private BindingAccountDao bindingAccountDao;
@Value("${third.platform.appId}")
private String componentAppId;
@ -44,4 +70,55 @@ public class AppLetAuthorizationServiceImpl implements AppLetAuthorizationServic
result.setUrl(authUrl);
return result;
}
/**
* @Description 将公众号/小程序从开放平台帐号下解绑
* @param tokenDto
* @param formDTO
* @author zxc
*/
@Override
public void removeBind(TokenDto tokenDto, RemoveBindFormDTO formDTO) {
String customerId = componentVerifyTicketServiceImpl.getLoginUserCustomerId(tokenDto);
String clientType = formDTO.getClientType();
//查询openAppId
String openAppId = openPlatformAccountDao.selectOpenAppIdByCustomerId(customerId);
//查询appId
String authAppId = customerMpDao.getAppId(customerId, clientType);
Map<String, Object> authInfo = redisThird.getAuthInfo(customerId, clientType);
AuthorizationInfoResultDTO authorizationInfo = componentVerifyTicketServiceImpl.mapToEntity(authInfo, AuthorizationInfoResultDTO.class);
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.LOW_APP_ID,authAppId);
jsonObject.put(ModuleConstant.OPEN_APP_ID,openAppId);
String data = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.UN_BIND + authorizationInfo.getAuthorizer_access_token(), JSON.toJSONString(jsonObject)).getData();
Map<String,String> map = JSON.parseObject(data, Map.class);
if (!map.get(ModuleConstant.ERR_CODE).equals(NumConstant.ZERO_STR)){
log.error("解绑失败" + data);
throw new RenException("解绑失败" + data);
}
bindingAccountDao.updateBindStatus(customerId,authAppId);
}
/**
* @Description 查看小程序绑定的开放平台账号
* @param formDTO
* @author zxc
*/
@Override
public String getOpenAppId(OpenAppIdFormDTO formDTO) {
String customerId = formDTO.getCustomerId();
String clientType = formDTO.getClientType();
String authAppId = customerMpDao.getAppId(customerId, clientType);
Map<String, Object> authInfo = redisThird.getAuthInfo(customerId, clientType);
AuthorizationInfoResultDTO authorizationInfo = componentVerifyTicketServiceImpl.mapToEntity(authInfo, AuthorizationInfoResultDTO.class);
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.LOW_APP_ID,authAppId);
String data = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.UN_BIND + authorizationInfo.getAuthorizer_access_token(), JSON.toJSONString(jsonObject)).getData();
Map map = JSON.parseObject(data, Map.class);
if (map.containsKey(ModuleConstant.OPEN_APP_ID)){
return map.get(ModuleConstant.OPEN_APP_ID).toString();
}
return map.get(ModuleConstant.ERR_MSG).toString();
}
}

93
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CodeServiceImpl.java

@ -6,17 +6,13 @@ import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.MultipartFileToFileUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.CodeConstant;
import com.epmet.dao.AuthorizationInfoDao;
import com.epmet.dao.ComponentAccessTokenDao;
import com.epmet.dto.*;
import com.epmet.dto.form.*;
import com.epmet.dto.result.CodeHistoryResultDTO;
import com.epmet.dto.result.QrCodeResultDTO;
import com.epmet.dto.result.ReasonResultDTO;
import com.epmet.dto.result.TemplateListResultDTO;
import com.epmet.dto.result.*;
import com.epmet.feign.OperCrmOpenFeignClient;
import com.epmet.feign.OssFeignClient;
import com.epmet.service.*;
@ -33,6 +29,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -67,6 +66,10 @@ public class CodeServiceImpl implements CodeService {
private CodeExtService codeExtService;
@Autowired
private OssFeignClient ossFeignClient;
@Autowired
private PaCustomerService paCustomerService;
@Autowired
private WxMaCodeService wxsMaCodeService;
@Override
public List<TemplateListResultDTO> templateList() {
@ -141,16 +144,13 @@ public class CodeServiceImpl implements CodeService {
//获取客户信息
CustomerDTO customerDTO = new CustomerDTO();
customerDTO.setId(formDTO.getCustomerId());
Result<CustomerDTO> customerInfo = operCrmOpenFeignClient.getCustomerInfo(customerDTO);
if (!customerInfo.success()) {
throw new RenException(customerInfo.getCode(), customerInfo.getMsg());
}
PaCustomerDTO paCustomerDTO = paCustomerService.get(formDTO.getCustomerId());
//将之前上传信息删除
codeCustomerService.deleteCode(formDTO.getCustomerId(), formDTO.getClientType());
//将上传信息存入表中
CodeCustomerDTO codeCustomerDTO = ConvertUtils.sourceToTarget(formDTO, CodeCustomerDTO.class);
codeCustomerDTO.setCustomerName(customerInfo.getData().getCustomerName());
codeCustomerDTO.setCustomerName(paCustomerDTO.getCustomerName());
codeCustomerDTO.setExtJson(formDTO.getExtJson());
codeCustomerDTO.setAppId(authInfo.getAuthorizerAppid());
codeCustomerDTO.setStatus(CodeConstant.UNAUDITED);
@ -211,6 +211,7 @@ public class CodeServiceImpl implements CodeService {
if (null == authInfo) {
throw new RenException("未授权");
}
//调用微信API上提交审核
WxMaCodeSubmitAuditRequest request = new WxMaCodeSubmitAuditRequest();
request.setVersionDesc(formDTO.getVersionDesc());
@ -225,13 +226,20 @@ public class CodeServiceImpl implements CodeService {
wxResult.getErrorMsg());
throw new RenException(wxResult.getErrorCode(), wxResult.getErrorMsg());
}
//将数据存入代码审核表
CodeAuditResultDTO codeAuditResultDTO = new CodeAuditResultDTO();
codeAuditResultDTO.setCustomerId(codeCustomerDTO.getCustomerId());
codeAuditResultDTO.setCodeId(codeCustomerDTO.getId());
codeAuditResultDTO.setAuditId(wxResult.getData());
codeAuditResultDTO.setResult(CodeConstant.AUDITING);
codeAuditResultService.save(codeAuditResultDTO);
//获取审核结果信息
CodeAuditResultDTO codeAuditResultDTO = codeAuditResultService.getAuditResultByCodeId(formDTO.getCodeId());
if (null == codeAuditResultDTO) {
//将数据存入代码审核表
codeAuditResultDTO = new CodeAuditResultDTO();
codeAuditResultDTO.setCustomerId(codeCustomerDTO.getCustomerId());
codeAuditResultDTO.setCodeId(codeCustomerDTO.getId());
codeAuditResultDTO.setAuditId(wxResult.getData());
codeAuditResultDTO.setResult(CodeConstant.AUDITING);
codeAuditResultService.save(codeAuditResultDTO);
} else {
codeAuditResultDTO.setResult(CodeConstant.AUDITING);
codeAuditResultService.update(codeAuditResultDTO);
}
//更新代码表状态
codeCustomerDTO.setStatus(CodeConstant.AUDITING);
codeCustomerService.update(codeCustomerDTO);
@ -354,6 +362,10 @@ public class CodeServiceImpl implements CodeService {
QrCodeResultDTO result = new QrCodeResultDTO();
//获取上传代码信息
CodeCustomerDTO codeCustomerDTO = codeCustomerService.get(formDTO.getCodeId());
if (null != codeCustomerDTO.getQrCode()) {
result.setQrcode(codeCustomerDTO.getQrCode());
return result;
}
//是否授权
if (!customerMpService.getAuthFlag(codeCustomerDTO.getCustomerId(), codeCustomerDTO.getClientType())) {
throw new RenException("未授权");
@ -361,11 +373,20 @@ public class CodeServiceImpl implements CodeService {
//获取小程序调用令牌
AuthorizationInfoDTO authInfo = authorizationInfoDao.getAuthInfoByCustomer(codeCustomerDTO.getCustomerId(), codeCustomerDTO.getClientType());
//调用微信API获取获取体验版二维码
WxResult<Byte[]> wxResult = wxMaCodeService.getQrCode(authInfo.getAuthorizerAccessToken(), null);
WxResult<File> wxResult = wxMaCodeService.getQrCode(authInfo.getAuthorizerAccessToken(), formDTO.getPath());
QrCodeDTO qrCodeDTO = new QrCodeDTO();
try {
qrCodeDTO.setQrCode(Files.readAllBytes(wxResult.getData().toPath()));
Result<UploadImgResultDTO> uploadResult = ossFeignClient.uploadQrCode(qrCodeDTO);
codeCustomerDTO.setQrCode(uploadResult.getData().getUrl());
codeCustomerService.update(codeCustomerDTO);
result.setQrcode(uploadResult.getData().getUrl());
} catch (Exception e) {
throw new RenException(e.getMessage());
}
if (!wxResult.success()) {
throw new RenException(wxResult.getErrorCode(), wxResult.getErrorMsg());
}
result.setQrcode(wxResult.getData());
return result;
}
@ -382,8 +403,10 @@ public class CodeServiceImpl implements CodeService {
@Override
public String mediaUpload(MediaUploadFormDTO formDTO) {
try {
// Result<UploadDTO> uploadDTOResult = ossFeignClient.upload(formDTO.getMedia());
File file = MultipartFileToFileUtils.multipartFileToFile(formDTO.getMedia());
QrCodeDTO dto = new QrCodeDTO();
dto.setMedia(formDTO.getMedia());
Result<UploadImgResultDTO> uploadDTOResult = ossFeignClient.uploadWxImg(dto);
File file = new File(uploadDTOResult.getData().getUrl());
//获取上传代码信息
CodeCustomerDTO codeCustomerDTO = codeCustomerService.get(formDTO.getCodeId());
//获取小程序调用令牌
@ -433,5 +456,33 @@ public class CodeServiceImpl implements CodeService {
}
}
private byte[] toPrimitives(Byte[] oBytes) {
byte[] bytes = new byte[oBytes.length];
for (int i = 0; i < oBytes.length; i++) {
bytes[i] = oBytes[i];
}
return bytes;
}
private void byteToFile(byte[] bytes)
{
try
{
// 根据绝对路径初始化文件
File localFile = new File(".");
if (!localFile.exists())
{
localFile.createNewFile();
}
// 输出流
OutputStream os = new FileOutputStream(localFile);
os.write(bytes);
os.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

8
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ComponentVerifyTicketServiceImpl.java

@ -525,12 +525,12 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
boolean bindStatus = bindInfo.containsKey(ModuleConstant.OPEN_APP_ID);
if (bindStatus != true) {
log.info(CREATE_AND_BIND_SUCCESS);
List<String> authCount = customerMpDao.selectAuthCount(customerId);
Integer authCount = customerMpDao.selectAuthCount(customerId);
String openPlatformId = null;
if (authCount.size() > 0) {
if (authCount > 0) {
openPlatformId = openPlatformAccountDao.selectOpenAppIdByCustomerId(customerId);
}
if (authCount.size() == NumConstant.ZERO) {
if (authCount == NumConstant.ZERO) {
log.info("未查询到该客户授权信息,先创建开放平台账号,再绑定");
//没有任何一个小程序/公众号授权,【先创建,再绑定】
JSONObject jsonObject = new JSONObject();
@ -560,7 +560,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
case ModuleConstant.EIGHTY_NINE_THOUSAND:
throw new RenException(ACCOUNT_HAS_BOUND_OPEN);
}
} else if (authCount.size() > NumConstant.ZERO && !authCount.contains(authAppId)) {
} else if (authCount > NumConstant.ZERO) {
log.info("该客户已创建过开放平台账号,直接绑定");
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.LOW_APP_ID, authAppId);

5
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/WarrantServiceImpl.java

@ -65,14 +65,14 @@ public class WarrantServiceImpl implements WarrantService {
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void acceptMessageAndEvent(HttpServletRequest request, String appId, HttpServletResponse response)throws IOException, DocumentException, AesException {
public String acceptMessageAndEvent(HttpServletRequest request, String appId, HttpServletResponse response)throws IOException, DocumentException, AesException {
log.info("appId:"+ appId);
request.setCharacterEncoding(ModuleConstant.UTF8);
String msgSignature = request.getParameter(ModuleConstant.MSG_SIGNATURE);
String timeStamp = request.getParameter(ModuleConstant.TIMESTAMP);
String nonce = request.getParameter(ModuleConstant.NONCE);
if (!StringUtils.isNotBlank(msgSignature)) {
return;// 微信推送给第三方开放平台的消息一定是加过密的,无消息加密无法解密消息
return ModuleConstant.SUCCESS;// 微信推送给第三方开放平台的消息一定是加过密的,无消息加密无法解密消息
}
InputStream inputStream;
String postData = null;
@ -119,5 +119,6 @@ public class WarrantServiceImpl implements WarrantService {
}
String codeCustomerId = codeCustomerDao.selectCodeCustomerId(codeAuditRecord);
codeAuditResultDao.updateAuditResult(customerId,codeCustomerId,codeResult);
return ModuleConstant.SUCCESS;
}
}

10
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxMaCodeConstant.java

@ -56,6 +56,16 @@ public interface WxMaCodeConstant {
*/
String API_BIND_OPEN = "https://api.weixin.qq.com/cgi-bin/open/bind?access_token=";
/**
*公众号/小程序从开放平台帐号下解绑
*/
String UN_BIND = "https://api.weixin.qq.com/cgi-bin/open/unbind?access_token=";
/**
* 获取公众号/小程序所绑定的开放平台帐号
*/
String OPEN_GET = "https://api.weixin.qq.com/cgi-bin/open/get?access_token=";
/**
* 获取授权方的帐号基本信息
*/

2
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/param/WxMaCodeSubmitAuditRequest.java

@ -42,7 +42,7 @@ public class WxMaCodeSubmitAuditRequest implements Serializable {
* 预览信息小程序页面截图和操作录屏
*/
@SerializedName("preview_info")
private List<SubmitAuditFormDTO.PreviewInfoBean> previewInfo;
private SubmitAuditFormDTO.PreviewInfoBean previewInfo;
/**
* 用户生成内容场景UGC信息安全声明
*/

2
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxMaCodeService.java

@ -48,7 +48,7 @@ public interface WxMaCodeService {
* @author zhaoqifeng
* @date 2020/7/10 15:25
*/
WxResult<Byte[]> getQrCode(String accessToken, String path);
WxResult<File> getQrCode(String accessToken, String path);
/**
* 获取授权小程序帐号的可选类目.

8
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxLoginServiceImpl.java

@ -57,7 +57,11 @@ public class WxLoginServiceImpl implements WxLoginService {
String openid = hashMap.get("openid");
String sessionKey = hashMap.get("session_key");
//2.换取用户基本信息
UserWechatDTO dto = new UserWechatDTO();
dto.setWxOpenId(openid);
dto.setSessionKey(sessionKey);
/*//2.换取用户基本信息
//小程序access_token
Map<String, Object> accessMap = redisUtils.hGetAll(ThirdRedisKeyConstant.AUTH_INFO_REDIS_KEY + ":" + customerId + ":" + clientType);
if(null==accessMap.get("authorizer_access_token")){
@ -86,7 +90,7 @@ public class WxLoginServiceImpl implements WxLoginService {
dto.setCountry(resultMap.get("country"));
dto.setProvince(resultMap.get("province"));
dto.setCity(resultMap.get("city"));
dto.setLanguage(resultMap.get("language"));
dto.setLanguage(resultMap.get("language"));*/
return dto;
}

10
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxMaCodeServiceImpl.java

@ -10,10 +10,8 @@ import com.epmet.wxapi.result.*;
import com.epmet.wxapi.service.WxMaCodeService;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
@ -21,8 +19,6 @@ import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
@ -74,8 +70,8 @@ public class WxMaCodeServiceImpl implements WxMaCodeService {
}
@Override
public WxResult<Byte[]> getQrCode(String accessToken, String path) {
WxResult<Byte[]> result = new WxResult<>();
public WxResult<File> getQrCode(String accessToken, String path) {
WxResult<File> result = new WxResult<>();
StringBuilder url = new StringBuilder(WxMaCodeConstant.GET_QRCODE_URL).append("?access_token").append(accessToken);
if (StringUtils.isNotBlank(path)) {
try {
@ -84,7 +80,7 @@ public class WxMaCodeServiceImpl implements WxMaCodeService {
e.printStackTrace();
}
}
Result<Byte[]> qrCodeResult = HttpClientManager.getInstance().sendGetFile(url.toString(), null);
Result<File> qrCodeResult = HttpClientManager.getInstance().sendGetFile(url.toString(), null);
if (!qrCodeResult.success()) {
result.setErrorCode(qrCodeResult.getCode());
result.setErrorMsg(WxMaErrorMsgEnum.findMsgByCode(qrCodeResult.getCode()));

9
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/BindingAccountDao.xml

@ -21,4 +21,13 @@
NOW()
)
</insert>
<!-- 更新绑定状态 -->
<update id="updateBindStatus">
UPDATE binding_account
SET del_flag = 1
WHERE
customer_id = #{customerId}
AND client_type = #{clientType}
</update>
</mapper>

2
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CodeOperationHistoryDao.xml

@ -25,7 +25,7 @@
</update>
<select id="selectHistoryList" resultType="com.epmet.dto.result.CodeHistoryResultDTO">
SELECT
DATE_FORMAT(coh.CREATED_TIME, '%Y-%m-%d') AS "operationTime",
DATE_FORMAT(coh.CREATED_TIME, '%Y-%m-%d %T') AS "operationTime",
coh.VERSION,
coh.OPERATION,
coh.`DESCRIPTION`

19
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CustomerMpDao.xml

@ -19,15 +19,14 @@
client ASC
</select>
<!-- 查询授权的数量 -->
<select id="selectAuthCount" resultType="java.lang.String">
<select id="selectAuthCount" resultType="java.lang.Integer">
SELECT
app_id AS authAppId
FROM
customer_mp
open_platform_account
WHERE
del_flag = '0'
del_flag = 0
AND customer_id = #{customerId}
AND authorization_flag = 1
</select>
<!-- 回填customer_mp的appId -->
@ -127,4 +126,16 @@
AND client != #{clientType}
</select>
<!-- 根据客户Id和客户端类型查询AppId -->
<select id="getAppId" resultType="java.lang.String">
SELECT
app_id AS appId
FROM
customer_mp
WHERE
del_flag = 0
AND customer_id = #{customerId}
AND client = #{clientType}
</select>
</mapper>

11
epmet-module/gov-mine/gov-mine-client/src/main/java/com/epmet/dto/form/GovFootBarFormDTO.java

@ -0,0 +1,11 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class GovFootBarFormDTO {
//@NotBlank(message = "客户ID不能为空")
private String customerId;
}

2
epmet-module/gov-mine/gov-mine-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
gov-mine-server:
container_name: gov-mine-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/gov-mine-server:0.3.32
image: 192.168.1.130:10080/epmet-cloud-dev/gov-mine-server:0.3.33
ports:
- "8098:8098"
network_mode: host # 使用现有网络

2
epmet-module/gov-mine/gov-mine-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<version>0.3.32</version>
<version>0.3.33</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>gov-mine</artifactId>

18
epmet-module/gov-mine/gov-mine-server/src/main/java/com/epmet/controller/AppController.java

@ -1,9 +1,11 @@
package com.epmet.controller;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.CustomerFootBarDTO;
import com.epmet.dto.form.CustomerFootBarFormDTO;
import com.epmet.feign.OperCustomizeFeignClient;
import com.epmet.dto.form.GovFootBarFormDTO;
import com.epmet.feign.OperCustomizeOpenFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
@ -18,19 +20,21 @@ import java.util.List;
public class AppController {
@Autowired
private OperCustomizeFeignClient operCustomizeFeign;
private OperCustomizeOpenFeignClient operCustomizeFeign;
/**
* 查询
* @param formDTO
* @return
*/
@PostMapping("getcustomerfootbars")
public Result<List<CustomerFootBarDTO>> getCustomerFootBars(@RequestBody CustomerFootBarFormDTO formDTO) {
Result<List<CustomerFootBarDTO>> result = operCustomizeFeign.getCustomerfootbars(formDTO);
public Result<List<CustomerFootBarDTO>> getCustomerFootBars(@RequestBody GovFootBarFormDTO input) {
CustomerFootBarFormDTO form = new CustomerFootBarFormDTO();
form.setCustomerId(input.getCustomerId());
form.setAppType(AppClientConstant.APP_GOV);
Result<List<CustomerFootBarDTO>> result = operCustomizeFeign.getCustomerfootbars(form);
if (CollectionUtils.isEmpty(result.getData())) {
formDTO.setCustomerId("default");
result = operCustomizeFeign.getCustomerfootbars(formDTO);
form.setCustomerId("default");
result = operCustomizeFeign.getCustomerfootbars(form);
}
return result;
}

21
epmet-module/gov-mine/gov-mine-server/src/main/java/com/epmet/feign/OperCustomizeFeignClient.java

@ -1,21 +0,0 @@
package com.epmet.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.CustomerFootBarDTO;
import com.epmet.dto.form.CustomerFootBarFormDTO;
import com.epmet.feign.fallback.OperCustomizeFeignClientFallBack;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(name = ServiceConstant.OPER_CUSTOMIZE_SERVER, fallback = OperCustomizeFeignClientFallBack.class)
public interface OperCustomizeFeignClient {
@PostMapping(value = "/oper/customize/customerfootbar/customerfootbars", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
Result<List<CustomerFootBarDTO>> getCustomerfootbars(@RequestBody CustomerFootBarFormDTO formDTO);
}

22
epmet-module/gov-mine/gov-mine-server/src/main/java/com/epmet/feign/fallback/OperCustomizeFeignClientFallBack.java

@ -1,22 +0,0 @@
package com.epmet.feign.fallback;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.CustomerFootBarDTO;
import com.epmet.dto.form.CustomerFootBarFormDTO;
import com.epmet.dto.form.CustomerHomeFormDTO;
import com.epmet.dto.result.HomeDesignByCustomerResultDTO;
import com.epmet.feign.OperCustomizeFeignClient;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class OperCustomizeFeignClientFallBack implements OperCustomizeFeignClient {
@Override
public Result<List<CustomerFootBarDTO>> getCustomerfootbars(CustomerFootBarFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "getCustomerfootbars",formDTO);
}
}

2
epmet-module/oper-crm/oper-crm-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
oper-crm-server:
container_name: oper-crm-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/oper-crm-server:0.3.28
image: 192.168.1.130:10080/epmet-cloud-dev/oper-crm-server:0.3.30
ports:
- "8090:8090"
network_mode: host # 使用现有网络

2
epmet-module/oper-crm/oper-crm-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
oper-crm-server:
container_name: oper-crm-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/oper-crm-server:0.3.25
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/oper-crm-server:0.3.29
ports:
- "8090:8090"
network_mode: host # 使用现有网络

2
epmet-module/oper-crm/oper-crm-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.28</version>
<version>0.3.30</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>oper-crm</artifactId>

2
epmet-module/oper-crm/oper-crm-server/src/main/java/com/epmet/controller/CustomerController.java

@ -197,7 +197,7 @@ public class CustomerController {
/**
*
* 添加管理员
* 添加管理员(不能被取消角色的管理员)
* @param form
* @return
*/

5
epmet-module/oper-crm/oper-crm-server/src/main/java/com/epmet/service/impl/CustomerServiceImpl.java

@ -158,7 +158,7 @@ public class CustomerServiceImpl extends BaseServiceImpl<CustomerDao, CustomerEn
//2.查询客户的根级组织对应的管理员角色列表,批量查询
StaffRoleFormDTO staffRoleFormDTO = new StaffRoleFormDTO();
staffRoleFormDTO.setOrgIds(rootAgencyIds);
staffRoleFormDTO.setRoleKey(RoleKeyConstants.ROLE_KEY_MANAGER);// TODO ,此处应该将所有的角色key放到EpmetUser的client中
staffRoleFormDTO.setRoleKey(RoleKeyConstants.ROLE_KEY_ROOT_MANAGER);// TODO ,此处应该将所有的角色key放到EpmetUser的client中
Result<Map<String, List<GovStaffRoleResultDTO>>> managersResult = epmetUserFeignClient.getStaffsInRoleOfOrgs(staffRoleFormDTO);
if (managersResult.success()) {
Map<String, List<GovStaffRoleResultDTO>> rootAgencyManagerMap = managersResult.getData();
@ -250,7 +250,8 @@ public class CustomerServiceImpl extends BaseServiceImpl<CustomerDao, CustomerEn
// 查询客户具有指定RoleKey的角色信息
CustomerRoleFormDTO customerRoleForm = new CustomerRoleFormDTO();
customerRoleForm.setCustomerId(form.getCustomerId());
customerRoleForm.setRoleKey(RoleKeyConstants.ROLE_KEY_MANAGER);
// customerRoleForm.setRoleKey(RoleKeyConstants.ROLE_KEY_MANAGER);
customerRoleForm.setRoleKey(RoleKeyConstants.ROLE_KEY_ROOT_MANAGER);
Result<GovStaffRoleDTO> getRoleResult = epmetUserFeignClient.getRoleOfCustomer(customerRoleForm);
if (!getRoleResult.success()) {
log.error("查询客户具有指定RoleKey的角色信息失败:".concat(getRoleResult.toString()));

4
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/CustomerFootBarFormDTO.java

@ -10,4 +10,8 @@ public class CustomerFootBarFormDTO {
//@NotBlank(message = "客户ID不能为空")
private String customerId;
// 哪一个端:gov,resi
@NotBlank(message = "app类型不能为空")
private String appType;
}

14
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java

@ -1,10 +1,20 @@
package com.epmet.feign;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.CustomerFootBarDTO;
import com.epmet.dto.form.CustomerFootBarFormDTO;
import org.springframework.cloud.openfeign.FeignClient;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.CustomerFunctionListFormDTO;
import com.epmet.dto.result.DefaultFunctionListResultDTO;
import com.epmet.feign.fallback.OperCustomizeOpenFeignClientFallback;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
@ -20,6 +30,10 @@ import java.util.List;
*/
@FeignClient(name = ServiceConstant.OPER_CUSTOMIZE_SERVER, fallback = OperCustomizeOpenFeignClientFallback.class)
public interface OperCustomizeOpenFeignClient {
@PostMapping(value = "/oper/customize/customerfootbar/customerfootbars", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
Result<List<CustomerFootBarDTO>> getCustomerfootbars(@RequestBody CustomerFootBarFormDTO formDTO);
@PostMapping(value = "/oper/customize/customerfunction/getOpenedFunctionList", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
Result<List<DefaultFunctionListResultDTO>> getOpenedFunctionList(@RequestBody CustomerFunctionListFormDTO formDTO);
}

9
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java

@ -1,5 +1,10 @@
package com.epmet.feign.fallback;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.CustomerFootBarDTO;
import com.epmet.dto.form.CustomerFootBarFormDTO;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
@ -18,6 +23,10 @@ import java.util.List;
*/
@Component
public class OperCustomizeOpenFeignClientFallback implements OperCustomizeOpenFeignClient {
@Override
public Result<List<CustomerFootBarDTO>> getCustomerfootbars(CustomerFootBarFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "getCustomerfootbars", formDTO);
}
/**
* 获取客户已开通的功能列表
*

2
epmet-module/oper-customize/oper-customize-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
oper-customize-server:
container_name: oper-customize-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/oper-customize-server:0.3.23
image: 192.168.1.130:10080/epmet-cloud-dev/oper-customize-server:0.3.24
ports:
- "8089:8089"
network_mode: host # 使用现有网络

2
epmet-module/oper-customize/oper-customize-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.23</version>
<version>0.3.24</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>oper-customize</artifactId>

4
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/CustomerFootBarController.java

@ -35,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@ -104,8 +105,9 @@ public class CustomerFootBarController {
public Result<List<CustomerFootBarDTO>> getCustomerfootbars(@RequestBody CustomerFootBarFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
String customerId = formDTO.getCustomerId();
String appType = formDTO.getAppType();
List<CustomerFootBarEntity> footbars = customerFootBarService.listCustomerFootBars(customerId);
List<CustomerFootBarEntity> footbars = customerFootBarService.listCustomerFootBars(customerId, appType);
List<CustomerFootBarDTO> barDTOS = new LinkedList<>();
footbars.forEach(barEntity -> {
CustomerFootBarDTO barDTO = new CustomerFootBarDTO();

3
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/CustomerFootBarDao.java

@ -33,5 +33,6 @@ import java.util.List;
@Mapper
public interface CustomerFootBarDao extends BaseDao<CustomerFootBarEntity> {
List<CustomerFootBarEntity> listCustomerFootBars(@Param("customerId") String customerId);
List<CustomerFootBarEntity> listCustomerFootBars(@Param("customerId") String customerId,
@Param("appType") String appType);
}

4
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/CustomerFootBarEntity.java

@ -48,6 +48,8 @@ public class CustomerFootBarEntity extends BaseEpmetEntity {
*/
private String barKey;
private String appType;
/**
* 页面标题
*/
@ -63,4 +65,6 @@ public class CustomerFootBarEntity extends BaseEpmetEntity {
*/
private String selectedIconPath;
private Integer order;
}

2
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/CustomerFootBarService.java

@ -93,5 +93,5 @@ public interface CustomerFootBarService extends BaseService<CustomerFootBarEntit
*/
void delete(String[] ids);
List<CustomerFootBarEntity> listCustomerFootBars(String customerId);
List<CustomerFootBarEntity> listCustomerFootBars(String customerId, String appType);
}

4
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/CustomerFootBarServiceImpl.java

@ -102,8 +102,8 @@ public class CustomerFootBarServiceImpl extends BaseServiceImpl<CustomerFootBarD
}
@Override
public List<CustomerFootBarEntity> listCustomerFootBars(String customerId) {
return baseDao.listCustomerFootBars(customerId);
public List<CustomerFootBarEntity> listCustomerFootBars(String customerId, String appType) {
return baseDao.listCustomerFootBars(customerId, appType);
}
}

11
epmet-module/oper-customize/oper-customize-server/src/main/resources/db/migration/V0.0.2__add_footbar_columns.sql

@ -0,0 +1,11 @@
alter table customer_foot_bar add column `app_type` varchar(20) not null after `CUSTOMER_ID`;
alter table customer_foot_bar add column `order` int(2) not null after `SELECTED_ICON_PATH`;
update customer_foot_bar set `app_type`='gov' , `order`=1 where CUSTOMER_ID='default' and BAR_KEY='work';
update customer_foot_bar set `app_type`='gov' , `order`=2 where CUSTOMER_ID='default' and BAR_KEY='org';
update customer_foot_bar set `app_type`='gov' , `order`=3 where CUSTOMER_ID='default' and BAR_KEY='data';
update customer_foot_bar set `app_type`='gov' , `order`=4 where CUSTOMER_ID='default' and BAR_KEY='find';
INSERT INTO epmet_oper_customize.customer_foot_bar (ID, CUSTOMER_ID, app_type, BAR_KEY, BAR_NAME, PAGE_TITLE, ICON_PATH, SELECTED_ICON_PATH, `order`, DEL_FLAG, REVISION, CREATED_BY, CREATED_TIME, UPDATED_BY, UPDATED_TIME) VALUES (uuid(), 'default', 'resi', 'garden', '党建园地', '党建园地', null, null, 1, 0, 0, 'APP_USER', now(), 'APP_USER', now());
INSERT INTO epmet_oper_customize.customer_foot_bar (ID, CUSTOMER_ID, app_type, BAR_KEY, BAR_NAME, PAGE_TITLE, ICON_PATH, SELECTED_ICON_PATH, `order`, DEL_FLAG, REVISION, CREATED_BY, CREATED_TIME, UPDATED_BY, UPDATED_TIME) VALUES (uuid(), 'default', 'resi', 'issue', '党群议事', '党群议事', null, null, 2, 0, 0, 'APP_USER', now(), 'APP_USER', now());
INSERT INTO epmet_oper_customize.customer_foot_bar (ID, CUSTOMER_ID, app_type, BAR_KEY, BAR_NAME, PAGE_TITLE, ICON_PATH, SELECTED_ICON_PATH, `order`, DEL_FLAG, REVISION, CREATED_BY, CREATED_TIME, UPDATED_BY, UPDATED_TIME) VALUES (uuid(), 'default', 'resi', 'group', '楼院小组', '楼院小组', null, null, 3, 0, 0, 'APP_USER', now(), 'APP_USER', now());

22
epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/CustomerFootBarDao.xml

@ -7,9 +7,11 @@
<result property="id" column="ID"/>
<result property="barName" column="BAR_NAME"/>
<result property="barKey" column="BAR_KEY"/>
<result property="appType" column="APP_TYPE"/>
<result property="pageTitle" column="PAGE_TITLE"/>
<result property="iconPath" column="ICON_PATH"/>
<result property="selectedIconPath" column="SELECTED_ICON_PATH"/>
<result property="order" column="ORDER"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
@ -21,13 +23,31 @@
<!--查询客户的footbar列表-->
<select id="listCustomerFootBars" resultType="com.epmet.entity.CustomerFootBarEntity">
SELECT
*
id,
customer_id,
app_type,
bar_key,
bar_name,
app_type,
page_title,
icon_path,
selected_icon_path,
`order`,
del_flag,
revision,
created_by,
created_time,
updated_by,
updated_time,
`order`
FROM
customer_foot_bar
<where>
DEL_FLAG = '0'
AND CUSTOMER_ID = #{customerId}
AND APP_TYPE = #{appType}
</where>
ORDER BY `order` ASC
</select>

10
epmet-module/resi-mine/resi-mine-client/src/main/java/com/epmet/resi/mine/dto/from/ResiFootBarFormDTO.java

@ -0,0 +1,10 @@
package com.epmet.resi.mine.dto.from;
import lombok.Data;
@Data
public class ResiFootBarFormDTO {
private String customerId;
}

2
epmet-module/resi-mine/resi-mine-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
resi-mine-server:
container_name: resi-mine-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/resi-mine-server:0.3.29
image: 192.168.1.130:10080/epmet-cloud-dev/resi-mine-server:0.3.30
ports:
- "8094:8094"
network_mode: host # 使用现有网络

9
epmet-module/resi-mine/resi-mine-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.29</version>
<version>0.3.30</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>resi-mine</artifactId>
@ -83,6 +83,13 @@
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>oper-customize-client</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

39
epmet-module/resi-mine/resi-mine-server/src/main/java/com/epmet/modules/app/controller/AppController.java

@ -0,0 +1,39 @@
package com.epmet.modules.app.controller;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.CustomerFootBarDTO;
import com.epmet.dto.form.CustomerFootBarFormDTO;
import com.epmet.feign.OperCustomizeOpenFeignClient;
import com.epmet.resi.mine.dto.from.ResiFootBarFormDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("app")
public class AppController {
@Autowired
private OperCustomizeOpenFeignClient operCustomizeFeign;
@PostMapping("footbar")
public Result getResiFootBars(@RequestBody ResiFootBarFormDTO input) {
CustomerFootBarFormDTO form = new CustomerFootBarFormDTO();
form.setCustomerId(input.getCustomerId());
form.setAppType(AppClientConstant.APP_RESI);
Result<List<CustomerFootBarDTO>> result = operCustomizeFeign.getCustomerfootbars(form);
if (CollectionUtils.isEmpty(result.getData())) {
form.setCustomerId("default");
result = operCustomizeFeign.getCustomerfootbars(form);
}
return result;
}
}

5
epmet-user/epmet-user-client/src/main/java/com/epmet/constant/RoleKeyConstants.java

@ -9,6 +9,11 @@ public class RoleKeyConstants {
*/
public static final String ROLE_KEY_MANAGER = "manager";
/**
* 根管理员(不能通过工作端取消的角色且不会再工作端显示)
*/
public static final String ROLE_KEY_ROOT_MANAGER = "root_manager";
/**
* 党建负责人
*/

2
epmet-user/epmet-user-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
epmet-user-server:
container_name: epmet-user-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-user-server:0.3.77
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-user-server:0.3.79
ports:
- "8087:8087"
network_mode: host # 不会创建新的网络

2
epmet-user/epmet-user-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
epmet-user-server:
container_name: epmet-user-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/epmet-user-server:0.3.75
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/epmet-user-server:0.3.79
ports:
- "8087:8087"
network_mode: host # 不会创建新的网络

2
epmet-user/epmet-user-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.77</version>
<version>0.3.79</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>epmet-user</artifactId>

2
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/StaffRoleDao.java

@ -98,4 +98,6 @@ public interface StaffRoleDao extends BaseDao<StaffRoleEntity> {
* @return java.util.List<com.epmet.dto.result.CustomerStaffRoleResultDTO>
*/
List<CustomerStaffRoleResultDTO> selectStaffRoles(@Param("staffId") String staffId);
List<StaffRoleEntity> listStaffRoleEntytiesByStaffIdAndOrgId(@Param("agencyId") String agencyId, @Param("staffId") String staffId);
}

2
epmet-user/epmet-user-server/src/main/java/com/epmet/service/StaffRoleService.java

@ -148,4 +148,6 @@ public interface StaffRoleService extends BaseService<StaffRoleEntity> {
* @return java.util.List<com.epmet.dto.result.CustomerStaffRoleResultDTO>
*/
List<CustomerStaffRoleResultDTO> getStaffRoles(String staffId);
List<StaffRoleEntity> getStaffRoleEntytiesByStaffIdAndOrgId(String agencyId, String staffId);
}

30
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerStaffServiceImpl.java

@ -31,6 +31,7 @@ import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.CustomerStaffConstant;
import com.epmet.constant.RoleKeyConstants;
import com.epmet.constant.UserConstant;
import com.epmet.constant.UserRoleConstant;
import com.epmet.dao.CustomerStaffDao;
@ -55,6 +56,7 @@ import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
@ -244,14 +246,17 @@ public class CustomerStaffServiceImpl extends BaseServiceImpl<CustomerStaffDao,
List<GovStaffRoleDTO> roleList = govStaffRoleService.getGovStaffRoleList(govStaffRoleDTO);
//获取工作人员角色
List<GovStaffRoleEntity> staffRoles = govStaffRoleService.listRolesByStaffId(fromDTO.getStaffId(), fromDTO.getAgencyId());
List<StaffRoleResultDTO> staffRoleList = roleList.stream().map(p -> {
StaffRoleResultDTO staffRoleResultDTO = new StaffRoleResultDTO();
staffRoleResultDTO.setRoleId(p.getId());
staffRoleResultDTO.setRoleName(p.getRoleName());
staffRoleResultDTO.setFullTimeOnly(p.getFullTimeOnly());
staffRoleResultDTO.setSelected(false);
return staffRoleResultDTO;
}).collect(Collectors.toList());
List<StaffRoleResultDTO> staffRoleList = roleList
.stream()
.filter(p -> !RoleKeyConstants.ROLE_KEY_ROOT_MANAGER.equals(p.getRoleKey()))
.map(p -> {
StaffRoleResultDTO staffRoleResultDTO = new StaffRoleResultDTO();
staffRoleResultDTO.setRoleId(p.getId());
staffRoleResultDTO.setRoleName(p.getRoleName());
staffRoleResultDTO.setFullTimeOnly(p.getFullTimeOnly());
staffRoleResultDTO.setSelected(false);
return staffRoleResultDTO;
}).collect(Collectors.toList());
staffRoleList.forEach(role -> staffRoles.forEach(staffRole -> {
if (role.getRoleId().equals(staffRole.getId())) {
@ -337,11 +342,18 @@ public class CustomerStaffServiceImpl extends BaseServiceImpl<CustomerStaffDao,
staffRoleService.insert(staffRoleEntity);
});
// 重新查询用户的角色列表(可以取到前端没有传过来的角色,例如根管理员)
List<StaffRoleEntity> staffRoleEntytiesByStaffIdAndOrgId = staffRoleService.getStaffRoleEntytiesByStaffIdAndOrgId(fromDTO.getAgencyId(), fromDTO.getStaffId());
List<String> roleIds = new ArrayList<>();
if (!CollectionUtils.isEmpty(staffRoleEntytiesByStaffIdAndOrgId)) {
roleIds = staffRoleEntytiesByStaffIdAndOrgId.stream().map(sr -> sr.getRoleId()).collect(Collectors.toList());
}
// redis缓存角色修改
UpdateCachedRolesFormDTO updateRolesForm = new UpdateCachedRolesFormDTO();
updateRolesForm.setOrgId(fromDTO.getAgencyId());
updateRolesForm.setStaffId(fromDTO.getStaffId());
updateRolesForm.setRoleIds(fromDTO.getRoles());
updateRolesForm.setRoleIds(roleIds);
try {
Result result = authFeignClient.updateCachedRoles(updateRolesForm);
if (!result.success()) {

8
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/StaffRoleServiceImpl.java

@ -19,7 +19,6 @@ package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.annotation.DataFilter;
import com.epmet.commons.mybatis.entity.DataScope;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
@ -36,9 +35,7 @@ import com.epmet.dto.form.RolesUsersListFormDTO;
import com.epmet.dto.result.CustomerStaffRoleResultDTO;
import com.epmet.dto.result.CustomerStaffRoleListResultDTO;
import com.epmet.dto.result.GovStaffRoleResultDTO;
import com.epmet.dto.result.GovStaffRoleTemplateDTO;
import com.epmet.dto.result.StaffRolesResultDTO;
import com.epmet.entity.GovStaffRoleEntity;
import com.epmet.entity.StaffRoleEntity;
import com.epmet.redis.StaffRoleRedis;
import com.epmet.service.StaffRoleService;
@ -180,4 +177,9 @@ public class StaffRoleServiceImpl extends BaseServiceImpl<StaffRoleDao, StaffRol
return baseDao.selectStaffRoles(staffId);
}
@Override
public List<StaffRoleEntity> getStaffRoleEntytiesByStaffIdAndOrgId(String agencyId, String staffId) {
return baseDao.listStaffRoleEntytiesByStaffIdAndOrgId(agencyId, staffId);
}
}

1
epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.4__add_rootmanager.sql

@ -0,0 +1 @@
INSERT INTO epmet_user.gov_staff_role_template (ID, ROLE_KEY, ROLE_NAME, ORG_TYPE, FULL_TIME_ONLY, DEL_FLAG, REVISION, CREATED_BY, CREATED_TIME, UPDATED_BY, UPDATED_TIME) VALUES (uuid(), 'root_manager', '根管理员', 'agency', 1, 0, 0, 'APP_USER', now(), 'APP_USER', now());

18
epmet-user/epmet-user-server/src/main/resources/mapper/StaffRoleDao.xml

@ -17,11 +17,11 @@
</resultMap>
<update id="delStaffRoles" parameterType="com.epmet.dto.StaffRoleDTO">
update
staff_role
set DEL_FLAG = '1'
where STAFF_ID = #{staffId}
and ORG_ID = #{orgId}
and DEL_FLAG = '0'
staff_role sr inner join gov_staff_role gsr on (sr.ROLE_ID = gsr.ID and gsr.ROLE_KEY != 'root_manager')
set sr.DEL_FLAG = '1'
where sr.STAFF_ID = #{staffId}
and sr.ORG_ID = #{orgId}
and sr.DEL_FLAG = '0'
</update>
@ -156,4 +156,12 @@
AND gsr.del_flag = '0'
AND sr.staff_id = #{staffId}
</select>
<select id="listStaffRoleEntytiesByStaffIdAndOrgId" resultType="com.epmet.entity.StaffRoleEntity">
select *
from staff_role sr
where sr.STAFF_ID = #{staffId}
and sr.ORG_ID = #{agencyId}
and sr.DEL_FLAG='0'
</select>
</mapper>
Loading…
Cancel
Save