From 71627c98622c051d61ceb834be0424ceddb63f93 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Wed, 8 May 2019 15:59:48 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=88=B8=E6=9B=B4=E6=94=B9][=E4=BF=AE?= =?UTF-8?q?=E6=94=B9]:=E5=88=B8=E5=BA=93=E5=AD=98=E5=8F=8A=E6=9C=89?= =?UTF-8?q?=E6=95=88=E6=9C=9F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/market/WxCouponController.java | 3 +- .../java/com/iformall/common/ErrorCode.java | 2 + .../java/com/iformall/domain/po/WxCoupon.java | 29 ++++++++++++- .../com/iformall/mapper/WxCouponMapper.java | 3 ++ .../com/iformall/service/WxCouponService.java | 2 +- .../service/impl/WxCouponServiceImpl.java | 41 ++++++++++++++++++- .../main/resources/mapper/WxCouponMapper.xml | 8 ++++ 7 files changed, 81 insertions(+), 7 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java index 5daad95e3..8a153090d 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java @@ -71,8 +71,7 @@ public class WxCouponController extends BaseController { return new ResultData(ResultData.ERROR, "缺少id"); } wxCoupon.setTenantId(getTenantId()); - wxCouponService.updateCouponStockAndEndTime(wxCoupon); - return new ResultData(); + return wxCouponService.updateCouponStockAndEndTime(wxCoupon); } @ApiOperation("根据id删除接口") diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 6c1374d18..bef06da74 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -106,6 +106,8 @@ public enum ErrorCode{ COUPON_MERCHANT_NOT_FOUND(2032, "卡券关联商户未发现"), COUPON_CHANNEL_IS_NOT_STARTED(2033, "此券活动未开始"), COUPON_CHANNEL_IS_END(2033, "此券活动已结束"), + COUPON_STOCK_ERR(2034, "券库存设置错误"), + COUPON_VALID_DATE_ERR(2035, "券有效期设置错误"), PUSH_LIMIT_UP_TO_1DAYLIMIT(2040, "此用户一天内发券到达疲劳度限制"), PUSH_LIMIT_UP_TO_COUPONLIMIT(2041, "此用户发此券到达疲劳度限制"), diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java index cf65ffab2..5850835bc 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java @@ -184,12 +184,21 @@ public class WxCoupon extends BaseEntity { @Transient private String merchantParams; - /**投放频道参数,用来过滤**/ @Transient + @io.swagger.annotations.ApiModelProperty(value="投放频道参数,用来过滤",name="targetAd") private Integer targetAd; @Transient + @io.swagger.annotations.ApiModelProperty(value="投放频道参数,用来过滤",name="couponId") private Long couponId; + @Transient + @io.swagger.annotations.ApiModelProperty(value="修改库存有效期参数, 用来做乐观锁",name="orgRemainInventory") + private Integer orgRemainInventory; + + @Transient + @io.swagger.annotations.ApiModelProperty(value="修改库存有效期参数, 用来做乐观锁",name="orgInventory") + private Integer orgInventory; + //营销分析 private WxCouponStatisVo wxCouponStatisVo; @@ -504,7 +513,23 @@ public class WxCoupon extends BaseEntity { this.creditRefund = creditRefund; } - public static enum Field + public Integer getOrgRemainInventory() { + return orgRemainInventory; + } + + public void setOrgRemainInventory(Integer orgRemainInventory) { + this.orgRemainInventory = orgRemainInventory; + } + + public Integer getOrgInventory() { + return orgInventory; + } + + public void setOrgInventory(Integer orgInventory) { + this.orgInventory = orgInventory; + } + + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java index 206bd5d0b..c685d0db7 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java @@ -72,4 +72,7 @@ public interface WxCouponMapper extends CommonMapper { Long priceCouponCancelCount(WxCoupon wxCoupon); List findSaleCardCountHistory(WxCoupon wxCoupon); + + // 库存,有效期修改 + int updateStockAndValidDate(WxCoupon wxCoupon); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java index a5bc63760..77c075d60 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java @@ -197,6 +197,6 @@ public interface WxCouponService { /** * 增加库存及修改有效时间 */ - int updateCouponStockAndEndTime(WxCoupon wxCoupon); + ResultData updateCouponStockAndEndTime(WxCoupon wxCoupon); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java index fc8ac6fcf..43e75073f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java @@ -485,11 +485,48 @@ public class WxCouponServiceImpl implements WxCouponService { } @Override - public int updateCouponStockAndEndTime(WxCoupon wxCoupon) { + @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public ResultData updateCouponStockAndEndTime(WxCoupon wxCoupon) { // 1. get old coupon info // 2. check 库存是否合适 // 3. check 新的有效期是否合适 // 4. 更新库存及有效期 - return 0; + WxCoupon oldCoupon = wxCouponMapper.selectByPrimaryKey(wxCoupon.getId()); + if(wxCoupon.getInventory() < wxCoupon.getRemainInventory()) { + // 总库存数要大于等于可用库存数 + return new ResultData(ErrorCode.COUPON_STOCK_ERR); + } + if(wxCoupon.getInventory() <= oldCoupon.getInventory() - oldCoupon.getRemainInventory()) { + // 库存可增, 可减, 但是要保证,总库存数要大于已售卖数 + return new ResultData(ErrorCode.COUPON_STOCK_ERR); + } + if(wxCoupon.getInventory()-wxCoupon.getRemainInventory() != oldCoupon.getInventory() - oldCoupon.getRemainInventory()) { + // 已售卖数不变 + return new ResultData(ErrorCode.COUPON_STOCK_ERR); + } + if(wxCoupon.getValidType() != oldCoupon.getValidType()) { + // 券有效期类型不能改变 + return new ResultData(ErrorCode.COUPON_VALID_DATE_ERR); + } + if(oldCoupon.getValidType().equals(EnumCouponValidType.BETWEEN_TWO_TIME.getCode())) { + if(wxCoupon.getValidEndDate().before(oldCoupon.getValidEndDate())) { + // 券有效期只可增加 + return new ResultData(ErrorCode.COUPON_VALID_DATE_ERR); + } + } else { + if(wxCoupon.getValidDays() + + update wx_coupon + SET + `remain_inventory` = #{remainInventory}, `inventory` = #{inventory}, + `valid_type` = #{validType}, `valid_end_date` = #{validEndDate}, `valid_days` = #{validDays} + WHERE id = #{id} and `remain_inventory` = #{orgRemainInventory} and `inventory` = #{orgInventory} + + where 1 = 1