Эх сурвалжийг харах

添加服务号发送通知的逻辑

jinshihui 4 өдөр өмнө
parent
commit
c1c72bc952

+ 4 - 4
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TOrderController.java

@@ -126,7 +126,7 @@ public class TOrderController extends BaseController {
     }
 
     /**
-     * 取消订单
+     * 取消订单(用户操作的接口)
      *
      * @param order
      * @return R
@@ -171,10 +171,10 @@ public class TOrderController extends BaseController {
 
 
     /**
-     * 接受订单
+     * 接受订单(技师端操作的接口)
      *
      * @param order
-     * @return
+     * @return R
      */
     @Log(title = "接受订单", businessType = BusinessType.UPDATE)
     @ApiOperation("接受订单")
@@ -254,7 +254,7 @@ public class TOrderController extends BaseController {
     }
 
     /**
-     * 确认订单
+     * 确认订单(技师端的操作接口)
      *
      * @param order
      * @return R

+ 18 - 8
nightFragrance-common/src/main/java/com/ylx/common/config/WechatAccountConfig.java

@@ -54,23 +54,33 @@ public class WechatAccountConfig {
     private String menu;
 
     /**
-     * 订单未接单提醒消息模版ID
+     * 接单提醒消息模版ID
      */
-    private String template1;
+    private String userTemplate1;
 
      /**
-     * 接单成功通知消息模版ID
+     * 订单完成提醒消息模版ID
      */
-    private String template2;
+    private String userTemplate2;
 
      /**
-     * 订单完成通知消息模版
+     * 取消订单提醒消息模版ID
      */
-    private String template3;
+    private String userTemplate3;
 
      /**
-     * 取消订单通知消息模版ID
+     * 待接单提醒消息模版ID
      */
-    private String template4;
+    private String techTemplate1;
+
+     /**
+     * 订单完成提醒消息模版ID
+     */
+    private String techTemplate2;
+
+     /**
+     * 取消订单提醒消息模版ID
+     */
+    private String techTemplate3;
 
 }

+ 34 - 31
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TOrder.java

