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.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 IOrderBasicInfoService orderBasicInfoService; @Autowired private IMemberPlateNumberRelationService memberPlateNumberRelationService; @Autowired private IAdapayMemberAccountService 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 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 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 memberIdList = dto.getMemberIdList(); try { // 查询出本金金额 List 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())); // 调用退款接口 orderService.weChatRefund(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 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 memberIdList = dto.getMemberIdList(); for (String memberId : memberIdList) { tempService.updateMemberAdapayRecord(memberId); } } catch (Exception e) { logger.error("批量订单退款error", e); } return null; } }