From 4f8b07e136c39cc22fbadfd2c869578bb9827a18 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 10 四月 2026 19:23:29 +0800
Subject: [PATCH] 还原数据

---
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/FleetEditDTO.java              |   33 ++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetPageVO.java                |   57 +++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/HexUtil.java                        |   36 ++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/VehicleTaskRoutineQuery.java |   33 ++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetDetailVO.java              |   56 +++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/enums/SignatureType.java                 |   15 
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/IndexDataQuery.java          |   30 +
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/config/MyLocaleResolver.java             |   83 +++++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/FleetUserPageQuery.java      |   30 +
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetUserVO.java                |   30 +
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/QueryPolicyInfoVO.java          |   19 +
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/HMACSHA1.java                       |   35 ++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/FleetPageQuery.java          |   24 +
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IndexDataService.java            |   21 +
 xp-robotaxi-vehicle-convoy-boot/src/main/resources/logback.xml.bak                                                |  222 +++++++++++++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/ResourceUtil.java                   |   82 +++++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/FleetAddDTO.java               |   40 ++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/IndexDataVO.java                |   67 ++++
 18 files changed, 913 insertions(+), 0 deletions(-)

diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/config/MyLocaleResolver.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/config/MyLocaleResolver.java
index e69de29..2342e9f 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/config/MyLocaleResolver.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/config/MyLocaleResolver.java
@@ -0,0 +1,83 @@
+package com.xiaopeng.vehicleConvoy.config;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import org.springframework.util.StringUtils;
+import org.springframework.web.servlet.LocaleResolver;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.Locale;
+
+public class MyLocaleResolver implements LocaleResolver {
+
+    @Override
+    public Locale resolveLocale(HttpServletRequest request) {
+        //1=中文,2=英文,3=印尼文
+        //1=Chinese, 2=English, 3=Indonesian.
+        String language = getQueryParams(request, "language");
+
+        Locale locale = null;
+        if (StringUtils.isEmpty(language)) {
+            locale = Locale.getDefault();
+            language = "1";
+        }
+        //如果请求不为空
+        //If the request is not empty.
+        if(!StringUtils.isEmpty(language)){
+            if (language.equals("1")) {
+                locale = new Locale("zh", "CN");
+            } else if (language.equals("2")) {
+                locale = new Locale("en", "US");
+            }
+        }
+        return locale;
+    }
+
+    @Override
+    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
+    }
+
+
+    public String getQueryParams(HttpServletRequest request, String key) {
+        try {
+            String method = request.getMethod();
+            if("POST".equals(method)){
+                String parameter = request.getParameter(key);
+                if(!StringUtils.isEmpty(parameter)){
+                    return parameter;
+                }
+                Object attribute = request.getAttribute(key);
+                if(null != attribute){
+                    return attribute.toString();
+                }
+                StringBuffer sb = new StringBuffer();
+                ServletInputStream inputStream = request.getInputStream();
+                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+                String s;
+                while ((s = bufferedReader.readLine()) != null){
+                    sb.append(s);
+                }
+                bufferedReader.close();
+                inputStream.close();
+                JSONObject jsonObject = JSON.parseObject(sb.toString());
+                return jsonObject.getString(key);
+            }else{
+                String parameter = request.getParameter(key);
+                if(!StringUtils.isEmpty(parameter)){
+                    return parameter;
+                }
+                Object attribute = request.getAttribute(key);
+                if(null != attribute){
+                    return attribute.toString();
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/enums/SignatureType.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/enums/SignatureType.java
index e69de29..3240114 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/enums/SignatureType.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/enums/SignatureType.java
@@ -0,0 +1,15 @@
+package com.xiaopeng.vehicleConvoy.enums;
+
+/** 签名类型枚举 */
+public enum SignatureType {
+	MD5("MD5"), SHA1("SHA1"), SHA256("SHA256");
+	private String value;
+
+	private SignatureType(String value) {
+		this.value = value;
+	}
+
+	public String getValue() {
+		return value;
+	}
+}
\ No newline at end of file
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/FleetAddDTO.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/FleetAddDTO.java
index e69de29..47a4b0b 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/FleetAddDTO.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/FleetAddDTO.java
@@ -0,0 +1,40 @@
+package com.xiaopeng.vehicleConvoy.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 添加车队DTO
+ *
+ * @author mitao
+ */
+@Data
+@ApiModel("添加车队数据传输对象")
+public class FleetAddDTO {
+
+    @ApiModelProperty(value = "车队名称", required = true)
+    @NotBlank(message = "车队名称不能为空")
+    private String fleetName;
+
+    @ApiModelProperty(value = "负责人id", required = true)
+    @NotNull(message = "负责人id不能为空")
+    private Long operationsUserId;
+
+    @ApiModelProperty(value = "打卡地id", required = true)
+    @NotNull(message = "打卡地id不能为空")
+    private Long locationId;
+
+    @ApiModelProperty(value = "关联车辆ids", required = true)
+    @NotEmpty(message = "关联车辆不能为空")
+    private List<Long> vehicleIds;
+
+    @ApiModelProperty(value = "关联人员ids", required = true)
+    @NotEmpty(message = "关联人员不能为空")
+    private List<Long> operationsUserIds;
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/FleetEditDTO.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/FleetEditDTO.java
index e69de29..b6aae7b 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/FleetEditDTO.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/dto/FleetEditDTO.java
@@ -0,0 +1,33 @@
+package com.xiaopeng.vehicleConvoy.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 编辑车队DTO
+ *
+ * @author mitao
+ */
+@Data
+@ApiModel("编辑车队数据传输对象")
+public class FleetEditDTO {
+
+    @ApiModelProperty(value = "车队id", required = true)
+    @NotNull(message = "车队id不能为空")
+    private Long id;
+
+    @ApiModelProperty(value = "车队名称", required = true)
+    @NotBlank(message = "车队名称不能为空")
+    private String fleetName;
+
+    @ApiModelProperty(value = "负责人id", required = true)
+    @NotNull(message = "负责人id不能为空")
+    private Long operationsUserId;
+
+    @ApiModelProperty(value = "打卡地ID")
+    private Long locationId;
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/FleetPageQuery.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/FleetPageQuery.java
index e69de29..094cff7 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/FleetPageQuery.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/FleetPageQuery.java
@@ -0,0 +1,24 @@
+package com.xiaopeng.vehicleConvoy.model.query;
+
+import com.xiaopeng.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 车队分页查询参数
+ *
+ * @author mitao
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "车队分页查询参数")
+public class FleetPageQuery extends BasePage {
+
+    @ApiModelProperty(value = "车队名称")
+    private String fleetName;
+
+    @ApiModelProperty(value = "负责人电话")
+    private String phoneNumber;
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/FleetUserPageQuery.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/FleetUserPageQuery.java
index e69de29..68e1fa3 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/FleetUserPageQuery.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/FleetUserPageQuery.java
@@ -0,0 +1,30 @@
+package com.xiaopeng.vehicleConvoy.model.query;
+
+import com.xiaopeng.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 车队人员分页查询参数
+ *
+ * @author mitao
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "车队人员分页查询参数")
+public class FleetUserPageQuery extends BasePage {
+
+    @ApiModelProperty(value = "车队id")
+    private Long fleetId;
+
+    @ApiModelProperty(value = "人员姓名")
+    private String nickName;
+
+    @ApiModelProperty(value = "电话")
+    private String phone;
+
+    @ApiModelProperty(value = "角色ID")
+    private Long roleId;
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/IndexDataQuery.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/IndexDataQuery.java
index e69de29..42f5759 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/IndexDataQuery.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/IndexDataQuery.java
@@ -0,0 +1,30 @@
+package com.xiaopeng.vehicleConvoy.model.query;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+
+/**
+ * 首页数据查询参数
+ *
+ * @author mitao
+ */
+@Data
+@ApiModel(value = "首页数据查询参数")
+public class IndexDataQuery {
+
+    @ApiModelProperty(value = "今日运行情况-查询日期(默认当天)")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate runningDate;
+
+    @ApiModelProperty(value = "运营增长数据-开始日期(默认当天)")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate growthStartDate;
+
+    @ApiModelProperty(value = "运营增长数据-结束日期(默认当天)")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate growthEndDate;
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/VehicleTaskRoutineQuery.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/VehicleTaskRoutineQuery.java
index e69de29..b271812 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/VehicleTaskRoutineQuery.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/query/VehicleTaskRoutineQuery.java
@@ -0,0 +1,33 @@
+package com.xiaopeng.vehicleConvoy.model.query;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xiaopeng.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * 车辆年检记录分页查询参数
+ *
+ * @author mitao
+ */
+@Data
+@ApiModel(value = "车辆年检记录分页查询参数")
+public class VehicleTaskRoutineQuery extends BasePage {
+
+    @ApiModelProperty(value = "车辆id", required = true)
+    private Long vehicleId;
+
+    @ApiModelProperty(value = "操作人")
+    private String operationsUserName;
+
+    @ApiModelProperty(value = "开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate endTime;
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetDetailVO.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetDetailVO.java
index e69de29..0cf9832 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetDetailVO.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetDetailVO.java
@@ -0,0 +1,56 @@
+package com.xiaopeng.vehicleConvoy.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 车队详情视图对象
+ *
+ * @author mitao
+ */
+@Data
+@ApiModel("车队详情视图对象")
+public class FleetDetailVO {
+
+    @ApiModelProperty(value = "车队id")
+    private Long id;
+
+    @ApiModelProperty(value = "车队名称")
+    private String fleetName;
+
+    @ApiModelProperty(value = "负责人id")
+    private Long operationsUserId;
+
+    @ApiModelProperty(value = "负责人姓名")
+    private String operationsUserName;
+
+    @ApiModelProperty(value = "负责人-手机号")
+    private String phoneNumber;
+
+    @ApiModelProperty(value = "打卡地id")
+    private Long locationId;
+
+    @ApiModelProperty(value = "打卡地名称")
+    private String locationName;
+
+    @ApiModelProperty(value = "电子围栏id")
+    private Long electronicId;
+
+    @ApiModelProperty(value = "人员数量")
+    private Integer userCount;
+
+    @ApiModelProperty(value = "车辆数量")
+    private Integer vehicleCount;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetPageVO.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetPageVO.java
index e69de29..5c644f9 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetPageVO.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetPageVO.java
@@ -0,0 +1,57 @@
+package com.xiaopeng.vehicleConvoy.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 车队分页列表视图对象
+ *
+ * @author mitao
+ */
+@Data
+@ApiModel("车队分页列表视图对象")
+public class FleetPageVO {
+
+    @ApiModelProperty(value = "车队id")
+    private Long id;
+
+    @ApiModelProperty(value = "车队名称")
+    private String fleetName;
+
+    @ApiModelProperty(value = "负责人id")
+    private Long operationsUserId;
+
+    @ApiModelProperty(value = "负责人姓名")
+    private String operationsUserName;
+
+    @ApiModelProperty(value = "关联运营区域")
+    private String electronicName;
+
+    @ApiModelProperty(value = "打卡地名称")
+    private String locationName;
+
+    @ApiModelProperty(value = "负责人电话")
+    private String phoneNumber;
+
+    @ApiModelProperty(value = "人员数量")
+    private Integer userCount;
+
+    @ApiModelProperty(value = "车辆数量")
+    private Integer vehicleCount;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "电子围栏id")
+    private Long electronicId;
+
+    @ApiModelProperty(value = "打卡地id")
+    private Long locationId;
+
+
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetUserVO.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetUserVO.java
index e69de29..bb89826 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetUserVO.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetUserVO.java
@@ -0,0 +1,30 @@
+package com.xiaopeng.vehicleConvoy.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 车队人员视图对象
+ *
+ * @author mitao
+ */
+@Data
+@ApiModel("车队人员视图对象")
+public class FleetUserVO {
+
+    @ApiModelProperty(value = "人员id")
+    private Long userId;
+
+    @ApiModelProperty(value = "人员姓名")
+    private String nickName;
+
+    @ApiModelProperty(value = "电话")
+    private String phoneNumber;
+
+    @ApiModelProperty(value = "工号")
+    private String jobNumber;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/IndexDataVO.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/IndexDataVO.java
index e69de29..4f74b14 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/IndexDataVO.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/IndexDataVO.java
@@ -0,0 +1,67 @@
+package com.xiaopeng.vehicleConvoy.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 首页数据统计VO
+ *
+ * @author mitao
+ */
+@Data
+@ApiModel(value = "首页数据统计VO")
+public class IndexDataVO {
+
+    // ==================== 今日运行情况 ====================
+
+    @ApiModelProperty(value = "今日运行情况-新增用户数")
+    private Long newUserCount;
+
+    @ApiModelProperty(value = "今日运行情况-新增车辆数量")
+    private Long vehicleCount;
+
+    @ApiModelProperty(value = "今日运行情况-新增订单数量")
+    private Long orderCount;
+
+    // ==================== 运营总数据 ====================
+
+    @ApiModelProperty(value = "运营总数据-用户总数")
+    private Long totalUserCount;
+
+    @ApiModelProperty(value = "运营总数据-车队数量")
+    private Long fleetCount;
+
+    @ApiModelProperty(value = "运营总数据-车辆数量")
+    private Long totalVehicleCount;
+
+    @ApiModelProperty(value = "运营总数据-订单数量")
+    private Long totalOrderCount;
+
+    @ApiModelProperty(value = "运营总数据-总交易金额")
+    private Long totalMoney;
+
+    @ApiModelProperty(value = "运营总数据-总收入")
+    private Long totalIncome;
+
+    // ==================== 运营数据增长 ====================
+
+    @ApiModelProperty(value = "运营数据增长-用户增长数")
+    private Long userGrowthCount;
+
+    @ApiModelProperty(value = "运营数据增长-车辆增长数")
+    private Long vehicleGrowthCount;
+
+    @ApiModelProperty(value = "运营数据增长-订单增长数")
+    private Long orderGrowthCount;
+
+    // ==================== 运营总趋势(近30天) ====================
+
+    @ApiModelProperty(value = "运营总趋势-订单趋势图(近30天每日订单数)")
+    private List<Long> orderCountList;
+
+    @ApiModelProperty(value = "运营总趋势-用户注册趋势图(近30天每日用户注册数)")
+    private List<Long> userCountList;
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/QueryPolicyInfoVO.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/QueryPolicyInfoVO.java
index e69de29..088220a 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/QueryPolicyInfoVO.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/QueryPolicyInfoVO.java
@@ -0,0 +1,19 @@
+package com.xiaopeng.vehicleConvoy.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "保单审核信息VO")
+public class QueryPolicyInfoVO implements Serializable {
+
+    @ApiModelProperty(value = "保单申请状态 0=待申请 1=待审核 2=已通过 3=已驳回")
+    private Integer status;
+
+    @ApiModelProperty(value = "保单申请对象")
+    private XpPolicyApplicationVO xpPolicyApplicationVO;
+
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IndexDataService.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IndexDataService.java
index e69de29..3852e57 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IndexDataService.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IndexDataService.java
@@ -0,0 +1,21 @@
+package com.xiaopeng.vehicleConvoy.service;
+
+
+import com.xiaopeng.vehicleConvoy.model.query.IndexDataQuery;
+import com.xiaopeng.vehicleConvoy.model.vo.IndexDataVO;
+
+/**
+ * 首页数据统计服务
+ *
+ * @author mitao
+ */
+public interface IndexDataService {
+
+    /**
+     * 获取首页统计数据
+     *
+     * @param query 查询参数
+     * @return 首页统计数据
+     */
+    IndexDataVO getIndexData(IndexDataQuery query);
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/HMACSHA1.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/HMACSHA1.java
index e69de29..0fd001f 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/HMACSHA1.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/HMACSHA1.java
@@ -0,0 +1,35 @@
+package com.xiaopeng.vehicleConvoy.util;
+
+
+import javax.crypto.Mac;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+
+public class HMACSHA1 {
+	
+	private static final String MAC_NAME = "HmacSHA1";
+	private static final String ENCODING = "UTF-8";
+	
+	/**
+	 * 使用 HMAC-SHA1 签名方法对对encryptText进行签名
+	 *
+	 * @param encryptText 被签名的字符串
+	 * @param encryptKey  密钥
+	 * @return
+	 * @throws Exception
+	 */
+	public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {
+		byte[] data = encryptKey.getBytes(ENCODING);
+		// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
+		Mac mac = Mac.getInstance(MAC_NAME);
+		SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
+		// 生成一个指定 Mac 算法 的 Mac 对象
+		// 用给定密钥初始化 Mac 对象
+		mac.init(secretKey);
+		
+		byte[] text = encryptText.getBytes(ENCODING);
+		// 完成 Mac 操作
+		return mac.doFinal(text);
+	}
+	
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/HexUtil.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/HexUtil.java
index e69de29..358e6aa 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/HexUtil.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/HexUtil.java
@@ -0,0 +1,36 @@
+package com.xiaopeng.vehicleConvoy.util;
+
+import com.xiaopeng.vehicleConvoy.DecodingException;
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.binary.Hex;
+
+
+/**
+ * 与字节16进制相关的工具类<br/>
+ */
+public class HexUtil {
+	/** 将十六进制字符串转成字节数组 */
+	public static byte[] toHexBytes(String hexText) {
+		try {
+			return Hex.decodeHex(hexText.toCharArray());
+		} catch (DecoderException e) {
+			throw new DecodingException(e);
+		}
+	}
+
+	/** 将字节数组转成十六进制字符串(字母小写) */
+	public static String toLowerCase(byte[] hex) {
+		return new String(Hex.encodeHex(hex, true));
+	}
+
+	/** 将字节数组转成十六进制字符串(字母大写) */
+	public static String toUpperCase(byte[] hex) {
+		return new String(Hex.encodeHex(hex, false));
+	}
+
+	/** 将字节数组转成整数 */
+	public static int hashToInt(byte[] hash) {
+		return (int) (hash[3] << 24 | hash[2] << 16 | hash[1] << 8 | hash[0]);
+	}
+
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/ResourceUtil.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/ResourceUtil.java
index e69de29..3221964 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/ResourceUtil.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/ResourceUtil.java
@@ -0,0 +1,82 @@
+package com.xiaopeng.vehicleConvoy.util;
+
+import java.io.*;
+import java.lang.reflect.Method;
+import java.net.URL;
+
+/**
+ * 资源工具类
+ * @author binghuoliu
+ * 
+ */
+public class ResourceUtil {
+
+	/**
+	 * 读取classpath下的文件<br>
+	 * 读取classpath下的文件 一般用于读取classpath下的配置文件,注意读取的配置文件路径是相对传入参数clazz的load入路径. 例:<br>
+	 * ClassTest c1;//假设c1是从/usr/local/classpath/ 载入<br>
+	 * ClassTest c2;//假设c2是从/home/classpath/ 载入<br>
+	 * ............<br>
+	 * loadConfigFile("a.xml",c1.class);//从/usr/local/classpath1/下寻找a.xml<br>
+	 * loadConfigFile("a.xml",c2.class);//从/home/classpath/下寻找a.xml<br>
+	 * @param resource 资源路径
+	 * @param clazz
+	 * @return InputStream 文件的inputstram,如果找不到则返回null
+	 */
+	@SuppressWarnings("unchecked")
+	public static InputStream loadConfigFile(String resource, Class clazz) {
+		ClassLoader classLoader = null;
+		try {
+			Method method = Thread.class.getMethod("getContextClassLoader");
+			classLoader = (ClassLoader) method.invoke(Thread.currentThread());
+		} catch (Exception e) {
+			throw new RuntimeException("loadConfigFile error: ", e);
+		}
+		if (classLoader == null) {
+			classLoader = clazz.getClassLoader();
+		}
+		try {
+			if (classLoader != null) {
+				URL url = classLoader.getResource(resource);
+				if (url == null) {
+					System.out.println("Can not find resource:" + resource);
+					return null;
+				}
+				if (url.toString().startsWith("jar:file:")) {
+					System.out.println("Get resource \"" + resource + "\" from jar:\t" + url.toString());
+					return clazz.getResourceAsStream(resource.startsWith("/") ? resource : "/" + resource);
+				} else {
+					System.out.println("Get resource \"" + resource + "\" from:\t" + url.toString());
+					return new FileInputStream(new File(url.toURI()));
+				}
+			}
+		} catch (Exception e) {
+			throw new RuntimeException("loadConfigFile error: ", e);
+		}
+		return null;
+	}
+
+	/**
+	 * 释放资源(有异常抛出)
+	 * @param closeable
+	 * @throws IOException
+	 */
+	public static void close(Closeable closeable) throws IOException {
+		if (closeable != null) {
+			closeable.close();
+		}
+	}
+
+	/**
+	 * 以优雅的形式释放资源(内部吃掉了异常)
+	 * @param closeable
+	 */
+	public static void closeGracefully(Closeable closeable) {
+		if (closeable != null) {
+			try {
+				closeable.close();
+			} catch (IOException e) {
+			}
+		}
+	}
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/resources/logback.xml.bak b/xp-robotaxi-vehicle-convoy-boot/src/main/resources/logback.xml.bak
index e69de29..14a129a 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/resources/logback.xml.bak
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/resources/logback.xml.bak
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 -->
+<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
+<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
+<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
+<configuration  scan="true" scanPeriod="10 seconds">
+	<contextName>logback</contextName>
+	
+	<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使"${}"来使用变量。 -->
+	<property name="log.path" value="/data/log/app/ruoyi-account"/>
+	
+	<!--0. 日志格式和颜色渲染 -->
+	<!-- 彩色日志依赖的渲染类 -->
+	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
+	<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
+	<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
+	<!-- 彩色日志格式 -->
+	<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+	
+	<!--1. 输出到控制台-->
+	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+		<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
+		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+			<level>debug</level>
+		</filter>
+		<encoder>
+			<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
+			<!-- 设置字符集 -->
+			<charset>UTF-8</charset>
+		</encoder>
+	</appender>
+	
+	<!--2. 输出到文档-->
+	<!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
+	<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文档的路径及文档名 -->
+		<file>${log.path}/debug.log</file>
+		<!--日志文档输出格式-->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<!-- 日志归档 -->
+			<fileNamePattern>${log.path}/%d{yyyy-MM-dd}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文档保留天数-->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文档只记录debug级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>debug</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+	
+	<!-- 2.2 level为 INFO 日志,时间滚动输出  -->
+	<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文档的路径及文档名 -->
+		<file>${log.path}/info.log</file>
+		<!--日志文档输出格式-->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<!-- 每天日志归档路径以及格式 -->
+			<fileNamePattern>${log.path}/%d{yyyy-MM-dd}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文档保留天数-->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文档只记录info级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>info</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+	
+	<!-- 2.3 level为 WARN 日志,时间滚动输出  -->
+	<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文档的路径及文档名 -->
+		<file>${log.path}/warn.log</file>
+		<!--日志文档输出格式-->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/%d{yyyy-MM-dd}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文档保留天数-->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文档只记录warn级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>warn</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+	
+	<!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
+	<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文档的路径及文档名 -->
+		<file>${log.path}/error.log</file>
+		<!--日志文档输出格式-->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/%d{yyyy-MM-dd}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文档保留天数-->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文档只记录ERROR级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>ERROR</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+	
+	<!-- 2.5 所有 除了DEBUG级别的其它高于DEBUG的 日志,记录到一个文件  -->
+	<appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文档的路径及文档名 -->
+		<file>${log.path}/all.log</file>
+		<!--日志文档输出格式-->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/%d{yyyy-MM-dd}/all-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文档保留天数-->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文档记录除了DEBUG级别的其它高于DEBUG的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>DEBUG</level>
+			<onMatch>DENY</onMatch>
+			<onMismatch>ACCEPT</onMismatch>
+		</filter>
+	</appender>
+	
+	<!--
+		<logger>用来设置某一个包或者具体的某一个类的日志打印级别、
+		以及指定<appender>。<logger>仅有一个name属性,
+		一个可选的level和一个可选的addtivity属性。
+		name:用来指定受此logger约束的某一个包或者具体的某一个类。
+		level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
+			  还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。
+			  如果未设置此属性,那么当前logger将会继承上级的级别。
+		addtivity:是否向上级logger传递打印信息。默认是true。
+		<logger name="org.springframework.web" level="info"/>
+		<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
+	-->
+	
+	<!--
+		root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
+		level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
+		不能设置为INHERITED或者同义词NULL。默认是DEBUG
+		可以包含零个或多个元素,标识这个appender将会添加到这个logger。
+	-->
+	
+	<!-- 4  最终的策略:
+				 基本策略(root级) + 根据profile在启动时, logger标签中定制化package日志级别(优先级高于上面的root级)-->
+	<springProfile name="dev">
+		<root level="info">
+			<appender-ref ref="CONSOLE" />
+			<appender-ref ref="DEBUG_FILE" />
+			<appender-ref ref="INFO_FILE" />
+			<appender-ref ref="WARN_FILE" />
+			<appender-ref ref="ERROR_FILE" />
+			<appender-ref ref="ALL_FILE" />
+		</root>
+		<logger name="com.stylefeng.guns.modular.system.dao" level="debug"/>
+	</springProfile>
+	
+	<springProfile name="test">
+		<root level="info">
+			<appender-ref ref="CONSOLE" />
+			<appender-ref ref="DEBUG_FILE" />
+			<appender-ref ref="INFO_FILE" />
+			<appender-ref ref="WARN_FILE" />
+			<appender-ref ref="ERROR_FILE" />
+			<appender-ref ref="ALL_FILE" />
+		</root>
+	</springProfile>
+	
+	<springProfile name="prod">
+		<root level="info">
+			<!-- 生产环境最好不配置console写文件 -->
+			<appender-ref ref="DEBUG_FILE" />
+			<appender-ref ref="INFO_FILE" />
+			<appender-ref ref="WARN_FILE" />
+			<appender-ref ref="ERROR_FILE" />
+			<appender-ref ref="ALL_FILE" />
+		</root>
+	</springProfile>
+
+</configuration>

--
Gitblit v1.7.1