From 68d9932527d3fc879b0422d7d9c29d3f9437c65c Mon Sep 17 00:00:00 2001
From: tangxiaobao <303826152@qq.com>
Date: 星期六, 31 七月 2021 21:01:15 +0800
Subject: [PATCH] 防火防汛接口开发

---
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwRotaVO.java                                 |    3 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwRotaSaveDTO.java                           |    1 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportVO.java                         |    6 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/DateUtils.java                                                 |   25 +++
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportExcelVO.java                    |    4 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwPatrolRecordAddDTO.java                    |    7 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwRotaPageDTO.java                           |    2 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java                              |   16 ++
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComSwPatrolRecordApi.java                  |   21 ++
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwDangerReportMapper.xml                                        |    3 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwRotaMapper.xml                                                |   13 +
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwRotaDAO.java                          |    8 +
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComSwRotaExcelListen.java                                     |   59 +++++++
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwRotaServiceImpl.java         |  164 +++++++++++++++++++-
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwDangerReportServiceImpl.java |   18 +-
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwRotaExcelVO.java                            |   53 ++++++
 springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/ComSwPatrolRecordApi.java              |   62 ++++++-
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwRotaService.java                  |   15 +
 18 files changed, 439 insertions(+), 41 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComSwRotaExcelListen.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComSwRotaExcelListen.java
