Air
2024-11-04 29c405353029f033e187e8dc033b93385365ee43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package com.nova.sankuai.service.impl;
 
import cn.hutool.crypto.digest.MD5;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.nova.sankuai.domain.api.yibeifenqi.YiBeiCallbackRequestDTO;
import com.nova.sankuai.domain.api.yibeifenqi.YiBeiCallbackResponseVO;
import com.nova.sankuai.domain.entity.Customer;
import com.nova.sankuai.domain.entity.CustomerCapitalResult;
import com.nova.sankuai.domain.entity.CustomerUser;
import com.nova.sankuai.domain.enums.capitalInfo.CapitalInfoTypeCodeEnum;
import com.nova.sankuai.infra.config.CommonException;
import com.nova.sankuai.infra.mapper.CustomerMapper;
import com.nova.sankuai.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.Objects;
 
/**
 * 易贝ServiceImpl
 * @author 51913
 */
@Service
public class YiBeiServiceImpl implements IYiBeiService {
 
    private static final Logger log = LoggerFactory.getLogger("capitalLogger");
 
    @Resource
    ICustomerCapitalResultService customerCapitalResultService;
 
    @Resource
    ICustomerUserService customerUserService;
 
    @Resource
    CustomerMapper customerMapper;
 
    /**
     * 回调接口使用到的
     */
    @Value("${yibei.config.sign-key}")
    private String signKey;
 
 
    @Override
    public YiBeiCallbackResponseVO callback(YiBeiCallbackRequestDTO body) {
        try {
            String format = String.format("channel=%s&data=%s&timestamp=%s%s",
                    body.getChannel(), JSON.toJSONString(body.getData()), body.getTimestamp(), signKey);
            String sign = MD5.create().digestHex(format);
            if (!Objects.equals(sign, body.getSign())) {
                YiBeiCallbackResponseVO resp = new YiBeiCallbackResponseVO();
                resp.setStatus(0);
                resp.setMsg("验签失败");
                log.info("验签失败! sign=" + body.getSign() + ", format=" + format);
                return resp;
            }
            Customer customer = customerMapper.getLatestCustomerRecord(body.getData().getMobile());
            CustomerUser customerUser = customerUserService.getOne(new LambdaQueryWrapper<CustomerUser>().eq(CustomerUser::getPhone, body.getData().getMobile()));
            if (customer == null || customerUser == null) {
                throw new CommonException("用户不存在");
            }
            CustomerCapitalResult capitalResult = customerCapitalResultService.lambdaQuery()
                    .eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId())
                    .eq(CustomerCapitalResult::getCustomerRecordId, customer.getId())
                    .eq(CustomerCapitalResult::getCapitalInfoCode, CapitalInfoTypeCodeEnum.YI_BEI.getCode()).one();
            if (capitalResult == null) {
                throw new CommonException("此联登数据不存在");
            }
            customerCapitalResultService.update(Wrappers.<CustomerCapitalResult>lambdaUpdate()
                    .set(CustomerCapitalResult::getCreditNo, body.getData().getOrderNo())
                    .set(CustomerCapitalResult::getSubmitSuccessTime, body.getData().getSubmitSuccessTime())
                    .eq(CustomerCapitalResult::getId, capitalResult.getId()));
            YiBeiCallbackResponseVO resp = new YiBeiCallbackResponseVO();
            resp.setStatus(1);
            resp.setMsg("成功");
            YiBeiCallbackResponseVO.Data data = new YiBeiCallbackResponseVO.Data();
            data.setCode(1);
            resp.setData(data);
            log.info("手机号为:" + customer.getPhone() + "易贝分期联登回调数据,{}", resp.toString());
            return resp;
        } catch (Exception e) {
            YiBeiCallbackResponseVO resp = new YiBeiCallbackResponseVO();
            resp.setStatus(0);
            resp.setMsg(e.getMessage());
            log.info("手机号为:" + body.getData().getMobile() + "易贝分期联登回调数据,{}", resp.toString());
            return resp;
        }
    }
}