diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/TtPayController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/TtPayController.java index 67cc9a742..c4f38faba 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/TtPayController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/TtPayController.java @@ -6,10 +6,7 @@ import com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; -import com.iformall.domain.po.WxAppinfo; -import com.iformall.domain.po.WxBatchOrder; -import com.iformall.domain.po.WxPayAccount; -import com.iformall.domain.po.WxPayOrder; +import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.msg.FmInsideNotifyRefundSuccessMsg; import com.iformall.douyin.pay.DouYinPayHelper; @@ -48,6 +45,9 @@ public class TtPayController extends BaseController { @Autowired private WxPayAccountService payAccountService; + @Autowired + private WxProfitSharingOrderService wxProfitSharingOrderService; + @Autowired private WxRefundOrderService wxRefundOrderService; @@ -227,10 +227,21 @@ public class TtPayController extends BaseController { resultMap.put("err_no",0); resultMap.put("err_tips","success"); - }else if("settle".equals(type)){ - + }else if("settle".equals(type)){//分账回调 + String order_id = (String) pMap.get("order_id"); + String settle_id = (String) pMap.get("settle_id"); + String out_settle_no = (String) pMap.get("out_settle_no"); + String status = (String) pMap.get("status"); + WxProfitSharingOrder wxProfitSharingOrder = new WxProfitSharingOrder(); + wxProfitSharingOrder.setTenantId(appinfo.getTenantId()); + wxProfitSharingOrder.setOutSettleNo(Long.parseLong(out_settle_no)); + WxProfitSharingOrder one = wxProfitSharingOrderService.findOne(wxProfitSharingOrder); + if(one != null){ + wxProfitSharingOrderService.querySharingOrder(wxProfitSharingOrder); + resultMap.put("err_no",0); + resultMap.put("err_tips","success"); + } } - return resultMap; } catch (Exception e){ logger.error(e.getMessage()); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java index 1e5ad773a..48fffd7ae 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java @@ -193,47 +193,46 @@ public class CouponOrderExpiringSchedule { } if (co.getAutoRefund().equals(EnumCouponAutoRefund.UNSUPPORTED.getCode())){ - // 不设退款,只能走微信分账-分账完结,把钱给分给商场 - try { - WxPayOrder wxPayOrder = new WxPayOrder(); - wxPayOrder.updateTenantInfo(co); -// Long orderId = co.getOrderId(); -// if (!EnumComposeOrder.isSingle(co.getComposeOrderType())) { -// orderId = co.getComposeOrderId(); + //todo 过期不退款 不设解冻(30天自动解冻)--不会抽取任何费用, 防止解冻后退款有问题 +// try { +// WxPayOrder wxPayOrder = new WxPayOrder(); +// wxPayOrder.updateTenantInfo(co); +//// Long orderId = co.getOrderId(); +//// if (!EnumComposeOrder.isSingle(co.getComposeOrderType())) { +//// orderId = co.getComposeOrderId(); +//// } +// wxPayOrder.setOrderId(co.getComposeOrderId()); +// wxPayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); +// wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrder)); +// +// if (wxPayOrder != null) { +// WxSharingOrderDto wxSharingOrderDto = new WxSharingOrderDto(); +// wxSharingOrderDto.setCUserId(wxPayOrder.getCUserId()); +// wxSharingOrderDto.setMerchantId(0L); +// wxSharingOrderDto.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE_FINISH.getCode()); +// wxSharingOrderDto.setPayAmount(wxPayOrder.getPayAmount()); +// wxSharingOrderDto.setOrderId(wxPayOrder.getId()); +// wxSharingOrderDto.setSingleOrderId(co.getOrderId()); +// wxSharingOrderDto.setSingleOrderAmount(co.getCouponPrice()); +// wxSharingOrderDto.setPayTimeStart(wxPayOrder.getPayTimeStart()); +// wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); +// wxSharingOrderDto.updateTenantInfo(wxPayOrder); +// wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); +// WxComposeChildOrderShare share = wxPayOrder.getChildOrderShare(co.getOrderId()); +// if (share.getRateAmount() != null) { +// // 实际分账金额为 分账金额 + 通道费差 +// wxSharingOrderDto.setMerchantShareAmount(share.getShareAmount()+share.getRateAmount()); +// } else { +// // 未设置通道费差 +// wxSharingOrderDto.setMerchantShareAmount(share.getShareAmount()); +// } +// wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,wxPayOrder); // } - wxPayOrder.setOrderId(co.getComposeOrderId()); - wxPayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); - wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrder)); - - //todo EnumPayShare.YES.getCode().equals(wxPayOrder.getShare()) 临时判断只有分账的才去分账 - if (wxPayOrder != null && EnumPayShare.YES.getCode().equals(wxPayOrder.getShare())) { - WxSharingOrderDto wxSharingOrderDto = new WxSharingOrderDto(); - wxSharingOrderDto.setCUserId(wxPayOrder.getCUserId()); - wxSharingOrderDto.setMerchantId(0L); - wxSharingOrderDto.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE_FINISH.getCode()); - wxSharingOrderDto.setPayAmount(wxPayOrder.getPayAmount()); - wxSharingOrderDto.setOrderId(wxPayOrder.getId()); - wxSharingOrderDto.setSingleOrderId(co.getOrderId()); - wxSharingOrderDto.setSingleOrderAmount(co.getCouponPrice()); - wxSharingOrderDto.setPayTimeStart(wxPayOrder.getPayTimeStart()); - wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); - wxSharingOrderDto.updateTenantInfo(wxPayOrder); - wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); - WxComposeChildOrderShare share = wxPayOrder.getChildOrderShare(co.getOrderId()); - if (share.getRateAmount() != null) { - // 实际分账金额为 分账金额 + 通道费差 - wxSharingOrderDto.setMerchantShareAmount(share.getShareAmount()+share.getRateAmount()); - } else { - // 未设置通道费差 - wxSharingOrderDto.setMerchantShareAmount(share.getShareAmount()); - } - wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,wxPayOrder); - } - - } catch (MallinkException e) { - logger.error("券过期不退款: " + co.getId() + " ERROR:" + e.getMessage(),e); - throw new MallinkException(e.getErrorCode(), e.getMessage()); - } +// +// } catch (MallinkException e) { +// logger.error("券过期不退款: " + co.getId() + " ERROR:" + e.getMessage(),e); +// throw new MallinkException(e.getErrorCode(), e.getMessage()); +// } if(bStockBack) { // 库存退回 diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java index 4be867ee9..095de9480 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java @@ -66,12 +66,13 @@ public class SharingOrderRedoSchedule { // 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 wxPayOrder = wxPayOrderMapper.selectById(sharingOrder.getOrderId(),sharingOrder.getTenantId()); + 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 74ce3be3e..39a26eec9 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); /** * 分账完结重试 @@ -51,7 +51,9 @@ public interface WxProfitSharingOrderService { Map queryOrderSummary(TenantEntity tenantEntity); ResultData findOrderDetails(Long id,String tenantId); - + + WxProfitSharingOrder findOne(WxProfitSharingOrder wxProfitSharingOrder); + // void updatetttttttttttttt(String tenantId); // ResultData handerSharingOrder(WxProfitSharingOrder sharingOrder); 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 1bfb9536f..e39b11490 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java @@ -139,14 +139,14 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ } @Override - @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) - public ResultData redoSharingOrder(WxProfitSharingOrder sharingOrder) { +// @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public ResultData redoSharingOrder(WxProfitSharingOrder sharingOrder,WxPayOrder payOrder) { if(!EnumProfitSharingOrderStatus.shareStatus().contains(sharingOrder.getSharingStatus())){ return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"分账状态不允许"); } - PayShareAdapterService payShareAdapterService = payServiceFactory.getPayShareAdapterService(sharingOrder.getPayVendor(),sharingOrder.getPayVersion()); + PayShareAdapterService payShareAdapterService = payServiceFactory.getPayShareAdapterService(payOrder.getPayVendor(),payOrder.getPayVersion()); Date currentDate = new Date(); PayShareResult shareResult = null; @@ -157,7 +157,13 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"未获取到达人佣金"); } - WxComposeChildOrderShare wxComposeChildOrderShare = JSONObject.parseObject(sharingOrder.getPointDeduction(), WxComposeChildOrderShare.class); + WxComposeChildOrderShare wxComposeChildOrderShare = null; + if(sharingOrder.getSingleOrderId() != null){ + wxComposeChildOrderShare = payOrder.getChildOrderShare(sharingOrder.getSingleOrderId()); + }else{ + wxComposeChildOrderShare = payOrder.getSingleChildOrderShare(); + } + wxComposeChildOrderShare.setCpsCommission(cpsCommission); //添加分账账号: 系统抽点,销售提成,商场扣点,平台(微信,抖音)抽佣 int systemAmount = wxComposeChildOrderShare.getSystemAmount();//系统抽点 @@ -170,6 +176,9 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ JSONArray receivers = new JSONArray();//分账参数json //todo +// 1.总分模式下 不分账(只分给各个抽成方)如果各个抽成方为0 则直接解冻 +// 2.总分模式下 分账 (分账给商家及各个抽成方) +// 3.直连模式下 不分账和分账一样(只分账给各个抽成方)如果各种抽成金额为0 则直接解冻 if(systemAmount > 0){ //todo 查询系统抽点到账帐号 jsonArray.add() } @@ -180,8 +189,9 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ //todo 查询商场抽点到账帐号 jsonArray.add() //需要判断当前订单收款帐号非商场抽点到账帐号 } - WxProfitSharingReceiver receiver = payShareAdapterService.getReceiver(sharingOrder,sharingOrder.getMerchantId(),null,sharingOrder.getMchType()); - if(EnumPayMchType.TOTAL.getCode().equals(sharingOrder.getMchType())){ + + WxProfitSharingReceiver receiver = payShareAdapterService.getReceiver(sharingOrder,sharingOrder.getMerchantId(),payOrder.getTtPayWay(),sharingOrder.getMchType()); + if(EnumPayMchType.TOTAL.getCode().equals(payOrder.getMchType()) && EnumPayShare.YES.getCode().equals(payOrder.getShare())){ JSONObject jo = new JSONObject(); jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage()); jo.put("account",receiver.getReceiverAccount()); @@ -191,7 +201,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ receivers.add(jo); } - EnumPayWay enumPayWay = EnumPayWay.getEnum(sharingOrder.getPayVendor()); + EnumPayWay enumPayWay = EnumPayWay.getEnum(payOrder.getPayVendor()); EnumAppPlat enumPlat = enumPayWay.getPlat(); WxAppinfo cAppInfo = wxAppinfoService.getCAppInfo(sharingOrder, enumPlat); @@ -211,29 +221,29 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ updSharingOrder.updateTenantInfo(sharingOrder); updSharingOrder.setId(sharingOrder.getId()); updSharingOrder.setOutSettleNo(sharingOrder.getOutSettleNo()); - if (!shareResult.isSuccess()) { + + updSharingOrder.setUpdateTime(currentDate); + + if(shareResult.isSuccess()){ + updSharingOrder.setSharingOrderNo(shareResult.getShareOrderNo()); + updSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_ACCEPTED.getCode()); + updSharingOrder.setErrorMsg(""); + }else{ updSharingOrder.setSharingStatus(shareResult.getCode()); updSharingOrder.setErrorMsg(shareResult.getMsg()); - updSharingOrder.setUpdateTime(currentDate); - wxProfitSharingOrderMapper.updateById(updSharingOrder); - return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),updSharingOrder.getErrorMsg()); } updSharingOrder.setPointDeduction(JSON.toJSONString(wxComposeChildOrderShare)); updSharingOrder.setReceivers(JSON.toJSONString(receivers)); - updSharingOrder.setSharingOrderNo(shareResult.getShareOrderNo()); - updSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_ACCEPTED.getCode()); - updSharingOrder.setErrorMsg(""); - updSharingOrder.setUpdateTime(currentDate); wxProfitSharingOrderMapper.updateById(updSharingOrder); - if(EnumPayMchType.DIRECT.getCode().equals(sharingOrder.getMchType())){ + if(EnumPayMchType.DIRECT.getCode().equals(payOrder.getMchType()) || EnumPayShare.NO.getCode().equals(payOrder.getShare())){ //如果是直连 把分给商户的钱记录下来 JSONObject jo = new JSONObject(); jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage()); jo.put("account",receiver.getReceiverAccount()); jo.put("amount", receiver.getSharingAmount()); jo.put("merchantId",receiver.getMerchantId()); - jo.put("description",receiver.getId().toString()); //为重试做准备 + jo.put("description",receiver.getId().toString()); receivers.add(jo); } try{ @@ -256,7 +266,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ logger.info("记账失败"+sharingOrder.getId()); } - return new ResultData(shareResult.getData()); + return new ResultData(shareResult); } @@ -314,7 +324,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ } //实际调用分账 - ResultData resultData = redoSharingOrder(record); + ResultData resultData = redoSharingOrder(record,payOrder); return resultData; } @@ -464,6 +474,11 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ return new ResultData(result); } + @Override + public WxProfitSharingOrder findOne(WxProfitSharingOrder wxProfitSharingOrder) { + return wxProfitSharingOrderMapper.selectOne(new QueryWrapper<>(wxProfitSharingOrder)); + } + public void queryMerchantCount(TenantEntity tenantEntity, Map result) { String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); //全部商户个数