From ad2ea0756fd39af06dcc867f0c4a236f8e91e668 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Sat, 28 Jun 2025 23:59:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=AE=B6=E7=89=88app=20=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=88=97=E8=A1=A8=EF=BC=8C=E4=BF=AE=E6=94=B9=20order?= =?UTF-8?q?=5Fitem=5Famount=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/modules/order/ShopOrderInfo.java | 4 +- .../modules/order/dto/MchOrderItemDTO.java | 4 +- .../common/service/UniCloudPushService.java | 14 +++- .../service/impl/UniCloudPushServiceImpl.java | 31 +++++-- .../src/main/resources/application-dev.yml | 4 +- .../src/main/resources/application-local.yml | 2 + .../src/main/resources/application-prod.yml | 2 + .../src/main/resources/application-test.yml | 4 +- .../src/main/resources/application-uat.yml | 4 +- .../suisung/mall/shop/config/AsyncConfig.java | 42 ++++++++++ .../service/impl/LakalaApiServiceImpl.java | 3 +- .../message/service/PushMessageService.java | 36 ++++++++ .../service/impl/PushMessageServiceImpl.java | 80 ++++++++++++++++++ .../order/listener/OrderPayedListener.java | 9 +- .../service/SFExpressApiService.java | 22 ++--- .../service/impl/SFExpressApiServiceImpl.java | 84 +++++++++++-------- .../mapper/order/ShopOrderBaseMapper.xml | 4 +- 17 files changed, 282 insertions(+), 67 deletions(-) create mode 100644 mall-shop/src/main/java/com/suisung/mall/shop/config/AsyncConfig.java create mode 100644 mall-shop/src/main/java/com/suisung/mall/shop/message/service/PushMessageService.java create mode 100644 mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderInfo.java b/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderInfo.java index 4f579b75..4b0a30c1 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderInfo.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderInfo.java @@ -202,8 +202,8 @@ public class ShopOrderInfo implements Serializable { private Long order_picked_time; @ApiModelProperty(value = "新建时间") - private Long created_at; + private Date created_at; @ApiModelProperty(value = "更新时间") - private Long updated_at; + private Date updated_at; } diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderItemDTO.java b/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderItemDTO.java index 0d02c56c..67175832 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderItemDTO.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderItemDTO.java @@ -44,8 +44,8 @@ public class MchOrderItemDTO implements Serializable { @ApiModelProperty(value = "商品价格单价") private BigDecimal item_unit_price; - @ApiModelProperty(value = "商品成本金额") - private BigDecimal item_cost_price; + @ApiModelProperty(value = "商品实际总金额: item_unit_price * order_item_quantity") + private BigDecimal order_item_amount; @ApiModelProperty(value = "商品条码") private String item_barcode; diff --git a/mall-common/src/main/java/com/suisung/mall/common/service/UniCloudPushService.java b/mall-common/src/main/java/com/suisung/mall/common/service/UniCloudPushService.java index 706a0ae3..e33f61f4 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/service/UniCloudPushService.java +++ b/mall-common/src/main/java/com/suisung/mall/common/service/UniCloudPushService.java @@ -15,6 +15,18 @@ import java.util.List; public interface UniCloudPushService { + + /** + * 向单个客户端发送推送消息 + * + * @param clientId 客户端 ID + * @param title 推送标题 + * @param content 推送内容 + * @param payload 推送内容 + * @return + */ + Pair sendPushMessage(String clientId, String title, String content, JSONObject payload); + /** * 向多个客户端ID批量发送推送消息 * @@ -24,5 +36,5 @@ public interface UniCloudPushService { * @param payload 附加数据(JSON对象) * @return 推送结果响应对象 */ - Pair sendBatchPush(String cloudFunctionUrl, List clientIds, String title, String content, JSONObject payload); + Pair sendPushMessageBatch(List clientIds, String title, String content, JSONObject payload); } diff --git a/mall-common/src/main/java/com/suisung/mall/common/service/impl/UniCloudPushServiceImpl.java b/mall-common/src/main/java/com/suisung/mall/common/service/impl/UniCloudPushServiceImpl.java index ea958d62..8fe0d52d 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/service/impl/UniCloudPushServiceImpl.java +++ b/mall-common/src/main/java/com/suisung/mall/common/service/impl/UniCloudPushServiceImpl.java @@ -15,6 +15,7 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.suisung.mall.common.service.UniCloudPushService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.data.util.Pair; import org.springframework.http.*; @@ -23,6 +24,7 @@ import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; +import java.util.Collections; import java.util.List; /** @@ -37,19 +39,34 @@ public class UniCloudPushServiceImpl implements UniCloudPushService { @Resource private RestTemplate restTemplate; + @Value("${uni-cloud-push.send_msg_url}") + private String pushMessageUrl; + + /** + * 向单个客户端发送推送消息 + * + * @param clientId 客户端 ID + * @param title 推送标题 + * @param content 推送内容 + * @param payload 推送内容 + * @return + */ + public Pair sendPushMessage(String clientId, String title, String content, JSONObject payload) { + return sendPushMessageBatch(Collections.singletonList(clientId), title, content, payload); + } /** * 向多个客户端ID批量发送推送消息 * - * @param clientIds 目标客户端 ID 列表 注意:超过500个,直接忽略 - * @param title 推送标题 - * @param content 推送内容 - * @param payload 附加数据(JSON对象) + * @param clientIds 目标客户端 ID 列表 注意:超过500个,直接忽略 必填项 + * @param title 推送标题 可选项 + * @param content 推送内容 必填项 + * @param payload 附加数据(JSON对象) 可选项 * @return 推送结果响应对象 */ @Override - public Pair sendBatchPush(String cloudFunctionUrl, List clientIds, String title, String content, JSONObject payload) { - if (StrUtil.isBlank(cloudFunctionUrl) || CollUtil.isEmpty(clientIds) || StrUtil.isBlank(content)) { + public Pair sendPushMessageBatch(List clientIds, String title, String content, JSONObject payload) { + if (StrUtil.isBlank(pushMessageUrl) || CollUtil.isEmpty(clientIds) || StrUtil.isBlank(content)) { return Pair.of(false, "缺少必要参数"); } @@ -67,7 +84,7 @@ public class UniCloudPushServiceImpl implements UniCloudPushService { JSONObject requestBody = buildPushRequest(clientIds, title, content, payload); // 执行HTTP请求 - ResponseEntity response = executeHttpRequest(cloudFunctionUrl, requestBody); + ResponseEntity response = executeHttpRequest(pushMessageUrl, requestBody); // 处理响应结果 return processResponse(response); diff --git a/mall-common/src/main/resources/application-dev.yml b/mall-common/src/main/resources/application-dev.yml index 2b3d0745..e9b9540a 100644 --- a/mall-common/src/main/resources/application-dev.yml +++ b/mall-common/src/main/resources/application-dev.yml @@ -39,4 +39,6 @@ getui: # 个推配置 appid: KXgzOaKSzd5HG3p9IPaVa8 appkey: neXXX9r1Tc7gMxN2PIcHA1 mastersecret: jYnpS1xYhh6GfyZQMlciJ - domain: https://restapi.getui.com/v2/ \ No newline at end of file + domain: https://restapi.getui.com/v2/ +uni-cloud-push: + send_msg_url: https://fc-mp-39e3d50a-2d2b-415a-9664-2e48974bcfbd.next.bspapp.com/sendMessage \ No newline at end of file diff --git a/mall-common/src/main/resources/application-local.yml b/mall-common/src/main/resources/application-local.yml index e58d5ab0..753e7f0d 100644 --- a/mall-common/src/main/resources/application-local.yml +++ b/mall-common/src/main/resources/application-local.yml @@ -39,3 +39,5 @@ getui: # 个推配置 appkey: neXXX9r1Tc7gMxN2PIcHA1 mastersecret: jYnpS1xYhh6GfyZQMlciJ domain: https://restapi.getui.com/v2/ +uni-cloud-push: + send_msg_url: https://fc-mp-39e3d50a-2d2b-415a-9664-2e48974bcfbd.next.bspapp.com/sendMessage diff --git a/mall-common/src/main/resources/application-prod.yml b/mall-common/src/main/resources/application-prod.yml index 16cc67db..736778a7 100644 --- a/mall-common/src/main/resources/application-prod.yml +++ b/mall-common/src/main/resources/application-prod.yml @@ -39,3 +39,5 @@ getui: # 个推配置 appkey: neXXX9r1Tc7gMxN2PIcHA1 mastersecret: jYnpS1xYhh6GfyZQMlciJ domain: https://restapi.getui.com/v2/ +uni-cloud-push: + send_msg_url: https://fc-mp-39e3d50a-2d2b-415a-9664-2e48974bcfbd.next.bspapp.com/sendMessage diff --git a/mall-common/src/main/resources/application-test.yml b/mall-common/src/main/resources/application-test.yml index 50aa69b5..82bb8d56 100644 --- a/mall-common/src/main/resources/application-test.yml +++ b/mall-common/src/main/resources/application-test.yml @@ -38,4 +38,6 @@ getui: # 个推配置 appid: KXgzOaKSzd5HG3p9IPaVa8 appkey: neXXX9r1Tc7gMxN2PIcHA1 mastersecret: jYnpS1xYhh6GfyZQMlciJ - domain: https://restapi.getui.com/v2/ \ No newline at end of file + domain: https://restapi.getui.com/v2/ +uni-cloud-push: + send_msg_url: https://fc-mp-39e3d50a-2d2b-415a-9664-2e48974bcfbd.next.bspapp.com/sendMessage \ No newline at end of file diff --git a/mall-common/src/main/resources/application-uat.yml b/mall-common/src/main/resources/application-uat.yml index 35043550..38e9680d 100644 --- a/mall-common/src/main/resources/application-uat.yml +++ b/mall-common/src/main/resources/application-uat.yml @@ -39,4 +39,6 @@ getui: # 个推配置 appid: KXgzOaKSzd5HG3p9IPaVa8 appkey: neXXX9r1Tc7gMxN2PIcHA1 mastersecret: jYnpS1xYhh6GfyZQMlciJ - domain: https://restapi.getui.com/v2/ \ No newline at end of file + domain: https://restapi.getui.com/v2/ +uni-cloud-push: + send_msg_url: https://fc-mp-39e3d50a-2d2b-415a-9664-2e48974bcfbd.next.bspapp.com/sendMessage \ No newline at end of file diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/config/AsyncConfig.java b/mall-shop/src/main/java/com/suisung/mall/shop/config/AsyncConfig.java new file mode 100644 index 00000000..7539f7ea --- /dev/null +++ b/mall-shop/src/main/java/com/suisung/mall/shop/config/AsyncConfig.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.shop.config; + +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.lang.reflect.Method; +import java.util.concurrent.Executor; + +public class AsyncConfig implements AsyncConfigurer { + @Override + public Executor getAsyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(5); // 核心线程数 + executor.setMaxPoolSize(10); // 最大线程数 + executor.setQueueCapacity(25); // 队列容量 + executor.setThreadNamePrefix("Async-"); // 线程名前缀 + executor.initialize(); + return executor; + } + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return new CustomAsyncExceptionHandler(); + } +} + +class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler { + @Override + public void handleUncaughtException(Throwable ex, Method method, Object... params) { + System.err.println("异步方法执行异常: " + ex.getMessage()); + ex.printStackTrace(); + } +} \ No newline at end of file diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java index 8a1f10f2..d5a3a84e 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java @@ -555,9 +555,10 @@ public class LakalaApiServiceImpl implements LakalaApiService { shopMchEntryService.updateMerchEntryEcResultUrlByMchId(shopMchEntry.getId(), ecResultUrl); // 发短信给商家,及时签署合同 SMS_488465246 - // 商家您好,您的入驻申请已收到。请尽快登录小发同城商家 APP 完成合同签署,签署时效为 24 小时,望知晓。 + // 【小发同城商家】恭喜您的开店入驻申请已审核通过!请尽快登录APP平台签署电子合同,签署链接24小时内有效(逾期需重新提交申请)。如有疑问请联系客服,感谢您的支持! shopMessageTemplateService.aliyunSmsSend(mchMobile, "SMS_489795044", null);//SMS_479760276 + return Pair.of(true, "商家入网申请电子合同成功"); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/message/service/PushMessageService.java b/mall-shop/src/main/java/com/suisung/mall/shop/message/service/PushMessageService.java new file mode 100644 index 00000000..2d76f6b9 --- /dev/null +++ b/mall-shop/src/main/java/com/suisung/mall/shop/message/service/PushMessageService.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.shop.message.service; + +import cn.hutool.json.JSONObject; + +import java.util.concurrent.CompletableFuture; + +public interface PushMessageService { + + /** + * 异步发送推送通知 商户签约电子合同 + * + * @param mchMobile + * @return + */ + CompletableFuture noticeMerchantSignEcContract(String mchMobile); + + + /** + * 异步发送推送通知商户,订单的活动情况 + * + * @param storeId 可选参数,storeId 和 orderId 二选一 + * @param orderId 可选参数,storeId 和 orderId 二选一 + * @param title 可选参数 + * @param content 必填参数 + * @param payload 可选参数 + */ + void noticeMerchantEmployeeOrderAction(Integer storeId, String orderId, String title, String content, JSONObject payload); +} diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java new file mode 100644 index 00000000..336e6614 --- /dev/null +++ b/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.shop.message.service.impl; + +import cn.hutool.json.JSONObject; +import com.suisung.mall.common.service.UniCloudPushService; +import com.suisung.mall.shop.message.service.PushMessageService; +import com.suisung.mall.shop.store.service.ShopStoreEmployeeService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; +import org.springframework.data.util.Pair; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.concurrent.CompletableFuture; + + +@Slf4j +@Service +public class PushMessageServiceImpl implements PushMessageService { + + private static final String appName = "小发同城"; + @Lazy + @Resource + private UniCloudPushService uniCloudPushService; + + @Lazy + @Resource + private ShopStoreEmployeeService shopStoreEmployeeService; + + /** + * 异步发送推送通知 商户签约电子合同 + * + * @param mchMobile + * @return + */ + + @Async("pushAsyncExecutor") + @Override + public CompletableFuture noticeMerchantSignEcContract(String mchMobile) { + // 获取 商家的 cid + Pair result = uniCloudPushService.sendPushMessage(null, + appName + "邀请您签署入驻合同", + "恭喜您的开店入驻申请已审核通过!请尽快登录APP平台签署电子合同,签署链接24小时内有效(逾期需重新提交申请)。如有疑问请联系客服,感谢您的支持!", + null); + + if (!result.getFirst()) { + log.error("商家入驻申请电子合同推送失败:{}", result.getSecond()); + return CompletableFuture.completedFuture(false); + } + + return CompletableFuture.completedFuture(true); + } + + /** + * 异步发送推送通知商户(所有用户),订单的活动情况 + * + * @param storeId 可选参数,storeId 和 orderId 二选一 + * @param orderId 可选参数,storeId 和 orderId 二选一 + * @param title 可选参数 + * @param content 必填参数 + * @param payload 可选参数 + */ + @Async("pushAsyncExecutor") + @Override + public void noticeMerchantEmployeeOrderAction(Integer storeId, String orderId, String title, String content, JSONObject payload) { + List cidList = shopStoreEmployeeService.selectEmployeeGeTuiCidByStoreId(storeId, orderId, null); + // 获取 商家的 cid + uniCloudPushService.sendPushMessageBatch(cidList, title, content, payload); + } + +} diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java index 0181bfd8..46f05de6 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java @@ -5,6 +5,7 @@ import com.rabbitmq.client.Channel; import com.suisung.mall.common.api.StateCode; import com.suisung.mall.common.constant.MqConstant; import com.suisung.mall.common.modules.order.ShopOrderInfo; +import com.suisung.mall.shop.message.service.PushMessageService; import com.suisung.mall.shop.order.service.ShopOrderBaseService; import com.suisung.mall.shop.order.service.ShopOrderInfoService; import com.suisung.mall.shop.sfexpress.service.SFExpressApiService; @@ -15,6 +16,7 @@ import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; @@ -42,6 +44,10 @@ public class OrderPayedListener { @Autowired private SFExpressApiService sfExpressApiService; + @Lazy + @Autowired + private PushMessageService pushMessageService; + @RabbitHandler public void listener(String data, Channel channel, Message message) throws IOException, InterruptedException { String messageId = message.getMessageProperties().getMessageId(); @@ -112,9 +118,6 @@ public class OrderPayedListener { logger.info("顺丰同城下单成功"); - // 个推推送消息 - sfExpressApiService.pushMessageToStoreEmployee(null, orderId, "你有一笔同城订单[" + orderId + "],请及时处理。", ""); - } } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/SFExpressApiService.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/SFExpressApiService.java index a604cabc..e7769e42 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/SFExpressApiService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/SFExpressApiService.java @@ -138,15 +138,15 @@ public interface SFExpressApiService { */ ThirdApiRes receiveOrderCompleteNotify(String jsonData, String sign); - - /** - * 个推推送消息到员工 - * - * @param storeId - * @param orderId - * @param message - * @param payloadJson - * @return - */ - void pushMessageToStoreEmployee(Integer storeId, String orderId, String message, String payloadJson); +// +// /** +// * 个推推送消息到员工 +// * +// * @param storeId +// * @param orderId +// * @param message +// * @param payloadJson +// * @return +// */ +// void pushMessageToStoreEmployee(Integer storeId, String orderId, String message, String payloadJson); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java index 6c4ee639..998f77e4 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java @@ -8,7 +8,6 @@ package com.suisung.mall.shop.sfexpress.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; @@ -23,14 +22,13 @@ import com.suisung.mall.common.modules.store.ShopStoreSameCityTransportBase; import com.suisung.mall.common.modules.store.ShopStoreSfOrder; import com.suisung.mall.common.pojo.req.*; import com.suisung.mall.common.pojo.res.ThirdApiRes; -import com.suisung.mall.common.service.GeTuiPushService; import com.suisung.mall.common.utils.CommonUtil; import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.JsonUtil; +import com.suisung.mall.shop.message.service.PushMessageService; import com.suisung.mall.shop.order.service.ShopOrderBaseService; import com.suisung.mall.shop.order.service.ShopOrderInfoService; import com.suisung.mall.shop.sfexpress.service.SFExpressApiService; -import com.suisung.mall.shop.store.service.ShopStoreEmployeeService; import com.suisung.mall.shop.store.service.ShopStoreSameCityTransportBaseService; import com.suisung.mall.shop.store.service.ShopStoreSfOrderService; import com.suisung.mall.shop.wechat.service.WxOrderShippingService; @@ -79,11 +77,11 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { @Lazy @Autowired - private ShopStoreEmployeeService shopStoreEmployeeService; - - @Lazy - @Autowired - private GeTuiPushService geTuiPushService; + private PushMessageService pushMessageService; +// +// @Lazy +// @Autowired +// private GeTuiPushService geTuiPushService; @Override public ThirdApiRes createOrder(String shopOrderId) { @@ -225,6 +223,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 商城订单状态:2020-待配货/待出库审核 shopOrderInfoService.changeOrderStatus(shopOrderId, StateCode.ORDER_STATE_PICKING, 0, 0); + // 个推推送消息 + pushMessageService.noticeMerchantEmployeeOrderAction(null, shopOrderId, "您有一笔新的订单", "您有一笔同城订单[" + shopOrderId + "],请及时处理。", null); + + return Pair.of(true, "顺丰同城下单成功!"); } @@ -318,6 +320,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { throw new ApiException(I18nUtil._("取消顺丰订单失败!")); } + return sfExpressApiRes; } @@ -337,6 +340,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 转换 json 字符串参数 String paramJSON = JsonUtil.toJSONString(params); + logger.debug("参数:" + paramJSON); // 根据参数生成请求签名 String send_url = buildUrl("addordergratuityfee", paramJSON); @@ -365,6 +369,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 转换 json 字符串参数 String paramJSON = JsonUtil.toJSONString(params); + logger.debug("参数:" + paramJSON); // 根据参数生成请求签名 String send_url = buildUrl("reminderorder", paramJSON); @@ -395,6 +400,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 转换 json 字符串参数 String paramJSON = JsonUtil.toJSONString(params); + logger.debug("参数:" + paramJSON); // 根据参数生成请求签名 String send_url = buildUrl("listorderfeed", paramJSON); @@ -423,6 +429,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 转换 json 字符串参数 String paramJSON = JsonUtil.toJSONString(params); + logger.debug("参数:" + paramJSON); // 根据参数生成请求签名 String send_url = buildUrl("riderlatestposition", paramJSON); @@ -451,6 +458,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 转换 json 字符串参数 String paramJSON = JsonUtil.toJSONString(params); + logger.debug("参数:" + paramJSON); // 根据参数生成请求签名 String send_url = buildUrl("riderviewv2", paramJSON); @@ -505,6 +513,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 转换 json 字符串参数 String paramJSON = JsonUtil.toJSONString(params); + logger.debug("拣货完成参数:" + paramJSON); // 根据参数生成请求签名 String send_url = buildUrl("notifyproductready", paramJSON); @@ -540,8 +549,9 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 更改顺丰同城订单状态 ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData); + String orderId = shopStoreSfOrder.getShop_order_id(); // 判断订单的状态,是否已经取消了?已取消,不再执行 - ShopStoreSfOrder shopStoreSfOrderExist = shopStoreSfOrderService.getBySfOrderId(shopStoreSfOrder.getShop_order_id()); + ShopStoreSfOrder shopStoreSfOrderExist = shopStoreSfOrderService.getBySfOrderId(orderId); if (shopStoreSfOrderExist != null && shopStoreSfOrderExist.getOrder_status() != null && (shopStoreSfOrderExist.getOrder_status().equals(StateCode.SF_ORDER_STATUS_CANCELED) || (shopStoreSfOrderExist.getOrder_status().equals(StateCode.SF_ORDER_STATUS_CANCELING)))) { @@ -561,6 +571,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { return new ThirdApiRes().fail(-1, "取消订单业务处理失败!"); } + // 个推推送消息 + pushMessageService.noticeMerchantEmployeeOrderAction(null, orderId, "您有一笔取消订单", "您有一笔取消订单[" + orderId + "],请及时处理。", null); + + return new ThirdApiRes().success("success"); } @@ -656,8 +670,8 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // SseEmitterUtil.sendMessage(shopStoreSfOrder.getSf_order_id(), jsonData); // logger.debug("向 SSE 通道 {} 发送了:{}", shopStoreSfOrder.getSf_order_id(), jsonData); - // 个推消息推送 - pushMessageToStoreEmployee(null, shopStoreSfOrder.getShop_order_id(), "顺丰同城订单[" + shopStoreSfOrder.getShop_order_id() + "]" + pushRemark, ""); + // 消息推送 + pushMessageService.noticeMerchantEmployeeOrderAction(null, shopStoreSfOrder.getShop_order_id(), "", "顺丰同城订单[" + shopStoreSfOrder.getShop_order_id() + "]" + pushRemark, null); return new ThirdApiRes().success("success"); } @@ -727,8 +741,8 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // logger.debug("准备发送SSE消息..."); // SseEmitterUtil.sendMessage(shopStoreSfOrder.getSf_order_id(), jsonData); - // 个推消息推送 - pushMessageToStoreEmployee(null, shopStoreSfOrder.getShop_order_id(), "顺丰同城订单[" + shopStoreSfOrder.getShop_order_id() + "]已完成配送。", ""); + // 消息推送 + pushMessageService.noticeMerchantEmployeeOrderAction(null, shopStoreSfOrder.getShop_order_id(), "", "顺丰同城订单[" + shopStoreSfOrder.getShop_order_id() + "]已完成配送。", null); // 通知微信用户确认收货 // wxOrderShippingService.notifyConfirmReceive(shopStoreSfOrder.getShop_order_id()); @@ -745,28 +759,28 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { * @param payloadJson * @return */ - @Override - public void pushMessageToStoreEmployee(Integer storeId, String orderId, String message, String payloadJson) { - try { - List cidList = shopStoreEmployeeService.selectEmployeeGeTuiCidByStoreId(storeId, orderId, false); - if (CollUtil.isEmpty(cidList)) { - logger.error("获取不到店铺员工,无法推送消息!"); - return; - } - - if (StrUtil.isBlank(payloadJson)) { - payloadJson = new JSONObject().set("page", "orderDetail").set("orderId", orderId).set("storeId", storeId).toString(); - } - - // 推送消息到员工 - Pair result = geTuiPushService.pushListMessageToCids(cidList, "", message, "payload", payloadJson); - if (!result.getFirst()) { - logger.error("推送消息到员工失败:{}", result.getSecond()); - } - } catch (Exception e) { - logger.error("推送消息到员工时发生异常:{}", e.getMessage(), e); - } - } +// @Override +// public void pushMessageToStoreEmployee(Integer storeId, String orderId, String message, String payloadJson) { +// try { +// List cidList = shopStoreEmployeeService.selectEmployeeGeTuiCidByStoreId(storeId, orderId, false); +// if (CollUtil.isEmpty(cidList)) { +// logger.error("获取不到店铺员工,无法推送消息!"); +// return; +// } +// +// if (StrUtil.isBlank(payloadJson)) { +// payloadJson = new JSONObject().set("page", "orderDetail").set("orderId", orderId).set("storeId", storeId).toString(); +// } +// +// // 推送消息到员工 +// Pair result = geTuiPushService.pushListMessageToCids(cidList, "", message, "payload", payloadJson); +// if (!result.getFirst()) { +// logger.error("推送消息到员工失败:{}", result.getSecond()); +// } +// } catch (Exception e) { +// logger.error("推送消息到员工时发生异常:{}", e.getMessage(), e); +// } +// } // 私有方法 diff --git a/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml b/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml index c6886647..b59056cf 100644 --- a/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml +++ b/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml @@ -629,7 +629,7 @@ - + @@ -680,7 +680,7 @@ oit.item_name, oit.order_item_quantity, oit.item_unit_price, - oit.item_cost_price, + oit.order_item_amount, spi.item_barcode, oit.order_item_image, oit.spec_info,