Commit ecd19e8a authored by 王亮's avatar 王亮

Merge branch 'feature-channel-contract-20230519' into 'master'

Feature channel contract 20230519

See merge request !110
parents b9133395 987834fe
...@@ -344,6 +344,8 @@ public class AppController implements IBaseController { ...@@ -344,6 +344,8 @@ public class AppController implements IBaseController {
oauthLoginInfoService.addLoginInfo(user, tenantId); oauthLoginInfoService.addLoginInfo(user, tenantId);
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, null, "", tenantId); LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, null, "", tenantId);
AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.SUPERLOGINTWO.ordinal()); AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.SUPERLOGINTWO.ordinal());
// 不同渠道用户补签不同模板合同
userService.channelUserSignContract(user, registerFrom);
log.info("第三方用户登录成功 [AppController] login2 --> loginFrom:{}, phoneNo:{},appChannel:{}", registerFrom, phoneNo, appChannel); log.info("第三方用户登录成功 [AppController] login2 --> loginFrom:{}, phoneNo:{},appChannel:{}", registerFrom, phoneNo, appChannel);
return JsonResult.buildSuccessResult("登录成功", bean); return JsonResult.buildSuccessResult("登录成功", bean);
} }
......
package cn.quantgroup.xyqb.event; package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.service.user.IUserService;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
import javax.annotation.Resource; import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -31,6 +33,9 @@ public class BlackHoleRegisteredEventListener implements ApplicationListener<Reg ...@@ -31,6 +33,9 @@ public class BlackHoleRegisteredEventListener implements ApplicationListener<Reg
@Value("#{'${register.templateids}'.split(',')}") @Value("#{'${register.templateids}'.split(',')}")
private List<Long> templateIds; private List<Long> templateIds;
@Resource
private IUserService userService;
@Override @Override
public void onApplicationEvent(RegisterEvent event) { public void onApplicationEvent(RegisterEvent event) {
...@@ -55,5 +60,7 @@ public class BlackHoleRegisteredEventListener implements ApplicationListener<Reg ...@@ -55,5 +60,7 @@ public class BlackHoleRegisteredEventListener implements ApplicationListener<Reg
registeredNotifyBlackHoleRabbitTemplate.convertAndSend(exchange, routingKey, registeredNotifyBlackHoleRabbitTemplate.convertAndSend(exchange, routingKey,
array.toString()); array.toString());
}); });
// 不同渠道签署不同的合同模板
userService.channelUserSignContract(user, null);
} }
} }
package cn.quantgroup.xyqb.model;
import lombok.Data;
import java.io.Serializable;
@Data
public class ContractRecordReq implements Serializable {
private static final long serialVersionUID = -1L;
private Long templateId;
/**
* 签约用户ID - 必传
*/
private Long userId;
}
package cn.quantgroup.xyqb.model;
import lombok.Data;
import java.util.Date;
@Data
public class ContractsRes {
private Long id;
private Long userId;
private Integer businessType;
/**
* 存放合同模板ID
*/
private Long templateId;
/**
* 存放交易ID
*/
private String sourceId;
/**
* 旧有订单ID
*/
private Long orderId;
/**
* 旧有订单ID(loanId)
*/
private Long loanApplicationHistoryId;
/**
* 身份证号
*/
private String idNo;
/** 合同(模板)类别 */
private Integer contractsType;
/** 上上签返回编号 */
private String ssqContractNo;
/** 合同编号 */
private String contractNo;
/** 合同存储路径(FastDFS) */
private String contractPdfUrl;
/** 合同 版本 */
private Integer version;
private Date createdAt;
private Date updatedAt;
}
package cn.quantgroup.xyqb.remote;
import cn.quantgroup.xyqb.model.ContractRecordReq;
import cn.quantgroup.xyqb.model.ContractsRes;
import cn.quantgroup.xyqb.model.JsonResult;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(name = "pdfApi", url = "${pdf.quantgroup.cn.https}")
public interface PdfRemoteService {
@PostMapping("/contract/record")
JsonResult<ContractsRes> getContractRecord(@RequestBody ContractRecordReq param);
}
...@@ -117,4 +117,9 @@ public interface IUserService { ...@@ -117,4 +117,9 @@ public interface IUserService {
void deregister(Long userId); void deregister(Long userId);
User submitModifyPhone(String prevPhoneNo, String curPhoneNo); User submitModifyPhone(String prevPhoneNo, String curPhoneNo);
/**
* 渠道用户签署合同
*/
void channelUserSignContract(User user, Long loginFrom);
} }
...@@ -13,6 +13,7 @@ import cn.quantgroup.xyqb.exception.DataException; ...@@ -13,6 +13,7 @@ import cn.quantgroup.xyqb.exception.DataException;
import cn.quantgroup.xyqb.exception.UserNotExistException; import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.UserRegisterLoginException; import cn.quantgroup.xyqb.exception.UserRegisterLoginException;
import cn.quantgroup.xyqb.model.*; import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.remote.PdfRemoteService;
import cn.quantgroup.xyqb.repository.*; import cn.quantgroup.xyqb.repository.*;
import cn.quantgroup.xyqb.service.captcha.IGeetestLogService; import cn.quantgroup.xyqb.service.captcha.IGeetestLogService;
import cn.quantgroup.xyqb.service.register.IUserDeregisterService; import cn.quantgroup.xyqb.service.register.IUserDeregisterService;
...@@ -22,12 +23,16 @@ import cn.quantgroup.xyqb.service.user.*; ...@@ -22,12 +23,16 @@ import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.service.wechat.IWechatService; import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.*; import cn.quantgroup.xyqb.util.*;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.sensorsdata.analytics.javasdk.ISensorsAnalytics; import com.sensorsdata.analytics.javasdk.ISensorsAnalytics;
import com.sensorsdata.analytics.javasdk.bean.EventRecord; import com.sensorsdata.analytics.javasdk.bean.EventRecord;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
...@@ -122,6 +127,20 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -122,6 +127,20 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Value("${sc.is.open:false}") @Value("${sc.is.open:false}")
private Boolean scIsOpen; private Boolean scIsOpen;
@Value("${channel.register.template:null}")
private String channelTemplate;
@Resource
private RabbitTemplate registeredNotifyBlackHoleRabbitTemplate;
@Resource
private PdfRemoteService pdfRemoteService;
@Value("${registered.notify.black.hole.rabbitmq.connection.exchange}")
private String exchange;
@Value("${registered.notify.black.hole.rabbitmq.connection.routingKey}")
private String routingKey;
@Override @Override
// @Cacheable(value = "usercache", key = "'xyqbuser' + #phone", unless = "#result == null", cacheManager = "cacheManager") // @Cacheable(value = "usercache", key = "'xyqbuser' + #phone", unless = "#result == null", cacheManager = "cacheManager")
public User findByPhoneInDb(String phone) { public User findByPhoneInDb(String phone) {
...@@ -654,4 +673,46 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -654,4 +673,46 @@ public class UserServiceImpl implements IUserService, IBaseController {
applicationEventPublisher.publishEvent(phoneNoUpdateEvent); applicationEventPublisher.publishEvent(phoneNoUpdateEvent);
return oldPhoneUser; return oldPhoneUser;
} }
/**
* 不同渠道用户签署不同合同模板
* @param user
* @param loginFrom
*/
public void channelUserSignContract(User user, Long loginFrom) {
if (Objects.isNull(user) || StringUtils.isBlank(channelTemplate)) {
return;
}
// 如果登录来源和注册来源相同,不用补签合同
if (Objects.nonNull(loginFrom) && Objects.equals(user.getRegisteredFrom(), loginFrom)) {
return;
}
Map<String, Long> channelMap = JSON.parseObject(channelTemplate, new TypeReference<HashMap<String, Long>>() {});
Long templateId = channelMap.get(String.valueOf(user.getRegisteredFrom()));
boolean needCheck = false;
if (Objects.nonNull(loginFrom) && !Objects.equals(user.getRegisteredFrom(), loginFrom)) {
templateId = channelMap.get(String.valueOf(loginFrom));
needCheck = true;
}
if (Objects.isNull(templateId)) {
return;
}
if (needCheck) {
ContractRecordReq contractRecordReq = new ContractRecordReq();
contractRecordReq.setTemplateId(templateId);
contractRecordReq.setUserId(user.getId());
JsonResult<ContractsRes> result = pdfRemoteService.getContractRecord(contractRecordReq);
ContractsRes data = result.getData();
if (Objects.nonNull(data)) {
return;
}
}
JSONObject json = new JSONObject();
json.put("userId", user.getId());
json.put("templateId", templateId);
JSONArray array = new JSONArray();
array.add(json);
registeredNotifyBlackHoleRabbitTemplate.convertAndSend(exchange, routingKey, array.toString());
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment