From c5f84d2f055033d8ecc6a4fda522ff51f3d0b538 Mon Sep 17 00:00:00 2001 From: tsukiyalo <2450026988@qq.com> Date: Wed, 14 May 2025 13:09:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../school_lend_back_end/deps.txt | Bin 0 -> 112630 bytes .../school_send_back_end/config/AIConfig.java | 65 ++++ .../config/RabbitMQConfig.java | 98 ++++++ .../config/RabbitMQConfigProperties.java | 16 + .../contant/RabbitMQConstant.java | 84 +++++ .../controller/AIController.java | 32 ++ .../controller/BillController.java | 66 ++++ .../controller/BusinessInfoController.java | 148 ++++++++ .../controller/ErrandAuthController.java | 106 ++++++ .../controller/ErrandController.java | 323 ++++++++++++++++++ .../controller/ErrandIncomeController.java | 135 ++++++++ .../controller/RefundController.java | 140 ++++++++ .../controller/SmsController.java | 51 +++ .../listener/RabbitMQReceiver.java | 142 ++++++++ .../listener/RabbitMQSender.java | 97 ++++++ .../mapper/BusinessinfoMapper.java | 15 + .../mapper/ErrandAuthMapper.java | 15 + .../mapper/ErrandBillMapper.java | 15 + .../mapper/ErrandIncomeMapper.java | 15 + .../mapper/ErrandLevelMapper.java | 15 + .../mapper/ErrandMapper.java | 15 + .../mapper/ErrandOrderMapper.java | 15 + .../mapper/OrderImageMapper.java | 15 + .../mapper/OrderRefundsMapper.java | 15 + .../model/domain/Businessinfo.java | 41 +++ .../model/domain/Errand.java | 93 +++++ .../model/domain/ErrandAuth.java | 72 ++++ .../model/domain/ErrandBill.java | 57 ++++ .../model/domain/ErrandIncome.java | 55 +++ .../model/domain/ErrandLevel.java | 52 +++ .../model/domain/ErrandOrder.java | 72 ++++ .../model/domain/OrderImage.java | 30 ++ .../model/domain/OrderRefunds.java | 62 ++++ .../dto/businessinfo/InfoAddRequest.java | 18 + .../dto/businessinfo/InfoQueryRequest.java | 27 ++ .../ErrandIncomeQueryRequest.java | 31 ++ .../model/dto/errand/ErrandAddRequest.java | 48 +++ .../model/dto/errand/ErrandQueryRequest.java | 44 +++ .../model/dto/errand/ErrandStateRequest.java | 23 ++ .../model/dto/errand/ErrandUpdateRequest.java | 43 +++ .../dto/errandAtuh/ErrandAuthAddRequest.java | 33 ++ .../errandAtuh/ErrandAuthQueryRequest.java | 35 ++ .../model/dto/order/OrderUpdateRequest.java | 41 +++ .../dto/order/OrdersCountByErrandRequest.java | 16 + .../model/dto/refund/RefundAddRequest.java | 28 ++ .../model/dto/refund/RefundUpdateRequest.java | 21 ++ .../school_send_back_end/model/vo/BillVO.java | 31 ++ .../model/vo/ErrandAuthVO.java | 76 +++++ .../model/vo/ErrandVO.java | 78 +++++ .../model/vo/OrderErrandVO.java | 36 ++ .../model/vo/OrderStatusVO.java | 37 ++ .../model/vo/OrdersExcelByErrandVO.java | 80 +++++ .../model/vo/OrdersPickVO.java | 27 ++ .../scheduler/CancelOrder.java | 94 +++++ .../scheduler/UpdateBusinessErrand.java | 44 +++ .../scheduler/UpdateOrder.java | 102 ++++++ .../service/BusinessinfoService.java | 17 + .../service/ErrandAuthService.java | 34 ++ .../service/ErrandBillService.java | 11 + .../service/ErrandIncomeService.java | 28 ++ .../service/ErrandLevelService.java | 15 + .../service/ErrandOrderService.java | 11 + .../service/ErrandService.java | 68 ++++ .../service/LoggingService.java | 18 + .../service/OrderImageService.java | 11 + .../service/OrderRefundsService.java | 11 + .../service/impl/BusinessinfoServiceImpl.java | 41 +++ .../service/impl/ErrandAuthServiceImpl.java | 88 +++++ .../service/impl/ErrandBillServiceImpl.java | 20 ++ .../service/impl/ErrandIncomeServiceImpl.java | 88 +++++ .../service/impl/ErrandLevelServiceImpl.java | 72 ++++ .../service/impl/ErrandOrderServiceImpl.java | 20 ++ .../service/impl/ErrandServiceImpl.java | 279 +++++++++++++++ .../service/impl/OrderImageServiceImpl.java | 20 ++ .../service/impl/OrderRefundsServiceImpl.java | 20 ++ .../utils/AliyunSmsUtils.java | 55 +++ .../utils/MultiDelayMessage.java | 59 ++++ .../resources/cert/ssl/xiaokuaisong.shop.jks | Bin 0 -> 5714 bytes .../resources/mapper/BusinessinfoMapper.xml | 18 + .../resources/mapper/ErrandAuthMapper.xml | 25 ++ .../resources/mapper/ErrandBillMapper.xml | 20 ++ .../resources/mapper/ErrandIncomeMapper.xml | 20 ++ .../resources/mapper/ErrandLevelMapper.xml | 21 ++ .../main/resources/mapper/ErrandMapper.xml | 30 ++ .../resources/mapper/ErrandOrderMapper.xml | 24 ++ .../resources/mapper/OrderImageMapper.xml | 15 + .../resources/mapper/OrderRefundsMapper.xml | 23 ++ 87 files changed, 4367 insertions(+) create mode 100644 school_lend_back_end/school_lend_back_end/deps.txt create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/AIConfig.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/RabbitMQConfig.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/RabbitMQConfigProperties.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/contant/RabbitMQConstant.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/AIController.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/BillController.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/BusinessInfoController.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandAuthController.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandController.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandIncomeController.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/RefundController.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/SmsController.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/listener/RabbitMQReceiver.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/listener/RabbitMQSender.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/BusinessinfoMapper.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandAuthMapper.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandBillMapper.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandIncomeMapper.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandLevelMapper.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandMapper.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandOrderMapper.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/OrderImageMapper.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/OrderRefundsMapper.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/Businessinfo.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/Errand.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandAuth.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandBill.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandIncome.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandLevel.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandOrder.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/OrderImage.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/OrderRefunds.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/businessinfo/InfoAddRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/businessinfo/InfoQueryRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/erradnIncome/ErrandIncomeQueryRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandAddRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandQueryRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandStateRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandUpdateRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errandAtuh/ErrandAuthAddRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errandAtuh/ErrandAuthQueryRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/order/OrderUpdateRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/order/OrdersCountByErrandRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/refund/RefundAddRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/refund/RefundUpdateRequest.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/BillVO.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/ErrandAuthVO.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/ErrandVO.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrderErrandVO.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrderStatusVO.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrdersExcelByErrandVO.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrdersPickVO.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/CancelOrder.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/UpdateBusinessErrand.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/UpdateOrder.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/BusinessinfoService.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandAuthService.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandBillService.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandIncomeService.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandLevelService.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandOrderService.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandService.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/LoggingService.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/OrderImageService.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/OrderRefundsService.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/BusinessinfoServiceImpl.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandAuthServiceImpl.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandBillServiceImpl.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandIncomeServiceImpl.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandLevelServiceImpl.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandOrderServiceImpl.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandServiceImpl.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/OrderImageServiceImpl.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/OrderRefundsServiceImpl.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/utils/AliyunSmsUtils.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/utils/MultiDelayMessage.java create mode 100644 school_lend_back_end/school_lend_back_end/src/main/resources/cert/ssl/xiaokuaisong.shop.jks create mode 100644 school_lend_back_end/school_lend_back_end/src/main/resources/mapper/BusinessinfoMapper.xml create mode 100644 school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandAuthMapper.xml create mode 100644 school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandBillMapper.xml create mode 100644 school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandIncomeMapper.xml create mode 100644 school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandLevelMapper.xml create mode 100644 school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandMapper.xml create mode 100644 school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandOrderMapper.xml create mode 100644 school_lend_back_end/school_lend_back_end/src/main/resources/mapper/OrderImageMapper.xml create mode 100644 school_lend_back_end/school_lend_back_end/src/main/resources/mapper/OrderRefundsMapper.xml diff --git a/school_lend_back_end/school_lend_back_end/deps.txt b/school_lend_back_end/school_lend_back_end/deps.txt new file mode 100644 index 0000000000000000000000000000000000000000..7bdfb56c53dff5594a9fceadb8c3d626b075d2c1 GIT binary patch literal 112630 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 G2>&0Tj4&bq literal 0 HcmV?d00001 diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/AIConfig.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/AIConfig.java new file mode 100644 index 0000000..bbc1186 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/AIConfig.java @@ -0,0 +1,65 @@ +package com.bsz.school_send_back_end.config; + +import com.bsz.school_send_back_end.model.domain.Dishes; +import com.bsz.school_send_back_end.model.domain.Orders; +import com.bsz.school_send_back_end.model.vo.BusinessVO; +import com.bsz.school_send_back_end.service.BusinessService; +import com.bsz.school_send_back_end.service.DishesService; +import com.bsz.school_send_back_end.service.LoggingService; +import com.bsz.school_send_back_end.service.OrdersService; +import jakarta.annotation.Resource; +import org.springframework.ai.chat.client.ChatClient; +import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor; +import org.springframework.ai.chat.memory.ChatMemory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Description; + +import java.util.List; +import java.util.function.Function; + +@Configuration +public class AIConfig { + + @Resource + private BusinessService businessService; + + @Resource + private DishesService dishesService; + + @Resource + private OrdersService ordersService; + + @Bean + ChatClient chatClient(ChatClient.Builder builder, ChatMemory chatMemory) { + return builder.defaultSystem( + """ + 你是食刻必达校快送小程序的助手,情谊轻松切愉快的语气与用户交流。 + 今天的日期是{current_date}。 + 请讲中文。 + """ + ) + .defaultAdvisors( + new PromptChatMemoryAdvisor(chatMemory), + new LoggingService() + ) + .defaultFunctions("getBusinessByAI") + .build(); + } + + + @Bean + @Description("推荐商家") + public Function> getBusinessByAI() { + List allBusiness = businessService.findAllBusiness(); + return unused -> allBusiness.stream() + .filter(businessVO -> businessVO.getLevel() == 5) + .toList(); + } + +// @Bean +// @Description("推荐菜品") +// public Function> getDishesByOrders() { +// List ordersList = ordersService.list(); +// } +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/RabbitMQConfig.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/RabbitMQConfig.java new file mode 100644 index 0000000..044531e --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/RabbitMQConfig.java @@ -0,0 +1,98 @@ +package com.bsz.school_send_back_end.config; + +import com.bsz.school_send_back_end.contant.RabbitMQConstant; +import org.springframework.amqp.core.*; +import org.springframework.amqp.support.converter.DefaultClassMapper; +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class RabbitMQConfig { + + @Bean + public Queue topicQueue1() { + return QueueBuilder.durable(RabbitMQConstant.TOPIC_QUEUE1).build(); + } + + @Bean + public Queue topicQueue2() { + return QueueBuilder.durable(RabbitMQConstant.TOPIC_QUEUE2).build(); + } + @Bean + public Queue orderReplyQueue() { + return QueueBuilder.durable(RabbitMQConstant.ORDER_REPLY_QUEUE).build(); + } + + @Bean + public Exchange topicExchange() { + return ExchangeBuilder.topicExchange(RabbitMQConstant.TOPIC_EXCHANGE).build(); + } + + @Bean + public Exchange responseExchange() { + return ExchangeBuilder.topicExchange(RabbitMQConstant.RESPONSE_EXCHANGE).build(); + } + + @Bean + public Binding topicBinding1() { + return BindingBuilder.bind(topicQueue1()).to(topicExchange()).with("topic.key1").noargs(); + } + + @Bean + public Binding topicBinding2() { + return BindingBuilder.bind(topicQueue2()).to(topicExchange()).with("topic.#").noargs(); + } + + @Bean + public Binding responseBinding() { + return BindingBuilder.bind(orderReplyQueue()).to(responseExchange()).with("response.#").noargs(); + } + + + +// /** +// * 声明一个 **延迟交换机**,类型必须为 `x-delayed-message` +// */ +// @Bean +// public CustomExchange delayedExchange() { +// Map args = new HashMap<>(); +// args.put("x-delayed-type", "direct"); // 交换机类型 +// return new CustomExchange(RabbitMQConstant.DELAYED_EXCHANGE, "x-delayed-message", true, false, args); +// } +// +// /** +// * 声明队列 +// */ +// @Bean +// public Queue delayedQueue() { +// return new Queue(RabbitMQConstant.DELAYED_QUEUE, true); +// } +// +// /** +// * 绑定队列到延迟交换机 +// */ +// @Bean +// public Binding binding(Queue delayedQueue, CustomExchange delayedExchange) { +// return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(RabbitMQConstant.DELAYED_ROUTING_KEY).noargs(); +// } + + @Bean + public MessageConverter jsonToMapMessageConverter() { + DefaultClassMapper defaultClassMapper = new DefaultClassMapper(); + defaultClassMapper.setTrustedPackages("com.bsz.school_send_back_end.utils.MultiDelayMessage"); // trusted packages + Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter(); + jackson2JsonMessageConverter.setClassMapper(defaultClassMapper); + return jackson2JsonMessageConverter; + } + + @Bean + public MessageConverter messageConverter(){ + return new Jackson2JsonMessageConverter(); + } + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/RabbitMQConfigProperties.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/RabbitMQConfigProperties.java new file mode 100644 index 0000000..89f11ea --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/config/RabbitMQConfigProperties.java @@ -0,0 +1,16 @@ +package com.bsz.school_send_back_end.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "spring.rabbitmq") +@Data +public class RabbitMQConfigProperties { + private String host; + private int port; + private String username; + private String password; + private String virtualHost; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/contant/RabbitMQConstant.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/contant/RabbitMQConstant.java new file mode 100644 index 0000000..cfe684d --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/contant/RabbitMQConstant.java @@ -0,0 +1,84 @@ +package com.bsz.school_send_back_end.contant; + +import java.util.List; + +public interface RabbitMQConstant { + + /** + * 聊天 + */ + String TOPIC_QUEUE1 = "topic.chat"; + + /** + * 商家 + */ + String TOPIC_QUEUE2 = "topic.order"; + + /** + * 跑腿 + */ + String TOPIC_QUEUE3 = "topic.errand"; + + /** + * 交换机 + */ + String TOPIC_EXCHANGE = "topicExchage"; + + /** + * 请求响应交换机,用于处理用户和商家之间的异步响应 + */ + String RESPONSE_EXCHANGE = "responseExchange"; + + /** + * 订单响应队列,商家处理完成订单后,可以发送响应消息到这个队列 + */ + String ORDER_REPLY_QUEUE = "orderReplyQueue"; + +// // 交换机名称 +// String DELAYED_EXCHANGE = "delayed.exchange"; +// // 队列名称 +// String DELAYED_QUEUE = "delayed.queue"; +// // 路由键 +// String DELAYED_ROUTING_KEY = "delayed.routingKey"; + + // List DELAY_MILLIS = List.of(10000L, 10000L, 10000L, 15000L, 15000L, 30000L, 30000L, 60000L, 60000L, 120000L, 300000L, 600000L, 600000L)); + + // 堂食订单取消(3分钟) + List DINE_IN_DELAY_MILLIS = List.of(30000L, 30000L, 30000L, 30000L, 30000L, 30000L); + + // 外卖订单退款(30分钟,多次检查) + List DELIVERY_DELAY_MILLIS = List.of(600000L, 1200000L, 1800000L); + + // 取消订单相关常量 + String CANCEL_ORDER_EXCHANGE = "cancel_order_exchange"; // 取消订单交换机 + String CANCEL_ORDER_QUEUE = "cancel_order_queue"; // 取消订单队列 + String CANCEL_ORDER_ROUTING_KEY = "cancel_order_key"; // 取消订单路由键 + // 外卖单相关常量 + String DELIVERY_DELAY_EXCHANGE = "delivery_exchange"; // 外卖单交换机 + String DELIVERY_ORDER_QUEUE = "delivery_queue"; // 外卖单队列 + String DELIVERY_ORDER_ROUTING_KEY = "delivery_key"; // 外卖单路由键 + + +// String DELAY_COUPON_QUEUE = "coupon.delay.queue"; +// +// String DELAY_COUPON_ROUTING_KEY = "coupon.key"; +// +// String DELAY_USER_COUPON_QUEUE = "userCoupon.delay.queue"; +// +// String DELAY_USER_COUPON_ROUTING_KEY = "userCoupon.key"; +// +// String DELAY_ADVANCE_ORDER_QUEUE = "advanceOrder.delay.queue"; +// +// String DELAY_ADVANCE_ROUTING_KEY = "advanceOrder.key"; +// +// String DELAY_CLOTHES_RENT_ORDER_QUEUE = "clothesRentOrder.delay.queue"; +// +// String DELAY_CLOTHES_RENT_ORDER_ROUTING_KEY = "clothesRentOrder.key"; +// +// String DELAY_CLOTHES_RENT_PERIOD_QUEUE = "clothesRentPeriod.delay.queue"; +// +// String DELAY_CLOTHES_RENT_PERIOD_ROUTING_KEY = "clothesRentPeriod.key"; +// + + +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/AIController.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/AIController.java new file mode 100644 index 0000000..2313c5b --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/AIController.java @@ -0,0 +1,32 @@ +package com.bsz.school_send_back_end.controller; + +import jakarta.annotation.Resource; +import org.springframework.ai.chat.client.ChatClient; +import org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Flux; + +import java.time.LocalDate; + +@RestController +@RequestMapping("/ai") +public class AIController { + + @Resource + private ChatClient chatClient; + + @GetMapping(value = "/chat/generateStreamAsString", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public Flux generateStreamAsString(@RequestParam(value = "message", defaultValue = "介绍自己") String message) { + Flux content = this.chatClient.prompt() + .system(promptSystemSpec -> promptSystemSpec.param("current_date", LocalDate.now().toString())) + .advisors(advisorSpec -> advisorSpec.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY,100)) + .user(message) + .stream() + .content(); + return content.concatWith(Flux.just("[complete]")); + } +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/BillController.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/BillController.java new file mode 100644 index 0000000..d0c6684 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/BillController.java @@ -0,0 +1,66 @@ +package com.bsz.school_send_back_end.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.bsz.school_send_back_end.annotation.AuthCheck; +import com.bsz.school_send_back_end.common.BaseResponse; +import com.bsz.school_send_back_end.common.ResultUtils; +import com.bsz.school_send_back_end.contant.UserConstant; +import com.bsz.school_send_back_end.model.domain.Errand; +import com.bsz.school_send_back_end.model.domain.ErrandBill; +import com.bsz.school_send_back_end.model.domain.OrderRefunds; +import com.bsz.school_send_back_end.model.domain.Orders; +import com.bsz.school_send_back_end.service.ErrandBillService; +import com.bsz.school_send_back_end.service.ErrandService; +import com.bsz.school_send_back_end.service.OrdersService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/bill") +@Slf4j +public class BillController { + + @Resource + private ErrandService errandService; + + @Resource + private ErrandBillService billService; + + @Resource + private OrdersService ordersService; + + /** + * 跑腿查询自己的账单 + * @param request 网路请求 + * @return 账单列表 + */ + @PostMapping("/list") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + public BaseResponse> listBillByErrand(HttpServletRequest request) { + Errand loginErrand = errandService.getLoginErrand(request); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Orders::getErrandId, loginErrand.getId()); + List ordersList = ordersService.list(wrapper); + List orderIds = ordersList.stream() + .map(Orders::getId) + .collect(Collectors.toList()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ErrandBill::getOrderId, orderIds); + queryWrapper.orderByDesc(ErrandBill::getOrderStartTime);// 按 orderStartTime 降序排序 + + List bills = billService.list(queryWrapper); + + return ResultUtils.success(bills); + } + + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/BusinessInfoController.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/BusinessInfoController.java new file mode 100644 index 0000000..54b7e38 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/BusinessInfoController.java @@ -0,0 +1,148 @@ +package com.bsz.school_send_back_end.controller; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.bsz.school_send_back_end.annotation.AuthCheck; +import com.bsz.school_send_back_end.common.BaseResponse; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.common.ResultUtils; +import com.bsz.school_send_back_end.contant.UserConstant; +import com.bsz.school_send_back_end.exception.BusinessException; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.Business; +import com.bsz.school_send_back_end.model.domain.Businessinfo; +import com.bsz.school_send_back_end.model.dto.CommonRequest; +import com.bsz.school_send_back_end.model.dto.businessinfo.InfoAddRequest; +import com.bsz.school_send_back_end.model.dto.businessinfo.InfoQueryRequest; +import com.bsz.school_send_back_end.service.BusinessService; +import com.bsz.school_send_back_end.service.BusinessinfoService; +import com.github.houbb.sensitive.word.core.SensitiveWordHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import java.util.List; + +@RestController +@Slf4j +@RequestMapping("/businessInfo") +public class BusinessInfoController { + + @Resource + private BusinessinfoService businessinfoService; + + @Resource + private BusinessService businessService; + + /** + * 添加公告 + * @param addRequest 添加请求体 + * @param request 网络请求 + * @return 是否添加成功 + */ + @PostMapping("/add") + @AuthCheck(mustRole = UserConstant.BUSINESS_ROLE) + public BaseResponse addInfo (@RequestBody InfoAddRequest addRequest, HttpServletRequest request) { + if ( addRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Business loginBusiness = businessService.getLoginBusiness(request); + Businessinfo businessinfo = new Businessinfo(); + String content = addRequest.getContent(); + boolean contains = SensitiveWordHelper.contains(content); + ThrowUtils.throwIf(contains, ErrorCode.PARAMS_ERROR, "公告含有违禁词"); + BeanUtils.copyProperties(addRequest, businessinfo); + businessinfo.setBusinessId(loginBusiness.getId()); + boolean save = businessinfoService.save(businessinfo); + ThrowUtils.throwIf(!save, ErrorCode.SYSTEM_ERROR, "添加公告失败"); + return ResultUtils.success(true); + } + + /** + * 删除公告 + * @param commonRequest 删除请求体 + * @param request 网络请求 + * @return 是否成功 + */ + @PostMapping("/delete") + @AuthCheck(mustRole = UserConstant.BUSINESS_ROLE) + public BaseResponse deleteInfo (@RequestBody CommonRequest commonRequest, HttpServletRequest request) { + if (commonRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Business loginBusiness = businessService.getLoginBusiness(request); + Long businessId = loginBusiness.getId(); + Long id = commonRequest.getId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Businessinfo::getId, id); + queryWrapper.eq(Businessinfo::getBusinessId, businessId); + long count = businessinfoService.count(queryWrapper); + ThrowUtils.throwIf(count != 1, ErrorCode.SYSTEM_ERROR, "当前公告未找到"); + boolean remove = businessinfoService.remove(queryWrapper); + ThrowUtils.throwIf(!remove, ErrorCode.SYSTEM_ERROR, "删除失败"); + return ResultUtils.success(true); + } + + /** + * 查询公告列表 (仅商家) + * @param request 网络请求 + * @return 查询列表 + */ + @PostMapping("/list/my") + @AuthCheck(mustRole = UserConstant.BUSINESS_ROLE) + public BaseResponse> selectMyInfo (HttpServletRequest request) { + Business loginBusiness = businessService.getLoginBusiness(request); + Long businessId = loginBusiness.getId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Businessinfo::getBusinessId, businessId); + queryWrapper.orderByDesc(Businessinfo::getCreateTime); + List list = businessinfoService.list(queryWrapper); + + return ResultUtils.success(list, "查询成功"); + } + + /** + * 查询公列表(仅管理员, 分页) + * @param infoQueryRequest 查询请求体 + * @return 查询列表 + */ + @PostMapping("/list/page") + @AuthCheck(mustRole = UserConstant.ADMIN_ROLE) + public BaseResponse> selectInfoByPage (@RequestBody InfoQueryRequest infoQueryRequest) { + if (infoQueryRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + long current = infoQueryRequest.getCurrent(); + long pageSize = infoQueryRequest.getPageSize(); + + QueryWrapper queryWrapper = businessinfoService.getQueryWrapper(infoQueryRequest); + Page page = businessinfoService.page(new Page<>(current, pageSize), queryWrapper); + return ResultUtils.success(page, "查询成功"); + } + + + /** + * 用户查询商家最新公告 + * @return 查询列表 + */ + @PostMapping("/list") + public BaseResponse selectInfo (@RequestBody CommonRequest commonRequest) { + if (commonRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Long businessId = commonRequest.getId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Businessinfo::getBusinessId, businessId); + queryWrapper.orderByDesc(Businessinfo::getCreateTime); + queryWrapper.last("LIMIT 1"); + Businessinfo businessinfo = businessinfoService.getOne(queryWrapper); + return ResultUtils.success(businessinfo, "查询成功"); + } +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandAuthController.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandAuthController.java new file mode 100644 index 0000000..f7353e6 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandAuthController.java @@ -0,0 +1,106 @@ +package com.bsz.school_send_back_end.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsz.school_send_back_end.annotation.AuthCheck; +import com.bsz.school_send_back_end.common.BaseResponse; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.common.ResultUtils; +import com.bsz.school_send_back_end.contant.UserConstant; +import com.bsz.school_send_back_end.exception.BusinessException; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.Errand; +import com.bsz.school_send_back_end.model.domain.ErrandAuth; +import com.bsz.school_send_back_end.model.dto.errandAtuh.ErrandAuthAddRequest; +import com.bsz.school_send_back_end.model.dto.errandAtuh.ErrandAuthQueryRequest; +import com.bsz.school_send_back_end.service.ErrandAuthService; +import com.bsz.school_send_back_end.service.ErrandService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; + +@Slf4j +@RestController +@RequestMapping("/errandAuth") +public class ErrandAuthController { + + @Resource + private ErrandAuthService errandAuthService; + + @Resource + private ErrandService errandService; + + @PostMapping("/add") + public BaseResponse addErrandAuth(@RequestBody ErrandAuthAddRequest addRequest) { + if (addRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Long errandId = addRequest.getErrandId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ErrandAuth::getErrandId, errandId); + long count = errandAuthService.count(queryWrapper); + ThrowUtils.throwIf(count > 0, ErrorCode.PARAMS_ERROR, "当前跑腿已认证"); + ErrandAuth errandAuth = new ErrandAuth(); + BeanUtils.copyProperties(addRequest, errandAuth); + errandAuthService.validErrandAuth(errandAuth,true); + + boolean save = errandAuthService.save(errandAuth); + ThrowUtils.throwIf(!save, ErrorCode.SYSTEM_ERROR, "添加跑腿认证失败"); + + return ResultUtils.success(true); + } + + @PostMapping("/update") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + public BaseResponse updateErrandAuth (@RequestBody ErrandAuthAddRequest updateRequest) { + if (updateRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + ErrandAuth errandAuth = new ErrandAuth(); + BeanUtils.copyProperties(updateRequest, errandAuth); + errandAuthService.validErrandAuth(errandAuth, false); + LambdaUpdateWrapper wrapper = errandAuthService.getUpdateWrapper(errandAuth); + boolean update = errandAuthService.update(wrapper); + ThrowUtils.throwIf(!update, ErrorCode.SYSTEM_ERROR, "更新跑腿认证信息失败"); + + return ResultUtils.success(true); + } + + @PostMapping("/list/page") + @AuthCheck(mustRole = UserConstant.ADMIN_ROLE) + public BaseResponse> listErrandAuthByPage(@RequestBody ErrandAuthQueryRequest errandAuthQueryRequest) { + if (errandAuthQueryRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + long pageSize = errandAuthQueryRequest.getPageSize(); + long current = errandAuthQueryRequest.getCurrent(); + QueryWrapper queryWrapper = errandAuthService.getQueryWrapper(errandAuthQueryRequest); + Page page = errandAuthService.page(new Page<>(current, pageSize),queryWrapper); + + return ResultUtils.success(page); + } + + @GetMapping("/getErrandAuthById") + public BaseResponse getErrandAuthById (String errandId) { + Long errandId1 = Long.valueOf(errandId); + ErrandAuth errandAuth = errandAuthService.getErrandAuth(errandId1); + + return ResultUtils.success(errandAuth); + } + + @PostMapping("/get/my") + public BaseResponse getMyErrandAuth (HttpServletRequest request) { + Errand loginErrand = errandService.getLoginErrand(request); + Long id = loginErrand.getId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ErrandAuth::getErrandId, id); + ErrandAuth errandAuth = errandAuthService.getOne(queryWrapper); + ThrowUtils.throwIf(errandAuth == null, ErrorCode.OPERATION_ERROR, "当前跑腿为认证"); + return ResultUtils.success(errandAuth); + } +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandController.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandController.java new file mode 100644 index 0000000..68a3ce7 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandController.java @@ -0,0 +1,323 @@ +package com.bsz.school_send_back_end.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsz.school_send_back_end.annotation.AuthCheck; +import com.bsz.school_send_back_end.common.BaseResponse; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.common.ResultUtils; +import com.bsz.school_send_back_end.contant.UserConstant; +import com.bsz.school_send_back_end.exception.BusinessException; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.*; +import com.bsz.school_send_back_end.model.dto.CommonRequest; +import com.bsz.school_send_back_end.model.dto.errand.ErrandAddRequest; +import com.bsz.school_send_back_end.model.dto.errand.ErrandQueryRequest; +import com.bsz.school_send_back_end.model.dto.errand.ErrandStateRequest; +import com.bsz.school_send_back_end.model.dto.errand.ErrandUpdateRequest; +import com.bsz.school_send_back_end.model.vo.ErrandVO; +import com.bsz.school_send_back_end.model.vo.OrdersVO; +import com.bsz.school_send_back_end.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.DigestUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +import static com.bsz.school_send_back_end.contant.UserConstant.*; + +@Slf4j +@RestController +@RequestMapping("/errand") +public class ErrandController { + @Resource + private ErrandService errandService; + + @Resource + private UserService userService; + + @Resource + private OrdersService ordersService; + + @Resource + private ErrandAuthService errandAuthService; + + @Resource + private ErrandOrderService errandOrderService; + + /** + * 注册跑腿 + * @param addRequest 注册请求体 + * @return 是否成功 + */ + @PostMapping("/add") + public BaseResponse addErrand(@RequestBody ErrandAddRequest addRequest) { + if (addRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + User user = new User(); + Errand errand = new Errand(); + BeanUtils.copyProperties(addRequest, user); + System.out.println("User account: " + user.getUserAccount()); + BeanUtils.copyProperties(addRequest, errand); + + userService.validUser(user, true); + errandService.validErrand(errand, true); + + //加密 + String encryptPassword = DigestUtils.md5DigestAsHex((USER_SALT + user.getUserPassword()).getBytes()); + user.setUserPassword(encryptPassword); + + //更改用户权限为跑腿 + user.setUserRole("errand"); + + //往user表中补充跑腿信息 + user.setUsername(errand.getErrandName()); + user.setPhone(errand.getErrandPhone()); + + errandService.addErrand(user, errand); + return ResultUtils.success(true); + } + + /** + * 删除跑腿信息 + * @param request 当前登录用户 + * @return 是否成功 + */ + @PostMapping("/delete") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + @Transactional(rollbackFor = Exception.class) + public BaseResponse deleteErrand (HttpServletRequest request){ + errandService.deleteErrand(request); + return ResultUtils.success(true); + } + + /** + * 修改跑腿信息(管理员) + * @param updateRequest 修改请求体 + * @return 是否修改成功 + */ + @PostMapping("/update") + @AuthCheck(mustRole = UserConstant.ADMIN_ROLE) + public BaseResponse updateErrand(@RequestBody ErrandUpdateRequest updateRequest) { + if (updateRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + + Boolean update = errandService.updateErrand(updateRequest); + ThrowUtils.throwIf(!update, ErrorCode.SYSTEM_ERROR,"更新跑腿失败"); + + return ResultUtils.success(true); + } + + /** + * 修改跑腿信息(个人) + * @param updateRequest 修改请求体 + * @param request 当前登录用户 + * @return 是否修改成功 + */ + @PostMapping("/update/my") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + public BaseResponse updateErrandByUser (@RequestBody ErrandUpdateRequest updateRequest, HttpServletRequest request ) { + if (updateRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Errand loginErrand = errandService.getLoginErrand(request); + + Integer totalOrders = loginErrand.getTotalOrders(); + ThrowUtils.throwIf(totalOrders > 0, ErrorCode.OPERATION_ERROR, "当前跑腿还有订单未送"); + Boolean update = errandService.updateErrand(updateRequest); + Long errandId = loginErrand.getId(); + Long id = updateRequest.getId(); + ThrowUtils.throwIf(!id.equals(errandId), ErrorCode.PARAMS_ERROR, "修改的跑腿信息不是当前跑腿"); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "更新跑腿失败"); + return ResultUtils.success(true); + } + + /** + * 获取当前跑腿信息列表 + * @return 跑腿信息列表 + */ + @PostMapping("/list") + @AuthCheck(mustRole = ADMIN_ROLE) + public BaseResponse> listErrand() { + List list = errandService.list(); + return ResultUtils.success(list); + } + + /** + * 分页获取跑腿信息列表 + * @param queryRequest 查询请求体 + * @return 跑腿信息(分页) + */ + @PostMapping("/page") + @AuthCheck(mustRole = ADMIN_ROLE) + public BaseResponse> listErrandByPage (@RequestBody ErrandQueryRequest queryRequest) { + if (queryRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + + long pageSize = queryRequest.getPageSize(); + long current = queryRequest.getCurrent(); + QueryWrapper queryWrapper = errandService.getQueryWrapper(queryRequest); + Page errandPage = errandService.page(new Page<>(current, pageSize), queryWrapper); + return ResultUtils.success(errandPage); + } + + /** + * 抢单 + * @param commonRequest 订单id + * @param request 当前登录用户 + * @return 是否抢单成功 + */ + @PostMapping("/get/order") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + @Transactional(rollbackFor = Exception.class) + public BaseResponse getOrder(@RequestBody CommonRequest commonRequest, HttpServletRequest request) { + if (commonRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Long ordersId = commonRequest.getId(); + Errand loginErrand = errandService.getLoginErrand(request); + Long loginErrandId = loginErrand.getId(); + ErrandOrder errandOrder = errandOrderService.getOne(Wrappers.lambdaQuery() + .eq(ErrandOrder::getOrderId, ordersId)); + Integer state = loginErrand.getState(); + if (state != 1) { + throw new BusinessException(ErrorCode.FORBIDDEN_ERROR, "当前跑腿不可抢单"); + } + + errandService.updateTotal(loginErrand, true); + + // 开始事务 + Orders orders = ordersService.getOrderWithPessimisticLock(ordersId); + + // 判断订单是否已被抢 + if (orders == null || orders.getErrandId() != null) { + return ResultUtils.success(false); // 订单已经被抢或不存在 + } + + // 更新订单的 errandId 和状态 + orders.setErrandId(loginErrandId); + boolean update = ordersService.updateById(orders); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "抢单失败"); + + + errandOrder.setErrandId(loginErrandId); + errandOrder.setErrandState(2); // 2待取货 + boolean update1 = errandOrderService.updateById(errandOrder); + ThrowUtils.throwIf(!update1, ErrorCode.OPERATION_ERROR, "更新跑腿订单关联失败"); + + return ResultUtils.success(true); + } + + /** + * 修改订单 + * @param errandStateRequest 订单id + * @param request 当前登录用户 + * @return 是否修改成功 + */ + @PostMapping("/update/state") + @AuthCheck(mustRole = ERRAND_ROLE) + public BaseResponse updateOrdersStateByErrand (@RequestBody ErrandStateRequest errandStateRequest, HttpServletRequest request) { + if (errandStateRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + errandService.orderToErrand(errandStateRequest, request); + return ResultUtils.success(true); + } + + /** + * 根据当前登录用户获取跑腿信息 + */ + @PostMapping("/get/current") + @AuthCheck(mustRole = ERRAND_ROLE) + public BaseResponse getByErrand (HttpServletRequest request) { + Errand loginErrand = errandService.getLoginErrand(request); + ErrandVO errandVO = errandService.getErrandVO(loginErrand); + + return ResultUtils.success(errandVO); + } + + /** + * 当前跑腿获取订单 + */ + @PostMapping("/list/order") + @AuthCheck(mustRole = ERRAND_ROLE) + public BaseResponse> listOrdersByErrand(Integer errandState, HttpServletRequest request) { + Errand loginErrand = errandService.getLoginErrand(request); + String distributionScope = loginErrand.getDistributionScope(); + + // 创建 errand_order 表的查询条件 + LambdaQueryWrapper errandOrderQueryWrapper = new LambdaQueryWrapper<>(); + errandOrderQueryWrapper.eq(ErrandOrder::getErrandState, errandState); + + // 根据 errandState 的不同情况调整查询 + if (errandState != 1) { + errandOrderQueryWrapper.eq(ErrandOrder::getErrandId, loginErrand.getId()); + } else { + errandOrderQueryWrapper.isNull(ErrandOrder::getErrandId); + errandOrderQueryWrapper.ge(ErrandOrder::getEndTime, new Date()); + } + + // 查询符合条件的 errand_order 数据 + List errandOrderList = errandOrderService.list(errandOrderQueryWrapper); + + // 获取符合条件的 orderId 列表 + List orderIds = errandOrderList.stream().map(ErrandOrder::getOrderId).collect(Collectors.toList()); + + // 如果没有符合条件的订单,则返回空 + if (orderIds.isEmpty()) { + return ResultUtils.success(Collections.emptyList()); + } + + // 查询 orders 表,获取相关订单信息 + LambdaQueryWrapper ordersQueryWrapper = new LambdaQueryWrapper<>(); + ordersQueryWrapper.in(Orders::getId, orderIds); + ordersQueryWrapper.eq(Orders::getLocation, distributionScope); + + // 获取订单数据 + List ordersList = ordersService.list(ordersQueryWrapper); + List ordersVO = ordersService.getOrdersVO(ordersList); + + // 如果转换后的订单VO为空,也返回空响应 + if (CollectionUtils.isEmpty(ordersVO)) { + return ResultUtils.success(Collections.emptyList()); + } + + return ResultUtils.success(ordersVO); + } + + /** + * 根据Id获取跑腿信息 + * @return 跑腿信息 + */ + @PostMapping("/get/id") + @AuthCheck(mustRole = ADMIN_ROLE) + public BaseResponse getErrandById (String errandId1) { + Long errandId = Long.valueOf(errandId1); + Errand errand = errandService.getOne(Wrappers.lambdaQuery().eq(Errand::getId, errandId)); + ThrowUtils.throwIf(errand == null, ErrorCode.PARAMS_ERROR, "当前跑腿id不正确"); + ErrandVO errandVO = errandService.getErrandVO(errand); + ErrandAuth errandAuth = errandAuthService.getErrandAuth(errandId); + errandVO.setBackIdCard(errandAuth.getBackIdCard()); + errandVO.setBankCard(errandAuth.getBankCard()); + errandVO.setFrontIdCard(errandAuth.getFrontIdCard()); + return ResultUtils.success(errandVO); + } + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandIncomeController.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandIncomeController.java new file mode 100644 index 0000000..37f2b92 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/ErrandIncomeController.java @@ -0,0 +1,135 @@ +package com.bsz.school_send_back_end.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsz.school_send_back_end.annotation.AuthCheck; +import com.bsz.school_send_back_end.common.BaseResponse; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.common.ResultUtils; +import com.bsz.school_send_back_end.contant.UserConstant; +import com.bsz.school_send_back_end.exception.BusinessException; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.Errand; +import com.bsz.school_send_back_end.model.domain.ErrandIncome; +import com.bsz.school_send_back_end.model.domain.User; +import com.bsz.school_send_back_end.model.dto.CommonRequest; +import com.bsz.school_send_back_end.model.dto.erradnIncome.ErrandIncomeQueryRequest; +import com.bsz.school_send_back_end.service.ErrandIncomeService; +import com.bsz.school_send_back_end.service.ErrandService; +import com.bsz.school_send_back_end.service.UserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +@RestController +@Slf4j +@RequestMapping("/errandIncome") +public class ErrandIncomeController { + + @Resource + private ErrandService errandService; + + @Resource + private ErrandIncomeService errandIncomeService; + + @Resource + private UserService userService; + + @PostMapping("/count/number") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + public BaseResponse countIncomeNumber(HttpServletRequest request) { + Errand loginErrand = errandService.getLoginErrand(request); + + LambdaQueryWrapper queryWrapper = errandIncomeService.getQueryWrapper(loginErrand.getId()); + + long count = errandIncomeService.count(queryWrapper); + return ResultUtils.success(count); + } + + @PostMapping("/count/money") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + public BaseResponse countIncomeMoney(HttpServletRequest request) { + Errand loginErrand = errandService.getLoginErrand(request); + + LambdaQueryWrapper queryWrapper = errandIncomeService.getQueryWrapper(loginErrand.getId()); + queryWrapper.eq(ErrandIncome::getState, 1); + List list = errandIncomeService.list(queryWrapper); + BigDecimal price = list.stream().map(ErrandIncome::getIncome).reduce(BigDecimal.ZERO, BigDecimal::add); + + return ResultUtils.success(price); + } + + @PostMapping("/count/total-money") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + public BaseResponse countTotalIncome(HttpServletRequest request) { + // 获取登录跑腿信息 + Errand loginErrand = errandService.getLoginErrand(request); + + // 从跑腿表直接获取总收入字段值 + BigDecimal totalIncome = loginErrand.getTotalPrice(); + + // 返回结果 + return ResultUtils.success(totalIncome); + } + + @PostMapping("/list") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + public BaseResponse> listErrandIncome(@RequestBody CommonRequest commonRequest, HttpServletRequest request) { + if (commonRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Long errandId = commonRequest.getId(); + User loginUser = userService.getLoginUser(request); + String userRole = loginUser.getUserRole(); + if (userRole.equals(UserConstant.ERRAND_ROLE)) { + Errand loginErrand = errandService.getLoginErrand(request); + Long id = loginErrand.getId(); + ThrowUtils.throwIf(!id.equals(errandId), ErrorCode.PARAMS_ERROR, "传输的跑腿id不正确"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ErrandIncome::getErrandId, errandId); + List list = errandIncomeService.list(queryWrapper); + + if (list == null) { + list = new ArrayList<>(); + } + return ResultUtils.success(list); + } + + @PostMapping("/list/page") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + public BaseResponse> listErrandIncomeByPage(@RequestBody ErrandIncomeQueryRequest queryRequest) { + if (queryRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + long pageSize = queryRequest.getPageSize(); + long current = queryRequest.getCurrent(); + QueryWrapper queryWrapper = errandIncomeService.getWrapper(queryRequest); + Page page = errandIncomeService.page(new Page<>(current, pageSize), queryWrapper); + if (page == null) { + page = new Page<>(); + } + + return ResultUtils.success(page); + } + + + @PostMapping("/count/money/no") + @AuthCheck(mustRole = UserConstant.ERRAND_ROLE) + public BaseResponse countIncomeMoneyNo(HttpServletRequest request) { + Errand loginErrand = errandService.getLoginErrand(request); + + LambdaQueryWrapper queryWrapper = errandIncomeService.getQueryWrapper(loginErrand.getId()); + queryWrapper.eq(ErrandIncome::getState, 0); + List list = errandIncomeService.list(queryWrapper); + BigDecimal price = list.stream().map(ErrandIncome::getIncome).reduce(BigDecimal.ZERO, BigDecimal::add); + + return ResultUtils.success(price); + } +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/RefundController.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/RefundController.java new file mode 100644 index 0000000..f862e83 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/RefundController.java @@ -0,0 +1,140 @@ +package com.bsz.school_send_back_end.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.bsz.school_send_back_end.annotation.AuthCheck; +import com.bsz.school_send_back_end.common.BaseResponse; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.common.ResultUtils; +import com.bsz.school_send_back_end.contant.UserConstant; +import com.bsz.school_send_back_end.exception.BusinessException; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.Business; +import com.bsz.school_send_back_end.model.domain.OrderRefunds; +import com.bsz.school_send_back_end.model.domain.Orders; +import com.bsz.school_send_back_end.model.domain.User; +import com.bsz.school_send_back_end.model.dto.refund.RefundAddRequest; +import com.bsz.school_send_back_end.model.dto.refund.RefundUpdateRequest; +import com.bsz.school_send_back_end.service.BusinessService; +import com.bsz.school_send_back_end.service.OrderRefundsService; +import com.bsz.school_send_back_end.service.OrdersService; +import com.bsz.school_send_back_end.service.UserService; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/refund") +public class RefundController { + @Resource + private UserService userService; + + @Resource + private OrderRefundsService refundsService; + + @Resource + private OrdersService ordersService; + + @Resource + private BusinessService businessService; + + /** + * 用户申请退款 + * @param refundAddRequest 退款请求 + * @param request 网络请求 + * @return 是否成功 + */ + @PostMapping("/add") + public BaseResponse addRefund(@RequestBody RefundAddRequest refundAddRequest, HttpServletRequest request) { + User loginUser = userService.getLoginUser(request); + Long orderId = refundAddRequest.getOrderId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Orders::getId, orderId); + Orders orders = ordersService.getOne(queryWrapper); + ThrowUtils.throwIf(orders == null, ErrorCode.NOT_FOUND_ERROR, "未找到退款申请"); + ThrowUtils.throwIf(orders.getState() != 1, ErrorCode.SYSTEM_ERROR, "该订单未支付"); + + OrderRefunds orderRefunds = new OrderRefunds(); + BeanUtils.copyProperties(refundAddRequest, orderRefunds); + orderRefunds.setUserId(loginUser.getId()); + + boolean save = refundsService.save(orderRefunds); + ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR, "创建退款单失败"); + return ResultUtils.success(true, "申请退款成功,等待商家确认"); + } + + /** + * 商家查询退款单 + * @param status 退款单的状态 + * @param request 网络请求 + * @return 退款列表 + */ + @GetMapping("/list/business") + @AuthCheck(mustRole = UserConstant.BUSINESS_ROLE) + public BaseResponse> listRefundByBusiness(@RequestParam Integer status, HttpServletRequest request) { + Business loginBusiness = businessService.getLoginBusiness(request); + Long id = loginBusiness.getId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(OrderRefunds::getStatus, status) + .inSql(OrderRefunds::getOrderId, "SELECT id FROM orders WHERE businessId = " + id); // 根据商家ID过滤订单 + List list = refundsService.list(queryWrapper); + return ResultUtils.success(list); + } + + @PostMapping("/update") + @AuthCheck(mustRole = UserConstant.BUSINESS_ROLE) + public BaseResponse updateRefundByBusiness (@RequestBody RefundUpdateRequest updateRequest, HttpServletRequest request) { + if (updateRequest == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR); + } + Long orderId = updateRequest.getOrderId(); + Integer status = updateRequest.getStatus(); + Business loginBusiness = businessService.getLoginBusiness(request); + Long businessId = loginBusiness.getId(); + Orders orders = ordersService.getOne(Wrappers.lambdaQuery() + .eq(Orders::getId, orderId)); + ThrowUtils.throwIf(orders == null, ErrorCode.PARAMS_ERROR, "传入的订单id不正确"); + ThrowUtils.throwIf(businessId.equals(orders.getBusinessId()), ErrorCode.PARAMS_ERROR, "当前订单不属于该商家"); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(OrderRefunds::getOrderId, orderId); + OrderRefunds refunds = refundsService.getOne(queryWrapper); + refunds.setStatus(status); // 1-已同意 2 - 已拒绝 + ThrowUtils.throwIf(status == 2 && updateRequest.getRefuseReason() == null, ErrorCode.PARAMS_ERROR, "请填写退款原因"); + boolean updateById = refundsService.updateById(refunds); + ThrowUtils.throwIf(!updateById, ErrorCode.OPERATION_ERROR, "修改退款单状态失败"); + return ResultUtils.success(true); + } + + @PostMapping("/list/reson") + @AuthCheck(mustRole = UserConstant.ADMIN_ROLE) + public BaseResponse> getReasonByAdmin() { + // 获取今天的开始和结束时间 + LocalDate today = LocalDate.now(); + LocalDateTime startOfDay = today.atStartOfDay(); // 今天的00:00:00 + LocalDateTime endOfDay = today.atTime(LocalTime.MAX); // 今天的23:59:59.999999999 + + // 将 LocalDateTime 转换为 Date + Date startOfDayDate = Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()); + Date endOfDayDate = Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.ge(OrderRefunds::getCreateTime, startOfDayDate); + queryWrapper.le(OrderRefunds::getCreateTime, endOfDayDate); + List refunds = refundsService.list(queryWrapper); + List collect = refunds.stream() + .map(OrderRefunds::getReason) + .collect(Collectors.toList()); + return ResultUtils.success(collect); + } + + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/SmsController.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/SmsController.java new file mode 100644 index 0000000..4ec5029 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/controller/SmsController.java @@ -0,0 +1,51 @@ +package com.bsz.school_send_back_end.controller; + +import com.bsz.school_send_back_end.common.BaseResponse; +import com.bsz.school_send_back_end.common.ResultUtils; +import com.bsz.school_send_back_end.utils.AliyunSmsUtils; +import com.bsz.school_send_back_end.utils.RandomNumberGenerator; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import java.util.HashMap; +import java.util.concurrent.TimeUnit; + +@RestController +@Slf4j +@RequestMapping("/sms") +public class SmsController { + + @Resource + private RedisTemplate redisTemplate; + + @Resource + private RandomNumberGenerator randomNumberGenerator; + + @Resource + private AliyunSmsUtils aliyunSmsUtils; + + @GetMapping("/send/{phone}") + public BaseResponse sendCode (@PathVariable String phone) { + String code = (String) redisTemplate.opsForValue().get(phone); + log.info("获取验证码:{}", code); + + if (code == null) { + String fourBitRandom = randomNumberGenerator.getFourBitRandom(); + HashMap hashMap = new HashMap<>(); + hashMap.put("code", fourBitRandom); + log.info("生成的验证码:" + fourBitRandom); + redisTemplate.opsForValue().set(phone, fourBitRandom, 5, TimeUnit.MINUTES); + boolean b = aliyunSmsUtils.sendSms(phone, hashMap); + log.info("短信发送状态,{}", b); + return ResultUtils.success("发送成功"); + } else { + return ResultUtils.success("请勿重复发送验证码"); + } + } + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/listener/RabbitMQReceiver.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/listener/RabbitMQReceiver.java new file mode 100644 index 0000000..1b60351 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/listener/RabbitMQReceiver.java @@ -0,0 +1,142 @@ +package com.bsz.school_send_back_end.listener; + + + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.contant.RabbitMQConstant; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.Orders; +import com.bsz.school_send_back_end.model.domain.PrivateMessage; +import com.bsz.school_send_back_end.service.OrdersService; +import com.bsz.school_send_back_end.utils.MultiDelayMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; + + +@Component +@Slf4j +public class RabbitMQReceiver { + @Resource + private OrdersService ordersService; + + @Resource + private RabbitTemplate rabbitTemplate; + + @RabbitListener(queues = RabbitMQConstant.TOPIC_QUEUE2) + public Orders receiveOrder (Orders message) { + log.info("接收数据:" + message); + return message; + } + + + + @RabbitListener(queues = RabbitMQConstant.TOPIC_QUEUE1) + public PrivateMessage receive (PrivateMessage message) { + log.info("接收数据:" + message); + return message; + + } + + /** + * 过三分钟未支付自动取消 + * @param msg + */ + @RabbitListener(bindings = @QueueBinding( + value = @Queue(RabbitMQConstant.CANCEL_ORDER_QUEUE), + exchange = @Exchange(name = RabbitMQConstant.CANCEL_ORDER_EXCHANGE, delayed = "true"), + key = RabbitMQConstant.CANCEL_ORDER_ROUTING_KEY + )) + public void handleExpiredOrder(MultiDelayMessage msg) { + Long orderId = msg.getData(); + log.info("订单超时检查,订单ID:{}", orderId); + + // 查询订单 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Orders::getId, orderId); + Orders orders = ordersService.getOne(queryWrapper); + + if (orders == null) { + log.warn("订单不存在,订单ID:{}", orderId); + return; + } + + if (orders.getState() == 0) { // 订单仍未支付 + if (msg.hasNextDelay()) { + // 还有下一个检查点,继续发送延迟消息 + int nextDelay = msg.removeNextDelay().intValue(); + rabbitTemplate.convertAndSend(RabbitMQConstant.CANCEL_ORDER_EXCHANGE, + RabbitMQConstant.CANCEL_ORDER_ROUTING_KEY, msg, message -> { + message.getMessageProperties().setDelay(nextDelay); + return message; + }); + log.info("订单未支付,下一次检查延迟 {} 毫秒,订单ID:{}", nextDelay, orderId); + } else { + // **所有检查点都执行完,才执行订单取消** + log.info("订单超时未支付,自动取消,订单ID:{}", orderId); + orders.setState(3); // 订单状态修改为已取消(假设 3 代表“已取消”) + boolean update = ordersService.updateById(orders); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "订单取消失败"); + log.info("订单超时,已取消,订单ID:{}", orderId); + } + } else { + log.info("订单已支付,无需取消,订单ID:{}", orderId); + } + } + + /** + * 过三十分钟无人接单自动退款 + * @param msg + */ + @RabbitListener(bindings = @QueueBinding( + value = @Queue(RabbitMQConstant.DELIVERY_ORDER_QUEUE), + exchange = @Exchange(name = RabbitMQConstant.DELIVERY_DELAY_EXCHANGE, delayed = "true"), + key = RabbitMQConstant.DELIVERY_ORDER_ROUTING_KEY + )) + public void handleExpiredDeliveryOrder(MultiDelayMessage msg) { + Long orderId = msg.getData(); + log.info("外卖单超时检查,订单ID:{}", orderId); + + // 查询订单 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Orders::getId, orderId); + Orders orders = ordersService.getOne(queryWrapper); + + if (orders == null) { + log.warn("外卖订单不存在,订单ID:{}", orderId); + return; + } + + if (orders.getState() == 1) { // 外卖单仍未支付 + // 外卖单超时退款逻辑 + if (msg.hasNextDelay()) { + int nextDelay = msg.removeNextDelay().intValue(); + rabbitTemplate.convertAndSend(RabbitMQConstant.DELIVERY_DELAY_EXCHANGE, + RabbitMQConstant.DELIVERY_ORDER_ROUTING_KEY, msg, message -> { + message.getMessageProperties().setDelay(nextDelay); + return message; + }); + log.info("外卖单未接单,下一次检查延迟 {} 毫秒,订单ID:{}", nextDelay, orderId); + } else { + // 超过30分钟,未接单,自动退款 + log.info("外卖单超时未接单,自动退款,订单ID:{}", orderId); + orders.setState(2); // 订单状态修改为已退款 + boolean update = ordersService.updateById(orders); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "外卖单退款修改失败"); + log.info("外卖单超时,退款成功,订单ID:{}", orderId); + } + } else { + log.info("外卖单已支付,无需退款,订单ID:{}", orderId); + } + } + + + +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/listener/RabbitMQSender.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/listener/RabbitMQSender.java new file mode 100644 index 0000000..387ce28 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/listener/RabbitMQSender.java @@ -0,0 +1,97 @@ +package com.bsz.school_send_back_end.listener; + +import com.bsz.school_send_back_end.contant.RabbitMQConstant; +import com.bsz.school_send_back_end.model.domain.Orders; +import com.bsz.school_send_back_end.model.domain.PrivateMessage; +import com.bsz.school_send_back_end.utils.MultiDelayMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.AmqpTemplate; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; +import java.util.*; + +@Component +@Slf4j +public class RabbitMQSender { + + @Resource + private AmqpTemplate amqpTemplate; + + @Resource + private RabbitTemplate rabbitTemplate; + + public void sendOrderMessage (Orders message) { + log.info("消息队列 MQSender 业务消息发送 send OrderMessage:" + message); + amqpTemplate.convertAndSend(RabbitMQConstant.TOPIC_QUEUE2,message, msg->{ + msg.getMessageProperties().setReplyTo(RabbitMQConstant.ORDER_REPLY_QUEUE); + return msg; + }); + } + + + public void sendPrivateMessage(PrivateMessage message) { + log.info("消息队列 MQSender 业务消息发送 send message:" + message); + amqpTemplate.convertAndSend(RabbitMQConstant.TOPIC_QUEUE1,message, msg->{ + msg.getMessageProperties().setReplyTo(RabbitMQConstant.TOPIC_QUEUE1); + return msg; + }); + } + +// public void sendDelayedOrderMessage(long orderId, long delayMillis) { +// Map headers = new HashMap<>(); +// headers.put("x-delay", delayMillis); // 设置延迟时间(毫秒) +// +// amqpTemplate.convertAndSend( +// RabbitMQConstant.DELAYED_EXCHANGE, // 交换机 +// RabbitMQConstant.DELAYED_ROUTING_KEY, // 路由键 +// orderId, // 消息内容(订单 ID) +// message -> { +// message.getMessageProperties().getHeaders().putAll(headers); // 将延迟时间添加到消息头部 +// return message; +// }); +// log.info("发送延迟订单取消消息,订单ID: " + orderId + ",延迟时间: " + delayMillis + "ms"); +// } +// +// +// public void sendDelayedMessage() { +// // 设置延迟时间为 5 秒 +// MessageProperties messageProperties = new MessageProperties(); +// messageProperties.setHeader("x-delay", 5000); // 延迟时间(单位:毫秒) +// Message message = new Message("Hello, delayed world!".getBytes(), messageProperties); +// +// // 发送到延迟交换机 +// amqpTemplate.send(RabbitMQConstant.DELAYED_EXCHANGE, RabbitMQConstant.DELAYED_ROUTING_KEY, message); +// log.info("发送延迟成功:" + new Date()); +// } + + public void sendCreateOrderMessage(Long orderId) { + // 复制 DELAY_MILLIS 到一个新的 ArrayList + List newDelayMillis = new ArrayList<>(RabbitMQConstant.DINE_IN_DELAY_MILLIS); + // 延迟检查订单状态信息 + MultiDelayMessage msg = new MultiDelayMessage<>(orderId, newDelayMillis); + int delayValue = msg.removeNextDelay().intValue(); + rabbitTemplate.convertAndSend(RabbitMQConstant.CANCEL_ORDER_EXCHANGE, + RabbitMQConstant.CANCEL_ORDER_ROUTING_KEY, msg, message -> { + // 添加延迟消息属性 + message.getMessageProperties().setDelay(delayValue); + return message; + }); + log.info("发送成功,orderID:{}", orderId); + } + //自动退款30分钟未接单的 + public void sendCreateDeliveryOrderMessage (Long orderId) { + List newDelayMillis = new ArrayList<>(RabbitMQConstant.DELIVERY_DELAY_MILLIS); // 假设延迟时间在此列表中 + MultiDelayMessage msg = new MultiDelayMessage<>(orderId, newDelayMillis); + int delayValue = msg.removeNextDelay().intValue(); + + rabbitTemplate.convertAndSend(RabbitMQConstant.DELIVERY_DELAY_EXCHANGE, + RabbitMQConstant.DELIVERY_ORDER_ROUTING_KEY, msg, message -> { + message.getMessageProperties().setDelay(delayValue); + return message; + }); + log.info("外卖单延迟消息发送成功,订单ID:{}", orderId); + } + +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/BusinessinfoMapper.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/BusinessinfoMapper.java new file mode 100644 index 0000000..281bc73 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/BusinessinfoMapper.java @@ -0,0 +1,15 @@ +package com.bsz.school_send_back_end.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.bsz.school_send_back_end.model.domain.Businessinfo; + +/** +* @author xy +*/ +public interface BusinessinfoMapper extends BaseMapper { + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandAuthMapper.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandAuthMapper.java new file mode 100644 index 0000000..b90ac3a --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandAuthMapper.java @@ -0,0 +1,15 @@ +package com.bsz.school_send_back_end.mapper; + +import com.bsz.school_send_back_end.model.domain.ErrandAuth; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author xy +*/ +public interface ErrandAuthMapper extends BaseMapper { + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandBillMapper.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandBillMapper.java new file mode 100644 index 0000000..0681113 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandBillMapper.java @@ -0,0 +1,15 @@ +package com.bsz.school_send_back_end.mapper; + +import com.bsz.school_send_back_end.model.domain.ErrandBill; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author xy +*/ +public interface ErrandBillMapper extends BaseMapper { + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandIncomeMapper.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandIncomeMapper.java new file mode 100644 index 0000000..d963a61 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandIncomeMapper.java @@ -0,0 +1,15 @@ +package com.bsz.school_send_back_end.mapper; + +import com.bsz.school_send_back_end.model.domain.ErrandIncome; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author xy +*/ +public interface ErrandIncomeMapper extends BaseMapper { + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandLevelMapper.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandLevelMapper.java new file mode 100644 index 0000000..60860a2 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandLevelMapper.java @@ -0,0 +1,15 @@ +package com.bsz.school_send_back_end.mapper; + +import com.bsz.school_send_back_end.model.domain.ErrandLevel; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author xy +*/ +public interface ErrandLevelMapper extends BaseMapper { + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandMapper.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandMapper.java new file mode 100644 index 0000000..bdf61c0 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandMapper.java @@ -0,0 +1,15 @@ +package com.bsz.school_send_back_end.mapper; + +import com.bsz.school_send_back_end.model.domain.Errand; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author xy +*/ +public interface ErrandMapper extends BaseMapper { + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandOrderMapper.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandOrderMapper.java new file mode 100644 index 0000000..9f15c6f --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/ErrandOrderMapper.java @@ -0,0 +1,15 @@ +package com.bsz.school_send_back_end.mapper; + +import com.bsz.school_send_back_end.model.domain.ErrandOrder; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author xy +*/ +public interface ErrandOrderMapper extends BaseMapper { + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/OrderImageMapper.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/OrderImageMapper.java new file mode 100644 index 0000000..a8cd83e --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/OrderImageMapper.java @@ -0,0 +1,15 @@ +package com.bsz.school_send_back_end.mapper; + +import com.bsz.school_send_back_end.model.domain.OrderImage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author xy +*/ +public interface OrderImageMapper extends BaseMapper { + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/OrderRefundsMapper.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/OrderRefundsMapper.java new file mode 100644 index 0000000..be5006b --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/mapper/OrderRefundsMapper.java @@ -0,0 +1,15 @@ +package com.bsz.school_send_back_end.mapper; + +import com.bsz.school_send_back_end.model.domain.OrderRefunds; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author xy +*/ +public interface OrderRefundsMapper extends BaseMapper { + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/Businessinfo.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/Businessinfo.java new file mode 100644 index 0000000..33c8bbf --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/Businessinfo.java @@ -0,0 +1,41 @@ +package com.bsz.school_send_back_end.model.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + +/** + * 系统信息 + * @TableName businessinfo + */ +@TableName(value ="businessinfo") +@Data +public class Businessinfo implements Serializable { + /** + * id + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 商家id + */ + private Long businessId; + + /** + * 功能内容 + */ + private String content; + + /** + * 创建时间 + */ + private Date createTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/Errand.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/Errand.java new file mode 100644 index 0000000..daa24ff --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/Errand.java @@ -0,0 +1,93 @@ +package com.bsz.school_send_back_end.model.domain; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import lombok.Data; + +/** + * 跑腿 + * @TableName errand + */ +@TableName(value ="errand") +@Data +public class Errand implements Serializable { + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** + * 用户id + */ + private Long userId; + + /** + * 跑腿姓名 + */ + private String errandName; + + /** + * 跑腿姓名 + */ + private String errandAvatarUrl; + + /** + * 性别 + */ + private Integer gender; + + /** + * 手机号 + */ + private String errandPhone; + + /** + * 配送范围 + */ + private String distributionScope; + + /** + * 审核状态 0-未审核 1-审核通过 + */ + private Integer state; + + /** + * 接单量 + */ + private Integer totalOrders; + + /** + * 最大接单量 + */ + private Integer maxOrders; + + /** + * 总金额 + */ + private BigDecimal totalPrice; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 是否删除 + */ + @TableLogic + private Integer isDelete; + + @TableField(exist = false) + @Serial + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandAuth.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandAuth.java new file mode 100644 index 0000000..3ff763f --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandAuth.java @@ -0,0 +1,72 @@ +package com.bsz.school_send_back_end.model.domain; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + +/** + * 跑腿认证 + * @TableName errand_auth + */ +@TableName(value ="errand_auth") +@Data +public class ErrandAuth implements Serializable { + /** + * id + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 跑腿id + */ + private Long errandId; + + /** + * 银行卡号 + */ + private String bankCard; + + /** + * 身份证正面 + */ + private String frontIdCard; + + /** + * 身份证反面 + */ + private String backIdCard; + + /** + * 健康证 + */ + private String healthCertificate; + + /** + * 健康证开始时间 + */ + private Date certificateStartTime; + + /** + * 健康证结束时间 + */ + private Date certificateEndTime; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 逻辑删除 + */ + @TableLogic + private Integer isDelete; + + @TableField(exist = false) + @Serial + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandBill.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandBill.java new file mode 100644 index 0000000..5158714 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandBill.java @@ -0,0 +1,57 @@ +package com.bsz.school_send_back_end.model.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 跑腿账单表 + * @TableName errand_bill + */ +@TableName(value ="errand_bill") +@Data +@Schema(description = "跑腿账单响应体") +public class ErrandBill implements Serializable { + /** + * id + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 订单Id + */ + private Long orderId; + + /** + * 用户手机号 + */ + private String username; + + /** + * 综合评分 + */ + private BigDecimal income; + + /** + * 收入状态:0-待结算 1-已结算 + */ + private Integer errandState; + + /** + * 订单创建时间 + */ + private LocalDateTime orderStartTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandIncome.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandIncome.java new file mode 100644 index 0000000..fe01219 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandIncome.java @@ -0,0 +1,55 @@ +package com.bsz.school_send_back_end.model.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import lombok.Data; + +/** + * 跑腿收入 + * @TableName errand_income + */ +@TableName(value ="errand_income") +@Data +public class ErrandIncome implements Serializable { + /** + * id + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 跑腿id + */ + private Long errandId; + + /** + * 订单id + */ + private Long orderId; + + /** + * 综合评分 + */ + private BigDecimal income; + + /** + * 0未结算 1已结算 2已提现 + */ + private Integer state; + + /** + * 创建时间 + */ + private Date createTime; + + @TableField(exist = false) + @Serial + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandLevel.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandLevel.java new file mode 100644 index 0000000..7f653e9 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandLevel.java @@ -0,0 +1,52 @@ +package com.bsz.school_send_back_end.model.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import lombok.Data; + +/** + * 跑腿等级 + * @TableName errand_level + */ +@TableName(value ="errand_level") +@Data +public class ErrandLevel implements Serializable { + /** + * id + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 跑腿Id + */ + private Long errandId; + + /** + * 综合评分 + */ + private BigDecimal averageScore; + + /** + * 等级 + */ + private Integer level; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandOrder.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandOrder.java new file mode 100644 index 0000000..5599b72 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/ErrandOrder.java @@ -0,0 +1,72 @@ +package com.bsz.school_send_back_end.model.domain; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; +import lombok.Data; + +/** + * 跑腿任务表 + * @TableName errand_order + */ +@TableName(value ="errand_order") +@Data +public class ErrandOrder implements Serializable { + /** + * id + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 订单ID + */ + private Long orderId; + + /** + * 跑腿状态: 0无跑腿 1待抢单 2待取货 3待送达 4已送达 5再次抢单 + */ + private Integer errandState; + + /** + * 送餐开始时间 + */ + @TableField(updateStrategy = FieldStrategy.IGNORED) + private LocalDateTime startTime; + + /** + * 送餐结束时间 + */ + @TableField(updateStrategy = FieldStrategy.IGNORED) + private LocalDateTime endTime; + + /** + * 跑腿员ID + */ + @TableField(updateStrategy = FieldStrategy.IGNORED) + private Long errandId; + + /** + * 任务创建时间 + */ + private Date createTime; + + /** + * 任务更新时间 + */ + private Date updateTime; + + /** + * 是否删除 + */ + @TableLogic + private Integer isDelete; + + @TableField(exist = false) + @Serial + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/OrderImage.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/OrderImage.java new file mode 100644 index 0000000..42aa87c --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/OrderImage.java @@ -0,0 +1,30 @@ +package com.bsz.school_send_back_end.model.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; + +/** + * 外卖图片 + * @TableName order_image + */ +@TableName(value ="order_image") +@Data +public class OrderImage implements Serializable { + /** + * id + */ + @TableId(type = IdType.AUTO) + private Long orderId; + + /** + * 外卖地址 + */ + private String imageAddress; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/OrderRefunds.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/OrderRefunds.java new file mode 100644 index 0000000..c647914 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/domain/OrderRefunds.java @@ -0,0 +1,62 @@ +package com.bsz.school_send_back_end.model.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import lombok.Data; + +/** + * 退款申请表 + * @TableName order_refunds + */ +@TableName(value ="order_refunds") +@Data +public class OrderRefunds implements Serializable { + /** + * 退款申请ID + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 订单号,唯一标识 + */ + private Long orderId; + + /** + * 用户ID + */ + private Long userId; + + /** + * 退款原因 + */ + private String reason; + + /** + * 退款金额 + */ + private BigDecimal amount; + + /** + * 退款状态:0-待审核, 1-已同意, 2-已拒绝 + */ + private Integer status; + + /** + * 申请时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/businessinfo/InfoAddRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/businessinfo/InfoAddRequest.java new file mode 100644 index 0000000..4bb8bf2 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/businessinfo/InfoAddRequest.java @@ -0,0 +1,18 @@ +package com.bsz.school_send_back_end.model.dto.businessinfo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class InfoAddRequest implements Serializable { + + /** + * 功能内容 + */ + private String content; + + @Serial + private static final long serialVersionUID = 8089646587314575974L; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/businessinfo/InfoQueryRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/businessinfo/InfoQueryRequest.java new file mode 100644 index 0000000..5db5992 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/businessinfo/InfoQueryRequest.java @@ -0,0 +1,27 @@ +package com.bsz.school_send_back_end.model.dto.businessinfo; + +import com.bsz.school_send_back_end.model.dto.PageRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = true) +public class InfoQueryRequest extends PageRequest implements Serializable { + + /** + * 商家id + */ + private Long businessId; + + /** + * 创建时间 + */ + private Date createTime; + + @Serial + private static final long serialVersionUID = -1976825924815005032L; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/erradnIncome/ErrandIncomeQueryRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/erradnIncome/ErrandIncomeQueryRequest.java new file mode 100644 index 0000000..cde6ff8 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/erradnIncome/ErrandIncomeQueryRequest.java @@ -0,0 +1,31 @@ +package com.bsz.school_send_back_end.model.dto.erradnIncome; + +import com.bsz.school_send_back_end.model.dto.PageRequest; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class ErrandIncomeQueryRequest extends PageRequest implements Serializable { + + /** + * id + */ + private Long id; + + /** + * 跑腿id + */ + private Long errandId; + + /** + * 订单id + */ + private Long orderId; + + /** + * 0未结算 1已结算 2已提现 + */ + private Integer state; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandAddRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandAddRequest.java new file mode 100644 index 0000000..bcb82b0 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandAddRequest.java @@ -0,0 +1,48 @@ +package com.bsz.school_send_back_end.model.dto.errand; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class ErrandAddRequest implements Serializable { + + /** + * 账号 + */ + private String userAccount; + + /** + * 密码 + */ + private String userPassword; + + /** + * 密码 + */ + private String checkPassword; + + /** + * 跑腿姓名 + */ + private String errandName; + + /** + * 性别 + */ + private Integer gender; + + /** + * 手机号 + */ + private String errandPhone; + + /** + * 配送范围 + */ + private String distributionScope; + + @Serial + private static final long serialVersionUID = 1429991098597318147L; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandQueryRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandQueryRequest.java new file mode 100644 index 0000000..62d26ad --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandQueryRequest.java @@ -0,0 +1,44 @@ +package com.bsz.school_send_back_end.model.dto.errand; + +import com.bsz.school_send_back_end.model.dto.PageRequest; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class ErrandQueryRequest extends PageRequest implements Serializable { + + /** + * id + */ + private Long id; + + /** + * 跑腿姓名 + */ + private String errandName; + + /** + * 性别 + */ + private Integer gender; + + /** + * 手机号 + */ + private String errandPhone; + + /** + * 配送范围 + */ + private String distributionScope; + + /** + * 审核状态 0-未审核 1-审核通过 + */ + private Integer state; + + @Serial + private static final long serialVersionUID = -1612139663948514866L; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandStateRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandStateRequest.java new file mode 100644 index 0000000..5e1e643 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandStateRequest.java @@ -0,0 +1,23 @@ +package com.bsz.school_send_back_end.model.dto.errand; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ErrandStateRequest implements Serializable { + /** + * 订单id + */ + private Long orderId; + + /** + * 需要修改的订单状态 + */ + private Integer errandsState; + + /** + * 外卖图片地址 + */ + private String imageAddress; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandUpdateRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandUpdateRequest.java new file mode 100644 index 0000000..9e9c6a5 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errand/ErrandUpdateRequest.java @@ -0,0 +1,43 @@ +package com.bsz.school_send_back_end.model.dto.errand; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class ErrandUpdateRequest implements Serializable { + + /** + * id + */ + private Long id; + + /** + * 跑腿姓名 + */ + private String errandName; + + /** + * 性别 + */ + private Integer gender; + + /** + * 手机号 + */ + private String errandPhone; + + /** + * 配送范围 + */ + private String distributionScope; + + /** + * 审核状态 0-未审核 1-审核通过 + */ + private Integer state; + + @Serial + private static final long serialVersionUID = -1612139663948514866L; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errandAtuh/ErrandAuthAddRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errandAtuh/ErrandAuthAddRequest.java new file mode 100644 index 0000000..04c61d7 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errandAtuh/ErrandAuthAddRequest.java @@ -0,0 +1,33 @@ +package com.bsz.school_send_back_end.model.dto.errandAtuh; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class ErrandAuthAddRequest implements Serializable { + + /** + * 跑腿id + */ + private Long errandId; + + /** + * 银行卡号 + */ + private String bankCard; + + /** + * 身份证正面 + */ + private String frontIdCard; + + /** + * 身份证反面 + */ + private String backIdCard; + + @Serial + private static final long serialVersionUID = -7134209258589017758L; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errandAtuh/ErrandAuthQueryRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errandAtuh/ErrandAuthQueryRequest.java new file mode 100644 index 0000000..3fe5259 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/errandAtuh/ErrandAuthQueryRequest.java @@ -0,0 +1,35 @@ +package com.bsz.school_send_back_end.model.dto.errandAtuh; + +import com.bsz.school_send_back_end.model.dto.PageRequest; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ErrandAuthQueryRequest extends PageRequest implements Serializable { + + /** + * id + */ + private Long id; + + /** + * 跑腿id + */ + private Long errandId; + + /** + * 银行卡号 + */ + private String bankCard; + + /** + * 身份证正面 + */ + private String frontIdCard; + + /** + * 身份证反面 + */ + private String backIdCard; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/order/OrderUpdateRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/order/OrderUpdateRequest.java new file mode 100644 index 0000000..6166d74 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/order/OrderUpdateRequest.java @@ -0,0 +1,41 @@ +package com.bsz.school_send_back_end.model.dto.order; + +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + +@Data +public class OrderUpdateRequest { + + /** + * id + */ + private Long orderId; + + /** + * 取餐方式(0堂食 1自提 2外卖) + */ + private Integer pickupMethod; + + /** + * 配送地址 + */ + private String location; + + /** + * 取餐开始时间 + */ + private LocalDateTime pickupStartTime; + + /** + * 取餐开始时间 + */ + private LocalDateTime pickupEndTime; + + /** + * 备注 + */ + private String notes; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/order/OrdersCountByErrandRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/order/OrdersCountByErrandRequest.java new file mode 100644 index 0000000..6b4ec76 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/order/OrdersCountByErrandRequest.java @@ -0,0 +1,16 @@ +package com.bsz.school_send_back_end.model.dto.order; + +import lombok.Data; + +@Data +public class OrdersCountByErrandRequest { + /** + * 跑腿id + */ + private Long errandId; + + /** + * 审核状态 0-未审核 1-审核通过 + */ + private Integer state; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/refund/RefundAddRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/refund/RefundAddRequest.java new file mode 100644 index 0000000..fd72794 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/refund/RefundAddRequest.java @@ -0,0 +1,28 @@ +package com.bsz.school_send_back_end.model.dto.refund; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class RefundAddRequest { + /** + * 订单号,唯一标识 + */ + private Long orderId; + + /** + * 退款原因 + */ + private String reason; + + /** + * 退款金额 + */ + private BigDecimal amount; + + /** + * 退款状态:0-待审核, 1-已同意, 2-已拒绝 + */ + private Integer status; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/refund/RefundUpdateRequest.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/refund/RefundUpdateRequest.java new file mode 100644 index 0000000..aa1a96c --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/dto/refund/RefundUpdateRequest.java @@ -0,0 +1,21 @@ +package com.bsz.school_send_back_end.model.dto.refund; + +import lombok.Data; + +@Data +public class RefundUpdateRequest { + /* + 订单id + */ + private Long orderId; + + /* + 需要修改的状态 + */ + private Integer status; + + /* + 拒绝原因 + */ + private String RefuseReason; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/BillVO.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/BillVO.java new file mode 100644 index 0000000..b63d534 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/BillVO.java @@ -0,0 +1,31 @@ +package com.bsz.school_send_back_end.model.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class BillVO { + + /** + * 电话 + */ + private String phone; + + /** + * 开始时间 + */ + private Date startTime; + + /** + * 综合评分 + */ + private BigDecimal income; + + /** + * 0未结算 1已结算 2已提现 + */ + private Integer state; + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/ErrandAuthVO.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/ErrandAuthVO.java new file mode 100644 index 0000000..e0619d7 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/ErrandAuthVO.java @@ -0,0 +1,76 @@ +package com.bsz.school_send_back_end.model.vo; + +import lombok.Data; + +@Data +public class ErrandAuthVO { + /** + * id + */ + private Long id; + + /** + * 用户id + */ + private Long userId; + + /** + * 跑腿姓名 + */ + private String errandName; + + /** + * 跑腿头像 + */ + private String errandAvatarUrl; + + /** + * 性别 + */ + private Integer gender; + + /** + * 手机号 + */ + private String errandPhone; + + /** + * 配送范围 + */ + private String distributionScope; + + /** + * 审核状态 0-未审核 1-审核通过 + */ + private Integer state; + + /** + * 接单量 + */ + private Integer totalOrders; + + /** + * 最大接单量 + */ + private Integer maxOrders; + + /** + * 等级 + */ + private Integer level; + + /** + * 银行卡号 + */ + private String bankCard; + + /** + * 身份证正面 + */ + private String frontIdCard; + + /** + * 身份证反面 + */ + private String backIdCard; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/ErrandVO.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/ErrandVO.java new file mode 100644 index 0000000..a4a2c02 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/ErrandVO.java @@ -0,0 +1,78 @@ +package com.bsz.school_send_back_end.model.vo; + +import lombok.Data; + +@Data +public class ErrandVO { + /** + * id + */ + private Long id; + + /** + * 用户id + */ + private Long userId; + + /** + * 跑腿姓名 + */ + private String errandName; + + /** + * 跑腿头像 + */ + private String errandAvatarUrl; + + /** + * 性别 + */ + private Integer gender; + + /** + * 手机号 + */ + private String errandPhone; + + /** + * 配送范围 + */ + private String distributionScope; + + /** + * 审核状态 0-未审核 1-审核通过 + */ + private Integer state; + + /** + * 接单量 + */ + private Integer totalOrders; + + /** + * 最大接单量 + */ + private Integer maxOrders; + + /** + * 等级 + */ + private Integer level; + + + + /** + * 银行卡号 + */ + private String bankCard; + + /** + * 身份证正面 + */ + private String frontIdCard; + + /** + * 身份证反面 + */ + private String backIdCard; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrderErrandVO.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrderErrandVO.java new file mode 100644 index 0000000..be841fd --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrderErrandVO.java @@ -0,0 +1,36 @@ +package com.bsz.school_send_back_end.model.vo; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; + +import java.util.Date; + +@Data +public class OrderErrandVO { + + /** + * 取餐码 + */ + private String pickupCode; + + /** + * 送达时间 + */ + private Date deliveryTime; + + /** + * 门店名称 + */ + private String businessName; + + /** + * 配送地址 + */ + private String location; + + /** + * 外卖图片 + */ + private String imageAddress; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrderStatusVO.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrderStatusVO.java new file mode 100644 index 0000000..0c3aca4 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrderStatusVO.java @@ -0,0 +1,37 @@ +package com.bsz.school_send_back_end.model.vo; + +import lombok.Data; + +@Data +public class OrderStatusVO { + /** + * 订单Id + */ + private Long id; + + /** + * 订单状态 + */ + private Integer orderState; + + /** + * 跑腿状态 + */ + private Integer errandState; + + /** + * 图片地址 + */ + private String imageAddress; + + /** + * 取餐方式(0堂食 1自提 2外卖) + */ + private Integer pickupMethod; + + /** + * 取餐码 + */ + private String pickupCode; + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrdersExcelByErrandVO.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrdersExcelByErrandVO.java new file mode 100644 index 0000000..6257986 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrdersExcelByErrandVO.java @@ -0,0 +1,80 @@ +package com.bsz.school_send_back_end.model.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.format.NumberFormat; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Objects; + +/** + * Excel订单信息导出 + * + * @author xy + */ +@Data +public class OrdersExcelByErrandVO { + + /** + * 订单编号 + */ + @ColumnWidth(20) + @NumberFormat("#") + @ExcelProperty(value = "订单编号", index = 0) + private Long id; + + /** + * 下单时间 + */ + @ColumnWidth(20) + @ExcelProperty(value = "下单时间", index = 1) + private String createTime; + + /** + * 手机号 + */ + @ColumnWidth(20) + @ExcelProperty(value = "手机号", index = 2) + private String phone; + + /** + * 订单状态 + */ + @ExcelProperty(value = "订单状态", index = 3) + private String state; + + /** + * 跑腿订单状态 + */ + @ExcelProperty(value = "跑腿订单状态", index = 4) + private String errandState; + + /** + * 订单金额 + */ + @NumberFormat("0.00") + @ExcelProperty(value = "跑腿收入", index = 5) + private BigDecimal errandIncome; + + /** + * 解决 EasyExcel "Duplicate key" 问题 + */ + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + OrdersExcelByErrandVO that = (OrdersExcelByErrandVO) o; + return Objects.equals(id, that.id) && + Objects.equals(createTime, that.createTime) && + Objects.equals(phone, that.phone) && + Objects.equals(state, that.state) && + Objects.equals(errandState, that.errandState) && + Objects.equals(errandIncome.stripTrailingZeros(), that.errandIncome.stripTrailingZeros()); + } + + @Override + public int hashCode() { + return Objects.hash(id, createTime, phone, state, errandState, errandIncome.stripTrailingZeros()); + } +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrdersPickVO.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrdersPickVO.java new file mode 100644 index 0000000..89eb416 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/model/vo/OrdersPickVO.java @@ -0,0 +1,27 @@ +package com.bsz.school_send_back_end.model.vo; + +import lombok.Data; + +@Data +public class OrdersPickVO { + + /** + * 日期 + */ + private String date; + + /** + * 外卖单 + */ + private Long takeOutNum; + + /** + * 自提单量 + */ + private Long selfLiftNum; + + /** + * 堂食单量 + */ + private Long eatInNum; +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/CancelOrder.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/CancelOrder.java new file mode 100644 index 0000000..7047dc9 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/CancelOrder.java @@ -0,0 +1,94 @@ +package com.bsz.school_send_back_end.scheduler; + +import com.alipay.api.AlipayApiException; +import com.alipay.api.domain.AlipayTradeRefundModel; +import com.alipay.api.request.AlipayTradeRefundRequest; +import com.alipay.api.response.AlipayTradeRefundResponse; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.config.AlipayClients; +import com.bsz.school_send_back_end.exception.BusinessException; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.Orders; +import com.bsz.school_send_back_end.service.OrdersService; +import com.bsz.school_send_back_end.utils.UniqueNumberGenerator; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +public class CancelOrder { + + @Resource + private OrdersService ordersService; + + @Scheduled(cron = "0 0/30 * * * *") // 每30分钟执行一次 + public void cancelOrder() throws AlipayApiException { + log.info("定时任务开始执行"); + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MINUTE, -30); + Date halfHourAgo = calendar.getTime(); + + // 查询超时订单 + List cancelOrders = ordersService.findCancelOrders(halfHourAgo); + log.info("查询到的超时订单数量:{}", cancelOrders.size()); + + if (CollectionUtils.isEmpty(cancelOrders)) { + log.info("当前没有订单超时"); + return; + } + + // 遍历每个订单进行处理 + for (Orders orders : cancelOrders) { + try { + log.info("正在处理超时订单,订单ID:{}", orders.getId()); + this.closeOrder(orders.getPickupCode()); // 关闭订单或退款 + log.info("订单超时取消成功,订单ID:{}", orders.getId()); + } catch (Exception e) { + log.error("处理订单超时取消失败,订单ID:{}", orders.getId(), e); + } + } + + log.info("所有超时订单处理完成!"); + } + + public void closeOrder(String orderNo) throws AlipayApiException { + + AlipayClients clients = new AlipayClients(); + AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); + AlipayTradeRefundModel model = new AlipayTradeRefundModel(); + + + QueryWrapper ordersQueryWrapper = new QueryWrapper<>(); + ordersQueryWrapper.eq("pickupCode", orderNo); + log.info("orderNo:" + orderNo); + Orders orders = ordersService.getOne(ordersQueryWrapper); + model.setOutTradeNo(orderNo); + model.setRefundAmount(String.valueOf(orders.getTotalPrice())); + ThrowUtils.throwIf(!orders.getState().equals(1) || orders.getState().equals(2),ErrorCode.SYSTEM_ERROR,"当前订单未支付"); + //退款请求单号 要求唯一 需改 + String number = UniqueNumberGenerator.generateNumber(); + model.setOutRequestNo(number); + log.info("outRequestNo:" + number); + request.setBizModel(model); + orders.setState(2); + boolean update = ordersService.updateById(orders); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "修改订单状态失败"); + log.info("orderState:" + orders.getState()); + AlipayTradeRefundResponse response = clients.alipayClient().execute(request); + if (!response.isSuccess()) { + throw new BusinessException(ErrorCode.OPERATION_ERROR, "退款失败"); + } + log.info("退款成功"); + + log.info(response.getBody()); + } +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/UpdateBusinessErrand.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/UpdateBusinessErrand.java new file mode 100644 index 0000000..1871216 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/UpdateBusinessErrand.java @@ -0,0 +1,44 @@ +package com.bsz.school_send_back_end.scheduler; + +import com.bsz.school_send_back_end.model.domain.Business; +import com.bsz.school_send_back_end.model.domain.Errand; +import com.bsz.school_send_back_end.service.BusinessLevelService; +import com.bsz.school_send_back_end.service.BusinessService; +import com.bsz.school_send_back_end.service.ErrandLevelService; +import com.bsz.school_send_back_end.service.ErrandService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; +import java.util.Date; +import java.util.List; + +@Component +@Slf4j +public class UpdateBusinessErrand { + @Resource + private BusinessService businessService; + + @Resource + private BusinessLevelService businessLevelService; + + @Resource + private ErrandService errandService; + + @Resource + private ErrandLevelService errandLevelService; + + @Scheduled(cron = "0 0 0 * * ?") + public void updateBusinessLevels() { + List list = businessService.list(); + for (Business business : list) { + businessLevelService.updateBusinessLevel(business.getId()); + } + List errandList = errandService.list(); + for (Errand errand : errandList) { + errandLevelService.updateErrandLevel(errand.getId()); + } + log.info("更新商家和跑腿时间:" + new Date()); + } +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/UpdateOrder.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/UpdateOrder.java new file mode 100644 index 0000000..3dc8e87 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/scheduler/UpdateOrder.java @@ -0,0 +1,102 @@ +package com.bsz.school_send_back_end.scheduler; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.*; +import com.bsz.school_send_back_end.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; + +@Component +@Slf4j +public class UpdateOrder { + + @Resource + private OrdersService ordersService; + + @Resource + private ErrandIncomeService errandIncomeService; + + @Resource + private ErrandService errandService; + + @Resource + private ErrandBillService billService; + + @Resource + private UserService userService; + + @Scheduled(cron = "0 0 * * * ?") // 1小时执行一次 + public void completeExpiredOrders() { + // 获取当前时间的 24 小时前 + LocalDateTime deadline = LocalDateTime.now().minusHours(24); + + // 查询已出餐且超过 24 小时的订单 + List expiredOrders = ordersService.findExpiredOrders(deadline); + + if (CollectionUtils.isEmpty(expiredOrders)) { + return; + } + + // 订单 ID 列表 + List expiredOrderIds = expiredOrders.stream() + .filter(order -> order.getLocation() != null && !order.getLocation().isEmpty()) + .map(Orders::getId) + .collect(Collectors.toList()); + // **如果存在需要结算的订单** + if (!CollectionUtils.isEmpty(expiredOrderIds)) { + // 查询 `ErrandIncome` 中相关的收入记录 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ErrandIncome::getOrderId, expiredOrderIds); + List errandIncomes = errandIncomeService.list(queryWrapper); + + // 更新收入状态 + errandIncomes.forEach(income -> { + income.setState(1); + Errand errand = errandService.getById(income.getErrandId()); + Orders orders = ordersService.getById(income.getOrderId()); + User user = userService.getById(orders.getUserId()); + if (errand != null) { + BigDecimal totalPrice = errand.getTotalPrice(); + totalPrice = totalPrice.add(income.getIncome()); + errand.setTotalPrice(totalPrice); + + boolean update = errandService.updateById(errand); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "收入加入总金额失败"); + + ErrandBill errandBill = new ErrandBill(); + errandBill.setOrderId(orders.getId()); + errandBill.setErrandState(income.getState()); + errandBill.setIncome(income.getIncome()); + errandBill.setUsername(user.getUsername()); + errandBill.setOrderStartTime(orders.getCreateTime()); + boolean save = billService.save(errandBill); + ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR, "添加跑腿账单失败"); + } + }); // 1 = 已结算 将收入加入总金额 + boolean updatedIncome = errandIncomeService.updateBatchById(errandIncomes); + ThrowUtils.throwIf(!updatedIncome, ErrorCode.OPERATION_ERROR, "修改订单收入状态失败"); + } + + // 更新订单状态 + for (Orders order : expiredOrders) { + order.setState(5); + } + + boolean updated = ordersService.updateBatchById(expiredOrders); + if (updated) { + log.info("成功完成 {} 个超时订单", expiredOrders.size()); + } else { + log.warn("自动完成订单时发生错误"); + } + } +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/BusinessinfoService.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/BusinessinfoService.java new file mode 100644 index 0000000..f1e9a73 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/BusinessinfoService.java @@ -0,0 +1,17 @@ +package com.bsz.school_send_back_end.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsz.school_send_back_end.model.domain.Businessinfo; +import com.bsz.school_send_back_end.model.dto.businessinfo.InfoQueryRequest; + +import java.util.List; + +/** +* @author xy +*/ +public interface BusinessinfoService extends IService { + + QueryWrapper getQueryWrapper (InfoQueryRequest infoQueryRequest); + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandAuthService.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandAuthService.java new file mode 100644 index 0000000..39370ff --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandAuthService.java @@ -0,0 +1,34 @@ +package com.bsz.school_send_back_end.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.bsz.school_send_back_end.model.domain.ErrandAuth; +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsz.school_send_back_end.model.dto.errandAtuh.ErrandAuthQueryRequest; + +/** +* @author xy +*/ +public interface ErrandAuthService extends IService { + + /** + * 校验跑腿认证 + */ + void validErrandAuth (ErrandAuth errandAuth, boolean add); + + /** + * 获取修改对象 + */ + LambdaUpdateWrapper getUpdateWrapper (ErrandAuth errandAuth); + + /** + * 获取查询对象 + */ + QueryWrapper getQueryWrapper (ErrandAuthQueryRequest errandAuthQueryRequest); + + /** + * 根据id获取跑腿认证信息 + */ + ErrandAuth getErrandAuth(Long errandId); + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandBillService.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandBillService.java new file mode 100644 index 0000000..d67edb4 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandBillService.java @@ -0,0 +1,11 @@ +package com.bsz.school_send_back_end.service; + +import com.bsz.school_send_back_end.model.domain.ErrandBill; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author xy +*/ +public interface ErrandBillService extends IService { + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandIncomeService.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandIncomeService.java new file mode 100644 index 0000000..e904fe8 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandIncomeService.java @@ -0,0 +1,28 @@ +package com.bsz.school_send_back_end.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.bsz.school_send_back_end.model.domain.ErrandIncome; +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsz.school_send_back_end.model.domain.Orders; +import com.bsz.school_send_back_end.model.dto.erradnIncome.ErrandIncomeQueryRequest; + +/** +* @author xy +*/ +public interface ErrandIncomeService extends IService { + /** + * 添加跑腿收入 + */ + void addErrandIncome(Orders orders); + + /** + * 分页查询 + */ + QueryWrapper getWrapper(ErrandIncomeQueryRequest queryRequest); + + /** + * 获取当日跑腿定案查询条件 + */ + LambdaQueryWrapper getQueryWrapper (Long errandId); +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandLevelService.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandLevelService.java new file mode 100644 index 0000000..802c069 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandLevelService.java @@ -0,0 +1,15 @@ +package com.bsz.school_send_back_end.service; + +import com.bsz.school_send_back_end.model.domain.ErrandLevel; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author xy +*/ +public interface ErrandLevelService extends IService { + + /** + * 更新跑腿等级 + */ + void updateErrandLevel(Long errandId); +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandOrderService.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandOrderService.java new file mode 100644 index 0000000..3289437 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandOrderService.java @@ -0,0 +1,11 @@ +package com.bsz.school_send_back_end.service; + +import com.bsz.school_send_back_end.model.domain.ErrandOrder; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author xy +*/ +public interface ErrandOrderService extends IService { + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandService.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandService.java new file mode 100644 index 0000000..ceb2606 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/ErrandService.java @@ -0,0 +1,68 @@ +package com.bsz.school_send_back_end.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.bsz.school_send_back_end.model.domain.Errand; +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsz.school_send_back_end.model.domain.ErrandIncome; +import com.bsz.school_send_back_end.model.domain.Orders; +import com.bsz.school_send_back_end.model.domain.User; +import com.bsz.school_send_back_end.model.dto.CommonRequest; +import com.bsz.school_send_back_end.model.dto.errand.ErrandQueryRequest; +import com.bsz.school_send_back_end.model.dto.errand.ErrandStateRequest; +import com.bsz.school_send_back_end.model.dto.errand.ErrandUpdateRequest; +import com.bsz.school_send_back_end.model.vo.ErrandVO; + +import jakarta.servlet.http.HttpServletRequest; + +/** +* @author xy +*/ +public interface ErrandService extends IService { + /** + * 校验跑腿 + */ + void validErrand (Errand errand, boolean add); + + /** + * 添加跑腿 + */ + void addErrand (User user, Errand errand); + + /** + * 删除跑腿 + */ + void deleteErrand (HttpServletRequest request); + + /** + * 获取当前登录跑腿 + */ + Errand getLoginErrand(HttpServletRequest request); + + /** + * 获取查询对象 + */ + QueryWrapper getQueryWrapper(ErrandQueryRequest queryRequest); + + /** + * 修改订单状态 + */ + void orderToErrand (ErrandStateRequest errandStateRequest, HttpServletRequest request); + + /** + * 修改跑腿 + */ + Boolean updateErrand (ErrandUpdateRequest updateRequest); + + /** + * 修改跑腿接单量 + */ + void updateTotal (Errand errand, boolean add); + + /** + * 获取跑腿视图 + */ + ErrandVO getErrandVO(Errand errand); + + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/LoggingService.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/LoggingService.java new file mode 100644 index 0000000..5cc766b --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/LoggingService.java @@ -0,0 +1,18 @@ +package com.bsz.school_send_back_end.service; + +import org.springframework.ai.chat.client.AdvisedRequest; +import org.springframework.ai.chat.client.RequestResponseAdvisor; + +import java.util.Map; + +/** + * @author xy + */ +public class LoggingService implements RequestResponseAdvisor { + + @Override + public AdvisedRequest adviseRequest(AdvisedRequest request, Map context) { + System.out.println("Request"+request); + return request; + } +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/OrderImageService.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/OrderImageService.java new file mode 100644 index 0000000..24a5c95 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/OrderImageService.java @@ -0,0 +1,11 @@ +package com.bsz.school_send_back_end.service; + +import com.bsz.school_send_back_end.model.domain.OrderImage; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author xy +*/ +public interface OrderImageService extends IService { + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/OrderRefundsService.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/OrderRefundsService.java new file mode 100644 index 0000000..f89969f --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/OrderRefundsService.java @@ -0,0 +1,11 @@ +package com.bsz.school_send_back_end.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsz.school_send_back_end.model.domain.OrderRefunds; + +/** +* @author xy +*/ +public interface OrderRefundsService extends IService { + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/BusinessinfoServiceImpl.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/BusinessinfoServiceImpl.java new file mode 100644 index 0000000..64a46aa --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/BusinessinfoServiceImpl.java @@ -0,0 +1,41 @@ +package com.bsz.school_send_back_end.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsz.school_send_back_end.contant.CommonConstant; +import com.bsz.school_send_back_end.mapper.BusinessinfoMapper; +import com.bsz.school_send_back_end.model.domain.Businessinfo; +import com.bsz.school_send_back_end.model.dto.businessinfo.InfoQueryRequest; +import com.bsz.school_send_back_end.service.BusinessinfoService; +import com.bsz.school_send_back_end.utils.SqlUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +/** +* @author xy +*/ +@Service +public class BusinessinfoServiceImpl extends ServiceImpl + implements BusinessinfoService { + + @Override + public QueryWrapper getQueryWrapper(InfoQueryRequest infoQueryRequest) { + Long businessId = infoQueryRequest.getBusinessId(); + Date createTime = infoQueryRequest.getCreateTime(); + String sortField = infoQueryRequest.getSortField(); + String sortOrder = infoQueryRequest.getSortOrder(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(ObjectUtils.isNotEmpty(businessId), "businessId", businessId); + queryWrapper.le(ObjectUtils.isNotEmpty(createTime), "createTime", createTime); + queryWrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC ), sortField); + return queryWrapper; + } +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandAuthServiceImpl.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandAuthServiceImpl.java new file mode 100644 index 0000000..bb23914 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandAuthServiceImpl.java @@ -0,0 +1,88 @@ +package com.bsz.school_send_back_end.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.contant.CommonConstant; +import com.bsz.school_send_back_end.exception.BusinessException; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.ErrandAuth; +import com.bsz.school_send_back_end.model.dto.errandAtuh.ErrandAuthQueryRequest; +import com.bsz.school_send_back_end.service.ErrandAuthService; +import com.bsz.school_send_back_end.mapper.ErrandAuthMapper; +import com.bsz.school_send_back_end.utils.SqlUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +/** +* @author xy +*/ +@Service +public class ErrandAuthServiceImpl extends ServiceImpl + implements ErrandAuthService{ + + @Override + public void validErrandAuth(ErrandAuth errandAuth, boolean add) { + Long errandId = errandAuth.getErrandId(); + String bankCard = errandAuth.getBankCard(); + String frontIdCard = errandAuth.getFrontIdCard(); + String backIdCard = errandAuth.getBackIdCard(); + if (add) { + if (StringUtils.isAnyBlank(backIdCard,frontIdCard,bankCard)) { + throw new BusinessException(ErrorCode.PARAMS_ERROR, "信息不全"); + } + } + else { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ErrandAuth::getErrandId, errandId); + long count = this.count(queryWrapper); + ThrowUtils.throwIf(count == 0, ErrorCode.PARAMS_ERROR, "该用户未关联跑腿"); + } + } + + @Override + public LambdaUpdateWrapper getUpdateWrapper(ErrandAuth errandAuth) { + Long errandId = errandAuth.getErrandId(); + String bankCard = errandAuth.getBankCard(); + String backIdCard = errandAuth.getBackIdCard(); + String frontIdCard = errandAuth.getFrontIdCard(); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(StringUtils.isNotBlank(bankCard), ErrandAuth::getBankCard, bankCard); + updateWrapper.set(StringUtils.isNotBlank(backIdCard), ErrandAuth::getBackIdCard, backIdCard); + updateWrapper.set(StringUtils.isNotBlank(frontIdCard), ErrandAuth::getFrontIdCard, frontIdCard); + updateWrapper.eq(ErrandAuth::getErrandId, errandId); + return updateWrapper; + } + + @Override + public QueryWrapper getQueryWrapper(ErrandAuthQueryRequest errandAuthQueryRequest) { + Long id = errandAuthQueryRequest.getId(); + Long errandId = errandAuthQueryRequest.getErrandId(); + String sortField = errandAuthQueryRequest.getSortField(); + String sortOrder = errandAuthQueryRequest.getSortOrder(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(ObjectUtils.isNotEmpty(id), "id", id); + wrapper.eq(ObjectUtils.isNotEmpty(errandId), "errandId", errandId); + wrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC), + sortField); + + return wrapper; + } + + @Override + public ErrandAuth getErrandAuth(Long errandId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ErrandAuth::getErrandId, errandId); + ErrandAuth errandAuth = this.getOne(queryWrapper); + ThrowUtils.throwIf(errandAuth == null, ErrorCode.PARAMS_ERROR, "当前跑腿id没有认证"); + + return errandAuth; + } +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandBillServiceImpl.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandBillServiceImpl.java new file mode 100644 index 0000000..82c6e98 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandBillServiceImpl.java @@ -0,0 +1,20 @@ +package com.bsz.school_send_back_end.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsz.school_send_back_end.model.domain.ErrandBill; +import com.bsz.school_send_back_end.service.ErrandBillService; +import com.bsz.school_send_back_end.mapper.ErrandBillMapper; +import org.springframework.stereotype.Service; + +/** +* @author xy +*/ +@Service +public class ErrandBillServiceImpl extends ServiceImpl + implements ErrandBillService{ + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandIncomeServiceImpl.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandIncomeServiceImpl.java new file mode 100644 index 0000000..4681f90 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandIncomeServiceImpl.java @@ -0,0 +1,88 @@ +package com.bsz.school_send_back_end.service.impl; + + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.contant.CommonConstant; +import com.bsz.school_send_back_end.contant.UserConstant; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.ErrandIncome; +import com.bsz.school_send_back_end.model.domain.Orders; +import com.bsz.school_send_back_end.model.dto.erradnIncome.ErrandIncomeQueryRequest; +import com.bsz.school_send_back_end.service.ErrandIncomeService; +import com.bsz.school_send_back_end.mapper.ErrandIncomeMapper; +import com.bsz.school_send_back_end.utils.SqlUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; + +/** +* @author xy +*/ +@Service +public class ErrandIncomeServiceImpl extends ServiceImpl + implements ErrandIncomeService{ + + @Override + @Transactional(rollbackFor = Exception.class) + public void addErrandIncome(Orders orders) { + String location = orders.getLocation(); + Long errandId = orders.getErrandId(); + Long ordersId = orders.getId(); + ErrandIncome errandIncome = new ErrandIncome(); + errandIncome.setErrandId(errandId); + errandIncome.setOrderId(ordersId); + errandIncome.setIncome(UserConstant.DELIVERY_FEE_MAP.get(location)); + boolean save = this.save(errandIncome); + ThrowUtils.throwIf(!save, ErrorCode.OPERATION_ERROR, "添加配送费失败"); + } + + + @Override + public QueryWrapper getWrapper(ErrandIncomeQueryRequest queryRequest) { + Long id = queryRequest.getId(); + Long orderId = queryRequest.getOrderId(); + Long errandId = queryRequest.getErrandId(); + Integer state = queryRequest.getState(); + String sortField = queryRequest.getSortField(); + String sortOrder = queryRequest.getSortOrder(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(ObjectUtils.isNotEmpty(id),"id", id); + wrapper.eq(ObjectUtils.isNotEmpty(orderId), "orderId", orderId); + wrapper.eq(ObjectUtils.isNotEmpty(errandId), "errandId",errandId); + wrapper.eq(ObjectUtils.isNotEmpty(state), "state", state); + wrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC), + sortField); + + return wrapper; + } + + @Override + public LambdaQueryWrapper getQueryWrapper(Long errandId) { + + // 获取当前日期的开始和结束时间 + LocalDateTime startOfDay = LocalDate.now().atStartOfDay(); + LocalDateTime endOfDay = LocalDate.now().atTime(23, 59, 59, 999999999); + + // 转换为 Date 对象 + Date startDate = Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()); + Date endDate = Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant()); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ErrandIncome::getErrandId, errandId); + queryWrapper.ge(ErrandIncome::getCreateTime, startDate); // 大于等于当天的 00:00:00 + queryWrapper.le(ErrandIncome::getCreateTime, endDate); // 小于等于当天的 23:59:59 + return queryWrapper; + } +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandLevelServiceImpl.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandLevelServiceImpl.java new file mode 100644 index 0000000..6ce80ca --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandLevelServiceImpl.java @@ -0,0 +1,72 @@ +package com.bsz.school_send_back_end.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsz.school_send_back_end.contant.UserConstant; +import com.bsz.school_send_back_end.mapper.UserRatingMapper; +import com.bsz.school_send_back_end.model.domain.ErrandLevel; +import com.bsz.school_send_back_end.service.ErrandLevelService; +import com.bsz.school_send_back_end.mapper.ErrandLevelMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.math.BigDecimal; + +/** +* @author xy +*/ +@Service +@Slf4j +public class ErrandLevelServiceImpl extends ServiceImpl + implements ErrandLevelService{ + + @Resource + private ErrandLevelMapper errandLevelMapper; + + @Resource + private UserRatingMapper userRatingMapper; + + @Override + public void updateErrandLevel(Long errandId) { + Double avg = userRatingMapper.findAvgByRatedEntityId(errandId); + if (avg == null) { + avg = UserConstant.DEFAULT_AVG_SCORE; + log.info("warn: avg没有值,将赋初始值1:" + avg); + log.info("当前跑腿id:" + errandId); + } + int level = calculateLevel(avg); + ErrandLevel errandLevel = errandLevelMapper.selectOne(Wrappers.lambdaQuery() + .eq(ErrandLevel::getErrandId, errandId)); + + if (errandLevel == null) { + errandLevel = new ErrandLevel(); + errandLevel.setErrandId(errandId); + errandLevel.setLevel(UserConstant.DEFAULT_LEVEL); + errandLevel.setAverageScore(BigDecimal.valueOf(1)); + + } + errandLevel.setAverageScore(BigDecimal.valueOf(avg)); + errandLevel.setLevel(level); + + this.saveOrUpdate(errandLevel); + } + + private int calculateLevel(Double averageScore) { + if (averageScore >= 4.5) { + return 5; + } else if (averageScore >= 4.0) { + return 4; + } else if (averageScore >= 3.0) { + return 3; + } else if (averageScore >= 2.0) { + return 2; + } else { + return 1; + } + } +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandOrderServiceImpl.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandOrderServiceImpl.java new file mode 100644 index 0000000..9e18205 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandOrderServiceImpl.java @@ -0,0 +1,20 @@ +package com.bsz.school_send_back_end.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsz.school_send_back_end.model.domain.ErrandOrder; +import com.bsz.school_send_back_end.service.ErrandOrderService; +import com.bsz.school_send_back_end.mapper.ErrandOrderMapper; +import org.springframework.stereotype.Service; + +/** +* @author xy +*/ +@Service +public class ErrandOrderServiceImpl extends ServiceImpl + implements ErrandOrderService{ + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandServiceImpl.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandServiceImpl.java new file mode 100644 index 0000000..0811e15 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/ErrandServiceImpl.java @@ -0,0 +1,279 @@ +package com.bsz.school_send_back_end.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsz.school_send_back_end.common.ErrorCode; +import com.bsz.school_send_back_end.contant.CommonConstant; +import com.bsz.school_send_back_end.exception.BusinessException; +import com.bsz.school_send_back_end.exception.ThrowUtils; +import com.bsz.school_send_back_end.model.domain.*; +import com.bsz.school_send_back_end.model.dto.errand.ErrandQueryRequest; +import com.bsz.school_send_back_end.model.dto.errand.ErrandStateRequest; +import com.bsz.school_send_back_end.model.dto.errand.ErrandUpdateRequest; +import com.bsz.school_send_back_end.model.vo.ErrandVO; +import com.bsz.school_send_back_end.service.*; +import com.bsz.school_send_back_end.mapper.ErrandMapper; +import com.bsz.school_send_back_end.utils.RegexUtils; +import com.bsz.school_send_back_end.utils.SqlUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import java.util.Objects; + +/** +* @author xy +*/ +@Service +@Slf4j +public class ErrandServiceImpl extends ServiceImpl + implements ErrandService{ + + @Resource + private UserService userService; + + @Resource + private ErrandAuthService errandAuthService; + + @Resource + private OrdersService ordersService; + + @Resource + private ErrandIncomeService errandIncomeService; + + @Resource + private WebsocketService websocketService; + + @Resource + private ErrandLevelService errandLevelService; + + @Resource + private ErrandOrderService errandOrderService; + + @Resource + private OrderImageService orderImageService; + + @Override + public void validErrand(Errand errand, boolean add) { + String errandName = errand.getErrandName(); + Integer gender = errand.getGender(); + String distributionScope = errand.getDistributionScope(); + Long userId = errand.getUserId(); + String phone = errand.getErrandPhone(); + if (add) { + if (StringUtils.isAnyBlank(errandName, phone) || ObjectUtils.isEmpty(gender) || ObjectUtils.isEmpty(distributionScope)) { + throw new BusinessException(ErrorCode.PARAMS_ERROR, "信息不全"); + } + } + //校验手机号 + if (StringUtils.isNotBlank(phone)) { + boolean phoneInvalid = RegexUtils.isPhoneInvalid(phone); + ThrowUtils.throwIf(phoneInvalid, ErrorCode.PARAMS_ERROR, "手机格式不正确"); + } + //校验跑腿名 + if (StringUtils.isNotBlank(errandName)) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Errand::getUserId, userId); + long count = this.count(queryWrapper); + ThrowUtils.throwIf(count > 0, ErrorCode.PARAMS_ERROR, "跑腿名字重复"); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public synchronized void addErrand(User user, Errand errand) { + boolean save = userService.save(user); + ThrowUtils.throwIf(!save, ErrorCode.SYSTEM_ERROR,"用户添加失败"); + errand.setUserId(user.getId()); + boolean save1 = this.save(errand); + ThrowUtils.throwIf(!save1, ErrorCode.SYSTEM_ERROR,"跑腿添加失败"); + + errandLevelService.updateErrandLevel(errand.getId()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public synchronized void deleteErrand(HttpServletRequest request) { + User loginUser = userService.getLoginUser(request); + Long userId = loginUser.getId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Errand::getUserId, userId); + Errand errand = this.getOne(queryWrapper); + ThrowUtils.throwIf(errand == null, ErrorCode.NOT_FOUND_ERROR, "该用户没有关联跑腿"); + Long errandId = errand.getId(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ErrandAuth::getErrandId, errandId); + ErrandAuth errandAuth = errandAuthService.getOne(wrapper); + if (errandAuth != null){ + boolean remove2 = errandAuthService.removeById(errandAuth.getId()); + ThrowUtils.throwIf(!remove2, ErrorCode.SYSTEM_ERROR, "删除跑腿认证失败"); + } + boolean remove = userService.removeById(userId); + boolean remove1 = this.removeById(errandId); + ThrowUtils.throwIf(!remove || !remove1, ErrorCode.SYSTEM_ERROR, "删除用户或跑腿失败"); + } + + @Override + public Errand getLoginErrand(HttpServletRequest request) { + User loginUser = userService.getLoginUser(request); + Long userId = loginUser.getId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Errand::getUserId, userId); + Errand errand = this.getOne(queryWrapper); + ThrowUtils.throwIf(errand == null, ErrorCode.NOT_FOUND_ERROR, "当前用户没有关联跑腿"); + + return errand; + } + + @Override + public QueryWrapper getQueryWrapper(ErrandQueryRequest queryRequest) { + Long id = queryRequest.getId(); + String errandName = queryRequest.getErrandName(); + Integer gender = queryRequest.getGender(); + String errandPhone = queryRequest.getErrandPhone(); + String distributionScope = queryRequest.getDistributionScope(); + Integer state = queryRequest.getState(); + String sortOrder = queryRequest.getSortOrder(); + String sortField = queryRequest.getSortField(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(ObjectUtils.isNotEmpty(id),"id", id); + queryWrapper.eq(StringUtils.isNotBlank(errandName), "errandName",errandName); + queryWrapper.eq(ObjectUtils.isNotEmpty(gender), "gender", gender); + queryWrapper.eq(StringUtils.isNotBlank(errandPhone), "errandPhone", errandPhone); + queryWrapper.eq(StringUtils.isNotBlank(distributionScope), "distributionScope", distributionScope); + queryWrapper.eq(ObjectUtils.isNotEmpty(state), "state", state); + queryWrapper.orderBy(SqlUtils.validSortField(sortField),sortOrder.equals(CommonConstant.SORT_ORDER_ASC), + sortField); + + return queryWrapper; + } + + @Override + public void orderToErrand(ErrandStateRequest errandStateRequest, HttpServletRequest request) { + Long ordersId = errandStateRequest.getOrderId(); + Integer errandsState = errandStateRequest.getErrandsState(); + String imageAddress = errandStateRequest.getImageAddress(); + Errand loginErrand = this.getLoginErrand(request); + Long loginErrandId = loginErrand.getId(); + Orders orders = ordersService.getOrderWithPessimisticLock(ordersId); + ThrowUtils.throwIf(orders == null, ErrorCode.PARAMS_ERROR, "订单不存在"); + Long errandId = orders.getErrandId(); + ThrowUtils.throwIf(!Objects.equals(loginErrandId, errandId), ErrorCode.PARAMS_ERROR, "当前订单不属于该跑腿"); + + ErrandOrder errandOrder = errandOrderService.getOne(Wrappers.lambdaQuery() + .eq(ErrandOrder::getOrderId, ordersId)); + + if (errandsState == 5) { + orders.setErrandId(null); + errandOrder.setErrandState(errandsState);//再次抢单 + errandOrder.setErrandId(null); + boolean update = ordersService.updateById(orders); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "取消订单失败"); + log.info("跑腿取消接单,订单ID: {}", ordersId); + websocketService.sendOrderToErrand(orders); + }else if (errandsState == 3) { + ThrowUtils.throwIf(orders.getState() != 4, ErrorCode.OPERATION_ERROR, "当前商家未出餐"); //商家未出餐,不允许取货 + errandOrder.setErrandState(errandsState);// 已取餐 + boolean update = ordersService.updateById(orders); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "取餐失败"); + log.info("订单已取餐,订单id:" + ordersId); + } else if (errandsState == 4) { + ThrowUtils.throwIf(errandOrder.getErrandState() != 3, ErrorCode.OPERATION_ERROR, "商家未取货"); + errandOrder.setErrandState(errandsState);// 订单已送达 + boolean update = ordersService.updateById(orders); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "订单送达失败"); + + if (imageAddress == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR, "请先上传图片"); + } + OrderImage orderImage = new OrderImage(); + orderImage.setOrderId(ordersId); + orderImage.setImageAddress(imageAddress); + orderImageService.save(orderImage); + log.info("订单已送达,订单id:" + ordersId); + errandIncomeService.addErrandIncome(orders); + this.updateTotal(loginErrand, false); + } + + boolean update = errandOrderService.updateById(errandOrder); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "更新跑腿关联失败"); + } + + @Override + public Boolean updateErrand(ErrandUpdateRequest updateRequest) { + Long id = updateRequest.getId(); + String errandName = updateRequest.getErrandName(); + String errandPhone = updateRequest.getErrandPhone(); + String distributionScope = updateRequest.getDistributionScope(); + Integer gender = updateRequest.getGender(); + Integer state = updateRequest.getState(); + + Errand errand = this.getOne(Wrappers.lambdaQuery().eq(Errand::getId, id)); + ThrowUtils.throwIf(errand == null, ErrorCode.PARAMS_ERROR, "当前跑腿id不正确"); + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Errand::getId, id); + updateWrapper.set(StringUtils.isNotBlank(errandName), Errand::getErrandName, errandName); + updateWrapper.set(StringUtils.isNotBlank(errandPhone), Errand::getErrandPhone, errandPhone); + updateWrapper.set(StringUtils.isNotBlank(distributionScope), Errand::getDistributionScope, distributionScope); + updateWrapper.set(ObjectUtils.isNotEmpty(gender), Errand::getGender, gender); + updateWrapper.set(ObjectUtils.isNotEmpty(state), Errand::getState, state); + boolean update = this.update(updateWrapper); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "更新跑腿失败"); + + Long userId = errand.getUserId(); + User user = userService.getById(userId); + if (StringUtils.isNotBlank(errand.getErrandPhone())) { + user.setPhone(errand.getErrandPhone()); + } + if ((StringUtils.isNotBlank(errand.getErrandName()))) { + user.setUsername(errand.getErrandName()); + } + + return true; + } + + @Override + public void updateTotal(Errand errand, boolean add) { + Integer totalOrders = errand.getTotalOrders(); + Integer maxOrders = errand.getMaxOrders(); + + if (add) { + if (totalOrders >= maxOrders) { + throw new BusinessException(ErrorCode.FORBIDDEN_ERROR, "跑腿员已达到最大接单量,无法接单"); + } + errand.setTotalOrders(totalOrders + 1); + } else { + errand.setTotalOrders(totalOrders - 1); + } + boolean update = this.updateById(errand); + ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR, "更新跑腿订单量失败"); + } + + @Override + public ErrandVO getErrandVO(Errand errand) { + + if (errand == null) { + return null; + } + ErrandVO errandVO = new ErrandVO(); + BeanUtils.copyProperties(errand, errandVO); + ErrandLevel level = errandLevelService.getOne(Wrappers.lambdaQuery() + .eq(ErrandLevel::getErrandId, errand.getId())); + errandVO.setLevel(level.getLevel()); + + return errandVO; + } +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/OrderImageServiceImpl.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/OrderImageServiceImpl.java new file mode 100644 index 0000000..bd3fb47 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/OrderImageServiceImpl.java @@ -0,0 +1,20 @@ +package com.bsz.school_send_back_end.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsz.school_send_back_end.model.domain.OrderImage; +import com.bsz.school_send_back_end.service.OrderImageService; +import com.bsz.school_send_back_end.mapper.OrderImageMapper; +import org.springframework.stereotype.Service; + +/** +* @author xy +*/ +@Service +public class OrderImageServiceImpl extends ServiceImpl + implements OrderImageService{ + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/OrderRefundsServiceImpl.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/OrderRefundsServiceImpl.java new file mode 100644 index 0000000..f5d4214 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/service/impl/OrderRefundsServiceImpl.java @@ -0,0 +1,20 @@ +package com.bsz.school_send_back_end.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsz.school_send_back_end.mapper.OrderRefundsMapper; +import com.bsz.school_send_back_end.model.domain.OrderRefunds; +import com.bsz.school_send_back_end.service.OrderRefundsService; +import org.springframework.stereotype.Service; + +/** +* @author xy +*/ +@Service +public class OrderRefundsServiceImpl extends ServiceImpl + implements OrderRefundsService{ + +} + + + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/utils/AliyunSmsUtils.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/utils/AliyunSmsUtils.java new file mode 100644 index 0000000..e41d8bf --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/utils/AliyunSmsUtils.java @@ -0,0 +1,55 @@ +package com.bsz.school_send_back_end.utils; + +import com.alibaba.fastjson.JSON; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.profile.DefaultProfile; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.HashMap; + +@Component +@Slf4j +public class AliyunSmsUtils { + + @Value("${aliyun.sms.sms-access-key-id}") + private String accessKeyId; + + @Value("${aliyun.sms.sms-access-key-secret}") + private String accessKeySecret; + + @Value("${aliyun.sms.sms-sign-nam}") + private String signName; + + @Value("${aliyun.sms.sms-template-cod}") + private String templateCode; + + @Value("${aliyun.sms.sms-endpoint}") + private String endpoint; + + public boolean sendSms(String phoneNumber, HashMap templateParams) { + try { + DefaultProfile profile = DefaultProfile.getProfile("cn-huhehaote", accessKeyId, accessKeySecret); + DefaultAcsClient client = new DefaultAcsClient(profile); + + SendSmsRequest sendSmsRequest = new SendSmsRequest(); + sendSmsRequest.setPhoneNumbers(phoneNumber); + sendSmsRequest.setSignName(signName); + sendSmsRequest.setTemplateCode(templateCode); + sendSmsRequest.setTemplateParam(JSON.toJSONString(templateParams)); + + SendSmsResponse sendSmsResponse = client.getAcsResponse(sendSmsRequest); + log.info("短信响应: Code={}, Message={}", sendSmsResponse.getCode(), sendSmsResponse.getMessage()); + + return "OK".equalsIgnoreCase(sendSmsResponse.getCode()); + } catch (ClientException e) { + log.error("短信发送异常: {}", e.getErrMsg()); + return false; + } + } + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/utils/MultiDelayMessage.java b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/utils/MultiDelayMessage.java new file mode 100644 index 0000000..37ed5a3 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/java/com/bsz/school_send_back_end/utils/MultiDelayMessage.java @@ -0,0 +1,59 @@ +package com.bsz.school_send_back_end.utils; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Data +@NoArgsConstructor +public class MultiDelayMessage implements Serializable { + + /** + * 消息体 + */ + private T data; + + + /** + * 记录延时时间的集合 + */ + private List delayMillis; + + public MultiDelayMessage(T data, List delayMillis) { + this.data = data; + this.delayMillis = delayMillis; + } + + public MultiDelayMessage(T data, Long...delayMillis) { + this.data = data; + this.delayMillis = new ArrayList<>(Arrays.asList(delayMillis)); + } + + /** + * 获取并移除下一个延迟时间 + * @return 集合中第一个延迟时间 + */ + public Long removeNextDelay() { + return delayMillis.remove(0); + } + + + /** + * 是否有下一个延迟时间 + */ + public boolean hasNextDelay() { + return !delayMillis.isEmpty(); + } + + + + @Serial + private static final long serialVersionUID = 1L; + + +} diff --git a/school_lend_back_end/school_lend_back_end/src/main/resources/cert/ssl/xiaokuaisong.shop.jks b/school_lend_back_end/school_lend_back_end/src/main/resources/cert/ssl/xiaokuaisong.shop.jks new file mode 100644 index 0000000000000000000000000000000000000000..47d2277624639228921e575cccf4d96458e6e89d GIT binary patch literal 5714 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 cc + + + + + + + + + + + + id,businessId,content, + createTime + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandAuthMapper.xml b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandAuthMapper.xml new file mode 100644 index 0000000..54530f7 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandAuthMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + id,errandId,bankCard, + frontIdCard,backIdCard,healthCertificate, + certificateStartTime,certificateEndTime,createTime,isDelete + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandBillMapper.xml b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandBillMapper.xml new file mode 100644 index 0000000..270968a --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandBillMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + id,orderId,username, + income,errandState,orderStartTime + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandIncomeMapper.xml b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandIncomeMapper.xml new file mode 100644 index 0000000..8f762d9 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandIncomeMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + id,errandId,orderId, + income,state,createTime + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandLevelMapper.xml b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandLevelMapper.xml new file mode 100644 index 0000000..2e7dba6 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandLevelMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + id,errandId, + averageScore,level,createTime, + updateTime + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandMapper.xml b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandMapper.xml new file mode 100644 index 0000000..fa19362 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + id,userId,errandName,errandAvatarUrl, + gender,errandPhone,distributionScope, + state,totalOrders,maxOrders,totalPrice, + createTime,updateTime,isDelete + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandOrderMapper.xml b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandOrderMapper.xml new file mode 100644 index 0000000..2b62ec9 --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/ErrandOrderMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + id,orderId,errandState, + startTime,endTime,errandId, + createTime,updateTime,isDelete + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/OrderImageMapper.xml b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/OrderImageMapper.xml new file mode 100644 index 0000000..83e8c2f --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/OrderImageMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + orderId,imageAddress + + diff --git a/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/OrderRefundsMapper.xml b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/OrderRefundsMapper.xml new file mode 100644 index 0000000..d8f24bf --- /dev/null +++ b/school_lend_back_end/school_lend_back_end/src/main/resources/mapper/OrderRefundsMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + id,orderId,userId, + reason,amount,status, + createTime,updateTime + +