package com.nova.sankuai.infra.utils.weike; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.nova.sankuai.domain.api.zcy.ZcyResponse; import com.nova.sankuai.domain.dto.zcy.CustomerZcyDto; import com.nova.sankuai.domain.entity.CustomerZcy; import com.nova.sankuai.service.ICustomerZcyService; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import java.util.Objects; @Component @RequiredArgsConstructor public class WeikeUtil { private static final Logger log = LoggerFactory.getLogger("capitalLogger"); private final ICustomerZcyService customerZcyService; public ZcyResponse callback(CustomerZcyDto body) { String logNumber = IdUtil.randomUUID(); try { if (Objects.isNull(body)) { ZcyResponse resp = getZcyResponse(400, "请求体为空"); log.error("日志编号:{} 微客数据入库失败,错误原因:随易花资方回调请求体为空!", logNumber); return resp; } // 获取电话 String phone = body.getPhone(); // 判断数据库是否有数据,有数据,则说明以前有推送过来过 CustomerZcy customer = customerZcyService.getOne(new LambdaQueryWrapper().eq(CustomerZcy::getPhone, phone)); if (!Objects.isNull(customer)) { ZcyResponse resp = getZcyResponse(400, "电话号码为" + phone + " 已推送过数据!"); log.error("日志编号:{} 手机号为:{} 微客数据入库失败,传入参数:{} 错误原因:已推送过数据!", logNumber, phone, body); return resp; } // 开始录入数据 CustomerZcy customerZcy = new CustomerZcy(); BeanUtils.copyProperties(body, customerZcy); customerZcy.setMark(1); customerZcyService.save(customerZcy); ZcyResponse resp = getZcyResponse(200, "成功!"); log.info("日志编号:{} 手机号为:{} 微客数据入库成功", logNumber, phone); return resp; } catch (Exception e) { ZcyResponse resp = getZcyResponse(500, e.getMessage()); log.error("日志编号:{} 微客数据入库失败,传入参数:{} 错误原因:{}", logNumber, body, e); return resp; } } @NotNull private ZcyResponse getZcyResponse(Integer code, String msg) { ZcyResponse resp = new ZcyResponse(); resp.setCode(code); resp.setMsg(msg); return resp; } }