| @@ -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()); | |||
| @@ -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) { | |||
| // 库存退回 | |||
| @@ -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() | |||
| @@ -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<String,Object> queryOrderSummary(TenantEntity tenantEntity); | |||
| ResultData findOrderDetails(Long id,String tenantId); | |||
| WxProfitSharingOrder findOne(WxProfitSharingOrder wxProfitSharingOrder); | |||
| // void updatetttttttttttttt(String tenantId); | |||
| // ResultData handerSharingOrder(WxProfitSharingOrder sharingOrder); | |||
| @@ -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<String, Object> result) { | |||
| String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); | |||
| //全部商户个数 | |||