| @@ -70,7 +70,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| WxCUserService wxCUserService; | |||
| @Autowired | |||
| WxPayAccountMapper wxPayAccountMapper; | |||
| WxPayAccountService wxPayAccountService; | |||
| @Autowired | |||
| WxOrderMapper wxOrderMapper; | |||
| @@ -269,12 +269,12 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| } | |||
| List<WxOrder> orderList = orderAdapterService.getChildOrders(composeOrder, appInfo.getTenantId()); | |||
| WxCoupon lastCoupon = null; | |||
| List<String> productNames = new ArrayList<>(); | |||
| for (WxOrder o : orderList) { | |||
| lastCoupon = checkSinglePayOrder(o, user, payWay); | |||
| productNames.add(o.getProductName()); | |||
| checkSinglePayOrder(o, user, payWay); | |||
| } | |||
| String productName = orderAdapterService.getPayProductName(lastCoupon); | |||
| PayAdapterResult payResult = createPayOrder(appInfo, user, record,composeOrder,orderList,productName, payWay, params,isCreatePay); | |||
| PayAdapterResult payResult = createPayOrder(appInfo, user, record,composeOrder,orderList,JSON.toJSONString(productNames), payWay, params,isCreatePay); | |||
| if (payResult.isSuccess()) { | |||
| // wxOrderService.sendInsideOrderPushMsg(composeOrder,composeOrder.getMainOrderId()); | |||
| return new ResultData(Result.SUCCESS,"创建支付单成功",payResult.getData()); | |||
| @@ -284,8 +284,11 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| } | |||
| private WxCoupon checkSinglePayOrder(WxOrder order,WxCUserBasicInfo user,EnumPayWay payWay) { | |||
| if (!order.getOrderGroupId().equals(0L)) { | |||
| private void checkSinglePayOrder(WxOrder order,WxCUserBasicInfo user,EnumPayWay payWay) { | |||
| if (order.getPaymentType() != EnumPayType.PAY_PAYMENT.getCode()) { | |||
| throw new MallinkException(ErrorCode.PAY_ORDER_IS_NOT_PAYMENT); | |||
| } | |||
| if (order.getOrderGroupId() !=null && !order.getOrderGroupId().equals(0L)) { | |||
| if (order.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode())) { | |||
| logger.error("支付时拼团已满>>" + order.getOrderGroupId()); | |||
| throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED); | |||
| @@ -311,17 +314,12 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| if (orderq.getOrderStatus()==EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()) { | |||
| throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_ATTEND.getCode(),"不能重复参团订单[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); | |||
| } | |||
| } | |||
| WxCoupon wxCoupon = wxCouponMapper.selectById(order.getProductId(),order.getTenantId()); | |||
| if (wxCoupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode()) && | |||
| wxCoupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) { | |||
| logger.error("券已经下架了>>>" + order.getProductId()); | |||
| throw new MallinkException(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF); | |||
| } | |||
| if (!wxCoupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode()) && order.getPressEndDate() == null) { | |||
| // 非砍价券且非拼团券 | |||
| }else if(order.getPressEndDate() != null){ | |||
| if (order.getOrderStatus() == EnumOrderStatus.ORDER_STATUS_PRESS_OVERTIME.getCode()) { | |||
| logger.error("砍价已过期: " + order.toString() + " , payWay: " + payWay.toString()); | |||
| throw new MallinkException(ErrorCode.ORDER_PRESS_IS_OVERTIME); | |||
| } | |||
| }else{ | |||
| if (order.getOrderStatus() == EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()) { | |||
| logger.error("订单已支付: " + order.toString() + " , payWay: " + payWay.toString()); | |||
| throw new MallinkException(ErrorCode.ORDER_HAD_PAY); | |||
| @@ -334,20 +332,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| throw new MallinkException(ErrorCode.ORDER_IS_NOT_PAY); | |||
| } | |||
| } | |||
| } else if (order.getPressEndDate() != null) { | |||
| // 砍价券,只有在过期时无法支付 | |||
| // 砍价中,原价购买 | |||
| // 砍价完成,低价购买 | |||
| if (order.getOrderStatus() == EnumOrderStatus.ORDER_STATUS_PRESS_OVERTIME.getCode()) { | |||
| logger.error("砍价已过期: " + order.toString() + " , payWay: " + payWay.toString()); | |||
| throw new MallinkException(ErrorCode.ORDER_PRESS_IS_OVERTIME); | |||
| } | |||
| } | |||
| if (order.getPaymentType() != EnumPayType.PAY_PAYMENT.getCode()) { | |||
| throw new MallinkException(ErrorCode.PAY_ORDER_IS_NOT_PAYMENT); | |||
| } | |||
| return wxCoupon; | |||
| } | |||
| @Override | |||
| public PayAdapterResult createPayOrder(WxAppinfo appInfo, WxCUserBasicInfo user,WxPayOrder record,WxComposeOrder composeOrder,List<WxOrder> childOrders, | |||
| String productName,EnumPayWay payWay,PayExtraParam params,boolean isCreatePay) { | |||
| @@ -356,13 +343,13 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| EnumPayShare isShare = EnumPayShare.NO; | |||
| try { | |||
| WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); | |||
| PayShareAdapterService payShareServie = payServiceFactory.getPayShareAdapterService(payWay.getCode(),payAccount.getPayVersion()); | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); | |||
| EnumPayMchType payMchTypeEnum = EnumPayMchType.getEnum(payAccount.getMchType()); | |||
| if(payMchTypeEnum != null){ | |||
| payMchType = payMchTypeEnum; | |||
| } | |||
| if(EnumAppPlat.TOUTIAO.equals(payWay.getPlat()) && EnumPayMchType.DIRECT.equals(payMchTypeEnum)){ | |||
| if(EnumPayMchType.DIRECT.equals(payMchTypeEnum)){ | |||
| isShare = EnumPayShare.YES; | |||
| }else{ | |||
| EnumPayShare paySHareEnum = EnumPayShare.getEnum(payAccount.getShare()); | |||
| @@ -429,11 +416,11 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| //设置子订单分账金额 | |||
| Map<String,WxComposeChildOrderShare> childShares = new HashMap<String,WxComposeChildOrderShare>(); | |||
| for (WxOrder o : childOrders) { | |||
| Long merchant_id = null; | |||
| Long merchant_id = 0L; | |||
| String merchant_uid = ""; | |||
| if(EnumPayMchType.DIRECT.equals(payMchType)){//直连模式记录收款商户 | |||
| //TODO 加缓存 | |||
| merchant_id = wxCouponChannelService.getCouponOneMerchantId(o.getCouponChannelId(),o.getTenantId()); | |||
| merchant_id = o.getMakeMerchantId(); | |||
| PayShareAdapterService payShareServie = payServiceFactory.getPayShareAdapterService(payWay.getCode(),payAccount.getPayVersion()); | |||
| WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, merchant_id, null, payMchTypeEnum.getCode()); | |||
| if(receiver == null){ | |||
| throw new MallinkException(ErrorCode.PAY_ORDER_MERCHANT_UID_ERROR); | |||
| @@ -488,7 +475,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| public ResultData createMicroPayOrder(WxMerchantBUser user, WxPayOrder record, EnumPayWay payWay,PayExtraParam params) { | |||
| final IdWorker idworker = IdWorker.get(); | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfo(user,payWay.getPlat()); | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfoFromRedis(user.getTenantId(),payWay.getPlat()); | |||
| if (null == params) { | |||
| params = new PayExtraParam(); | |||
| } | |||
| @@ -499,7 +486,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| // 1. check 订单 | |||
| OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(EnumComposeOrder.SINGLE.getCode()); | |||
| WxComposeOrder composeOrder = orderAdapterService.getComposeOrder(record.getOrderId(), appInfo.getTenantId()); | |||
| if (composeOrder == null) { | |||
| WxOrder singleOrder = composeOrder.getSingleOrder(); | |||
| if (composeOrder == null) { | |||
| logger.error("pay order, order not allow, repaymentReq: " + record.toString() + ", payWay: " + payWay.toString()); | |||
| throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); | |||
| } | |||
| @@ -515,7 +503,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| if (order.getPaymentType() != EnumPayType.PAY_PAYMENT.getCode()) { | |||
| return new ResultData(ErrorCode.PAY_ORDER_IS_NOT_PAYMENT); | |||
| } | |||
| WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); | |||
| PayShareAdapterService payShareServie = payServiceFactory.getPayShareAdapterService(payWay.getCode(),payAccount.getPayVersion()); | |||
| EnumPayShare paySHareEnum = EnumPayShare.getEnum(payAccount.getShare()); | |||
| if (paySHareEnum != null) { | |||
| @@ -551,10 +539,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| record.setComposeOrder(EnumComposeOrder.SINGLE.getCode()); | |||
| Map<String,WxComposeChildOrderShare> childShares = new HashMap<String,WxComposeChildOrderShare>(); | |||
| Long merchant_id = null; | |||
| Long merchant_id = 0L; | |||
| String merchant_uid = ""; | |||
| if(EnumPayMchType.DIRECT.getCode().equals(record.getMchType())){//直连模式记录收款商户 | |||
| //todo 缓存 | |||
| merchant_id = user.getMerchantId(); | |||
| WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, merchant_id, null, record.getMchType()); | |||
| if(receiver == null){ | |||
| @@ -640,8 +627,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), "payOrder not found"); | |||
| } | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record,payWay.getPlat()); | |||
| WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfoFromRedis(record.getTenantId(),payWay.getPlat()); | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); | |||
| PayAdapterService payService = payServiceFactory.getPayAdapterService(payWay.getCode(),payAccount.getPayVersion()); | |||
| PayQueryAdapterResult apiResult = payService.queryPayStatus(record, appInfo, payAccount); | |||
| int status = payServiceFactory.getPayAdapterService(payWay.getCode(),payAccount.getPayVersion()).queryPayStatus(apiResult, record.getPayOrderNo()); | |||
| @@ -711,7 +698,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| */ | |||
| @Override | |||
| public ResultData payOrderClose(WxAppinfo appInfo, WxPayOrder record) { | |||
| WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); | |||
| try { | |||
| PayAdapterResult result = payServiceFactory.getPayAdapterService(record.getPayVendor(),record.getPayVersion()).payOrderClose(appInfo, record, payAccount); | |||
| if (result.isSuccess()) { | |||
| @@ -747,8 +734,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| @Override | |||
| public ResultData payOrderReverse(WxPayOrder record) { | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record,EnumPayWay.getEnum(record.getPayVendor()).getPlat()); | |||
| WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfoFromRedis(record.getTenantId(),EnumPayWay.getEnum(record.getPayVendor()).getPlat()); | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); | |||
| try { | |||
| PayAdapterResult result = payServiceFactory.getPayAdapterService(record.getPayVendor(),record.getPayVersion()).payOrderReverse(appInfo, record, payAccount); | |||
| if (result.isSuccess()) { | |||
| @@ -1020,8 +1007,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| @Override | |||
| public PayQueryAdapterResult ttorderQuery(TenantEntity tenantInfo, Long id) { | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfo(tenantInfo,EnumAppPlat.TOUTIAO); | |||
| WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfoFromRedis(tenantInfo.getTenantId(),EnumAppPlat.TOUTIAO); | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); | |||
| WxPayOrder payOrder = new WxPayOrder(); | |||
| payOrder.setPayOrderNo(id.toString()); | |||
| try { | |||
| @@ -1311,11 +1298,11 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| // 有价券 | |||
| if (EnumPayStatus.PAY_STATUS_FAIL.getCode() == status) { | |||
| // 1. get appinfo | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfo(record,EnumPayWay.getEnum(record.getPayVendor()).getPlat()); | |||
| WxAppinfo appInfo = wxAppinfoService.getCAppInfoFromRedis(record.getTenantId(),EnumPayWay.getEnum(record.getPayVendor()).getPlat()); | |||
| // 前端支付取消, | |||
| // 回调未返回,主动检查支付订单状态 | |||
| try { | |||
| WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); | |||
| int payStatus = payServiceFactory.getPayAdapterService(record.getPayVendor(),payAccount.getPayVersion()).queryPayStatusCode(record, appInfo, payAccount); | |||
| if (payStatus!=EnumPayStatus.PAY_STATUS_SUCCESS.getCode().intValue() && payStatus!=EnumPayStatus.PAY_STATUS_WAIT.getCode().intValue()) { | |||
| // 支付订单未成功,返回异常 | |||
| @@ -37,15 +37,15 @@ import com.iformall.service.WxPayAccountService; | |||
| import com.iformall.service.WxProfitSharingReceiverService; | |||
| import com.iformall.service.pay.PayServiceFactory; | |||
| import com.iformall.service.pay.service.share.entity.ShareAccountResult; | |||
| import com.iformall.utils.BeanUtils; | |||
| import com.iformall.utils.DateUtils; | |||
| import com.iformall.utils.Utility; | |||
| import com.iformall.utils.*; | |||
| import net.sf.saxon.trans.Err; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.beans.factory.annotation.Qualifier; | |||
| import org.springframework.context.annotation.Lazy; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.Date; | |||
| @@ -85,6 +85,10 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv | |||
| @Autowired | |||
| PayServiceFactory payServiceFactory; | |||
| @Autowired | |||
| @Qualifier("objectCommonRedisTemplate") | |||
| RedisTemplate<String, Object> sharingReceicerRedisTemplate; | |||
| @Override | |||
| public PageInfo<WxProfitSharingReceiver> listAsPage(WxProfitSharingReceiver record, Integer pageIndex, Integer pageSize) { | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxProfitSharingReceiverMapper.findList(record)); | |||
| @@ -108,6 +112,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv | |||
| } else { | |||
| record.setUpdateTime(date); | |||
| wxProfitSharingReceiverMapper.updateById(record); | |||
| this.deleteRedis(record.getId()); | |||
| } | |||
| } | |||
| @@ -120,13 +125,25 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv | |||
| @Override | |||
| public WxProfitSharingReceiver findReceiver(TenantEntity tenantEntity,Long merchantId, EnumAppPlat plat,EnumProfitSharingType sharingType) { | |||
| WxProfitSharingReceiver receiver = new WxProfitSharingReceiver(); | |||
| receiver.updateTenantInfo(tenantEntity); | |||
| receiver.setMerchantId(merchantId); | |||
| receiver.setPlat(plat.getCode()); | |||
| receiver.setSharingType(sharingType.getCode()); | |||
| receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); | |||
| return wxProfitSharingReceiverMapper.findOne(receiver); | |||
| WxProfitSharingReceiver record = null; | |||
| String key = Constant.sharingReceicerPrev + tenantEntity.getTenantId() | |||
| + ":" + merchantId | |||
| + ":" + plat.getCode() + "a" + sharingType.getCode(); | |||
| record = RedisCacheUtils.getCacheObject(sharingReceicerRedisTemplate, key, WxProfitSharingReceiver.class); | |||
| if(record == null){ | |||
| WxProfitSharingReceiver receiver = new WxProfitSharingReceiver(); | |||
| receiver.updateTenantInfo(tenantEntity); | |||
| receiver.setMerchantId(merchantId); | |||
| receiver.setPlat(plat.getCode()); | |||
| receiver.setSharingType(sharingType.getCode()); | |||
| receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); | |||
| record = wxProfitSharingReceiverMapper.findOne(receiver); | |||
| if(record != null){ | |||
| RedisCacheUtils.cache(sharingReceicerRedisTemplate, key, record, 3600*24*7); | |||
| } | |||
| } | |||
| return record; | |||
| } | |||
| @Override | |||
| @@ -405,7 +422,7 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv | |||
| receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_INVALID.getCode()); | |||
| receiver.setUpdateTime(new Date()); | |||
| wxProfitSharingReceiverMapper.updateById(receiver); | |||
| this.saveOrUpdate(receiver); | |||
| //发送短信 | |||
| if (send.equals(EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode())) { | |||
| @@ -435,9 +452,19 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv | |||
| } else { | |||
| oldReceiver.setParameter(receiver.getParameter()); | |||
| oldReceiver.setUpdateTime(new Date()); | |||
| wxProfitSharingReceiverMapper.updateById(oldReceiver); | |||
| this.saveOrUpdate(oldReceiver); | |||
| } | |||
| return new ResultData(); | |||
| } | |||
| private void deleteRedis(Long id){ | |||
| WxProfitSharingReceiver receiver = wxProfitSharingReceiverMapper.selectById(id); | |||
| if(receiver != null){ | |||
| String key = Constant.sharingReceicerPrev + receiver.getTenantId() | |||
| + ":" + receiver.getMerchantId() | |||
| + ":" + receiver.getPlat() + "a" + receiver.getReceiverType(); | |||
| RedisCacheUtils.removeCache(sharingReceicerRedisTemplate, key); | |||
| } | |||
| } | |||
| } | |||
| @@ -94,14 +94,6 @@ public abstract class BaseBatchOrderAdapterService implements OrderAdapterServic | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| protected WxComposeOrder createDBMainOrder(TenantEntity tenantEntity,WxCUserBasicInfo user,int payment,String allExtParam,EnumPayWay payWay,EnumPayVersion payVersion, | |||
| EnumComposeOrder composeOrderType) { | |||
| //判断是否poi订单 | |||
| // Integer isTtPoiOrder = null; | |||
| // try{ | |||
| // if(EnumPayWay.PAY_WAY_TT.equals(payWay) && isTtPoiOrder(tenantEntity,couponChannelMap)){ | |||
| // isTtPoiOrder = EnumYesOrNo.YES.getCode(); | |||
| // } | |||
| // }catch(Exception e){ | |||
| // } | |||
| WxBatchOrder order =new WxBatchOrder(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| @@ -112,7 +104,10 @@ public abstract class BaseBatchOrderAdapterService implements OrderAdapterServic | |||
| order.setPayVendor(payWay.getCode()); | |||
| order.setPayVersion(payVersion.getCode()); | |||
| order.setOrderType(composeOrderType.getCode()); | |||
| // order.setIsTtPoiOrder(isTtPoiOrder); | |||
| if(EnumPayWay.PAY_WAY_TT.equals(payWay)){ | |||
| order.setIsTtPoiOrder(EnumYesOrNo.YES.getCode()); | |||
| } | |||
| order.setCreateDate(new Date()); | |||
| order.setExtParam(allExtParam); | |||
| wxBatchOrderMapper.insert(order); | |||
| @@ -122,19 +117,6 @@ public abstract class BaseBatchOrderAdapterService implements OrderAdapterServic | |||
| return composeOrder; | |||
| } | |||
| //判断是否poi订单 | |||
| private boolean isTtPoiOrder(TenantEntity tenantEntity,Map<Long,WxCouponChannel> couponChannelMap){ | |||
| boolean isTtPoiOrder = false; | |||
| if(null != couponChannelMap){ | |||
| List<Long> couponChannelIds = new ArrayList<>(couponChannelMap.keySet()); | |||
| Integer poiCount = ttCouponChannelPoiMapper.getPoiPutOnCount(tenantEntity.getTenantId(),couponChannelIds); | |||
| if(couponChannelIds.size() == poiCount.intValue()){ | |||
| isTtPoiOrder = true; | |||
| } | |||
| } | |||
| return isTtPoiOrder; | |||
| } | |||
| protected WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId,EnumComposeOrder composeOrderType) { | |||
| WxBatchOrder order = wxBatchOrderMapper.selectById(mainOrderId, tenantId); | |||
| WxComposeOrder corder = new WxComposeOrder(order.getId(),composeOrderType.getCode(),order.getPayment()); | |||
| @@ -17,6 +17,7 @@ import com.iformall.douyin.payv2.result.TtPayUnifiedOrderV2Result; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.mapper.*; | |||
| import com.iformall.service.WxCouponService; | |||
| import com.iformall.service.order.OrderAdapterService; | |||
| import com.iformall.service.order.OrderFactory; | |||
| import com.iformall.service.order.entity.WxComposeOrder; | |||
| @@ -62,6 +63,9 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen | |||
| @Autowired | |||
| private WxCouponMapper wxCouponMapper; | |||
| @Autowired | |||
| private WxCouponService wxCouponService; | |||
| @Autowired | |||
| private WxOrderMapper wxOrderMapper; | |||
| @@ -452,20 +456,15 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen | |||
| payment.put("totalAmount",composeOrder.getPayment()); | |||
| map.put("payment",payment); | |||
| List<Map<String,Object>> goodsList = new ArrayList<>(); | |||
| Map<Long, List<WxOrder>> collect = childOrders.stream().collect(groupingBy(WxOrder::getCouponChannelId)); | |||
| for (Long key: collect.keySet()) { | |||
| for (WxOrder o: childOrders) { | |||
| WxCoupon wxCoupon = wxCouponService.getById(o.getProductId(), record.getTenantId()); | |||
| Map<String,Object> good = new HashMap<>(); | |||
| Long couponId = wxCouponChannelMapper.findCouponIdById(key, record.getTenantId()); | |||
| WxCoupon wxCoupon = wxCouponMapper.selectById(couponId, record.getTenantId()); | |||
| TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectById(record.getTenantId(), couponId); | |||
| int quantity = collect.get(key).size(); | |||
| good.put("quantity",quantity); | |||
| good.put("price",wxCoupon.getSalePrice()*quantity); | |||
| good.put("quantity",o.getCouponNumber()); | |||
| good.put("price",o.getPayment()); | |||
| good.put("goodsName",wxCoupon.getTitle()); | |||
| good.put("goodsPhoto",wxCoupon.getCoverImg()); | |||
| good.put("goodsId",ttCouponChannelPoi.getSpuId()); | |||
| // good.put("goodsId",wxCoupon.getId().toString()); | |||
| good.put("goodsType",1); | |||
| good.put("goodsId",wxCoupon.getGoodsId()); | |||
| good.put("goodsType",composeOrder.getMainOrder().getIsTtPoiOrder()); | |||
| goodsList.add(good); | |||
| } | |||
| map.put("goodsList",goodsList); | |||
| @@ -21,6 +21,7 @@ import com.iformall.mapper.WxProfitSharingReceiverMapper; | |||
| import com.iformall.pay.WxPayment; | |||
| import com.iformall.pay.WxProfitSharing; | |||
| import com.iformall.pay.WxProfitSharingReceiverP; | |||
| import com.iformall.service.WxProfitSharingReceiverService; | |||
| import com.iformall.service.pay.service.share.entity.PayShareQueryResultReceivers; | |||
| import com.iformall.service.pay.service.share.entity.ShareAccountResult; | |||
| import com.iformall.service.pay.service.share.wx.v2.WxPayShareService; | |||
| @@ -186,7 +187,7 @@ public abstract class PayShareBaseAdapterService implements PayShareAdapterServi | |||
| return new ShareAccountResult(true, null, "success", returnMap); | |||
| } | |||
| protected ShareAccountResult _deleteShareAccount(WxAppinfo appInfo, WxPayAccount payAccount,WxProfitSharingReceiver receiver,WxProfitSharingReceiverMapper wxProfitSharingReceiverMapper) { | |||
| protected ShareAccountResult _deleteShareAccount(WxAppinfo appInfo, WxPayAccount payAccount, WxProfitSharingReceiver receiver, WxProfitSharingReceiverService wxProfitSharingReceiverService) { | |||
| //删除分账账户从微信服务器 | |||
| WxProfitSharingReceiverP wxProfitSharingReceiverP = new WxProfitSharingReceiverP(); | |||
| if (StringUtils.isNotBlank(appInfo.getParentAppId())) { | |||
| @@ -227,7 +228,7 @@ public abstract class PayShareBaseAdapterService implements PayShareAdapterServi | |||
| if (returnMap.get("err_code").contains("USER_NOT_EXIST")) { | |||
| receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_INVALID.getCode()); | |||
| receiver.setUpdateTime(new Date()); | |||
| wxProfitSharingReceiverMapper.updateById(receiver); | |||
| wxProfitSharingReceiverService.saveOrUpdate(receiver); | |||
| } | |||
| log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("err_code_des")+":"+JSON.toJSONString(returnMap)); | |||
| return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), returnMap.get("err_code_des"), null); | |||
| @@ -32,12 +32,12 @@ import com.iformall.service.pay.service.share.entity.PayShareQueryResult; | |||
| import com.iformall.service.pay.service.share.entity.PayShareResult; | |||
| import com.iformall.service.pay.service.share.entity.ShareAccountResult; | |||
| import com.iformall.service.pay.service.share.entity.ShareNotifyAdapterResult; | |||
| import com.iformall.utils.DateUtils; | |||
| import com.iformall.utils.MaUtil; | |||
| import com.iformall.utils.PayUtils; | |||
| import com.iformall.utils.*; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.beans.factory.annotation.Qualifier; | |||
| import org.springframework.context.annotation.Lazy; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.*; | |||
| @@ -68,9 +68,6 @@ public class TtPayShareService extends PayShareBaseAdapterService{ | |||
| @Autowired | |||
| WxProfitSharingOrderMapper wxProfitSharingOrderMapper; | |||
| @Autowired | |||
| WxProfitSharingReceiverMapper wxProfitSharingReceiverMapper; | |||
| @Autowired | |||
| TtGoodsCategoryMapper ttGoodsCategoryMapper; | |||
| @@ -281,8 +278,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ | |||
| if(!EnumOrderType.COUPON.getCode().equals(o.getType())){ | |||
| return 0; | |||
| } | |||
| Long couponId = wxCouponChannelMapper.findCouponIdById(o.getCouponChannelId(), o.getTenantId()); | |||
| Integer categoryId = wxCouponMapper.findCategoryIdById(couponId,o.getTenantId()); | |||
| Integer categoryId = wxCouponMapper.findCategoryIdById(o.getProductId(),o.getTenantId()); | |||
| if(categoryId != null){ | |||
| TtGoodsCategory ttGoodsCategory = ttGoodsCategoryMapper.selectById(categoryId); | |||
| if(ttGoodsCategory != null && ttGoodsCategory.getServiceFee() != null){ | |||
| @@ -304,38 +300,26 @@ public class TtPayShareService extends PayShareBaseAdapterService{ | |||
| if(merchantId == null || merchantId.equals(0L)){ | |||
| return null; | |||
| } | |||
| WxProfitSharingReceiver record = wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.TOUTIAO,EnumProfitSharingType.PROFIT_SHARING_TYPE_DOUYIN); | |||
| WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); | |||
| psReceiverQ.updateTenantInfo(tenantEntity); | |||
| psReceiverQ.setMerchantId(merchantId); | |||
| psReceiverQ.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_DOUYIN.getCode()); | |||
| psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); | |||
| psReceiverQ.setPlat(EnumAppPlat.TOUTIAO.getCode()); | |||
| String payMsg = ""; | |||
| if(ttPayWay != null){ | |||
| if(EnumTtPayChannel.WX_PAY.getCode().equals(ttPayWay)){ | |||
| payMsg = EnumTtPayChannel.WX_PAY.getMessage(); | |||
| psReceiverQ.setWxImportStatus(MerchantImportStatus.improt_success.getCode()); | |||
| }else if(EnumTtPayChannel.ALI_PAY.getCode().equals(ttPayWay)){ | |||
| payMsg = EnumTtPayChannel.ALI_PAY.getMessage(); | |||
| psReceiverQ.setAlipayImportStatus(MerchantImportStatus.improt_success.getCode()); | |||
| }else if(EnumTtPayChannel.HZ_PAY.getCode().equals(ttPayWay)){ | |||
| payMsg = EnumTtPayChannel.HZ_PAY.getMessage(); | |||
| psReceiverQ.setHzImportStatus(MerchantImportStatus.improt_success.getCode()); | |||
| }else{ | |||
| log.error("该订单支付方式异常{}"); | |||
| if(EnumTtPayChannel.WX_PAY.getCode().equals(ttPayWay) | |||
| && !MerchantImportStatus.improt_success.getCode().equals(record.getWxImportStatus())){ | |||
| log.error("支付方式【"+EnumTtPayChannel.WX_PAY.getMessage()+"】未开通"); | |||
| return null; | |||
| }else if(EnumTtPayChannel.ALI_PAY.getCode().equals(ttPayWay) | |||
| && !MerchantImportStatus.improt_success.getCode().equals(record.getAlipayImportStatus())){ | |||
| log.error("支付方式【"+EnumTtPayChannel.ALI_PAY.getMessage()+"】未开通"); | |||
| return null; | |||
| }else if(EnumTtPayChannel.HZ_PAY.getCode().equals(ttPayWay) | |||
| && !MerchantImportStatus.improt_success.getCode().equals(record.getHzImportStatus())){ | |||
| log.error("支付方式【"+EnumTtPayChannel.HZ_PAY.getMessage()+"】未开通"); | |||
| return null; | |||
| } | |||
| } | |||
| return record; | |||
| List<WxProfitSharingReceiver> list = wxProfitSharingReceiverMapper.findList(psReceiverQ); | |||
| if(list == null || list.isEmpty()){ | |||
| return null; | |||
| // throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未未进件."+payMsg); | |||
| } | |||
| if(list.size() > 1){ | |||
| throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_UNKNOWN.getCode(),"该商户分账帐号异常."); | |||
| } | |||
| return list.get(0); | |||
| } | |||
| } | |||
| @@ -12,9 +12,13 @@ import com.iformall.douyin.pay.enums.MerchantImportStatus; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.mapper.*; | |||
| import com.iformall.service.WxProfitSharingReceiverService; | |||
| import com.iformall.utils.*; | |||
| import net.sf.saxon.trans.Err; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.beans.factory.annotation.Qualifier; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.stereotype.Service; | |||
| import com.alibaba.fastjson.JSON; | |||
| @@ -38,9 +42,6 @@ import com.iformall.service.pay.service.share.entity.PayShareCalculateAmount; | |||
| import com.iformall.service.pay.service.share.entity.PayShareQueryResult; | |||
| import com.iformall.service.pay.service.share.entity.PayShareResult; | |||
| import com.iformall.service.pay.service.share.entity.ShareNotifyAdapterResult; | |||
| import com.iformall.utils.BeanUtils; | |||
| import com.iformall.utils.Utility; | |||
| import com.iformall.utils.XmlUtil; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| @@ -49,7 +50,7 @@ import lombok.extern.slf4j.Slf4j; | |||
| public class WxPayShareService extends PayShareBaseAdapterService{ | |||
| @Autowired | |||
| WxProfitSharingOrderMapper wxProfitSharingOrderMapper; | |||
| WxProfitSharingReceiverService wxProfitSharingReceiverService; | |||
| final JSONObject statusMap = JSON.parseObject( | |||
| "{\"ACCEPTED\":3," + | |||
| @@ -338,13 +339,10 @@ public class WxPayShareService extends PayShareBaseAdapterService{ | |||
| public ShareAccountResult createShareAccount(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingReceiver receiver) { | |||
| return super._createShareAccount(appInfo, payAccount, receiver); | |||
| } | |||
| @Autowired | |||
| WxProfitSharingReceiverMapper wxProfitSharingReceiverMapper; | |||
| @Override | |||
| public ShareAccountResult deleteShareAccount(WxAppinfo appInfo, WxPayAccount payAccount,WxProfitSharingReceiver receiver) { | |||
| return super._deleteShareAccount(appInfo, payAccount, receiver,wxProfitSharingReceiverMapper); | |||
| return super._deleteShareAccount(appInfo, payAccount, receiver,wxProfitSharingReceiverService); | |||
| } | |||
| @Override | |||
| @@ -357,31 +355,16 @@ public class WxPayShareService extends PayShareBaseAdapterService{ | |||
| return 0; | |||
| } | |||
| @Override | |||
| public WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { | |||
| if(merchantId == null || merchantId.equals(0L)){ | |||
| return null; | |||
| } | |||
| WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); | |||
| psReceiverQ.updateTenantInfo(tenantEntity); | |||
| psReceiverQ.setMerchantId(merchantId); | |||
| psReceiverQ.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT.getCode()); | |||
| psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); | |||
| psReceiverQ.setPlat(EnumAppPlat.WX.getCode()); | |||
| List<WxProfitSharingReceiver> psReceiverList = wxProfitSharingReceiverMapper.findList(psReceiverQ); | |||
| if (null == psReceiverList || psReceiverList.size() == 0) { | |||
| return null; | |||
| // throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未设置分账账号."); | |||
| }else { | |||
| for (WxProfitSharingReceiver receiver:psReceiverList) { | |||
| if (EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID.getCode().intValue() | |||
| == receiver.getReceiverType().intValue()) { | |||
| throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户收款账号存在个人微信号方式,微信已停止支持,请重新设置."); | |||
| } | |||
| } | |||
| WxProfitSharingReceiver record = wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT); | |||
| if(record != null && EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID.getCode().equals(record.getReceiverType())){ | |||
| throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户收款账号存在个人微信号方式,微信已停止支持,请重新设置."); | |||
| } | |||
| return psReceiverList.get(0); | |||
| return record; | |||
| } | |||
| private static String queryOrderShareAmount(String mchId,String transcationId,String apiKey) { | |||
| @@ -14,9 +14,13 @@ import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.mapper.*; | |||
| import com.iformall.utils.Constant; | |||
| import com.iformall.utils.RedisCacheUtils; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.beans.factory.annotation.Qualifier; | |||
| import org.springframework.context.annotation.Lazy; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.stereotype.Service; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| @@ -44,9 +48,6 @@ import lombok.extern.slf4j.Slf4j; | |||
| @Slf4j | |||
| @Service | |||
| public class WxPayShareV3Service extends PayShareBaseAdapterService{ | |||
| @Autowired | |||
| WxProfitSharingOrderMapper wxProfitSharingOrderMapper; | |||
| @Lazy | |||
| @Autowired | |||
| @@ -82,19 +83,19 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ | |||
| if(merchantId == null || merchantId.equals(0L)){ | |||
| return null; | |||
| } | |||
| WxProfitSharingReceiver receiver = null; | |||
| //直连,必须是特约商户号 | |||
| // if (EnumPayMchType.DIRECT.getCode() == mchType) { | |||
| receiver = wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); | |||
| //总分 | |||
| // }else if (EnumPayMchType.TOTAL.getCode() == mchType) { | |||
| // receiver = wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT); | |||
| // } | |||
| if (EnumPayMchType.DIRECT.getCode() == mchType) { | |||
| return wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); | |||
| // 总分 | |||
| }else if (EnumPayMchType.TOTAL.getCode() == mchType) { | |||
| return wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT); | |||
| } | |||
| // if (null == receiver) { | |||
| // throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未设置分账账号."); | |||
| // } | |||
| return receiver; | |||
| return null; | |||
| } | |||
| //无需分账,直接解冻 | |||
| @@ -300,9 +301,6 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ | |||
| return super._createShareAccount(appInfo, payAccount, receiver); | |||
| } | |||
| } | |||
| @Autowired | |||
| WxProfitSharingReceiverMapper wxProfitSharingReceiverMapper; | |||
| @Override | |||
| public ShareAccountResult deleteShareAccount(WxAppinfo appInfo, WxPayAccount payAccount, | |||
| @@ -312,7 +310,7 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ | |||
| return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), "微信支付3.0直连模式下不支持", null); | |||
| //总分 | |||
| }else { | |||
| return super._deleteShareAccount(appInfo, payAccount, receiver, wxProfitSharingReceiverMapper); | |||
| return super._deleteShareAccount(appInfo, payAccount, receiver, wxProfitSharingReceiverService); | |||
| } | |||
| } | |||
| @@ -98,6 +98,7 @@ public class Constant { | |||
| //获取mall信息 | |||
| public static final String appinfoPrev = "appinfo:"; | |||
| public static final String payaccountPrev = "payaccount:"; | |||
| public static final String sharingReceicerPrev = "sharingReceicer:"; | |||
| public static final String mallinfoPrev = "mallinfo:"; | |||
| public static final String subMallinfoPrev = "mallinfo:subMallinfo:"; | |||