ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -22,7 +22,7 @@ String INTEGRAL_USE_FAILED = "积分不够支付"; String CANCEL_ERROR_ORDER = "只能取消未支付订单"; String CANCEL_ERROR_ORDER = "已核销订单不能取消"; String SALESPRICE_MIN = "设置价格不能低于最低限价"; @@ -89,4 +89,6 @@ String COUPON_GET_ALL = "该优惠券已领取完"; String DOUBLE_INTEGRAL_TASK = "任务已完成,请勿重复提交"; String ACTIVITY_TIME_ERROR = "只能选择大于当前时间作为开始时间"; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/SecurityConstant.java
@@ -46,4 +46,14 @@ */ String ACTIVITY_GOODS = "ACTIVITY_GOODS"; /** * 自动取消订单时间 */ String AUTO_CANCEL_ORDER_TIME = "AUTO_CANCEL_ORDER_TIME"; /** * 自动取消订单时间 */ String PAY_MONEY_INTEGRAL = "PAY_MONEY_INTEGRAL"; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AGStockChangeDto.java
New file @@ -0,0 +1,34 @@ package com.ruoyi.system.api.domain.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName ActivityGoodsStockChangeDto * @Description TODO * @Author jqs * @Date 2023/7/13 14:02 * @Version 1.0 */ @Data public class AGStockChangeDto { @ApiModelProperty(value = "活动id") private String activityId; @ApiModelProperty(value = "活动id") private String goodsId; @ApiModelProperty(value = "变化类型1加2减") private Integer changeType; @ApiModelProperty(value = "变化数量") private Integer changeNum; @ApiModelProperty(value = "商户id") private Long shopId; @ApiModelProperty(value = "用户id") private Long userId; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ActivityTotalChangeDto.java
New file @@ -0,0 +1,39 @@ package com.ruoyi.system.api.domain.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @ClassName ActivityGoodsStockChangeDto * @Description TODO * @Author jqs * @Date 2023/7/13 14:02 * @Version 1.0 */ @Data public class ActivityTotalChangeDto { @ApiModelProperty(value = "活动id") private String activityId; @ApiModelProperty(value = "1下单2退款") private Integer changeType; @ApiModelProperty(value = "数量变化") private Integer changeNum; @ApiModelProperty(value = "金额变化") private BigDecimal money; @ApiModelProperty(value = "人数变化") private Integer personNum; @ApiModelProperty(value = "退款变化") private Integer refundNum; @ApiModelProperty(value = "用户id") private Long userId; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBasePlatformDto.java
@@ -46,5 +46,5 @@ private Integer activityType; @ApiModelProperty(value="活动id") private Long activityId; private String activityId; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopTotalChangeDto.java
@@ -19,6 +19,9 @@ @ApiModelProperty(value = "商户id") private Long shopId; @ApiModelProperty(value = "1下单2取消") private Integer orderType; @ApiModelProperty(value = "周期订单金额") private BigDecimal cycleMoney; ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteActivityFallbackFactory.java
@@ -1,7 +1,9 @@ package com.ruoyi.system.api.factory; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.api.domain.dto.AGStockChangeDto; import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; import com.ruoyi.system.api.domain.dto.ActivityTotalChangeDto; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; import com.ruoyi.system.api.service.RemoteActivityService; @@ -49,6 +51,26 @@ public R<ActivityGoodsGetVo> getUserActivityGoods(ActivityGoodsGetDto activityGoodsGetDto) { return R.fail("获取用户活动商品信息失败:" + throwable.getMessage()); } @Override public R changeActivityStock(AGStockChangeDto agStockChangeDto) { return R.fail("更新活动库存失败:" + throwable.getMessage()); } @Override public R changeActivityTotal(ActivityTotalChangeDto activityTotalChangeDto) { return R.fail("更新活动统计:" + throwable.getMessage()); } @Override public R startActivity(String activityId) { return null; } @Override public R endActivity(String activityId) { return null; } }; } } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java
@@ -50,6 +50,16 @@ return R.fail("定时发送"+couponId+"优惠券失败:" + throwable.getMessage()); } @Override public R useMemberCoupon(String memberCouponIds) { return R.fail("使用优惠券失败" + throwable.getMessage()); } @Override public R backMemberCoupon(String memberCouponIds) { return R.fail("回退优惠券失败" + throwable.getMessage()); } }; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java
@@ -61,7 +61,12 @@ @Override public R sendGoodsGift(List<BirthdayGiftSendDto> giftSendDtoList) { return null; return R.fail("发送礼物失败:" + throwable.getMessage()); } @Override public R autoCancelOrder(String orderId) { return R.fail("自动取消订单失败:" + throwable.getMessage()); } }; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteActivityService.java
@@ -2,7 +2,9 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.api.domain.dto.AGStockChangeDto; import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; import com.ruoyi.system.api.domain.dto.ActivityTotalChangeDto; import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; @@ -55,4 +57,44 @@ */ @PostMapping("/activity/getUserActivityGoods") public R<ActivityGoodsGetVo> getUserActivityGoods(@RequestBody ActivityGoodsGetDto activityGoodsGetDto); /** * @description 更新活动库存 * @author jqs * @date 2023/7/13 15:39 * @param agStockChangeDto * @return R */ @PostMapping("/activity/changeActivityStock") public R changeActivityStock(@RequestBody AGStockChangeDto agStockChangeDto); /** * @description 更新活动统计 * @author jqs * @date 2023/7/13 16:12 * @param activityTotalChangeDto * @return R */ @PostMapping("/activity/changeActivityTotal") public R changeActivityTotal(@RequestBody ActivityTotalChangeDto activityTotalChangeDto); /** * @description 开始活动 * @author jqs * @date 2023/7/12 20:30 * @param activityId * @return R */ @PostMapping("/startActivity") public R startActivity(@RequestBody String activityId); /** * @description 结束活动 * @author jqs * @date 2023/7/12 20:30 * @param activityId * @return R */ @PostMapping("/endActivity") public R endActivity(@RequestBody String activityId); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java
@@ -59,4 +59,24 @@ */ @PostMapping("/coupon/autoTimeSendCoupon") public R autoTimeSendCoupon(@RequestBody String couponId); /** * @description 使用优惠券 * @author jqs * @date 2023/7/13 19:38 * @param memberCouponIds * @return R */ @PostMapping("/coupon/useMemberCoupon") public R useMemberCoupon(@RequestBody String memberCouponIds); /** * @description 回退优惠券 * @author jqs * @date 2023/7/13 20:01 * @param memberCouponIds * @return R */ @PostMapping("/coupon/backMemberCoupon") public R backMemberCoupon(@RequestBody String memberCouponIds); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java
@@ -66,4 +66,14 @@ */ @PostMapping("/order/sendGoodsGift") public R sendGoodsGift(@RequestBody List<BirthdayGiftSendDto> giftSendDtoList); /** * @description 自动取消订单 * @author jqs * @date 2023/7/13 17:15 * @param orderId * @return R */ @PostMapping("/order/autoCancelOrder") public R autoCancelOrder(@RequestBody String orderId); } ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
@@ -1,5 +1,8 @@ package com.ruoyi.common.redis.configure; import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.cache.annotation.CachingConfigurerSupport; @@ -12,6 +15,8 @@ import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; import org.springframework.data.redis.serializer.StringRedisSerializer; import java.io.IOException; /** * redis配置 @@ -64,4 +69,16 @@ template.afterPropertiesSet(); return template; } @Bean(destroyMethod="shutdown") // 服务停止后调用 shutdown 方法。 public RedissonClient redisson() throws IOException { // 1.创建配置 Config config = new Config(); // 集群模式 // config.useClusterServers().addNodeAddress("127.0.0.1:7004", "127.0.0.1:7001"); // 2.根据 Config 创建出 RedissonClient 示例。 config.useSingleServer().setAddress("redis://47.109.78.184:10020").setPassword("hrt123456"); return Redisson.create(config); } } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/ActivityController.java
@@ -4,7 +4,9 @@ import com.ruoyi.goods.service.activity.ActivityGoodsService; import com.ruoyi.goods.service.activity.ActivityRecordService; import com.ruoyi.goods.service.activity.ActivityService; import com.ruoyi.system.api.domain.dto.AGStockChangeDto; import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; import com.ruoyi.system.api.domain.dto.ActivityTotalChangeDto; import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; @@ -116,4 +118,30 @@ activityService.endActivity(activityId); return R.ok(); } /** * @description 更新活动库存 * @author jqs * @date 2023/7/13 15:39 * @param agStockChangeDto * @return R */ @PostMapping("/changeActivityStock") public R changeActivityStock(@RequestBody AGStockChangeDto agStockChangeDto){ activityService.changeActivityStock(agStockChangeDto); return R.ok(); } /** * @description 更新活动统计 * @author jqs * @date 2023/7/13 16:12 * @param activityTotalChangeDto * @return R */ @PostMapping("/changeActivityTotal") public R changeActivityTotal(@RequestBody ActivityTotalChangeDto activityTotalChangeDto){ activityService.changeActivityTotal(activityTotalChangeDto); return R.ok(); } } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtActivityEditDto.java
@@ -1,5 +1,6 @@ package com.ruoyi.goods.domain.dto; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.system.api.domain.dto.MgtBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -26,10 +27,15 @@ @NotNull(message = "活动名称不能为空") private String activityName; @ApiModelProperty(value = "活动简介") private String activityIntroduce; @ApiModelProperty(value = "活动开始时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date activityStartTime; @ApiModelProperty(value = "活动结束时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date activityEndTime; @ApiModelProperty(value = "成团人数") ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/pojo/activity/Activity.java
@@ -122,6 +122,12 @@ */ @TableField("recommend_flag") private Integer recommendFlag; /** * 活动简介 */ @TableField("activity_introduce") private String activityIntroduce; @Override protected Serializable pkVal() { ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppActivityPageVo.java
@@ -22,6 +22,10 @@ @ApiModelProperty(value = "活动名称") private String activityName; @ApiModelProperty(value = "活动简介") private String activityIntroduce; @ApiModelProperty(value = "活动开始时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date activityStartTime; ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppSimpleActivityGoodsVo.java
@@ -35,7 +35,7 @@ private String goodsTag; @ApiModelProperty(value = "商品调理问题") private BigDecimal goodsNurses; private String goodsNurses; @ApiModelProperty(value = "商品售价") private BigDecimal salesPrice; @@ -57,4 +57,13 @@ @ApiModelProperty(value = "结束时间") private Date endTime; @ApiModelProperty(value = "限购标记0否1是") private Integer purchaseLimitationFlag; @ApiModelProperty(value = "限购数量") private Integer limitNumber; @ApiModelProperty(value = "还可以购买数量") private Integer availableBuyNum; } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtActivityGetVo.java
@@ -24,6 +24,9 @@ @ApiModelProperty(value = "活动名称") private String activityName; @ApiModelProperty(value = "活动简介") private String activityIntroduce; @ApiModelProperty(value = "活动开始时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date activityStartTime; ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/activity/ActivityMapper.java
@@ -6,6 +6,7 @@ import com.ruoyi.goods.domain.pojo.activity.Activity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.goods.domain.vo.*; import com.ruoyi.system.api.domain.dto.AGStockChangeDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import org.apache.ibatis.annotations.Param; @@ -87,4 +88,24 @@ * @return List<AppActivityPageVo> */ List<AppActivityPageVo> pageAppActivity(Page page, @Param("shopId")Long shopId); /** * @description 活动商品库存变化 * @author jqs * @date 2023/7/13 13:53 * @param * @return void */ void addActivityGoodsStock(@Param("param")AGStockChangeDto agStockChangeDto); void subActivityGoodsStock(@Param("param")AGStockChangeDto agStockChangeDto); /** * @description 判断活动是否售罄 * @author jqs * @date 2023/7/13 15:35 * @param activityId * @return Integer */ Integer checkSellOut(@Param("activityId")String activityId); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/activity/ActivityService.java
@@ -7,7 +7,9 @@ import com.ruoyi.goods.domain.dto.MgtActivityRecordPageDto; import com.ruoyi.goods.domain.pojo.activity.Activity; import com.ruoyi.goods.domain.vo.*; import com.ruoyi.system.api.domain.dto.AGStockChangeDto; import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; import com.ruoyi.system.api.domain.dto.ActivityTotalChangeDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; @@ -150,4 +152,22 @@ * @return void */ void endActivity(String activityId); /** * @description 活动商品库存变化 * @author jqs * @date 2023/7/13 13:53 * @param * @return void */ void changeActivityTotal(ActivityTotalChangeDto activityTotalChangeDto); /** * @description 活动商品库存变化 * @author jqs * @date 2023/7/13 13:53 * @param * @return void */ void changeActivityStock(AGStockChangeDto agStockChangeDto); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
@@ -24,10 +24,7 @@ import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.constant.DelayTaskEnum; import com.ruoyi.system.api.constant.SecurityConstant; import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.dto.MgtBaseBathDto; import com.ruoyi.system.api.domain.dto.MgtUserIdByKeywordDto; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; import com.ruoyi.system.api.domain.poji.config.DelayTask; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; @@ -37,6 +34,9 @@ import com.ruoyi.system.api.service.RemoteConfigService; import com.ruoyi.system.api.service.RemoteMemberService; import com.ruoyi.system.api.service.RemoteShopService; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -84,6 +84,8 @@ @Resource private RedisService redisService; @Autowired private RedissonClient redissonClient; /** * @param mgtActivityEditDto @@ -130,13 +132,12 @@ // 根据当前时间和活动时间判断活动状态 if (nowTime.compareTo(activityStartTime) < 0) { activity.setActivityStatus(0); } else if (nowTime.compareTo(activityStartTime) >= 0 && nowTime.compareTo(activityEndTime) <= 0) { activity.setActivityStatus(1); } else if (nowTime.compareTo(activityEndTime) > 0) { activity.setActivityStatus(2); } else { throw new ServiceException(AppErrorConstant.ACTIVITY_TIME_ERROR); } // 设置活动信息 activity.setActivityName(mgtActivityEditDto.getActivityName()); activity.setActivityIntroduce(mgtActivityEditDto.getActivityIntroduce()); activity.setActivityStartTime(activityStartTime); activity.setActivityEndTime(activityEndTime); activity.setGroupBuyNumber(mgtActivityEditDto.getGroupBuyNumber()); @@ -164,6 +165,7 @@ activityGoods.setActivityPrice(dto.getActivityPrice()); activityGoods.setActivitySubscription(dto.getActivitySubscription()); activityGoods.setActivityNumber(dto.getActivityNumber()); activityGoods.setSalesNumber(0); activityGoods.setActivityDeadline(activity.getActivityEndTime()); activityGoods.setSellOutFlag(0); activityGoods.setPurchaseLimitationFlag(activity.getPurchaseLimitationFlag()); @@ -173,6 +175,38 @@ ).collect(Collectors.toList()); if (!activityGoodsList.isEmpty()) { activityGoodsService.saveBatch(activityGoodsList); } } //如果活动在1小时内生成自动开始任务的延时任务 Date checkTime = DateUtils.addMinutes(new Date(),61); if(checkTime.compareTo(activityStartTime)>0){ String activityId = activity.getActivityId(); long currentTimeMillis = System.currentTimeMillis(); long startTimeDifference = currentTimeMillis - activityStartTime.getTime(); long endTimeDifference = currentTimeMillis - activityEndTime.getTime(); // 查询延时任务 DelayTask startDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId).getData(); // 如果延时任务为空,创建延时任务控制活动定时开始和结束 if (startDelayTask == null) { redisService.setCacheObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId, activityStartTime, startTimeDifference, TimeUnit.MILLISECONDS); startDelayTask = new DelayTask(); startDelayTask.setDelFlag(0); startDelayTask.setCreateTime(new Date()); startDelayTask.setEndTime(activityStartTime); startDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId); remoteConfigService.addDelayTask(startDelayTask); } // 查询延时任务 DelayTask endDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId).getData(); // 如果延时任务为空,创建延时任务控制活动定时开始和结束 if (endDelayTask == null) { redisService.setCacheObject(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId, activityEndTime, endTimeDifference, TimeUnit.MILLISECONDS); endDelayTask = new DelayTask(); endDelayTask.setDelFlag(0); endDelayTask.setCreateTime(new Date()); endDelayTask.setEndTime(activityEndTime); endDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId); remoteConfigService.addDelayTask(endDelayTask); } } } @@ -469,4 +503,63 @@ this.saveOrUpdate(activity); } } /** * @description 活动商品库存变化 * @author jqs * @date 2023/7/13 13:53 * @param * @return void */ @Override public void changeActivityTotal(ActivityTotalChangeDto activityTotalChangeDto){ RLock lock = redissonClient.getLock("activity_clock_"+activityTotalChangeDto.getActivityId()); try { lock.lock(30, TimeUnit.SECONDS); //判断活动商品是否售罄,是则停止活动 /*Integer noSellOut = activityMapper.checkSellOut(activityTotalChangeDto.getActivityId()); if(noSellOut==0){ endActivity(activityTotalChangeDto.getActivityId()); }*/ //更新活动统计 ActivityTotal activityTotal = activityTotalService.getById(activityTotalChangeDto.getActivityId()); if(activityTotalChangeDto.getChangeType()==1){ activityTotal.setOrderTotal(activityTotal.getOrderTotal()+activityTotalChangeDto.getChangeNum()); activityTotal.setPersonTotal(activityTotal.getPersonTotal()+activityTotalChangeDto.getPersonNum()); activityTotal.setOrderMoneyTotal(activityTotal.getOrderMoneyTotal().add(activityTotalChangeDto.getMoney())); }else{ activityTotal.setOrderTotal(activityTotal.getOrderTotal()-activityTotalChangeDto.getChangeNum()); activityTotal.setPersonTotal(activityTotal.getPersonTotal()-activityTotalChangeDto.getPersonNum()); activityTotal.setRefundTotal(activityTotal.getRefundTotal()+activityTotalChangeDto.getRefundNum()); activityTotal.setOrderMoneyTotal(activityTotal.getOrderMoneyTotal().subtract(activityTotalChangeDto.getMoney())); } activityTotalService.saveOrUpdate(activityTotal); } finally { lock.unlock(); } } /** * @description 活动商品库存变化 * @author jqs * @date 2023/7/13 13:53 * @param * @return void */ @Override public void changeActivityStock(AGStockChangeDto agStockChangeDto){ RLock lock = redissonClient.getLock("stock_clock_"+agStockChangeDto.getActivityId()+"_"+agStockChangeDto.getGoodsId()); try { lock.lock(30, TimeUnit.SECONDS); if(agStockChangeDto.getChangeType()==1){ activityMapper.addActivityGoodsStock(agStockChangeDto); }else{ //更新库存 activityMapper.subActivityGoodsStock(agStockChangeDto); } } finally { lock.unlock(); } } } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
@@ -566,6 +566,12 @@ // 设置销售百分比和时间戳 appSimpleActivityGoodsVo.setSalesPercent(salesPercent); appSimpleActivityGoodsVo.setTimestamp(appSimpleActivityGoodsVo.getEndTime().getTime()); //限购判断 if(appSimpleActivityGoodsVo.getPurchaseLimitationFlag()==1){ Integer buyNum = activityRecordService.getUserActivityGoodsNum(appSimpleActivityGoodsVo.getGoodsId(),appActivityGoodsPageDto.getActivityId(),appActivityGoodsPageDto.getUserId()); Integer limitBuyNum = appSimpleActivityGoodsVo.getLimitNumber() - buyNum; appSimpleActivityGoodsVo.setAvailableBuyNum(limitBuyNum); } } // 返回结果 return appSimpleGoodsVoList; ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml
@@ -126,13 +126,35 @@ ta.activity_end_time activityEndTime, CASE ta.activity_status WHEN 0 THEN '未开始' WHEN 1 THEN '进行中' WHEN 1 THEN '抢购中' WHEN 2 THEN '已结束' END activityStatus, ta.propaganda_poster propagandaPoster, ta.activity_introduce activityIntroduce FROM t_activity ta WHERE ta.del_flag = 0 AND FIND_IN_SET(#{shopId}, ta.applicable_shop) > 0 WHERE ta.del_flag = 0 AND (ta.shop_flag = 1 OR (ta.shop_flag = 2 AND FIND_IN_SET(#{shopId}, ta.applicable_shop) > 0)) group by ta.activity_id ORDER BY ta.activity_status ASC,ta.create_time DESC </select> <update id="addActivityGoodsStock"> UPDATE t_activity_goods SET sales_number = sales_number - #{param.changeNum}, sell_out_flag = 0, sell_out_time = NULL WHERE activity_id = #{param.activityId} AND goods_id = #{param.goodsId} </update> <update id="subActivityGoodsStock"> UPDATE t_activity_goods SET sales_number = sales_number + #{param.changeNum}, sell_out_flag = CASE WHEN sales_number + #{param.changeNum} = activity_number THEN 1 ELSE sell_out_flag END, sell_out_time = CASE WHEN sales_number + #{param.changeNum} = activity_number THEN NOW() ELSE sell_out_time END WHERE activity_id = #{param.activityId} AND goods_id = #{param.goodsId} AND sales_number + #{param.changeNum} <= activity_number </update> <select id="checkSellOut" resultType="java.lang.Integer"> SELECT COUNT(ag_id) FROM t_activity_goods WHERE del_flag = 0 AND activity_id = #{activityId} AND sell_out_flag = 0 </select> </mapper> ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
@@ -263,7 +263,7 @@ END goodsTag, IFNULL(tsg.sales_price,tg.sales_price) salesPrice, tgf.file_url goodsPicture, tg.goods_tags goodsNurses tg.goods_nurses goodsNurses FROM t_goods tg LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1 LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{param.shopId} @@ -290,7 +290,7 @@ GREATEST(tg.sales_price, IFNULL(tsg.sales_price, 0.00)) salesPrice, tag.activity_price activityPrice, tgf.file_url goodsPicture, tg.goods_tags goodsNurses, tg.goods_nurses goodsNurses, tag.activity_number activityNumber, tag.sales_number salesNumber, tag.activity_deadline endTime @@ -474,10 +474,12 @@ GREATEST(tg.sales_price, IFNULL(tsg.sales_price, 0.00)) salesPrice, tag.activity_price activityPrice, tgf.file_url goodsPicture, tg.goods_tags goodsNurses, tg.goods_nurses goodsNurses, tag.activity_number activityNumber, tag.sales_number salesNumber, tag.activity_deadline endTime tag.activity_deadline endTime, tag.purchase_limitation_flag purchaseLimitationFlag, tag.limit_number limitNumber FROM t_activity_goods tag INNER JOIN t_goods tg ON tg.goods_id = tag.goods_id LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java
@@ -99,4 +99,29 @@ return R.ok(); } /** * @description 使用优惠券 * @author jqs * @date 2023/7/13 19:38 * @param memberCouponIds * @return R */ @PostMapping("/useMemberCoupon") public R useMemberCoupon(@RequestBody String memberCouponIds){ memberCouponService.useMemberCoupon(memberCouponIds); return R.ok(); } /** * @description 使用优惠券 * @author jqs * @date 2023/7/13 19:38 * @param memberCouponIds * @return R */ @PostMapping("/backMemberCoupon") public R backMemberCoupon(@RequestBody String memberCouponIds){ memberCouponService.backMemberCoupon(memberCouponIds); return R.ok(); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberCouponMapper.java
@@ -46,4 +46,24 @@ * @return void */ void timingCheckMemberCoupon(); /** * @description 使用优惠券 * @author jqs * @date 2023/7/13 19:38 * @param memberCouponIds * @return void */ void useMemberCoupon(@Param("memberCouponIds")String memberCouponIds); /** * @description 使用优惠券 * @author jqs * @date 2023/7/13 19:38 * @param memberCouponIds * @return void */ void backMemberCoupon(@Param("memberCouponIds")String memberCouponIds); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java
@@ -190,4 +190,6 @@ * @return void */ void autoTimeSendCoupon(String couponId); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -1124,4 +1124,5 @@ memberCouponService.save(memberCoupon); memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -225,4 +225,28 @@ public void timingCheckMemberCoupon(){ memberCouponMapper.timingCheckMemberCoupon(); } /** * @description 使用优惠券 * @author jqs * @date 2023/7/13 19:38 * @param memberCouponIds * @return void */ @Override public void useMemberCoupon(String memberCouponIds){ memberCouponMapper.useMemberCoupon(memberCouponIds); } /** * @description 使用优惠券 * @author jqs * @date 2023/7/13 19:38 * @param memberCouponIds * @return void */ @Override public void backMemberCoupon(String memberCouponIds){ memberCouponMapper.backMemberCoupon(memberCouponIds); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1391,10 +1391,15 @@ } //消费变动 if (memberTotalChangeDto.getPayMoney() != null) { memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney())); memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() + 1); memberTotal.setLastPayMoney(memberTotalChangeDto.getPayMoney()); memberTotal.setLastPayTime(memberTotalChangeDto.getPayTime()); if(memberTotalChangeDto.getPayMoney().compareTo(BigDecimal.ZERO)>=0){ memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney())); memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() + 1); memberTotal.setLastPayMoney(memberTotalChangeDto.getPayMoney()); memberTotal.setLastPayTime(memberTotalChangeDto.getPayTime()); }else{ memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney())); memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() - 1); } } //服务次数变动 if (memberTotalChangeDto.getServiceCount() != null) { ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java
@@ -75,4 +75,22 @@ * @return void */ void timingCheckMemberCoupon(); /** * @description 使用优惠券 * @author jqs * @date 2023/7/13 19:38 * @param memberCouponIds * @return void */ void useMemberCoupon(String memberCouponIds); /** * @description 使用优惠券 * @author jqs * @date 2023/7/13 19:38 * @param memberCouponIds * @return void */ void backMemberCoupon(String memberCouponIds); } ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberCouponMapper.xml
@@ -189,8 +189,18 @@ </select> <update id="timingCheckMemberCoupon"> UPDATE t_member_coupon SET coupon_status = 0 UPDATE t_member_coupon SET coupon_status = 0 WHERE del_flag = 0 AND coupon_status = 1 AND deadline_time < CURDATE() </update> <update id="useMemberCoupon"> UPDATE t_member_coupon SET coupon_status = 2 WHERE del_flag = 0 AND coupon_status = 1 AND FIND_IN_SET(id, #{memberCouponIds}) > 0 </update> <update id="backMemberCoupon"> UPDATE t_member_coupon SET coupon_status = 1 WHERE del_flag = 0 AND coupon_status = 2 AND FIND_IN_SET(id, #{memberCouponIds}) > 0 </update> </mapper> ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java
@@ -107,5 +107,16 @@ return R.ok(); } /** * @description 自动取消订单 * @author jqs * @date 2023/7/13 17:15 * @param orderId * @return R */ @PostMapping("/autoCancelOrder") public R autoCancelOrder(@RequestBody String orderId){ orderService.autoCancelOrder(orderId); return R.ok(); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderRefund.java
@@ -1,15 +1,16 @@ package com.ruoyi.order.domain.pojo.account; import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.activerecord.Model; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; /** * <p> @@ -66,7 +67,7 @@ * 退款金额 */ @TableField("refund_money") private String refundMoney; private BigDecimal refundMoney; /** * 退款理由 */ @@ -76,7 +77,7 @@ * 订单金额 */ @TableField("order_money") private String orderMoney; private BigDecimal orderMoney; /** * 退款出资商户 REFUND_SOURCE_PARTNER_ADVANCE : 电商平台垫付,需要向微信支付申请开通 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java
@@ -165,7 +165,7 @@ * 活动id */ @TableField("activity_id") private Long activityId; private String activityId; /** * 活动名称 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -523,5 +523,13 @@ */ List<MgtShopAllOrderPageVo> pageMgtShopAllOrder(Page page, @Param("param")MgtShopAllOrderPageDto mgtShopAllOrderPageDto); /** * @description 统计用户活动参与次数 * @author jqs * @date 2023/7/13 18:27 * @param userId * @param activityId * @return Integer */ Integer countUserActivityByActivity(@Param("userId")Long userId, @Param("activityId")String activityId); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderGoodsServiceImpl.java
@@ -1,6 +1,7 @@ package com.ruoyi.order.service.impl.order; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.order.domain.pojo.order.OrderGoods; import com.ruoyi.order.domain.vo.AppUserOrderGoodsPageVo; @@ -50,4 +51,19 @@ public List<MgtOrderGoodsDetailVo> listMgtVoByOrderId(String orderId){ return orderGoodsMapper.listMgtVoByOrderId(orderId); } /** * @description * @author jqs * @date 2023/7/13 17:25 * @param orderId * @return List<OrderGoods> */ @Override public List<OrderGoods> listByOrderId(String orderId){ LambdaQueryWrapper<OrderGoods> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(OrderGoods::getDelFlag,0); queryWrapper.eq(OrderGoods::getOrderId,orderId); return this.list(queryWrapper); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -6,12 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.uuid.IdUtils; import com.ruoyi.common.redis.service.RedisService; 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.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; @@ -23,8 +25,10 @@ import com.ruoyi.order.service.order.OrderService; import com.ruoyi.order.service.order.UserServiceRecordService; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.constant.DelayTaskEnum; import com.ruoyi.system.api.constant.SecurityConstant; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.poji.config.DelayTask; import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.poji.goods.GoodsFile; import com.ruoyi.system.api.domain.poji.goods.ShopGoods; @@ -35,11 +39,15 @@ import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.service.*; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @@ -96,6 +104,9 @@ @Resource private RedisService redisService; @Autowired private RedissonClient redissonClient; /** * @description: buyGoods * @param: appSureOrderDto @@ -106,9 +117,12 @@ @Override public AppSureOrderVo buyGoods(AppSureOrderDto appSureOrderDto) { Long userId = appSureOrderDto.getUserId(); // 初始化订单对象 AppSureOrderVo appSureOrderVo = new AppSureOrderVo(); // 初始化订单商品列表 List<AppSureOrderGoodsVo> appSureOrderGoodsVoList = new ArrayList<>(); AppSureOrderGoodsVo appSureOrderGoodsVo; // 获取购买商品列表 List<AppBuyGoodsDto> appBuyGoodsDtoList = appSureOrderDto.getAppBuyGoodsDtoList(); String goodsId; Integer buyNum; @@ -118,8 +132,11 @@ BigDecimal goodsPrice; BigDecimal goodsTotalPrice; BigDecimal goodsRealPrice; // 获取用户优惠券列表 List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData(); // 初始化商品优惠券列表 List<AppMemberCouponVo> appGoodsMemberCouponVoList; // 将优惠券列表转换为Map,以优惠券ID为键 Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); AppMemberCouponVo appMemberCouponVo; Integer couponType; @@ -129,27 +146,31 @@ BigDecimal goodsDeposit; GoodsFile goodsFile; Integer useCoupon; // 初始化订单相关金额 BigDecimal orderGoodsMoney = new BigDecimal("0.00"); BigDecimal couponDiscount = new BigDecimal("0.00"); BigDecimal orderPayDeposit = new BigDecimal("0.00"); BigDecimal orderPayMoney = new BigDecimal("0.00"); // 遍历购买商品列表 for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { appSureOrderGoodsVo = new AppSureOrderGoodsVo(); useCoupon = 0; goodsId = appBuyGoodsDto.getGoodsId(); buyNum = appBuyGoodsDto.getBuyNum(); memberCouponId = appBuyGoodsDto.getMemberCouponId(); // 获取商品信息 goods = remoteGoodsService.getGoods(goodsId).getData(); // 设置订单商品信息 appSureOrderGoodsVo.setGoodsId(goodsId); appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction()); appSureOrderGoodsVo.setGoodsType(goods.getGoodsType()); //商品图片 // 获取商品图片 goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl()); appSureOrderGoodsVo.setBuyNum(buyNum); goodsPrice = goods.getSalesPrice(); //商户定制价格 // 获取商户定制价格 AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto(); appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); appShopGoodsGetDto.setShopId(appSureOrderDto.getShopId()); @@ -161,6 +182,7 @@ buyNumBig = BigDecimal.valueOf(buyNum); goodsTotalPrice = goodsPrice.multiply(buyNumBig); goodsRealPrice = goodsTotalPrice; // 处理优惠券 if (memberCouponId != null) { appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId); if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) { @@ -193,28 +215,45 @@ goodsDeposit = new BigDecimal("0.00"); } appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit); // 计算订单总金额 orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice); couponDiscount = couponDiscount.add(discountMoney); orderPayDeposit = orderPayDeposit.add(goodsDeposit); orderPayMoney = orderPayMoney.add(goodsRealPrice); //商品关联优惠券 // 获取商品关联优惠券 appGoodsMemberCouponVoList = new ArrayList<>(); if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { for (AppMemberCouponVo entity : appMemberCouponVoList) { if (StringUtils.isBlank(entity.getRelGoodsIds())) { appGoodsMemberCouponVoList.add(entity); if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) { moneyThreshold = entity.getMoneyThreshold(); if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { appGoodsMemberCouponVoList.add(entity); } }else{ appGoodsMemberCouponVoList.add(entity); } } else if (entity.getRelGoodsIds().contains(goodsId)) { appGoodsMemberCouponVoList.add(entity); if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) { moneyThreshold = entity.getMoneyThreshold(); if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { appGoodsMemberCouponVoList.add(entity); } }else{ appGoodsMemberCouponVoList.add(entity); } } } appSureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); } appSureOrderGoodsVoList.add(appSureOrderGoodsVo); } // 设置订单相关金额 appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney); appSureOrderVo.setCouponDiscount(couponDiscount); appSureOrderVo.setOrderPayDeposit(orderPayDeposit); appSureOrderVo.setOrderPayMoney(orderPayMoney); // 设置订单商品列表 appSureOrderVo.setAppSureOrderGoodsVoList(appSureOrderGoodsVoList); return appSureOrderVo; } @@ -348,6 +387,8 @@ String orderGoodsId; // 创建商品类型集合,用于记录订单中所有商品的类型 HashSet<String> goodsTypeSet = new HashSet<>(); //使用优惠券 StringJoiner memberCouponSJ = new StringJoiner(","); // 遍历购买的商品列表 for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { appSureOrderGoodsVo = new AppSureOrderGoodsVo(); @@ -411,6 +452,7 @@ useCoupon = 1; } } memberCouponSJ.add(memberCouponId); } appSureOrderGoodsVo.setUseCoupon(useCoupon); appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); @@ -511,6 +553,22 @@ appPlaceOrderVo.setOrderId(orderId); appPlaceOrderVo.setOrderNo(orderNo); // 调用支付 //使用优惠券 if(memberCouponSJ!=null){ remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); } //生成自动取消订单延时任务 Integer delayTime = 30; if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); } redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES); DelayTask delayTask = new DelayTask(); delayTask.setDelFlag(0); delayTask.setCreateTime(new Date()); delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime)); delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); remoteConfigService.addDelayTask(delayTask); return appPlaceOrderVo; } @@ -533,11 +591,18 @@ String goodsId = appPlaceActivityDto.getGoodsId(); Integer buyNum = appPlaceActivityDto.getBuyNum(); //redis库存控制极简版 Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId); if(surpNum==null||surpNum<buyNum){ throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); }else{ redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId,surpNum-buyNum); String goodsLock = "goods_lock_"+activityId+"_"+goodsId; RLock redissonLock = redissonClient.getLock(goodsLock); try{ redissonLock.lock(30, TimeUnit.SECONDS); Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId); if(surpNum==null||surpNum<buyNum){ throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); }else{ redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId,surpNum-buyNum); } }finally{ redissonLock.unlock(); } // 定义购买数量,服务数量,商品数量 BigDecimal buyNumBig; @@ -665,7 +730,7 @@ order.setDelFlag(0); order.setOrderStatus(1); order.setOrderNo(orderNo); order.setOrderFrom(1); order.setOrderFrom(2); order.setShopId(appPlaceActivityDto.getShopId()); order.setUserId(userId); order.setOrderMoney(orderGoodsMoney); @@ -705,7 +770,28 @@ // 设置订单ID和订单号 appPlaceOrderVo.setOrderId(orderId); appPlaceOrderVo.setOrderNo(orderNo); //改变活动库存 AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); agStockChangeDto.setActivityId(activityId); agStockChangeDto.setGoodsId(goodsId); agStockChangeDto.setChangeType(2); agStockChangeDto.setChangeNum(buyNum); agStockChangeDto.setShopId(order.getShopId()); agStockChangeDto.setUserId(order.getUserId()); remoteActivityService.changeActivityStock(agStockChangeDto); // 调用支付 //生成自动取消订单延时任务 Integer delayTime = 30; if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); } redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES); DelayTask delayTask = new DelayTask(); delayTask.setDelFlag(0); delayTask.setCreateTime(new Date()); delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime)); delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); remoteConfigService.addDelayTask(delayTask); return appPlaceOrderVo; } @@ -790,12 +876,13 @@ @Override public void cancelOrder(String orderId) { Order order = this.getById(orderId); if (order.getOrderStatus() != 1) { if (order.getOrderStatus() == 1) { this.autoCancelOrder(orderId); }else if(order.getOrderStatus() == 2){ this.refundOrder(orderId); }else{ throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER); } order.setOrderStatus(0); order.setCancelTime(new Date()); this.saveOrUpdate(order); } /** @@ -1428,6 +1515,7 @@ } ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); shopTotalChangeDto.setShopId(order.getShopId()); shopTotalChangeDto.setOrderType(1); shopTotalChangeDto.setCycleMoney(cycleMoney); shopTotalChangeDto.setServiceMoney(serviceMoney); shopTotalChangeDto.setExperienceMoney(experienceMoney); @@ -2802,4 +2890,314 @@ } return shopAllOrderPageVoList; } /** * @description 自动取消订单 * @author jqs * @date 2023/7/13 17:15 * @param orderId * @return void */ @Override public void autoCancelOrder(String orderId){ //更新订单信息 Order order = this.getById(orderId); order.setOrderStatus(0); order.setCancelTime(new Date()); this.saveOrUpdate(order); //活动订单回退库存 if(order.getOrderFrom()==2){ List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ for(OrderGoods orderGoods : orderGoodsList){ //redis库存控制极简版 String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); RLock redissonLock = redissonClient.getLock(goodsLock); try{ redissonLock.lock(30, TimeUnit.SECONDS); Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); }finally{ redissonLock.unlock(); } //改变活动库存 AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); agStockChangeDto.setActivityId(order.getActivityId()); agStockChangeDto.setGoodsId(orderGoods.getGoodsId()); agStockChangeDto.setChangeType(1); agStockChangeDto.setChangeNum(orderGoods.getBuyNum()); agStockChangeDto.setShopId(order.getShopId()); agStockChangeDto.setUserId(order.getUserId()); remoteActivityService.changeActivityStock(agStockChangeDto); } } }else{ if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){ //回退优惠券 List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) { StringJoiner memberCouponSJ = new StringJoiner(","); for (OrderGoods orderGoods : orderGoodsList) { memberCouponSJ.add(orderGoods.getCouponId()); } if(memberCouponSJ!=null){ remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); } } } } } /** * @description 订单支付回调 * @author jqs * @date 2023/7/13 17:57 * @param orderId * @return void */ @Override public void payBack(String orderId) { // 更新订单状态 Order order = this.getById(orderId); order.setOrderStatus(2); order.setPayTime(new Date()); this.saveOrUpdate(order); // 初始化各类商品的收款金额 BigDecimal cycleMoney = new BigDecimal("0.00"); BigDecimal experienceMoney = new BigDecimal("0.00"); BigDecimal serviceMoney = new BigDecimal("0.00"); BigDecimal goodsMoney = new BigDecimal("0.00"); // 初始化各类商品的存在状态 Boolean haveCycle = false; Boolean haveService = false; Boolean haveExperience = false; Boolean haveGoods = false; // 获取订单中的所有商品 List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); // 遍历订单中的所有商品,根据商品类型累加收款金额,并标记商品存在状态 for (OrderGoods orderGoods : orderGoodsList) { switch (orderGoods.getGoodsType()) { case 1: cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); haveCycle = true; break; case 2: serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney()); haveService = true; break; case 3: experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney()); haveExperience = true; break; case 4: goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney()); haveGoods = true; break; default: break; } } // 更新商户统计信息 ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); shopTotalChangeDto.setShopId(order.getShopId()); shopTotalChangeDto.setOrderType(1); shopTotalChangeDto.setCycleMoney(cycleMoney); shopTotalChangeDto.setServiceMoney(serviceMoney); shopTotalChangeDto.setExperienceMoney(experienceMoney); shopTotalChangeDto.setGoodsMoney(goodsMoney); remoteShopService.changeShopTotal(shopTotalChangeDto); // 初始化会员统计信息 MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); memberTotalChangeDto.setUserId(order.getUserId()); // 如果存在积分兑换比例,则计算积分 if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()); Integer integral = Integer.valueOf(integralBig.toString()); memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(1); } // 设置会员支付金额和支付时间 memberTotalChangeDto.setPayMoney(order.getPayMoney()); memberTotalChangeDto.setPayTime(new Date()); // 根据商品存在状态,设置会员统计信息 if (haveCycle) { memberTotalChangeDto.setCycleOrderChange(1); } if (haveService) { memberTotalChangeDto.setServiceOrderChange(1); } if (haveExperience) { memberTotalChangeDto.setExperienceOrderChange(1); } if (haveGoods) { memberTotalChangeDto.setGoodsOrderChange(1); } // 更新会员统计信息 remoteMemberService.changeMemberTotal(memberTotalChangeDto); // 如果订单来源于活动,则更新活动统计信息 if (order.getOrderFrom() == 2) { ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto(); activityTotalChangeDto.setActivityId(order.getActivityId()); activityTotalChangeDto.setChangeType(1); activityTotalChangeDto.setChangeNum(1); activityTotalChangeDto.setMoney(order.getPayMoney()); Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId()); if (userActivityNum == 1) { activityTotalChangeDto.setPersonNum(1); } else { activityTotalChangeDto.setPersonNum(0); } activityTotalChangeDto.setUserId(order.getUserId()); remoteActivityService.changeActivityTotal(activityTotalChangeDto); } } /** * @description 订单退款 * @author jqs * @date 2023/7/13 18:36 * @param orderId * @return void */ @Override public void refundOrder(String orderId){ //更新订单信息 Order order = this.getById(orderId); order.setOrderStatus(0); order.setCancelTime(new Date()); this.saveOrUpdate(order); OrderRefund orderRefund = new OrderRefund(); String refundId = IdUtils.simpleUUID(); orderRefund.setRefundId(refundId); orderRefund.setDelFlag(0); orderRefund.setRefundType(1); orderRefund.setOrderId(order.getOrderId()); orderRefund.setUserId(order.getUserId()); orderRefund.setShopId(order.getShopId()); orderRefund.setRefundMoney(order.getPayMoney()); orderRefund.setOrderMoney(order.getPayMoney()); orderRefund.setCreateTime(new Date()); // 初始化各类商品的收款金额 BigDecimal cycleMoney = new BigDecimal("0.00"); BigDecimal experienceMoney = new BigDecimal("0.00"); BigDecimal serviceMoney = new BigDecimal("0.00"); BigDecimal goodsMoney = new BigDecimal("0.00"); // 初始化各类商品的存在状态 Boolean haveCycle = false; Boolean haveService = false; Boolean haveExperience = false; Boolean haveGoods = false; List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ StringJoiner memberCouponSJ = new StringJoiner(","); for(OrderGoods orderGoods : orderGoodsList){ if(order.getOrderFrom()==2){ //redis库存控制极简版 //活动订单回退库存 String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); RLock redissonLock = redissonClient.getLock(goodsLock); try{ redissonLock.lock(30, TimeUnit.SECONDS); Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); }finally{ redissonLock.unlock(); } //改变活动库存 AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); agStockChangeDto.setActivityId(order.getActivityId()); agStockChangeDto.setGoodsId(orderGoods.getGoodsId()); agStockChangeDto.setChangeType(1); agStockChangeDto.setChangeNum(orderGoods.getBuyNum()); agStockChangeDto.setShopId(order.getShopId()); agStockChangeDto.setUserId(order.getUserId()); remoteActivityService.changeActivityStock(agStockChangeDto); }else{ memberCouponSJ.add(orderGoods.getCouponId()); } switch (orderGoods.getGoodsType()) { case 1: cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); haveCycle = true; break; case 2: serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney()); haveService = true; break; case 3: experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney()); haveExperience = true; break; case 4: goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney()); haveGoods = true; break; default: break; } } //回退优惠券 if(memberCouponSJ!=null){ remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); } } // 更新商户统计信息 ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); shopTotalChangeDto.setOrderType(2); shopTotalChangeDto.setShopId(order.getShopId()); shopTotalChangeDto.setCycleMoney(cycleMoney); shopTotalChangeDto.setServiceMoney(serviceMoney); shopTotalChangeDto.setExperienceMoney(experienceMoney); shopTotalChangeDto.setGoodsMoney(goodsMoney); remoteShopService.changeShopTotal(shopTotalChangeDto); // 初始化会员统计信息 MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); memberTotalChangeDto.setUserId(order.getUserId()); // 如果存在积分兑换比例,则计算积分 /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()); Integer integral = Integer.valueOf(integralBig.toString()); memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(2); }*/ // 设置会员支付金额和支付时间 memberTotalChangeDto.setPayMoney(order.getPayMoney().negate()); // 根据商品存在状态,设置会员统计信息 if (haveCycle) { memberTotalChangeDto.setCycleOrderChange(-1); } if (haveService) { memberTotalChangeDto.setServiceOrderChange(-1); } if (haveExperience) { memberTotalChangeDto.setExperienceOrderChange(-1); } if (haveGoods) { memberTotalChangeDto.setGoodsOrderChange(-1); } // 更新会员统计信息 remoteMemberService.changeMemberTotal(memberTotalChangeDto); // 如果订单来源于活动,则更新活动统计信息 if (order.getOrderFrom() == 2) { ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto(); activityTotalChangeDto.setActivityId(order.getActivityId()); activityTotalChangeDto.setChangeType(2); activityTotalChangeDto.setChangeNum(1); activityTotalChangeDto.setRefundNum(1); activityTotalChangeDto.setMoney(order.getPayMoney()); Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId()); if (userActivityNum > 0) { activityTotalChangeDto.setPersonNum(1); } else { activityTotalChangeDto.setPersonNum(0); } activityTotalChangeDto.setUserId(order.getUserId()); remoteActivityService.changeActivityTotal(activityTotalChangeDto); } } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderGoodsService.java
@@ -34,4 +34,13 @@ * @return List<MgtOrderGoodsDetailVo> */ List<MgtOrderGoodsDetailVo> listMgtVoByOrderId(String orderId); /** * @description * @author jqs * @date 2023/7/13 17:25 * @param orderId * @return List<OrderGoods> */ List<OrderGoods> listByOrderId(String orderId); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -398,4 +398,28 @@ * @return List<MgtShopAllOrderPageVo> */ List<MgtShopAllOrderPageVo> pageMgtShopAllOrder(Page page, MgtShopAllOrderPageDto mgtShopAllOrderPageDto); /** * @description 自动取消订单 * @author jqs * @date 2023/7/13 17:15 * @param orderId * @return void */ void autoCancelOrder(String orderId); /** * @description 订单支付回调 * @author jqs * @date 2023/7/13 17:57 * @param orderId * @return void */ void payBack(String orderId); /** * 取消订单 * @param orderId */ void refundOrder(String orderId); } ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -1456,4 +1456,11 @@ </if> ORDER BY toc.create_time DESC </select> <select id="countUserActivityByActivity" resultType="java.lang.Integer"> SELECT COUNT(order_id) FROM t_order WHERE del_flag = 0 AND order_from =2 AND user_id = #{userId} AND activity_id = #{activityId} AND order_status > 0 </select> </mapper> ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java
@@ -5,15 +5,15 @@ import com.ruoyi.shop.mapper.shop.ShopTotalMapper; import com.ruoyi.shop.service.shop.ShopTotalService; import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.TimeUnit; /** * <p> @@ -26,8 +26,9 @@ @Service public class ShopTotalServiceImpl extends ServiceImpl<ShopTotalMapper, ShopTotal> implements ShopTotalService { private Lock lock = new ReentrantLock(); private ExecutorService executor = Executors.newSingleThreadExecutor(); @Autowired private RedissonClient redissonClient; @Resource private ShopTotalMapper shopTotalMapper; @@ -39,14 +40,14 @@ */ @Override public void changeShopTotal(ShopTotalChangeDto shopTotalChangeDto) { executor.execute(() -> { lock.lock(); try { handleShopTotal(shopTotalChangeDto); } finally { lock.unlock(); } }); //redis库存控制极简版 RLock redissonLock = redissonClient.getLock("shop_total_"+shopTotalChangeDto.getShopId()); try{ redissonLock.lock(30, TimeUnit.SECONDS); handleShopTotal(shopTotalChangeDto); }finally{ redissonLock.unlock(); } } @Override @@ -59,34 +60,52 @@ ShopTotal shopTotal = this.getById(shopTotalChangeDto.getShopId()); //订单变化 BigDecimal payMoney = BigDecimal.ZERO; Boolean haveOrder = false; if(shopTotalChangeDto.getCycleMoney()!=null){ shopTotal.setTotalCycleMoney(shopTotal.getTotalCycleMoney().add(shopTotalChangeDto.getCycleMoney())); payMoney = payMoney.add(shopTotalChangeDto.getCycleMoney()); shopTotal.setTotalCycleOrder(shopTotal.getTotalCycleOrder()+1); haveOrder = true; } if(shopTotalChangeDto.getExperienceMoney()!=null){ shopTotal.setTotalExperienceMoney(shopTotal.getTotalExperienceMoney().add(shopTotalChangeDto.getExperienceMoney())); payMoney = payMoney.add(shopTotalChangeDto.getExperienceMoney()); shopTotal.setTotalExperienceOrder(shopTotal.getTotalExperienceOrder()+1); haveOrder = true; } if(shopTotalChangeDto.getServiceMoney()!=null){ shopTotal.setTotalServiceMoney(shopTotal.getTotalServiceMoney().add(shopTotalChangeDto.getServiceMoney())); payMoney = payMoney.add(shopTotalChangeDto.getServiceMoney()); shopTotal.setTotalServiceOrder(shopTotal.getTotalServiceOrder()+1); haveOrder = true; } if(shopTotalChangeDto.getGoodsMoney()!=null){ shopTotal.setTotalGoodsMoney(shopTotal.getTotalGoodsMoney().add(shopTotalChangeDto.getGoodsMoney())); payMoney = payMoney.add(shopTotalChangeDto.getGoodsMoney()); shopTotal.setTotalGoodsOrder(shopTotal.getTotalGoodsOrder()+1); haveOrder = true; } if(haveOrder){ if(shopTotalChangeDto.getOrderType()==1){ if(shopTotalChangeDto.getCycleMoney()!=null){ shopTotal.setTotalCycleMoney(shopTotal.getTotalCycleMoney().add(shopTotalChangeDto.getCycleMoney())); payMoney = payMoney.add(shopTotalChangeDto.getCycleMoney()); shopTotal.setTotalCycleOrder(shopTotal.getTotalCycleOrder()+1); } if(shopTotalChangeDto.getExperienceMoney()!=null){ shopTotal.setTotalExperienceMoney(shopTotal.getTotalExperienceMoney().add(shopTotalChangeDto.getExperienceMoney())); payMoney = payMoney.add(shopTotalChangeDto.getExperienceMoney()); shopTotal.setTotalExperienceOrder(shopTotal.getTotalExperienceOrder()+1); } if(shopTotalChangeDto.getServiceMoney()!=null){ shopTotal.setTotalServiceMoney(shopTotal.getTotalServiceMoney().add(shopTotalChangeDto.getServiceMoney())); payMoney = payMoney.add(shopTotalChangeDto.getServiceMoney()); shopTotal.setTotalServiceOrder(shopTotal.getTotalServiceOrder()+1); } if(shopTotalChangeDto.getGoodsMoney()!=null){ shopTotal.setTotalGoodsMoney(shopTotal.getTotalGoodsMoney().add(shopTotalChangeDto.getGoodsMoney())); payMoney = payMoney.add(shopTotalChangeDto.getGoodsMoney()); shopTotal.setTotalGoodsOrder(shopTotal.getTotalGoodsOrder()+1); } shopTotal.setTotalOrderMoney(shopTotal.getTotalOrderMoney().add(payMoney)); shopTotal.setTotalOrder(shopTotal.getTotalOrder()+1); }else{ if(shopTotalChangeDto.getCycleMoney()!=null){ shopTotal.setTotalCycleMoney(shopTotal.getTotalCycleMoney().subtract(shopTotalChangeDto.getCycleMoney())); payMoney = payMoney.add(shopTotalChangeDto.getCycleMoney()); shopTotal.setTotalCycleOrder(shopTotal.getTotalCycleOrder()-1); } if(shopTotalChangeDto.getExperienceMoney()!=null){ shopTotal.setTotalExperienceMoney(shopTotal.getTotalExperienceMoney().subtract(shopTotalChangeDto.getExperienceMoney())); payMoney = payMoney.add(shopTotalChangeDto.getExperienceMoney()); shopTotal.setTotalExperienceOrder(shopTotal.getTotalExperienceOrder()-1); } if(shopTotalChangeDto.getServiceMoney()!=null){ shopTotal.setTotalServiceMoney(shopTotal.getTotalServiceMoney().subtract(shopTotalChangeDto.getServiceMoney())); payMoney = payMoney.add(shopTotalChangeDto.getServiceMoney()); shopTotal.setTotalServiceOrder(shopTotal.getTotalServiceOrder()-1); } if(shopTotalChangeDto.getGoodsMoney()!=null){ shopTotal.setTotalGoodsMoney(shopTotal.getTotalGoodsMoney().subtract(shopTotalChangeDto.getGoodsMoney())); payMoney = payMoney.add(shopTotalChangeDto.getGoodsMoney()); shopTotal.setTotalGoodsOrder(shopTotal.getTotalGoodsOrder()-1); } shopTotal.setTotalOrderMoney(shopTotal.getTotalOrderMoney().subtract(payMoney)); shopTotal.setTotalOrder(shopTotal.getTotalOrder()-1); } //活动变化 if(shopTotalChangeDto.getActivityCount()!=null){ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java
@@ -335,6 +335,13 @@ return R.ok(); } @RequestMapping(value = "/listOperTitle", method = RequestMethod.POST) @ApiOperation(value = "获取操作类型列表") public R<List<String>> pageOperLog() { List<String> operTitleList = customConfigService.listOperTitle(); return R.ok(operTitleList); } @RequestMapping(value = "/pageOperLog", method = RequestMethod.POST) @ApiOperation(value = "分页获取操作日志") public R<Page<MgtOperLogPageVo>> pageOperLog(@RequestBody MgtOperLogPageDto mgtOperLogPageDto) { @@ -421,6 +428,14 @@ return R.ok(page.setRecords(mgtArticlePageVoList)); } @RequestMapping(value = "/getArticle", method = RequestMethod.POST) @ApiOperation(value = "获取文章") public R<MgtArticleGetVo> getArticle(@RequestBody MgtBaseGetDto mgtBaseGetDto) { mgtBaseGetDto.setUserId(SecurityUtils.getUserId()); MgtArticleGetVo mgtArticleGetVo = articleService.getArticle(Long.valueOf(mgtBaseGetDto.getId())); return R.ok(mgtArticleGetVo); } @RequestMapping(value = "/editArticle", method = RequestMethod.POST) @Log(title = "文章管理", businessType = BusinessType.UPDATE,operContent = "修改文章") @ApiOperation(value = "修改文章") ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppConfigController.java
@@ -1,9 +1,15 @@ package com.ruoyi.system.controller.miniapp; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; import com.ruoyi.system.domain.dto.AppAgreementDto; import com.ruoyi.system.domain.vo.AppAgreementVo; import com.ruoyi.system.domain.dto.AppArticlePageDto; import com.ruoyi.system.domain.vo.*; import com.ruoyi.system.service.config.AgreementService; import com.ruoyi.system.service.config.ArticleService; import com.ruoyi.system.service.config.SysClassificationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.RequestBody; @@ -12,6 +18,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; /** * @author jqs34 @@ -29,6 +36,12 @@ @Resource private AgreementService agreementService; @Resource private SysClassificationService sysClassificationService; @Resource private ArticleService articleService; @RequestMapping(value = "/getAppAgreement", method = RequestMethod.POST) @ApiOperation(value = "获取协议") @@ -37,5 +50,29 @@ return R.ok(appAgreementVo); } @RequestMapping(value = "/listArticleClass", method = RequestMethod.POST) @ApiOperation(value = "获取文章分类") public R<List<AppClassListVo>> listArticleClass(){ List<AppClassListVo> classVoList = sysClassificationService.listByType(1); return R.ok(classVoList); } @RequestMapping(value = "/listArticleByClass", method = RequestMethod.POST) @ApiOperation(value = "通过分类获取文章列表") public R<Page<AppArticlePageVo>> listArticleByClass(@RequestBody AppArticlePageDto appArticlePageDto){ Page<AppArticlePageVo> page = new Page<>(); page.setSize(appArticlePageDto.getPageSize()); page.setCurrent(appArticlePageDto.getPageNum()); List<AppArticlePageVo> appClassListVoList = articleService.listArticleByClass(page, appArticlePageDto.getClassId()); return R.ok(page.setRecords(appClassListVoList)); } @RequestMapping(value = "/getArticle", method = RequestMethod.POST) @ApiOperation(value = "获取文章") public R<AppArticleGetVo> getArticle(@RequestBody MgtBaseGetDto mgtBaseGetDto) { mgtBaseGetDto.setUserId(SecurityUtils.getUserId()); AppArticleGetVo appArticleGetVo = articleService.getAppArticle(Long.valueOf(mgtBaseGetDto.getId())); return R.ok(appArticleGetVo); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AppArticlePageDto.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.system.domain.dto; import com.ruoyi.system.api.domain.dto.AppPageDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName AppArticlePageDto * @Description TODO * @Author jqs * @Date 2023/7/13 11:28 * @Version 1.0 */ @Data public class AppArticlePageDto extends AppPageDto { @ApiModelProperty(value = "分类id") private Long classId; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtArticleEditDto.java
@@ -26,6 +26,9 @@ @ApiModelProperty(value = "文章标题") private String articleTitle; @ApiModelProperty(value = "文章简介") private String articleIntroduce; @ApiModelProperty(value = "文章详情") private String articleDetail; ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Article.java
@@ -89,6 +89,9 @@ @TableField("update_user_id") private Long updateUserId; @TableField("article_introduce") private String articleIntroduce; @Override protected Serializable pkVal() { ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppArticleGetVo.java
New file @@ -0,0 +1,34 @@ package com.ruoyi.system.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName AppArticleGetVo * @Description TODO * @Author jqs * @Date 2023/7/13 11:56 * @Version 1.0 */ @Data public class AppArticleGetVo { @ApiModelProperty(value = "文章id") private Long articleId; @ApiModelProperty(value = "文章标题") private String articleTitle; @ApiModelProperty(value = "文章简介") private String articleIntroduce; @ApiModelProperty(value = "文章详情") private String articleDetail; @ApiModelProperty(value = "文章封面") private String articleCover; @ApiModelProperty(value = "文章视频") private String articleVideo; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppArticlePageVo.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.system.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName AppArticlePageVo * @Description TODO * @Author jqs * @Date 2023/7/13 11:35 * @Version 1.0 */ @Data public class AppArticlePageVo { @ApiModelProperty(value = "文章id") private Long articleId; @ApiModelProperty(value = "文章标题") private String articleTitle; @ApiModelProperty(value = "文章简介") private String articleIntroduce; @ApiModelProperty(value = "文章封面") private String articleCover; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppClassListVo.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.system.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName AppClassListVo * @Description TODO * @Author jqs * @Date 2023/7/13 11:19 * @Version 1.0 */ @Data public class AppClassListVo { @ApiModelProperty(value = "分类id") private Long classId; @ApiModelProperty(value = "分类名字") private String className; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticleGetVo.java
New file @@ -0,0 +1,41 @@ package com.ruoyi.system.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName MgtArticleGetVo * @Description TODO * @Author jqs * @Date 2023/7/13 10:58 * @Version 1.0 */ @Data public class MgtArticleGetVo { @ApiModelProperty(value = "文章id") private Long articleId; @ApiModelProperty(value = "文章分类id") private Long classId; @ApiModelProperty(value = "文章排序") private Integer articleSort; @ApiModelProperty(value = "文章标题") private String articleTitle; @ApiModelProperty(value = "文章简介") private String articleIntroduce; @ApiModelProperty(value = "文章详情") private String articleDetail; @ApiModelProperty(value = "文章封面") private String articleCover; @ApiModelProperty(value = "文章视频") private String articleVideo; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticlePageVo.java
@@ -27,9 +27,12 @@ @ApiModelProperty(value = "文章标题") private String articleTitle; @ApiModelProperty(value = "文章简介") private String articleIntroduce; @ApiModelProperty(value = "文章封面") private String articleCover; @ApiModelProperty(value = "文章标题") @ApiModelProperty(value = "创建时间") private Date createTime; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java
@@ -4,8 +4,10 @@ import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.system.api.constant.DelayTaskEnum; import com.ruoyi.system.api.service.RemoteActivityService; import com.ruoyi.system.api.service.RemoteConfigService; import com.ruoyi.system.api.service.RemoteCouponService; import com.ruoyi.system.api.service.RemoteOrderService; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.core.RedisTemplate; @@ -33,6 +35,10 @@ private RemoteCouponService remoteCouponService; private RemoteActivityService remoteActivityService; private RemoteOrderService remoteOrderService; public RedisListener(RedisMessageListenerContainer listenerContainer, RedisTemplate redisTemplate) { super(listenerContainer); @@ -51,9 +57,19 @@ String[] split = expiredKey.split("-"); String operation=split[0]; if(DelayTaskEnum.COUPON_SEND_DELAY_TASK.getCode().equals(operation)){ //自动关闭订单 //自动发送优惠券 autoTimeSendCoupon(split[1]); }else if(DelayTaskEnum.ACTIVITY_START_TASK.getCode().equals(operation)){ //自动开始任务 autoStartActivity(split[1]); }else if(DelayTaskEnum.ACTIVITY_END_TASK.getCode().equals(operation)){ //自动结束任务 autoEndActivity(split[1]); }else if(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode().equals(operation)){ //自动结束任务 autoCancelOrder(split[1]); } //删除失效的key redisTemplate.delete(expiredKey); } @@ -83,5 +99,24 @@ remoteConfigService.deleteDelayTask(DelayTaskEnum.COUPON_SEND_DELAY_TASK.getCode()+"-"+couponId); } private void autoStartActivity(String activityId){ log.info("autoStartActivity scheduler task is running :" + activityId); remoteActivityService.startActivity(activityId); //删除定时任务 remoteConfigService.deleteDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode()+"-"+activityId); } private void autoEndActivity(String activityId){ log.info("autoEndActivity scheduler task is running :" + activityId); remoteActivityService.endActivity(activityId); //删除定时任务 remoteConfigService.deleteDelayTask(DelayTaskEnum.ACTIVITY_END_TASK.getCode()+"-"+activityId); } private void autoCancelOrder(String orderId){ log.info("autoCancelOrder scheduler task is running :" + orderId); remoteOrderService.autoCancelOrder(orderId); //删除定时任务 remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+orderId); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/ArticleMapper.java
@@ -1,9 +1,10 @@ package com.ruoyi.system.mapper.config; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.system.domain.dto.MgtArticlePageDto; import com.ruoyi.system.domain.pojo.config.Article; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.domain.vo.AppArticlePageVo; import com.ruoyi.system.domain.vo.MgtArticlePageVo; import org.apache.ibatis.annotations.Param; @@ -37,4 +38,14 @@ * @return List<MgtArticlePageVo> */ List<MgtArticlePageVo> pageArticle(Page page,@Param("param") MgtArticlePageDto mgtArticlePageDto); /** * @description 通过分类id获取文章 * @author jqs * @date 2023/7/13 11:37 * @param classId * @return List<AppClassListVo> */ List<AppArticlePageVo> listArticleByClass(Page page, @Param("classId")Long classId); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/CustomConfigMapper.java
@@ -37,4 +37,13 @@ * @return List<MgtOperLogPageVo> */ List<MgtOperLogPageVo> pageOperLog(Page page, MgtOperLogPageDto mgtOperLogPageDto); /** * @description * @author jqs * @date 2023/7/13 15:52 * @param * @return List<String> */ List<String> listOperTitle(); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ArticleService.java
@@ -6,6 +6,9 @@ import com.ruoyi.system.domain.dto.MgtArticleEditDto; import com.ruoyi.system.domain.dto.MgtArticlePageDto; import com.ruoyi.system.domain.pojo.config.Article; import com.ruoyi.system.domain.vo.AppArticleGetVo; import com.ruoyi.system.domain.vo.AppArticlePageVo; import com.ruoyi.system.domain.vo.MgtArticleGetVo; import com.ruoyi.system.domain.vo.MgtArticlePageVo; import java.util.List; @@ -56,4 +59,32 @@ * @return void */ void deleteArticle(MgtBaseGetDto mgtBaseGetDto); /** * @description 获取文章 * @author jqs * @date 2023/7/13 11:00 * @param articleId * @return MgtArticleGetVo */ MgtArticleGetVo getArticle(Long articleId); /** * @description 通过分类id获取文章 * @author jqs * @date 2023/7/13 11:37 * @param classId * @return List<AppClassListVo> */ List<AppArticlePageVo> listArticleByClass(Page page, Long classId); /** * @description * @author jqs * @date 2023/7/13 11:57 * @param articleId * @return AppArticleGetVo */ AppArticleGetVo getAppArticle (Long articleId); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java
@@ -87,6 +87,15 @@ List<MgtOperLogPageVo> pageOperLog(Page page, MgtOperLogPageDto mgtOperLogPageDto); /** * @description * @author jqs * @date 2023/7/13 15:53 * @param * @return List<String> */ List<String> listOperTitle(); /** * @description 获取单个自定义配置 * @author jqs * @date 2023/6/9 15:40 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/SysClassificationService.java
@@ -5,6 +5,7 @@ import com.ruoyi.system.api.domain.poji.config.SysClassification; import com.ruoyi.system.domain.dto.MgtClassificationEditDto; import com.ruoyi.system.domain.dto.MgtClassificationPageDto; import com.ruoyi.system.domain.vo.AppClassListVo; import com.ruoyi.system.domain.vo.MgtClassificationPageVo; import java.util.List; @@ -56,4 +57,13 @@ * @return void */ void deleteClassification(Long classId); /** * @description * @author jqs * @date 2023/7/13 11:21 * @param * @return List<AppClassListVo> */ List<AppClassListVo> listByType(Integer classType); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ArticleServiceImpl.java
@@ -4,11 +4,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; import com.ruoyi.system.domain.dto.MgtArticleEditDto; import com.ruoyi.system.domain.dto.MgtArticlePageDto; import com.ruoyi.system.domain.pojo.config.Article; import com.ruoyi.system.domain.vo.AppArticleGetVo; import com.ruoyi.system.domain.vo.AppArticlePageVo; import com.ruoyi.system.domain.vo.MgtArticleGetVo; import com.ruoyi.system.domain.vo.MgtArticlePageVo; import com.ruoyi.system.mapper.config.ArticleMapper; import com.ruoyi.system.service.config.ArticleService; @@ -85,6 +89,7 @@ article.setClassId(mgtArticleEditDto.getClassId()); article.setArticleSort(mgtArticleEditDto.getArticleSort()); article.setArticleTitle(mgtArticleEditDto.getArticleTitle()); article.setArticleIntroduce(mgtArticleEditDto.getArticleIntroduce()); article.setArticleDetail(mgtArticleEditDto.getArticleDetail()); article.setArticleCover(mgtArticleEditDto.getArticleCover()); article.setArticleVideo(mgtArticleEditDto.getArticleVideo()); @@ -109,4 +114,46 @@ article.setUpdateUserId(mgtBaseGetDto.getUserId()); this.saveOrUpdate(article); } /** * @description 获取文章 * @author jqs * @date 2023/7/13 11:00 * @param articleId * @return MgtArticleGetVo */ @Override public MgtArticleGetVo getArticle(Long articleId){ MgtArticleGetVo mgtArticleGetVo = new MgtArticleGetVo(); Article article = this.getById(articleId); BeanUtils.copyProperties(article,mgtArticleGetVo); return mgtArticleGetVo; } /** * @description 通过分类id获取文章 * @author jqs * @date 2023/7/13 11:37 * @param classId * @return List<AppClassListVo> */ @Override public List<AppArticlePageVo> listArticleByClass(Page page, Long classId){ return articleMapper.listArticleByClass(page, classId); } /** * @description * @author jqs * @date 2023/7/13 11:57 * @param articleId * @return AppArticleGetVo */ @Override public AppArticleGetVo getAppArticle (Long articleId){ AppArticleGetVo appArticleGetVo = new AppArticleGetVo(); Article article = this.getById(articleId); BeanUtils.copyProperties(article,appArticleGetVo); return appArticleGetVo; } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java
@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.system.api.constant.ConfigEnum; import com.ruoyi.system.api.constant.SecurityConstant; import com.ruoyi.system.api.domain.poji.config.Activeness; import com.ruoyi.system.api.domain.vo.AppOtherConfigGetVo; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; @@ -64,6 +66,9 @@ @Resource private StaffSuggestService staffSuggestService; @Resource private RedisService redisService; /** * @param key @@ -257,30 +262,39 @@ customConfig.setCreateTime(updateTime); customConfig.setUpdateTime(updateTime); switch (configEnum) { //分享小程序可获得积分 case SHARE_INTEGRAL: customConfig.setConfigValue(mgtOtherConfigEditDto.getShareIntegral().toString()); this.saveOrUpdate(customConfig); break; //平台建议可获得积分 case SUGGEST_PLATFORM_INTEGRAL: customConfig.setConfigValue(mgtOtherConfigEditDto.getSuggestPlatformIntegral().toString()); this.saveOrUpdate(customConfig); break; //每日签到可获得积分 case SIGN_IN_INTEGRAL: customConfig.setConfigValue(mgtOtherConfigEditDto.getSignInIntegral().toString()); this.saveOrUpdate(customConfig); break; //门店建议可获得积分 case SUGGEST_SHOP_INTEGRAL: customConfig.setConfigValue(mgtOtherConfigEditDto.getSuggestShopIntegral().toString()); this.saveOrUpdate(customConfig); break; //C端订单自动取消时间 case ORDER_AUTO_CANCEL_TIME: customConfig.setConfigValue(mgtOtherConfigEditDto.getOrderAutoCancelTime().toString()); redisService.setCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME,mgtOtherConfigEditDto.getOrderAutoCancelTime()); this.saveOrUpdate(customConfig); break; //购物满1元可获得积分 case PAY_MONEY_INTEGRAL: customConfig.setConfigValue(mgtOtherConfigEditDto.getPayMoneyIntegral().toString()); redisService.setCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL,mgtOtherConfigEditDto.getPayMoneyIntegral()); this.saveOrUpdate(customConfig); break; //首页风格 case HOME_STYLE: customConfig.setConfigValue(mgtOtherConfigEditDto.getHomeStyle().toString()); this.saveOrUpdate(customConfig); @@ -533,6 +547,18 @@ } /** * @description * @author jqs * @date 2023/7/13 15:52 * @param * @return List<String> */ @Override public List<String> listOperTitle(){ return customConfigMapper.listOperTitle(); } /** * @description 获取单个自定义配置 * @author jqs * @date 2023/6/9 15:40 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/SysClassificationServiceImpl.java
@@ -9,6 +9,7 @@ import com.ruoyi.system.api.service.RemoteGoodsService; import com.ruoyi.system.domain.dto.MgtClassificationEditDto; import com.ruoyi.system.domain.dto.MgtClassificationPageDto; import com.ruoyi.system.domain.vo.AppClassListVo; import com.ruoyi.system.domain.vo.MgtClassificationPageVo; import com.ruoyi.system.mapper.config.SysClassificationMapper; import com.ruoyi.system.service.config.ArticleService; @@ -17,6 +18,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** * <p> @@ -131,4 +133,26 @@ remoteGoodsService.deleteGoodsClass(classId); } } /** * @description * @author jqs * @date 2023/7/13 11:21 * @param * @return List<AppClassListVo> */ @Override public List<AppClassListVo> listByType(Integer classType){ LambdaQueryWrapper<SysClassification> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysClassification::getDelFlag,0) .eq(SysClassification::getClassType,classType); List<SysClassification> sysClassificationList = this.list(queryWrapper); List<AppClassListVo> classListVos = sysClassificationList.stream().map(sysClassification ->{ AppClassListVo appClassListVo = new AppClassListVo(); appClassListVo.setClassId(sysClassification.getClassId()); appClassListVo.setClassName(sysClassification.getClassName()); return appClassListVo; }).collect(Collectors.toList()); return classListVos; } } ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/ArticleMapper.xml
@@ -11,6 +11,7 @@ ta.article_id articleId, tsc.class_name className, ta.article_sort articleSort, ta.article_introduce articleIntroduce, ta.article_title articleTitle, ta.article_cover articleCover, ta.create_time createTime @@ -29,4 +30,14 @@ ORDER BY ta.create_time DESC </select> <select id="listArticleByClass" resultType="com.ruoyi.system.domain.vo.AppArticlePageVo"> SELECT ta.article_id articleId, ta.article_introduce articleIntroduce, ta.article_title articleTitle, ta.article_cover articleCover FROM t_article ta WHERE ta.del_flag = 0 AND ta.class_id = #{classId} ORDER BY ta.article_sort DESC </select> </mapper> ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/CustomConfigMapper.xml
@@ -14,7 +14,7 @@ SELECT oper_time operTime, oper_name operName, oper_title operTitle, title operTitle, oper_ip operIp, oper_content operContent FROM sys_oper_log @@ -22,4 +22,8 @@ ORDER BY oper_time DESC </select> <select id="listOperTitle" resultType="java.lang.String"> SELECT DISTINCT title FROM sys_oper_log WHERE operator_type = 1 </select> </mapper> ruoyi-modules/ruoyi-system/src/test/java/com/ruoyi/system/systemTest.java
@@ -1,14 +1,9 @@ package com.ruoyi.system; import com.ruoyi.system.domain.vo.MgtPopGetVo; import com.ruoyi.system.service.config.PopService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; /** * @ClassName systemTest @@ -21,13 +16,7 @@ @SpringBootTest(classes = RuoYiSystemApplication.class) public class systemTest { @Resource private PopService popService; @Test public void test1(){ MgtPopGetVo mgtPopGetVo = popService.getMgtPop(1L); System.out.println(mgtPopGetVo); } }