package com.ruoyi.order.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.feignClient.AppCouponClient; import com.ruoyi.account.api.feignClient.AppUserAddressClient; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.account.api.model.TAppUserAddress; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.api.model.TShoppingOrder; import com.ruoyi.order.api.model.TShoppingOrderRefund; import com.ruoyi.order.api.query.ShoppingOrderQuery; import com.ruoyi.order.api.query.TActivityStatisticsQuery; import com.ruoyi.order.api.vo.TActivityStatisticslVO; import com.ruoyi.order.api.vo.TActivityVO; import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TShoppingOrderMapper; import com.ruoyi.order.service.TShoppingOrderRefundService; import com.ruoyi.order.service.TShoppingOrderService; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TGoods; import com.ruoyi.other.api.feignClient.CouponClient; import com.ruoyi.other.api.feignClient.GoodsClient; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; import com.ruoyi.payment.api.model.RefundReq; import com.ruoyi.payment.api.model.RefundResp; import com.ruoyi.payment.api.model.WxPaymentRefundModel; import com.ruoyi.payment.api.vo.AliQueryOrder; import com.ruoyi.payment.api.vo.NotifyV3PayDecodeRespBody; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author xiaochen * @since 2024-08-07 */ @Service public class TShoppingOrderServiceImpl extends ServiceImpl implements TShoppingOrderService { @Resource private TokenService tokenService; @Resource private GoodsClient goodsClient; @Resource private CouponClient couponClient; @Resource private AppUserClient appUserClient; @Resource private AppUserAddressClient appUserAddressClient; @Resource private AppCouponClient appCouponClient; @Resource private WxPaymentClient wxPaymentClient; @Resource private AliPaymentClient aliPaymentClient; @Resource private TShoppingOrderRefundService shoppingOrderRefundService; @Autowired public RedisTemplate redisTemplate; @Autowired private RedissonClient redissonClient; @Override public TActivityVO activityStatistics(TActivityStatisticsQuery dto) { TActivityVO res = new TActivityVO(); PageInfo pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); List list = this.baseMapper.activityStatistics(pageInfo,dto); List list1 = this.baseMapper.activityStatisticsNolimit(dto); // 优惠券金额 BigDecimal coupon = new BigDecimal("0"); // 会员抵扣金额 BigDecimal discount = new BigDecimal("0"); // 会员活动金额 BigDecimal vipActivity = new BigDecimal("0"); // 赠送会员 BigDecimal grantVip = new BigDecimal("0"); for (TActivityStatisticslVO tActivityStatisticslVO : list1) { TAppUser data = appUserClient.getUserById(tActivityStatisticslVO.getAppUserId()).getData(); if (data!=null){ tActivityStatisticslVO.setPhone(data.getPhone()); } // 判断享有了哪些类型 switch (tActivityStatisticslVO.getOrderType()){ case 1: StringBuilder stringBuilder = new StringBuilder(); // 充电订单 优惠券金额大于0 if (tActivityStatisticslVO.getCouponDiscountAmount()!=null && (tActivityStatisticslVO.getCouponDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ coupon = coupon.add(tActivityStatisticslVO.getCouponDiscountAmount()); stringBuilder.append("优惠券抵扣").append("+"); } if (tActivityStatisticslVO.getVipDiscountAmount()!=null &&(tActivityStatisticslVO.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ discount = discount.add(tActivityStatisticslVO.getVipDiscountAmount()); stringBuilder.append("会员抵扣").append("+"); } if (stringBuilder.length()>0){ stringBuilder.deleteCharAt(stringBuilder.length()-1); tActivityStatisticslVO.setType(stringBuilder.toString()); } tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime()); break; case 2: StringBuilder stringBuilder1 = new StringBuilder(); // 购物订单 优惠券金额大于0 if (tActivityStatisticslVO.getCouponDiscountAmount()!=null && (tActivityStatisticslVO.getCouponDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ coupon = coupon.add(tActivityStatisticslVO.getCouponDiscountAmount()); stringBuilder1.append("优惠券抵扣").append("+"); } if (tActivityStatisticslVO.getVipDiscountAmount()!=null && (tActivityStatisticslVO.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ discount = discount.add(tActivityStatisticslVO.getVipDiscountAmount()); stringBuilder1.append("会员抵扣").append("+"); } if (stringBuilder1.length()>0){ stringBuilder1.deleteCharAt(stringBuilder1.length()-1); } tActivityStatisticslVO.setType(stringBuilder1.toString()); tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime()); break; case 3: // 会员订单 优惠金额大于0 if (tActivityStatisticslVO.getVipDiscountAmount()!=null){ vipActivity = vipActivity.add(tActivityStatisticslVO.getVipDiscountAmount()); } tActivityStatisticslVO.setType("会员活动"); tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime()); break; case 4: // 赠送会员订单 如果支付金额为0 那么就是后台赠送的会员 if (tActivityStatisticslVO.getPaymentAmount().compareTo(BigDecimal.ZERO)==0){ grantVip = grantVip.add(tActivityStatisticslVO.getOrderAmount()); tActivityStatisticslVO.setType("赠送会员"); tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime()); }else{ // 会员活动 vipActivity = vipActivity.add(tActivityStatisticslVO.getVipDiscountAmount()); tActivityStatisticslVO.setType("会员活动"); tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime()); } break; } } List appUserIds = list.stream().map(TActivityStatisticslVO::getAppUserId).collect(Collectors.toList()); List appUsers = appUserClient.getUserByIds(appUserIds).getData(); for (TActivityStatisticslVO tActivityStatisticslVO : list) { TAppUser appUser = appUsers.stream().filter(user -> user.getId().equals(tActivityStatisticslVO.getAppUserId())).findFirst().orElse(null); if(Objects.nonNull(appUser)){ tActivityStatisticslVO.setPhone(appUser.getPhone()); } // 判断享有了哪些类型 switch (tActivityStatisticslVO.getOrderType()){ case 1: StringBuilder stringBuilder = new StringBuilder(); // 充电订单 优惠券金额大于0 if (tActivityStatisticslVO.getCouponDiscountAmount()!=null && (tActivityStatisticslVO.getCouponDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ stringBuilder.append("优惠券抵扣").append("+"); } if (tActivityStatisticslVO.getVipDiscountAmount()!=null &&(tActivityStatisticslVO.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ stringBuilder.append("会员抵扣").append("+"); } if (stringBuilder.length()>0){ stringBuilder.deleteCharAt(stringBuilder.length()-1); tActivityStatisticslVO.setType(stringBuilder.toString()); } tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime()); break; case 2: StringBuilder stringBuilder1 = new StringBuilder(); // 购物订单 优惠券金额大于0 if (tActivityStatisticslVO.getCouponDiscountAmount()!=null && (tActivityStatisticslVO.getCouponDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ stringBuilder1.append("优惠券抵扣").append("+"); } if (tActivityStatisticslVO.getVipDiscountAmount()!=null && (tActivityStatisticslVO.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ stringBuilder1.append("会员抵扣").append("+"); } if (stringBuilder1.length()>0){ stringBuilder1.deleteCharAt(stringBuilder1.length()-1); } tActivityStatisticslVO.setType(stringBuilder1.toString()); tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime()); break; case 3: // 会员订单 优惠金额大于0 tActivityStatisticslVO.setType("会员活动"); tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime()); break; case 4: // 赠送会员订单 如果支付金额为0 那么就是后台赠送的会员 if (tActivityStatisticslVO.getPaymentAmount().compareTo(BigDecimal.ZERO)==0){ tActivityStatisticslVO.setType("赠送会员"); tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime()); }else{ // 赠送 tActivityStatisticslVO.setType("赠送会员"); tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime()); } break; } } pageInfo.setRecords(list); res.setList(pageInfo); res.setTotal(coupon.add(discount).add(vipActivity).add(grantVip)); res.setCoupon(coupon); res.setDiscount(discount); res.setVipActivity(vipActivity); res.setGrantVip(grantVip); return res; } /** * 获取小程序商城购买订单列表 * @param query * @return */ @Override public Map getMyShoppingOrderList(GetMyShoppingOrderList query) { Long userId = tokenService.getLoginUserApplet().getUserId(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(TShoppingOrder::getDelFlag, 0) .eq(TShoppingOrder::getAppUserId, userId).eq(TShoppingOrder::getPaymentStatus, 2).notIn(TShoppingOrder::getStatus, Arrays.asList(5)); if(query.getStatus() != 0){ wrapper.eq(TShoppingOrder::getStatus, query.getStatus()); } long count = this.count(wrapper); Integer pageCurr = (query.getPageCurr() - 1) * query.getPageSize(); List list = this.list(wrapper.orderByDesc(TShoppingOrder::getCreateTime).last(" limit " + pageCurr + ", " + query.getPageSize())); List pageList = new ArrayList<>(); for (TShoppingOrder tShoppingOrder : list) { MyShoppingOrderList myShoppingOrderList = new MyShoppingOrderList(); myShoppingOrderList.setId(tShoppingOrder.getId().toString()); String name = ""; String imgUrl = ""; if(tShoppingOrder.getOrderType() == 1){ TGoods goods = goodsClient.getGoodsById(tShoppingOrder.getGoodsId()).getData(); name = goods.getName(); imgUrl = goods.getCoverPicture(); }else{ TCoupon coupon = couponClient.getCouponById1(tShoppingOrder.getCouponId()).getData(); name = coupon.getName(); imgUrl = coupon.getCoverPicture(); } myShoppingOrderList.setName(name); myShoppingOrderList.setImgUrl(imgUrl); myShoppingOrderList.setStatus(tShoppingOrder.getStatus()); BigDecimal unitPrice = tShoppingOrder.getPaymentAmount().divide(new BigDecimal(tShoppingOrder.getPurchaseQuantity())).setScale(2, BigDecimal.ROUND_HALF_EVEN); myShoppingOrderList.setUnitPrice(unitPrice); myShoppingOrderList.setNumber(tShoppingOrder.getPurchaseQuantity()); myShoppingOrderList.setPaymentAmount(tShoppingOrder.getPaymentAmount()); myShoppingOrderList.setOrderType(tShoppingOrder.getOrderType()); pageList.add(myShoppingOrderList); } Map map = new HashMap<>(); map.put("list", pageList); map.put("total", count); return map; } /** * 获取购买订单详情 * @param id * @return */ @Override public MyShoppingOrderInfo getMyShoppingOrderInfo(String id) { TShoppingOrder shoppingOrder = this.getById(id); MyShoppingOrderInfo info = new MyShoppingOrderInfo(); info.setId(id); info.setStatus(shoppingOrder.getStatus()); TAppUserAddress userAddress = JSON.parseObject(shoppingOrder.getAddressJson(), TAppUserAddress.class); info.setConsignee(userAddress.getName()); info.setPhone(userAddress.getPhone()); info.setAddress(userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getAddress() + userAddress.getHouseNumber()); info.setExpressCompany(shoppingOrder.getExpressCompany()); info.setExpressNumber(shoppingOrder.getExpressNumber()); String name = ""; String imgUrl = ""; if(shoppingOrder.getOrderType() == 1){ TGoods goods = goodsClient.getGoodsById(shoppingOrder.getGoodsId()).getData(); name = goods.getName(); imgUrl = goods.getCoverPicture(); }else{ TCoupon coupon = couponClient.getCouponById1(shoppingOrder.getCouponId()).getData(); info.setCouponType(coupon.getType()); info.setDays(coupon.getDays()); info.setEndTime(coupon.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); name = coupon.getName(); imgUrl = coupon.getCoverPicture(); } info.setName(name); info.setImgUrl(imgUrl); info.setNumber(shoppingOrder.getPurchaseQuantity()); BigDecimal unitPrice = shoppingOrder.getPaymentAmount().divide(new BigDecimal(shoppingOrder.getPurchaseQuantity())).setScale(2, BigDecimal.ROUND_HALF_EVEN); info.setUnitPrice(unitPrice); info.setCode(shoppingOrder.getCode()); info.setCreateTime(shoppingOrder.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); info.setOrderAmount(shoppingOrder.getOrderAmount()); info.setPaymentAmount(shoppingOrder.getPaymentAmount()); info.setRemark(shoppingOrder.getRemark()); if(null != shoppingOrder.getConsignerTime()){ info.setDeliveryTime(shoppingOrder.getConsignerTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } if(null != shoppingOrder.getReceivingTime()){ info.setFinishTime(shoppingOrder.getReceivingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } return info; } /** * 取消订单 * @param id * @return */ @Override public AjaxResult cancelOrder(String id) { TShoppingOrder shoppingOrder = this.getById(id); if(shoppingOrder.getStatus() == 2){ return AjaxResult.error("订单已发货,不能取消"); } if(shoppingOrder.getStatus() == 3){ return AjaxResult.error("订单已完成,不能取消"); } //退款状态并且所有金额退完 List list = shoppingOrderRefundService.list(new LambdaQueryWrapper().eq(TShoppingOrderRefund::getShoppingOrderId, id).eq(TShoppingOrderRefund::getRefundStatus, 2)); BigDecimal bigDecimal = list.stream().map(TShoppingOrderRefund::getRefundAmount).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_EVEN); if(shoppingOrder.getPaymentAmount().compareTo(bigDecimal) == 0 && shoppingOrder.getStatus() == 4){ return AjaxResult.error("订单已取消,不能重复操作"); } //退款金额 BigDecimal refundAmount = shoppingOrder.getPaymentAmount().subtract(bigDecimal); //先查询第三方订单状态订单是否退款 //支付方式(1=微信,2=支付宝) Integer paymentType = shoppingOrder.getPaymentType(); if(1 == paymentType){ NotifyV3PayDecodeRespBody data = wxPaymentClient.queryOrderInfo(shoppingOrder.getCode()).getData(); String trade_state = data.getTrade_state(); if("NOTPAY".equals(trade_state) || "REVOKED".equals(trade_state) || "PAYERROR".equals(trade_state)){ return AjaxResult.error("订单还未支付,不能操作退款"); } if("CLOSED".equals(trade_state)){ return AjaxResult.error("订单支付已关闭,不能操作退款"); } if("USERPAYING".equals(trade_state)){ return AjaxResult.error("订单正在支付中,不能操作退款"); } } if(2 == paymentType){ AliQueryOrder aliQueryOrder = aliPaymentClient.query(shoppingOrder.getCode()).getData(); String tradeStatus = aliQueryOrder.getTradeStatus(); if("TRADE_CLOSED".equals(tradeStatus)){ return AjaxResult.error("订单还未支付,不能操作退款"); } if("TRADE_FINISHED".equals(tradeStatus)){ return AjaxResult.error("订单支付已关闭,不能操作退款"); } if("WAIT_BUYER_PAY".equals(tradeStatus)){ return AjaxResult.error("订单正在支付中,不能操作退款"); } } //退款成功后需要判断商品库存类型后决定是否需要回退库存 //加redis锁处理高并发 //构建退款明细 TShoppingOrderRefund shoppingOrderRefund = new TShoppingOrderRefund(); shoppingOrderRefund.setPayTime(shoppingOrder.getPayTime()); shoppingOrderRefund.setPayCode(shoppingOrder.getSerialNumber()); shoppingOrderRefund.setPayType(shoppingOrder.getPaymentType()); shoppingOrderRefund.setShoppingOrderId(shoppingOrder.getId()); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); shoppingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + Double.valueOf((Math.random() * 1000)).intValue()); shoppingOrderRefund.setRefundAmount(refundAmount); shoppingOrderRefund.setRefundStatus(1); shoppingOrderRefund.setCode(shoppingOrder.getCode()); shoppingOrderRefund.setRefundTitle("取消订单"); shoppingOrderRefund.setRefundContent("取消订单"); shoppingOrderRefund.setRefundReason("取消订单"); shoppingOrderRefund.setRefundRemark("全额退款"); shoppingOrderRefund.setRefundTotalAmount(refundAmount.add(bigDecimal)); shoppingOrderRefund.setPayAmount(shoppingOrder.getPaymentAmount()); shoppingOrder.setCancellationTime(LocalDateTime.now()); shoppingOrder.setCancellationId(shoppingOrder.getAppUserId()); if(1 == paymentType){ WxPaymentRefundModel model = new WxPaymentRefundModel(); model.setOut_trade_no(shoppingOrder.getCode()); model.setTransaction_id(shoppingOrder.getSerialNumber()); model.setOut_refund_no(shoppingOrderRefund.getRefundCode()); model.setReason("取消商城订单"); model.setNotify_url("/payment/wx/refund/notify"); WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue()); amount.setTotal(shoppingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue()); amount.setCurrency("CNY"); model.setAmount(amount); R> orderR = wxPaymentClient.refundOrderR(model); if(200 == orderR.getCode()){ this.updateById(shoppingOrder); shoppingOrderRefundService.save(shoppingOrderRefund); //手续费 Map amount1 = (Map) orderR.getData().get("amount"); Object refund_fee1 = amount1.get("refund_fee"); BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); shoppingOrderRefund.setRefundFee(refund_fee); shoppingOrderRefundService.updateById(shoppingOrderRefund); } } if(2 == paymentType){ RefundReq dto = new RefundReq(); dto.setOutTradeNo(shoppingOrder.getCode()); dto.setOutRequestNo(shoppingOrderRefund.getCode()); dto.setRefundAmount(refundAmount.toString()); dto.setRefundReason("取消商城订单"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if(null != resp){ this.updateById(shoppingOrder); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); AjaxResult success = cancelShoppingOrderWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date())); } } return AjaxResult.success(); } /** * 商城订单取消订单微信退款处理 * @param out_refund_no 退款单号 * @param refund_id 退款流水号 * @param refund_status 退款状态 SUCCESS:退款成功 CLOSED:退款关闭 ABNORMAL:退款异常 * @param success_time 退款成功时间 * @return */ @Override public AjaxResult cancelShoppingOrderWxRefund(String out_refund_no, String refund_id, String refund_status, String success_time) { TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper().eq(TShoppingOrderRefund::getRefundCode, out_refund_no)); one.setRefundStatus(2); one.setRefundSerialNumber(refund_id); one.setRefundTime(LocalDateTime.now()); shoppingOrderRefundService.updateById(one); //判断是否需要回退库存 TShoppingOrder shoppingOrder = this.getById(one.getShoppingOrderId()); shoppingOrder.setStatus(4); shoppingOrder.setRefundCode(one.getRefundSerialNumber()); shoppingOrder.setRefundAmount(one.getRefundAmount()); shoppingOrder.setRefundStatus(2); shoppingOrder.setRefundTime(one.getRefundTime()); this.updateById(shoppingOrder); //商品 if(shoppingOrder.getOrderType() == 1){ //redis锁 和支付使用同一个锁 RLock lock = redissonClient.getLock("SHOPPING_GOODS_LOCK"); try { boolean tryLock = lock.tryLock(5, 30, TimeUnit.SECONDS); if(tryLock){ TGoods goods = goodsClient.getGoodsById(shoppingOrder.getGoodsId()).getData(); Integer inventory = goods.getInventory(); if(-1 != inventory){ goods.setInventory(inventory + shoppingOrder.getPurchaseQuantity()); goodsClient.updateGoods(goods); } } }catch (Exception e){ e.printStackTrace(); }finally { //解锁 lock.unlock(); } } //优惠券 if(shoppingOrder.getOrderType() == 2){ //redis锁 和支付使用同一个锁 RLock lock = redissonClient.getLock("SHOPPING_COUPON_LOCK"); try { boolean tryLock = lock.tryLock(5, 5, TimeUnit.SECONDS); if(tryLock){ TCoupon coupon = couponClient.getCouponById1(shoppingOrder.getCouponId()).getData(); Integer inventory = coupon.getInventoryQuantity(); if(-1 != inventory){ coupon.setInventoryQuantity(inventory + shoppingOrder.getPurchaseQuantity()); couponClient.updateCoupon(coupon); } } }catch (Exception e){ e.printStackTrace(); }finally { lock.unlock(); } } return AjaxResult.success(); } /** * 获取未开票的订单列表 * @param query * @return */ @Override public List getNoInvoicedOrder(GetNoInvoicedOrder query) { Long userId = tokenService.getLoginUserApplet().getUserId(); Integer pageCurr = (query.getPageCurr() - 1) * query.getPageSize(); List list = this.baseMapper.getNoInvoicedOrder(userId, query.getMonth(), pageCurr, query.getPageSize()); List pageList = new ArrayList<>(); for (TShoppingOrder tShoppingOrder : list) { MyShoppingOrderList myShoppingOrderList = new MyShoppingOrderList(); myShoppingOrderList.setId(tShoppingOrder.getId().toString()); String name = ""; String imgUrl = ""; if(tShoppingOrder.getOrderType() == 1){ TGoods goods = goodsClient.getGoodsById(tShoppingOrder.getGoodsId()).getData(); name = goods.getName(); imgUrl = goods.getCoverPicture(); }else{ TCoupon coupon = couponClient.getCouponById1(tShoppingOrder.getCouponId()).getData(); name = coupon.getName(); imgUrl = coupon.getCoverPicture(); } myShoppingOrderList.setName(name); myShoppingOrderList.setImgUrl(imgUrl); myShoppingOrderList.setStatus(tShoppingOrder.getStatus()); BigDecimal unitPrice = tShoppingOrder.getPaymentAmount().divide(new BigDecimal(tShoppingOrder.getPurchaseQuantity())).setScale(2, BigDecimal.ROUND_HALF_EVEN); myShoppingOrderList.setUnitPrice(unitPrice); myShoppingOrderList.setNumber(tShoppingOrder.getPurchaseQuantity()); myShoppingOrderList.setPaymentAmount(tShoppingOrder.getPaymentAmount()); myShoppingOrderList.setCreateTime(tShoppingOrder.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"))); pageList.add(myShoppingOrderList); } return pageList; } @Override public void callBack(String code,String outTradeNo) { //改变订单状态 TShoppingOrder shoppingOrder = this.baseMapper.selectOne(Wrappers.lambdaQuery(TShoppingOrder.class).eq(TShoppingOrder::getCode, code)); shoppingOrder.setPaymentStatus(2); shoppingOrder.setSerialNumber(outTradeNo); shoppingOrder.setPayTime(LocalDateTime.now()); this.updateById(shoppingOrder); //如果是优惠券,赠送优惠券 if (shoppingOrder.getOrderType()==2){ GrantCouponDto grantCouponDto = new GrantCouponDto(); grantCouponDto.setType(3); grantCouponDto.setUserIds(String.valueOf(shoppingOrder.getAppUserId())); grantCouponDto.setCouponId(shoppingOrder.getCouponId()); grantCouponDto.setWaysToObtain(2); grantCouponDto.setEndTime(LocalDateTime.now()); appCouponClient.grantCoupon(grantCouponDto); } } @Override public PageInfo pageList(ShoppingOrderQuery query) { String startTime1 = null; String startTime2 = null; if (StringUtils.hasLength(query.getStartTime())){ String[] split = query.getStartTime().split(" - "); startTime1 = split[0]; startTime2 = split[1]; } PageInfo pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize()); List list = this.baseMapper.pageList(pageInfo,query,startTime1,startTime2); for (TShoppingOrder tShoppingOrder : list) { tShoppingOrder.setUid(tShoppingOrder.getId().toString()); switch (tShoppingOrder.getOrderType()){ case 1: TGoods data = goodsClient.getGoodsById(tShoppingOrder.getGoodsId()).getData(); if (data!=null){ tShoppingOrder.setName(data.getName()); } break; case 2: TCoupon data1 = couponClient.getCouponById1(tShoppingOrder.getCouponId()).getData(); if (data1!=null){ tShoppingOrder.setName(data1.getName()); } tShoppingOrder.setStatus(3); break; } if (tShoppingOrder.getAppUserId() != null){ TAppUser data = appUserClient.getUserById(tShoppingOrder.getAppUserId()).getData(); if (data!=null){ tShoppingOrder.setPhone(data.getPhone()); } } } pageInfo.setRecords(list); return pageInfo; } @Override public List sixBefore(LocalDate sixBefore, Integer status) { return this.baseMapper.sixBefore(sixBefore,status); } @Override public BigDecimal getSumAmount() { return this.baseMapper.getSumAmount(); } @Override public List> getData(ChargingStatisticsQueryDto statisticsQueryDto) { return this.baseMapper.getData(statisticsQueryDto); } }