package com.nova.sankuai.domain.api.nanjingmingtuo; import cn.hutool.crypto.SecureUtil; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSON; import com.nova.sankuai.domain.entity.Customer; import com.nova.sankuai.domain.enums.customerinfo.*; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Objects; import java.util.Optional; import java.util.stream.Stream; /** * @author Gmw */ @Data @Component @ConfigurationProperties(prefix = "nanjingmingtuo") public class NanJingMingTuoUtil { public static final int HIT_RESP_OK = 200; public static final int HIT_RESP_PHONE_EXISTS = 500; @ApiModelProperty("南京名拓接口对接 - 撞库地址") private String hitUrl; @ApiModelProperty("南京名拓接口对接 - 撞库渠道编码") private String hitChannelCode; @ApiModelProperty("南京名拓接口对接 - 推送地址") private String url; private String secretKey; public String parseHitParam(Customer customer) { HitDto dto = new HitDto(); dto.setChannelCode(hitChannelCode); dto.setPhone(SecureUtil.md5(customer.getPhone())); return JSON.toJSONString(dto); } public boolean passHitResponse(HttpResponse response) { String body = Optional.ofNullable(response.body()).orElse("{}"); NanJingMingTuoResp nanJingMingTuoResp = JSON.parseObject(body, NanJingMingTuoResp.class); return Objects.equals(HIT_RESP_OK, nanJingMingTuoResp.getCode()); } public String parseParam(Customer customer) throws Exception { SendDataDto dto = new SendDataDto(); dto.setChannelCode(hitChannelCode); dto.setUserInfo(encryptionUserInfo(customer)); return JSON.toJSONString(dto); } private String encryptionUserInfo(Customer customer) throws Exception { UserInfoDto userInfo = new UserInfoDto(); userInfo.setName(customer.getName()); userInfo.setPhone(Optional.ofNullable(customer.getPhone()).orElseThrow( () -> new IllegalArgumentException("手机号为必填!"))); Stream condition = Stream.of(HouseStatusEnum.House_2.getCode(), HouseStatusEnum.House_3.getCode(), HouseStatusEnum.House_4.getCode()); if (condition.anyMatch(t -> Objects.equals(t, customer.getHouseStatus()))) { userInfo.setHouse("1"); } else { userInfo.setHouse("0"); } condition = Stream.of(ProvidentFundStatusEnum.ProvidentFund_2.getCode(), ProvidentFundStatusEnum.ProvidentFund_3.getCode(), ProvidentFundStatusEnum.ProvidentFund_4.getCode()); if (condition.anyMatch(t -> Objects.equals(t, customer.getProvidentFund()))) { userInfo.setGjj("1"); } else { userInfo.setGjj("0"); } setSocialSecurity(userInfo, customer); setBusinessInsurance(userInfo, customer); setVehicle(userInfo, customer); setCity(userInfo, customer); return AesUtil.encrypt(JSON.toJSONString(userInfo), secretKey); } private void setSocialSecurity(UserInfoDto info, Customer customer) { Integer socialSecurity = customer.getSocialSecurity(); if (socialSecurity != null) { if (SocialSecurityStatusEnum.SocialSecurity_1.getCode().equals(socialSecurity)) { info.setSocialSecurity("0"); } else { info.setSocialSecurity("1"); } } } private void setBusinessInsurance(UserInfoDto info, Customer customer) { Integer policy = customer.getInsurancePolicy(); if (policy == null || InsuranceStatusEnum.BusinessInsurance_1.getCode().equals(policy)) { info.setBusinessInsurance("0"); } else { info.setBusinessInsurance("1"); } } private void setVehicle(UserInfoDto info, Customer customer) { Integer carStatus = customer.getCarStatus(); if (carStatus.equals(CarStatusEnum.Car_1.getCode())) { info.setVehicle("0"); } else { info.setVehicle("1"); } } private void setCity(UserInfoDto info, Customer customer) { String city = customer.getCityName(); info.setCity(city); } }