Commit 53d2af6a authored by suntao's avatar suntao

Merge branch 'v1' of http://git.quantgroup.cn/QG/cash-loan-flow-boss into v1

# By junquan.wang@quantgroup.cn
# Via junquan.wang@quantgroup.cn
* 'v1' of http://git.quantgroup.cn/QG/cash-loan-flow-boss:
  贷前关单、贷后关单、清除用户信息
  关闭用户活跃订单
parents d5faf49e 2b5f4331
......@@ -67,9 +67,24 @@ public class OrderController {
return Result.buildSuccess(this.orderService.lending(lendingFormModel));
}
@PostMapping(value = "/cancel/loan", consumes = "application/json")
public Result cancel(@RequestBody @Valid OrderVo orderVo) {
return Result.buildSuccess(orderService.cancel(orderVo));
/**
* 贷前关单
*
* @return
*/
@PostMapping("/cancel/loan")
public Result<Boolean> cancelPreLoan(@RequestBody @Valid String channelOrderNumber) {
return Result.buildSuccess(this.orderService.cancelPreLoan(channelOrderNumber));
}
/**
* 贷后关单
*
* @return
*/
@PostMapping("/cancel/after/loan")
public Result<Boolean> cancelAfterLoan(@RequestParam @Valid String channelOrderNumber) {
return Result.buildSuccess(this.orderService.cancelAfterLoan(channelOrderNumber));
}
/**
......
package cn.quantgroup.cashloanflowboss.api.order.entity;
import cn.quantgroup.cashloanflowboss.core.persistence.Primary;
import javax.persistence.Entity;
import javax.persistence.Table;
import lombok.Data;
import javax.persistence.Column;
......
......@@ -13,15 +13,27 @@ import cn.quantgroup.cashloanflowboss.core.base.ServiceResult;
import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping;
import cn.quantgroup.cashloanflowboss.spi.clf.repository.ClfOrderMappingRepository;
import cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenter;
import cn.quantgroup.cashloanflowboss.spi.clotho.client.ClothoCenter;
import cn.quantgroup.cashloanflowboss.spi.clotho.service.ClothoCenterService;
import cn.quantgroup.cashloanflowboss.spi.jolyne.JolyneCenter;
import cn.quantgroup.cashloanflowboss.spi.user.service.XyqbUserService;
import cn.quantgroup.cashloanflowboss.spi.xyqb.repository.CancelPreLoanRepository;
import cn.quantgroup.cashloanflowboss.spi.xyqb.service.XYQBCenterService;
import cn.quantgroup.cashloanflowboss.utils.JSONTools;
import cn.quantgroup.user.retbean.XUser;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.ConcurrentMap;
import javax.persistence.criteria.Predicate;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -29,11 +41,6 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import javax.persistence.criteria.Predicate;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.ConcurrentMap;
/**
* function:
* date: 2019/8/8
......@@ -58,6 +65,8 @@ public class OrderService {
@Autowired
private JolyneCenter jolyneCenter;
@Autowired
private CLFCenter clfCenter;
@Autowired
private ClothoCenterService clothoCenterService;
......@@ -68,6 +77,9 @@ public class OrderService {
@Autowired
private ClfOrderMappingRepository clfOrderMappingRepository;
@Autowired
private CancelPreLoanRepository cancelPreLoanRepository;
public Page<OrderVo> getOrders(Long channelId, String channelOrderNo, Integer pageNumber, Integer pageSize) {
Page<ClfOrderMapping> page = this.clfOrderMappingRepository.findAll((root, criteriaQuery, criteriaBuilder) -> {
......@@ -262,4 +274,57 @@ public class OrderService {
return new XyqbHistoryOrderStatusServiceResultModel();
}
}
/**
* 贷前关单
*
* @param
* @return
*/
public boolean cancelPreLoan(String channelOrderNumber) {
/*Order order = this.orderRepository.findOrderByChannelOrderNumber(channelOrderNumber);
ClfOrderMapping orderMapping = this.clfOrderMappingRepository.findByChannelOrderNoLastOne(channelOrderNumber);
if (orderMapping == null) {
log.info("cancelPreLoan,贷前关单失败,无订单 channelOrderNumber={}", channelOrderNumber);
return false;
}*/
Long id = cancelPreLoanRepository.cancelPreLoan("SP468047603002844481308092");
ConcurrentMap<Object, Object> data = Maps.newConcurrentMap();
data.put("data",id);
data.put("remark","系统关单");
String result = clothoCenter.cancelPreLoan(data);
return true;
}
/**
* 贷后关单
*
* @param
* @return
*/
public boolean cancelAfterLoan(String channelOrderNumber) {
ClfOrderMapping orderMapping = this.clfOrderMappingRepository.findByChannelOrderNoLastOne(channelOrderNumber);
if (orderMapping == null) {
log.info("cancelAfterLoan,贷后关单失败,无订单 channelOrderNumber={}", channelOrderNumber);
return false;
}
if (orderMapping.getLoanId() == null) {
log.info("cancelAfterLoan,贷后关单失败,loanId为空,channelOrderNumber={}", channelOrderNumber);
return false;
}
ConcurrentMap<Object, Object> data = Maps.newConcurrentMap();
data.put("loanId",orderMapping.getLoanId());
data.put("userId",orderMapping.getQgUserId());
data.put("flowNo", UUID.randomUUID());
String id = clothoCenter.cancelAfterLoan(data);
return true;
}
}
......@@ -7,11 +7,18 @@ import cn.quantgroup.cashloanflowboss.api.user.model.UserDetailInfo;
import cn.quantgroup.cashloanflowboss.api.user.service.UserService;
import cn.quantgroup.cashloanflowboss.component.validator.constraints.NotEmpty;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.spi.user.service.XyqbUserService;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by WeiWei on 2019/7/22.
......@@ -22,6 +29,8 @@ public class UserController {
@Autowired
private UserService userService;
@Autowired
private XyqbUserService xyqbUserService;
/**
* 注册用户
......@@ -86,4 +95,37 @@ public class UserController {
return Result.buildSuccess(userService.getUserDetailInfo());
}
/**
* 清除用户信息
*
* @param id 用户ID
* @return
*/
@PutMapping("/clean")
public Boolean cleanUser(@RequestParam @Valid @NotEmpty(message = "无效的用户ID") String phoneNo) {
return this.xyqbUserService.cleanUserExtInfo(phoneNo);
}
/**
* 清除用户活跃订单
*
* @param phoneNo 用户ID
* @return
*/
@PutMapping("/order/clean")
public Boolean cleanUserOrder(@RequestParam @Valid @NotEmpty(message = "无效的用户手机号") String phoneNo) {
return this.xyqbUserService.cleanUserOrder(phoneNo);
}
/**
* 删除订单
*
* @param phoneNo 用户ID
* @return
*/
@PutMapping("/delete/userid")
public Boolean deleteByUserId(@RequestParam @Valid @NotEmpty(message = "无效的用户手机号") String phoneNo) {
return this.xyqbUserService.deleteByUserId(phoneNo);
}
}
......@@ -39,7 +39,7 @@ public class CashLoanFlowBossDataSourceConfiguration {
@Value("${data.boss.pool-size}")
private Integer poolSize;
@Primary
//@Primary
@Bean(name = "bossDataSource")
@ConfigurationProperties(prefix = "data.boss")
public DataSource createDataSource() {
......
package cn.quantgroup.cashloanflowboss.spi.clf.service;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Component
@FeignClient(name = "CLFServiceCenter", url = "${qapi.https}", fallback = CLFCenter.Fallback.class)
public interface CLFCenter {
@PostMapping(value = "/test//loanMq/batch", consumes = "application/x-www-form-urlencoded")
public void loanMq(@RequestParam("json") String loanMq);
@Component
class Fallback implements CLFCenter {
@Override
public void loanMq(String loanMq) {
return ;
}
}
}
......@@ -40,6 +40,24 @@ public interface ClothoCenter {
@PostMapping(value = "clotho/funds/plan/loan/apply", consumes = "application/x-www-form-urlencoded")
String lending(@RequestParam Map data);
/**
* 贷前关单
*
* @param data
* @return
*/
@PostMapping(value = "/loan/super/close/quota", consumes = "application/x-www-form-urlencoded")
String cancelPreLoan(@RequestParam Map data);
/**
* 贷后关单
*
* @param data
* @return
*/
@PostMapping(value = "/external/huijinsuo/withdraw/test/72", consumes = "application/x-www-form-urlencoded")
String cancelAfterLoan(@RequestParam Map data);
@Component
class Fallback implements ClothoCenter {
......@@ -58,5 +76,12 @@ public interface ClothoCenter {
return null;
}
@Override public String cancelPreLoan(Map data) {
return null;
}
@Override public String cancelAfterLoan(Map data) {
return null;
}
}
}
package cn.quantgroup.cashloanflowboss.spi.user.entity;
import java.sql.Timestamp;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Data
@Entity
@Table(name = "user_detail")
public class UserDetail {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_id")
private Long userId;
@Column(name = "phone_no")
private String phone_no;
@Column(name = "name")
private String name;
@Column(name = "id_no")
private String id_no;
@Column(name = "id_type")
private Integer id_type;
@Column(name = "is_authenticated")
private Integer is_authenticated;
@Column(name = "gender")
private Integer gender;
@Column(name = "email")
private String email;
@Column(name = "qq")
private String qq;
@Column(name = "created_at")
private Timestamp created_at;
@Column(name = "updated_at")
private Timestamp updated_at;
}
package cn.quantgroup.cashloanflowboss.spi.user.entity;
import cn.quantgroup.user.enums.EducationEnum;
import cn.quantgroup.user.enums.IncomeEnum;
import cn.quantgroup.user.enums.IncomeRangeEnum;
import cn.quantgroup.user.enums.MaritalStatus;
import cn.quantgroup.user.enums.OccupationEnum;
import cn.quantgroup.user.retbean.XUserExtInfo;
import java.io.Serializable;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Data
@Entity
@Table(name = "user_ext_info")
public class UserExtInfo implements Serializable {
private static final long serialVersionUID = -1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "user_id")
private Long userId;
@Column(name = "means_of_income_payment")
private IncomeEnum incomeEnum = IncomeEnum.UNKNOWN;
@Column(name = "monthly_income_range")
private IncomeRangeEnum incomeRangeEnum = IncomeRangeEnum.UNKNOWN;
@Column(name = "occupation")
private OccupationEnum occupationEnum = OccupationEnum.UNKNOWN;
@Column(name = "education")
private EducationEnum educationEnum = EducationEnum.UNKNOWN;
@Column(name = "has_car")
private Boolean hasCar = false;
@Column(name = "has_social_security")
private Boolean hasSocialSecurity = false;
@Column(name = "has_house")
private Boolean hasHouse = false;
@Column(name = "has_credit_card")
private Boolean hasCreditCard = false;
@Column(name = "marry_status")
private MaritalStatus marryStatus = MaritalStatus.UNKNOWN;
@Column(name = "created_at")
private Timestamp createdAt;
@Column(name = "updated_at")
private Timestamp updateAt;
/*public XUserExtInfo toXUserExtInfo() {
XUserExtInfo xUserExtInfo = new XUserExtInfo();
xUserExtInfo.setId(this.id);
xUserExtInfo.setUserId(this.userId);
xUserExtInfo.setEducationEnum(cn.quantgroup.motan.enums.EducationEnum.valueOf(this.educationEnum.name()));
xUserExtInfo.setIncomeEnum(cn.quantgroup.motan.enums.IncomeEnum.valueOf(this.incomeEnum.name()));
xUserExtInfo.setIncomeRangeEnum(cn.quantgroup.motan.enums.IncomeRangeEnum.valueOf(this.incomeRangeEnum.name()));
xUserExtInfo.setOccupationEnum(cn.quantgroup.motan.enums.OccupationEnum.valueOf(this.occupationEnum.name()));
xUserExtInfo.setHasCar(this.hasCar);
xUserExtInfo.setHasSocialSecurity(this.hasSocialSecurity);
xUserExtInfo.setHasCreditCard(this.hasCreditCard);
xUserExtInfo.setMarryStatus(cn.quantgroup.motan.enums.MaritalStatus.valueOf(this.marryStatus.name()));
xUserExtInfo.setCreatedAt(this.createdAt);
xUserExtInfo.setUpdateAt(this.updateAt);
return xUserExtInfo;
}*/
}
package cn.quantgroup.cashloanflowboss.spi.user.repository;
import cn.quantgroup.cashloanflowboss.spi.user.entity.UserDetail;
import cn.quantgroup.cashloanflowboss.spi.user.source.XyqbUserDataSource;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@XyqbUserDataSource
@Repository
public interface UserDetailRepository extends JpaRepository<UserDetail,Long>{
@Transactional
@Modifying
@Query(value = "delete from user_detail where user_id = ?1", nativeQuery = true)
int deleteByUserId(Long userId);
}
package cn.quantgroup.cashloanflowboss.spi.user.repository;
import cn.quantgroup.cashloanflowboss.spi.user.entity.UserExtInfo;
import cn.quantgroup.cashloanflowboss.spi.user.source.XyqbUserDataSource;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@XyqbUserDataSource
@Repository
public interface UserExtInfoRepository extends JpaRepository<UserExtInfo,Long>{
@Transactional
@Modifying
@Query(value = "delete from user_ext_info where user_id = ?1", nativeQuery = true)
void deleteByUserId(Long userId);
}
......@@ -51,5 +51,22 @@ public interface XyqbUserService {
*/
UserInfo findUserByUuid(String uuid);
/**
* 清除用户信息
* @param phoneNo
* @return
*/
Boolean cleanUserExtInfo(String phoneNo);
/**
* 清除用户活跃订单
* @param phoneNo
* @return
*/
Boolean cleanUserOrder(String phoneNo);
/**
* 删除记录
*/
Boolean deleteByUserId(String phoneNo);
}
package cn.quantgroup.cashloanflowboss.spi.user.service;
import cn.quantgroup.cashloanflowboss.api.order.model.OrderVo;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping;
import cn.quantgroup.cashloanflowboss.spi.jolyne.JolyneCenter;
import cn.quantgroup.cashloanflowboss.spi.user.repository.UserDetailRepository;
import cn.quantgroup.cashloanflowboss.spi.user.repository.UserExtInfoRepository;
import cn.quantgroup.cashloanflowboss.spi.util.HttpService;
import cn.quantgroup.cashloanflowboss.utils.JSONTools;
import cn.quantgroup.cashloanflowboss.utils.MD5Tools;
import cn.quantgroup.user.bean.UserInfo;
import cn.quantgroup.user.enums.IncomeEnum;
import cn.quantgroup.user.enums.IncomeRangeEnum;
import cn.quantgroup.user.retbean.XUser;
import cn.quantgroup.user.retbean.XUserDetail;
import cn.quantgroup.user.retbean.XUserExtInfo;
import cn.quantgroup.user.vo.UserSysResult;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.concurrent.ConcurrentMap;
import lombok.extern.log4j.Log4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.*;
......@@ -28,11 +41,20 @@ public class XyqbUserServiceImpl implements XyqbUserService {
private UserSysService userSysService;
@Autowired
private HttpService httpService;
@Autowired
private JolyneCenter jolyneCenter;
@Autowired
private UserDetailRepository userDetailRepository;
@Autowired
private UserExtInfoRepository userExtInfoRepository;
@Autowired
private StringRedisTemplate redisTemplate;
@Value("${passportapi.http}")
private String passportapiHttp;
private static final ObjectMapper MAPPER = new ObjectMapper();
/**
* 查询用户
*
......@@ -117,5 +139,80 @@ public class XyqbUserServiceImpl implements XyqbUserService {
return userInfo.getData();
}
/**
* 清除用户信息
*/
@Override public Boolean cleanUserExtInfo(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) {
return false;
}
UserSysResult<XUser> user = userSysService.getService().findUserByPhoneNo(phoneNo);
if (Objects.isNull(user) || Objects.isNull(user.getData())) {
return false;
}
Long user_id = user.getData().getId();
UserSysResult<Boolean> result = userSysService.getService().disableUser(user_id);
UserSysResult<XUserExtInfo> userExtInfo = userSysService.getService().updateUserExtInfo(user_id, IncomeEnum.UNKNOWN,
IncomeRangeEnum.UNKNOWN, null, null, null, null, null, null, null);
if (!userExtInfo.isSuccess() || userExtInfo.getData() == null) {
return false;
}
return true;
}
/**
* 清除用户活跃订单
* @param phoneNo
* @return
*/
public Boolean cleanUserOrder(String phoneNo){
UserSysResult<XUser> xUser = userSysService.getService().findUserByPhoneNo(phoneNo);
if (xUser == null || xUser.getData() == null) {
LOGGER.info("cleanUserOrder,清除用户活跃订单失败,未找到用户 phoneNo={}", phoneNo);
return false;
}
Long userId = xUser.getData().getId();
ConcurrentMap<Object, Object> data = Maps.newConcurrentMap();
ArrayList<Object> cancel_list = Lists.newArrayList();
cancel_list.add("update xyqb.quota_credit set is_active=0 where user_id="+userId);
cancel_list.add("update xyqb.quota_account set is_active=0 where user_id="+userId);
cancel_list.add("update xyqb.loan_application_history set progress=16 where user_id="+userId);
cancel_list.add("update xyqb.loan_application_history set is_active=0 where user_id="+userId);
cancel_list.add("delete from apply_quota_record where user_id="+userId);
cancel_list.add("delete from user_operation_history where user_id="+userId);
data.put("sql",cancel_list);
String cancel_result = jolyneCenter.cancel(JSONTools.serialize(data));
return "success".equals(cancel_result);
}
@Override public Boolean deleteByUserId(String phoneNo) {
try{
UserSysResult<XUser> xUser = userSysService.getService().findUserByPhoneNo(phoneNo);
if (xUser == null || xUser.getData() == null) {
LOGGER.error("cleanUserOrder,删除用户信息失败,未找到用户 phoneNo={}", phoneNo);
return false;
}
Long userId = xUser.getData().getId();
int i = userDetailRepository.deleteByUserId(userId);
userExtInfoRepository.deleteByUserId(userId);
Set<String> phoneNoKeys = redisTemplate.keys(phoneNo);
if(phoneNoKeys!=null){
redisTemplate.delete(phoneNoKeys);
}
Set<String> userKeys = redisTemplate.keys(String.valueOf(userId));
if(userKeys!=null){
redisTemplate.delete(userKeys);
}
String token_key = "userid-sessionvalue:cache::"+userId+":xyqb";
String token = redisTemplate.opsForValue().get(token_key);
if(token!=null && redisTemplate.keys(token)!=null){
Set<String> tokenKeys = redisTemplate.keys(token);
redisTemplate.delete(tokenKeys);
}
}catch (Exception e){
LOGGER.error("cleanUserOrder,删除用户信息失败,phoneNo={}", phoneNo);
return false;
}
return true;
}
}
package cn.quantgroup.cashloanflowboss.spi.user.source;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface XyqbUserDataSource {
}
package cn.quantgroup.cashloanflowboss.spi.user.source;
import cn.quantgroup.cashloanflowboss.core.persistence.CashLoanFlowDataSource;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {"cn.quantgroup"}, entityManagerFactoryRef = "xyqbUserEntityManager", transactionManagerRef = "xyqbUserTransactionManager", includeFilters = @ComponentScan.Filter(XyqbUserDataSource.class))
public class XyqbUserDataSourceConfiguration {
@Value("${data.user.url}")
private String jdbcUrl;
@Value("${data.user.password}")
private String password;
@Value("${data.user.username}")
private String user;
private String uniquename = "xyqbUserDS";
@Value("${data.user.pool-size}")
private Integer poolSize;
//@Primary
@Bean(name = "xyqbUserDataSource")
@ConfigurationProperties(prefix = "data.user")
public DataSource createDataSource() {
DruidDataSource source = DruidDataSourceBuilder.create().build();
source.setMaxActive(200);
source.setInitialSize(10);
source.setMinIdle(10);
source.setMaxWait(500000);
source.setTimeBetweenEvictionRunsMillis(60000);
source.setMinEvictableIdleTimeMillis(300000);
source.setValidationQuery("SELECT 'x'");
source.setTestWhileIdle(true);
source.setTestOnBorrow(false);
source.setTestOnReturn(false);
source.setPoolPreparedStatements(Boolean.FALSE);
return source;
}
@Bean(name = "xyqbUserEntityManager")
public LocalContainerEntityManagerFactoryBean entityManager(EntityManagerFactoryBuilder builder) {
return builder.dataSource(createDataSource())
.packages("cn.quantgroup.cashloanflowboss.spi.user.entity")
.persistenceUnit(uniquename)
.build();
}
@Bean(name = "xyqbUserTransactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("xyqbUserEntityManager") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
package cn.quantgroup.cashloanflowboss.spi.xyqb.entity;
import cn.quantgroup.cashloanflowboss.spi.xyqb.model.AssignStatusEnum;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
/**
* 资产分配记录表
*/
@Data
@Entity
@Table(name = "assign_funding_record")
public class AssignFundingRecord {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 用户id
*/
@Column(name = "user_id")
private Long userId;
/**
* 资产订单表ID
*/
@Column(name = "asset_order_id")
private Long assetOrderId;
/**
* 分配状态
*/
@Column(name = "assign_status")
private AssignStatusEnum assignStatus;
/**
* 业务类型
*/
@Column(name = "business_type")
private Integer businessType;
/**
* 资金方id
*/
@Column(name = "funding_corp_id")
private Long fundingCorpId;
/**
* 被拒绝的资金方列表,以","分隔
*/
@Column(name = "funding_block_list")
private String fundingBlockList;
/**
* 备注
*/
@Column(name = "remark")
private String remark;
/**
* 尝试分配的次数
*/
@Column(name = "try_assign_count")
private Integer tryAssignCount;
/**
* 创建时间
*/
@Column(name = "created_at")
private Timestamp createdAt;
/**
* 更新时间
*/
@Column(name = "updated_at")
private Timestamp updatedAt;
}
package cn.quantgroup.cashloanflowboss.spi.xyqb.model;
/**
* 预审选取资金方结果
* @author HAN CHENGLONG
* @create 2018-04-16 18:04
**/
public enum AssignStatusEnum {
ASSIGN_INIT("未分配"),ASSIGN_QUEUE("分配队列中"),ON_ASSIGNING("分配中"),ASSIGN_SUCC("分配成功"),ASSIGN_FAIL("分配失败"),USER_CANCEL("取消借款"),ASSIGN_HANG("分配挂起");
AssignStatusEnum(String name) {
}
}
package cn.quantgroup.cashloanflowboss.spi.xyqb.repository;
import cn.quantgroup.cashloanflowboss.spi.xyqb.entity.AssignFundingRecord;
import cn.quantgroup.cashloanflowboss.spi.xyqb.source.XYQBDataSource;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
@XYQBDataSource
@Repository
public interface CancelPreLoanRepository extends JpaRepository<AssignFundingRecord,Long>{
@Query(value = "select f.id from apply_quota_record a JOIN assets_order o on o.out_trade_no = convert(a.id,char) JOIN assign_funding_record f on f.asset_order_id = o.id where a.order_no = ?1",nativeQuery = true)
Long cancelPreLoan(String applyNo);
}
......@@ -7,6 +7,7 @@ import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
......@@ -21,6 +22,7 @@ import javax.sql.DataSource;
@EnableJpaRepositories(basePackages = {"cn.quantgroup.cashloanflowboss.spi.xyqb"}, entityManagerFactoryRef = "xyqbEntityManager", transactionManagerRef = "xyqbTransactionManager", includeFilters = @ComponentScan.Filter(XYQBDataSource.class))
public class XYQBDataSourceConfiguration {
@Primary
@Bean
@ConfigurationProperties(prefix = "data.xyqb")
public DataSource xyqbDataSource() {
......
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