diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPresentController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPresentController.java index dc1d3663d..09a0d6cc8 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPresentController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPresentController.java @@ -2,9 +2,11 @@ package com.iformall.controller.market; import com.github.pagehelper.PageInfo; import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.po.BaseEntity; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxCouponPresent; import com.iformall.service.WxCouponPresentService; import io.swagger.annotations.Api; @@ -51,4 +53,26 @@ public class WxCouponPresentController extends BaseController { return new ResultData(wxCouponPresentService.findById(id)); } + + @ApiOperation("新增接口") + @PostMapping("add") + @SystemControllerLog(description = "新增") + public ResultData add(@RequestBody WxCouponPresent wxCouponPresent) { + logger.debug("[" + getIpAddr() + "] WxCouponInjectController::add"); + + if (wxCouponPresent.getCouponId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "请选择卡"); + } + + if (wxCouponPresent.getPhones().isEmpty()) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "请填写手机号"); + } + + MallUserInfo user = getUser(); + wxCouponPresent.setTenantId(user.getTenantId()); + wxCouponPresent.setUserId(user.getId()); + + return wxCouponPresentService.add(wxCouponPresent); + } + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponPresent.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponPresent.java index 9ceac242d..670aa1ff0 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponPresent.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponPresent.java @@ -1,5 +1,6 @@ package com.iformall.domain.po; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -20,21 +21,22 @@ public class WxCouponPresent extends BaseEntity { @Transient protected List ids; - @io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId") + @ApiModelProperty(value = "租户ID", name = "tenantId") private String tenantId; - @io.swagger.annotations.ApiModelProperty(value = "用户ID", name = "userId") + @ApiModelProperty(value = "用户ID", name = "userId") private Long userId; - @io.swagger.annotations.ApiModelProperty(value = "卡券ID", name = "couponId") + @ApiModelProperty(value = "卡券ID", name = "couponId") private Long couponId; - @io.swagger.annotations.ApiModelProperty(value = "卡券名称", name = "couponName") + @ApiModelProperty(value = "卡券名称", name = "couponName") private String couponName; - @io.swagger.annotations.ApiModelProperty(value = "手机", name = "phones") + @ApiModelProperty(value = "手机", name = "phones") private String phones; - @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createDate") + @ApiModelProperty(value = "创建时间", name = "createDate") private Date createTime; - @io.swagger.annotations.ApiModelProperty(value = "更新时间", name = "updateDate") + @ApiModelProperty(value = "更新时间", name = "updateDate") private Date updateTime; - + @ApiModelProperty(value = "发送数量", name = "sendAmount") + private Integer sendAmount; @Transient protected Date sendTimeStart; @@ -42,5 +44,4 @@ public class WxCouponPresent extends BaseEntity { @Transient protected Date sendTimeEnd; - } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponPresentService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponPresentService.java index dfa7f8ddc..e54cb7dc7 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponPresentService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponPresentService.java @@ -1,6 +1,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; import com.iformall.domain.po.WxCouponPresent; /** @@ -12,4 +13,7 @@ public interface WxCouponPresentService { PageInfo listAsPage(WxCouponPresent wxCouponPresent, Integer pageNum, Integer pageSize); WxCouponPresent findById(Long id); + + ResultData add(WxCouponPresent wxCouponPresent); + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPresentServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPresentServiceImpl.java index f8396f59e..908e6c1c2 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPresentServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPresentServiceImpl.java @@ -2,21 +2,50 @@ package com.iformall.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxCouponPassword; import com.iformall.domain.po.WxCouponPresent; +import com.iformall.enums.EnumCouponPasswordStatus; +import com.iformall.enums.EnumCouponStatus; +import com.iformall.enums.EnumCouponValidType; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxCouponPasswordMapper; import com.iformall.mapper.WxCouponPresentMapper; +import com.iformall.service.PushLimitService; import com.iformall.service.WxCouponPresentService; +import com.iformall.service.WxCouponService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + /** * @author gongbiao */ @Service public class WxCouponPresentServiceImpl implements WxCouponPresentService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired WxCouponPresentMapper wxCouponPresentMapper; + @Autowired + PushLimitService pushLimitService; + + @Autowired + WxCouponService wxCouponService; + + @Autowired + WxCouponPasswordMapper wxCouponPasswordMapper; @Override public PageInfo listAsPage(WxCouponPresent record, Integer pageIndex, Integer pageSize) { @@ -28,4 +57,50 @@ public class WxCouponPresentServiceImpl implements WxCouponPresentService { return wxCouponPresentMapper.selectByPrimaryKey(id); } + @Override + public ResultData add(WxCouponPresent record) { + try { + pushLimitService.checkSendTime(record.getTenantId()); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } + + WxCoupon wxCoupon = wxCouponService.getById(record.getCouponId()); + if (wxCoupon.getValidType().equals(EnumCouponValidType.BETWEEN_TWO_TIME.getCode())) { //时间范围 + if (new Date().after(wxCoupon.getValidEndDate())) { + return new ResultData(ErrorCode.COUPON_IS_EXPIRED); + } + } + if (!wxCoupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode())) { + return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF); + } + + record.setCouponName(wxCoupon.getTitle()); + + String phones = record.getPhones(); + String[] phoneSplit = phones.split(","); + Set phoneSetTemp = new HashSet<>(Arrays.asList(phoneSplit)); + Set phoneSet = phoneSetTemp.stream().filter(p -> !p.isEmpty()).collect(Collectors.toSet()); + + WxCouponPassword wxCouponPassword = new WxCouponPassword(); + wxCouponPassword.setTenantId(record.getTenantId()); + wxCouponPassword.setCouponId(record.getCouponId()); + wxCouponPassword.setStatus(EnumCouponPasswordStatus.INIT.getCode()); + int inventory = wxCouponPasswordMapper.selectCount(wxCouponPassword); + if (phoneSet.size() > inventory) { + return new ResultData(ErrorCode.REMAIN_IS_EMPTY); + } + + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + + record.setCouponName(wxCoupon.getTitle()); + record.setSendAmount(phoneSet.size()); + + wxCouponPresentMapper.insertSelective(record); + //发送短信 + return new ResultData(); + } + }