短信店铺配置

This commit is contained in:
2025-10-16 18:02:11 +08:00
parent 6b9d5aa3a3
commit 780afe8803
10 changed files with 213 additions and 24 deletions

View File

@@ -1,10 +1,7 @@
package com.czg.controller.admin;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSONObject;
import com.czg.TimeQueryParam;
import com.czg.annotation.SaAdminCheckLogin;
import com.czg.annotation.SaAdminCheckRole;
import com.czg.market.dto.SmsMoneyDetailDto;
import com.czg.market.dto.SmsShopMoneyDetailDTO;
@@ -13,7 +10,9 @@ import com.czg.market.dto.SmsTemplateQueryDTO;
import com.czg.market.entity.SmsShopMoney;
import com.czg.market.entity.SmsShopMoneyDetail;
import com.czg.market.service.SmsShopMoneyDetailService;
import com.czg.market.service.SmsShopMoneyService;
import com.czg.market.service.SmsShopTemplateService;
import com.czg.market.vo.SmsShopMoneyVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.service.market.mapper.SmsShopMoneyMapper;
@@ -44,7 +43,7 @@ public class SmsShopTemplateController {
@Resource
private SmsShopMoneyDetailService smsMoneyDetailService;
@Resource
private SmsShopMoneyMapper shopMoneyMapper;
private SmsShopMoneyService shopMoneyService;
/**
* 列表
@@ -115,34 +114,31 @@ public class SmsShopTemplateController {
*/
@GetMapping("/smsMoney")
public CzgResult<SmsShopMoney> getShopSmsMoney() {
SmsShopMoney shopMoney = shopMoneyMapper.selectOneByQuery(
new QueryWrapper()
.eq(SmsShopMoney::getShopId, StpKit.USER.getShopId())
);
if (shopMoney == null) {
shopMoney = new SmsShopMoney();
shopMoney.setShopId(StpKit.USER.getShopId());
shopMoney.setMoney(BigDecimal.ZERO);
shopMoneyMapper.insert(shopMoney);
}
SmsShopMoney shopMoney = shopMoneyService.getShopMoney(StpKit.USER.getShopId());
return CzgResult.success(shopMoney);
}
/**
* 平台:短信店铺配置
*/
@SaAdminCheckRole("管理员")
@GetMapping("/smsMoney/page")
public CzgResult<Page<SmsShopMoneyVO>> getShopSmsMoneyPage(@RequestParam(required = false) Integer page,
@RequestParam(required = false) Integer size,
@RequestParam(required = false) String name
) {
Page<SmsShopMoneyVO> data = shopMoneyService.getShopMoneyPage(page, size, name);
return CzgResult.success(data);
}
/**
* 变更店铺短信余额
*/
@PostMapping("/smsMoney/change")
public CzgResult<Void> change(@RequestBody SmsShopMoneyDetailDTO money) {
Long shopId = StpKit.USER.getShopId();
SmsShopMoney shopMoney = shopMoneyMapper.selectOneByQuery(
new QueryWrapper().eq(SmsShopMoney::getShopId, shopId)
);
if (shopMoney == null) {
shopMoney = new SmsShopMoney();
shopMoney.setShopId(shopId);
shopMoney.setMoney(BigDecimal.ZERO);
shopMoneyMapper.insert(shopMoney);
}
SmsShopMoney shopMoney = shopMoneyService.getShopMoney(shopId);
SmsShopMoneyDetail moneyDetail = BeanUtil.toBean(money, SmsShopMoneyDetail.class);
moneyDetail.setShopId(shopId);
if (money.getType() == 1) {
@@ -153,7 +149,7 @@ public class SmsShopTemplateController {
moneyDetail.setBalance(shopMoney.getMoney());
moneyDetail.setSendRows(0L);
smsMoneyDetailService.save(moneyDetail);
shopMoneyMapper.update(shopMoney, true);
shopMoneyService.updateById(shopMoney);
return CzgResult.success();
}

View File

@@ -12,6 +12,7 @@ public class AAMarketTasks {
//生日有礼奖励发放
@Resource
private BirthdayGiftTask birthdayGiftTask;
//每天12时0分 0秒 执行
@Scheduled(cron = "0 0 12 * * ?")
public void birthdayGiftTask() {
birthdayGiftTask.deliver();
@@ -21,6 +22,7 @@ public class AAMarketTasks {
//优惠券 过期
@Resource
private CouponTask couponTask;
//每天每小时的30分 0秒 执行
@Scheduled(cron = "0 30 * * * ? ")
public void couponTask() {
couponTask.task();
@@ -29,6 +31,7 @@ public class AAMarketTasks {
//会员奖励发放
@Resource
private MemberTask memberTask;
//每天1点 0分 0秒 执行
@Scheduled(cron = "0 0 1 * * ? ")
public void memberTask() {
memberTask.task();
@@ -37,10 +40,20 @@ public class AAMarketTasks {
//满减活动定时任务
@Resource
private DiscountActivityTask discountActivityTask;
//每天0点 0分 1秒 执行
@Scheduled(cron = "1 0 0 * * ? ")
public void discountActivityTask() {
discountActivityTask.task();
}
@Resource
private SmsShopMoneyTask smsShopMoneyTask;
//每月1号 0点 0分 1秒 执行
@Scheduled(cron = "1 0 0 1 * ?")
public void smsShopMoneyTask() {
smsShopMoneyTask.task();
}
}

View File

@@ -0,0 +1,29 @@
package com.czg.task;
import com.czg.market.entity.SmsShopMoney;
import com.czg.service.market.mapper.SmsShopMoneyMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.HashMap;
/**
* @author ww
* @description
*/
@Slf4j
@Component
public class SmsShopMoneyTask {
@Resource
private SmsShopMoneyMapper shopMoneyMapper;
public void task() {
SmsShopMoney smsShopMoney = new SmsShopMoney();
smsShopMoney.setMonthAmountTotal(BigDecimal.ZERO);
smsShopMoney.setMonthSendTotal(0L);
shopMoneyMapper.updateByMap(smsShopMoney, true, new HashMap<>());
}
}

View File

@@ -38,6 +38,11 @@ public class SmsShopMoney implements Serializable {
private BigDecimal money;
private Long sendTotal;
private BigDecimal amountTotal;
private Long monthSendTotal;
private BigDecimal monthAmountTotal;
@Column(onInsertValue = "now()")
private LocalDateTime createTime;

View File

@@ -0,0 +1,24 @@
package com.czg.market.service;
import com.czg.market.vo.SmsShopMoneyVO;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.czg.market.entity.SmsShopMoney;
/**
* 店铺短信余额 服务层。
*
* @author ww
* @since 2025-10-16
*/
public interface SmsShopMoneyService extends IService<SmsShopMoney> {
/**
* 获取店铺短信余额 信息
*/
SmsShopMoney getShopMoney(Long shopId);
/**
* 获取店铺短信余额分页列表
*/
Page<SmsShopMoneyVO> getShopMoneyPage(Integer page, Integer size, String name);
}

View File

@@ -0,0 +1,45 @@
package com.czg.market.vo;
import com.czg.market.entity.SmsShopMoney;
import lombok.Data;
/**
* @author ww
* @description
*/
@Data
public class SmsShopMoneyVO extends SmsShopMoney {
/**
* 店铺名称
*/
private String shopName;
/**
* 店铺logo
*/
private String logo;
/**
* 店铺封面图
*/
private String coverImg;
/**
* trial试用版release正式
*/
private String profiles;
/**
* 店铺类型 单店--only 连锁店--chain--加盟店join (对应原来 type
*/
private String shopType;
/**
* 主店id
*/
private Long mainId;
/**
* 主店名称
*/
private String mainShopName;
}

View File

@@ -1,8 +1,11 @@
package com.czg.service.market.mapper;
import com.czg.market.vo.SmsShopMoneyVO;
import com.mybatisflex.core.BaseMapper;
import com.czg.market.entity.SmsShopMoney;
import java.util.List;
/**
* 店铺短信余额 映射层。
*
@@ -11,4 +14,5 @@ import com.czg.market.entity.SmsShopMoney;
*/
public interface SmsShopMoneyMapper extends BaseMapper<SmsShopMoney> {
List<SmsShopMoneyVO> selectWithShopInfo(String name);
}

View File

@@ -0,0 +1,47 @@
package com.czg.service.market.service.impl;
import com.czg.market.vo.SmsShopMoneyVO;
import com.czg.sa.StpKit;
import com.czg.utils.PageUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.market.entity.SmsShopMoney;
import com.czg.market.service.SmsShopMoneyService;
import com.czg.service.market.mapper.SmsShopMoneyMapper;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
/**
* 店铺短信余额 服务层实现。
*
* @author ww
* @since 2025-10-16
*/
@Service
public class SmsShopMoneyServiceImpl extends ServiceImpl<SmsShopMoneyMapper, SmsShopMoney> implements SmsShopMoneyService {
@Override
public SmsShopMoney getShopMoney(Long shopId) {
SmsShopMoney shopMoney = getOne((
new QueryWrapper().eq(SmsShopMoney::getShopId, StpKit.USER.getShopId())));
if (shopMoney == null) {
shopMoney = new SmsShopMoney();
shopMoney.setShopId(StpKit.USER.getShopId());
shopMoney.setMoney(BigDecimal.ZERO);
save(shopMoney);
}
return shopMoney;
}
@Override
public Page<SmsShopMoneyVO> getShopMoneyPage(Integer page, Integer size, String name) {
PageHelper.startPage(page, size);
List<SmsShopMoneyVO> list = mapper.getShopMoneyPages(name);
return PageUtil.convert(new PageInfo<>(list));
}
}

View File

@@ -37,6 +37,7 @@ public class SmsShopTemplateServiceImpl extends ServiceImpl<SmsShopTemplateMappe
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.like(SmsShopTemplate::getTitle, name)
.in(SmsShopTemplate::getShopId, list)
.eq(SmsShopTemplate::getIsDel, 0)
.orderBy(SmsShopTemplate::getShopId).asc()
.orderBy(SmsShopTemplate::getSort).asc();
if (list.size() == 1) {
@@ -54,6 +55,7 @@ public class SmsShopTemplateServiceImpl extends ServiceImpl<SmsShopTemplateMappe
.le(SmsShopTemplate::getCreateTime, param.getEndTime())
.ge(SmsShopTemplate::getCreateTime, param.getStartTime())
.eq(SmsShopTemplate::getStatus, param.getStatus())
.eq(SmsShopTemplate::getIsDel, 0)
.eq(SmsShopTemplate::getShopUse, param.getShopUse())
.eq(SmsShopTemplate::getShopId, param.getShopId())
.orderBy(SmsShopTemplate::getShopId).asc()

View File

@@ -4,4 +4,28 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.market.mapper.SmsShopMoneyMapper">
<!-- 关联查询店铺短信余额及店铺信息,支持店铺名称模糊搜索 -->
<select id="selectWithShopInfo" parameterType="java.lang.String" resultType="com.czg.market.vo.SmsShopMoneyVO">
SELECT
s.*,
t.logo,
t.shop_type AS shopType,
t.profiles,
t.cover_img AS coverImg,
t.main_id AS mainId,
main_shop.shop_name AS mainShopName,
t.shop_name AS shopName
FROM
sms_shop_money s
LEFT JOIN
tb_shop_info t ON s.shop_id = t.id
LEFT JOIN
tb_shop_info main_shop ON t.main_id = main_shop.id
<where>
<!-- 店铺名称模糊查询条件 -->
<if test="name != null and name != ''">
AND t.shop_name LIKE CONCAT('%', #{name}, '%')
</if>
</where>
</select>
</mapper>