@@ -50,6 +50,31 @@ public class TOrder implements Serializable {
     @ApiModelProperty("订单ID")
     private String cId;
 
+    /**
+     * 订单号
+     * 系统生成的唯一订单编号,用于订单查询和标识
+     */
+    @Excel(name = "订单号")
+    @TableField("order_no")
+    @ApiModelProperty("订单号")
+    private String orderNo;
+
+    /**
+     * 父订单号
+     * 用于升级订单场景,记录原订单号
+     */
+    @TableField("parent_no")
+    @ApiModelProperty("父订单号")
+    private String parentNo;
+
+    /**
+     * 支付类型
+     * 1-微信支付 2-余额支付 3-现金支付
+     */
+    @TableField("pay_type")
+    @ApiModelProperty("支付类型:1微信支付 2:余额支付 3:现金支付")
+    private Integer payType;
+
     /**
      * 技师ID
      * 关联的技师唯一标识
@@ -66,22 +91,7 @@ public class TOrder implements Serializable {
     @ApiModelProperty("老技师ID")
     private String oldJsId;
 
-    /**
-     * 订单号
-     * 系统生成的唯一订单编号,用于订单查询和标识
-     */
-    @Excel(name = "订单号")
-    @TableField("order_no")
-    @ApiModelProperty("订单号")
-    private String orderNo;
 
-    /**
-     * 父订单号
-     * 用于升级订单场景,记录原订单号
-     */
-    @TableField("parent_no")
-    @ApiModelProperty("父订单号")
-    private String parentNo;
 
     /**
      * 超时原因
@@ -115,13 +125,6 @@ public class TOrder implements Serializable {
     @ApiModelProperty("距离")
     private BigDecimal distance;
 
-    /**
-     * 支付类型
-     * 1-微信支付 2-余额支付 3-现金支付
-     */
-    @TableField("pay_type")
-    @ApiModelProperty("支付类型:1微信支付 2:余额支付 3:现金支付")
-    private Integer payType;
 
     /**
      * 优惠金额
@@ -234,8 +237,7 @@ public class TOrder implements Serializable {
     private String name;
 
     /**
-     * 接单时间
-     * 技师接单的时间
+     * 技师的接单时间
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     @ApiModelProperty("接单时间")
@@ -314,6 +316,13 @@ public class TOrder implements Serializable {
     @ApiModelProperty("订单状态: -1待付款 0待接单 1已接单 2已到达 3服务中 4待评价 5已完成 6已出发 -2已取消 -3已拒绝")
     private Integer nStatus;
 
+    /**
+     * 备注地址
+     * 地址的补充说明或地标信息
+     */
+    @ApiModelProperty("备注地址")
+    private String atlasAdd;
+
     /**
      * 地址
      * 用户提供的服务地址(冗余字段)
@@ -322,12 +331,6 @@ public class TOrder implements Serializable {
     @ApiModelProperty("地址")
     private String cAddress;
 
-    /**
-     * 备注地址
-     * 地址的补充说明或地标信息
-     */
-    @ApiModelProperty("备注地址")
-    private String atlasAdd;
 
     /**
      * 用户姓名
@@ -389,7 +392,7 @@ public class TOrder implements Serializable {
 
     /**
      * 创建时间
-     * 订单创建的时间
+     * 订单创建的时间
      */
     @Excel(name = "创建时间")
     @TableField("dt_create_time")

+ 48 - 69
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/OrderNotificationServiceImpl.java

@@ -3,6 +3,7 @@ package com.ylx.massage.service.impl;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.ylx.common.config.WechatAccountConfig;
+import com.ylx.massage.domain.TJs;
 import com.ylx.massage.domain.TOrder;
 import com.ylx.massage.domain.TXiangmu;
 import com.ylx.massage.service.OrderNotificationService;
@@ -43,11 +44,7 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
     private TJsService jsService;
 
     /**
-     * 订单待接单提醒(用户侧)
-     * <p>
-     * 消息模板ID:template1
-     * 包含字段:订单号、项目名称、预约时间、用户电话、服务地址
-     * </p>
+     * 订单待接单提醒(技师侧)
      *
      * @param order 订单信息
      */
@@ -55,7 +52,7 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
     public void sendPendingRemindNotification(TOrder order) {
         try {
             cn.hutool.json.JSONObject param = buildPendingRemindParams(order);
-            weChatUtil.notification(order.getcOpenId(), wxPayProperties.getTemplate1(), param);
+            weChatUtil.notification(order.getcOpenId(), wxPayProperties.getTechTemplate1(), param);
             log.info("订单待接单提醒发送成功,订单号:{}", order.getOrderNo());
         } catch (Exception e) {
             log.error("订单待接单提醒发送失败,订单号:{}", order.getOrderNo(), e);
@@ -64,10 +61,6 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
 
     /**
      * 订单已接单通知(用户侧)
-     * <p>
-     * 消息模板ID:template1
-     * 包含字段:订单号、项目名称、预约时间、用户电话、服务地址
-     * </p>
      *
      * @param order 订单信息
      */
@@ -75,19 +68,16 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
     public void sendReceivedNotification(TOrder order) {
         try {
             cn.hutool.json.JSONObject param = buildReceivedNotificationParams(order);
-            weChatUtil.notification(order.getcOpenId(), wxPayProperties.getTemplate1(), param);
+            weChatUtil.notification(order.getcOpenId(), wxPayProperties.getUserTemplate1(), param);
             log.info("订单已接单通知发送成功,订单号:{}", order.getOrderNo());
         } catch (Exception e) {
+            e.printStackTrace();
             log.error("订单已接单通知发送失败,订单号:{}", order.getOrderNo(), e);
         }
     }
 
     /**
      * 订单完成通知(用户侧)
-     * <p>
-     * 消息模板ID:template1
-     * 包含字段:订单号、项目名称、完成时间
-     * </p>
      *
      * @param order 订单信息
      */
@@ -95,7 +85,7 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
     public void sendCompletedNotification(TOrder order) {
         try {
             cn.hutool.json.JSONObject param = buildCompletedNotificationParams(order);
-            weChatUtil.notification(order.getcOpenId(), wxPayProperties.getTemplate1(), param);
+            weChatUtil.notification(order.getcOpenId(), wxPayProperties.getUserTemplate2(), param);
             log.info("订单完成通知发送成功,订单号:{}", order.getOrderNo());
         } catch (Exception e) {
             log.error("订单完成通知发送失败,订单号:{}", order.getOrderNo(), e);
@@ -104,10 +94,6 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
 
     /**
      * 订单取消通知(用户侧)
-     * <p>
-     * 消息模板ID:template1
-     * 包含字段:订单号、取消原因、项目名称
-     * </p>
      *
      * @param order 订单信息
      */
@@ -115,7 +101,7 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
     public void sendCancelledNotification(TOrder order) {
         try {
             cn.hutool.json.JSONObject param = buildCancelledNotificationParams(order);
-            weChatUtil.notification(order.getcOpenId(), wxPayProperties.getTemplate1(), param);
+            weChatUtil.notification(order.getcOpenId(), wxPayProperties.getUserTemplate3(), param);
             log.info("订单取消通知发送成功,订单号:{}", order.getOrderNo());
         } catch (Exception e) {
             log.error("订单取消通知发送失败,订单号:{}", order.getOrderNo(), e);
@@ -126,23 +112,23 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
      * 构建待接单提醒消息参数
      *
      * @param order 订单信息
-     * @return 消息参数
+     * @return JSONObject 消息参数
      */
     private cn.hutool.json.JSONObject buildPendingRemindParams(TOrder order) {
         cn.hutool.json.JSONObject param = JSONUtil.createObj();
         // 订单号
         param.set("character_string9", JSONUtil.createObj().set("value", order.getOrderNo()));
-        // 项目名称
+        // 用户电话
+        param.set("phone_number3", JSONUtil.createObj().set("value", order.getcPhone()));
+        // 项目
         String projectNames = getProjectNames(order);
         param.set("thing10", JSONUtil.createObj().set("value", projectNames));
+        // 下单地址
+        param.set("thing13", JSONUtil.createObj().set("value", order.getAddress()));
         // 预约时间
         LocalDateTime startTime = order.getStartTime();
         Date date = Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant());
         param.set("time6", JSONUtil.createObj().set("value", DateTimeUtils.formatDate(date, "yyyy-MM-dd HH:mm")));
-        // 用户电话
-        param.set("phone_number3", JSONUtil.createObj().set("value", order.getcPhone()));
-        // 服务地址
-        param.set("thing13", JSONUtil.createObj().set("value", order.getAddress()));
         return param;
     }
 
@@ -150,7 +136,7 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
      * 构建已接单通知消息参数
      *
      * @param order 订单信息
-     * @return 消息参数
+     * @return JSONObject 消息参数
      */
     private cn.hutool.json.JSONObject buildReceivedNotificationParams(TOrder order) {
         cn.hutool.json.JSONObject param = JSONUtil.createObj();
@@ -159,22 +145,22 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
         // 项目名称
         String projectNames = getProjectNames(order);
         param.set("thing4", JSONUtil.createObj().set("value", projectNames));
-        // 预约时间
-        LocalDateTime startTime = order.getStartTime();
-        Date date = Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant());
-        param.set("time3", JSONUtil.createObj().set("value", DateTimeUtils.formatDate(date, "yyyy-MM-dd HH:mm")));
-        // 用户电话
-        param.set("phone_number5", JSONUtil.createObj().set("value", order.getcPhone()));
-        // 服务地址
-        param.set("thing14", JSONUtil.createObj().set("value", order.getAddress()));
+
+        //根据技师ID查询技师姓名
+        TJs js = jsService.getById(order.getcJsId());
+        String jsName = js.getcName();
+        // 商家名称
+        param.set("thing9", JSONUtil.createObj().set("value", jsName));
+        // 联系电话
+        param.set("phone_number5", JSONUtil.createObj().set("value", js.getcPhone()));
         return param;
     }
 
     /**
-     * 构建完成通知消息参数
+     * 构建完成通知消息参数(用户侧)
      *
      * @param order 订单信息
-     * @return 消息参数
+     * @return JSONObject 消息参数
      */
     private cn.hutool.json.JSONObject buildCompletedNotificationParams(TOrder order) {
         cn.hutool.json.JSONObject param = JSONUtil.createObj();
@@ -194,7 +180,7 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
      * 构建取消通知消息参数
      *
      * @param order 订单信息
-     * @return 消息参数
+     * @return JSONObject 消息参数
      */
     private cn.hutool.json.JSONObject buildCancelledNotificationParams(TOrder order) {
         cn.hutool.json.JSONObject param = JSONUtil.createObj();
@@ -205,17 +191,19 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
         // 项目名称
         String projectNames = getProjectNames(order);
         param.set("thing25", JSONUtil.createObj().set("value", projectNames));
+        //订单金额
+        param.set("amount23", JSONUtil.createObj().set("value", order.getTotalPrice().toString()));
         return param;
     }
 
     /**
-     * 从订单中提取项目名称
+     * 从订单明细中提取项目名称
      * <p>
      * 解析订单的商品列表,将多个项目名称用逗号连接
      * </p>
      *
      * @param order 订单信息
-     * @return 项目名称字符串,多个项目用逗号分隔
+     * @return String 项目名称字符串,多个项目用逗号分隔
      */
     private String getProjectNames(TOrder order) {
         List<TXiangmu> list = JSONObject.parseArray(order.getcGoods().toJSONString(), TXiangmu.class);
@@ -232,10 +220,6 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
 
     /**
      * 订单已接单通知(技师侧)
-     * <p>
-     * 消息模板ID:templateId1
-     * 包含字段:订单号、用户姓名、联系电话、服务地址、下单时间、项目名称
-     * </p>
      *
      * @param order 订单信息
      */
@@ -259,10 +243,6 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
 
     /**
      * 订单取消通知(技师侧)
-     * <p>
-     * 消息模板ID:templateId1
-     * 包含字段:订单号、取消原因、项目名称
-     * </p>
      *
      * @param order 订单信息
      */
@@ -286,25 +266,25 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
 
     /**
      * 构建技师侧已接单通知消息参数
-     * <p>
-     * 参考原有的 newOrderNotification 方法实现
-     * </p>
      *
      * @param order 订单信息
-     * @return 消息参数
+     * @return JSONObject 消息参数
      */
     private cn.hutool.json.JSONObject buildTechnicianReceivedNotificationParams(TOrder order) {
         cn.hutool.json.JSONObject param = JSONUtil.createObj();
-        // 订单号
-        param.set("character_string9", JSONUtil.createObj().set("value", order.getOrderNo()));
-        // 用户电话
-        param.set("phone_number14", JSONUtil.createObj().set("value", order.getcPhone()));
-        // 用户姓名
-        param.set("thing18", JSONUtil.createObj().set("value", order.getcName()));
-        // 下单时间
-        param.set("time6", JSONUtil.createObj().set("value", DateTimeUtils.formatDate(new Date(), DateTimeUtils.DATE_NUMBER_YEAR_MONTH_FORMAT)));
-        // 服务地址
-        param.set("thing27", JSONUtil.createObj().set("value", order.getName()));
+        // 订单编号
+        param.set("character_string1", JSONUtil.createObj().set("value", order.getOrderNo()));
+        // 联系电话
+        param.set("phone_number5", JSONUtil.createObj().set("value", order.getcPhone()));
+        // 项目名称
+        String projectNames = getProjectNames(order);
+        param.set("thing4", JSONUtil.createObj().set("value", projectNames));
+        // 预约地址
+        param.set("thing14", JSONUtil.createObj().set("value", order.getAddress()));
+        // 预约时间
+        LocalDateTime dtCreateTime = order.getDtCreateTime();
+        Date createTime = Date.from(dtCreateTime.atZone(ZoneId.systemDefault()).toInstant());
+        param.set("time3", JSONUtil.createObj().set("value", DateTimeUtils.formatDate(createTime, "yyyy-MM-dd HH:mm")));
         return param;
     }
 
@@ -312,7 +292,7 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
      * 构建技师侧取消通知消息参数
      *
      * @param order 订单信息
-     * @return 消息参数
+     * @return JSONObject 消息参数
      */
     private cn.hutool.json.JSONObject buildTechnicianCancelledNotificationParams(TOrder order) {
         cn.hutool.json.JSONObject param = JSONUtil.createObj();
@@ -320,9 +300,8 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
         param.set("character_string2", JSONUtil.createObj().set("value", order.getOrderNo()));
         // 取消原因
         param.set("thing5", JSONUtil.createObj().set("value", getCancelReason(order)));
-        // 项目名称
-        String projectNames = getProjectNames(order);
-        param.set("thing25", JSONUtil.createObj().set("value", projectNames));
+        // 订单金额
+        param.set("amount23", JSONUtil.createObj().set("value", order.getTotalPrice().toString()));
         return param;
     }
 
@@ -330,7 +309,7 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
      * 获取技师的 OpenId
      *
      * @param order 订单信息
-     * @return 技师 OpenId,如果技师不存在则返回 null
+     * @return String 技师 OpenId,如果技师不存在则返回 null
      */
     private String getTechnicianOpenId(TOrder order) {
         if (order.getcJsId() == null) {
@@ -348,7 +327,7 @@ public class OrderNotificationServiceImpl implements OrderNotificationService {
      * 获取订单取消原因
      *
      * @param order 订单信息
-     * @return 取消原因描述
+     * @return String 取消原因描述
      */
     private String getCancelReason(TOrder order) {
         // 如果订单中有具体的取消原因,使用订单中的原因

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TJsServiceImpl.java

@@ -219,7 +219,7 @@ public class TJsServiceImpl extends ServiceImpl<TJsMapper, TJs> implements TJsSe
         param.set("phone_number3", JSONUtil.createObj().set("value", "18360233903"));
         //设置下单地址
         param.set("thing13", JSONUtil.createObj().set("value", "信达国际"));
-        weChatUtil.notification(openId, wxPayProperties.getTemplate1(), param);
+        //weChatUtil.notification(openId, wxPayProperties.get(), param);
 
     }
 

+ 23 - 6
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -432,6 +432,9 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         if (order.getPayType().equals(MassageConstants.INTEGER_ONE)) {
             //微信支付
             R resp = rechargeService.getPay(orderNew.getOrderNo(), orderNew.getTotalPrice(), orderNew.getcOpenId(), BillTypeEnum.WX_PAY.getInfo(), BillTypeEnum.WX_PAY.getCode().toString());
+
+            //添加待接单消息通知
+            orderNotificationService.sendPendingRemindNotification(orderNew);
             return resp;
         }
 
@@ -443,12 +446,16 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         if (order.getPayType().equals(MassageConstants.INTEGER_THREE)) {
             //现金支付
             orderPayManage(user, orderNew);
+            //添加待接单消息通知
+            orderNotificationService.sendPendingRemindNotification(orderNew);
             return R.ok();
         }
         if (user.getdBalance().compareTo(orderNew.getTotalPrice()) < MassageConstants.INTEGER_ZERO) {
             throw new ServiceException("账户金额不够请充值");
         } else {
             orderPayManage(user, orderNew);
+            //添加待接单消息通知
+            orderNotificationService.sendPendingRemindNotification(orderNew);
             return R.ok();
         }
     }
@@ -634,9 +641,8 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean confirm(TOrder order) {
-
         // 获取订单信息
-        TOrder orderNew = getById(order);
+        TOrder orderNew = getById(order.getcId());
         if (!orderNew.getnStatus().equals(OrderStatusEnum.SERVICE.getCode())) {
             throw new ServiceException("订单状态不是服务中");
         }
@@ -798,16 +804,24 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             tJs.setId(orderNew.getcJsId());
             tJs.setnStatus(JsStatusEnum.JS_SERVICEABLE.getCode());
             jsService.updateById(tJs);
-            return updateById(orderParam);
+            updateById(orderParam);
 
-        } else if (Objects.equals(orderNew.getnStatus(), OrderStatusEnum.WAIT_PAY.getCode())) {
-            //待付款
+            // 添加取消订单通知(用户侧)
+            orderNotificationService.sendCancelledNotification(orderNew);
+
+            // 添加取消订单通知(技师侧)
+            orderNotificationService.sendTechnicianCancelledNotification(orderNew);
+            return true;
+        } else if (Objects.equals(orderNew.getnStatus(), OrderStatusEnum.WAIT_PAY.getCode())) {//待付款
             TOrder orderParam = new TOrder();
             orderParam.setcId(orderNew.getcId());
             orderParam.setnStatus(OrderStatusEnum.CANCEL.getCode());
             updateById(orderParam);
             // 添加取消订单通知
             orderNotificationService.sendCancelledNotification(orderNew);
+
+            // 添加取消订单通知(技师侧)
+            orderNotificationService.sendTechnicianCancelledNotification(orderNew);
             return true;
         } else {
             return false;
@@ -882,8 +896,11 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         orderParam.setAcceptanceTime(LocalDateTime.now());
         this.updateById(orderParam);
 
-        // 已接单消息通知
+        // 已接单消息通知(用户侧)
         orderNotificationService.sendReceivedNotification(orderNew);
+
+        // 已接单消息通知(技师侧)
+        orderNotificationService.sendTechnicianReceivedNotification(orderNew);
     }
 
     private void updateJs(TOrder orderNew) {