| | |
| | | import com.ruoyi.common.security.utils.CodeFactoryUtil; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.order.domain.dto.*; |
| | | import com.ruoyi.order.domain.pojo.account.OrderPayment; |
| | | import com.ruoyi.order.domain.pojo.account.OrderRefund; |
| | | import com.ruoyi.order.domain.pojo.order.ConsumerGoods; |
| | | import com.ruoyi.order.domain.pojo.order.Order; |
| | | import com.ruoyi.order.domain.pojo.order.OrderGoods; |
| | | import com.ruoyi.order.domain.vo.*; |
| | | import com.ruoyi.order.mapper.order.OrderMapper; |
| | | import com.ruoyi.order.mapper.order.UserServiceRecordMapper; |
| | | import com.ruoyi.order.service.order.ConsumerGoodsService; |
| | | import com.ruoyi.order.service.order.OrderGoodsService; |
| | | import com.ruoyi.order.service.order.OrderService; |
| | |
| | | import com.ruoyi.system.api.domain.poji.sys.SysUser; |
| | | import com.ruoyi.system.api.domain.vo.*; |
| | | import com.ruoyi.system.api.service.*; |
| | | import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; |
| | | import org.redisson.api.RLock; |
| | | import org.redisson.api.RedissonClient; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | |
| | | private RemoteActivityService remoteActivityService; |
| | | |
| | | @Resource |
| | | private UserServiceRecordMapper userServiceRecordMapper; |
| | | |
| | | @Resource |
| | | private RedisService redisService; |
| | | |
| | | //@Resource |
| | | //@Qualifier("profitsSharingServiceImpl") |
| | | //private ProfitsSharingService profitsSharingService; |
| | | |
| | | @Autowired |
| | | private RedissonClient redissonClient; |
| | | |
| | | /** 商户号 */ |
| | | public static String merchantId = ""; |
| | | /** 商户API私钥路径 */ |
| | | public static String privateKeyPath = ""; |
| | | /** 商户证书序列号 */ |
| | | public static String merchantSerialNumber = ""; |
| | | /** 微信支付平台证书路径 */ |
| | | public static String wechatPayCertificatePath = ""; |
| | | /** 微信支付 APIv3 密钥 */ |
| | | public static String apiV3Key = ""; |
| | | /** 微信支付APPID */ |
| | | public static String appId=""; |
| | | /** 微信支付商户ID */ |
| | | public static String mchId=""; |
| | | /** 通知地址 */ |
| | | public static String notifyUrl=""; |
| | | |
| | | /** |
| | | * @description: buyGoods |
| | |
| | | merBaseDto.setShopId(appSureOrderDto.getShopId()); |
| | | // 获取用户优惠券列表 |
| | | List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData(); |
| | | // 初始化商品优惠券列表 |
| | | List<AppMemberCouponVo> appGoodsMemberCouponVoList; |
| | | |
| | | // 将优惠券列表转换为Map,以优惠券ID为键 |
| | | Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); |
| | | AppMemberCouponVo appMemberCouponVo; |
| | |
| | | } |
| | | } |
| | | } |
| | | if(appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()){ |
| | | appSureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList); |
| | | } |
| | | appSureOrderGoodsVo.setUseCoupon(useCoupon); |
| | | appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); |
| | | appSureOrderGoodsVo.setCouponDiscount(discountMoney); |
| | |
| | | entity.setUseFlag(0); |
| | | } |
| | | } |
| | | // 过滤商品优惠券列表 |
| | | List<AppMemberCouponVo> appGoodsMemberCouponVoList; |
| | | for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) { |
| | | sureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList); |
| | | appGoodsMemberCouponVoList = new ArrayList<>(); |
| | | for(AppMemberCouponVo entity : appMemberCouponVoList){ |
| | | if(StringUtils.isBlank(entity.getRelGoodsIds())||entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())){ |
| | | if(entity.getCouponType()!=1){ |
| | | appGoodsMemberCouponVoList.add(entity); |
| | | }else{ |
| | | if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){ |
| | | appGoodsMemberCouponVoList.add(entity); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); |
| | | } |
| | | } |
| | | /*if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) { |
| | | // 获取用户ID |
| | | Long userId = appPlaceOrderDto.getUserId(); |
| | |
| | | order.setReceivableMoney(orderPayMoney); |
| | | order.setReceivableDeposit(orderPayDeposit); |
| | | order.setChangeReceivableMoney(orderPayMoney); |
| | | order.setPayType(appPlaceOrderDto.getPayType()); |
| | | // 根据支付类型计算支付金额 |
| | | if (order.getPayType() == 1) { |
| | | if (appPlaceOrderDto.getPayType() == 1) { |
| | | order.setPayMoney(orderPayMoney); |
| | | order.setOnlinePayMoney(orderPayMoney); |
| | | appPlaceOrderVo.setPayMoney(orderPayMoney); |
| | | appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); |
| | | order.setPayType(1); |
| | | order.setCloseFlag(1); |
| | | } else if (order.getPayType() == 2) { |
| | | } else if (appPlaceOrderDto.getPayType() == 2) { |
| | | order.setPayMoney(orderPayDeposit); |
| | | order.setOnlinePayMoney(orderPayDeposit); |
| | | appPlaceOrderVo.setPayMoney(orderPayDeposit); |
| | | appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); |
| | | order.setPayType(2); |
| | | order.setCloseFlag(0); |
| | | } |
| | | order.setOrderRemark(appPlaceOrderDto.getOrderRemark()); |
| | |
| | | appPlaceOrderVo.setOrderId(orderId); |
| | | appPlaceOrderVo.setOrderNo(orderNo); |
| | | // 调用支付 |
| | | /* CombineTransactionsJsRequest request=new CombineTransactionsJsRequest(); |
| | | request.setCombineAppid(); |
| | | request.setCombineMchid(); |
| | | profitsSharingService.combineTransactions(request);*/ |
| | | |
| | | //构建预下单支付对象 |
| | | /*PrepayRequest request = new PrepayRequest(); |
| | | Amount amount = new Amount(); |
| | | amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString())); |
| | | request.setAmount(amount); |
| | | request.setAppid(this.appId); |
| | | request.setMchid(this.mchId); |
| | | request.setDescription(order.getGoodsInfo()); |
| | | request.setNotifyUrl(this.notifyUrl); |
| | | request.setOutTradeNo(order.getOrderId()); |
| | | Payer payer = new Payer(); |
| | | payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********"); |
| | | request.setPayer(payer);*/ |
| | | //返回前端唤醒支付结果信息 |
| | | /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request); |
| | | appPlaceOrderVo.setAppId(this.appId); |
| | | appPlaceOrderVo.setTimeStamp(res.getTimeStamp()); |
| | | appPlaceOrderVo.setNonceStr(res.getNonceStr()); |
| | | appPlaceOrderVo.setPackageStr(res.getPackageVal()); |
| | | appPlaceOrderVo.setTradeType(res.getSignType()); |
| | | appPlaceOrderVo.setPaySign(res.getPaySign());*/ |
| | | |
| | | |
| | | //减去优惠券 |
| | | if(memberCouponSJ!=null){ |
| | | remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); |
| | |
| | | delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime)); |
| | | delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); |
| | | remoteConfigService.addDelayTask(delayTask); |
| | | appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime)); |
| | | return appPlaceOrderVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param appPlaceActivityDto |
| | |
| | | * @date 2023/7/6 17:59 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) { |
| | | Long userId = appPlaceActivityDto.getUserId(); |
| | | // 创建订单对象 |
| | |
| | | order.setReceivableMoney(orderPayMoney); |
| | | order.setReceivableDeposit(orderPayDeposit); |
| | | order.setChangeReceivableMoney(orderPayMoney); |
| | | order.setPayType(appPlaceActivityDto.getPayType()); |
| | | // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志 |
| | | if (order.getPayType() == 1) { |
| | | if (appPlaceActivityDto.getPayType() == 1) { |
| | | order.setPayMoney(orderPayMoney); |
| | | order.setOnlinePayMoney(orderPayMoney); |
| | | appPlaceOrderVo.setPayMoney(orderPayMoney); |
| | | appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); |
| | | order.setPayType(1); |
| | | order.setCloseFlag(1); |
| | | } else if (order.getPayType() == 2) { |
| | | } else if (appPlaceActivityDto.getPayType() == 2) { |
| | | order.setPayMoney(orderPayDeposit); |
| | | order.setOnlinePayMoney(orderPayDeposit); |
| | | appPlaceOrderVo.setPayMoney(orderPayDeposit); |
| | | appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); |
| | | order.setPayType(2); |
| | | order.setCloseFlag(0); |
| | | } |
| | | // 设置订单备注,商品数量,创建时间 |
| | |
| | | agStockChangeDto.setUserId(order.getUserId()); |
| | | remoteActivityService.changeActivityStock(agStockChangeDto); |
| | | // 调用支付 |
| | | /*PrepayRequest request = new PrepayRequest(); |
| | | Amount amount = new Amount(); |
| | | amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString())); |
| | | request.setAmount(amount); |
| | | request.setAppid(this.appId); |
| | | request.setMchid(this.mchId); |
| | | request.setDescription(order.getGoodsInfo()); |
| | | request.setNotifyUrl(this.notifyUrl); |
| | | request.setOutTradeNo(order.getOrderId()); |
| | | Payer payer = new Payer(); |
| | | // TODO 获取openID |
| | | payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********"); |
| | | |
| | | request.setPayer(payer);*/ |
| | | |
| | | //设置订单允许分账 秒杀活动才允许分账 |
| | | /*if(order.getOrderFrom()==2){ |
| | | SettleInfo settleInfo=new SettleInfo(); |
| | | settleInfo.setProfitSharing(true); |
| | | request.setSettleInfo(settleInfo); |
| | | }*/ |
| | | |
| | | |
| | | //返回前端唤醒支付结果信息 |
| | | /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request); |
| | | |
| | | appPlaceOrderVo.setAppId(this.appId); |
| | | appPlaceOrderVo.setTimeStamp(res.getTimeStamp()); |
| | | appPlaceOrderVo.setNonceStr(res.getNonceStr()); |
| | | appPlaceOrderVo.setPackageStr(res.getPackageVal()); |
| | | appPlaceOrderVo.setTradeType(res.getSignType()); |
| | | appPlaceOrderVo.setPaySign(res.getPaySign()); |
| | | */ |
| | | |
| | | //生成自动取消订单延时任务 |
| | | Integer delayTime = 30; |
| | | if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ |
| | |
| | | delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime)); |
| | | delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); |
| | | remoteConfigService.addDelayTask(delayTask); |
| | | appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime)); |
| | | return appPlaceOrderVo; |
| | | } |
| | | |
| | |
| | | Shop shopTemp = remoteShopService.getShop(shopIdLong).getData(); |
| | | shopMap.put(shopIdLong, shopTemp); |
| | | }); |
| | | Integer delayTime = 30; |
| | | if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ |
| | | delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); |
| | | } |
| | | for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) { |
| | | shop = shopMap.get(appUserOrderPageVo.getShopId()); |
| | | appUserOrderPageVo.setShopName(shop.getShopName()); |
| | |
| | | appUserOrderPageVo.setSameShop(0); |
| | | } |
| | | appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId()); |
| | | appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(),delayTime)); |
| | | } |
| | | } |
| | | return appUserOrderPageVoList; |
| | |
| | | appUserOrderGetVo.setCouponDiscount(order.getCouponMoney()); |
| | | appUserOrderGetVo.setReceivableDeposit(order.getReceivableDeposit()); |
| | | appUserOrderGetVo.setReceivableMoney(order.getReceivableMoney()); |
| | | appUserOrderGetVo.setPayType(order.getPayType()); |
| | | appUserOrderGetVo.setPayMoney(order.getPayMoney()); |
| | | appUserOrderGetVo.setOrderRemark(order.getOrderRemark()); |
| | | appUserOrderGetVo.setShopId(order.getShopId()); |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto) { |
| | | String orderId = merVerifyOrderDto.getOrderId(); |
| | | BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney(); |
| | |
| | | Order order = this.getById(orderId); |
| | | if (order.getOrderStatus() != 2) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_USED); |
| | | } |
| | | ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyOrderDto.getUserId()).getData(); |
| | | if(!shopRelUserVo.getShopId().equals(order.getShopId())){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | order.setOrderStatus(3); |
| | | order.setUseTime(nowTime); |
| | |
| | | SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData(); |
| | | merVerifyOrderVo.setUserName(sysUser.getNickName()); |
| | | merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber()); |
| | | // |
| | | if(order.getOrderFrom()==2){ |
| | | |
| | | //profitsSharingService.applyProfitSharing(); |
| | | } |
| | | return merVerifyOrderVo; |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | * @date 2023/6/28 11:26 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) { |
| | | MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData(); |
| | | ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyCouponDto.getUserId()).getData(); |
| | | if(!shopRelUserVo.getShopId().equals(verifyCouponGetVo.getMemberCoupon().getShopId())){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | // 创建MerVerifyCouponVo对象 |
| | | MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo(); |
| | | // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象 |
| | |
| | | * @return MerVerifyAwardVo |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto){ |
| | | MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo(); |
| | | MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData(); |
| | | if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){ |
| | | throw new ServiceException(AppErrorConstant.COUPON_USED); |
| | | } |
| | | ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyPrizeDto.getUserId()).getData(); |
| | | if(!shopRelUserVo.getShopId().equals(memberGiftRecord.getShopId())){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); |
| | | merVerifyAwardVo.setUserName(member.getNickName()); |
| | |
| | | order.setOnlinePayMoney(new BigDecimal("0.00")); |
| | | order.setOfflinePayMoney(merNewOrderDto.getPayMoney()); |
| | | order.setOffPayTime(nowTime); |
| | | order.setPayType(1); |
| | | order.setCloseFlag(1); |
| | | this.save(order); |
| | | //创建服务 |
| | |
| | | * @return void |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public void autoCancelOrder(String orderId){ |
| | | //更新订单信息 |
| | | Order order = this.getById(orderId); |
| | |
| | | * @description 订单支付回调 |
| | | * @author jqs |
| | | * @date 2023/7/13 17:57 |
| | | * @param orderId |
| | | * @param transaction |
| | | * @return void |
| | | */ |
| | | @Override |
| | | public void payBack(String orderId) { |
| | | @Transactional |
| | | public void payBack(Transaction transaction) { |
| | | // 更新订单状态 |
| | | String orderId=transaction.getOutTradeNo(); |
| | | Order order = this.getById(orderId); |
| | | order.setOrderStatus(2); |
| | | order.setPayTime(new Date()); |
| | |
| | | Boolean haveGoods = false; |
| | | // 获取订单中的所有商品 |
| | | List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); |
| | | List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>(); |
| | | GoodsTotalChangeDto goodsTotalChangeDto; |
| | | // 遍历订单中的所有商品,根据商品类型累加收款金额,并标记商品存在状态 |
| | | for (OrderGoods orderGoods : orderGoodsList) { |
| | | switch (orderGoods.getGoodsType()) { |
| | |
| | | default: |
| | | break; |
| | | } |
| | | goodsTotalChangeDto = new GoodsTotalChangeDto(); |
| | | goodsTotalChangeDto.setGoodsId(orderGoods.getGoodsId()); |
| | | goodsTotalChangeDto.setChangeType(1); |
| | | goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum()); |
| | | goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney()); |
| | | Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(),orderGoods.getGoodsId()); |
| | | if(bugGoodsNum==null||bugGoodsNum<1){ |
| | | goodsTotalChangeDto.setPersonNum(1); |
| | | } |
| | | goodsTotalChangeDtoList.add(goodsTotalChangeDto); |
| | | } |
| | | //更新商品统计 |
| | | // 更新商户统计信息 |
| | | ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); |
| | | shopTotalChangeDto.setShopId(order.getShopId()); |
| | |
| | | } |
| | | activityTotalChangeDto.setUserId(order.getUserId()); |
| | | remoteActivityService.changeActivityTotal(activityTotalChangeDto); |
| | | |
| | | |
| | | //活动订单进行分账 |
| | | /*ProfitSharingApplyRequest request=new ProfitSharingApplyRequest(); |
| | | request.setAppid(this.appId); |
| | | request.setSubMchid(""); |
| | | request.setTransactionId(transaction.getTransactionId()); |
| | | profitsSharingService.applyProfitSharing(request);*/ |
| | | } |
| | | //生成支付记录 |
| | | OrderPayment orderPayment = new OrderPayment(); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return void |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public void refundOrder(String orderId){ |
| | | //更新订单信息 |
| | | Order order = this.getById(orderId); |