package com.szwl.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huifu.bspay.sdk.opps.core.exception.BasePayException;
import com.szwl.constant.HuifuConstant;
import com.szwl.constant.JoinpayConstant;
import com.szwl.constant.ResponseCodesEnum;
import com.szwl.exception.BizException;
import com.szwl.manager.TokenManager;
import com.szwl.model.bo.R;
import com.szwl.model.bo.ResponseModel;
import com.szwl.model.bo.UserDetailBO;
import com.szwl.model.entity.THuifuMch;
import com.szwl.model.entity.THuifuMchCheck;
import com.szwl.model.entity.TJoinpayMch;
import com.szwl.model.param.UploadParms;
import com.szwl.service.THuifuMchCheckService;
import com.szwl.service.THuifuMchService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.Date;
import java.util.Optional;
import static com.szwl.constant.ResponseCodesEnum.B0001;
/**
*
* 前端控制器
*
*
* @author wuhs
* @since 2023-07-12
*/
@Api(value = "/tHuifuMch", tags = {"汇付支付"})
@RestController
@RequestMapping("/tHuifuMch")
public class THuifuMchController {
@Autowired
private THuifuMchService tHuifuMchService;
@Autowired
private THuifuMchCheckService tHuifuMchCheckService;
@ApiOperation(value = "商户入驻申请")
@PostMapping("/addApplication")
public ResponseModel> addApplication(@Valid @RequestBody THuifuMchCheck tHuifuMchCheck) {
if (tHuifuMchCheck.getAdminId() == null) {
return R.fail(ResponseCodesEnum.A0001);
}
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(THuifuMchCheck::getAdminId, tHuifuMchCheck.getAdminId());
THuifuMchCheck huifuMchCheck = tHuifuMchCheckService.getOne(queryWrapper);
if (huifuMchCheck != null) {
tHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheck.setStatus("0");
tHuifuMchCheckService.updateById(tHuifuMchCheck);
return R.ok();
}
tHuifuMchCheck.setCreateDate(new Date());
tHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheck.setStatus("0");
tHuifuMchCheckService.save(tHuifuMchCheck);
return R.ok();
}
@ApiOperation(value = "商户入网")
@PostMapping("/createMch")
public ResponseModel> createMch(@RequestBody THuifuMchCheck newHuifuMchCheck) {
// 步骤
Integer steps = newHuifuMchCheck.getBindingSteps();
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(THuifuMchCheck::getAdminId, newHuifuMchCheck.getAdminId());
THuifuMchCheck tHuifuMchCheck = tHuifuMchCheckService.getOne(query);
switch (steps) {
case 0:
// 提交证件信息
newHuifuMchCheck.setBindingSteps(1);
if (tHuifuMchCheck == null) {
// 没有,直接保存
newHuifuMchCheck.setCreateDate(new Date());
newHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheckService.save(newHuifuMchCheck);
} else {
// 有,更新
tHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheck.setRegName(newHuifuMchCheck.getRegName());
tHuifuMchCheck.setType(newHuifuMchCheck.getType());
tHuifuMchCheck.setName(newHuifuMchCheck.getName());
tHuifuMchCheck.setPhone(newHuifuMchCheck.getPhone());
tHuifuMchCheck.setCertNo(newHuifuMchCheck.getCertNo());
tHuifuMchCheck.setCertValidityType(newHuifuMchCheck.getCertValidityType());
tHuifuMchCheck.setCertBeginDate(newHuifuMchCheck.getCertBeginDate());
tHuifuMchCheck.setCertEndDate(newHuifuMchCheck.getCertEndDate());
tHuifuMchCheck.setProvId(newHuifuMchCheck.getProvId());
tHuifuMchCheck.setAreaId(newHuifuMchCheck.getAreaId());
tHuifuMchCheck.setDistrictId(newHuifuMchCheck.getDistrictId());
tHuifuMchCheck.setLicenseValidityType(newHuifuMchCheck.getLicenseValidityType());
tHuifuMchCheck.setLicenseCode(newHuifuMchCheck.getLicenseCode());
tHuifuMchCheck.setLicenseBeginDate(newHuifuMchCheck.getLicenseBeginDate());
tHuifuMchCheck.setBindingSteps(1);
tHuifuMchCheckService.updateById(tHuifuMchCheck);
}
return R.ok();
case 1:
// 提交结算信息
tHuifuMchCheck.setCardType(newHuifuMchCheck.getCardType());
tHuifuMchCheck.setCardName(newHuifuMchCheck.getCardName());
tHuifuMchCheck.setCardNo(newHuifuMchCheck.getCardNo());
tHuifuMchCheck.setBranchCode(newHuifuMchCheck.getBranchCode());
tHuifuMchCheck.setBankCode(newHuifuMchCheck.getBankCode());
tHuifuMchCheck.setCardProvId(newHuifuMchCheck.getCardProvId());
tHuifuMchCheck.setCardAreaId(newHuifuMchCheck.getCardAreaId());
tHuifuMchCheck.setSettType(newHuifuMchCheck.getSettType());
tHuifuMchCheck.setBindingSteps(2);
tHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheckService.updateById(tHuifuMchCheck);
return R.ok();
case 2:
// 提交信息审核
tHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheck.setBindingSteps(3);
String result = "";
String huifuId = tHuifuMchCheck.getHuifuId();
try {
if (StringUtils.isEmpty(huifuId)) {
// 没入网,创建接口
result = tHuifuMchService.openAccount(tHuifuMchCheck);
} else {
// 已入网,修改接口
result = HuifuConstant.SUCCESS;
tHuifuMchCheck.setStatus("4");
tHuifuMchCheckService.updateById(tHuifuMchCheck);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
if (HuifuConstant.SUCCESS.equals(result)) {
return R.ok();
}
return R.fail(result);
}
return R.fail(B0001);
}
@ApiOperation(value = "汇付业务开通(签约)")
@GetMapping("/signCon")
public ResponseModel> signCon(Long id) throws Exception {
// 找到用户id对应的审核信息
THuifuMchCheck huifuMchCheck = tHuifuMchCheckService.getById(id);
String data = tHuifuMchService.openBusiness(huifuMchCheck);
// 判断是否开户成功或业务开通成功
if (data.equals(HuifuConstant.SUCCESS)) {
return R.ok();
}
return R.fail(ResponseCodesEnum.A0001, data);
}
@ApiOperation("修改结算方式")
@PostMapping("/updateSettlement")
public ResponseModel> updateSettlement(@RequestBody THuifuMchCheck huifuMchCheck) {
// 找到用户id对应的审核信息
String result = "";
try {
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(THuifuMchCheck::getAdminId, huifuMchCheck.getAdminId());
THuifuMchCheck tHuifuMchCheck = tHuifuMchCheckService.getOne(query);
tHuifuMchCheck.setSettType(huifuMchCheck.getSettType());
result = tHuifuMchService.changeSettleType(tHuifuMchCheck);
if (result.equals(HuifuConstant.SUCCESS)) {
return R.ok();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return R.fail(ResponseCodesEnum.A0001, result);
}
@ApiOperation(value = "汇付用户开户或业务开通")
@GetMapping("/openAccount")
public ResponseModel> openAccount(Long id) throws Exception {
if (id == null) {
return R.fail(ResponseCodesEnum.A0001);
}
// 找到用户id对应的审核信息
THuifuMchCheck huifuMchCheck = tHuifuMchCheckService.getById(id);
String data = "";
// 用户开户或业务开通
if (huifuMchCheck.getStatus().equals("0")) {
data = tHuifuMchService.openAccount(huifuMchCheck);
} else if (huifuMchCheck.getStatus().equals("1") || huifuMchCheck.getStatus().equals("4")) {
data = tHuifuMchService.openBusiness(huifuMchCheck);
} else {
return R.fail(ResponseCodesEnum.A0001);
}
// 判断是否开户成功或业务开通成功
if (data.equals(HuifuConstant.SUCCESS)) {
return R.ok();
} else {
return R.fail(ResponseCodesEnum.A0001, data);
}
}
@ApiOperation("商户信息查询")
@GetMapping("/getHuifuMch")
public ResponseModel> getHuifuMch(Long adminId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(THuifuMchCheck::getAdminId, adminId);
THuifuMchCheck huifuMchCheck = tHuifuMchCheckService.getOne(queryWrapper);
String result = "";
if (huifuMchCheck != null) {
String huifuId = huifuMchCheck.getHuifuId();
if (StringUtils.isNotEmpty(huifuId)) {
try {
result = tHuifuMchService.getInfo(huifuMchCheck);
} catch (BasePayException e) {
throw new RuntimeException(e);
}
}
}
return R.ok(result);
}
@ApiOperation(value = "商户增加取现业务")
@GetMapping("/addCashBusiness")
public ResponseModel> addCashBusiness(Long adminId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(THuifuMchCheck::getAdminId, adminId);
THuifuMchCheck huifuMchCheck = tHuifuMchCheckService.getOne(queryWrapper);
String result = "";
if (huifuMchCheck != null) {
try {
result = tHuifuMchService.addCashBusiness(huifuMchCheck);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return R.ok(result);
}
@ApiOperation(value = "商户修改申请")
@PostMapping("/updateMerchant")
public ResponseModel> updateMerchant(@Valid @RequestBody THuifuMchCheck tHuifuMchCheck) {
if (tHuifuMchCheck.getAdminId() == null) {
return R.fail(ResponseCodesEnum.A0001);
}
// 排除掉不复制的属性
String[] ignoreProperties = {"id", "createDate", "adminId", "huifuId"};
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(THuifuMchCheck::getAdminId, tHuifuMchCheck.getAdminId());
THuifuMchCheck newHuifuMchCheck = tHuifuMchCheckService.getOne(queryWrapper);
if (newHuifuMchCheck.getStatus().equals("3")) {
BeanUtil.copyProperties(tHuifuMchCheck, newHuifuMchCheck, ignoreProperties);
newHuifuMchCheck.setStatus("1");
} else {
BeanUtil.copyProperties(tHuifuMchCheck, newHuifuMchCheck, ignoreProperties);
newHuifuMchCheck.setStatus("4");
}
newHuifuMchCheck.setCreateDate(new Date());
newHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheckService.updateById(newHuifuMchCheck);
return R.ok();
}
@ApiOperation(value = "提交审核")
@PostMapping("/submitCheck")
public ResponseModel> submitCheck(@RequestBody THuifuMchCheck tHuifuMchCheck) {
if (tHuifuMchCheck.getAdminId() == null) {
return R.fail(ResponseCodesEnum.A0001);
}
// 找到用户id对应的审核信息
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(THuifuMchCheck::getAdminId, tHuifuMchCheck.getAdminId());
THuifuMchCheck huifuMchCheck = tHuifuMchCheckService.getOne(queryWrapper);
huifuMchCheck.setStatus("1");
tHuifuMchCheckService.updateById(huifuMchCheck);
return R.ok();
}
@ApiOperation(value = "审核回调")
@PostMapping("/auditNotify")
public ResponseModel> auditNotify(HttpServletRequest request) {
String data = request.getParameter("data");
JSONObject jsonObject = JSONObject.parseObject(data);
String auditStatus = jsonObject.getString("audit_status");
String auditDesc = jsonObject.getString("audit_desc");
return R.ok().setData(data);
}
@ApiOperation(value = "获取汇付商户号")
@GetMapping("/getHuifuId")
public ResponseModel getHuifuId(@RequestParam Long adminId) {
if (adminId == null) {
return R.fail(ResponseCodesEnum.A0001);
}
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(THuifuMch::getAdminId, adminId);
THuifuMch huifuMch = tHuifuMchService.getOne(wrapper);
return R.ok(huifuMch);
}
@ApiOperation(value = "获取审核信息")
@GetMapping("/getHuifuMchCheck")
public ResponseModel getHuifuMchCheck(@RequestParam Long adminId) {
if (adminId == null) {
return R.fail(ResponseCodesEnum.A0001);
}
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(THuifuMchCheck::getAdminId, adminId);
THuifuMchCheck huifuMchCheck = tHuifuMchCheckService.getOne(queryWrapper);
return R.ok(huifuMchCheck);
}
@ApiOperation(value = "更新签约状态")
@PostMapping("/updateConStat")
public ResponseModel> updateConStat(@RequestBody THuifuMchCheck huifuMchCheck) throws BasePayException {
THuifuMchCheck tHuifuMchCheck = tHuifuMchCheckService.getById(huifuMchCheck.getId());
String str = tHuifuMchService.updateConStat(tHuifuMchCheck);
return R.ok(str);
}
@ApiOperation(value = "查询余额")
@GetMapping("/checkBalance")
public ResponseModel> checkBalance(@RequestParam Long adminId) throws Exception {
if (adminId == null) {
return R.fail(ResponseCodesEnum.A0001);
}
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(THuifuMch::getAdminId, adminId);
THuifuMch tHuifuMch = tHuifuMchService.getOne(queryWrapper);
String result = tHuifuMchService.checkBalance(tHuifuMch.getHuifuId());
return R.ok(result);
}
}