公众号推送

This commit is contained in:
2025-10-20 11:39:33 +08:00
parent 05a3be5ecb
commit 9646b7458d
17 changed files with 781 additions and 80 deletions

View File

@@ -37,7 +37,7 @@ public interface ShopUserMapper extends BaseMapper<ShopUser> {
UserInfoAssetsSummaryDTO selectAssetsSummary(@Param("userId") Long userInfoId);
/**
* 查询符合推送条件的用户
* 查询符合推送条件的用户 手机号不为空
*
* @param mainShopId 主店铺ID
* @param shopId 店铺ID
@@ -49,4 +49,17 @@ public interface ShopUserMapper extends BaseMapper<ShopUser> {
@Param("param") SmsPushEventUser smsPushEventUser
);
/**
* 查询符合推送条件的用户 公众号Id不为空
*
* @param mainShopId 主店铺ID
* @param shopId 店铺ID
* @return 分页结果
*/
List<ShopUser> selectAcPushEventUser(
@Param("mainShopId") Long mainShopId,
@Param("shopId") Long shopId,
@Param("param") SmsPushEventUser smsPushEventUser
);
}

View File

@@ -35,7 +35,6 @@ import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@@ -109,6 +108,22 @@ public class AShopUserServiceImpl implements AShopUserService {
}
}
@Override
public Page<ShopUser> getAcPushEventUser(SmsPushEventUser smsPushEventUser) {
try {
Long mainShopId = shopInfoService.getMainIdByShopId(smsPushEventUser.getShopId());
PageHelper.startPage(smsPushEventUser.getPage(), smsPushEventUser.getSize());
smsPushEventUser.checkIsAll();
// 调用Mapper层查询
List<ShopUser> shopUsers = shopUserMapper.selectAcPushEventUser(mainShopId,
smsPushEventUser.getShopId(), smsPushEventUser);
return PageUtil.convert(new PageInfo<>(shopUsers));
} catch (Exception e) {
log.info("获取公众号推送任务用户列表失败{},{}", smsPushEventUser, e.getMessage());
return PageUtil.convert(new PageInfo<>());
}
}
@Override
public List<ShopUser> getPushEventUserList(SmsPushEventUser smsPushEventUser) {
Long mainShopId = shopInfoService.getMainIdByShopId(smsPushEventUser.getShopId());

View File

@@ -190,4 +190,77 @@
order by u.create_time desc
</select>
<select id="selectAcPushEventUser" resultType="com.czg.account.entity.ShopUser">
SELECT DISTINCT
u.id,u.user_id, u.head_img, u.nick_name, u.amount, u.account_points, u.phone,
<choose>
<!-- 当有筛选条件时才计算订单相关字段 -->
<when test="param.orderTimeToday == 1 or param.orderTimeYesterday == 1 or
param.orderTimeTwoWeeks == 1 or param.orderTimeMoreThanTwoWeeks == 1 or
param.noOrder == 1 or param.oneOrder == 1 or param.fiveOrder == 1">
COUNT(o.id) AS order_count,
SUM(CASE WHEN o.trade_day = CURDATE() THEN 1 ELSE 0 END) AS today_orders,
SUM(CASE WHEN o.trade_day = CURDATE() - INTERVAL 1 DAY THEN 1 ELSE 0 END) AS yesterday_orders,
SUM(CASE WHEN o.trade_day >= CURDATE() - INTERVAL 2 WEEK AND o.trade_day &lt; CURDATE() - INTERVAL 1
DAY
THEN 1 ELSE 0 END) AS two_weeks_orders,
SUM(CASE WHEN o.trade_day &lt; CURDATE() - INTERVAL 2 WEEK THEN 1 ELSE 0 END) AS earlier_orders
</when>
<!-- 无筛选条件时不计算订单相关字段 -->
<otherwise>
0 AS order_count,
0 AS today_orders,
0 AS yesterday_orders,
0 AS two_weeks_orders,
0 AS earlier_orders
</otherwise>
</choose>
FROM tb_shop_user u
inner join tb_user_info user on u.user_id = user.id and user.wechat_ac_open_id is not null
<!-- 只有当有筛选条件时才关联order表 -->
<if test="param.orderTimeToday == 1 or param.orderTimeYesterday == 1 or
param.orderTimeTwoWeeks == 1 or param.orderTimeMoreThanTwoWeeks == 1 or
param.noOrder == 1 or param.oneOrder == 1 or param.fiveOrder == 1">
LEFT JOIN `tb_order_info` o ON u.user_id = o.user_id and o.user_id is not null AND o.shop_id = #{shopId}
AND o.status = 'done'
</if>
WHERE u.main_shop_id = #{mainShopId} and u.user_id is not null
<!-- 性别筛选条件 -->
<if test="!(param.sexMan == 1 and param.sexWoman == 1 and param.sexUnknown == 1)
and (param.sexMan == 1 or param.sexWoman == 1 or param.sexUnknown == 1)">
AND
<trim prefix="(" suffix=")" prefixOverrides="OR">
<if test="param.sexMan == 1">OR u.sex = 1</if>
<if test="param.sexWoman == 1">OR u.sex = 0</if>
<if test="param.sexUnknown == 1">OR u.sex IS NULL</if>
</trim>
</if>
<!-- 会员状态筛选 -->
<if test="param.isVip != null">
AND u.is_vip = #{param.isVip}
</if>
<if test="param.isRecharge != null">
AND u.recharge_count <![CDATA[ ${param.isRecharge == 0 ? '=' : '>'} ]]> 0
</if>
<!-- 只有当有筛选条件时才需要HAVING子句 -->
<if test="param.orderTimeToday == 1 or param.orderTimeYesterday == 1 or
param.orderTimeTwoWeeks == 1 or param.orderTimeMoreThanTwoWeeks == 1 or
param.noOrder == 1 or param.oneOrder == 1 or param.fiveOrder == 1">
GROUP BY u.id
HAVING
<trim prefix="(" suffix=")" prefixOverrides="OR">
<if test="param.orderTimeToday == 1">OR today_orders > 0</if>
<if test="param.orderTimeYesterday == 1">OR yesterday_orders > 0</if>
<if test="param.orderTimeTwoWeeks == 1">OR two_weeks_orders > 0</if>
<if test="param.orderTimeMoreThanTwoWeeks == 1">OR earlier_orders > 0</if>
<if test="param.noOrder == 1">OR order_count = 0</if>
<if test="param.oneOrder == 1">OR order_count = 1</if>
<if test="param.fiveOrder == 1">OR order_count >= 5</if>
</trim>
</if>
order by u.create_time desc
</select>
</mapper>