Browse Source

Initial commit

woody 1 year ago
commit
e23d3f56a0

+ 48 - 0
.gitignore

@@ -0,0 +1,48 @@
+# Compiled class file
+*.class
+*.classpath
+*.factorypath
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# IDE Files #
+*.iml
+.idea
+.idea/
+.project
+.settings
+target
+.DS_Store
+
+# temp ignore
+*.cache
+*.diff
+*.patch
+*.tmp
+
+# Maven ignore
+.flattened-pom.xml
+
+# Commitizen
+CHANGELOG.md
+node_modules/
+package-lock.json
+package.json

+ 1 - 0
lombok.config

@@ -0,0 +1 @@
+lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier

+ 59 - 0
pom.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>com.chelvc.framework</groupId>
+        <artifactId>framework-cloud</artifactId>
+        <version>1.0.0-RELEASE</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>com.chelvc.cloud</groupId>
+    <artifactId>maintain</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+
+    <properties>
+        <uc-api.version>1.0.0-SNAPSHOT</uc-api.version>
+        <trade-api.version>1.0.0-SNAPSHOT</trade-api.version>
+        <vehicle-api.version>1.0.0-SNAPSHOT</vehicle-api.version>
+        <framework-redis.version>1.0.0-RELEASE</framework-redis.version>
+        <framework-security.version>1.0.0-RELEASE</framework-security.version>
+        <framework-database.version>1.0.0-RELEASE</framework-database.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.chelvc.cloud</groupId>
+            <artifactId>uc-api</artifactId>
+            <version>${uc-api.version}</version>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.chelvc.cloud</groupId>
+            <artifactId>trade-api</artifactId>
+            <version>${trade-api.version}</version>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.chelvc.cloud</groupId>
+            <artifactId>vehicle-api</artifactId>
+            <version>${vehicle-api.version}</version>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.chelvc.framework</groupId>
+            <artifactId>framework-redis</artifactId>
+            <version>${framework-redis.version}</version>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.chelvc.framework</groupId>
+            <artifactId>framework-security</artifactId>
+            <version>${framework-security.version}</version>
+            <optional>true</optional>
+        </dependency>
+    </dependencies>
+</project>

+ 17 - 0
src/main/java/com/chelvc/cloud/maintain/MaintainServer.java

@@ -0,0 +1,17 @@
+package com.chelvc.cloud.maintain;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * 车辆服务启动类
+ *
+ * @author 七仔
+ * @date 2023/4/4
+ */
+@SpringBootApplication(scanBasePackages = "com.chelvc")
+public class MaintainServer {
+    public static void main(String[] args) {
+        SpringApplication.run(MaintainServer.class);
+    }
+}

+ 69 - 0
src/main/java/com/chelvc/cloud/maintain/controller/IndexController.java

@@ -0,0 +1,69 @@
+package com.chelvc.cloud.maintain.controller;
+
+import javax.validation.Valid;
+
+import com.chelvc.cloud.maintain.copier.MerchantCopier;
+import com.chelvc.cloud.maintain.param.CustomerIndexParam;
+import com.chelvc.cloud.maintain.vo.ConfigurationVO;
+import com.chelvc.cloud.maintain.vo.CustomerIndexVO;
+import com.chelvc.cloud.uc.api.service.UsageService;
+import com.chelvc.cloud.vehicle.api.param.NearbyQueryParam;
+import com.chelvc.cloud.vehicle.api.service.MerchantService;
+import com.chelvc.framework.base.annotation.UnifiedResponseBody;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 首页接口
+ *
+ * @author Woody
+ * @date 2023/5/4
+ */
+@Validated
+@RestController
+@UnifiedResponseBody
+@PreAuthorize("isBusiness('CUSTOMER', 'MERCHANT')")
+public class IndexController {
+    @DubboReference
+    private UsageService usageService;
+
+    @DubboReference
+    private MerchantService merchantService;
+
+    /**
+     * 获取系统配置信息
+     *
+     * @return 配置信息
+     */
+    @GetMapping("/configuration")
+    public ConfigurationVO getConfiguration() {
+        // 刷新系统使用记录
+        this.usageService.refresh();
+
+        // 构建系统配置
+        return ConfigurationVO.builder().build();
+    }
+
+    /**
+     * 后去顾客端首页信息
+     *
+     * @param param 首页参数
+     * @return 首页信息
+     */
+    @GetMapping("/customer/index")
+    public CustomerIndexVO getCustomerIndex(@Valid CustomerIndexParam param) {
+        NearbyQueryParam query = NearbyQueryParam.builder().longitude(param.getLongitude())
+                .latitude(param.getLatitude()).distance(10000).build();
+        CustomerIndexVO index = CustomerIndexVO.builder().build();
+        index.setRecommendMerchants(
+                MerchantCopier.INSTANCE.copying(this.merchantService.listRecommendMerchants(query, 4))
+        );
+        index.setNearbyMerchants(
+                MerchantCopier.INSTANCE.copying(this.merchantService.listNearbyMerchants(query, 4))
+        );
+        return index;
+    }
+}

