ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/CouponUseEnum.java
@@ -9,7 +9,8 @@ @AllArgsConstructor public enum CouponUseEnum { UNUSED(0, "未使用"), USED(1, "已使用"); USED(1, "已使用"), OVERDUE(2, "已过期"); @EnumValue private final Integer code; ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
@@ -3,7 +3,6 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.file.FileUtils; import com.ruoyi.file.service.ISysFileService; import com.ruoyi.file.utils.StateCloudObsUtil; import com.ruoyi.system.api.domain.SysFile; import io.swagger.annotations.ApiOperation; import java.io.InputStream; @@ -61,8 +60,8 @@ public R<String> obsUpload(@RequestPart("file") MultipartFile file) { try { // 上传并返回访问地址 String url = StateCloudObsUtil.uploadFile(file); return R.ok(url); return R.ok("1"); } catch (Exception e) { log.error("上传文件失败", e); return R.fail(e.getMessage()); @@ -78,8 +77,7 @@ List<String> urls = new ArrayList<>(); try { for (MultipartFile multipartFile : file) { String url = StateCloudObsUtil.uploadFile(multipartFile); urls.add(url); urls.add("1"); } // 上传并返回访问地址 return R.ok(urls); @@ -94,8 +92,8 @@ @RequestParam("stream") InputStream stream) { try { // 上传并返回访问地址 String url = StateCloudObsUtil.obsUploadStream(code, stream); return R.ok(url); return R.ok("1"); } catch (Exception e) { log.error("上传文件失败", e); return R.fail(e.getMessage()); ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/StateCloudObsUtil.java
@@ -1,27 +1,19 @@ /* package com.ruoyi.file.utils; import com.amazonaws.ClientConfiguration; import com.amazonaws.Protocol; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; import com.amazonaws.services.s3.model.PutObjectResult; import java.io.IOException; import java.io.InputStream; import java.util.UUID; import org.springframework.web.multipart.MultipartFile; */ /** * 天翼云OBS 工具类 * * @author mitao * @date 2024/6/17 */ *//* public class StateCloudObsUtil { public static String ACCESS_KEY = "MZTCFDOW5SGEC88GNMBV"; @@ -106,3 +98,4 @@ return fileName; } } */ ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -17,6 +17,7 @@ import com.ruoyi.common.core.enums.RequestTypeEnum; import com.ruoyi.common.core.enums.ReturnRequestStatusEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; import com.ruoyi.common.core.utils.page.PageDTO; @@ -35,16 +36,8 @@ import com.ruoyi.order.service.IPaylogService; import com.ruoyi.order.util.OrderUtil; import com.ruoyi.order.util.SinataUtil; import com.ruoyi.system.api.domain.AuctionSalesroom; import com.ruoyi.system.api.domain.CouponMember; import com.ruoyi.system.api.domain.CustomConfig; import com.ruoyi.system.api.domain.GoodsGroupPurchase; import com.ruoyi.system.api.domain.GoodsSeckill; import com.ruoyi.system.api.domain.GoodsSku; import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.MemberAddress; import com.ruoyi.system.api.domain.Order; import com.ruoyi.system.api.domain.OrderAuctionBond; import com.ruoyi.system.api.constants.DelayTaskEnum; import com.ruoyi.system.api.domain.*; import com.ruoyi.system.api.domain.dto.CouponMemberDTO; import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO; @@ -66,11 +59,9 @@ import com.ruoyi.system.api.feignClient.PromotionClient; import com.ruoyi.system.api.feignClient.SysUserClient; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.regex.Matcher; @@ -78,6 +69,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import lombok.Synchronized; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.stereotype.Service; @@ -296,7 +288,7 @@ } if (memberOrderDTO.getOrderFrom()==2){ GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(memberOrderDTO.getGoodsSkuId(), SecurityConstants.INNER).getData(); /* String goodsLock = "goods_lock_" + CacheConstants.SECKILL_GOODS + data.getId(); String goodsLock = "goods_lock_" + CacheConstants.SECKILL_GOODS + data.getId(); RLock redissonLock = redissonClient.getLock(goodsLock); Integer surpNum = 0; try { @@ -308,7 +300,7 @@ }catch (Exception e){ throw new ServiceException("reids 出错"); }*/ } order.setOrderFrom(OrderFromEnum.SNAP_ORDERS); GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(), SecurityConstants.INNER).getData(); @@ -333,7 +325,7 @@ order.setPrice(data.getSeckillPrice()); order.setCoverPic(goodsSku.getCoverPic()); order.setSjPrice(goodsSku.getPrice()); /*redisService.setCacheObject(CacheConstants.SECKILL_GOODS + data.getId(), surpNum - memberOrderDTO.getGoodsQuantity());*/ redisService.setCacheObject(CacheConstants.SECKILL_GOODS + data.getId(), surpNum - memberOrderDTO.getGoodsQuantity()); } if (memberOrderDTO.getOrderFrom()==3){ order.setOrderFrom(OrderFromEnum.GROUP_PURCHASE_ORDERS); @@ -361,26 +353,21 @@ CustomConfig memberPointsMoney = sysUserClient.getconfig("MEMBER_POINTS_MONEY").getData(); CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData(); BigDecimal pic=pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())); Double aDouble= Double.valueOf(memberPointsMoney.getConfigValue()) * Double.valueOf(memberPointsPoints.getConfigValue()); BigDecimal pi=pic.multiply(new BigDecimal(aDouble)); order.setPoints(pi.intValue()); BigDecimal pic=pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())); BigDecimal divide = pic.divide(new BigDecimal(memberPointsMoney.getConfigValue())); BigDecimal roundedDown = divide.setScale(0, RoundingMode.DOWN); BigDecimal aDouble= roundedDown.multiply(new BigDecimal(memberPointsPoints.getConfigValue())); order.setPoints(aDouble.intValue()); order.setOrderStatus(OrderStatusEnum.TO_PLAY); if (memberOrderDTO.getOrderFrom()==3){ order.setReceiverName(memberOrderDTO.getReceiverName()); order.setReceiverCity(memberOrderDTO.getReceiverCity()); order.setReceiverDetailAddress(memberOrderDTO.getReceiverDetailAddress()); order.setReceiverPhone(memberOrderDTO.getReceiverphone()); }else{ MemberAddress data = memberClient.getMemberAddressOne( memberOrderDTO.getMemberId(), SecurityConstants.INNER).getData(); if (StringUtils.isNotNull(data)) { order.setReceiverName(data.getRecipientName()); order.setReceiverCity(data.getReceiverCity()); order.setReceiverDetailAddress(data.getDetailedAddress()); order.setReceiverPhone(data.getRecipientPhone()); } MemberAddress data = memberClient.getMemberAddressOne( memberOrderDTO.getMemberId(), SecurityConstants.INNER).getData(); if (StringUtils.isNotNull(data)) { order.setReceiverName(data.getRecipientName()); order.setReceiverCity(data.getReceiverCity()); order.setReceiverDetailAddress(data.getDetailedAddress()); order.setReceiverPhone(data.getRecipientPhone()); } order.setGoodsSkuId(memberOrderDTO.getGoodsSkuId()); @@ -402,7 +389,14 @@ memberOrderVO.setReceiverDetailAddress(order.getReceiverDetailAddress()); memberOrderVO.setReceiverphone(order.getReceiverPhone()); Integer delayTime = 30; redisService.setCacheObject(CacheConstants.ORDER_AUTOMATIC_CANCEL + "-" + order.getId(), order.getId() , delayTime.longValue(), TimeUnit.MINUTES); redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getId(), order.getId() , delayTime.longValue(), TimeUnit.MINUTES); DelayTask delayTask = new DelayTask(); delayTask.setDelFlag(0); delayTask.setCreateTime(LocalDateTime.now()); delayTask.setExecuteTime(LocalDateTime.now().plusMinutes(30)); delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getId()); sysUserClient.addDelayTask(delayTask, SecurityConstants.INNER); return memberOrderVO; } @@ -420,6 +414,7 @@ order.setReceiverCity(memberOrderDTO.getReceiverCity()); order.setReceiverDetailAddress(memberOrderDTO.getReceiverDetailAddress()); order.setReceiverPhone(memberOrderDTO.getReceiverphone()); baseMapper.updateById(order); } if (memberOrderDTO.getOrderRemark()!=null){ order.setOrderRemark(memberOrderDTO.getOrderRemark()); @@ -547,10 +542,16 @@ if (pice.doubleValue()>=data.getFullReductionAmount().doubleValue()){ pice=pice.subtract(data.getReductionAmount()); order.setDiscountMoney(data.getReductionAmount()); }else{ pice=new BigDecimal(0); } } if (data.getCouponType().getCode()==2){ pice= order.getTotalAmount(); if(pice.compareTo(data.getVoucherAmount())<0){ throw new ServiceException("优惠卷抵扣金额不能大于实际支付金额"); } pice=pice.subtract(data.getVoucherAmount()); order.setDiscountMoney(data.getVoucherAmount()); } @@ -559,6 +560,13 @@ BigDecimal pice1=new BigDecimal(data.getDiscountRate()); BigDecimal pice2=new BigDecimal(0.1); BigDecimal pice3=pice.multiply(pice1.multiply(pice2)); if (pice3.compareTo(new BigDecimal(data.getMaxDiscount().doubleValue()))>0){ pice3=new BigDecimal(data.getMaxDiscount().doubleValue()); } if(pice.compareTo(pice3)<0){ throw new ServiceException("优惠卷抵扣金额不能大于实际支付金额"); } BigDecimal pice4= pice.subtract(pice3); if (pice4.doubleValue()>data.getMaxDiscount().doubleValue()){ pice=pice.subtract(data.getMaxDiscount()); @@ -589,9 +597,16 @@ CustomConfig memberPointsMoney = sysUserClient.getconfig("MEMBER_POINTS_MONEY").getData(); CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData(); Double aDouble= Double.valueOf(memberPointsMoney.getConfigValue()) * Double.valueOf(memberPointsPoints.getConfigValue()); BigDecimal pi=pice.multiply(new BigDecimal(aDouble)); order.setPoints(pi.intValue()); if (pice.intValue()>0){ BigDecimal divide = pice.divide(new BigDecimal(memberPointsMoney.getConfigValue())); BigDecimal roundedDown = divide.setScale(0, RoundingMode.DOWN); BigDecimal aDouble= roundedDown.multiply(new BigDecimal(memberPointsPoints.getConfigValue())); order.setPoints(aDouble.intValue()); }else{ order.setPoints(0); } baseMapper.updateById(order); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java
@@ -95,6 +95,44 @@ LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(OrderAuctionBond::getOrderNo,orderNO); wrapper1.eq(OrderAuctionBond::getDelFlag,0); OrderAuctionBond one1 = orderAuctionBondMapper.selectOne(wrapper1); one1.setBoundStatus(BondStatusEnum.PAID); }else{ LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(Order::getOrderNo,orderNO); wrapper1.eq(Order::getDelFlag,0); Order page1 = OrderMapper.selectOne(wrapper1); if (page1.getTotalAmount().compareTo(new BigDecimal(0))==0){ page1.setOrderStatus(OrderStatusEnum.TO_BE_SHIPPED); page1.setPayTime(LocalDateTime.now()); OrderMapper.updateById(page1); Map<String, Object> returnMap = new HashMap<>(20); returnMap.put("Type",1); } page1.setOrderStatus(OrderStatusEnum.TO_BE_SHIPPED); page1.setPayTime(LocalDateTime.now()); OrderMapper.updateById(page1); MemberPointsDTO memberPointsDTO=new MemberPointsDTO(); memberPointsDTO.setMemberId(page1.getMemberId()); memberPointsDTO.setPointsType(1); memberPointsDTO.setPointsStatus(PointStatusEnum.INCREASE); memberPointsDTO.setPoints(page1.getPoints()); memberClient.addMemberPoints(memberPointsDTO); updMembeOneDTO MembeOneDTO=new updMembeOneDTO(); MembeOneDTO.setType(1); MembeOneDTO.setMemberId(page1.getMemberId()); MembeOneDTO.setMoney(page1.getTotalAmount()); MembeOneDTO.setTotalPoints(page1.getPoints()); memberClient.updMembeOne(MembeOneDTO); } if (orderNO.contains("BO")) { LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(OrderAuctionBond::getOrderNo,orderNO); wrapper1.eq(OrderAuctionBond::getDelFlag,0); OrderAuctionBond one = orderAuctionBondMapper.selectOne(wrapper1); price=one.getBond().doubleValue(); body = " 订单支付"; @@ -104,7 +142,7 @@ return this.alipay(orderNO, subject, body, price, request); } else { // 微信预下单 return this.wxpay(2, orderNO, body,openId, price, request); return this.wxpay(2, orderNO, body, openId, price, request); } }else{ LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); @@ -188,7 +226,7 @@ wrapper1.eq(Order::getOrderNo,paylog1.getOutTradeNo()); wrapper1.eq(Order::getDelFlag,0); Order page1 = OrderMapper.selectOne(wrapper1); page1.setOrderStatus(OrderStatusEnum.GOODS_TO_BE_RECEIVED); page1.setOrderStatus(OrderStatusEnum.TO_BE_SHIPPED); page1.setPayTime(LocalDateTime.now()); OrderMapper.updateById(page1); @@ -306,7 +344,7 @@ wrapper1.eq(Order::getOrderNo,paylog.getOutTradeNo()); wrapper1.eq(Order::getDelFlag,0); Order page1 = OrderMapper.selectOne(wrapper1); page1.setOrderStatus(OrderStatusEnum.GOODS_TO_BE_RECEIVED); page1.setOrderStatus(OrderStatusEnum.TO_BE_SHIPPED); page1.setPayTime(LocalDateTime.now()); OrderMapper.updateById(page1); @@ -501,6 +539,7 @@ returnMap.put("trade_type", map.get("trade_type")); returnMap.put("sign", signature); returnMap.put("Type",2); returnMap.put("err_code_des", map.get("err_code_des")); // 对获取预支付返回接口参数进行封装(生成支付订单接口数据) return R.ok(returnMap); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/alipay/util/PayDemoActivity.java
@@ -106,6 +106,7 @@ map.put("orderInfo", orderInfo); map.put("Type",2); } catch (Exception e) { e.printStackTrace(); ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponMemberServiceImpl.java
@@ -5,13 +5,23 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.enums.CouponUseEnum; import com.ruoyi.common.core.enums.ListingStatusEnum; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.promotion.domain.Coupon; import com.ruoyi.promotion.mapper.CouponMapper; import com.ruoyi.promotion.mapper.CouponMemberMapper; import com.ruoyi.promotion.service.ICouponMemberService; import com.ruoyi.promotion.service.ICouponService; import com.ruoyi.system.api.domain.CouponMember; import com.ruoyi.system.api.domain.GoodsSku; import com.ruoyi.system.api.domain.dto.CouponMemberDTO; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import org.springframework.stereotype.Service; import javax.annotation.Resource; /** * <p> @@ -24,23 +34,28 @@ @Service public class CouponMemberServiceImpl extends ServiceImpl<CouponMemberMapper, CouponMember> implements ICouponMemberService { @Resource private CouponMapper couponMapper; @Override public PageDTO<CouponMember> getCouponMemberList(CouponMemberDTO couponMemberDTO) { LambdaQueryWrapper<CouponMember> wrapper= Wrappers.lambdaQuery(); wrapper.eq(CouponMember::getCouponStatus, CouponUseEnum.UNUSED); wrapper.eq(CouponMember::getDelFlag,0); List<CouponMember> couponMemberList=this.list(wrapper); /* for (CouponMember couponMember:couponMemberList){ if(LocalDateTime.now().isAfter(couponMember.getEndDate())){ couponMember.setCouponStatus(0); this.updateById(couponMember); } }*/ LambdaQueryWrapper<Coupon> wrapper= Wrappers.lambdaQuery(); wrapper.eq(Coupon::getCouponStatus, ListingStatusEnum.REMOVED_FROM_THE_SHELF); wrapper.eq(Coupon::getDelFlag,0); List<Coupon> couponMemberList=couponMapper.selectList(wrapper); Set<Long> CouponList = null; CouponList = couponMemberList.stream().map(Coupon::getId) .collect(Collectors.toSet()); Page<CouponMember> page = new Page<>(couponMemberDTO.getPageCurr(), couponMemberDTO.getPageSize()); LambdaQueryWrapper<CouponMember> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(CouponMember::getCouponStatus, CouponUseEnum.getEnumByCode(couponMemberDTO.getCouponStatus()+1)); if(couponMemberDTO.getCouponStatus()!=null){ wrapper1.eq(CouponMember::getCouponStatus, CouponUseEnum.getEnumByCode(couponMemberDTO.getCouponStatus()+1)); } if (CouponList.size()>0){ wrapper1.notIn(CouponMember::getCouponId,CouponList); } wrapper1.eq(CouponMember::getMemberId,couponMemberDTO.getMemberId()); wrapper1.eq(CouponMember::getDelFlag,0); Page<CouponMember> page1 = this.page(page, wrapper1); @@ -61,20 +76,22 @@ @Override public List<CouponMember> getCouponMemberl(CouponMemberDTO couponMemberDTO) { LambdaQueryWrapper<CouponMember> wrapper= Wrappers.lambdaQuery(); wrapper.eq(CouponMember::getCouponStatus, CouponUseEnum.UNUSED); wrapper.eq(CouponMember::getDelFlag,0); List<CouponMember> couponMemberList=this.list(wrapper); /* for (CouponMember couponMember:couponMemberList){ if(LocalDateTime.now().isAfter(couponMember.getEndDate())){ couponMember.setCouponStatus(0); this.updateById(couponMember); } }*/ LambdaQueryWrapper<Coupon> wrapper= Wrappers.lambdaQuery(); wrapper.eq(Coupon::getCouponStatus, ListingStatusEnum.REMOVED_FROM_THE_SHELF); wrapper.eq(Coupon::getDelFlag,0); List<Coupon> couponMemberList=couponMapper.selectList(wrapper); Set<Long> CouponList = null; CouponList = couponMemberList.stream().map(Coupon::getId) .collect(Collectors.toSet()); LambdaQueryWrapper<CouponMember> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(CouponMember::getCouponStatus, CouponUseEnum.getEnumByCode(couponMemberDTO.getCouponStatus()+1)); wrapper1.eq(CouponMember::getMemberId,couponMemberDTO.getMemberId()); if (CouponList.size()>0){ wrapper1.notIn(CouponMember::getCouponId,CouponList); } wrapper1.eq(CouponMember::getDelFlag,0); List<CouponMember> page1 = this.list(wrapper1); return page1; @@ -82,19 +99,22 @@ @Override public List<CouponMember> updCouponMember1(CouponMemberDTO couponMemberDTO) { LambdaQueryWrapper<CouponMember> wrapper= Wrappers.lambdaQuery(); wrapper.eq(CouponMember::getCouponStatus, CouponUseEnum.UNUSED); wrapper.eq(CouponMember::getDelFlag,0); List<CouponMember> couponMemberList=this.list(wrapper); /* for (CouponMember couponMember:couponMemberList){ if(LocalDateTime.now().isAfter(couponMember.getEndDate())){ couponMember.setCouponStatus(0); this.updateById(couponMember); } }*/ LambdaQueryWrapper<Coupon> wrapper= Wrappers.lambdaQuery(); wrapper.eq(Coupon::getCouponStatus, ListingStatusEnum.REMOVED_FROM_THE_SHELF); wrapper.eq(Coupon::getDelFlag,0); List<Coupon> couponMemberList=couponMapper.selectList(wrapper); Set<Long> CouponList = null; CouponList = couponMemberList.stream().map(Coupon::getId) .collect(Collectors.toSet()); LambdaQueryWrapper<CouponMember> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(CouponMember::getCouponStatus, CouponUseEnum.getEnumByCode(couponMemberDTO.getCouponStatus())); if (CouponList.size()>0){ wrapper1.notIn(CouponMember::getCouponId,CouponList); } wrapper1.eq(CouponMember::getMemberId,couponMemberDTO.getMemberId()); wrapper1.eq(CouponMember::getDelFlag,0); List<CouponMember> page1 = this.list(wrapper1); ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java
@@ -48,6 +48,7 @@ Page<PromotionWishList> page = new Page<>(promotionWishListDTO.getPageCurr(), promotionWishListDTO.getPageSize()); LambdaQueryWrapper<PromotionWishList> wrapper= Wrappers.lambdaQuery(); wrapper.eq(PromotionWishList::getMemberId,promotionWishListDTO.getMemberId()); wrapper.orderByDesc(PromotionWishList::getCreateTime); Page<PromotionWishList> page1 = this.page(page, wrapper); return PageDTO.of(page1); }