new file mode 100644
index 0000000..893fcfc
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComSwRotaExcelListen.java
@@ -0,0 +1,59 @@
+package com.panzhihua.common.listen;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.fastjson.JSONObject;
+import com.panzhihua.common.exceptions.ServiceException;
+import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.model.vos.community.ComMngCarExcelVO;
+import com.panzhihua.common.model.vos.community.ComSwRotaExcelVO;
+import com.panzhihua.common.service.community.CommunityService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @description: 值班表监听
+ * @author: Null
+ * @date: 2021/7/31 13:26
+ */
+@Slf4j
+public class ComSwRotaExcelListen extends AnalysisEventListener<ComSwRotaExcelVO> {
+
+    private CommunityService communityService;
+
+    private Long communityId;
+
+    public ComSwRotaExcelListen(CommunityService communityService, Long communityId){
+        this.communityService = communityService;
+        this.communityId = communityId;
+    }
+
+
+    private static final int BATCH_COUNT = 100;
+    private List<ComSwRotaExcelVO> list = new ArrayList<>();
+    @Override
+    public void invoke(ComSwRotaExcelVO comSwRotaExcelVO, AnalysisContext analysisContext) {
+        list.add(comSwRotaExcelVO);
+        // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
+        if(list.size() >= BATCH_COUNT){
+            log.info("excel导入数据【{}】", JSONObject.toJSONString(list));
+            R r = this.communityService.listSaveSwRotaExcelVO(list,this.communityId);
+            if (!R.isOk(r)) {
+                throw new ServiceException(r.getMsg());
+            }
+            list.clear();           //清空list
+        }
+
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        log.info("excel导入数据【{}】", JSONObject.toJSONString(list));
+        R r = this.communityService.listSaveSwRotaExcelVO(list,this.communityId);//确保最后遗留的数据保存在数据库中
+        if (!R.isOk(r)) {
+            throw new ServiceException(r.getMsg());
+        }
+    }
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwPatrolRecordAddDTO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwPatrolRecordAddDTO.java
index 00c4b46..e45a784 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwPatrolRecordAddDTO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwPatrolRecordAddDTO.java
@@ -1,6 +1,5 @@
 package com.panzhihua.common.model.dtos.community;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
@@ -44,13 +43,13 @@
     /**
     * 巡查领导
     */
-    @ApiModelProperty("巡查领导")
+    @ApiModelProperty("巡查领导id")
     private String patrolLeader;
 
     /**
     * 巡查人员
     */
-    @ApiModelProperty("巡查人员")
+    @ApiModelProperty("巡查人员id")
     private String patrolPerson;
 
     /**
@@ -164,7 +163,7 @@
     /**
     * 整改人员
     */
-    @ApiModelProperty("整改人员")
+    @ApiModelProperty("整改人员id")
     private String rectifyPerson;
 
     /**
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwRotaPageDTO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwRotaPageDTO.java
index f432077..704e522 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwRotaPageDTO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwRotaPageDTO.java
@@ -44,6 +44,6 @@
      * 联系电话
      */
     @ApiModelProperty("联系电话")
-    private Integer phone;
+    private String phone;
 
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwRotaSaveDTO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwRotaSaveDTO.java
index ecb60cf..e577569 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwRotaSaveDTO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwRotaSaveDTO.java
@@ -1,5 +1,6 @@
 package com.panzhihua.common.model.dtos.community;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportExcelVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportExcelVO.java
index b36c017..c76a2b2 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportExcelVO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportExcelVO.java
@@ -41,13 +41,13 @@
      * 巡查人员
      */
     @ExcelProperty(value = "巡查人员" ,index = 4)
-    private String patrolPerson;
+    private String personName;
 
     /**
      * 联系电话
      */
     @ExcelProperty(value = "联系电话" ,index = 5)
-    private String patrolPersonPhone;
+    private String personPhone;
 
     /**
      * 备注
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportVO.java
index ffecc4d..d0f1db6 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportVO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportVO.java
@@ -38,6 +38,12 @@
     private Long communityId;
 
     /**
+     * 社区id
+     */
+    @ApiModelProperty("社区名称")
+    private String communityName;
+
+    /**
      * 巡查时间
      */
     @ApiModelProperty("巡查时间")
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwRotaExcelVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwRotaExcelVO.java
new file mode 100644
index 0000000..f19575d
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwRotaExcelVO.java
@@ -0,0 +1,53 @@
+package com.panzhihua.common.model.vos.community;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.panzhihua.common.model.helper.encrypt.EncryptDecryptClass;
+import com.panzhihua.common.model.helper.encrypt.EncryptDecryptField;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @description: 批量导入值班表
+ * @author: Null
+ * @date: 2021/7/31 11:11
+ */
+@Data
+public class ComSwRotaExcelVO implements Serializable {
+    /**
+     * 星期
+     */
+    @ExcelProperty(value = "星期" ,index = 0)
+    private String weekDay;
+    /**
+     * 时间
+     */
+    @ExcelProperty(value = "时间" ,index = 1)
+    private String rotaDate;
+
+    /**
+     * 值班领导
+     */
+    @ExcelProperty(value = "值班领导" ,index = 2)
+    private String leaderName;
+
+    /**
+     * 值班领导联系电话
+     */
+    @ExcelProperty(value = "值班领导联系电话" ,index = 3)
+    private String leaderPhone;
+
+    /**
+     * 值班人员
+     */
+    @ExcelProperty(value = "值班人员(多个以逗号隔开)" ,index = 4)
+    private String personName;
+
+    /**
+     * 值班人员联系电话
+     */
+    @ExcelProperty(value = "值班人员联系电话(多个以逗号隔开)" ,index = 5)
+    private String personPhone;
+
+}
+
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwRotaVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwRotaVO.java
index 5aad827..db9e733 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwRotaVO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwRotaVO.java
@@ -48,8 +48,7 @@
      * 值班时间
      */
     @ApiModelProperty("值班时间")
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date rotaDate;
+    private String rotaDate;
 
     /**
      * 值班领导,多个以逗号隔开
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
index 4655aee..cff8933 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
@@ -3986,6 +3986,14 @@
     R pageRota(@RequestBody ComSwRotaPageDTO comSwRotaPageDTO);
 
     /**
+     * 根据id查询值班表
+     * @param rotaId 值班表id
+     * @return 值班表详情
+     */
+    @GetMapping("/patrolRecord/rota/detail")
+    R detailRota(@RequestParam("rotaId") Long rotaId);
+
+    /**
      * 新增值班表
      *
      * @param comSwRotaSaveDTOs 新增参数
@@ -4018,4 +4026,12 @@
     @GetMapping("/patrolRecord/rota/getRotaLeaderByDate")
     R getRotaLeaderByDate(@RequestParam(value = "rotaDate") String rotaDate);
 
+    /**
+     * 批量导入值班表
+     *
+     * @param list 值班表集合
+     */
+    @PostMapping("/patrolRecord/rota/import")
+    R listSaveSwRotaExcelVO(@RequestBody List<ComSwRotaExcelVO> list, @RequestParam("communityId") Long communityId);
+
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/DateUtils.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/DateUtils.java
index e1b88b5..c4b3648 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/DateUtils.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/DateUtils.java
@@ -840,6 +840,31 @@
         return sdf.format(today.getTime());
     }
 
