package com.nova.sankuai.controller.v2; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.nova.sankuai.domain.api.yixin.response.YXAuditResponse; import com.nova.sankuai.domain.api.yixin.response.YXCreditLimitResponse; import com.nova.sankuai.domain.dto.*; import com.nova.sankuai.domain.entity.City; import com.nova.sankuai.domain.entity.Customer; import com.nova.sankuai.domain.vo.Version4FlowPathVo; import com.nova.sankuai.domain.vo.common.MapVo; import com.nova.sankuai.infra.constants.ResultCode; import com.nova.sankuai.infra.utils.ImageUtil; import com.nova.sankuai.infra.utils.MapUtil; import com.nova.sankuai.infra.utils.ResultJson; import com.nova.sankuai.infra.utils.UserUtil; import com.nova.sankuai.infra.utils.chuxin.ChuxinDataUtil; import com.nova.sankuai.security.UserDetail; import com.nova.sankuai.service.IChannelInfoService; import com.nova.sankuai.service.ICustomerService; import com.nova.sankuai.service.IYiXinService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author weikangdi */ @Api(tags = "客户管理V2版本") @RestController @RequestMapping(value = "/api/v2/customer") @AllArgsConstructor @Slf4j public class CustomerV2Controller { private final ICustomerService customerService; private final IChannelInfoService channelInfoService; private final IYiXinService yiXinService; private final ImageUtil imageUtil; // 身份证二要素验证工具类 private final ChuxinDataUtil chuxinDataUtil; private static final Logger logger = LoggerFactory.getLogger("uploadFileLogger"); private static final Logger systemLogger = LoggerFactory.getLogger("systemLogger"); @GetMapping("/getCustomerUserNameAndIdCard") @ApiOperation(value = "获取用户姓名和身份证") public ResultJson> getCustomerUserNameAndIdCard(HttpServletRequest request) { String token = request.getHeader("Authorization"); UserDetail user = UserUtil.getUser(token); Customer customer = customerService.getOne(Wrappers.lambdaQuery(Customer.class).eq(Customer::getPhone, user.getPhone()).orderByDesc(Customer::getApplyDate).last("LIMIT 1")); Map map = new HashMap<>(); map.put("name",customer.getName()); map.put("idCard",customer.getIdCard()); return ResultJson.ok(map); } @GetMapping("/searchPlace") @ApiOperation(value = "地址联想") @PreAuthorize("hasAuthority('customer.searchPlace')") public ResultJson> searchPlace(String query, String city) { if (StringUtils.isEmpty(query)) { return ResultJson.failure(ResultCode.SERVER_ERROR, "搜索关键字不能为空"); } List place = MapUtil.searchPlace(query, city); return ResultJson.ok(place); } @PostMapping(value = "/appAddBasicInfo") @ApiOperation(value = "APP新增客户基本资料") @PreAuthorize("hasAuthority('customer.appAdd')") public ResultJson appAddBasicInfo(@RequestBody CustomerBaseDto customer, String appId, HttpServletRequest request) { ResultJson checkResult = channelInfoService.checkChannel(appId, customer.toString()); if (checkResult != null) { return checkResult; } String id = customerService.appAddBasicInfo(customer, appId, request); return ResultJson.ok(id); } @PostMapping(value = "/h5Match") @ApiOperation(value = "H5匹配资金方") public ResultJson h5Match(@RequestBody CustomerBaseDto customer, HttpServletRequest request) { return customerService.h5Match(customer, request); } @GetMapping(value = "/getH5Match") @ApiOperation(value = "根据手机号获取H5匹配资金方的信息") public ResultJson getH5Match(@RequestParam String phone) { return customerService.getH5Match(phone); } @PostMapping(value = "/appAddCapitalInfo") @ApiOperation(value = "APP新增客户资金方资料") @PreAuthorize("hasAuthority('customer.appAdd')") public ResultJson appAddCapitalInfo(HttpServletRequest request, @RequestBody CustomerCapitalDto customer, String appId, String channelInfo) { log.info("客户资金方资料原始参数信息:" + customer.toString()); ResultJson checkResult = channelInfoService.checkChannel(appId, customer.toString()); if (checkResult != null) { return checkResult; } String id = customerService.appAddCapitalInfo(request, customer, appId, channelInfo); return ResultJson.ok(id); } @GetMapping(value = "/getTXFaceInfo") @ApiOperation(value = "人脸核身的SIGN和NONCE 信息") public ResultJson getTXFaceInfo(@RequestParam String phone, String name, String idNo, String channelInfo) { ResultJson resultJson = yiXinService.getTXFaceInfo(phone, name, idNo, channelInfo); return resultJson; } @GetMapping(value = "/checkIdCardTwo") @ApiOperation(value = "身份证二要素验证") public ResultJson checkIdCardTwo(@RequestParam String idCard, String name) { return chuxinDataUtil.getRemoteResult(idCard, name); } @GetMapping(value = "/getTXOcrInfo") @ApiOperation(value = "获取ocr签名信息") public ResultJson getTXOcrInfo(@RequestParam String phone, String channelInfo) { ResultJson resultJson = yiXinService.getTXOcrInfo(phone, channelInfo); return resultJson; } @PostMapping("/uploadBase64File") @ApiOperation(value = "上传base64图片") public ResultJson uploadBase64File(@RequestBody Base64InfoDto base64Info, HttpServletRequest request) { if (StringUtils.isEmpty(base64Info.getBase64Info())) { systemLogger.error("上传图片失败,图片内容为空" + base64Info); return ResultJson.failure(ResultCode.SERVER_ERROR, "上传图片失败,图片内容为空"); } UserDetail user = null; try { String token = request.getHeader("Authorization"); user = UserUtil.getUser(token); systemLogger.info("上传图片用户信息:" + user.toString()); ResultJson resultJson = yiXinService.uploadBase64File(base64Info.getBase64Info()); return resultJson; } catch (Exception e) { if (user != null) { systemLogger.error("上传base64图片出错," + "登录用户信息:" + user.toString() + "原始参数信息:" + base64Info + "错误日志详情:", e); } else { systemLogger.error("上传base64图片出错,原始参数信息:" + base64Info + "错误日志详情:", e); } return ResultJson.failure(ResultCode.SERVER_ERROR, "上传图片失败"); } } @PostMapping("/yxUploadFile") @ApiOperation(value = "上传图片") public ResultJson yxUploadFile(HttpServletRequest request) { try { logger.info("file=====>:{}", request); MultipartHttpServletRequest req = (MultipartHttpServletRequest) request; //对应前端的upload的name参数"file" MultipartFile file = req.getFile("file"); logger.info("file.getOriginalFilename=====>:{}", file.getOriginalFilename()); logger.info("file.getBytes=====>:{}", file.getBytes()); return ResultJson.ok(imageUtil.yxUploadFile(file, false)); } catch (IOException e) { e.printStackTrace(); } return ResultJson.failure(ResultCode.SERVER_ERROR); } @GetMapping(value = "/getYxContractListQuery") @ApiOperation(value = "宜信合同信息") public ResultJson getYxContractListQuery(@AuthenticationPrincipal UserDetail userDetail) { ResultJson resultJson = yiXinService.getYxContractListQuery(userDetail); return resultJson; } @PostMapping(value = "/appAddOCRInfo") @ApiOperation(value = "APP新增客户OCR+人脸识别资料") @PreAuthorize("hasAuthority('customer.appAdd')") public ResultJson appAddOCRInfo(@RequestBody CustomerOcrDto customerOcrDto, String appId) { // logger.info("客户OCR+人脸识别资料原始参数信息:" + customerOcrDto.toString()); ResultJson checkResult = channelInfoService.checkChannel(appId, customerOcrDto.toString()); if (checkResult != null) { return checkResult; } String id = customerService.appAddOCRInfo(customerOcrDto, appId); return ResultJson.ok(id); } @PostMapping(value = "/appAddBankCardInfo") @ApiOperation(value = "APP新增客户银行卡信息") @PreAuthorize("hasAuthority('customer.appAdd')") public ResultJson appAddBankCardInfo(@RequestBody CustomerBankCardDto customerBankCardDto, String appId) { log.info("客户银行卡资料原始参数信息:" + customerBankCardDto.toString()); ResultJson checkResult = channelInfoService.checkChannel(appId, customerBankCardDto.toString()); if (checkResult != null) { return checkResult; } String id = customerService.appAddBankCardInfo(customerBankCardDto, appId); return ResultJson.ok(id); } @GetMapping(value = "/getYxCreditAudit") @ApiOperation(value = "授信审批查询") public ResultJson getYxCreditAudit(@AuthenticationPrincipal UserDetail userDetail) { YXAuditResponse yxResponse = yiXinService.getYxCreditAudit(userDetail.getPhone()); return ResultJson.ok(yxResponse); } @GetMapping(value = "/getYxCreditLimit") @ApiOperation(value = "额度查询接口") public ResultJson getYxCreditLimit(@AuthenticationPrincipal UserDetail userDetail) { YXCreditLimitResponse yxResponse = yiXinService.getYxCreditLimit(userDetail); return ResultJson.ok(yxResponse); } @PostMapping(value = "/appAddRepayInfo") @ApiOperation(value = "APP新增客户还款计划") @PreAuthorize("hasAuthority('customer.appAdd')") public ResultJson appAddRepayInfo(@RequestBody CustomerRepayDto customerRepayDto, String appId) { ResultJson checkResult = channelInfoService.checkChannel(appId, customerRepayDto.toString()); if (checkResult != null) { return checkResult; } String id = customerService.appAddRepayInfo(customerRepayDto, appId); return ResultJson.ok(id); } @GetMapping(value = "/rongYiTuiVip") @ApiOperation(value = "融易推用户会员购买") public UserDetail rongYiTuiVip(@AuthenticationPrincipal UserDetail userDetail, Integer vipCardType) { customerService.rongYiTuiVip(userDetail, vipCardType); return userDetail; } @GetMapping("/getUserIpCity") @ApiOperation(value = "根据用户ip获取城市信息") public ResultJson getUserIpCity(HttpServletRequest request) { City userIpCity = customerService.getUserIpCity(request); return ResultJson.ok(userIpCity); } @GetMapping("/version4FlowPath") @ApiOperation(value = "4.0流程") public ResultJson version4FlowPath(@AuthenticationPrincipal UserDetail userDetail) { Version4FlowPathVo version4FlowPathVo = customerService.version4FlowPath(userDetail); return ResultJson.ok(version4FlowPathVo); } @PostMapping(value = "/appFourAddRelationInfo") @ApiOperation(value = "4.0开启下APP新增客户资料二") @PreAuthorize("hasAuthority('customer.appAdd')") public ResultJson appFourAddRelationInfo(HttpServletRequest request, @RequestBody CustomerRelationDto customer, String appId, String channelInfo) { log.info("客户资金方资料原始参数信息:" + customer.toString()); ResultJson checkResult = channelInfoService.checkChannel(appId, customer.toString()); if (checkResult != null) { return checkResult; } String id = customerService.appFourAddRelationInfo(request, customer, appId, channelInfo); return ResultJson.ok(id); } @PostMapping(value = "/appFourAddCompanyInfo") @ApiOperation(value = "4.0开启下APP新增客户资料三") @PreAuthorize("hasAuthority('customer.appAdd')") public ResultJson appFourAddCompanyInfo(HttpServletRequest request, @RequestBody CustomerCompanyDto customer, String appId, String channelInfo) { log.info("客户资金方资料原始参数信息:" + customer.toString()); ResultJson checkResult = channelInfoService.checkChannel(appId, customer.toString()); if (checkResult != null) { return checkResult; } String id = customerService.appFourAddCompanyInfo(request, customer, appId); return ResultJson.ok(id); } @PostMapping(value = "/appFiveAddAssetInfo") @ApiOperation(value = "新增资产信息") @PreAuthorize("hasAuthority('customer.appAdd')") public ResultJson appFiveAddAssetInfo(HttpServletRequest request, @RequestBody CustomerAssetDto customer, String appId) { ResultJson checkResult = getResultJson(customer, appId); if (checkResult != null) return checkResult; String id = customerService.appFiveAddAssetInfo(request, customer, appId); return ResultJson.ok(id); } @PostMapping(value = "/h5FiveAddAssetInfo") @ApiOperation(value = "从浏览器新增资产信息") @PreAuthorize("hasAuthority('customer.appAdd')") public ResultJson h5FiveAddAssetInfo(HttpServletRequest request, @RequestBody CustomerAssetDto customer, String appId) { ResultJson checkResult = getResultJson(customer, appId); if (checkResult != null) return checkResult; String id = customerService.h5FiveAddAssetInfo(request, customer, appId); return ResultJson.ok(id); } @PostMapping(value = "/h5PushInfo") @ApiOperation(value = "浏览器推送数据") public ResultJson h5PushInfo(@RequestBody Customer customer) {// 这个接口不推送慧借钱包 customerService.h5PushInfo(customer); return ResultJson.ok("ok"); } @PostMapping(value = "/h5HjPushInfo") @ApiOperation(value = "浏览器推送数据给慧借钱包") public ResultJson h5HjPushInfo(@RequestBody Customer customer) {// 这个接口只推送慧借钱包 customerService.h5PushInfoInclude(customer); return ResultJson.ok("ok"); } @PostMapping(value = "/appPushInfo") @ApiOperation(value = "app推送数据") public ResultJson appPushInfo(HttpServletRequest request) { customerService.appPushInfo(request); return ResultJson.ok("ok"); } @Nullable private ResultJson getResultJson(@RequestBody CustomerAssetDto customer, String appId) { log.info("客户资金方资料原始参数信息:" + customer.toString()); ResultJson checkResult = channelInfoService.checkChannel(appId, customer.toString()); if (checkResult != null) { return checkResult; } return null; } }