套餐推广管理端接口
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.PpHelpRecord;
|
||||
|
||||
/**
|
||||
* 套餐推广助力记录 映射层。
|
||||
*
|
||||
* @author gyj
|
||||
* @since 2025-12-18
|
||||
*/
|
||||
public interface PpHelpRecordMapper extends BaseMapper<PpHelpRecord> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.PpPackage;
|
||||
|
||||
/**
|
||||
* 套餐推广套餐 映射层。
|
||||
*
|
||||
* @author gyj
|
||||
* @since 2025-12-18
|
||||
*/
|
||||
public interface PpPackageMapper extends BaseMapper<PpPackage> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.PpPackageOrder;
|
||||
|
||||
/**
|
||||
* 套餐推广订单 映射层。
|
||||
*
|
||||
* @author gyj
|
||||
* @since 2025-12-18
|
||||
*/
|
||||
public interface PpPackageOrderMapper extends BaseMapper<PpPackageOrder> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.czg.service.market.service.impl;
|
||||
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.market.entity.PpHelpRecord;
|
||||
import com.czg.market.service.PpHelpRecordService;
|
||||
import com.czg.service.market.mapper.PpHelpRecordMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 套餐推广助力记录 服务层实现。
|
||||
*
|
||||
* @author gyj
|
||||
* @since 2025-12-18
|
||||
*/
|
||||
@Service
|
||||
public class PpHelpRecordServiceImpl extends ServiceImpl<PpHelpRecordMapper, PpHelpRecord> implements PpHelpRecordService{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.czg.service.market.service.impl;
|
||||
|
||||
import com.czg.constants.PpPackageConstants;
|
||||
import com.czg.constants.SystemConstants;
|
||||
import com.czg.enums.OrderNoPrefixEnum;
|
||||
import com.czg.exception.CzgException;
|
||||
import com.czg.market.entity.PpPackage;
|
||||
import com.czg.market.entity.PpPackageOrder;
|
||||
import com.czg.market.service.PpPackageOrderService;
|
||||
import com.czg.sa.StpKit;
|
||||
import com.czg.service.market.mapper.PpPackageMapper;
|
||||
import com.czg.service.market.mapper.PpPackageOrderMapper;
|
||||
import com.czg.utils.CzgRandomUtils;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.update.UpdateChain;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 套餐推广订单 服务层实现。
|
||||
*
|
||||
* @author gyj
|
||||
* @since 2025-12-18
|
||||
*/
|
||||
@Service
|
||||
public class PpPackageOrderServiceImpl extends ServiceImpl<PpPackageOrderMapper, PpPackageOrder> implements PpPackageOrderService {
|
||||
|
||||
@Resource
|
||||
private PpPackageMapper ppPackageMapper;
|
||||
|
||||
@Override
|
||||
public Long createPackageOrder(Long packageId) {
|
||||
PpPackage aPackage = ppPackageMapper.selectOneByQuery(QueryWrapper.create().eq(PpPackage::getId, packageId)
|
||||
.eq(PpPackage::getIsDel, SystemConstants.OneZero.ZERO));
|
||||
if (aPackage == null) {
|
||||
throw new CzgException("套餐不存在");
|
||||
}
|
||||
|
||||
if (!aPackage.getOnlineStatus().equals(SystemConstants.OneZero.ONE)) {
|
||||
throw new CzgException("套餐已下架");
|
||||
}
|
||||
|
||||
PpPackageOrder order = new PpPackageOrder()
|
||||
.setShopId(aPackage.getShopId())
|
||||
.setPackageId(packageId)
|
||||
.setUserId(StpKit.USER.getLoginIdAsLong())
|
||||
.setShareNum(0)
|
||||
.setOrderNo(CzgRandomUtils.randomNumber(OrderNoPrefixEnum.PPO, 12, false))
|
||||
.setStatus(PpPackageConstants.OrderStatus.PROCESSING);
|
||||
save(order);
|
||||
|
||||
return order.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getProgressingPackageOrderCount(Long packageId) {
|
||||
QueryWrapper wrapper = QueryWrapper.create().eq(PpPackageOrder::getPackageId, packageId)
|
||||
.eq(PpPackageOrder::getStatus, PpPackageConstants.OrderStatus.PROCESSING);
|
||||
return count(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelProgressingPackageOrder(Long shopId, Long packageId) {
|
||||
UpdateChain<PpPackageOrder> update = UpdateChain.of(PpPackageOrder.class)
|
||||
.set(PpPackageOrder::getStatus, PpPackageConstants.OrderStatus.CANCEL)
|
||||
.set(PpPackageOrder::getCancelTime, LocalDateTime.now())
|
||||
.set(PpPackageOrder::getCancelReason, "商家下架套餐");
|
||||
if (packageId != null && packageId > 0L) {
|
||||
update.eq(PpPackageOrder::getPackageId, packageId);
|
||||
}
|
||||
update.eq(PpPackageOrder::getShopId, shopId)
|
||||
.eq(PpPackageOrder::getStatus, PpPackageConstants.OrderStatus.PROCESSING)
|
||||
.update();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
package com.czg.service.market.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.czg.account.entity.ShopConfig;
|
||||
import com.czg.account.service.ShopConfigService;
|
||||
import com.czg.account.service.ShopInfoService;
|
||||
import com.czg.constants.SystemConstants;
|
||||
import com.czg.exception.CzgException;
|
||||
import com.czg.market.entity.PpPackage;
|
||||
import com.czg.market.service.PpPackageOrderService;
|
||||
import com.czg.market.service.PpPackageService;
|
||||
import com.czg.market.vo.PpPackagePageReqVo;
|
||||
import com.czg.market.vo.PpPackageVO;
|
||||
import com.czg.sa.StpKit;
|
||||
import com.czg.service.market.mapper.PpPackageMapper;
|
||||
import com.czg.utils.AssertUtil;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.update.UpdateChain;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 套餐推广套餐 服务层实现。
|
||||
*
|
||||
* @author gyj
|
||||
* @since 2025-12-18
|
||||
*/
|
||||
@Service
|
||||
public class PpPackageServiceImpl extends ServiceImpl<PpPackageMapper, PpPackage> implements PpPackageService {
|
||||
|
||||
@Resource
|
||||
private PpPackageOrderService ppPackageOrderService;
|
||||
|
||||
@DubboReference
|
||||
private ShopInfoService shopInfoService;
|
||||
|
||||
@DubboReference
|
||||
private ShopConfigService shopConfigService;
|
||||
|
||||
@Override
|
||||
public Integer getPackagePromotionSwitch() {
|
||||
return shopConfigService.getById(StpKit.USER.getShopId()).getIsPackagePromotion();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public boolean updatePackagePromotionSwitch(Integer status) {
|
||||
Long shopId = StpKit.USER.getShopId();
|
||||
ShopConfig shopConfig = new ShopConfig();
|
||||
shopConfig.setIsPackagePromotion(status);
|
||||
boolean update = shopConfigService.update(shopConfig, query().eq(ShopConfig::getId, shopId));
|
||||
if (update && status == 0) {
|
||||
// 下架所有进行中的套餐订单
|
||||
UpdateChain.of(PpPackage.class)
|
||||
.set(PpPackage::getOnlineStatus, SystemConstants.OneZero.ZERO)
|
||||
.eq(PpPackage::getShopId, shopId)
|
||||
.update();
|
||||
|
||||
ppPackageOrderService.cancelProgressingPackageOrder(StpKit.USER.getShopId(), 0L);
|
||||
}
|
||||
return update;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertPackage(PpPackageVO packageVO) {
|
||||
if (SystemConstants.SubShopType.CUSTOM.equals(packageVO.getUseShopType())) {
|
||||
AssertUtil.isBlank(packageVO.getUseShops(), "请配置可用门店");
|
||||
}
|
||||
|
||||
Long shopId = StpKit.USER.getShopId();
|
||||
// 查询名称是否存在
|
||||
PpPackage ppPackage = getOne(QueryWrapper.create().eq(PpPackage::getPackageName, packageVO.getPackageName())
|
||||
.eq(PpPackage::getShopId, shopId).eq(PpPackage::getIsDel, SystemConstants.OneZero.ZERO));
|
||||
if (ppPackage != null) {
|
||||
throw new CzgException("名称已存在");
|
||||
}
|
||||
|
||||
ppPackage = BeanUtil.copyProperties(packageVO, PpPackage.class);
|
||||
ppPackage.setShopId(shopId);
|
||||
ppPackage.setPackageContent(JSONObject.toJSONString(packageVO.getPackageContent()));
|
||||
ppPackage.setUseWeeks(JSONObject.toJSONString(packageVO.getUseWeeks()));
|
||||
ppPackage.setTieredDiscount(JSONObject.toJSONString(packageVO.getTieredDiscount()));
|
||||
|
||||
save(ppPackage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePackage(PpPackageVO packageVO) {
|
||||
if (SystemConstants.SubShopType.CUSTOM.equals(packageVO.getUseShopType())) {
|
||||
AssertUtil.isBlank(packageVO.getUseShops(), "请配置可用门店");
|
||||
}
|
||||
|
||||
Long shopId = StpKit.USER.getShopId();
|
||||
|
||||
PpPackage ppPackage = getPackageById(packageVO.getId());
|
||||
|
||||
if (!ppPackage.getShopId().equals(shopId)) {
|
||||
throw new CzgException("无权限");
|
||||
}
|
||||
|
||||
ppPackage = BeanUtil.copyProperties(packageVO, PpPackage.class);
|
||||
ppPackage.setPackageContent(JSONObject.toJSONString(packageVO.getPackageContent()));
|
||||
ppPackage.setUseWeeks(JSONObject.toJSONString(packageVO.getUseWeeks()));
|
||||
ppPackage.setTieredDiscount(JSONObject.toJSONString(packageVO.getTieredDiscount()));
|
||||
updateById(ppPackage);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public long deletePackage(Long id) {
|
||||
Long shopId = StpKit.USER.getShopId();
|
||||
|
||||
PpPackage ppPackage = getPackageById(id);
|
||||
|
||||
if (!ppPackage.getShopId().equals(shopId)) {
|
||||
throw new RuntimeException("无权限");
|
||||
}
|
||||
|
||||
long orderCount = ppPackageOrderService.getProgressingPackageOrderCount(id);
|
||||
if (orderCount > 0) {
|
||||
return orderCount;
|
||||
}
|
||||
|
||||
ppPackage.setIsDel(1);
|
||||
updateById(ppPackage);
|
||||
return 0L;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void sureDeletePackage(Long id) {
|
||||
PpPackage ppPackage = getPackageById(id);
|
||||
ppPackage.setIsDel(1);
|
||||
updateById(ppPackage);
|
||||
|
||||
ppPackageOrderService.cancelProgressingPackageOrder(StpKit.USER.getShopId(), id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<PpPackageVO> getPackagePage(PpPackagePageReqVo reqVo, boolean isAdmin) {
|
||||
Long shopId = StpKit.USER.getShopId();
|
||||
|
||||
// 如果没有开启操作,直接返回空数据
|
||||
ShopConfig shopConfig = shopConfigService.getById(shopId);
|
||||
if (SystemConstants.OneZero.ZERO.equals(shopConfig.getIsPackagePromotion())) {
|
||||
return new Page<>();
|
||||
}
|
||||
|
||||
Long mainShopId = shopInfoService.getMainIdByShopId(shopId);
|
||||
|
||||
QueryWrapper queryWrapper = new QueryWrapper();
|
||||
queryWrapper.eq(PpPackage::getIsDel, SystemConstants.OneZero.ZERO)
|
||||
.eq(PpPackage::getOnlineStatus, reqVo.getOnlineStatus())
|
||||
.like(PpPackage::getPackageName, reqVo.getPackageName())
|
||||
.orderBy(PpPackage::getCreateTime).desc();
|
||||
|
||||
queryWrapper.and(q -> {
|
||||
q.eq(PpPackage::getShopId, shopId).or(q1 -> {
|
||||
q1.eq(PpPackage::getUseShopType, SystemConstants.SubShopType.ALL).eq(PpPackage::getShopId, mainShopId);
|
||||
}).or(q2 -> {
|
||||
q2.eq(PpPackage::getUseShopType, SystemConstants.SubShopType.CUSTOM).and("FIND_IN_SET( " + shopId + ", use_shops ) > 0");
|
||||
});
|
||||
});
|
||||
|
||||
Page<PpPackage> page = page(Page.of(reqVo.getPage(), reqVo.getSize()), queryWrapper);
|
||||
|
||||
List<PpPackageVO> voList = new ArrayList<>();
|
||||
page.getRecords().forEach(item -> {
|
||||
PpPackageVO packageVO = BeanUtil.copyProperties(item, PpPackageVO.class);
|
||||
|
||||
packageVO.setUseWeeks(JSONArray.parseArray(item.getUseWeeks(), String.class));
|
||||
packageVO.setPackageContent(JSONArray.parseArray(item.getPackageContent(), PpPackageVO.PackageContent.class));
|
||||
packageVO.setTieredDiscount(JSONArray.parseArray(item.getTieredDiscount(), PpPackageVO.TieredDiscount.class));
|
||||
|
||||
voList.add(packageVO);
|
||||
});
|
||||
|
||||
Page<PpPackageVO> voPage = new Page<>();
|
||||
BeanUtil.copyProperties(page, voPage, "records");
|
||||
voPage.setRecords(voList);
|
||||
return voPage;
|
||||
}
|
||||
|
||||
private PpPackage getPackageById(Long id) {
|
||||
PpPackage ppPackage = getOne(QueryWrapper.create().eq(PpPackage::getId, id)
|
||||
.eq(PpPackage::getIsDel, SystemConstants.OneZero.ZERO));
|
||||
if (ppPackage == null) {
|
||||
throw new RuntimeException("套餐不存在");
|
||||
}
|
||||
return ppPackage;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.czg.service.market.mapper.PpHelpRecordMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.czg.service.market.mapper.PpPackageMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.czg.service.market.mapper.PpPackageOrderMapper">
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user