+    /**
+     * 日期转周
+     *
+     * @param datetime
+     * @return
+     */
+    public static String dateToWeek(String datetime) {
+        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
+        String[] weekDays = { "周日", "周一", "周二", "周三", "周四", "周五", "周六" };
+        Calendar cal = Calendar.getInstance(); // 获得一个日历
+        Date datet = null;
+        try {
+            if (StringUtils.isNotEmpty(datetime)) {
+                datet = f.parse(datetime);
+                cal.setTime(datet);
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个周中的某天。
+        if (w < 0)
+            w = 0;
+        return weekDays[w];
+    }
+
 
 
     public static void main(String[]args)throws Exception{
diff --git a/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/ComSwPatrolRecordApi.java b/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/ComSwPatrolRecordApi.java
index 9ec6969..2ed626d 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/ComSwPatrolRecordApi.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/ComSwPatrolRecordApi.java
@@ -5,10 +5,14 @@
 import com.alibaba.excel.write.metadata.WriteSheet;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.panzhihua.common.controller.BaseController;
+import com.panzhihua.common.listen.ComMngPopulationServeExcelListen;
+import com.panzhihua.common.listen.ComSwRotaExcelListen;
 import com.panzhihua.common.model.dtos.community.*;
 import com.panzhihua.common.model.vos.R;
 import com.panzhihua.common.model.vos.community.*;
+import com.panzhihua.common.model.vos.partybuilding.PartyBuildingComPbDynVO;
 import com.panzhihua.common.service.community.CommunityService;
 import com.panzhihua.common.service.partybuilding.PartyBuildingService;
 import com.panzhihua.common.utlis.SFTPUtil;
@@ -19,10 +23,13 @@
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 
@@ -101,7 +108,7 @@
      * @param comSwPatrolRecordPageDTO 查询参数
      * @return 安全工作记录分页集合
      */
-    @ApiOperation(value = "分页查询安全工作记录")
+    @ApiOperation(value = "分页查询安全工作记录", response = ComSwSafetyWorkRecordVO.class)
     @PostMapping("/pageSafetyWorkRecord")
     public R pageSafetyWorkRecord(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
         Long communityId = this.getCommunityId();
@@ -115,7 +122,7 @@
      * @param safetyWorkRecordId 安全工作记录
      * @return 安全工作记录详情查询结果
      */
-    @ApiOperation(value = "根据安全工作记录id查询详情")
+    @ApiOperation(value = "根据安全工作记录id查询详情", response = ComSwSafetyWorkRecordVO.class)
     @GetMapping("/detailSafetyWorkRecord")
     public R detailSafetyWorkRecord(@RequestParam(value = "safetyWorkRecordId") Long safetyWorkRecordId) {
         return communityService.detailSafetyWorkRecord(safetyWorkRecordId);
@@ -127,7 +134,7 @@
      * @param patrolRecordId 巡查记录id
      * @return 安全工作记录详情查询结果
      */
-    @ApiOperation(value = "根据巡查记录id查询安全工作记录详情")
+    @ApiOperation(value = "根据巡查记录id查询安全工作记录详情", response = ComSwSafetyWorkRecordVO.class)
     @GetMapping("/detailSafetyWorkRecordByPrId")
     public R detailSafetyWorkRecordByPrId(@RequestParam(value = "patrolRecordId") Long patrolRecordId) {
         return communityService.detailSafetyWorkRecordByPrId(patrolRecordId);
@@ -138,7 +145,7 @@
      * @param comSwPatrolRecordPageDTO 查询参数
      * @return 隐患报告分页集合
      */
-    @ApiOperation(value = "分页查询隐患报告")
+    @ApiOperation(value = "分页查询隐患报告", response = ComSwDangerReportVO.class)
     @PostMapping("/pageDangerReport")
     public R pageDangerReport(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
         Long communityId = this.getCommunityId();
@@ -152,10 +159,15 @@
      * @param dangerReportId 隐患报告id
      * @return 隐患报告详情查询结果
      */
-    @ApiOperation(value = "根据隐患报告id查询详情")
+    @ApiOperation(value = "根据隐患报告id查询详情", response = ComSwDangerReportVO.class)
     @GetMapping("/detailDangerReport")
     public R detailDangerReport(@RequestParam(value = "dangerReportId") Long dangerReportId) {
-        return communityService.detailDangerReport(dangerReportId);
+        R r = communityService.detailDangerReport(dangerReportId);
+        if (R.isOk(r)) {
+            ComSwDangerReportVO reportVO = JSONObject.parseObject(JSONObject.toJSONString(r.getData()), ComSwDangerReportVO.class);
+            reportVO.setCommunityName(this.getLoginUserInfo().getCommunityName());
+        }
+        return r;
     }
 
     /**
@@ -164,10 +176,15 @@
      * @param patrolRecordId 巡查记录id
      * @return 隐患报告详情查询结果
      */
-    @ApiOperation(value = "根据巡查记录id查询隐患报告详情")
+    @ApiOperation(value = "根据巡查记录id查询隐患报告详情", response = ComSwDangerReportVO.class)
     @GetMapping("/detailDangerReportByPrId")
     public R detailDangerReportByPrId(@RequestParam(value = "patrolRecordId") Long patrolRecordId) {
-        return communityService.detailDangerReportByPrId(patrolRecordId);
+        R r = communityService.detailDangerReportByPrId(patrolRecordId);
+        if (R.isOk(r)) {
+            ComSwDangerReportVO reportVO = JSONObject.parseObject(JSONObject.toJSONString(r.getData()), ComSwDangerReportVO.class);
+            reportVO.setCommunityName(this.getLoginUserInfo().getCommunityName());
+        }
+        return r;
     }
 
     /**
@@ -269,6 +286,17 @@
     }
 
     /**
+     * 根据id查询值班表
+     * @param rotaId 值班表id
+     * @return 值班表详情
+     */
+    @GetMapping("/detailRota")
+    @ApiOperation(value = "根据id查询值班表", response = ComSwRotaVO.class)
+    public R detailRota(@RequestParam("rotaId") Long rotaId){
+        return communityService.detailRota(rotaId);
+    }
+
+    /**
      * 新增值班表
      * @param comSwRotaSaveDTOs 新增参数
      * @return 新增结果
@@ -328,5 +356,23 @@
         return partyBuildingService.getTotlePerson(param,communityId);
     }
 
+    @ApiOperation(value = "excel导入值班表")
+    @PostMapping(value = "/serve/import", consumes = "multipart/*", headers = "content-type=multipart/form-date")
+    public R downloadRotaTemplate(@RequestParam MultipartFile file, HttpServletRequest request) {
+        //获取文件名
+        String fileName = file.getOriginalFilename();
+        log.info("传入文件名字【{}】", fileName);
+        InputStream inputStream = null;
+        try {
+            inputStream = file.getInputStream();
+            ComSwRotaExcelListen comSwRotaExcelListen = new ComSwRotaExcelListen(communityService, this.getCommunityId());
+            EasyExcel.read(inputStream, ComSwRotaExcelVO.class, comSwRotaExcelListen).sheet().doRead();
+        } catch (IOException e) {
+            log.error("导入模板失败【{}】", e.getMessage());
+            e.printStackTrace();
+        }
+        return R.ok();
+    }
+
 }
 
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComSwPatrolRecordApi.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComSwPatrolRecordApi.java
index 5be004c..80835c8 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComSwPatrolRecordApi.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComSwPatrolRecordApi.java
@@ -3,6 +3,7 @@
 import com.panzhihua.common.model.dtos.community.*;
 import com.panzhihua.common.model.vos.R;
 import com.panzhihua.common.model.vos.community.ComSwPatrolRecordStatisticsVO;
+import com.panzhihua.common.model.vos.community.ComSwRotaExcelVO;
 import com.panzhihua.service_community.dao.ComSwSafetyWorkRecordDAO;
 import com.panzhihua.service_community.service.ComSwDangerReportService;
 import com.panzhihua.service_community.service.ComSwPatrolRecordService;
@@ -189,6 +190,16 @@
     }
 
     /**
+     * 根据id查询值班表
+     * @param rotaId 值班表id
+     * @return 值班表详情
+     */
+    @GetMapping("/rota/detail")
+    public R detailRota(@RequestParam("rotaId") Long rotaId){
+        return comSwRotaService.detailRota(rotaId);
+    }
+
+    /**
      * 新增值班表
      * @param comSwRotaSaveDTOs 新增参数
      * @return 新增结果
@@ -225,5 +236,15 @@
     public R getRotaLeaderByDate(@RequestParam(value = "rotaDate") String rotaDate){
         return comSwRotaService.getRotaLeaderByDate(rotaDate);
     }
+
+    /**
+     * 批量导入值班表
+     *
+     * @param list 值班表集合
+     */
+    @PostMapping("/rota/import")
+    public R listSaveSwRotaExcelVO(@RequestBody List<ComSwRotaExcelVO> list, @RequestParam("communityId") Long communityId){
+        return comSwRotaService.listSaveSwRotaExcelVO(list, communityId);
+    }
 }
 
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwRotaDAO.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwRotaDAO.java
index 6d7562c..b510b80 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwRotaDAO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwRotaDAO.java
@@ -12,6 +12,8 @@
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @auther txb
  * @create 2021-07-30 09:48:54
@@ -27,4 +29,10 @@
      */
     IPage<ComSwRotaVO> pageRota(Page page, @Param("comSwRotaPageDTO") ComSwRotaPageDTO comSwRotaPageDTO);
 
+    /**
+     * 根据电话查询teamId
+     * @param teamPhone 查询参数
+     * @return teamId
+     */
+    String getTeamIdsByTeamPhone(@Param("teamPhone") String teamPhone);
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwRotaService.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwRotaService.java
index e38cf3a..c0cc5d3 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwRotaService.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwRotaService.java
@@ -4,7 +4,9 @@
 import com.panzhihua.common.model.dtos.community.ComSwRotaPageDTO;
 import com.panzhihua.common.model.dtos.community.ComSwRotaSaveDTO;
 import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.model.vos.community.ComSwRotaExcelVO;
 import com.panzhihua.service_community.model.dos.ComSwRotaDO;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -26,6 +28,12 @@
      */
     R pageRota(ComSwRotaPageDTO comSwRotaPageDTO);
 
+    /**
+     * 根据id查询值班表
+     * @param rotaId 值班表id
+     * @return 值班表详情
+     */
+    R detailRota(Long rotaId);
     /**
      * 新增值班表
      * @param comSwRotaSaveDTOs 新增参数
@@ -58,4 +66,11 @@
      */
     R getTotlePerson(String param,Long communityId);
 
+    /**
+     * 批量导入值班表
+     *
+     * @param list 值班表集合
+     */
+    R listSaveSwRotaExcelVO(List<ComSwRotaExcelVO> list, Long communityId);
+
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwDangerReportServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwDangerReportServiceImpl.java
index ad70165..430470e 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwDangerReportServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwDangerReportServiceImpl.java
@@ -214,15 +214,15 @@
     @Override
     public R exportDangerReport(List<Long> dangerReportIds) {
         List<ComSwDangerReportExcelVO> list = comSwDangerReportDAO.exportDangerReport(dangerReportIds);
-        list.forEach(comSwDangerReportExcelVO -> {
-            List<String> patrolUserIds = Arrays.asList(comSwDangerReportExcelVO.getPatrolPerson().split(","));
-            List<String> patrolPhones = new ArrayList<>();
-            for (String userId : patrolUserIds) {
-                LoginUserInfoVO loginUserInfoVO = userService.getUserInfoByUserId(userId).getData();
-                patrolPhones.add(loginUserInfoVO.getPhone());
-            }
-            comSwDangerReportExcelVO.setPatrolPersonPhone(StringUtils.join(patrolPhones,","));
-        });
+//        list.forEach(comSwDangerReportExcelVO -> {
+//            List<String> patrolUserIds = Arrays.asList(comSwDangerReportExcelVO.getPatrolPerson().split(","));
+//            List<String> patrolPhones = new ArrayList<>();
+//            for (String userId : patrolUserIds) {
+//                LoginUserInfoVO loginUserInfoVO = userService.getUserInfoByUserId(userId).getData();
+//                patrolPhones.add(loginUserInfoVO.getPhone());
+//            }
+//            comSwDangerReportExcelVO.setPatrolPersonPhone(StringUtils.join(patrolPhones,","));
+//        });
         return R.ok(list);
     }
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwRotaServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwRotaServiceImpl.java
index e623c1a..6875d1a 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwRotaServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwRotaServiceImpl.java
@@ -10,19 +10,23 @@
 import com.panzhihua.common.model.vos.LoginUserInfoVO;
 import com.panzhihua.common.model.vos.R;
 import com.panzhihua.common.model.vos.community.ComSwPatrolRecordVO;
+import com.panzhihua.common.model.vos.community.ComSwRotaExcelVO;
 import com.panzhihua.common.model.vos.community.ComSwRotaPersonVO;
 import com.panzhihua.common.model.vos.community.ComSwRotaVO;
 import com.panzhihua.common.model.vos.partybuilding.PartyBuildingComPbDynVO;
 import com.panzhihua.common.service.user.UserService;
+import com.panzhihua.common.utlis.DateUtils;
 import com.panzhihua.common.utlis.Snowflake;
 import com.panzhihua.common.utlis.StringUtils;
 import com.panzhihua.service_community.dao.ComOpsAccUserDAO;
+import com.panzhihua.service_community.dao.ComSwPatrolRecordDAO;
 import com.panzhihua.service_community.dao.ComSwRotaDAO;
 import com.panzhihua.service_community.model.dos.ComMngUserTagDO;
 import com.panzhihua.service_community.model.dos.ComSwRotaDO;
 import com.panzhihua.service_community.service.ComSwRotaService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -31,6 +35,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @auther txb
@@ -45,6 +50,9 @@
     private ComSwRotaDAO comSwRotaDAO;
     @Resource
     private UserService userService;
+
+    @Resource
+    private ComSwPatrolRecordDAO comSwPatrolRecordDAO;
 
     @Override
     public R pageRota(ComSwRotaPageDTO comSwRotaPageDTO) {
@@ -61,28 +69,126 @@
         page.setCurrent(pageNum);
 
         IPage<ComSwRotaVO> iPage = comSwRotaDAO.pageRota(page, comSwRotaPageDTO);
+        if (null != iPage.getRecords()) {
+            iPage.getRecords().forEach(comSwRotaVO -> {
+                comSwRotaVO.setWeekDay(DateUtils.dateToWeek(comSwRotaVO.getRotaDate()));
+                StringBuilder leaderNameString = new StringBuilder();
+                StringBuilder leaderPhoneString = new StringBuilder();
+                //值班领导id查询值班领导的名字和电话
+                if(StringUtils.isNotEmpty(comSwRotaVO.getRotaLeader())){
+                    String[] leaderIds = comSwRotaVO.getRotaLeader().split(",");
+                    for (int i = 0; i < leaderIds.length ; i++) {
+                        Map<String,String> leader = comSwPatrolRecordDAO.getPbServiceTeamById(leaderIds[i]);
+                        if(leader != null){
+                            if(i != 0){
+                                leaderNameString.append(",");
+                                leaderPhoneString.append(",");
+                            }
+                            leaderNameString.append(leader.get("name"));
+                            leaderPhoneString.append(leader.get("phone"));
+                        }
+                    }
+                    comSwRotaVO.setLeaderName(leaderNameString.toString());
+                    comSwRotaVO.setLeaderPhone(leaderPhoneString.toString());
+                }
+                //值班人员id查询值班人员的名字和电话
+                StringBuilder personNameString = new StringBuilder();
+                StringBuilder personPhoneString = new StringBuilder();
+                if(StringUtils.isNotEmpty(comSwRotaVO.getRotaPerson())){
+                    String[] personIds = comSwRotaVO.getRotaPerson().split(",");
+                    for (int i = 0; i < personIds.length ; i++) {
+                        Map<String,String> person = comSwPatrolRecordDAO.getPbServiceTeamById(personIds[i]);
+                        if(person != null){
+                            if(i != 0){
+                                personNameString.append(",");
+                                personPhoneString.append(",");
+                            }
+                            personNameString.append(person.get("name"));
+                            personPhoneString.append(person.get("phone"));
+                        }
+                    }
+                    comSwRotaVO.setPersonName(personNameString.toString());
+                    comSwRotaVO.setPersonPhone(personPhoneString.toString());
+                }
+            });
+        }
         return R.ok(iPage);
+    }
+
+    @Override
+    public R detailRota(Long rotaId) {
+        ComSwRotaVO comSwRotaVO = new ComSwRotaVO();
+        ComSwRotaDO comSwRotaDO = comSwRotaDAO.selectById(rotaId);
+        if (null == comSwRotaDO) {
+            return R.fail("该值班表不存在");
+        }
+        BeanUtils.copyProperties(comSwRotaDO,comSwRotaVO);
+        comSwRotaVO.setRotaDate(new SimpleDateFormat("yyyy-MM-dd").format(comSwRotaDO.getRotaDate()));
+        comSwRotaVO.setWeekDay(DateUtils.dateToWeek(comSwRotaVO.getRotaDate()));
+        StringBuilder leaderNameString = new StringBuilder();
+        StringBuilder leaderPhoneString = new StringBuilder();
+        //值班领导id查询值班领导的名字和电话
+        if(StringUtils.isNotEmpty(comSwRotaDO.getRotaLeader())){
+            String[] leaderIds = comSwRotaDO.getRotaLeader().split(",");
+            for (int i = 0; i < leaderIds.length ; i++) {
+                Map<String,String> leader = comSwPatrolRecordDAO.getPbServiceTeamById(leaderIds[i]);
+                if(leader != null){
+                    if(i != 0){
+                        leaderNameString.append(",");
+                        leaderPhoneString.append(",");
+                    }
+                    leaderNameString.append(leader.get("name"));
+                    leaderPhoneString.append(leader.get("phone"));
+                }
+            }
+            comSwRotaVO.setLeaderName(leaderNameString.toString());
+            comSwRotaVO.setLeaderPhone(leaderPhoneString.toString());
+        }
+        //值班人员id查询值班人员的名字和电话
+        StringBuilder personNameString = new StringBuilder();
+        StringBuilder personPhoneString = new StringBuilder();
+        if(StringUtils.isNotEmpty(comSwRotaDO.getRotaPerson())){
+            String[] personIds = comSwRotaDO.getRotaPerson().split(",");
+            for (int i = 0; i < personIds.length ; i++) {
+                Map<String,String> person = comSwPatrolRecordDAO.getPbServiceTeamById(personIds[i]);
+                if(person != null){
+                    if(i != 0){
+                        personNameString.append(",");
+                        personPhoneString.append(",");
+                    }
+                    personNameString.append(person.get("name"));
+                    personPhoneString.append(person.get("phone"));
+                }
+            }
+            comSwRotaVO.setPersonName(personNameString.toString());
+            comSwRotaVO.setPersonPhone(personPhoneString.toString());
+        }
+        return R.ok(comSwRotaVO);
     }
 
     @Override
     public R addRota(List<ComSwRotaSaveDTO> comSwRotaSaveDTOs) {
         comSwRotaSaveDTOs.forEach(comSwRotaSaveDTO -> {
-            try {
                 if (comSwRotaSaveDTO.getId() != null && comSwRotaSaveDTO.getId() != 0) {
                     ComSwRotaDO comSwRotaDO = new ComSwRotaDO();
                     BeanUtils.copyProperties(comSwRotaSaveDTO, comSwRotaDO);
-                    comSwRotaDO.setRotaDate(new SimpleDateFormat("yyyy-MM-dd").parse(comSwRotaSaveDTO.getRotaDate()));
+                    try {
+                        comSwRotaDO.setRotaDate(new SimpleDateFormat("yyyy-MM-dd").parse(comSwRotaSaveDTO.getRotaDate()));
+                    } catch (ParseException e) {
+                        e.printStackTrace();
+                    }
                     comSwRotaDAO.updateById(comSwRotaDO);
                 } else {
                     ComSwRotaDO comSwRotaDO = new ComSwRotaDO();
                     BeanUtils.copyProperties(comSwRotaSaveDTO, comSwRotaDO);
                     comSwRotaDO.setId(Snowflake.getId());
-                    comSwRotaDO.setRotaDate(new SimpleDateFormat("yyyy-MM-dd").parse(comSwRotaSaveDTO.getRotaDate()));
+                    try {
+                        comSwRotaDO.setRotaDate(new SimpleDateFormat("yyyy-MM-dd").parse(comSwRotaSaveDTO.getRotaDate()));
+                    } catch (ParseException e) {
+                        e.printStackTrace();
+                    }
                     comSwRotaDAO.insert(comSwRotaDO);
                 }
-            } catch (ParseException e) {
-                e.printStackTrace();
-            }
         });
         return R.ok();
     }
@@ -107,13 +213,13 @@
         List<ComSwRotaPersonVO> rotaPersons = new ArrayList<>();
         if (null != comSwRotaDO){
             String rotaPerson = comSwRotaDO.getRotaPerson();
-            String rotaPersonName = comSwRotaDO.getPersonName();
             String[] rotaPersonArray = rotaPerson.split(",");
-            String[] rotaPersonNameArray = rotaPersonName.split(",");
             for (int i = 0; i <= rotaPersonArray.length - 1; i++){
                 ComSwRotaPersonVO comSwRotaPersonVO = new ComSwRotaPersonVO();
+                Map<String,String> person = comSwPatrolRecordDAO.getPbServiceTeamById(rotaPersonArray[i]);
                 comSwRotaPersonVO.setId(Long.valueOf(rotaPersonArray[i]));
-                comSwRotaPersonVO.setName(rotaPersonNameArray[i]);
+                comSwRotaPersonVO.setName(person.get("name"));
+                comSwRotaPersonVO.setPhone(Long.valueOf(person.get("phone")));
                 rotaPersons.add(comSwRotaPersonVO);
             }
         }
@@ -131,13 +237,13 @@
         List<ComSwRotaPersonVO> rotaLeaders = new ArrayList<>();
         if (null != comSwRotaDO){
             String rotaPerson = comSwRotaDO.getRotaLeader();
-            String rotaPersonName = comSwRotaDO.getLeaderName();
             String[] rotaPersonArray = rotaPerson.split(",");
-            String[] rotaPersonNameArray = rotaPersonName.split(",");
             for (int i = 0; i <= rotaPersonArray.length - 1; i++){
                 ComSwRotaPersonVO comSwRotaPersonVO = new ComSwRotaPersonVO();
+                Map<String,String> leader = comSwPatrolRecordDAO.getPbServiceTeamById(rotaPersonArray[i]);
                 comSwRotaPersonVO.setId(Long.valueOf(rotaPersonArray[i]));
-                comSwRotaPersonVO.setName(rotaPersonNameArray[i]);
+                comSwRotaPersonVO.setName(leader.get("name"));
+                comSwRotaPersonVO.setPhone(Long.valueOf(leader.get("phone")));
                 rotaLeaders.add(comSwRotaPersonVO);
             }
         }
@@ -148,4 +254,38 @@
     public R getTotlePerson(String param, Long communityId) {
         return userService.listActivityManager(param,communityId);
     }
+
+    @Override
+    public R listSaveSwRotaExcelVO(List<ComSwRotaExcelVO> list, Long communityId) {
+        List<ComSwRotaDO> comSwRotaDOS = new ArrayList<>();
+            list.forEach(comSwRotaExcelVO -> {
+                ComSwRotaDO comSwRotaDO = new ComSwRotaDO();
+                String[] leaderPhones = comSwRotaExcelVO.getLeaderPhone().split(",");
+                List<String> leaderIds = new ArrayList<>();
+                for (String leaderPhone : leaderPhones) {
+                    String id = comSwRotaDAO.getTeamIdsByTeamPhone(leaderPhone);
+                    leaderIds.add(id);
+                }
+
+                String[] personPhones = comSwRotaExcelVO.getPersonPhone().split(",");
+                List<String> personIds = new ArrayList<>();
+                for (String personPhone : personPhones) {
+                    String id = comSwRotaDAO.getTeamIdsByTeamPhone(personPhone);
+                    personIds.add(id);
+                }
+                BeanUtils.copyProperties(comSwRotaExcelVO, comSwRotaDO);
+                comSwRotaDO.setId(Snowflake.getId());
+                comSwRotaDO.setCommunityId(communityId);
+                try {
+                comSwRotaDO.setRotaDate(new SimpleDateFormat("yyyy-MM-dd").parse(comSwRotaExcelVO.getRotaDate()));
+                } catch (ParseException e) {
+                    e.printStackTrace();
+                }
+                comSwRotaDO.setRotaLeader(StringUtils.join(leaderIds, ","));
+                comSwRotaDO.setRotaPerson(StringUtils.join(personIds, ","));
+                comSwRotaDOS.add(comSwRotaDO);
+            });
+        this.saveBatch(comSwRotaDOS);
+        return R.ok();
+    }
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwDangerReportMapper.xml b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwDangerReportMapper.xml
index 5b976da..5d8b27f 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwDangerReportMapper.xml
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwDangerReportMapper.xml
@@ -137,7 +137,8 @@
 
     <select id="exportDangerReport" resultType="com.panzhihua.common.model.vos.community.ComSwDangerReportExcelVO" parameterType="java.util.List">
         SELECT
-            cspr.patrol_person AS patrolPerson,
+            cspr.person_name AS personName,
+            cspr.person_phone AS personPhone,
             cspr.address,
             csdr.remark,
             csdr.dager_description AS dagerDescription,
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwRotaMapper.xml b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwRotaMapper.xml
index 92a514c..dd18797 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwRotaMapper.xml
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwRotaMapper.xml
@@ -37,11 +37,20 @@
             com_sw_rota csr
         where csr.community_id = #{comSwRotaPageDTO.communityId}
         <if test='comSwRotaPageDTO.rotaPerson != null and comSwRotaPageDTO.rotaPerson != ""'>
-            AND csr.rota_person LIKE concat('%',#{comSwRotaPageDTO.rotaPerson},'%')
+            AND (csr.rota_person LIKE concat('%',#{comSwRotaPageDTO.rotaPerson},'%')
+                or csr.rota_leader LIKE concat('%',#{comSwRotaPageDTO.rotaPerson},'%')
+                )
         </if>
         <if test='comSwRotaPageDTO.phone != null and comSwRotaPageDTO.phone != ""'>
-            AND csr.person_phone LIKE concat('%',#{comSwRotaPageDTO.phone},'%')
+            AND (csr.person_phone LIKE concat('%',#{comSwRotaPageDTO.phone},'%')
+            or csr.leader_phone LIKE concat('%',#{comSwRotaPageDTO.phone},'%')
+            )
         </if>
         order by csr.create_at desc
     </select>
+    <select id="getTeamIdsByTeamPhone" resultType="java.lang.String">
+        select id
+        from com_pb_service_team
+        where phone = #{teamPhone}
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.7.1