+ 44 - 0
src/main/java/com/chelvc/cloud/maintain/copier/MerchantCopier.java

@@ -0,0 +1,44 @@
+package com.chelvc.cloud.maintain.copier;
+
+import java.util.Collection;
+import java.util.List;
+
+import com.chelvc.cloud.maintain.vo.MerchantVO;
+import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import org.mapstruct.Builder;
+import org.mapstruct.IterableMapping;
+import org.mapstruct.Mapper;
+import org.mapstruct.Named;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 商家信息拷贝接口
+ *
+ * @author Woody
+ * @date 2023/5/2
+ */
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface MerchantCopier {
+    /**
+     * 对象拷贝接口实例
+     */
+    MerchantCopier INSTANCE = Mappers.getMapper(MerchantCopier.class);
+
+    /**
+     * 商家信息拷贝
+     *
+     * @param merchant 商家信息
+     * @return 商家信息
+     */
+    @Named("dto2vo")
+    MerchantVO copying(MerchantDTO merchant);
+
+    /**
+     * 商家信息拷贝
+     *
+     * @param merchants 商家信息集合
+     * @return 商家信息列表
+     */
+    @IterableMapping(qualifiedByName = "dto2vo")
+    List<MerchantVO> copying(Collection<MerchantDTO> merchants);
+}

+ 36 - 0
src/main/java/com/chelvc/cloud/maintain/param/CustomerIndexParam.java

@@ -0,0 +1,36 @@
+package com.chelvc.cloud.maintain.param;
+
+import java.io.Serializable;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 顾客端首页参数
+ *
+ * @author Woody
+ * @date 2023/5/4
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class CustomerIndexParam implements Serializable {
+    /**
+     * 经度
+     */
+    @NotNull(message = "经度不能为空")
+    @Min(value = 0, message = "经度不能小于0")
+    private Double longitude;
+
+    /**
+     * 纬度
+     */
+    @NotNull(message = "纬度不能为空")
+    @Min(value = 0, message = "纬度不能小于0")
+    private Double latitude;
+}

+ 21 - 0
src/main/java/com/chelvc/cloud/maintain/vo/ConfigurationVO.java

@@ -0,0 +1,21 @@
+package com.chelvc.cloud.maintain.vo;
+
+import java.io.Serializable;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 系统配置信息
+ *
+ * @author Woody
+ * @date 2023/5/4
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ConfigurationVO implements Serializable {
+}

+ 31 - 0
src/main/java/com/chelvc/cloud/maintain/vo/CustomerIndexVO.java

@@ -0,0 +1,31 @@
+package com.chelvc.cloud.maintain.vo;
+
+import java.io.Serializable;
+import java.util.List;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 顾客端首页信息
+ *
+ * @author Woody
+ * @date 2023/5/4
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class CustomerIndexVO implements Serializable {
+    /**
+     * 推荐商家列表
+     */
+    private List<MerchantVO> recommendMerchants;
+
+    /**
+     * 附件商家列表
+     */
+    private List<MerchantVO> nearbyMerchants;
+}

+ 65 - 0
src/main/java/com/chelvc/cloud/maintain/vo/MerchantVO.java

