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 {
oauthLoginInfoService.addLoginInfo(user, tenantId);
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, null, "", tenantId);
AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.SUPERLOGINTWO.ordinal());
// 不同渠道用户补签不同模板合同
userService.channelUserSignContract(user, registerFrom);
log.info("第三方用户登录成功 [AppController] login2 --> loginFrom:{}, phoneNo:{},appChannel:{}", registerFrom, phoneNo, appChannel);
return JsonResult.buildSuccessResult("登录成功", bean);
}
......
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.service.user.IUserService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
......@@ -31,6 +33,9 @@ public class BlackHoleRegisteredEventListener implements ApplicationListener<Reg
@Value("#{'${register.templateids}'.split(',')}")
private List<Long> templateIds;
@Resource
private IUserService userService;
@Override
public void onApplicationEvent(RegisterEvent event) {
......@@ -55,5 +60,7 @@ public class BlackHoleRegisteredEventListener implements ApplicationListener<Reg
registeredNotifyBlackHoleRabbitTemplate.convertAndSend(exchange, routingKey,
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 {
void deregister(Long userId);
User submitModifyPhone(String prevPhoneNo, String curPhoneNo);
/**
* 渠道用户签署合同
*/
void channelUserSignContract(User user, Long loginFrom);
}
......@@ -13,6 +13,7 @@ import cn.quantgroup.xyqb.exception.DataException;
import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.UserRegisterLoginException;
import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.remote.PdfRemoteService;
import cn.quantgroup.xyqb.repository.*;
import cn.quantgroup.xyqb.service.captcha.IGeetestLogService;
import cn.quantgroup.xyqb.service.register.IUserDeregisterService;
......@@ -22,12 +23,16 @@ import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.*;
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.Maps;
import com.sensorsdata.analytics.javasdk.ISensorsAnalytics;
import com.sensorsdata.analytics.javasdk.bean.EventRecord;
import lombok.extern.slf4j.Slf4j;
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.Value;
import org.springframework.cache.annotation.CacheEvict;
......@@ -122,6 +127,20 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Value("${sc.is.open:false}")
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
// @Cacheable(value = "usercache", key = "'xyqbuser' + #phone", unless = "#result == null", cacheManager = "cacheManager")
public User findByPhoneInDb(String phone) {
......@@ -654,4 +673,46 @@ public class UserServiceImpl implements IUserService, IBaseController {
applicationEventPublisher.publishEvent(phoneNoUpdateEvent);
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