mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-19 18:45:03 +08:00
update 添加临时方法,更新adapayUnsplitRecord数据
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
package com.jsowell.pile.mapper;
|
||||
|
||||
import com.jsowell.pile.domain.AdapayUnsplitRecord;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface AdapayUnsplitRecordMapper {
|
||||
int deleteByPrimaryKey(Integer id);
|
||||
|
||||
@@ -26,4 +27,6 @@ public interface AdapayUnsplitRecordMapper {
|
||||
int updateBatchSelective(@Param("list") List<AdapayUnsplitRecord> list);
|
||||
|
||||
int batchInsert(@Param("list") List<AdapayUnsplitRecord> list);
|
||||
|
||||
List<AdapayUnsplitRecord> queryUnsplitOrders(@Param("startTime") String startTime, @Param("endTime") String endTime);
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Repository
|
||||
public interface OrderBasicInfoMapper {
|
||||
@@ -440,4 +441,6 @@ public interface OrderBasicInfoMapper {
|
||||
* @return List<OrderMonthStatVO>
|
||||
*/
|
||||
List<OrderMonthStatVO> selectOrderCountAndInsuranceByMonth(@Param("dto") QueryOrderDTO dto);
|
||||
|
||||
List<OrderBasicInfo> selectOrderTemp(@Param("orderCodes") Set<String> orderCodes);
|
||||
}
|
||||
|
||||
@@ -26,4 +26,5 @@ public interface AdapayUnsplitRecordService{
|
||||
|
||||
int batchInsert(List<AdapayUnsplitRecord> list);
|
||||
|
||||
List<AdapayUnsplitRecord> queryUnsplitOrders(String startTime, String endTime);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import java.text.ParseException;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public interface OrderBasicInfoService{
|
||||
|
||||
@@ -641,4 +642,7 @@ public interface OrderBasicInfoService{
|
||||
|
||||
|
||||
OrderCountByTimeVO queryOrderInsuranceAmountByTime(QueryOrderDTO dto);
|
||||
|
||||
// 临时接口, 查询订单信息
|
||||
List<OrderBasicInfo> selectOrderTemp(Set<String> orderCodes);
|
||||
}
|
||||
|
||||
@@ -77,9 +77,7 @@ import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.text.ParseException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.YearMonth;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
@@ -6039,5 +6037,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
return vo;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OrderBasicInfo> selectOrderTemp(Set<String> orderCodes) {
|
||||
return orderBasicInfoMapper.selectOrderTemp(orderCodes);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package com.jsowell.web.controller.pile;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import com.jsowell.pile.domain.AdapayUnsplitRecord;
|
||||
import java.util.List;
|
||||
import com.jsowell.pile.mapper.AdapayUnsplitRecordMapper;
|
||||
import com.jsowell.pile.service.AdapayUnsplitRecordService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
@Service
|
||||
public class AdapayUnsplitRecordServiceImpl implements AdapayUnsplitRecordService{
|
||||
|
||||
@@ -69,4 +68,9 @@ public class AdapayUnsplitRecordServiceImpl implements AdapayUnsplitRecordServic
|
||||
return adapayUnsplitRecordMapper.batchInsert(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AdapayUnsplitRecord> queryUnsplitOrders(String startTime, String endTime) {
|
||||
return adapayUnsplitRecordMapper.queryUnsplitOrders(startTime, endTime);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -698,4 +698,11 @@
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<select id="queryUnsplitOrders" resultMap="BaseResultMap">
|
||||
select * from adapay_unsplit_record
|
||||
where pay_time >= #{startTime} and pay_time <= #{endTime}
|
||||
and due_refund_amount is null
|
||||
and settle_amount is null
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -3495,4 +3495,13 @@
|
||||
ORDER BY month ASC
|
||||
</select>
|
||||
|
||||
<select id="selectOrderTemp" resultMap="BaseResultMap">
|
||||
select
|
||||
order_code, refund_amount, settle_amount
|
||||
from order_basic_info
|
||||
where order_code in
|
||||
<foreach item="item" collection="orderCodes" separator="," open="(" close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -1,24 +1,18 @@
|
||||
package com.jsowell.quartz.task;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||
import com.jsowell.adapay.common.DivMember;
|
||||
import com.jsowell.adapay.dto.PaymentConfirmParam;
|
||||
import com.jsowell.adapay.dto.WithdrawDTO;
|
||||
import com.jsowell.adapay.response.PaymentConfirmResponse;
|
||||
import com.jsowell.adapay.service.AdapayService;
|
||||
import com.jsowell.common.constant.CacheConstants;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.redis.RedisCache;
|
||||
import com.jsowell.common.enums.adapay.AdapayStatusEnum;
|
||||
import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum;
|
||||
import com.jsowell.common.util.AdapayUtil;
|
||||
import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.common.util.PageUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.common.util.spring.SpringUtils;
|
||||
import com.jsowell.pile.domain.AdapayUnsplitRecord;
|
||||
import com.jsowell.pile.domain.OrderBasicInfo;
|
||||
import com.jsowell.pile.domain.OrderUnsplitRecord;
|
||||
import com.jsowell.pile.domain.PileMerchantInfo;
|
||||
import com.jsowell.pile.domain.PileStationInfo;
|
||||
import com.jsowell.pile.domain.ykcCommond.PublishPileBillingTemplateCommand;
|
||||
@@ -38,9 +32,7 @@ import org.springframework.stereotype.Component;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component("jsowellTask")
|
||||
@@ -81,8 +73,11 @@ public class JsowellTask {
|
||||
@Autowired
|
||||
private ThirdPartyStationRelationService thirdPartyStationRelationService;
|
||||
|
||||
// @Autowired
|
||||
// private OrderUnsplitRecordService orderUnsplitRecordService;
|
||||
|
||||
@Autowired
|
||||
private OrderUnsplitRecordService orderUnsplitRecordService;
|
||||
private AdapayUnsplitRecordService adapayUnsplitRecordService;
|
||||
|
||||
/**
|
||||
* 设置挡板, PRE环境不执行
|
||||
@@ -422,84 +417,108 @@ public class JsowellTask {
|
||||
|
||||
// 查询未分帐订单
|
||||
PageUtils.startPage(1, 1000);
|
||||
List<OrderUnsplitRecord> list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime);
|
||||
}
|
||||
|
||||
private void processUnSettledOrderOld() {
|
||||
String startTime = "2023-01-01 00:00:00";
|
||||
String endTime = "2024-12-31 23:59:59";
|
||||
|
||||
// 使用redis控制请求api
|
||||
Boolean setnx = redisCache.setnx(CacheConstants.PROCESS_UNSPLIT_ORDERS, Constants.ONE, 65);
|
||||
if (!setnx) {
|
||||
List<AdapayUnsplitRecord> list = adapayUnsplitRecordService.queryUnsplitOrders(startTime, endTime);
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
// 转为map, key:orderCode, value:AdapayUnsplitRecord
|
||||
Map<String, AdapayUnsplitRecord> map = list.stream().collect(Collectors.toMap(AdapayUnsplitRecord::getOrderCode, v -> v));
|
||||
|
||||
// 查询未分帐订单
|
||||
PageUtils.startPage(1, 10);
|
||||
List<OrderUnsplitRecord> list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime);
|
||||
// 取keySet
|
||||
Set<String> orderCodes = map.keySet();
|
||||
|
||||
log.info("处理未分帐订单start, 当前时间:{}, 查询出[{}]条未分账订单, 下面进行处理", DateUtils.getDateTime(), list.size());
|
||||
int count = 0;
|
||||
for (OrderUnsplitRecord orderUnsplitRecord : list) {
|
||||
String paymentId = orderUnsplitRecord.getPaymentId();
|
||||
String orderCode = orderUnsplitRecord.getOrderCode();
|
||||
BigDecimal confirmAmt = orderUnsplitRecord.getSettleAmount();
|
||||
// 查询订单的退款金额与结算金额
|
||||
List<OrderBasicInfo> orderList = orderBasicInfoService.selectOrderTemp(orderCodes);
|
||||
// 转为map, key:orderCode, value:OrderBasicInfo
|
||||
Map<String, OrderBasicInfo> orderMap = orderList.stream().collect(Collectors.toMap(OrderBasicInfo::getOrderCode, v -> v));
|
||||
|
||||
DivMember divMember = new DivMember();
|
||||
divMember.setMemberId(Constants.ZERO); // 若是商户本身时,传入0
|
||||
divMember.setAmount(AdapayUtil.formatAmount(confirmAmt));
|
||||
divMember.setFeeFlag(Constants.Y);
|
||||
|
||||
PaymentConfirmParam param = PaymentConfirmParam.builder()
|
||||
.paymentId(paymentId)
|
||||
.divMemberList(Lists.newArrayList(divMember))
|
||||
.confirmAmt(confirmAmt)
|
||||
.orderCode(orderCode)
|
||||
.wechatAppId(Constants.DEFAULT_APP_ID) // 默认使用万车充的appId
|
||||
.build();
|
||||
// 延时分账,使用确认交易API
|
||||
PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(param);
|
||||
|
||||
// 如果确认交易成功,则更新订单状态为已分账
|
||||
if (paymentConfirmResponse.isSuccess()) {
|
||||
count++;
|
||||
orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue());
|
||||
orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord);
|
||||
log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId);
|
||||
} else {
|
||||
// error_type:api_error, error_code:confirm_amt_over_limit, error_msg当前确认金额 > 支付金额 - 已支付确认金额 - 已支付撤销金额
|
||||
if (paymentConfirmResponse.getError_code().equals("confirm_amt_over_limit")) {
|
||||
// 查询paymentId的总分账金额
|
||||
BigDecimal totalSplitAmount;
|
||||
try {
|
||||
totalSplitAmount = adapayService.getTotalSplitAmountByPaymentId(paymentId);
|
||||
} catch (BaseAdaPayException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
if (totalSplitAmount.compareTo(confirmAmt) == 0) {
|
||||
// 如果总分账金额等于当前分账金额,则更新订单状态为已分账
|
||||
orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue());
|
||||
orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord);
|
||||
log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId);
|
||||
} else {
|
||||
log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg());
|
||||
}
|
||||
}
|
||||
|
||||
// error_type:invalid_request_error, error_code:payment_over_time_doing, error_msg:数据正在处理中,请稍后再试
|
||||
if (paymentConfirmResponse.getError_code().equals("payment_over_time_doing")) {
|
||||
log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg());
|
||||
break;
|
||||
}
|
||||
// error_type:invalid_request_error, error_code:refund_repeate_request, error_msg:请求过于频繁
|
||||
if (paymentConfirmResponse.getError_code().equals("refund_repeate_request")) {
|
||||
log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg());
|
||||
break;
|
||||
}
|
||||
}
|
||||
List<AdapayUnsplitRecord> updateList = new ArrayList<>();
|
||||
//更新map
|
||||
for (String orderCode : orderCodes) {
|
||||
OrderBasicInfo orderBasicInfo = orderMap.get(orderCode);
|
||||
AdapayUnsplitRecord adapayUnsplitRecord = map.get(orderCode);
|
||||
adapayUnsplitRecord.setDueRefundAmount(orderBasicInfo.getRefundAmount());
|
||||
adapayUnsplitRecord.setSettleAmount(orderBasicInfo.getSettleAmount());
|
||||
updateList.add(adapayUnsplitRecord);
|
||||
}
|
||||
log.info("处理未分帐订单end, 当前时间:[{}], 成功分账[{}]条订单", DateUtils.getDateTime(), count);
|
||||
adapayUnsplitRecordService.updateBatchSelective(updateList);
|
||||
}
|
||||
|
||||
// private void processUnSettledOrderOld() {
|
||||
// String startTime = "2023-01-01 00:00:00";
|
||||
// String endTime = "2024-12-31 23:59:59";
|
||||
//
|
||||
// // 使用redis控制请求api
|
||||
// Boolean setnx = redisCache.setnx(CacheConstants.PROCESS_UNSPLIT_ORDERS, Constants.ONE, 65);
|
||||
// if (!setnx) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// // 查询未分帐订单
|
||||
// PageUtils.startPage(1, 10);
|
||||
// List<OrderUnsplitRecord> list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime);
|
||||
//
|
||||
// log.info("处理未分帐订单start, 当前时间:{}, 查询出[{}]条未分账订单, 下面进行处理", DateUtils.getDateTime(), list.size());
|
||||
// int count = 0;
|
||||
// for (OrderUnsplitRecord orderUnsplitRecord : list) {
|
||||
// String paymentId = orderUnsplitRecord.getPaymentId();
|
||||
// String orderCode = orderUnsplitRecord.getOrderCode();
|
||||
// BigDecimal confirmAmt = orderUnsplitRecord.getSettleAmount();
|
||||
//
|
||||
// DivMember divMember = new DivMember();
|
||||
// divMember.setMemberId(Constants.ZERO); // 若是商户本身时,传入0
|
||||
// divMember.setAmount(AdapayUtil.formatAmount(confirmAmt));
|
||||
// divMember.setFeeFlag(Constants.Y);
|
||||
//
|
||||
// PaymentConfirmParam param = PaymentConfirmParam.builder()
|
||||
// .paymentId(paymentId)
|
||||
// .divMemberList(Lists.newArrayList(divMember))
|
||||
// .confirmAmt(confirmAmt)
|
||||
// .orderCode(orderCode)
|
||||
// .wechatAppId(Constants.DEFAULT_APP_ID) // 默认使用万车充的appId
|
||||
// .build();
|
||||
// // 延时分账,使用确认交易API
|
||||
// PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(param);
|
||||
//
|
||||
// // 如果确认交易成功,则更新订单状态为已分账
|
||||
// if (paymentConfirmResponse.isSuccess()) {
|
||||
// count++;
|
||||
// orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue());
|
||||
// orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord);
|
||||
// log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId);
|
||||
// } else {
|
||||
// // error_type:api_error, error_code:confirm_amt_over_limit, error_msg当前确认金额 > 支付金额 - 已支付确认金额 - 已支付撤销金额
|
||||
// if (paymentConfirmResponse.getError_code().equals("confirm_amt_over_limit")) {
|
||||
// // 查询paymentId的总分账金额
|
||||
// BigDecimal totalSplitAmount;
|
||||
// try {
|
||||
// totalSplitAmount = adapayService.getTotalSplitAmountByPaymentId(paymentId);
|
||||
// } catch (BaseAdaPayException e) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
// if (totalSplitAmount.compareTo(confirmAmt) == 0) {
|
||||
// // 如果总分账金额等于当前分账金额,则更新订单状态为已分账
|
||||
// orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue());
|
||||
// orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord);
|
||||
// log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId);
|
||||
// } else {
|
||||
// log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // error_type:invalid_request_error, error_code:payment_over_time_doing, error_msg:数据正在处理中,请稍后再试
|
||||
// if (paymentConfirmResponse.getError_code().equals("payment_over_time_doing")) {
|
||||
// log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg());
|
||||
// break;
|
||||
// }
|
||||
// // error_type:invalid_request_error, error_code:refund_repeate_request, error_msg:请求过于频繁
|
||||
// if (paymentConfirmResponse.getError_code().equals("refund_repeate_request")) {
|
||||
// log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg());
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// log.info("处理未分帐订单end, 当前时间:[{}], 成功分账[{}]条订单", DateUtils.getDateTime(), count);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user