diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java index d0a1aa47..9804989f 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java @@ -1,12 +1,12 @@ package cn.lili.timetask.handler.impl.promotion; +import cn.hutool.core.date.DateTime; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.Seckill; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.entity.vos.PintuanVO; import cn.lili.modules.promotion.service.*; import cn.lili.modules.search.service.EsGoodsIndexService; @@ -66,7 +66,6 @@ public class PromotionEverydayExecute implements EveryDayExecute { private SeckillService seckillService; - /** * 将已过期的促销活动置为结束 */ @@ -81,11 +80,11 @@ public class PromotionEverydayExecute implements EveryDayExecute { List promotionIds = new ArrayList<>(); //关闭满减活动 - endFullDiscount(promotionIds,query); + endFullDiscount(promotionIds, query); //关闭拼团活动 - endPintuan(promotionIds,query); + endPintuan(promotionIds, query); //关闭优惠券 - endCoupon(promotionIds,query); + endCoupon(); //每日新增秒杀活动 addSeckill(); promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(promotionIds)); @@ -96,19 +95,20 @@ public class PromotionEverydayExecute implements EveryDayExecute { * 从系统设置中获取秒杀活动的配置 * 添加30天后的秒杀活动 */ - private void addSeckill(){ + private void addSeckill() { Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name()); - SeckillSetting seckillSetting=new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class); - Seckill seckill=new Seckill(seckillSetting.getHours(),seckillSetting.getSeckillRule()); + SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class); + Seckill seckill = new Seckill(seckillSetting.getHours(), seckillSetting.getSeckillRule()); seckillService.saveSeckill(seckill); } /** * 修改满额活动下的商品 + * * @param promotionIds 促销活动ID - * @param query 查询Wrapper + * @param query 查询Wrapper */ - private void endFullDiscount(List promotionIds,Query query){ + private void endFullDiscount(List promotionIds, Query query) { //关闭满减活动 List fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class); if (!fullDiscountVOS.isEmpty()) { @@ -131,10 +131,11 @@ public class PromotionEverydayExecute implements EveryDayExecute { /** * 修改拼团活动下的商品 + * * @param promotionIds 促销活动ID - * @param query 查询Wrapper + * @param query 查询Wrapper */ - private void endPintuan(List promotionIds,Query query){ + private void endPintuan(List promotionIds, Query query) { List pintuanVOS = mongoTemplate.find(query, PintuanVO.class); if (!pintuanVOS.isEmpty()) { //准备修改活动的id @@ -157,36 +158,19 @@ public class PromotionEverydayExecute implements EveryDayExecute { /** * 修改优惠券下的商品 - * @param promotionIds 促销活动ID - * @param query 查询Wrapper */ - private void endCoupon(List promotionIds,Query query){ - List couponVOS = mongoTemplate.find(query, CouponVO.class); - if (!couponVOS.isEmpty()) { - List ids = new ArrayList<>(); - for (CouponVO vo : couponVOS) { - vo.setPromotionStatus(PromotionStatusEnum.END.name()); - if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) { - for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) { - promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name()); - esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId()); - } - } - mongoTemplate.save(vo); - ids.add(vo.getId()); - } - couponService.update(this.getUpdatePromotionWrapper(ids)); - LambdaUpdateWrapper memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper() - .in(MemberCoupon::getCouponId, ids) - .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) - .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); - memberCouponService.update(memberCouponLambdaUpdateWrapper); - promotionIds.addAll(ids); - } + private void endCoupon() { + //修改超时的动态时间优惠券的状态 + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) + .le(MemberCoupon::getEndTime, new DateTime()) + .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); + memberCouponService.update(lambdaUpdateWrapper); } /** * 获取促销修改查询条件 修改活动状态 + * * @param ids 促销活动ID * @return 促销活动商品查询Wrapper */ @@ -196,8 +180,10 @@ public class PromotionEverydayExecute implements EveryDayExecute { updateWrapper.set("promotion_status", PromotionStatusEnum.END.name()); return updateWrapper; } + /** * 获取商品的促销修改查询条件 修改商品状态 + * * @param ids 促销活动ID * @return 促销活动商品修改Wrapper */ diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderExportDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderExportDTO.java new file mode 100644 index 00000000..8d0b794b --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderExportDTO.java @@ -0,0 +1,95 @@ +package cn.lili.modules.order.order.entity.dto; + +import cn.lili.modules.order.order.entity.enums.DeliverStatusEnum; +import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; +import cn.lili.modules.order.order.entity.enums.PayStatusEnum; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 订单导出DTO + * @author Bulbasaur + * @date: 2021/6/3 6:36 下午 + * + */ +@Data +public class OrderExportDTO { + + @ApiModelProperty("订单编号") + private String sn; + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "用户名") + private String memberName; + + @ApiModelProperty(value = "收件人姓名") + private String consigneeName; + + @ApiModelProperty(value = "收件人手机") + private String consigneeMobile; + + @ApiModelProperty(value = "收件人地址") + private String consigneeAddressPath; + + @ApiModelProperty(value = "详细地址") + private String consigneeDetail; + + @ApiModelProperty(value = "支付方式") + private String paymentMethod; + + @ApiModelProperty(value = "物流公司名称") + private String logisticsName; + + @ApiModelProperty(value = "运费") + private Double freightPrice; + + @ApiModelProperty(value = "商品价格") + private Double goodsPrice; + + @ApiModelProperty(value = "优惠的金额") + private Double discountPrice; + + @ApiModelProperty(value = "总价格") + private Double flowPrice; + + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "商品数量") + private Integer num; + + @ApiModelProperty(value = "买家订单备注") + private String remark; + + /** + * @see OrderStatusEnum + */ + @ApiModelProperty(value = "订单状态") + private String orderStatus; + + /** + * @see PayStatusEnum + */ + @ApiModelProperty(value = "付款状态") + private String payStatus; + + /** + * @see DeliverStatusEnum + */ + @ApiModelProperty(value = "货运状态") + private String deliverStatus; + + @ApiModelProperty(value = "是否需要发票") + private Boolean needReceipt; + + @ApiModelProperty(value = "店铺名称") + private String storeName; +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java index ba8a8fe6..bc66e347 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java @@ -204,9 +204,6 @@ public class OrderSearchParams extends PageVO { wrapper.like("o.client_type", clientType); } wrapper.eq("o.delete_flag", false); - wrapper.groupBy("o.id"); - wrapper.orderByDesc("o.id"); - return wrapper; } diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java index 1cc21d35..081f4ae4 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java +++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java @@ -1,6 +1,7 @@ package cn.lili.modules.order.order.mapper; import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; import cn.lili.modules.order.order.entity.vo.PaymentLog; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -38,6 +39,11 @@ public interface OrderMapper extends BaseMapper { " FROM li_order o INNER JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ") IPage queryByParams(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + @Select("SELECT o.sn,o.create_time,o.member_name,o.consignee_name,o.consignee_mobile,o.consignee_address_path,o.consignee_detail," + + "o.payment_method, o.logistics_name,o.freight_price,o.goods_price,o.discount_price,o.flow_price,oi.goods_name,oi.num," + + "o.remark,o.order_status,o.pay_status,o.deliver_status,o.need_receipt,o.store_name FROM li_order_item oi INNER JOIN li_order o ON oi.order_sn=o.sn") + List queryExportOrder(@Param(Constants.WRAPPER) Wrapper queryWrapper); + @Select("select * from li_order ${ew.customSqlSegment} ") IPage queryPaymentLogs(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index 640c69eb..4d887801 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -5,6 +5,7 @@ import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; +import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; @@ -49,6 +50,14 @@ public interface OrderService extends IService { */ IPage queryByParams(OrderSearchParams orderSearchParams); + /** + * 查询导出订单列表 + * @param orderSearchParams 查询参数 + * @return 导出订单列表 + */ + List queryExportOrder(OrderSearchParams orderSearchParams); + + /** * 订单详细 * diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 4b81fb0a..5dba270d 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -37,10 +37,7 @@ import cn.lili.modules.order.order.aop.OrderLogPoint; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.dos.Receipt; -import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; -import cn.lili.modules.order.order.entity.dto.OrderMessage; -import cn.lili.modules.order.order.entity.dto.OrderSearchParams; -import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; +import cn.lili.modules.order.order.entity.dto.*; import cn.lili.modules.order.order.entity.enums.*; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; @@ -176,7 +173,15 @@ public class OrderServiceImpl extends ServiceImpl implements @Override public IPage queryByParams(OrderSearchParams orderSearchParams) { - return this.baseMapper.queryByParams(PageUtil.initPage(orderSearchParams), orderSearchParams.queryWrapper()); + QueryWrapper queryWrapper=orderSearchParams.queryWrapper(); + queryWrapper.groupBy("o.id"); + queryWrapper.orderByDesc("o.id"); + return this.baseMapper.queryByParams(PageUtil.initPage(orderSearchParams), queryWrapper); + } + + @Override + public List queryExportOrder(OrderSearchParams orderSearchParams) { + return this.baseMapper.queryExportOrder(orderSearchParams.queryWrapper()); } @Override diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java index 6cb4c216..26c781a9 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java @@ -26,8 +26,6 @@ public class CouponActivity extends BasePromotion { /** * @see CouponActivityTypeEnum - * @author Bulbasaur - * @date: 2021/5/24 10:28 上午 * */ @NotNull(message = "优惠券活动类型不能为空") diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index bb01624c..0ca21fd2 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -87,16 +87,19 @@ public class CouponServiceImpl extends ServiceImpl impleme this.save(coupon); // 如果优惠券类型为部分商品则将促销活动商品更新 this.updateScopePromotionGoods(coupon); - // 保存到MONGO中 - this.mongoTemplate.save(coupon); - PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - coupon.getStartTime().getTime(), - promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - // 发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(coupon.getStartTime().getTime())); + // 如果是动态时间优惠券不走延时任务 + if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + // 保存到MONGO中 + this.mongoTemplate.save(coupon); + PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, + coupon.getStartTime().getTime(), + promotionMessage, + DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + rocketmqCustomProperties.getPromotionTopic()); + // 发送促销活动开始的延时任务 + this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(coupon.getStartTime().getTime())); + } return coupon; } @@ -263,31 +266,37 @@ public class CouponServiceImpl extends ServiceImpl impleme * @param coupon 优惠券信息 */ private void checkParam(CouponVO coupon) { - + //判断优惠券领取数量限制 if (coupon.getCouponLimitNum() < 0) { throw new ServiceException("领取限制数量不能为负数"); } - + //领取数量不能超过发放数量 if (coupon.getCouponLimitNum() > coupon.getPublishNum()) { throw new ServiceException("领取限制数量超出发行数量"); } - + //判断优惠券面额 if (coupon.getCouponType().equals(CouponTypeEnum.PRICE.name()) && coupon.getPrice() > coupon.getConsumeThreshold()) { throw new ServiceException("优惠券面额必须小于优惠券消费限额"); } else if (coupon.getCouponType().equals(CouponTypeEnum.DISCOUNT.name()) && (coupon.getCouponDiscount() < 0 && coupon.getCouponDiscount() > 10)) { throw new ServiceException("优惠券折扣必须小于10且大于0"); } - + //判断优惠券时间 long nowTime = DateUtil.getDateline() * 1000; - if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) { - throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作"); + if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) { + throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作"); + } + + PromotionTools.checkPromotionTime(coupon.getStartTime().getTime(), coupon.getEndTime().getTime()); + //对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态 + this.promotionStatusEmpty(coupon); + } else { + //动态时间优惠券需设置有限期并为活动赠送优惠券 + if (coupon.getEffectiveDays() == null || coupon.getGetType().equals(CouponGetEnum.FREE.name())) { + throw new ServiceException("活动赠送优惠券需设置有限期"); + } } - - PromotionTools.checkPromotionTime(coupon.getStartTime().getTime(), coupon.getEndTime().getTime()); - this.checkCouponScope(coupon); - //对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态 - this.promotionStatusEmpty(coupon); } /** diff --git a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java index 7d54992f..f337722a 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java @@ -43,9 +43,16 @@ public class StoreBasicInfoVO { @ApiModelProperty(value = "是否自营") private String selfOperated; + @ApiModelProperty(value = "商品数量") + private Integer goodsNum; + + @ApiModelProperty(value = "收藏数量") + private Integer collectionNum; + @ApiModelProperty(value = "腾讯云智服唯一标识") private String yzfSign; @ApiModelProperty(value = "腾讯云智服小程序唯一标识") private String yzfMpSign; + } diff --git a/manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java b/manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java index 0b93d2c3..613bcbcd 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java @@ -1,10 +1,10 @@ package cn.lili.controller.trade; -import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; @@ -21,6 +21,7 @@ import springfox.documentation.annotations.ApiIgnore; import javax.validation.Valid; import javax.validation.constraints.NotNull; +import java.util.List; /** * 管理端,订单API @@ -31,7 +32,6 @@ import javax.validation.constraints.NotNull; @RestController @RequestMapping("/manager/orders") @Api(tags = "管理端,订单API") - public class OrderManagerController { //订单 @@ -48,6 +48,13 @@ public class OrderManagerController { return ResultUtil.data(orderService.queryByParams(orderSearchParams)); } + @ApiOperation(value = "查询订单导出列表") + @GetMapping("/queryExportOrder") + public ResultMessage> queryExportOrder(OrderSearchParams orderSearchParams) { + return ResultUtil.data(orderService.queryExportOrder(orderSearchParams)); + } + + @ApiOperation(value = "订单明细") @ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path") @GetMapping(value = "/{orderSn}")