提交 5ef1f089 作者: zhenjie

Merge branch 'feature/user-login-register' into develop

......@@ -20,10 +20,6 @@ public class AppUserSucVO implements Serializable {
private static final long serialVersionUID = 7491711282161485720L;
@ApiModelProperty(value = "用户id")
private Integer userAccountId;
@ApiModelProperty(value = "openId")
private String openId;
@ApiModelProperty(value = "unionId")
private String unionId;
@ApiModelProperty(value = "token")
private String token;
}
package com.mmc.iuav.user.model.vo;
import com.mmc.iuav.group.Insert;
import com.mmc.iuav.group.Update;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/17 13:42
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CompanyAuthVO implements Serializable {
private static final long serialVersionUID = 3584743219477515646L;
@ApiModelProperty(value = "id")
@NotNull(message = "id创建修改不能为空", groups = { Update.class })
private Integer id;
@ApiModelProperty(value = "用户id")
@NotNull(message = "用户id不能为空", groups = { Insert.class, Update.class})
private Integer userAccountId;
@ApiModelProperty(value = "企业名称")
@NotBlank(message = "企业名称", groups = { Insert.class, Update.class})
private String companyName;
@ApiModelProperty(value = "统一社会信用代码")
@NotBlank(message = "统一社会信用代码", groups = { Insert.class, Update.class})
private String creditCode;
@ApiModelProperty(value = "营业执照")
@NotBlank(message = "营业执照", groups = { Insert.class, Update.class })
private String licenseImg;
@ApiModelProperty(value = "企业认证状态,0未通过,1已通过")
private Integer authStatus;
}
package com.mmc.iuav.user.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/5/17 21:27
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CooperationTagVO implements Serializable {
private static final long serialVersionUID = 8884567706797525506L;
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "合作标签名称")
private String tagName;
@ApiModelProperty(value = "合作标签img")
private String tagImg;
@ApiModelProperty(value = "合作标签描述")
private String tagDescription;
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}
package com.mmc.iuav.user.model.vo;
import com.mmc.iuav.group.Update;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/5/16 21:18
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ApiModel(value = "com.mmc.iuav.user.model.vo.UserAccountVO", description = "用户信息")
public class UserAccountVO implements Serializable {
private static final long serialVersionUID = 7067111726018678883L;
@ApiModelProperty(value = "用户id")
@NotNull(message = "用户id不能为空",groups = {Update.class})
private Integer id;
@ApiModelProperty(value = "用户类型")
private Integer accountType;
@ApiModelProperty(value = "用户uid")
private String uid;
@ApiModelProperty(value = "手机号")
private String phoneNum;
@ApiModelProperty(value = "用户名称")
private String userName;
@ApiModelProperty(value = "用户昵称")
private String nickName;
@ApiModelProperty(value = "用户头像")
private String userImg;
@ApiModelProperty(value = "用户性别:0未知、1男、2女")
private Integer userSex;
@ApiModelProperty(value = "用户邮箱")
@Email
private String email;
@ApiModelProperty(value = "用户来源,0自然流、1海报、2抖音、3公众号、4社群、5招投标、6官网")
private Integer source;
@ApiModelProperty(value = "用户可用状态:0禁用、1可用")
private Integer accountStatus;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "账号类型:0后台管理账号 ; 100云享飞-客户端;")
private Integer portType;
@ApiModelProperty(value = "注册时间")
private Date createTime;
}
package com.mmc.iuav.user.model.vo;
import com.mmc.iuav.group.Insert;
import com.mmc.iuav.group.Update;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/17 22:02
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserApplyTagVO implements Serializable {
private static final long serialVersionUID = -1004953417393220972L;
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "加盟标签id")
@NotNull(message = "加盟标签id不能为空", groups = { Insert.class })
private Integer cooperationTagId;
@ApiModelProperty(value = "用户id")
@NotNull(message = "加盟标签id不能为空", groups = { Insert.class })
private Integer userAccountId;
@ApiModelProperty(value = "申请人名称")
@NotBlank(message = "申请人名称不能为空", groups = { Insert.class })
private String applyName;
@ApiModelProperty(value = "申请人手机号")
@NotBlank(message = "申请人手机号不能为空", groups = { Insert.class })
private String applyPhone;
@ApiModelProperty(value = "申请审核状态")
private Integer applyStatus;
@ApiModelProperty(value = "备注")
private String remark;
}
......@@ -24,9 +24,9 @@ public class WxLoginVO implements Serializable {
@ApiModelProperty(value = "请求code")
@NotNull(message = "code不能为空", groups = {Insert.class})
private String code;
@ApiModelProperty(value = "登录来源, 0小程序登录, 1pc登录", example = "0", allowableValues = "0,1")
@ApiModelProperty(value = "登录来源, 0小程序登录, 1pc扫码登录", example = "0", allowableValues = "0,1")
@NotNull(message = "登录来源不能为空", groups = {Insert.class})
private Integer fromPort;
@ApiModelProperty(value = "用户来源:0自然流,1海报,2抖音,3公众号,4社群,5招投标,默认0", example = "0", required = true)
@ApiModelProperty(value = "用户来源:0自然流,1海报,2抖音,3公众号,4社群,5招投标,默认0", example = "0")
private Integer source;
}
package com.mmc.iuav.http;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import static java.lang.System.out;
/**
* @author zj
*/
public class HttpHelper {
// get 请求
public static String httpGet(String url, Header[] headers) throws Exception {
HttpUriRequest uriRequest = new HttpGet(url);
if (null != headers) {
uriRequest.setHeaders(headers);
}
CloseableHttpClient httpClient = null;
try {
httpClient = declareHttpClientSSL(url);
CloseableHttpResponse httpresponse = httpClient.execute(uriRequest);
HttpEntity httpEntity = httpresponse.getEntity();
String result = EntityUtils.toString(httpEntity, REQ_ENCODEING_UTF8);
return result;
} catch (ClientProtocolException e) {
out.println(String.format("http请求失败,uri{%s},exception{%s}", new Object[] { url, e }));
} catch (IOException e) {
out.println(String.format("IO Exception,uri{%s},exception{%s}", new Object[] { url, e }));
} finally {
if (null != httpClient) {
httpClient.close();
}
}
return null;
}
// post 请求
public static String httpPost(String url, String params) throws Exception {
HttpPost post = new HttpPost(url);
post.addHeader("Content-Type", "application/json;charset=" + REQ_ENCODEING_UTF8);
// 设置传输编码格式
StringEntity stringEntity = new StringEntity(params, REQ_ENCODEING_UTF8);
stringEntity.setContentEncoding(REQ_ENCODEING_UTF8);
post.setEntity(stringEntity);
HttpResponse httpresponse = null;
CloseableHttpClient httpClient = null;
try {
httpClient = declareHttpClientSSL(url);
httpresponse = httpClient.execute(post);
HttpEntity httpEntity = httpresponse.getEntity();
String result = EntityUtils.toString(httpEntity, REQ_ENCODEING_UTF8);
return result;
} catch (ClientProtocolException e) {
out.println(String.format("http请求失败,uri{%s},exception{%s}", new Object[] { url, e }));
} catch (IOException e) {
out.println(String.format("IO Exception,uri{%s},exception{%s}", new Object[] { url, e }));
} finally {
if (null != httpClient) {
httpClient.close();
}
}
return null;
}
private static CloseableHttpClient declareHttpClientSSL(String url) {
if (url.startsWith("https://")) {
return sslClient();
} else {
return HttpClientBuilder.create().setConnectionManager(httpClientConnectionManager).build();
}
}
/**
* 设置SSL请求处理
*
*/
private static CloseableHttpClient sslClient() {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] xcs, String str) {
}
@Override
public void checkServerTrusted(X509Certificate[] xcs, String str) {
}
};
ctx.init(null, new TrustManager[] { tm }, null);
SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory();
return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (KeyManagementException e) {
throw new RuntimeException(e);
}
}
// this is config
private static final String REQ_ENCODEING_UTF8 = "utf-8";
private static PoolingHttpClientConnectionManager httpClientConnectionManager;
public HttpHelper() {
httpClientConnectionManager = new PoolingHttpClientConnectionManager();
httpClientConnectionManager.setMaxTotal(100);
httpClientConnectionManager.setDefaultMaxPerRoute(20);
}
// get 请求
public static String httpGet(String url) throws Exception {
return httpGet(url, null);
}
}
......@@ -9,6 +9,10 @@ public enum ResultEnum implements BaseErrorInfoInterface{
FAIL("500", "fail"),
PARAM_ERROR("400", "参数错误"),
//企业认证
BUSINESS_LICENSE_CHECK_ANALYSIS_ERROR("1000", "营业执照解析失败,请上传有效清晰的执照"),
BUSINESS_LICENSE_CHECK_PARAMETER_ERROR("30401", "企业信息与营业执照信息不一致,请重新上传"),
APPLET_PORT_TYPE_ERROR("7001", "小程序端口类型错误"),
APPLET_LOGIN_ERROR("7002", "获取小程序登录失败");
......@@ -33,11 +37,11 @@ public enum ResultEnum implements BaseErrorInfoInterface{
@Override
public String getResultCode() {
return null;
return this.resultCode;
}
@Override
public String getResultMsg() {
return null;
return this.resultMsg;
}
}
......@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.*;
* @author: zj
* @Date: 2023/5/15 15:50
*/
@Api(tags = "登录")
@Api(tags = "登录授权")
@RequestMapping("/auth/")
@RestController
public class AuthController {
......@@ -28,5 +28,4 @@ public class AuthController {
public ResultBody appletLogin(@Validated(value = {Insert.class})@RequestBody WxLoginVO wxLoginVO){
return authService.appletLogin(wxLoginVO);
}
}
package com.mmc.iuav.user.controller;
import com.mmc.iuav.group.Insert;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.vo.AppUserSucVO;
import com.mmc.iuav.user.model.vo.CompanyAuthVO;
import com.mmc.iuav.user.model.vo.WxLoginVO;
import com.mmc.iuav.user.service.CompanyAuthService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author: zj
* @Date: 2023/5/17 13:33
*/
@Api(tags = "企业认证相关")
@RequestMapping("/company-auth/")
@RestController
public class CompanyAuthController {
@Autowired
private CompanyAuthService companyAuthService;
@ApiOperation(value = "提交企业认证")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) })
@PostMapping("add")
public ResultBody add(@Validated(value = {Insert.class})@RequestBody CompanyAuthVO companyAuthVO){
return companyAuthService.add(companyAuthVO);
}
@ApiOperation(value = "企业工商模糊搜索")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) })
@GetMapping("fuzzyQueryCompany")
public ResultBody fuzzyQueryCompany(@ApiParam(value = "企业名称", required = true) @RequestParam String searchKey) {
return companyAuthService.fuzzyQueryCompany(searchKey);
}
}
package com.mmc.iuav.user.controller;
import com.mmc.iuav.group.Insert;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.vo.CompanyAuthVO;
import com.mmc.iuav.user.model.vo.CooperationTagVO;
import com.mmc.iuav.user.model.vo.UserApplyTagVO;
import com.mmc.iuav.user.service.CooperationService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author: zj
* @Date: 2023/5/17 21:17
*/
@Api(tags = "合作加盟")
@RequestMapping("/cooperation/")
@RestController
public class CooperationController {
@Autowired
private CooperationService cooperationService;
@ApiOperation(value = "加盟标签列表")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) })
@GetMapping("listTag")
public ResultBody listTag() {
return cooperationService.listTag();
}
@ApiOperation(value = "申请加盟")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) })
@PostMapping("apply")
public ResultBody apply(@Validated(value = {Insert.class})@RequestBody UserApplyTagVO userApplyTagVO){
return cooperationService.apply(userApplyTagVO);
}
}
package com.mmc.iuav.user.controller;
import com.mmc.iuav.group.Insert;
import com.mmc.iuav.group.Update;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.vo.AppUserSucVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.model.vo.WxLoginVO;
import com.mmc.iuav.user.service.UserAccountService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author:zhenjie
* @Date:2023/5/15 15:32
* @author: zj
* @Date: 2023/5/15 15:32
*/
@Api(tags = "账号相关接口")
@RequestMapping("/user-account/")
@RestController
public class UserAccountController {
@Autowired
private UserAccountService userAccountService;
@ApiOperation(value = "获取用户信息")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = UserAccountVO.class) })
@GetMapping("info")
public String info(){
return "account";
public UserAccountVO info(@RequestParam Integer userAccountId){
return userAccountService.getUserAccountById(userAccountId);
}
@ApiOperation(value = "修改用户信息")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) })
@PostMapping("update")
public ResultBody update(@Validated(value = {Update.class})@RequestBody UserAccountVO userAccountVO){
return userAccountService.update(userAccountVO);
}
}
package com.mmc.iuav.user.controller;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author: zj
* @Date: 2023/5/17 11:16
*/
@Api(tags = "微信相关接口")
@RequestMapping("/wx/")
@RestController
public class WxController {
}
package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.CompanyAuthDO;
import org.apache.ibatis.annotations.Mapper;
/**
* @author: zj
* @Date: 2023/5/17 13:38
*/
@Mapper
public interface CompanyAuthDao {
/**
* 通过用户id获取企业认证信息
* @param userAccountId
* @return
*/
CompanyAuthDO getCompanyAuth(Integer userAccountId);
/**
* 添加企业认证信息
* @param companyAuthDO
*/
void addCompanyAuth(CompanyAuthDO companyAuthDO);
}
package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.CooperationTagDO;
import com.mmc.iuav.user.entity.UserApplyTagDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author: zj
* @Date: 2023/5/17 21:20
*/
@Mapper
public interface CooperationDao {
/**
* 加盟标签列表
* @return
*/
List<CooperationTagDO> listTags();
/**
* 加盟申请
* @param userApplyTagDO
*/
void addApply(UserApplyTagDO userApplyTagDO);
}
......@@ -21,4 +21,17 @@ public interface UserServiceDao {
* @param userAccountDO
*/
void insertUserAccount(UserAccountDO userAccountDO);
/**
* 根据用户id查询用户信息
* @param userAccountId
* @return
*/
UserAccountDO getUserAccountById(Integer userAccountId);
/**
* 修改用户信息
* @param userAccountDO
*/
void update(UserAccountDO userAccountDO);
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.vo.CompanyAuthVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/17 14:22
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CompanyAuthDO implements Serializable {
private static final long serialVersionUID = -9166003341814537635L;
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "用户id")
private Integer userAccountId;
@ApiModelProperty(value = "企业名称")
private String companyName;
@ApiModelProperty(value = "统一社会信用代码")
private String creditCode;
@ApiModelProperty(value = "营业执照")
private String licenseImg;
@ApiModelProperty(value = "企业认证状态,0未通过,1已通过")
private Integer authStatus;
public CompanyAuthDO(CompanyAuthVO companyAuthVO) {
this.userAccountId = companyAuthVO.getUserAccountId();
this.companyName = companyAuthVO.getCompanyName();
this.creditCode = companyAuthVO.getCreditCode();
this.licenseImg = companyAuthVO.getLicenseImg();
}
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.vo.CooperationTagVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/5/17 21:24
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CooperationTagDO implements Serializable {
private static final long serialVersionUID = 4469387912588336014L;
private Integer id;
private String tagName;
private String tagImg;
private String tagDescription;
private Date createTime;
public CooperationTagVO buildCooperationTagVO(){
return CooperationTagVO.builder()
.id(id)
.tagName(tagName)
.tagImg(tagImg)
.tagDescription(tagDescription)
.createTime(createTime)
.build();
}
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -34,4 +35,23 @@ public class UserAccountDO implements Serializable {
private Integer deleted;
private Date createTime;
private Date updateTime;
public UserAccountDO(UserAccountVO userAccountVO) {
this.id = userAccountVO.getId();
this.phoneNum = userAccountVO.getPhoneNum();
this.userName = userAccountVO.getUserName();
this.nickName = userAccountVO.getNickName();
this.userImg = userAccountVO.getUserImg();
this.userSex = userAccountVO.getUserSex();
this.email = userAccountVO.getEmail();
this.accountStatus = userAccountVO.getAccountStatus();
this.remark = userAccountVO.getRemark();
this.portType = userAccountVO.getPortType();
}
public UserAccountVO buildUserAccountVO() {
return UserAccountVO.builder().id(this.id).uid(this.uid).accountType(this.accountType).phoneNum(this.phoneNum).userName(this.userName).nickName(this.nickName)
.userImg(this.userImg).userSex(this.userSex).email(this.email).source(this.source).accountStatus(this.accountStatus).remark(this.remark).portType(this.portType)
.createTime(this.createTime).build();
}
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.vo.UserApplyTagVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/17 21:59
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserApplyTagDO implements Serializable {
private static final long serialVersionUID = -7581203992821286124L;
private Integer id;
private Integer cooperationTagId;
private Integer userAccountId;
private String applyName;
private String applyPhone;
private Integer applyStatus;
private String remark;
public UserApplyTagVO buildUserApplyTagVO(){
return UserApplyTagVO.builder().id(id).cooperationTagId(cooperationTagId).userAccountId(this.userAccountId)
.applyName(this.applyName).applyPhone(this.applyPhone).applyStatus(this.applyStatus).remark(this.remark).build();
}
public UserApplyTagDO(UserApplyTagVO userApplyTagVO){
this.cooperationTagId = userApplyTagVO.getCooperationTagId();
this.userAccountId = userApplyTagVO.getUserAccountId();
this.applyName = userApplyTagVO.getApplyName();
this.applyPhone = userApplyTagVO.getApplyPhone();
this.remark = userApplyTagVO.getRemark();
}
}
package com.mmc.iuav.user.service;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.vo.CompanyAuthVO;
/**
* @author: zj
* @Date: 2023/5/17 13:37
*/
public interface CompanyAuthService {
/**
* 添加企业认证
* @param companyAuthVO
* @return
*/
ResultBody add(CompanyAuthVO companyAuthVO);
/**
* 根据企业名称模糊查询
* @param searchKey
* @return
*/
ResultBody fuzzyQueryCompany(String searchKey);
}
package com.mmc.iuav.user.service;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.vo.UserApplyTagVO;
/**
* @author: zj
* @Date: 2023/5/17 21:19
*/
public interface CooperationService {
ResultBody listTag();
ResultBody apply(UserApplyTagVO cooperationTagVO);
}
package com.mmc.iuav.user.service;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
/**
* @author: zj
......@@ -12,11 +14,25 @@ public interface UserAccountService {
* @param unionId
* @return
*/
UserAccountDO getUserAccountInfoByUnionId(String unionId);
UserAccountVO getUserAccountInfoByUnionId(String unionId);
/**
* Insert the user account
* @param userAccountDO
*/
void insertUserAccount(UserAccountDO userAccountDO);
/**
* 通过用户id获取用户信息
* @param userAccountId
* @return
*/
UserAccountVO getUserAccountById(Integer userAccountId);
/**
* 修改用户信息
* @param userAccountVO
* @return
*/
ResultBody update(UserAccountVO userAccountVO);
}
......@@ -7,10 +7,10 @@ import com.mmc.iuav.auth.JwtUtil;
import com.mmc.iuav.general.CodeUtil;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.constant.UserSystemConstant;
import com.mmc.iuav.user.constant.WxConstant;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.model.vo.AppUserSucVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.model.vo.WxLoginVO;
import com.mmc.iuav.user.service.AuthService;
import com.mmc.iuav.user.service.UserAccountService;
......@@ -70,23 +70,24 @@ public class AuthServiceImpl implements AuthService {
return ResultBody.error(ResultEnum.PARAM_ERROR);
}
//数据库查询用户信息
UserAccountDO userAccountDO = userAccountService.getUserAccountInfoByUnionId(unionId);
if (userAccountDO == null) {
userAccountDO = new UserAccountDO();
UserAccountVO userAccountVO = userAccountService.getUserAccountInfoByUnionId(unionId);
if (userAccountVO == null) {
UserAccountDO userAccountDO = new UserAccountDO();
userAccountDO.setUnionId(unionId);
userAccountDO.setOpenId(openId);
userAccountDO.setUid(CodeUtil.generateUserUID());
userAccountDO.setAccountType(0);
userAccountDO.setPortType(100);
userAccountDO.setSource(wxLoginVO.getSource());
userAccountService.insertUserAccount(userAccountDO);
userAccountVO = userAccountDO.buildUserAccountVO();
}
Map<String, Object> map = new HashMap<String, Object>();
map.put(JwtConstant.USER_ACCOUNT_ID, userAccountDO.getId());
map.put(JwtConstant.USER_ACCOUNT_ID, userAccountVO.getId());
map.put(JwtConstant.ROLE_ID, 0);
map.put(JwtConstant.TOKEN_TYPE, JwtConstant.IUAV_TOKEN);
String token = JwtUtil.createJwt(map);
return ResultBody.success(AppUserSucVO.builder().openId(userAccountDO.getOpenId()).unionId(userAccountDO.getUnionId()).token(token).userAccountId(userAccountDO.getId()).build());
return ResultBody.success(AppUserSucVO.builder().token(token).userAccountId(userAccountVO.getId()).build());
}
}
package com.mmc.iuav.user.service.impl;
import com.alibaba.fastjson2.JSONObject;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.dao.CompanyAuthDao;
import com.mmc.iuav.user.entity.CompanyAuthDO;
import com.mmc.iuav.user.model.vo.CompanyAuthVO;
import com.mmc.iuav.user.service.CompanyAuthService;
import com.mmc.iuav.user.util.QccEntAuthUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author: zj
* @Date: 2023/5/17 13:38
*/
@Slf4j
@Service
public class CompanyAuthServiceImpl implements CompanyAuthService {
@Autowired
private QccEntAuthUtil qccEntAuthUtil;
@Autowired
private CompanyAuthDao companyAuthDao;
@Override
public ResultBody add(CompanyAuthVO companyAuthVO) {
log.info("用户:"+companyAuthVO.getUserAccountId()+" 企业认证:{}", JSONObject.toJSONString(companyAuthVO));
CompanyAuthDO companyAuthDO = companyAuthDao.getCompanyAuth(companyAuthVO.getUserAccountId());
if (companyAuthDO != null){
return ResultBody.success("已通过");
}
ResultBody companyCheckRes = this.companyCheck(companyAuthVO);
System.out.println(companyCheckRes);
if (!companyCheckRes.getCode().equals("200")){
return companyCheckRes;
}
companyAuthDO = new CompanyAuthDO(companyAuthVO);
companyAuthDO.setAuthStatus(1);
companyAuthDao.addCompanyAuth(companyAuthDO);
return ResultBody.success();
}
public ResultBody companyCheck(CompanyAuthVO companyAuthVO){
String businessRes = qccEntAuthUtil.businessLicenseCheck(companyAuthVO.getLicenseImg());
if (businessRes == null){
ResultBody resultBody = ResultBody.error(ResultEnum.BUSINESS_LICENSE_CHECK_ANALYSIS_ERROR);
return resultBody;
}
//将字符串转化成json对象
JSONObject businessResJson=JSONObject.parseObject(businessRes);
if(businessResJson.getString("success").equals("false")) {
return ResultBody.error(ResultEnum.BUSINESS_LICENSE_CHECK_ANALYSIS_ERROR);
}else {
if(businessResJson.getString("name").equals(this.convert(companyAuthVO.getCompanyName()))
&&businessResJson.getString("reg_num").equals(companyAuthVO.getCreditCode())){
String check2Res = qccEntAuthUtil.check2(companyAuthVO.getCompanyName(), companyAuthVO.getCreditCode());
if (check2Res != null){
String status = qccEntAuthUtil.FormartJson(check2Res, "Status");
if (status.equals("200")){
Integer verifyCode = qccEntAuthUtil.resultFormatJson(check2Res);
if (verifyCode.equals(1)){
return ResultBody.success();
}
String returnString = "";
if (verifyCode.equals(0)){
returnString = "统一社会信用代码有误";
}else if (verifyCode.equals(2)){
returnString = "企业名称不一致";
}else if (verifyCode.equals(3)){
returnString = "法定代表人名称不一致";
}
return ResultBody.error(returnString);
}
String errorString = "";
if (status.equals("201")){
errorString = "查询无结果";
}else if (status.equals("202")){
errorString = "查询参数错误,请检查";
}else if (status.equals("205")){
errorString = "等待处理中";
}else if (status.equals("207")){
errorString = "请求数据的条目数超过上限(5000)";
}else if (status.equals("208")){
errorString = "此接口不支持此公司类型查询";
}else if (status.equals("209")){
errorString = "企业数量超过上限";
}else if (status.equals("213")){
errorString = "参数长度不能小于2";
}else if (status.equals("215")){
errorString = "不支持的查询关键字";
}else if (status.equals("218")){
errorString = "该企业暂不支持空壳扫描";
}else if (status.equals("219")){
errorString = "该企业暂不支持准入尽调";
}else if (status.equals("105")){
errorString = "接口已下线停用";
}else if (status.equals("110")){
errorString = "当前相同查询连续出错,请等2小时后重试";
}else {
errorString = "认证报错,请联系管理员";
}
return ResultBody.error(errorString);
}else {
return ResultBody.error("认证报错");
}
}else {
return ResultBody.error(ResultEnum.BUSINESS_LICENSE_CHECK_PARAMETER_ERROR);
}
}
}
public String convert(String entName){
StringBuffer afterConvertEntName=new StringBuffer(entName);
afterConvertEntName.length();
for(int i=0;i<afterConvertEntName.length();i++){
if(afterConvertEntName.charAt(i)=='('){
afterConvertEntName.setCharAt(i,'(');
}
if(afterConvertEntName.charAt(i)==')'){
afterConvertEntName.setCharAt(i,')');
}
}
return afterConvertEntName.toString();
}
@Override
public ResultBody fuzzyQueryCompany(String searchKey) {
String companyResult = qccEntAuthUtil.fuzzySearch(searchKey);
//将字符串转化成json对象
JSONObject entResultJson=JSONObject.parseObject(companyResult);
if(companyResult==null){
return ResultBody.error("无数据,请手动输入");
}
if("200".equals(entResultJson.getString("Status"))){
return ResultBody.success(entResultJson);
}else {
return ResultBody.error("无数据,请手动输入");
}
}
}
package com.mmc.iuav.user.service.impl;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.dao.CooperationDao;
import com.mmc.iuav.user.entity.CooperationTagDO;
import com.mmc.iuav.user.entity.UserApplyTagDO;
import com.mmc.iuav.user.model.vo.CooperationTagVO;
import com.mmc.iuav.user.model.vo.UserApplyTagVO;
import com.mmc.iuav.user.service.CooperationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author: zj
* @Date: 2023/5/17 21:19
*/
@Service
public class CooperationServiceImpl implements CooperationService {
@Autowired
private CooperationDao cooperationDao;
@Override
public ResultBody listTag() {
List<CooperationTagDO> list = cooperationDao.listTags();
List<CooperationTagVO> resList = list.stream().map(CooperationTagDO::buildCooperationTagVO).collect(Collectors.toList());
return ResultBody.success(resList);
}
@Override
public ResultBody apply(UserApplyTagVO userApplyTagVO) {
UserApplyTagDO userApplyTagDO = new UserApplyTagDO(userApplyTagVO);
cooperationDao.addApply(userApplyTagDO);
return ResultBody.success();
}
}
package com.mmc.iuav.user.service.impl;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.dao.UserServiceDao;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.service.UserAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -17,13 +19,30 @@ public class UserAccountServiceImpl implements UserAccountService {
private UserServiceDao userServiceDao;
@Override
public UserAccountDO getUserAccountInfoByUnionId(String unionId) {
public UserAccountVO getUserAccountInfoByUnionId(String unionId) {
UserAccountDO userAccountDO = userServiceDao.getUserAccountInfoByUnionId(unionId);
return userAccountDO;
if (userAccountDO != null) {
return userAccountDO.buildUserAccountVO();
}
return null;
}
@Override
public void insertUserAccount(UserAccountDO userAccountDO) {
userServiceDao.insertUserAccount(userAccountDO);
}
@Override
public UserAccountVO getUserAccountById(Integer userAccountId) {
UserAccountDO userAccountDO = userServiceDao.getUserAccountById(userAccountId);
UserAccountVO userAccountVO = userAccountDO.buildUserAccountVO();
return userAccountVO;
}
@Override
public ResultBody update(UserAccountVO userAccountVO) {
UserAccountDO userAccountDO = new UserAccountDO(userAccountVO);
userServiceDao.update(userAccountDO);
return ResultBody.success();
}
}
package com.mmc.iuav.user.util;
import com.alibaba.fastjson2.JSONException;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mmc.iuav.http.HttpHelper;
import com.mmc.iuav.http.HttpsRequestUtil;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
/**
* @author: zj
* @Date: 2023/5/17 13:37
*/
@Component
public class QccEntAuthUtil {
private static final String APP_KEY = "5015e664848d406ab1ca4b505c3da803";
private static final String SECRET_KEY = "7C4DB8CCECC148175E46392CC0A1B410";
public String fuzzySearch(String searchKey) {
String reqInterNme = "http://api.qichacha.com/FuzzySearch/GetList";
//pageSize=6,显示6条
//String paramStr = "searchKey="+searchKey;
String status = "";
try {
HttpHead reqHeader = new HttpHead();
String[] autherHeader = RandomAuthentHeader();
reqHeader.setHeader("Token", autherHeader[0]);
reqHeader.setHeader("Timespan", autherHeader[1]);
reqHeader.setHeader("Content-Type", "application/json; charset=UTF-8");
reqHeader.setHeader("Accept", "application/json; charset=UTF-8");
reqHeader.setHeader("Accept-language", "zh-CN,zh;q=0.9");
reqHeader.setHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
final String reqUri = reqInterNme.concat("?key=").concat(APP_KEY).concat("&searchKey=").concat(searchKey).concat("&pageSize=6");
String tokenJson = HttpHelper.httpGet(reqUri, reqHeader.getAllHeaders());
return tokenJson;
} catch (Exception e1) {
e1.printStackTrace();
return null;
}
}
public String check2(String companyName, String creditCode){
String reqInterNme = "https://api.qichacha.com/ECITwoElVerify/GetInfo";
String status = "";
try {
HttpHead reqHeader = new HttpHead();
String[] autherHeader = RandomAuthentHeader();
reqHeader.setHeader("Token", autherHeader[0]);
reqHeader.setHeader("Timespan", autherHeader[1]);
String verifyType = "1";
final String reqUri = reqInterNme.concat("?key=").concat(APP_KEY).concat("&verifyName=").concat(companyName).concat("&creditCode=").concat(creditCode).concat("&verifyType=").concat(verifyType);
String tokenJson = HttpHelper.httpGet(reqUri, reqHeader.getAllHeaders());
status = FormartJson(tokenJson, "Status");
if (!HttpCodeRegex.isAbnornalRequest(status)) {
PrettyPrintJson(tokenJson);
}
return tokenJson;
} catch (Exception e1) {
e1.printStackTrace();
}
return null;
}
// public static String check3(String companyName, String creditCode, String operName){
// String reqInterNme = "https://api.qichacha.com/ECIThreeElVerify/GetInfo";
// String status = "";
// try {
// HttpHead reqHeader = new HttpHead();
// String[] autherHeader = RandomAuthentHeader();
// reqHeader.setHeader("Token", autherHeader[0]);
// reqHeader.setHeader("Timespan", autherHeader[1]);
// final String reqUri = reqInterNme.concat("?key=").concat(APP_KEY).concat("&companyName=").concat(companyName).concat("&creditCode=").concat(creditCode).concat("&operName=").concat(operName);
// String tokenJson = HttpHelper.httpGet(reqUri, reqHeader.getAllHeaders());
// status = FormartJson(tokenJson, "Status");
// if (!HttpCodeRegex.isAbnornalRequest(status)) {
// PrettyPrintJson(tokenJson);
// }
// return tokenJson;
// } catch (Exception e1) {
// e1.printStackTrace();
// }
// return null;
// }
public String businessLicenseCheck(String businessLicenseUrl){
String url = "https://bizlicense.market.alicloudapi.com/rest/160601/ocr/ocr_business_license.json";
String method = "POST";
Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "APPCODE " + "524b1864a88f47458c1061bae3811570");
headers.put("Content-Type", "application/json; charset=UTF-8");
Map<String, String> querys = new HashMap<String, String>();
String bodys = "{\"image\":\""+businessLicenseUrl+"\"}";
try {
String response = HttpsRequestUtil.httpsRequest(url, method, headers, bodys);
//获取response的body
if(response.equals("Invalid Result - invalid business license")){
return null;
}
return response;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取返回码 Res Code
*/
static class HttpCodeRegex {
private static final String ABNORMAL_REGIX = "(101)|(102)";
private static final Pattern pattern = Pattern.compile(ABNORMAL_REGIX);
protected static boolean isAbnornalRequest(final String status) {
return pattern.matcher(status).matches();
}
}
/**
* 获取Auth Code
* @return
*/
protected static final String[] RandomAuthentHeader() {
String timeSpan = String.valueOf(System.currentTimeMillis() / 1000);
String[] authentHeaders = new String[] { DigestUtils.md5Hex(APP_KEY.concat(timeSpan).concat(SECRET_KEY)).toUpperCase(), timeSpan };
return authentHeaders;
}
/**
* 解析JSON
* @param jsonString
* @param key
* @return
* @throws JSONException
*/
public String FormartJson(String jsonString, String key) throws JSONException {
//JSONObject jObject = new JSONObject(jsonString);
JSONObject jsonObject = JSONObject.parseObject(jsonString);
return (String) jsonObject.get(key);
}
/**
* 解析JSON
* @param jsonString
* @return
* @throws JSONException
*/
public Integer resultFormatJson(String jsonString) throws JSONException {
//JSONObject jObject = new JSONObject(jsonString);
JSONObject jsonObject = JSONObject.parseObject(jsonString);
Object object = jsonObject.get("Result");
JSONObject result = JSONObject.parseObject(object.toString());
return (Integer) result.get("VerifyResult");
}
/**
* pretty print 返回值
* @param jsonString
* @throws JSONException
*/
protected static void PrettyPrintJson(String jsonString) throws JSONException {
try {
ObjectMapper mapper = new ObjectMapper();
Object obj = mapper.readValue(jsonString, Object.class);
String indented = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
System.out.println(indented);
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
......@@ -47,7 +47,7 @@ spring:
mybatis:
executor-type: simple
mapper-locations: classpath:mapper/**/*.xml
type-aliases-package: com.mmc.iuav.user
type-aliases-package: com.mmc.iuav.user.entity
configuration:
map-underscore-to-camel-case: true
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.iuav.user.dao.CompanyAuthDao">
<!-- <resultMap id="companyAuthResultMAp" type="com.mmc.iuav.user.entity.CompanyAuthDO">-->
<!-- <id column="id" property="id"/>-->
<!-- <result property="authStatus" column="auth_status"/>-->
<!-- <result property="userAccountId" column="user_account_id"/>-->
<!-- <result property="companyName" column="company_name"/>-->
<!-- <result property="creditCode" column="credit_code"/>-->
<!-- <result property="licenseImg" column="license_img"/>-->
<!-- </resultMap>-->
<insert id="addCompanyAuth" parameterType="com.mmc.iuav.user.entity.CompanyAuthDO"
keyProperty="id" useGeneratedKeys="true">
insert into company_auth(user_account_id,company_name,credit_code,license_img,auth_status,create_time)
values (#{userAccountId}, #{companyName}, #{creditCode}, #{licenseImg}, #{authStatus}, NOW())
</insert>
<!-- <select id="getCompanyAuth" resultMap="companyAuthResultMAp">-->
<!-- select id,user_account_id,company_name,credit_code,license_img,auth_status-->
<!-- from company_auth where user_account_id = #{userAccountId}-->
<!-- </select>-->
<select id="getCompanyAuth" resultType="com.mmc.iuav.user.entity.CompanyAuthDO">
select id,user_account_id,company_name,credit_code,license_img,auth_status
from company_auth where user_account_id = #{userAccountId}
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.iuav.user.dao.CooperationDao">
<insert id="addApply" parameterType="com.mmc.iuav.user.entity.UserApplyTagDO" useGeneratedKeys="true" keyProperty="id">
insert into user_apply_tag(cooperation_tag_id, user_account_id, apply_name, apply_phone, remark, create_time)
values(#{cooperationTagId}, #{userAccountId}, #{applyName}, #{applyPhone}, #{remark}, NOW())
</insert>
<select id="listTags" resultType="com.mmc.iuav.user.entity.CooperationTagDO">
select id, tag_name, tag_img, tag_description, create_time from cooperation_tag
</select>
</mapper>
\ No newline at end of file
......@@ -32,10 +32,53 @@
#{remark}, #{portType}, NOW())
</insert>
<update id="update" parameterType="com.mmc.iuav.user.entity.UserAccountDO">
update user_account
<set>
<if test="phoneNum != null">
phone_num = #{phoneNum},
</if>
<if test="userName != null">
user_name = #{userName},
</if>
<if test="nickName != null">
nick_name = #{nickName},
</if>
<if test="userImg != null">
user_img = #{userImg},
</if>
<if test="userSex != null">
user_sex = #{userSex},
</if>
<if test="email != null">
email = #{email},
</if>
<if test="accountStatus != null">
account_status = #{accountStatus},
</if>
<if test="remark != null">
remark = #{remark},
</if>
<if test="portType != null">
port_type = #{portType}
</if>
</set>
<where>
id = #{id}
</where>
</update>
<select id="getUserAccountInfoByUnionId" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select id, account_type, uid, phone_num, user_name, nick_name, user_img, open_id, union_id, user_sex, email, source, account_status, remark,
port_type, is_deleted, create_time, update_time
from user_account
where union_id = #{unionId} and is_deleted = 0
</select>
<select id="getUserAccountById" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select id, account_type, uid, phone_num, user_name, nick_name, user_img, open_id, union_id, user_sex, email, source, account_status, remark,
port_type, is_deleted, create_time, update_time
from user_account
where id = #{id}
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论