From e777adf6b09359f8ecc1f22f16fd4cc14560f540 Mon Sep 17 00:00:00 2001 From: huchuansai Date: Wed, 24 Sep 2025 10:49:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=A2=E5=8D=95=E5=82=AC=E4=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PlayOrderInfoController.java | 19 ++++++++++-- .../admin/modules/order/job/OrderJob.java | 30 +++++++++++++++++++ .../weichat/service/WxCustomMpService.java | 18 +++++++++-- 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderInfoController.java index 32cf36f..1fc6ec0 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderInfoController.java +++ b/play-admin/src/main/java/com/starry/admin/modules/order/controller/PlayOrderInfoController.java @@ -1,5 +1,6 @@ package com.starry.admin.modules.order.controller; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.starry.admin.common.exception.CustomException; import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity; import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService; @@ -24,6 +25,7 @@ import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import java.math.BigDecimal; +import java.util.List; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -54,6 +56,8 @@ public class PlayOrderInfoController { private IPlayOrderRefundInfoService playOrderRefundInfoService; @Resource private IPlayCustomUserInfoService customUserInfoService; + @Resource + private IPlayClerkUserInfoService clerkUserInfoService; /** * 分页查询订单列表 @@ -66,6 +70,17 @@ public class PlayOrderInfoController { return R.ok(orderInfoService.selectOrderInfoPage(vo)); } + @ApiOperation(value = "发送订单微信通知", notes = "发送订单微信通知") + @ApiResponses({ + @ApiResponse(code = 200, message = "操作成功", response = Boolean.class, responseContainer = "Page")}) + @PostMapping("/sendNotice") + public R sendNotice(String orderId) { + PlayOrderInfoEntity orderInfo = orderInfoService.selectOrderInfoById(orderId); + List clerkList = clerkUserInfoService.list(Wrappers.lambdaQuery(PlayClerkUserInfoEntity.class).isNotNull(PlayClerkUserInfoEntity::getOpenid).eq(PlayClerkUserInfoEntity::getLevelId, orderInfo.getLevelId()).eq(PlayClerkUserInfoEntity::getClerkState, "1").eq(PlayClerkUserInfoEntity::getSex, orderInfo.getSex())); + wxCustomMpService.sendCreateOrderMessageBatch(clerkList, orderInfo.getOrderNo(), orderInfo.getOrderMoney().toString(), orderInfo.getCommodityName(), orderId); + return R.ok(); + } + /** * 订单退款 */ @@ -125,7 +140,7 @@ public class PlayOrderInfoController { PlayCommodityInfoVo commodityInfo = playCommodityInfoService.queryCommodityInfo(orderInfo.getCommodityId(), clerkUserInfo.getLevelId()); wxCustomMpService.sendCreateOrderMessage(clerkUserInfo.getTenantId(), clerkUserInfo.getOpenid(), - orderInfo.getOrderNo(), orderInfo.getOrderMoney().toString(), commodityInfo.getCommodityName(),vo.getOrderId() ); + orderInfo.getOrderNo(), orderInfo.getOrderMoney().toString(), commodityInfo.getCommodityName(), vo.getOrderId()); return R.ok("操作成功"); } @@ -195,7 +210,7 @@ public class PlayOrderInfoController { @Log(title = "修改普通订单", businessType = BusinessType.UPDATE) @PostMapping(value = "/update/{id}") public R update(@PathVariable String id, - @ApiParam(value = "订单信息", required = true) @RequestBody PlayOrderInfoEntity orderInfoEntity) { + @ApiParam(value = "订单信息", required = true) @RequestBody PlayOrderInfoEntity orderInfoEntity) { orderInfoEntity.setId(id); boolean success = orderInfoService.update(orderInfoEntity); if (success) { diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/job/OrderJob.java b/play-admin/src/main/java/com/starry/admin/modules/order/job/OrderJob.java index 308c1c3..c001e39 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/order/job/OrderJob.java +++ b/play-admin/src/main/java/com/starry/admin/modules/order/job/OrderJob.java @@ -1,14 +1,18 @@ package com.starry.admin.modules.order.job; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.starry.admin.common.exception.CustomException; +import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity; +import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService; import com.starry.admin.modules.order.mapper.PlayOrderInfoMapper; import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity; import com.starry.admin.modules.weichat.service.WxCustomMpService; import java.time.LocalDateTime; import java.util.Arrays; +import java.util.Date; import java.util.List; import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -23,6 +27,8 @@ public class OrderJob { private PlayOrderInfoMapper orderInfoMapper; @Resource private WxCustomMpService wxCustomMpService; + @Resource + private IPlayClerkUserInfoService clerkUserInfoService; /** @@ -64,6 +70,30 @@ public class OrderJob { } + @Scheduled(fixedRate = 20000, initialDelay = 20000) + public void orderNoticeJob() { + // 查询出所有应该待接单的订单,超过10分钟还没接单 + List orderInfoEntityList = orderInfoMapper.selectList(Wrappers.lambdaQuery(PlayOrderInfoEntity.class) + .eq(PlayOrderInfoEntity::getOrderStatus, "0") + .eq(PlayOrderInfoEntity::getPlaceType, "1") + .lt(PlayOrderInfoEntity::getCreatedTime, DateUtil.offsetMinute(new Date(), -10) + )); + if (CollectionUtils.isEmpty(orderInfoEntityList)) return; + + orderInfoEntityList.forEach(orderInfo -> { + try { + List clerkList = clerkUserInfoService.list(Wrappers.lambdaQuery(PlayClerkUserInfoEntity.class).isNotNull(PlayClerkUserInfoEntity::getOpenid).eq(PlayClerkUserInfoEntity::getLevelId, orderInfo.getLevelId()).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()); + + } catch (Exception e) { + log.error(e.getMessage(), e); + log.error("订单催促失败:{}", orderInfo.getOrderNo()); + } + }); + + } + private Integer getServiceDuration(String serviceDuration) { if (StringUtils.isEmpty(serviceDuration)) { throw new CustomException("服务时长不能为空"); diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomMpService.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomMpService.java index 5ff09fa..c311e16 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomMpService.java +++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxCustomMpService.java @@ -76,6 +76,20 @@ public class WxCustomMpService { wxMpService.addConfigStorage(entity.getAppId(), config); return wxMpService.switchoverTo(entity.getAppId()); } + public WxMpService proxyWxMpService(String tenantId) { + if (StrUtil.isBlankIfStr(tenantId)) { + throw new CustomException("系统错误,租户ID不能为空"); + } + SysTenantEntity entity = tenantService.selectSysTenantByTenantId(tenantId); + if (entity == null) { + throw new CustomException("系统错误,租户ID不能为空"); + } + WxMpMapConfigImpl config = new WxMpMapConfigImpl(); + config.setAppId(entity.getAppId()); + config.setSecret(entity.getSecret()); + wxMpService.addConfigStorage(entity.getAppId(), config); + return wxMpService.switchoverTo(entity.getAppId()); + } public WxPayService getWxPay() { String tenantId = SecurityUtils.getTenantId(); @@ -161,7 +175,7 @@ public class WxCustomMpService { data.add(new WxMpTemplateData("amount8", money)); templateMessage.setData(data); try { - proxyWxMpService().getTemplateMsgService().sendTemplateMsg(templateMessage); + proxyWxMpService(tenantId).getTemplateMsgService().sendTemplateMsg(templateMessage); } catch (WxErrorException e) { log.error("接单成功发送消息异常", e); } @@ -324,7 +338,7 @@ public class WxCustomMpService { data.add(new WxMpTemplateData("thing13", order.getCommodityName())); templateMessage.setData(data); try { - proxyWxMpService().getTemplateMsgService().sendTemplateMsg(templateMessage); + proxyWxMpService(tenant.getTenantId()).getTemplateMsgService().sendTemplateMsg(templateMessage); } catch (WxErrorException e) { log.error("订单完成发送消息异常", e); }