重构:优化订单通知消息标签,支持动态显示订单类型
- 新增 OrderMessageLabelResolver 用于解析订单场景标签 - 修改微信公众号下单通知,根据下单类型(随机单/指定单/打赏/礼物)显示对应标签 - 更新 WxCustomMpService 接口,传递 placeType 和 rewardType 参数 - 完善相关单元测试和 Mock 配置
This commit is contained in:
@@ -76,7 +76,14 @@ public class PlayOrderInfoController {
|
||||
public R sendNotice(String orderId) {
|
||||
PlayOrderInfoEntity orderInfo = orderInfoService.selectOrderInfoById(orderId);
|
||||
List<PlayClerkUserInfoEntity> clerkList = clerkUserInfoService.list(Wrappers.lambdaQuery(PlayClerkUserInfoEntity.class).isNotNull(PlayClerkUserInfoEntity::getOpenid).eq(PlayClerkUserInfoEntity::getClerkState, "1").eq(PlayClerkUserInfoEntity::getSex, orderInfo.getSex()));
|
||||
wxCustomMpService.sendCreateOrderMessageBatch(clerkList, orderInfo.getOrderNo(), orderInfo.getOrderMoney().toString(), orderInfo.getCommodityName(), orderId);
|
||||
wxCustomMpService.sendCreateOrderMessageBatch(
|
||||
clerkList,
|
||||
orderInfo.getOrderNo(),
|
||||
orderInfo.getOrderMoney().toString(),
|
||||
orderInfo.getCommodityName(),
|
||||
orderId,
|
||||
orderInfo.getPlaceType(),
|
||||
orderInfo.getRewardType());
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@@ -126,8 +133,15 @@ public class PlayOrderInfoController {
|
||||
PlayOrderInfoEntity orderInfo = orderInfoService.selectOrderInfoById(vo.getOrderId());
|
||||
PlayCommodityInfoVo commodityInfo = playCommodityInfoService.queryCommodityInfo(orderInfo.getCommodityId(),
|
||||
clerkUserInfo.getLevelId());
|
||||
wxCustomMpService.sendCreateOrderMessage(clerkUserInfo.getTenantId(), clerkUserInfo.getOpenid(),
|
||||
orderInfo.getOrderNo(), orderInfo.getOrderMoney().toString(), commodityInfo.getCommodityName(), vo.getOrderId());
|
||||
wxCustomMpService.sendCreateOrderMessage(
|
||||
clerkUserInfo.getTenantId(),
|
||||
clerkUserInfo.getOpenid(),
|
||||
orderInfo.getOrderNo(),
|
||||
orderInfo.getOrderMoney().toString(),
|
||||
commodityInfo.getCommodityName(),
|
||||
vo.getOrderId(),
|
||||
orderInfo.getPlaceType(),
|
||||
orderInfo.getRewardType());
|
||||
return R.ok("操作成功");
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,14 @@ public class OrderJob {
|
||||
redisTemplate.opsForValue().set("order_notice_" + orderInfo.getId(), "1", 30, java.util.concurrent.TimeUnit.MINUTES);
|
||||
List<PlayClerkUserInfoEntity> clerkList = clerkUserInfoService.list(Wrappers.lambdaQuery(PlayClerkUserInfoEntity.class).isNotNull(PlayClerkUserInfoEntity::getOpenid).eq(PlayClerkUserInfoEntity::getClerkState, "1")
|
||||
.eq(PlayClerkUserInfoEntity::getSex, orderInfo.getSex()).eq(PlayClerkUserInfoEntity::getTenantId, orderInfo.getTenantId()));
|
||||
wxCustomMpService.sendCreateOrderMessageBatch(clerkList, orderInfo.getOrderNo(), orderInfo.getOrderMoney().toString(), orderInfo.getCommodityName(), orderInfo.getId());
|
||||
wxCustomMpService.sendCreateOrderMessageBatch(
|
||||
clerkList,
|
||||
orderInfo.getOrderNo(),
|
||||
orderInfo.getOrderMoney().toString(),
|
||||
orderInfo.getCommodityName(),
|
||||
orderInfo.getId(),
|
||||
orderInfo.getPlaceType(),
|
||||
orderInfo.getRewardType());
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.starry.admin.modules.order.module.constant;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* Resolves human-readable labels for order scenarios used in notifications.
|
||||
*/
|
||||
@Slf4j
|
||||
public final class OrderMessageLabelResolver {
|
||||
|
||||
private OrderMessageLabelResolver() {
|
||||
}
|
||||
|
||||
public static String resolve(String placeTypeCode, String rewardTypeCode) {
|
||||
OrderConstant.PlaceType placeTypeEnum = OrderConstant.PlaceType.RANDOM;
|
||||
if (StringUtils.isNotBlank(placeTypeCode)) {
|
||||
try {
|
||||
placeTypeEnum = OrderConstant.PlaceType.fromCode(placeTypeCode);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
log.warn("未知的下单类型,placeTypeCode={},按随机单处理。", placeTypeCode, ex);
|
||||
}
|
||||
}
|
||||
switch (placeTypeEnum) {
|
||||
case SPECIFIED:
|
||||
return "指定单";
|
||||
case REWARD:
|
||||
OrderConstant.RewardType rewardTypeEnum = OrderConstant.RewardType.BALANCE;
|
||||
if (StringUtils.isNotBlank(rewardTypeCode)) {
|
||||
try {
|
||||
rewardTypeEnum = OrderConstant.RewardType.fromCode(rewardTypeCode);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
log.warn("未知的打赏类型,rewardTypeCode={},按打赏处理。", rewardTypeCode, ex);
|
||||
}
|
||||
}
|
||||
return rewardTypeEnum == OrderConstant.RewardType.GIFT ? "礼物" : "打赏";
|
||||
case RANDOM:
|
||||
default:
|
||||
return "随机单";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -355,7 +355,9 @@ public class WxCustomController {
|
||||
orderNo,
|
||||
netAmount.toString(),
|
||||
commodityInfo.getCommodityName(),
|
||||
order.getId());
|
||||
order.getId(),
|
||||
order.getPlaceType(),
|
||||
order.getRewardType());
|
||||
return R.ok("成功");
|
||||
}
|
||||
|
||||
@@ -430,7 +432,14 @@ public class WxCustomController {
|
||||
.eq(PlayClerkUserInfoEntity::getListingState, ListingStatus.LISTED.getCode())
|
||||
.eq(PlayClerkUserInfoEntity::getOnlineState, "1")
|
||||
.eq(PlayClerkUserInfoEntity::getSex, vo.getSex()));
|
||||
wxCustomMpService.sendCreateOrderMessageBatch(clerkList, orderNo, netAmount.toString(), commodityInfo.getCommodityName(),order.getId());
|
||||
wxCustomMpService.sendCreateOrderMessageBatch(
|
||||
clerkList,
|
||||
orderNo,
|
||||
netAmount.toString(),
|
||||
commodityInfo.getCommodityName(),
|
||||
order.getId(),
|
||||
order.getPlaceType(),
|
||||
order.getRewardType());
|
||||
// 记录订单,指定指定未接单后,进行退款处理
|
||||
overdueOrderHandlerTask.enqueue(orderId + "_" + SecurityUtils.getTenantId());
|
||||
// 下单成功后,先根据用户条件进行随机分配
|
||||
|
||||
@@ -17,6 +17,7 @@ import com.starry.admin.modules.clerk.module.enums.OnboardingStatus;
|
||||
import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService;
|
||||
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
|
||||
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
|
||||
import com.starry.admin.modules.order.module.constant.OrderMessageLabelResolver;
|
||||
import com.starry.admin.modules.order.module.entity.PlayOrderComplaintInfoEntity;
|
||||
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
|
||||
import com.starry.admin.modules.personnel.module.entity.PlayPersonnelAdminInfoEntity;
|
||||
@@ -149,7 +150,8 @@ public class WxCustomMpService {
|
||||
}
|
||||
}
|
||||
|
||||
public void sendCreateOrderMessageBatch(List<PlayClerkUserInfoEntity> clerkList, String orderNo, String string, String commodityName, String orderId) {
|
||||
public void sendCreateOrderMessageBatch(List<PlayClerkUserInfoEntity> clerkList, String orderNo, String string,
|
||||
String commodityName, String orderId, String placeType, String rewardType) {
|
||||
if (CollectionUtils.isEmpty(clerkList)) {
|
||||
return;
|
||||
}
|
||||
@@ -159,7 +161,7 @@ public class WxCustomMpService {
|
||||
.filter(ca -> OnboardingStatus.isActive(ca.getOnboardingState()))
|
||||
.filter(ca -> ListingStatus.isListed(ca.getListingState()))
|
||||
.forEach(ca -> sendCreateOrderMessage(ca.getTenantId(), ca.getOpenid(), orderNo, string, commodityName,
|
||||
orderId)));
|
||||
orderId, placeType, rewardType)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -173,7 +175,7 @@ public class WxCustomMpService {
|
||||
* @param orderId
|
||||
*/
|
||||
public void sendCreateOrderMessage(String tenantId, String openId, String orderNo, String money,
|
||||
String commodityName, String orderId) {
|
||||
String commodityName, String orderId, String placeType, String rewardType) {
|
||||
|
||||
SysTenantEntity tenant = tenantService.selectSysTenantByTenantId(tenantId);
|
||||
WxMpTemplateMessage templateMessage = getWxMpTemplateMessage(tenant.getXindingdanshoulitongzhiTemplateId(),
|
||||
@@ -181,7 +183,7 @@ public class WxCustomMpService {
|
||||
List<WxMpTemplateData> data = new ArrayList<>();
|
||||
data.add(new WxMpTemplateData("time6", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
|
||||
data.add(new WxMpTemplateData("character_string9", orderNo));
|
||||
data.add(new WxMpTemplateData("short_thing5", "陪聊下单"));
|
||||
data.add(new WxMpTemplateData("short_thing5", OrderMessageLabelResolver.resolve(placeType, rewardType)));
|
||||
data.add(new WxMpTemplateData("thing11", commodityName));
|
||||
data.add(new WxMpTemplateData("amount8", money));
|
||||
templateMessage.setData(data);
|
||||
@@ -198,7 +200,6 @@ public class WxCustomMpService {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 店员接单后,通过微信公众号发送消息
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user