@@ -0,0 +1,65 @@
+package com.chelvc.cloud.maintain.vo;
+
+import java.io.Serializable;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 商家信息
+ *
+ * @author Woody
+ * @date 2023/5/5
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MerchantVO implements Serializable {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 商家名称
+     */
+    private String name;
+
+    /**
+     * Logo
+     */
+    private String logo;
+
+    /**
+     * 封面
+     */
+    private String cover;
+
+    /**
+     * 商家等级
+     */
+    private Integer level;
+
+    /**
+     * 详细地址
+     */
+    private String address;
+
+    /**
+     * 距离(米)
+     */
+    private Integer distance;
+
+    /**
+     * 是否推荐
+     */
+    private Boolean recommend;
+
+    /**
+     * 详细介绍
+     */
+    private String description;
+}

+ 22 - 0
src/main/resources/application-dev.yml

@@ -0,0 +1,22 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 47.108.128.78:6848
+  redis:
+    host: 47.108.128.78
+    port: 7031
+    password: Chelvc@2023
+
+dubbo:
+  registry:
+    address: nacos://47.108.128.78:6848
+
+nacos:
+  config:
+    server-addr: 47.108.128.78:6848
+
+platform:
+  security:
+    token:
+      secret: oauth.token.secret@chelvc!@#2023

+ 22 - 0
src/main/resources/application-pre.yml

@@ -0,0 +1,22 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 127.0.0.1:6848
+  redis:
+    host: 127.0.0.1
+    port: 7031
+    password: Chelvc@2023
+
+dubbo:
+  registry:
+    address: nacos://127.0.0.1:6848
+
+nacos:
+  config:
+    server-addr: 127.0.0.1:6848
+
+platform:
+  security:
+    token:
+      secret: oauth.token.secret@chelvc!@#2023

+ 22 - 0
src/main/resources/application-prod.yml

@@ -0,0 +1,22 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 127.0.0.1:6848
+  redis:
+    host: 127.0.0.1
+    port: 7031
+    password: Chelvc@2023
+
+dubbo:
+  registry:
+    address: nacos://127.0.0.1:6848
+
+nacos:
+  config:
+    server-addr: 127.0.0.1:6848
+
+platform:
+  security:
+    token:
+      secret: oauth.token.secret@chelvc!@#2023

+ 22 - 0
src/main/resources/application-test.yml

@@ -0,0 +1,22 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 127.0.0.1:6848
+  redis:
+    host: 127.0.0.1
+    port: 7031
+    password: Chelvc@2023
+
+dubbo:
+  registry:
+    address: nacos://127.0.0.1:6848
+
+nacos:
+  config:
+    server-addr: 127.0.0.1:6848
+
+platform:
+  security:
+    token:
+      secret: oauth.token.secret@chelvc!@#2023

+ 43 - 0
src/main/resources/application.yml

@@ -0,0 +1,43 @@
+server:
+  port: 10200
+
+spring:
+  main:
+    allow-bean-definition-overriding: true
+  profiles:
+    active: dev
+  application:
+    name: maintain
+  jackson:
+    time-zone: GMT+8
+    serialization:
+      write-dates-as-timestamps: true
+  cloud:
+    nacos:
+      discovery:
+        namespace: ${spring.profiles.active}
+  servlet:
+    multipart:
+      enabled: true
+      max-file-size: 40MB
+      max-request-size: 40MB
+
+nacos:
+  config:
+    namespace: ${spring.profiles.active}
+
+dubbo:
+  protocol:
+    name: dubbo
+    port: 20200
+  application:
+    name: ${spring.application.name}
+    register-mode: instance
+  provider:
+    group: ${spring.profiles.active}
+    filter: -exception,customException
+  consumer:
+    group: ${spring.profiles.active}
+    check: false
+    timeout: 10000
+    retries: 0

+ 2 - 0
src/main/resources/bootstrap.yml

@@ -0,0 +1,2 @@
+logging:
+  config: classpath:logback-spring.xml

+ 33 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+	<contextName>maintain</contextName>
+
+	<springProperty name="LOG_PATH" source="logging.path" defaultValue="./"/>
+
+	<appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+	</appender>
+
+	<appender name="FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${LOG_PATH}/maintain.log</file>
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_PATH}/maintain-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+			<maxFileSize>10MB</maxFileSize>
+			<maxHistory>7</maxHistory>
+		</rollingPolicy>
+	</appender>
+
+	<logger name="RocketmqClient" level="error"/>
+
+	<root level="info">
+		<appender-ref ref="CONSOLE_APPENDER"/>
+		<appender-ref ref="FILE_APPENDER"/>
+	</root>
+</configuration>