mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-21 19:45:09 +08:00
478 lines
19 KiB
Java
478 lines
19 KiB
Java
package com.jsowell.api.uniapp;
|
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
import com.jsowell.adapay.dto.BalancePaymentRequestDTO;
|
|
import com.jsowell.adapay.service.AdapayService;
|
|
import com.jsowell.common.annotation.Anonymous;
|
|
import com.jsowell.common.core.controller.BaseController;
|
|
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
|
import com.jsowell.common.exception.BusinessException;
|
|
import com.jsowell.common.response.RestApiResponse;
|
|
import com.jsowell.common.util.DateUtils;
|
|
import com.jsowell.pile.domain.AdapayMemberAccount;
|
|
import com.jsowell.pile.domain.MemberPlateNumberRelation;
|
|
import com.jsowell.pile.domain.OrderBasicInfo;
|
|
import com.jsowell.pile.dto.ApplyRefundDTO;
|
|
import com.jsowell.pile.dto.CarVinDTO;
|
|
import com.jsowell.pile.dto.QueryOrderDTO;
|
|
import com.jsowell.pile.dto.SettleOrderReportDTO;
|
|
import com.jsowell.pile.service.*;
|
|
import com.jsowell.pile.service.programlogic.AbstractProgramLogic;
|
|
import com.jsowell.pile.service.programlogic.ProgramLogicFactory;
|
|
import com.jsowell.pile.vo.uniapp.MemberBalanceVO;
|
|
import com.jsowell.service.OrderService;
|
|
import com.jsowell.service.TempService;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import java.math.BigDecimal;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* 用于临时接口
|
|
*/
|
|
@Anonymous
|
|
@RestController
|
|
@RequestMapping("/temp")
|
|
public class TempController extends BaseController {
|
|
|
|
@Autowired
|
|
private TempService tempService;
|
|
|
|
@Autowired
|
|
private OrderBasicInfoService orderBasicInfoService;
|
|
|
|
@Autowired
|
|
private IMemberPlateNumberRelationService memberPlateNumberRelationService;
|
|
|
|
@Autowired
|
|
private AdapayMemberAccountService adapayMemberAccountService;
|
|
|
|
@Autowired
|
|
private AdapayService adapayMemberService;
|
|
|
|
@Autowired
|
|
private IMemberBasicInfoService memberBasicInfoService;
|
|
|
|
@Autowired
|
|
private OrderService orderService;
|
|
|
|
@Autowired
|
|
private ISettleOrderReportService settleOrderReportService;
|
|
|
|
@Autowired
|
|
private IPileMerchantInfoService pileMerchantInfoService;
|
|
|
|
/**
|
|
* 临时刷数据接口
|
|
* http://localhost:8080/temp/tempUpdateVirtualAmount
|
|
*
|
|
* @param request
|
|
* @return
|
|
*/
|
|
@PostMapping("tempUpdateVirtualAmount")
|
|
public RestApiResponse<?> tempUpdateVirtualAmount(HttpServletRequest request, @RequestBody QueryOrderDTO dto) {
|
|
logger.info("临时刷数据接口 param:{}", dto);
|
|
RestApiResponse<?> response = null;
|
|
try {
|
|
String s = tempService.tempUpdateVirtualAmount(dto);
|
|
response = new RestApiResponse<>(s);
|
|
} catch (BusinessException e) {
|
|
logger.warn("临时刷数据接口 warn", e);
|
|
response = new RestApiResponse<>(e.getCode(), e.getMessage());
|
|
} catch (Exception e) {
|
|
logger.error("临时刷数据接口 error", e);
|
|
response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_PILE_DETAIL_ERROR);
|
|
}
|
|
logger.info("临时刷数据接口 result:{}", JSONObject.toJSONString(response));
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 临时订单退款
|
|
* http://localhost:8080/temp/tempOrderRefund
|
|
*
|
|
* @return
|
|
*/
|
|
@GetMapping("tempOrderRefund")
|
|
public RestApiResponse<?> tempOrderRefund() {
|
|
RestApiResponse<?> response = null;
|
|
try {
|
|
// orderBasicInfoService.tempOrderRefund();
|
|
response = new RestApiResponse<>();
|
|
} catch (BusinessException e) {
|
|
logger.warn("临时订单退款接口 warn", e);
|
|
response = new RestApiResponse<>(e.getCode(), e.getMessage());
|
|
} catch (Exception e) {
|
|
logger.error("临时订单退款接口 error", e);
|
|
response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR);
|
|
}
|
|
logger.info("临时刷数据接口 result:{}", JSONObject.toJSONString(response));
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 批量退款接口
|
|
* http://localhost:8080/temp/batchRefund
|
|
*
|
|
* @param dto
|
|
* @return
|
|
*/
|
|
@PostMapping("/batchRefund")
|
|
public RestApiResponse<?> batchRefund(@RequestBody QueryOrderDTO dto) {
|
|
RestApiResponse<?> response = null;
|
|
try {
|
|
// orderBasicInfoService.batchRefund(dto);
|
|
response = new RestApiResponse<>();
|
|
} catch (BusinessException e) {
|
|
logger.warn("临时订单退款接口 warn", e);
|
|
response = new RestApiResponse<>(e.getCode(), e.getMessage());
|
|
} catch (Exception e) {
|
|
logger.error("临时订单退款接口 error", e);
|
|
response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR);
|
|
}
|
|
logger.info("临时刷数据接口 result:{}", JSONObject.toJSONString(response));
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 临时接口,计算站点订单报表
|
|
* http://localhost:8080/temp/tempGenerateDailyOrderReports
|
|
*
|
|
* @param dto
|
|
* @return
|
|
*/
|
|
@PostMapping("/tempGenerateDailyOrderReports")
|
|
public RestApiResponse<?> tempGenerateDailyOrderReports(@RequestBody QueryOrderDTO dto) {
|
|
RestApiResponse<?> response = null;
|
|
try {
|
|
String startTime = dto.getStartTime();
|
|
String endTime = dto.getEndTime();
|
|
// 获取日期区间内所有日期
|
|
List<String> dateList = DateUtils.getAllDatesInTheDateRange(startTime, endTime);
|
|
|
|
dto.getStationIdList().parallelStream().forEach(stationId -> {
|
|
for (String tradeDate : dateList) {
|
|
settleOrderReportService.generateDailyOrderReports(stationId, tradeDate);
|
|
}
|
|
});
|
|
|
|
response = new RestApiResponse<>();
|
|
} catch (BusinessException e) {
|
|
logger.warn("临时接口计算站点订单报表 warn", e);
|
|
response = new RestApiResponse<>(e.getCode(), e.getMessage());
|
|
} catch (Exception e) {
|
|
logger.error("临时接口计算站点订单报表 error", e);
|
|
response = new RestApiResponse<>("00300003", "临时接口计算站点订单报表error");
|
|
}
|
|
logger.info("临时接口计算站点订单报表 result:{}", JSONObject.toJSONString(response));
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 临时接口测试vin查询方法
|
|
*
|
|
* @param dto
|
|
* @return
|
|
*/
|
|
@PostMapping("/tempTestVinCode")
|
|
public RestApiResponse<?> tempTestVinCode(@RequestBody CarVinDTO dto) {
|
|
RestApiResponse<?> response = null;
|
|
try {
|
|
MemberPlateNumberRelation memberPlateInfoByVinCode = memberPlateNumberRelationService.getMemberPlateInfoByVinCode(dto.getVinCode());
|
|
response = new RestApiResponse<>(memberPlateInfoByVinCode);
|
|
} catch (Exception e) {
|
|
logger.error("临时接口测试vin查询方法 error,", e);
|
|
response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR);
|
|
}
|
|
logger.info("临时接口测试vin查询方法 result:{}", response);
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 交易确认接口
|
|
* http://localhost:8080/temp/tempPaymentConfirm
|
|
*/
|
|
@PostMapping("/tempPaymentConfirm")
|
|
public RestApiResponse<?> tempPaymentConfirm(@RequestBody QueryOrderDTO dto) {
|
|
RestApiResponse<?> response = null;
|
|
try {
|
|
OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode());
|
|
AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(orderBasicInfo.getMerchantId());
|
|
if (orderBasicInfo == null || adapayMemberAccount == null) {
|
|
throw new BusinessException("", "查询信息为空");
|
|
}
|
|
String appId = pileMerchantInfoService.queryAppIdByMerchantId(orderBasicInfo.getMerchantId());
|
|
orderBasicInfoService.doPaymentConfirmWithDelay(orderBasicInfo, adapayMemberAccount, appId);
|
|
} catch (Exception e) {
|
|
logger.error("临时接口交易确认接口 error,", e);
|
|
response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR);
|
|
}
|
|
logger.info("临时接口交易确认接口 result:{}", response);
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 临时 余额支付分账
|
|
* https://api.jsowellcloud.com/temp/doBalancePaymentTemp
|
|
* @param dto
|
|
* @return
|
|
*/
|
|
@PostMapping("/doBalancePaymentTemp")
|
|
public RestApiResponse<?> doBalancePaymentTemp(@RequestBody QueryOrderDTO dto) {
|
|
RestApiResponse<?> response = null;
|
|
try {
|
|
OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode());
|
|
if (orderBasicInfo == null) {
|
|
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL);
|
|
}
|
|
String merchantId = orderBasicInfo.getMerchantId();
|
|
AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(merchantId);
|
|
if (adapayMemberAccount == null) {
|
|
throw new BusinessException("", "查询信息为空");
|
|
}
|
|
String appId = pileMerchantInfoService.queryAppIdByMerchantId(merchantId);
|
|
// orderBasicInfoService.doBalancePaymentWithDelay(orderBasicInfo, adapayMemberAccount, appId);
|
|
tempService.doBalancePaymentTemp(orderBasicInfo, adapayMemberAccount, appId);
|
|
} catch (Exception e) {
|
|
logger.error("临时接口交易确认接口 error,", e);
|
|
response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR);
|
|
}
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 运营商分账手动接口
|
|
* 前提条件是已经计算好订单日报了
|
|
* http://localhost:8080/temp/orderSplittingOperations
|
|
*
|
|
* @return
|
|
*/
|
|
@PostMapping("/orderSplittingOperations")
|
|
public RestApiResponse<?> orderSplittingOperations(@RequestBody QueryOrderDTO dto) {
|
|
logger.info("手动接口执行订单分账逻辑-param:{}", JSON.toJSONString(dto));
|
|
RestApiResponse<?> response = null;
|
|
try {
|
|
String startTime = dto.getStartTime();
|
|
String endTime = dto.getEndTime();
|
|
// 获取日期区间内所有日期
|
|
List<String> dateList = DateUtils.getAllDatesInTheDateRange(startTime, endTime);
|
|
|
|
for (String tradeDate : dateList) {
|
|
orderBasicInfoService.orderSplittingOperations(dto.getMerchantId(), tradeDate);
|
|
}
|
|
|
|
response = new RestApiResponse<>();
|
|
} catch (BusinessException e) {
|
|
logger.warn("手动接口执行订单分账逻辑-warn", e);
|
|
response = new RestApiResponse<>(e.getCode(), e.getMessage());
|
|
} catch (Exception e) {
|
|
logger.error("手动接口执行订单分账逻辑-error", e);
|
|
response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR);
|
|
}
|
|
logger.info("手动接口执行订单分账逻辑-result:{}", JSONObject.toJSONString(response));
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 测试余额支付接口
|
|
* http://localhost:8080/temp/testCreateBalancePayment
|
|
*/
|
|
@PostMapping("/testCreateBalancePayment")
|
|
public RestApiResponse<?> testCreateBalancePayment(@RequestBody BalancePaymentRequestDTO dto) {
|
|
RestApiResponse<?> response = null;
|
|
try {
|
|
adapayMemberService.createBalancePaymentRequest(dto.getOutMemberId(), dto.getInMemberId(), dto.getTransAmt(), "测试余额支付", "测试余额支付描述", "");
|
|
response = new RestApiResponse<>();
|
|
} catch (BusinessException e) {
|
|
logger.warn("测试余额支付接口warn", e);
|
|
response = new RestApiResponse<>(e.getCode(), e.getMessage());
|
|
} catch (Exception e) {
|
|
logger.error("测试余额支付接口error", e);
|
|
response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR);
|
|
}
|
|
logger.info("测试余额支付接口result:{}", JSONObject.toJSONString(response));
|
|
return response;
|
|
}
|
|
|
|
|
|
/**
|
|
* 批量余额退款接口
|
|
* http://localhost:8080/temp/batchWechatRefund
|
|
* @param dto
|
|
* @return
|
|
*/
|
|
@PostMapping("/batchWechatRefund")
|
|
public RestApiResponse<?> batchWechatRefund(@RequestBody ApplyRefundDTO dto) {
|
|
logger.info("批量余额退款接口 params:{}", JSONObject.toJSONString(dto));
|
|
RestApiResponse<?> response = null;
|
|
List<String> memberIdList = dto.getMemberIdList();
|
|
try {
|
|
// 查询出本金金额
|
|
List<MemberBalanceVO> memberRefundAmount = memberBasicInfoService.getMemberRefundAmount(memberIdList);
|
|
if (CollectionUtils.isNotEmpty(memberRefundAmount)) {
|
|
memberRefundAmount.parallelStream().forEach(memberBalanceVO -> {
|
|
ApplyRefundDTO refundDTO = new ApplyRefundDTO();
|
|
refundDTO.setMemberId(memberBalanceVO.getMemberId());
|
|
refundDTO.setRefundType("2");
|
|
refundDTO.setRefundAmount(new BigDecimal(memberBalanceVO.getPrincipalAmount()));
|
|
refundDTO.setWechatAppId(dto.getWechatAppId());
|
|
// 调用退款接口
|
|
String mode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getWechatAppId());
|
|
// 获取处理逻辑
|
|
AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode);
|
|
orderLogic.refundBalance(refundDTO);
|
|
});
|
|
}
|
|
response = new RestApiResponse<>();
|
|
} catch (Exception e) {
|
|
logger.error("批量退款接口 error,", e);
|
|
response = new RestApiResponse<>(e);
|
|
}
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 重试订单退款接口
|
|
* http://localhost:8080/temp/retryRefundOrder
|
|
*/
|
|
@PostMapping("/retryRefundOrder")
|
|
public RestApiResponse<?> retryRefundOrder(@RequestBody ApplyRefundDTO dto) {
|
|
RestApiResponse<?> response;
|
|
try {
|
|
orderBasicInfoService.retryRefundOrder(dto.getOrderCode());
|
|
response = new RestApiResponse<>();
|
|
} catch (BusinessException e) {
|
|
logger.error("重试订单退款接口 error,", e);
|
|
response = new RestApiResponse<>(e.getCode(), e.getMessage());
|
|
} catch (Exception e) {
|
|
logger.error("重试订单退款接口 error,", e);
|
|
response = new RestApiResponse<>(e);
|
|
}
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 查询未分账订单
|
|
* http://localhost:8080/temp/queryUndividedOrder
|
|
*/
|
|
@PostMapping("/queryUndividedOrder")
|
|
public RestApiResponse<?> queryUndividedOrder(@RequestBody SettleOrderReportDTO dto) {
|
|
logger.info("查询未分账订单param:{}", JSON.toJSONString(dto));
|
|
RestApiResponse<?> response;
|
|
try {
|
|
Map<String, Object> map = tempService.queryUndividedOrder(dto);
|
|
response = new RestApiResponse<>(map);
|
|
} catch (BusinessException e) {
|
|
logger.error("查询未分账订单接口 error,", e);
|
|
response = new RestApiResponse<>(e.getCode(), e.getMessage());
|
|
} catch (Exception e) {
|
|
logger.error("查询未分账订单接口 error,", e);
|
|
response = new RestApiResponse<>("00300003", "查询未分账订单异常");
|
|
}
|
|
logger.info("查询未分账订单result:{}", JSON.toJSONString(response));
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 余额支付订单分账工具
|
|
* 8月17号之后使用汇付余额支付的订单
|
|
* 需要重新走一遍分账
|
|
* https://api.jsowellcloud.com/temp/splitTheBillForOrderTemp
|
|
*/
|
|
@PostMapping("/splitTheBillForOrderTemp")
|
|
public RestApiResponse<?> splitTheBillForOrderTemp(@RequestBody QueryOrderDTO dto) {
|
|
RestApiResponse<?> response;
|
|
try {
|
|
tempService.splitTheBillForOrderTemp(dto.getMerchantId(), dto.getOrderCodeList());
|
|
response = new RestApiResponse<>();
|
|
} catch (BusinessException e) {
|
|
logger.error("余额支付订单分账工具 error,", e);
|
|
response = new RestApiResponse<>(e.getCode(), e.getMessage());
|
|
} catch (Exception e) {
|
|
logger.error("余额支付订单分账工具 error,", e);
|
|
response = new RestApiResponse<>("00300003", "余额支付订单分账工具异常");
|
|
}
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 手动执行退款
|
|
* 订单或余额
|
|
* https://api.jsowellcloud.com/temp/adapayRefund
|
|
*/
|
|
@PostMapping("/adapayRefund")
|
|
public RestApiResponse<?> adapayRefund(@RequestBody ApplyRefundDTO dto) {
|
|
orderService.adapayRefund(dto);
|
|
return new RestApiResponse<>();
|
|
}
|
|
|
|
/**
|
|
* 批量订单退款
|
|
* 支持在线支付/余额支付
|
|
* https://api.jsowellcloud.com/temp/batchRefundOrder
|
|
*/
|
|
@PostMapping("/batchRefundOrder")
|
|
public RestApiResponse<?> batchRefundOrder(@RequestBody QueryOrderDTO dto) {
|
|
try {
|
|
tempService.batchRefundOrder(dto.getOrderCodeList());
|
|
} catch (Exception e) {
|
|
logger.error("批量订单退款error", e);
|
|
}
|
|
return new RestApiResponse<>();
|
|
}
|
|
|
|
/**
|
|
* 更新会员的余额充值记录
|
|
*/
|
|
public RestApiResponse<?> updateMemberAdapayRecord(ApplyRefundDTO dto) {
|
|
try {
|
|
List<String> memberIdList = dto.getMemberIdList();
|
|
for (String memberId : memberIdList) {
|
|
tempService.updateMemberAdapayRecord(memberId);
|
|
}
|
|
} catch (Exception e) {
|
|
logger.error("批量订单退款error", e);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* 校验未分账的支付单
|
|
* https://localhost:8080/temp/verifyUndividedPayment
|
|
*/
|
|
@PostMapping("/verifyUndividedPayment")
|
|
public RestApiResponse<?> verifyUndividedPayment(@RequestBody QueryOrderDTO dto) {
|
|
RestApiResponse<?> response;
|
|
try {
|
|
tempService.verifyUndividedPayment(dto);
|
|
response = new RestApiResponse<>();
|
|
} catch (Exception e) {
|
|
logger.error("校验未分账的支付单error", e);
|
|
response = new RestApiResponse<>();
|
|
}
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 根据时间范围查询支付对象列表,并查询分账情况
|
|
*/
|
|
@PostMapping("/checkPayment")
|
|
public RestApiResponse<?> checkPayment(@RequestBody QueryOrderDTO dto) {
|
|
RestApiResponse<?> response;
|
|
try {
|
|
tempService.checkPayment(dto);
|
|
response = new RestApiResponse<>();
|
|
} catch (Exception e) {
|
|
logger.error("校验未分账的支付单error", e);
|
|
response = new RestApiResponse<>();
|
|
}
|
|
return response;
|
|
}
|
|
}
|