From b275caacb39c989cb5a8e1298421a21ffc19a69f Mon Sep 17 00:00:00 2001 From: zhengfangyuan Date: Sat, 3 Sep 2022 18:46:54 +0800 Subject: [PATCH] fix bug --- .../schedule/SharingOrderRedoSchedule.java | 17 +- .../service/WxProfitSharingOrderService.java | 2 +- .../impl/WxProfitSharingOrderServiceImpl.java | 168 +++++------------- 3 files changed, 65 insertions(+), 122 deletions(-) diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java index e4a05a4b9..6340ae985 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java @@ -1,10 +1,13 @@ package com.iformall.schedule; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.WxMall; +import com.iformall.domain.po.WxPayOrder; import com.iformall.domain.po.WxProfitSharingOrder; +import com.iformall.enums.EnumPayStatus; import com.iformall.enums.EnumPayWay; import com.iformall.enums.EnumProfitSharingOrderStatus; import com.iformall.enums.EnumProfitSharingOrderType; @@ -31,6 +34,9 @@ public class SharingOrderRedoSchedule { @Autowired private WxProfitSharingOrderMapper wxProfitSharingOrderMapper; + + @Autowired + WxPayOrderMapper wxPayOrderMapper; @Autowired @@ -56,7 +62,16 @@ public class SharingOrderRedoSchedule { if (null != list) { list.stream().forEach(sharingOrder->{ try { - ResultData result = wxProfitSharingOrderService.redoSharingOrder(sharingOrder); + WxPayOrder wxPayOrder = new WxPayOrder(); + wxPayOrder.updateTenantInfo(sharingOrder); + wxPayOrder.setId(sharingOrder.getOrderId()); + wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrder)); + if (null == wxPayOrder) { + logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage() + + " ID:" +sharingOrder.getId() + + " RES: wxPayOrder is null." ); + } + ResultData result = wxProfitSharingOrderService.redoSharingOrder(sharingOrder,wxPayOrder); if (result.code != ResultData.SUCCESS) { logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage() + " ID:" +sharingOrder.getId() diff --git a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java index 71332f7cc..57acf2a0d 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java @@ -26,7 +26,7 @@ public interface WxProfitSharingOrderService { /** * 分账重试 */ - ResultData redoSharingOrder(WxProfitSharingOrder sharingOrder); + ResultData redoSharingOrder(WxProfitSharingOrder sharingOrder,WxPayOrder payOrder); /** * 分账完结重试 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java index 346b05a86..96c09bc19 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java @@ -165,7 +165,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ @Override @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) - public ResultData redoSharingOrder(WxProfitSharingOrder sharingOrder) { + public ResultData redoSharingOrder(WxProfitSharingOrder sharingOrder,WxPayOrder payOrder) { if(!EnumProfitSharingOrderStatus.shareStatus().contains(sharingOrder.getSharingStatus())){ return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"分账状态不允许"); @@ -186,42 +186,34 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ PayShareAdapterService payShareAdapterService = payServiceFactory.getPayShareAdapterService(wxPayOrder.getPayVendor(),wxPayOrder.getPayVersion()); PayShareResult shareResult = null; JSONArray jsonArray = null; - - if(StringUtils.isNotBlank(sharingOrder.getReceivers())){ - jsonArray = JSONArray.parseArray(sharingOrder.getReceivers()); - } - List resultList = new ArrayList(); + JSONArray recordJsonArray = null; + //总分模式,收款账户分账 + if (EnumPayMchType.TOTAL.getCode() == payOrder.getMchType()) { + if(StringUtils.isNotBlank(sharingOrder.getReceivers())){ + jsonArray = JSONArray.parseArray(sharingOrder.getReceivers()); + recordJsonArray = JSONArray.parseArray(sharingOrder.getReceivers()); + } + //直连模式,不用分账,直接完结分账 + }else if (EnumPayMchType.DIRECT.getCode() == payOrder.getMchType()) { + //当前商户的收款账号,为了加上收款记录 + WxProfitSharingReceiver receiver = payShareAdapterService.getReceiver(sharingOrder, sharingOrder.getMerchantId(), payOrder.getTtPayWay(), payOrder.getMchType()); + if (null == receiver) { + return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"当前商户未配置收款账号"); + } + StringBuffer sb = new StringBuffer("[{").append("\"description\":").append(receiver.getId()).append(",\"amount\":").append(sharingOrder.getPayAmount()); + recordJsonArray = JSONArray.parseArray(sb.toString()); + } + if(jsonArray == null || jsonArray.isEmpty()){ shareResult = payShareAdapterService.noReciverShare(cAppInfo, payAccount, sharingOrder); }else{ - final IdWorker idworker = IdWorker.get(); - Date currentDate = new Date(); - try { - jsonArray.stream().forEach(obj -> { - JSONObject receiver =(JSONObject) obj; - WxProfitSharingResult result = new WxProfitSharingResult(); - result.setId(idworker.nextId()); - result.updateTenantInfo(sharingOrder); - result.setMerchantId(sharingOrder.getMerchantId()); - result.setSharingOrderId(sharingOrder.getId()); - result.setSharingReceiverId(Long.valueOf(receiver.getString("description"))); - result.setPayAmount(receiver.getInteger("amount")); - result.setCreateTime(currentDate); - result.setUpdateTime(currentDate); - result.setSharingStatus(EnumProfitSharingResultStatus.PROFIT_SHARING_RESULT_PENDING.getCode()); - resultList.add(result); - }); - }catch (Exception e) { - logger.error("分账详细信息为null",e); - return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID); - } shareResult = payShareAdapterService.haveReciversShare(cAppInfo, payAccount, sharingOrder, jsonArray, wxPayOrder.getMchType()); } - + if (null == shareResult) { return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"当前支付模式调用分账未返回结果"); } - + WxProfitSharingOrder updSharingOrder = new WxProfitSharingOrder(); updSharingOrder.updateTenantInfo(sharingOrder); updSharingOrder.setId(sharingOrder.getId()); @@ -238,6 +230,32 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ updSharingOrder.setUpdateTime(new Date()); wxProfitSharingOrderMapper.updateById(updSharingOrder); + if (null == recordJsonArray || recordJsonArray.isEmpty()) { + return new ResultData(shareResult.getData()); + } + List resultList = new ArrayList(); + final IdWorker idworker = IdWorker.get(); + Date currentDate = new Date(); + try { + recordJsonArray.stream().forEach(obj -> { + JSONObject receiver =(JSONObject) obj; + WxProfitSharingResult result = new WxProfitSharingResult(); + result.setId(idworker.nextId()); + result.updateTenantInfo(sharingOrder); + result.setMerchantId(sharingOrder.getMerchantId()); + result.setSharingOrderId(sharingOrder.getId()); + result.setSharingReceiverId(Long.valueOf(receiver.getString("description"))); + result.setPayAmount(receiver.getInteger("amount")); + result.setCreateTime(currentDate); + result.setUpdateTime(currentDate); + result.setSharingStatus(EnumProfitSharingResultStatus.PROFIT_SHARING_RESULT_PENDING.getCode()); + resultList.add(result); + }); + }catch (Exception e) { + logger.error("分账详细信息为null",e); + return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID); + } + for (WxProfitSharingResult result:resultList) { wxProfitSharingResultMapper.insert(result); } @@ -355,98 +373,8 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ return new ResultData(); } - ResultData resultData = redoSharingOrder(record); + ResultData resultData = redoSharingOrder(record,payOrder); return resultData; - -// if (!sharingOrderDto.getType().equals(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()) && -// !sharingOrderDto.getType().equals(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode())){ -// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); -// } -// EnumProfitSharingOrderType shareType = EnumProfitSharingOrderType.getEnum(sharingOrderDto.getType()); -// if (null == shareType) { -// throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),sharingOrderDto.getType()+"在分账方式中不存在。EnumProfitSharingOrderType"); -// } -// WxAppinfo appInfo = getAppinfo(sharingOrderDto.getTenantId(),payWay); -// WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); -// PayShareResult shareResult = null; -// JSONArray jsonArray = null; -// -// if(StringUtils.isNotBlank(record.getReceivers())){ -// jsonArray = JSONArray.parseArray(record.getReceivers()); -// } -// -// if(jsonArray == null || jsonArray.isEmpty()){ -// shareResult = payShareAdapterService.noReciverShare(appInfo, payAccount, record, sharingOrderDto.getTransactionId(), sharingOrderDto.getShareAmount()); -// }else{ -// shareResult = payShareAdapterService.haveReciversShare(appInfo, payAccount, record, sharingOrderDto.getTransactionId(), jsonArray, shareType); -// } -// -// //总分模式,收款账户分账 -//// if (EnumPayMchType.TOTAL.getCode() == mchType) { -//// if(StringUtils.isNotBlank(record.getReceivers())){ -//// jsonArray = JSONArray.parseArray(record.getReceivers()); -//// shareResult = payShareAdapterService.haveReciversShare(appInfo, payAccount, record, -//// sharingOrderDto.getTransactionId(), jsonArray, shareType); -//// }else { -//// return new ResultData(); -//// } -//// //直连模式,不用分账,直接完结分账 -//// }else if (EnumPayMchType.DIRECT.getCode() == mchType) { -//// shareResult = payShareAdapterService.noReciverShare(appInfo, payAccount, record, sharingOrderDto.getTransactionId(), sharingOrderDto.getShareAmount()); -//// //当前商户的收款账号 -//// WxProfitSharingReceiver receiver = payShareAdapterService.getReceiver(sharingOrderDto, sharingOrderDto.getMerchantId(), payOrder.getTtPayWay(), mchType); -//// if (null == receiver) { -//// return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"当前商户未配置收款账号"); -//// } -//// StringBuffer sb = new StringBuffer("[{").append("\"description\":").append(receiver.getId()).append(",\"amount\":").append(sharingOrderDto.getShareAmount()); -//// jsonArray = JSONArray.parseArray(sb.toString()); -//// } -// if (null == shareResult) { -// return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"当前支付模式调用分账未返回结果"); -// } -// -// WxProfitSharingOrder updSharingOrder = new WxProfitSharingOrder(); -// updSharingOrder.updateTenantInfo(record); -// updSharingOrder.setId(record.getId()); -// updSharingOrder.setOutSettleNo(record.getOutSettleNo()); -// if (!shareResult.isSuccess()) { -// updSharingOrder.setSharingStatus(shareResult.getCode()); -// updSharingOrder.setErrorMsg(shareResult.getMsg()); -// updSharingOrder.setUpdateTime(new Date()); -// wxProfitSharingOrderMapper.updateById(updSharingOrder); -// return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),updSharingOrder.getErrorMsg()); -// } -// updSharingOrder.setSharingOrderNo(shareResult.getShareOrderNo()); -// updSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_ACCEPTED.getCode()); -// updSharingOrder.setUpdateTime(new Date()); -// wxProfitSharingOrderMapper.updateById(updSharingOrder); -// -// if(jsonArray == null || jsonArray.isEmpty()){ -// final IdWorker idworker = IdWorker.get(); -// try { -// jsonArray.stream().forEach(obj -> { -// JSONObject receiver =(JSONObject) obj; -// Date currentDate = new Date(); -// WxProfitSharingResult result = new WxProfitSharingResult(); -// result.setId(idworker.nextId()); -// result.updateTenantInfo(sharingOrderDto); -// result.setMerchantId(record.getMerchantId()); -// result.setSharingOrderId(record.getId()); -// result.setSharingReceiverId(Long.valueOf(receiver.getString("description"))); -// result.setPayAmount(receiver.getInteger("amount")); -// result.setCreateTime(currentDate); -// result.setUpdateTime(currentDate); -// result.setSharingStatus(EnumProfitSharingResultStatus.PROFIT_SHARING_RESULT_PENDING.getCode()); -// wxProfitSharingResultMapper.insert(result); -// }); -// }catch (Exception e) { -// logger.error("分账详细信息为null",e); -//// return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID); -// } -// } -// -// return new ResultData(shareResult.getData()); - } @Override