master:推广营销完善;
parent
20c6658a1c
commit
49b8fef8c1
|
|
@ -106,7 +106,7 @@ public class AdvertRoundController extends XktBaseController {
|
|||
}
|
||||
|
||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()")
|
||||
@ApiOperation(value = "退订", httpMethod = "POST", response = R.class)
|
||||
@ApiOperation(value = "退订", httpMethod = "PUT", response = R.class)
|
||||
@Log(title = "退订", businessType = BusinessType.UPDATE)
|
||||
@PutMapping("/unsubscribe/{storeId}/{advertRoundId}")
|
||||
public R<Integer> unsubscribe(@PathVariable("storeId") Long storeId, @PathVariable("advertRoundId") Long advertRoundId) {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
package com.ruoyi.web.controller.xkt;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.XktBaseController;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.web.controller.xkt.vo.storeMember.StoreMemberCreateVO;
|
||||
import com.ruoyi.xkt.dto.storeMember.StoreMemberCreateDTO;
|
||||
import com.ruoyi.xkt.service.IStoreMemberService;
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
|
@ -33,7 +35,7 @@ public class StoreMemberController extends XktBaseController {
|
|||
@Log(title = "", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public R<Integer> create(@Validated @RequestBody StoreMemberCreateVO createVO) {
|
||||
return R.ok(storeMemberService.create(createVO.getStoreId()));
|
||||
return R.ok(storeMemberService.create(BeanUtil.toBean(createVO, StoreMemberCreateDTO.class)));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -21,8 +21,11 @@ public class StoreMemberCreateVO {
|
|||
@NotNull(message = "档口ID不能为空!")
|
||||
@ApiModelProperty(value = "档口ID", required = true)
|
||||
private Long storeId;
|
||||
@NotNull(message = "会员金额不能为空!")
|
||||
@ApiModelProperty(value = "会员金额")
|
||||
private BigDecimal amount;
|
||||
@NotNull(message = "支付金额不能为空!")
|
||||
@ApiModelProperty(value = "支付金额", required = true)
|
||||
private BigDecimal payPrice;
|
||||
@NotNull(message = "交易密码不能为空!")
|
||||
@ApiModelProperty(value = "交易密码")
|
||||
private String transactionPassword;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
package com.ruoyi.xkt.dto.storeMember;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@ApiModel("档口购买会员")
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class StoreMemberCreateDTO {
|
||||
|
||||
@ApiModelProperty(value = "档口ID")
|
||||
private Long storeId;
|
||||
@ApiModelProperty(value = "支付金额")
|
||||
private BigDecimal payPrice;
|
||||
@ApiModelProperty(value = "交易密码")
|
||||
private String transactionPassword;
|
||||
|
||||
}
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
package com.ruoyi.xkt.service;
|
||||
|
||||
import com.ruoyi.xkt.dto.storeMember.StoreMemberCreateDTO;
|
||||
|
||||
/**
|
||||
* 推广营销Service接口
|
||||
*
|
||||
|
|
@ -11,8 +13,8 @@ public interface IStoreMemberService {
|
|||
/**
|
||||
* 档口购买会员
|
||||
*
|
||||
* @param storeId 档口ID
|
||||
* @param createDTO 新增入参
|
||||
* @return Integer
|
||||
*/
|
||||
Integer create(Long storeId);
|
||||
Integer create(StoreMemberCreateDTO createDTO);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -584,9 +584,9 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService {
|
|||
@Transactional
|
||||
public Integer create(AdRoundStoreCreateDTO createDTO) {
|
||||
// 判断截止时间是否超时,并且只会处理马上播放的这一轮。比如 5.1-5.3,当前为4.30,处理这一轮;当前为5.2,处理这一轮;当前为5.3(最后一天),处理下一轮。
|
||||
/*if (DateUtils.getTime().compareTo(this.getDeadline(createDTO.getSymbol())) > 0) {
|
||||
if (DateUtils.getTime().compareTo(this.getDeadline(createDTO.getSymbol())) > 0) {
|
||||
throw new ServiceException("竞价失败,已过系统截止时间!", HttpStatus.ERROR);
|
||||
}*/
|
||||
}
|
||||
Store store = redisCache.getCacheObject(CacheConstants.STORE_KEY + createDTO.getStoreId());
|
||||
if (ObjectUtils.isEmpty(store)) {
|
||||
throw new ServiceException("档口不存在!", HttpStatus.ERROR);
|
||||
|
|
@ -687,8 +687,8 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService {
|
|||
List<String> idList = list.stream().map(AdvertRoundStorePageResDTO::getProdIdStr)
|
||||
.filter(StringUtils::isNotBlank).flatMap(str -> StrUtil.split(str, ",").stream())
|
||||
.distinct().collect(Collectors.toList());
|
||||
List<StoreProduct> storeProdList = this.storeProdMapper.selectByIds(idList);
|
||||
Map<String, StoreProduct> storeProdMap = storeProdList.stream().collect(Collectors.toMap(x -> x.getId().toString(), x -> x));
|
||||
Map<String, StoreProduct> storeProdMap = CollectionUtils.isEmpty(idList) ? new HashMap<>()
|
||||
: this.storeProdMapper.selectByIds(idList).stream().collect(Collectors.toMap(x -> x.getId().toString(), x -> x));
|
||||
list.forEach(item -> {
|
||||
final List<String> prodArtNumList = StringUtils.isEmpty(item.getProdIdStr()) ? new ArrayList<>() : StrUtil.split(item.getProdIdStr(), ",").stream()
|
||||
.map(storeProdMap::get).filter(Objects::nonNull).map(StoreProduct::getProdArtNum).collect(Collectors.toList());
|
||||
|
|
@ -889,13 +889,14 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService {
|
|||
advertRound.setProdIdStr(picDTO.getProdIdStr());
|
||||
// 修改推广图
|
||||
if (ObjectUtils.isNotEmpty(picDTO.getFile())) {
|
||||
SysFile file = BeanUtil.toBean(picDTO, SysFile.class);
|
||||
SysFile file = BeanUtil.toBean(picDTO.getFile(), SysFile.class);
|
||||
this.fileMapper.insert(file);
|
||||
advertRound.setPicId(file.getId())
|
||||
// 设置推广图审核状态 为待审核 因为有可能是 审核驳回后再次提交图片
|
||||
.setPicSetType(AdPicSetType.SET.getValue())
|
||||
// 设置推广图状态为 待审核,有可能是审核驳回后再次提交图片
|
||||
.setPicAuditStatus(AdPicAuditStatus.UN_AUDIT.getValue());
|
||||
.setPicAuditStatus(AdPicAuditStatus.UN_AUDIT.getValue())
|
||||
.setUpdateTime(new Date());
|
||||
}
|
||||
return this.advertRoundMapper.updateById(advertRound);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,8 +4,14 @@ import com.ruoyi.common.constant.CacheConstants;
|
|||
import com.ruoyi.common.core.redis.RedisCache;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.xkt.domain.StoreMember;
|
||||
import com.ruoyi.xkt.dto.storeMember.StoreMemberCreateDTO;
|
||||
import com.ruoyi.xkt.enums.NoticeOwnerType;
|
||||
import com.ruoyi.xkt.enums.NoticeType;
|
||||
import com.ruoyi.xkt.enums.StoreMemberLevel;
|
||||
import com.ruoyi.xkt.enums.UserNoticeType;
|
||||
import com.ruoyi.xkt.mapper.StoreMemberMapper;
|
||||
import com.ruoyi.xkt.service.IAssetService;
|
||||
import com.ruoyi.xkt.service.INoticeService;
|
||||
import com.ruoyi.xkt.service.IStoreMemberService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
|
@ -26,19 +32,22 @@ public class StoreMemberServiceImpl implements IStoreMemberService {
|
|||
|
||||
final StoreMemberMapper storeMemberMapper;
|
||||
final RedisCache redisCache;
|
||||
final IAssetService assetService;
|
||||
final INoticeService noticeService;
|
||||
|
||||
/**
|
||||
* 档口购买会员
|
||||
*
|
||||
* @param storeId 档口ID
|
||||
* @param createDTO 新增入参
|
||||
* @return Integer
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public Integer create(Long storeId) {
|
||||
Optional.ofNullable(storeId).orElseThrow(() -> new RuntimeException("档口ID不能为空"));
|
||||
public Integer create(StoreMemberCreateDTO createDTO) {
|
||||
Optional.ofNullable(createDTO.getStoreId()).orElseThrow(() -> new RuntimeException("档口ID不能为空!"));
|
||||
Optional.ofNullable(createDTO.getPayPrice()).orElseThrow(() -> new RuntimeException("购买金额不能为空!"));
|
||||
StoreMember storeMember = new StoreMember();
|
||||
storeMember.setStoreId(storeId);
|
||||
storeMember.setStoreId(createDTO.getStoreId());
|
||||
// 最低等级会员:实力质造
|
||||
storeMember.setLevel(StoreMemberLevel.STRENGTH_CONSTRUCT.getValue());
|
||||
storeMember.setStartTime(java.sql.Date.valueOf(LocalDate.now()));
|
||||
|
|
@ -47,7 +56,12 @@ public class StoreMemberServiceImpl implements IStoreMemberService {
|
|||
storeMember.setCreateBy(SecurityUtils.getUsername());
|
||||
int count = this.storeMemberMapper.insert(storeMember);
|
||||
// 将档口会员信息添加到 redis 中
|
||||
redisCache.setCacheObject(CacheConstants.STORE_MEMBER + storeId, StoreMemberLevel.STRENGTH_CONSTRUCT.getValue());
|
||||
redisCache.setCacheObject(CacheConstants.STORE_MEMBER + createDTO.getStoreId(), StoreMemberLevel.STRENGTH_CONSTRUCT.getValue());
|
||||
// 新增订购成功的消息通知
|
||||
this.noticeService.createSingleNotice(SecurityUtils.getUserId(), "购买会员成功!", NoticeType.NOTICE.getValue(), NoticeOwnerType.SYSTEM.getValue(),
|
||||
createDTO.getStoreId(), UserNoticeType.SYSTEM_MSG.getValue(), "恭喜您!购买:实力质造 会员成功!");
|
||||
// 扣除推广费
|
||||
assetService.payAdvertFee(createDTO.getStoreId(), createDTO.getPayPrice(), createDTO.getTransactionPassword());
|
||||
return count;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue