提交 fd7e19f6 作者: zhenjie

Merge branch 'develop'

package com.mmc.iuav.user.model.fdd.vo;
import com.mmc.iuav.group.Insert;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
......@@ -18,19 +19,19 @@ import java.io.Serializable;
@AllArgsConstructor
public class ContractVO implements Serializable {
private static final long serialVersionUID = 570570471824495498L;
@ApiModelProperty(value = "合同地址")
@NotNull(message = "合同地址不能为空")
@ApiModelProperty(value = "合同地址", required = true)
@NotNull(message = "合同地址不能为空", groups = {Insert.class})
private String docUrl;
@ApiModelProperty(value = "订单编号")
@NotNull(message = "订单编号不能为空")
@ApiModelProperty(value = "订单编号", required = true)
@NotNull(message = "订单编号不能为空", groups = {Insert.class})
private String orderNo;
@ApiModelProperty(value = "合同标题")
@NotNull(message = "合同标题不能为空")
@ApiModelProperty(value = "合同标题", required = true)
@NotNull(message = "合同标题不能为空", groups = {Insert.class})
private String title;
@ApiModelProperty(value = "端口:0小程序 1后台")
@ApiModelProperty(value = "端口:0小程序 1后台", required = true)
private Integer port;
@ApiModelProperty(value = "unionId", hidden = true)
......
......@@ -29,7 +29,7 @@ public class PayUavWalletVO implements Serializable {
@ApiModelProperty(value = "佣金")
private BigDecimal salaryAmount;
@ApiModelProperty(value = "订单状态 100:订单支付 1400:商城订单退款 1500:订单提成", required = true)
@ApiModelProperty(value = "订单状态 100:订单支付 1400:商城订单退款 1500:订单提成 999:确认收货", required = true)
private Integer orderStatus;
@ApiModelProperty(value = "订单备注")
......
......@@ -28,7 +28,7 @@ public class FddConstant {
//小程序企业实名认证异步回调
public static final String NOTIFY_E_CERT_RES = "fdd/auth/notifyECertRes";
//签署合同异步回调
public static final String NOTIFY_STAMP = "/fdd/contract/notifyStamp";
public static final String NOTIFY_STAMP = "fdd/contract/notifyStamp";
public static final String APP_ID = "appId";
......
package com.mmc.iuav.user.controller.fdd;
import com.mmc.iuav.group.Insert;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.controller.BaseController;
import com.mmc.iuav.user.model.fdd.dto.ContractInfoDTO;
......@@ -7,6 +8,7 @@ import com.mmc.iuav.user.model.fdd.vo.ContractVO;
import com.mmc.iuav.user.service.fdd.ContractService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
......@@ -29,7 +31,7 @@ public class ContractController extends BaseController {
@ApiOperation(value = "上传合同")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("/uploadContract")
public ResultBody uploadContract(@RequestBody ContractVO param, HttpServletRequest request) {
public ResultBody uploadContract(@Validated(value = {Insert.class}) @RequestBody ContractVO param, HttpServletRequest request) {
return contractService.uploadContract(param, this.getUserLoginInfoFromRedis(request));
}
......
......@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
......@@ -79,7 +80,7 @@ public class UserFddAuthController extends BaseController {
@ApiOperation(value = "获取认证信息")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = UserFddDTO.class)})
@GetMapping("getAppUserFddInfo")
public ResultBody<UserFddDTO> getAppUserFddInfo(@ApiParam(value = "端口:0小程序 1后台") @RequestParam Integer port, HttpServletRequest request) {
public ResultBody<List<UserFddDTO>> getAppUserFddInfo(@ApiParam(value = "端口:0小程序 1后台") @RequestParam Integer port, HttpServletRequest request) {
return userFddAuthService.getAppUserFddInfo(port, this.getUserLoginInfoFromRedis(request));
}
......
......@@ -11,6 +11,7 @@ import com.mmc.iuav.user.model.vo.wallet.WalletFlowVO;
import com.mmc.iuav.user.service.wallet.PayWalletService;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
......@@ -57,6 +58,14 @@ public class PayWalletController extends BaseController {
return payWalletService.feignWalletFlow(walletFlowVO);
}
@ApiOperation(value = "feign - 钱包流水记录(优化版)")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("optimizeWalletFlow")
@ApiIgnore
public ResultBody optimizeWalletFlow(@RequestBody WalletFlowVO walletFlowVO) {
return payWalletService.optimizeWalletFlow(walletFlowVO);
}
@ApiOperation(value = "feign-钱包流水记录不带token")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("feignWalletFlowNO")
......@@ -79,7 +88,7 @@ public class PayWalletController extends BaseController {
return payWalletService.billingDetails(id, detailType);
}
@ApiOperation(value = "商城订单钱包流水加扣记录", hidden = true)
@ApiOperation(value = "商城订单钱包流水加扣记录")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("feignPayUavWallet")
public ResultBody payUavWallet(@RequestBody PayUavWalletVO payUavWalletVO) {
......
......@@ -2,6 +2,7 @@ package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.entity.UserRcdDO;
import com.mmc.iuav.user.entity.fdd.UserFddDO;
import com.mmc.iuav.user.model.qo.UserAccountQO;
import com.mmc.iuav.user.model.qo.UserRcdQO;
import org.apache.ibatis.annotations.Mapper;
......@@ -168,4 +169,5 @@ public interface UserServiceDao {
UserAccountDO getUserAccountInfoByOpenId(String openid);
List<UserFddDO> listUserFddInfo(@Param(value = "unionId") String unionId, @Param(value = "openid") String openid);
}
package com.mmc.iuav.user.mq;
import com.mmc.iuav.user.model.fdd.dto.ContractInfoDTO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author: zj
......@@ -13,7 +10,15 @@ import org.springframework.stereotype.Component;
public interface MqProducer {
/**
* 用户信息变更
*
* @param userAccountVO
*/
public void sentUserInfoChangedMsg(UserAccountVO userAccountVO);
/**
* 合同签署完成
*
* @param contractInfoDTO
*/
public void sentFinishOrderSign(ContractInfoDTO contractInfoDTO);
}
......@@ -24,4 +24,11 @@ public class RabbitmqConstant {
*/
public final static String USER_TOP_UP_SUCCESS_QUEUE = "USER_TOP_UP_SUCCESS_QUEUE";
public final static String USER_TOP_UP_SUCCESS_ROUTING_KEY = "USER_TOP_UP_SUCCESS_ROUTING_KEY";
/**
* 合同签署成功队列、routing_key
*/
public final static String ORDER_SIGN_EXCHANGE = "ORDER_SIGN_EXCHANGE";
public final static String ORDER_SIGN_FINISH_QUEUE = "ORDER_SIGN_FINISH_QUEUE";
public final static String ORDER_SIGN_SUCCESS_ROUTING_KEY = "ORDER_SIGN_SUCCESS_ROUTING_KEY";
}
package com.mmc.iuav.user.mq.impl;
import com.alibaba.fastjson2.JSONObject;
import com.mmc.iuav.user.model.fdd.dto.ContractInfoDTO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.mq.MqProducer;
import com.mmc.iuav.user.mq.constant.RabbitmqConstant;
......@@ -24,4 +25,10 @@ public class MqProducerImpl implements MqProducer {
log.info("sentUserInfoChangedMsg:{}", JSONObject.toJSONString(userAccountVO));
rabbitTemplate.convertAndSend(RabbitmqConstant.USER_INFO_UPDATE_FANOUT_EXCHANGE, "", JSONObject.toJSONString(userAccountVO));
}
@Override
public void sentFinishOrderSign(ContractInfoDTO contractInfoDTO) {
log.info("sentUserInfoChangedMsg:{}", JSONObject.toJSONString(contractInfoDTO));
rabbitTemplate.convertAndSend(RabbitmqConstant.ORDER_SIGN_EXCHANGE, RabbitmqConstant.ORDER_SIGN_SUCCESS_ROUTING_KEY, JSONObject.toJSONString(contractInfoDTO));
}
}
......@@ -5,6 +5,7 @@ import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.fdd.dto.UserFddDTO;
import java.util.List;
import java.util.Map;
/**
......@@ -25,7 +26,7 @@ public interface UserFddAuthService {
String replaceUnableString(String uid);
ResultBody<UserFddDTO> getAppUserFddInfo(Integer port, LoginSuccessDTO loginSuccessDTO);
ResultBody<List<UserFddDTO>> getAppUserFddInfo(Integer port, LoginSuccessDTO loginSuccessDTO);
ResultBody getFileByUuid(String uuid, String docType);
......
......@@ -15,6 +15,7 @@ import com.mmc.iuav.user.entity.fdd.UserFddDO;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.fdd.dto.ContractInfoDTO;
import com.mmc.iuav.user.model.fdd.vo.ContractVO;
import com.mmc.iuav.user.mq.MqProducer;
import com.mmc.iuav.user.service.fdd.ContractService;
import com.mmc.iuav.user.service.fdd.SealManageService;
import com.mmc.iuav.user.util.TDateUtil;
......@@ -40,6 +41,8 @@ public class ContractServiceImpl implements ContractService {
ContractDao contractDao;
@Resource
SealManageService sealManageService;
@Resource
private MqProducer mqProducer;
/**
* 上传合同
......@@ -50,6 +53,9 @@ public class ContractServiceImpl implements ContractService {
@Override
public ResultBody uploadContract(ContractVO param, LoginSuccessDTO loginSuccessDTO) {
ResultBody resultBody = sealManageService.checkAuthStatus(param.getPort(), loginSuccessDTO);
if (!resultBody.getCode().equals("200")) {
return resultBody;
}
UserFddDO userFddDO = (UserFddDO) resultBody.getResult();
FddBaseClient baseClient = new FddBaseClient(FddConnectConstant.APP_ID, FddConnectConstant.APP_KEY, FddConnectConstant.VERSION, FddConnectConstant.HOST);
// 查询这个订单号之前有没有上传过合同有的话就删除
......@@ -116,6 +122,9 @@ public class ContractServiceImpl implements ContractService {
@Override
public ResultBody stamp(String contractId, LoginSuccessDTO loginSuccessDTO, String pages, Integer port) {
ResultBody resultBody = sealManageService.checkAuthStatus(port, loginSuccessDTO);
if (!resultBody.getCode().equals("200")) {
return resultBody;
}
UserFddDO userFddDO = (UserFddDO) resultBody.getResult();
// 获取合同信息
ContractInfoDO contractInfo = contractDao.contractInfoByOrderNo(null, contractId);
......@@ -189,6 +198,10 @@ public class ContractServiceImpl implements ContractService {
updateSignStatus.setSignStatus(4);
updateSignStatus.setBRemark(resultDesc);
updateSignStatus.setSingerTime(new Date());
// 同步订单状态
ContractInfoDTO contractInfoDTO = contractInfoDO.buildContractInfoDTO();
contractInfoDTO.setSignStatus(4);
mqProducer.sentFinishOrderSign(contractInfoDTO);
} else if (contractInfoDO.getSignStatus() == 2 && FddConstant.SIGN_FAIL.equals(resultCode) && contractInfoDO.getBTransactionId().equals(transactionId)) {
// 乙方公司签章失败
updateSignStatus.setSignStatus(3);
......@@ -200,7 +213,10 @@ public class ContractServiceImpl implements ContractService {
@Override
public ResultBody file(String contractId, LoginSuccessDTO loginSuccessDTO, Integer port) {
sealManageService.checkAuthStatus(port, loginSuccessDTO);
ResultBody resultBody = sealManageService.checkAuthStatus(port, loginSuccessDTO);
if (!resultBody.getCode().equals("200")) {
return resultBody;
}
// 判断该合同状态是否可以归档
ContractInfoDO contractInfoDO = contractDao.contractInfoByOrderNo(null, contractId);
if (!contractInfoDO.getSignStatus().equals(4)) {
......
......@@ -53,6 +53,9 @@ public class SealManageServiceImpl implements SealManageService {
@Override
public ResultBody uploadSeal(SealVO sealVO, LoginSuccessDTO loginSuccessDTO) {
ResultBody resultBody = this.checkAuthStatus(sealVO.getPort(), loginSuccessDTO);
if (!resultBody.getCode().equals("200")) {
return resultBody;
}
UserFddDO userFddInfo = (UserFddDO) resultBody.getResult();
sealVO.setUnionId(userFddInfo.getUnionId());
FddBaseClient baseClient = new FddBaseClient(FddConnectConstant.APP_ID, FddConnectConstant.APP_KEY, FddConnectConstant.VERSION, FddConnectConstant.HOST);
......@@ -119,6 +122,9 @@ public class SealManageServiceImpl implements SealManageService {
@Override
public ResultBody removeSeal(String signatureId, Integer port, LoginSuccessDTO loginSuccessDTO) {
ResultBody resultBody = checkAuthStatus(port, loginSuccessDTO);
if (!resultBody.getCode().equals("200")) {
return resultBody;
}
UserFddDO userFddInfo = (UserFddDO) resultBody.getResult();
// 调用法大大删除印章接口
FddExtraClient client = new FddExtraClient(FddConnectConstant.APP_ID, FddConnectConstant.APP_KEY, FddConnectConstant.VERSION, FddConnectConstant.HOST);
......@@ -140,7 +146,24 @@ public class SealManageServiceImpl implements SealManageService {
String uid;
if (port.equals(0)) {
UserAccountDO userInfo = userServiceDao.getUserAccountById(loginSuccessDTO.getUserAccountId());
uid = userFddAuthService.replaceUnableString(userInfo.getUnionId());
String unionId = userInfo.getUnionId();
uid = userFddAuthService.replaceUnableString(unionId);
UserFddDO userFddInfo = userFddAuthDao.getAppUserFddInfo(uid);
if (userFddInfo == null) {
uid = userFddAuthService.replaceUnableString(userInfo.getOpenId());
} else {
Integer accountType = userFddInfo.getAccountType();
Integer personVerifyStatus = userFddInfo.getPersonVerifyStatus();
Integer entVerifyStatus = userFddInfo.getEntVerifyStatus();
boolean isPersonVerified = !accountType.equals(1) && personVerifyStatus.equals(2);
boolean isEntVerified = !accountType.equals(2) && entVerifyStatus.equals(4);
if (isPersonVerified || isEntVerified) {
uid = userFddAuthService.replaceUnableString(userInfo.getOpenId());
}
}
} else {
uid = loginSuccessDTO.getUserAccountId().toString();
}
......@@ -161,6 +184,9 @@ public class SealManageServiceImpl implements SealManageService {
@Transactional(rollbackFor = Exception.class)
public ResultBody defaultSeal(String signatureId, Integer port, LoginSuccessDTO loginSuccessDTO) {
ResultBody resultBody = checkAuthStatus(port, loginSuccessDTO);
if (!resultBody.getCode().equals("200")) {
return resultBody;
}
UserFddDO userFddInfo = (UserFddDO) resultBody.getResult();
FddExtraClient client = new FddExtraClient(FddConnectConstant.APP_ID, FddConnectConstant.APP_KEY, FddConnectConstant.VERSION, FddConnectConstant.HOST);
DefaultSignatureParams params = new DefaultSignatureParams();
......@@ -181,6 +207,9 @@ public class SealManageServiceImpl implements SealManageService {
@Override
public ResultBody getSealInfo(String signatureId, Integer port, LoginSuccessDTO loginSuccessDTO) {
ResultBody resultBody = checkAuthStatus(port, loginSuccessDTO);
if (!resultBody.getCode().equals("200")) {
return resultBody;
}
UserFddDO userFddInfo = (UserFddDO) resultBody.getResult();
FddExtraClient client = new FddExtraClient(FddConnectConstant.APP_ID, FddConnectConstant.APP_KEY, FddConnectConstant.VERSION, FddConnectConstant.HOST);
QuerySignatureParams params = new QuerySignatureParams();
......
......@@ -15,6 +15,7 @@ import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.entity.fdd.FddVerifyInfoDO;
import com.mmc.iuav.user.entity.fdd.UserFddDO;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.fdd.dto.UserFddDTO;
import com.mmc.iuav.user.model.fdd.resp.CompanyVerifyResp;
import com.mmc.iuav.user.model.fdd.resp.PersonVerifyResp;
import com.mmc.iuav.user.service.fdd.FddService;
......@@ -23,7 +24,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* author:zhenjie
......@@ -42,6 +45,9 @@ public class UserFddAuthServiceImpl implements UserFddAuthService {
@Autowired
private UserFddAuthDao userFddAuthDao;
@Autowired
private UserFddAuthService userFddAuthService;
@Override
public String register(String uid, String accountType) {
return fddService.register(uid, accountType);
......@@ -49,8 +55,14 @@ public class UserFddAuthServiceImpl implements UserFddAuthService {
@Override
public ResultBody getPersonVerifyUrl(Integer userAccountId) {
String unionId;
UserAccountDO userInfo = userServiceDao.getUserAccountById(userAccountId);
String unionId = this.replaceUnableString(userInfo.getUnionId());
unionId = this.replaceUnableString(userInfo.getUnionId());
// 判断是否使用unionId注册过企业认证,如果注册过那就用openid注册
String companyCustomerId = this.checkRegisterFdd(unionId, 2);
if (companyCustomerId != null) {
unionId = this.replaceUnableString(userInfo.getOpenId());
}
//验证是否注册个人
String customerId = this.checkRegisterFdd(unionId, 1);
if (customerId == null) {
......@@ -119,7 +131,14 @@ public class UserFddAuthServiceImpl implements UserFddAuthService {
if (port.equals(0)) {
// 获取小程序用户信息拿到unionId
UserAccountDO userInfo = userServiceDao.getUserAccountById(loginSuccessDTO.getUserAccountId());
uId = this.replaceUnableString(userInfo.getUnionId());
String unionId = this.replaceUnableString(userInfo.getUnionId());
// 判断是否用uid注册个人认证,如果用了那么就用openid进行企业认证
String customerId = this.checkRegisterFdd(unionId, 1);
if (customerId == null) {
uId = unionId;
} else {
uId = this.replaceUnableString(userInfo.getOpenId());
}
} else {
uId = loginSuccessDTO.getUserAccountId().toString();
}
......@@ -197,6 +216,21 @@ public class UserFddAuthServiceImpl implements UserFddAuthService {
if (port.equals(0)) {
UserAccountDO userInfo = userServiceDao.getUserAccountById(loginSuccessDTO.getUserAccountId());
uId = this.replaceUnableString(userInfo.getUnionId());
UserFddDO userFddInfo = userFddAuthDao.getAppUserFddInfo(uId);
if (userFddInfo == null) {
uId = userFddAuthService.replaceUnableString(userInfo.getOpenId());
} else {
Integer accountType = userFddInfo.getAccountType();
Integer personVerifyStatus = userFddInfo.getPersonVerifyStatus();
Integer entVerifyStatus = userFddInfo.getEntVerifyStatus();
boolean isPersonVerified = accountType.equals(1) && !personVerifyStatus.equals(2);
boolean isEntVerified = accountType.equals(2) && !entVerifyStatus.equals(4);
if (isPersonVerified || isEntVerified) {
uId = userFddAuthService.replaceUnableString(userInfo.getOpenId());
}
}
} else {
uId = loginSuccessDTO.getUserAccountId().toString();
}
......@@ -229,16 +263,19 @@ public class UserFddAuthServiceImpl implements UserFddAuthService {
@Override
public ResultBody getAppUserFddInfo(Integer port, LoginSuccessDTO loginSuccessDTO) {
public ResultBody<List<UserFddDTO>> getAppUserFddInfo(Integer port, LoginSuccessDTO loginSuccessDTO) {
String uId;
String openid;
if (port == 0) {
UserAccountDO userInfo = userServiceDao.getUserAccountById(loginSuccessDTO.getUserAccountId());
uId = this.replaceUnableString(userInfo.getUnionId());
openid = this.replaceUnableString(userInfo.getOpenId());
} else {
uId = loginSuccessDTO.getUserAccountId().toString();
openid = null;
}
UserFddDO appUserFddDO = userFddAuthDao.getAppUserFddInfo(uId);
return ResultBody.success(appUserFddDO == null ? null : appUserFddDO.buildUserFddDTO());
List<UserFddDO> userFddDO = userServiceDao.listUserFddInfo(uId, openid);
return ResultBody.success(userFddDO == null ? null : userFddDO.stream().map(UserFddDO::buildUserFddDTO).collect(Collectors.toList()));
}
private CompanyVerifyResp reqCompanyVerifyUrl(String customerId) {
......
......@@ -25,5 +25,6 @@ public interface PayWalletService {
ResultBody billingDetails(Integer id, String detailType);
ResultBody payUavWallet(PayUavWalletVO payUavWalletVO);
ResultBody optimizeWalletFlow(WalletFlowVO walletFlowVO);
}
......@@ -462,5 +462,22 @@
where open_id = #{openid}
and disable = 0
</select>
<select id="listUserFddInfo" resultType="com.mmc.iuav.user.entity.fdd.UserFddDO">
select id,
customer_id,
union_id,
person_verify_status,
ent_verify_status,
account_type,
create_time,
update_time
from user_fdd
<where>
union_id = #{unionId}
<if test="openid != null">
or union_id = #{openid}
</if>
</where>
</select>
</mapper>
......@@ -18,4 +18,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/cms
newTag: ca052edd5a7e95f4d20df7935fad9c5b9ba2feee
newTag: a9be43318a9913f15ec9657f2d026666e62514e0
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论