From 3d255eff245dca6ef398da8e7561fedfec4ff379 Mon Sep 17 00:00:00 2001 From: wangfukang <15630117759@163.com> Date: Wed, 15 Apr 2026 17:04:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E6=8B=BC=E5=9B=A2=E6=95=B0?= =?UTF-8?q?=E6=8D=AE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/manage/AuthController.java | 2 +- .../mall/controller/MallCouponController.java | 22 ++++ .../mall/controller/MallOrderController.java | 5 +- .../hiver/mall/controller/ShopController.java | 3 + .../mall/dao/mapper/MallCouponMapper.java | 5 + .../mall/dao/mapper/MallUserCouponMapper.java | 2 + .../java/cc/hiver/mall/entity/MallCoupon.java | 2 +- .../hiver/mall/entity/MallDeliveryOrder.java | 2 + .../mall/pojo/query/MallCouponQuery.java | 65 +++++++++++ .../query/MallDeliveryOrderPageQuery.java | 3 + .../cc/hiver/mall/pojo/vo/MallOrderVO.java | 3 + .../mybatis/MallUserCouponService.java | 5 + .../mybatis/MallDeliveryOrderServiceImpl.java | 21 +++- .../mybatis/MallOrderGroupServiceImpl.java | 7 ++ .../mybatis/MallOrderServiceImpl.java | 105 ++++++++++++++++-- .../mybatis/MallRefundRecordServiceImpl.java | 8 ++ .../mybatis/MallUserCouponServiceImpl.java | 37 ++++++ .../resources/mapper/MallCouponMapper.xml | 68 ++++++++++++ .../mapper/MallDeliveryOrderMapper.xml | 14 ++- 19 files changed, 364 insertions(+), 15 deletions(-) create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallCouponQuery.java diff --git a/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/AuthController.java b/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/AuthController.java index 7167762a..e32dd9bd 100644 --- a/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/AuthController.java +++ b/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/AuthController.java @@ -128,7 +128,7 @@ public class AuthController { @SystemLog(description = "账号登录", type = LogType.LOGIN) @ApiOperation("账号/手机/邮箱登录") @Transactional - public Result login(@RequestParam String username,@RequestParam String clientId, + public Result login(@RequestParam String username,@RequestParam(required = false) String clientId, @RequestParam String password, @RequestParam(required = false) String type, @RequestParam(required = false) Boolean saveLogin) { diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallCouponController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallCouponController.java index 0c67edfd..578b8e0c 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallCouponController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallCouponController.java @@ -4,8 +4,10 @@ import cc.hiver.core.common.utils.ResultUtil; import cc.hiver.core.common.vo.Result; import cc.hiver.mall.entity.MallCoupon; import cc.hiver.mall.entity.MallUserCoupon; +import cc.hiver.mall.pojo.query.MallCouponQuery; import cc.hiver.mall.service.mybatis.MallCouponService; import cc.hiver.mall.service.mybatis.MallUserCouponService; +import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -32,6 +34,13 @@ public class MallCouponController { return ResultUtil.success("发行成功"); } + @PostMapping("/update") + @ApiOperation(value = "修改优惠券") + public Result update(@RequestBody MallCoupon coupon) { + mallCouponService.saveOrUpdate(coupon); + return ResultUtil.success("修改成功"); + } + @PostMapping("/receive") @ApiOperation(value = "用户领取优惠券") public Result receiveCoupon(@RequestParam String userId, @RequestParam String couponId) { @@ -39,6 +48,13 @@ public class MallCouponController { return ResultUtil.success("领取成功"); } + @PostMapping("/send") + @ApiOperation(value = "平台发放优惠券") + public Result send(@RequestParam String userPhones, @RequestParam Integer type,@RequestParam String couponId) { + mallUserCouponService.send(userPhones, type,couponId); + return ResultUtil.success("发放成功"); + } + @GetMapping("/available") @ApiOperation(value = "获取可用优惠券列表(下单时调用)") public Result> getAvailableCoupons( @@ -49,4 +65,10 @@ public class MallCouponController { @RequestParam(required = true) String regionId) { return new ResultUtil>().setData(mallUserCouponService.getAvailableCoupons(userId, applyScene, amount, merchantId, regionId)); } + + @PostMapping("/list") + @ApiOperation(value = "获取优惠券列表") + public Result> list(MallCouponQuery query) { + return new ResultUtil>().setData(mallUserCouponService.selectPageVO(query)); + } } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallOrderController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallOrderController.java index e260817d..7d9872ed 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallOrderController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallOrderController.java @@ -33,6 +33,7 @@ public class MallOrderController { @Autowired private MallOrderGroupService mallOrderGroupService; + /** * 下单(普通购买 / 发起拼团 / 参团) */ @@ -187,10 +188,10 @@ public class MallOrderController { } /** - * 用户确认完成 + * 自取订单完成 */ @PostMapping("/complete") - @ApiOperation(value = "用户确认完成", notes = "外卖送达或自取后,用户手动点击确认完成") + @ApiOperation(value = "自取订单完成") public Result completeOrder(@RequestParam String orderId) { try { mallOrderService.completeOrder(orderId); diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java index 9347e760..6ea6e6b9 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java @@ -164,6 +164,9 @@ public class ShopController { shop.setRegion(""); shop.setRegionId(null); } + if(shop.getSaleCount() == null){ + shop.setSaleCount(0); + } shopService.update(shop); diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallCouponMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallCouponMapper.java index b9760fad..694625cc 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallCouponMapper.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallCouponMapper.java @@ -1,9 +1,14 @@ package cc.hiver.mall.dao.mapper; import cc.hiver.mall.entity.MallCoupon; +import cc.hiver.mall.pojo.query.MallCouponQuery; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; +@Repository public interface MallCouponMapper extends BaseMapper { int deductStock(@Param("id") String id); + IPage selectPageVO(IPage page, @Param("q") MallCouponQuery q); } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallUserCouponMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallUserCouponMapper.java index 4fa0c9f7..fed487dd 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallUserCouponMapper.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallUserCouponMapper.java @@ -2,6 +2,8 @@ package cc.hiver.mall.dao.mapper; import cc.hiver.mall.entity.MallUserCoupon; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; +@Repository public interface MallUserCouponMapper extends BaseMapper { } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallCoupon.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallCoupon.java index 30b12065..77ca5b30 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallCoupon.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallCoupon.java @@ -23,7 +23,7 @@ public class MallCoupon extends HiverBaseEntity { @ApiModelProperty(value = "发放方:1-平台,2-商家") private Integer issuerType; - @ApiModelProperty(value = "发放方ID") + @ApiModelProperty(value = "发放方ID 0平台 其他为店铺id") private String issuerId; @ApiModelProperty(value = "适用场景:0-通用,1-外卖/买饭,2-快递/跑腿,3-二手物品交易") diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallDeliveryOrder.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallDeliveryOrder.java index fc14a034..98b535c7 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallDeliveryOrder.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallDeliveryOrder.java @@ -33,6 +33,8 @@ public class MallDeliveryOrder implements Serializable { private String groupId; @ApiModelProperty(value = "配送员ID") private String workerId; + @ApiModelProperty(value = "转单对象id") + private String newWorker; @ApiModelProperty(value = "配送员电话") private String workerPhone; @ApiModelProperty(value = "配送员名称") diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallCouponQuery.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallCouponQuery.java new file mode 100644 index 00000000..b58198aa --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallCouponQuery.java @@ -0,0 +1,65 @@ +package cc.hiver.mall.pojo.query; + +import cc.hiver.core.base.HiverBasePageQuery; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 优惠券分页查询对象 + */ +@ApiModel("优惠券分页查询对象") +@Data +public class MallCouponQuery extends HiverBasePageQuery { + + @ApiModelProperty(value = "优惠券名称") + private String name; + + @ApiModelProperty(value = "发放方:1-平台,2-商家") + private Integer issuerType; + + @ApiModelProperty(value = "发放方ID 0平台 其他为店铺id") + private String issuerId; + + @ApiModelProperty(value = "适用场景:0-通用,1-外卖/买饭,2-快递/跑腿,3-二手物品交易") + private Integer applyScene; + + @ApiModelProperty(value = "优惠券类型:1-满减券,2-无门槛直减券") + private Integer type; + + @ApiModelProperty(value = "使用门槛金额") + private BigDecimal minAmount; + + @ApiModelProperty(value = "抵扣面额") + private BigDecimal discountAmount; + + @ApiModelProperty(value = "发行总数") + private Integer totalCount; + + @ApiModelProperty(value = "剩余领取数量") + private Integer remainCount; + + @ApiModelProperty(value = "每人最多限领张数") + private Integer limitPerUser; + + @ApiModelProperty(value = "有效期类型:1-绝对时间段有效,2-领取后相对天数有效") + private Integer validType; + + @ApiModelProperty(value = "有效期开始时间") + private Date validStartTime; + + @ApiModelProperty(value = "有效期结束时间") + private Date validEndTime; + + @ApiModelProperty(value = "自领取之日起有效天数") + private Integer validDays; + + @ApiModelProperty(value = "状态:0-已下架/停发,1-发放中") + private Integer status; + + @ApiModelProperty(value = "学校id") + private String regionId; +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallDeliveryOrderPageQuery.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallDeliveryOrderPageQuery.java index 47e23968..4c138143 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallDeliveryOrderPageQuery.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallDeliveryOrderPageQuery.java @@ -15,6 +15,9 @@ public class MallDeliveryOrderPageQuery extends HiverBasePageQuery { @ApiModelProperty("配送员ID") private String workerId; + @ApiModelProperty("转单对象id") + private String newWorker; + @ApiModelProperty("店铺ID") private String shopId; diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MallOrderVO.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MallOrderVO.java index fdbf50b8..2cdd29cf 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MallOrderVO.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MallOrderVO.java @@ -25,6 +25,9 @@ public class MallOrderVO extends MallOrder { @ApiModelProperty("配送信息(外卖订单时返回)") private MallDeliveryOrder deliveryInfo; + @ApiModelProperty("优惠券") + private List userCoupon; + @ApiModelProperty("收货地址详情(冗余展示用)") private String addressDetail; diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallUserCouponService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallUserCouponService.java index bbc658b8..6f20f027 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallUserCouponService.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallUserCouponService.java @@ -1,6 +1,9 @@ package cc.hiver.mall.service.mybatis; +import cc.hiver.mall.entity.MallCoupon; import cc.hiver.mall.entity.MallUserCoupon; +import cc.hiver.mall.pojo.query.MallCouponQuery; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import java.math.BigDecimal; @@ -12,4 +15,6 @@ public interface MallUserCouponService extends IService { boolean lockCoupon(String userCouponId, String orderId); boolean useCoupon(String orderId); boolean refundCoupon(String orderId); + IPage selectPageVO(MallCouponQuery q); + void send(String userPhones,Integer type,String couponId); } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java index 740bce06..3bd14f07 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java @@ -22,6 +22,9 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.*; /** @@ -113,11 +116,19 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl uw = new LambdaUpdateWrapper<>(); uw.eq(MallDeliveryOrder::getId, deliveryId) .set(MallDeliveryOrder::getStatus, STATUS_WAIT_PICKUP) .set(MallDeliveryOrder::getWorkerId, workerId).set(MallDeliveryOrder::getWorkerName, workerName).set(MallDeliveryOrder::getWorkerPhone, workerPhone) - .set(MallDeliveryOrder::getAcceptTime, new Date()); + .set(MallDeliveryOrder::getAcceptTime, new Date()) + .set(MallDeliveryOrder::getMustFinishTime, mustFinishTime); MallOrder order = mallOrderService.getById(delivery.getOrderId()); String numberCode = ""; @@ -239,6 +250,12 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl oqw = new LambdaUpdateWrapper<>(); oqw.in(MallOrder::getId, orderIdList).set(MallOrder::getStatus,ORDER_STATUS_DONE); mallOrderService.update(oqw); + + //更新优惠券已使用 + LambdaUpdateWrapper oqwCoupon = new LambdaUpdateWrapper<>(); + oqwCoupon.in(MallUserCoupon::getOrderId, orderIdList).set(MallUserCoupon::getStatus,2); + mallUserCouponService.update(oqwCoupon); + }else{ // 同步订单状态 -> 已完成 if (StringUtils.isNotBlank(delivery.getOrderId())) { @@ -246,6 +263,8 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl goodsSnapshots = new ArrayList<>(); - for (CreateOrderDTO.OrderItemDTO item : dto.getItems()) { - Product product = productMapper.selectById(item.getProductId()); - if (product == null) { - throw new RuntimeException("商品不存在: " + item.getProductId()); + // 一次性查出所有商品,避免循环查询 + List productIds = dto.getItems().stream() + .map(CreateOrderDTO.OrderItemDTO::getProductId) + .collect(Collectors.toList()); + List productList = productMapper.selectBatchIds(productIds); + Map productMap = productList.stream() + .collect(Collectors.toMap(Product::getId, p -> p)); + + // 校验是否所有商品都存在 + for (String pid : productIds) { + if (!productMap.containsKey(pid)) { + throw new RuntimeException("商品不存在: " + pid); } - // 扣减库存(更新 attributeListPrice 中的 specNum) + } + Integer shopSaleCount = 0; + for (CreateOrderDTO.OrderItemDTO item : dto.getItems()) { + Product product = productMap.get(item.getProductId()); + shopSaleCount += item.getQuantity(); + // 扣减库存(更新 attributeListPrice 中的 specNum)以及销量 deductStock(product, item.getQuantity()); // 累计商品金额 @@ -149,6 +171,17 @@ public class MallOrderServiceImpl extends ServiceImpl().eq("id",dto.getShopId()).set("sale_count",shopSaleCount)); + } + + // 增量更新Redis缓存(店铺销量 + 商品销量),避免走refreshShopCache全量查询 + try { + updateSaleCacheIncremental(dto.getShopId(), dto.getRegionId(), dto.getItems(), productMap, shopSaleCount); + } catch (Exception e) { + log.warn("增量更新Redis销量缓存失败,不影响下单: {}", e.getMessage()); + } BigDecimal packageFee = dto.getPackageFee() != null ? dto.getPackageFee() : BigDecimal.ZERO; @@ -860,6 +893,8 @@ public class MallOrderServiceImpl extends ServiceImpl uq = new LambdaQueryWrapper<>(); + uq.eq(MallUserCoupon::getOrderId, orderId); + vo.setUserCoupon(mallUserCouponMapper.selectList(uq)); + // 售后、退款信息 LambdaQueryWrapper rq = new LambdaQueryWrapper<>(); rq.eq(MallRefundRecord::getOrderId, orderId); @@ -967,10 +1008,10 @@ public class MallOrderServiceImpl extends ServiceImpl uw = new LambdaUpdateWrapper<>(); uw.eq(Product::getId, product.getId()) - .set(Product::getAttributeListPrice, arr.toString()); + .set(Product::getAttributeListPrice, arr.toString()).set(Product::getTailWarn, product.getTailWarn() + quantity); productMapper.update(null, uw); } catch (RuntimeException e) { throw e; @@ -979,6 +1020,56 @@ public class MallOrderServiceImpl extends ServiceImpl items, + Map productMap, + int shopSaleCount) { + // 1. 更新店铺缓存中的 saleCount + if (StringUtils.isNotBlank(regionId) && shopSaleCount > 0) { + String shopCacheKey = "SHOP_CACHE:" + regionId; + String shopJson = (String) redisTemplateHelper.hGet(shopCacheKey, shopId); + if (StringUtils.isNotBlank(shopJson)) { + ShopCacheDTO cacheDTO = JSONUtil.toBean(shopJson, ShopCacheDTO.class); + if (cacheDTO.getShop() != null) { + Integer oldSaleCount = cacheDTO.getShop().getSaleCount(); + cacheDTO.getShop().setSaleCount((oldSaleCount != null ? oldSaleCount : 0) + shopSaleCount); + redisTemplateHelper.hPut(shopCacheKey, shopId, JSONUtil.toJsonStr(cacheDTO)); + } + } + } + + // 2. 更新商品缓存中的 tailWarn(销量) + String productsKey = "SHOP_PRODUCTS:" + shopId; + String productsJson = redisTemplateHelper.get(productsKey); + if (StringUtils.isNotBlank(productsJson)) { + // 构建本次每个商品的销量增量 map: productId -> quantity + Map quantityMap = new HashMap<>(); + for (CreateOrderDTO.OrderItemDTO item : items) { + quantityMap.merge(item.getProductId(), item.getQuantity(), Integer::sum); + } + + JSONArray productArr = JSONUtil.parseArray(productsJson); + boolean changed = false; + for (int i = 0; i < productArr.size(); i++) { + JSONObject productObj = productArr.getJSONObject(i); + String pid = productObj.getStr("id"); + if (pid != null && quantityMap.containsKey(pid)) { + int oldTailWarn = productObj.getInt("tailWarn", 0); + productObj.set("tailWarn", oldTailWarn + quantityMap.get(pid)); + changed = true; + } + } + if (changed) { + redisTemplateHelper.set(productsKey, productArr.toString()); + } + } + } + /** * 构建基础订单对象 */ diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallRefundRecordServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallRefundRecordServiceImpl.java index 730629b6..8f80fc8f 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallRefundRecordServiceImpl.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallRefundRecordServiceImpl.java @@ -12,6 +12,7 @@ import cc.hiver.mall.entity.MallReturnOrderGoods; import cc.hiver.mall.pojo.query.MallRefundRecordPageQuery; import cc.hiver.mall.service.mybatis.MallOrderService; import cc.hiver.mall.service.mybatis.MallRefundRecordService; +import cc.hiver.mall.service.mybatis.MallUserCouponService; import cc.hiver.mall.utils.WechatPayUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -62,6 +63,9 @@ public class MallRefundRecordServiceImpl extends ServiceImpl duw = new LambdaUpdateWrapper<>(); @@ -246,6 +252,8 @@ public class MallRefundRecordServiceImpl extends ServiceImpl duw = new LambdaUpdateWrapper<>(); diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallUserCouponServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallUserCouponServiceImpl.java index 98984159..ff091f0e 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallUserCouponServiceImpl.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallUserCouponServiceImpl.java @@ -1,19 +1,26 @@ package cc.hiver.mall.serviceimpl.mybatis; import cc.hiver.core.common.exception.HiverException; +import cc.hiver.core.common.utils.StringUtils; +import cc.hiver.core.entity.User; +import cc.hiver.core.service.UserService; import cc.hiver.mall.dao.mapper.MallCouponMapper; import cc.hiver.mall.dao.mapper.MallUserCouponMapper; import cc.hiver.mall.entity.MallCoupon; import cc.hiver.mall.entity.MallUserCoupon; +import cc.hiver.mall.pojo.query.MallCouponQuery; import cc.hiver.mall.service.mybatis.MallUserCouponService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.util.Arrays; import java.util.Date; import java.util.List; @@ -23,6 +30,9 @@ public class MallUserCouponServiceImpl extends ServiceImpl selectPageVO(MallCouponQuery q) { + IPage page = new Page<>(q.getPageNum(), q.getPageSize()); + IPage result = mallCouponMapper.selectPageVO(page, q); + return result; + } + + @Override + public void send(String userPhones, Integer type,String couponId) { + //精准发放 + if(type == 1){ + if(!StringUtils.isEmpty(userPhones)){ + List phones = Arrays.asList(userPhones.split(",")); + phones.forEach(phone -> { + this.receiveCoupon(userService.findByMobile(phone).getId(), couponId); + }); + + } + }else{ + //全部发放 + List users = userService.getAll(); + users.forEach(user -> { + this.receiveCoupon(user.getId(), couponId); + }); + } + } } diff --git a/hiver-modules/hiver-mall/src/main/resources/mapper/MallCouponMapper.xml b/hiver-modules/hiver-mall/src/main/resources/mapper/MallCouponMapper.xml index b5b2fd71..b61339da 100644 --- a/hiver-modules/hiver-mall/src/main/resources/mapper/MallCouponMapper.xml +++ b/hiver-modules/hiver-mall/src/main/resources/mapper/MallCouponMapper.xml @@ -2,10 +2,78 @@ + + + + + + + + + + + + + + + + + + + + + + id, + name, + issuer_type, + issuer_id, + apply_scene, + type, + min_amount, + discount_amount, + total_count, + remain_count, + limit_per_user, + valid_type, + valid_start_time, + valid_end_time, + valid_days, + status, + region_id + UPDATE t_mall_coupon SET remain_count = remain_count - 1 WHERE id = #{id} AND remain_count > 0 AND del_flag = 0 + + diff --git a/hiver-modules/hiver-mall/src/main/resources/mapper/MallDeliveryOrderMapper.xml b/hiver-modules/hiver-mall/src/main/resources/mapper/MallDeliveryOrderMapper.xml index 08b0b814..ee05d285 100644 --- a/hiver-modules/hiver-mall/src/main/resources/mapper/MallDeliveryOrderMapper.xml +++ b/hiver-modules/hiver-mall/src/main/resources/mapper/MallDeliveryOrderMapper.xml @@ -38,6 +38,7 @@ + @@ -49,7 +50,7 @@ d.receiver_name, d.receiver_phone, d.receiver_address, d.shop_name, d.shop_phone, d.shop_address, d.delivery_type, d.number_code, d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures, d.is_big, - d.is_return,d.worker_name, d.arrive_time + d.is_return,d.worker_name, d.arrive_time,d.new_worker FROM mall_delivery_order d @@ -58,6 +59,9 @@ AND d.worker_id = #{q.workerId} + + AND d.new_worker = #{q.newWorker} + AND d.shop_id = #{q.shopId} @@ -114,7 +118,8 @@ d.status, d.create_time, d.accept_time, d.get_time, d.must_finish_time, d.finish_time, d.receiver_name, d.receiver_phone, d.receiver_address, d.shop_name, d.shop_phone, d.shop_address, d.delivery_type, d.number_code, - d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures, d.is_big,d.is_return,d.worker_name,d.arrive_time + d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures, + d.is_big,d.is_return,d.worker_name,d.arrive_time,d.new_worker FROM mall_delivery_order d d.status not in (-1,4,0) @@ -124,6 +129,9 @@ AND d.worker_id = #{q.workerId} + + AND d.new_worker = #{q.newWorker} + AND d.shop_id = #{q.shopId} @@ -160,7 +168,7 @@ d.status, d.create_time, d.accept_time, d.get_time, d.must_finish_time, d.finish_time, d.receiver_name, d.receiver_phone, d.receiver_address, d.shop_name, d.shop_phone, d.shop_address, d.delivery_type, d.number_code, - d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures, d.is_big,d.is_return,d.worker_name,d.arrive_time + d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures, d.is_big,d.is_return,d.worker_name,d.arrive_time,d.new_worker FROM mall_delivery_order d where d.group_id = (select id from mall_order_group where 1 = 1