From f04c1a5a967679b9984926af72be8a3d3f26c2bb Mon Sep 17 00:00:00 2001
From: XiaoRuby <3114200645@qq.com>
Date: 星期二, 25 七月 2023 15:44:10 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductListMapper.java             |    2 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/PlanDto.java                               |   17 ++++
 inspection-server/src/main/resources/mapper/InspectionProductListMapper.xml                                    |   12 ++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java                   |   38 +++++++++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialListController.java    |   12 +-
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java                      |   43 ++++++++++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java                            |    9 ++
 inspection-server/src/main/resources/mapper/PlanMapper.xml                                                     |   11 ++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java             |   33 ++++++--
 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java                              |    4 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionMaterialListServiceImpl.java |    5 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Plan.java                                      |   13 ++-
 12 files changed, 174 insertions(+), 25 deletions(-)

diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialListController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialListController.java
index fb71110..b59d454 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialListController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialListController.java
@@ -21,7 +21,7 @@
 
 /**
  * <p>
- *  鍓嶇鎺у埗鍣�
+ * 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
@@ -41,7 +41,7 @@
         inspectionMaterialList.setState(1);
         Object object = RedisUtil.get(token);
         Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
-        return Result.success(inspectionMaterialListService.addInspectionMaterialList(inspectionMaterialList, ""+unmarshal.get("id")));
+        return Result.success(inspectionMaterialListService.addInspectionMaterialList(inspectionMaterialList, "" + unmarshal.get("id")));
     }
 
     @ApiOperation("鍒犻櫎鏍峰搧")
@@ -57,8 +57,8 @@
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "inspectionMaterialListId", value = "鏍峰搧ID", dataTypeClass = Integer.class, required = true),
     })
-    @PostMapping("/selectInspectionMaterialListById")
-    public Result selectInspectionMaterialListById(int inspectionMaterialListId) throws Exception {
+    @PutMapping("/selectInspectionMaterialListById/{inspectionMaterialListId}")
+    public Result selectInspectionMaterialListById(@PathVariable Integer inspectionMaterialListId) {
         return Result.success(inspectionMaterialListService.getById(inspectionMaterialListId));
     }
 
@@ -67,8 +67,8 @@
             @ApiImplicitParam(name = "inspectionMaterialListId", value = "鏍峰搧ID", dataTypeClass = Integer.class, required = true),
     })
     @PutMapping("/updateInspectionMaterialList/{inspectionMaterialListId}")
-    public Result updateInspectionMaterialList(@PathVariable Integer inspectionMaterialListId, @RequestBody InspectionMaterialList inspectionMaterialList) throws Exception {
-        return Result.success(inspectionMaterialListService.updateInspectionMaterialList(inspectionMaterialListId,inspectionMaterialList));
+    public Result updateInspectionMaterialList(@PathVariable Integer inspectionMaterialListId, @RequestBody InspectionMaterialList inspectionMaterialList) {
+        return Result.success(inspectionMaterialListService.updateInspectionMaterialList(inspectionMaterialListId, inspectionMaterialList));
     }
 
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java
index b587e5c..4067891 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java
@@ -1,9 +1,16 @@
 package com.yuanchu.limslaboratory.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.yuanchu.limslaboratory.pojo.Plan;
+import com.yuanchu.limslaboratory.service.PlanService;
+import com.yuanchu.limslaboratory.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
 
 /**
  * <p>
@@ -13,8 +20,40 @@
  * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
  * @since 2023-07-17
  */
+@Api(tags = "妫�楠屾ā鍧�")
 @RestController
 @RequestMapping("/plan")
 public class PlanController {
 
+    @Resource
+    private PlanService planService;
+
+    @ApiOperation("鏌ヨ鎵�鏈夋楠岃鍒掕〃")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pageSize", value = "椤垫暟", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "countSize", value = "鏉℃暟/椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "state", value = "鐘舵��(涓虹┖=寰呭垎閰�)", dataTypeClass = Integer.class)
+    })
+    @GetMapping("/selectAllPlan")
+    public Result selectAllPlan(int pageSize, int countSize, Integer state) {
+        return Result.success(planService.selectAllPlan(pageSize, countSize, state));
+    }
+
+    @ApiOperation("鏌ヨ妫�楠岃鍒掗噷闈㈢殑鍒嗛厤淇℃伅")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "id", value = "鏍峰搧缂栧彿", dataTypeClass = Integer.class, required = true)
+    })
+    @PutMapping("/selectPlanById/{id}")
+    public Result selectPlanById(@PathVariable Integer id) {
+        return Result.success(planService.selectById(id));
+    }
+
+    @ApiOperation("浣滃簾妫�楠岃鍒�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "id", value = "妫�楠岃鍒扞D", dataTypeClass = Integer.class, required = true),
+    })
+    @PostMapping("/delPlan")
+    public Result delPlan(Integer id) {
+        return Result.success(planService.delPlan(id));
+    }
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductListMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductListMapper.java
index ebe00d3..da82355 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductListMapper.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/InspectionProductListMapper.java
@@ -21,4 +21,6 @@
 
     int addInspectionProductList(List<InspectionProductList> list);
 
+    //鏍规嵁鏍峰搧id鏌ヨ妫�楠岄」鐩�
+    List<InspectionProductList> selectByMaterId(Integer id);
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java
index cc21ce2..444fcf7 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java
@@ -2,6 +2,9 @@
 
 import com.yuanchu.limslaboratory.pojo.Plan;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.limslaboratory.pojo.dto.PlanDto;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,5 @@
  */
 public interface PlanMapper extends BaseMapper<Plan> {
 
+    List<PlanDto> selectAllPlan(int pageSize, int countSize, Integer state);
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Plan.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Plan.java
index f276a3c..9593346 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Plan.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Plan.java
@@ -4,14 +4,12 @@
 import java.io.Serializable;
 import java.util.Date;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
+import lombok.*;
+import lombok.experimental.Accessors;
 
 /**
  * <p>
@@ -22,12 +20,17 @@
  * @since 2023-07-17
  */
 @Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
 @EqualsAndHashCode(callSuper = false)
 @ApiModel(value="Plan瀵硅薄", description="")
 public class Plan implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    @TableId(value = "id", type = IdType.AUTO)
     @ApiModelProperty(value = "璁″垝缂栧彿")
     private Integer id;
 
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/PlanDto.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/PlanDto.java
new file mode 100644
index 0000000..7492631
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/PlanDto.java
@@ -0,0 +1,17 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+
+import com.yuanchu.limslaboratory.pojo.Plan;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+public class PlanDto extends Plan implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "鎶ユ绫诲瀷")
+    private Integer type;
+    @ApiModelProperty(value = "鎶ユ浜�")
+    private String userName;
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java
index 688c602..485acd4 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java
@@ -1,7 +1,11 @@
 package com.yuanchu.limslaboratory.service;
 
+import com.yuanchu.limslaboratory.pojo.InspectionProductList;
 import com.yuanchu.limslaboratory.pojo.Plan;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.limslaboratory.pojo.dto.PlanDto;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,9 @@
  */
 public interface PlanService extends IService<Plan> {
 
+    List<PlanDto> selectAllPlan(int pageSize, int countSize, Integer state);
+
+    boolean delPlan(Integer id);
+
+    List<InspectionProductList> selectById(Integer id);
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionMaterialListServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionMaterialListServiceImpl.java
index 548330f..c7ed1f0 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionMaterialListServiceImpl.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionMaterialListServiceImpl.java
@@ -66,23 +66,28 @@
         return judge>0&&judge2>0?inspectionMaterialList:null;
     }
 
+    //鏍规嵁鏍峰搧id鍒犻櫎妫�楠屾牱鍝�
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean delInspectionMaterialListByInsId(int inspectionMaterialListId) {
+        //鍒犻櫎妫�楠屾牱鍝�
         InspectionMaterialList list = new InspectionMaterialList();
         list.setState(0);
         list.setId(inspectionMaterialListId);
         int judge1 = inspectionMaterialListMapper.updateById(list);
+        //鍒犻櫎鏍峰搧妫�楠岄」鐩�
         UpdateWrapper<InspectionProductList> wrapper = new UpdateWrapper<>();
         wrapper.eq("inspection_material_list_id", inspectionMaterialListId).set("state", 0);
         int judge2 = inspectionProductListMapper.update(new InspectionProductList(), wrapper);
         return judge1>0&&judge2>0;
     }
 
+    //淇敼鏍峰搧淇℃伅
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean updateInspectionMaterialList( Integer inspectionMaterialListId,InspectionMaterialList inspectionMaterialList) {
         LambdaUpdateWrapper<InspectionMaterialList> updateWrapper = new LambdaUpdateWrapper<>();
+        //鏍规嵁鏍峰搧id鏌ヨ
         updateWrapper.eq(InspectionMaterialList::getId,inspectionMaterialListId);
         int judge = inspectionMaterialListMapper.update(inspectionMaterialList, updateWrapper);
         return judge>0;
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
index a85c835..d548a76 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
@@ -1,10 +1,13 @@
 package com.yuanchu.limslaboratory.service.impl;
 
+
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.yuanchu.limslaboratory.mapper.InspectionMaterialListMapper;
+import com.yuanchu.limslaboratory.mapper.PlanMapper;
 import com.yuanchu.limslaboratory.pojo.Inspection;
 import com.yuanchu.limslaboratory.mapper.InspectionMapper;
 import com.yuanchu.limslaboratory.pojo.InspectionMaterialList;
-import com.yuanchu.limslaboratory.pojo.InspectionProductList;
+import com.yuanchu.limslaboratory.pojo.Plan;
 import com.yuanchu.limslaboratory.pojo.dto.InspectionDto;
 import com.yuanchu.limslaboratory.service.InspectionService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -29,6 +32,10 @@
 
     @Resource
     private InspectionMapper inspectionMapper;
+    @Resource
+    private PlanMapper planMapper;
+    @Resource
+    InspectionMaterialListMapper inspectionMaterialListMapper;
 
     @Override
     public Inspection addInspection(String userName,int type) {
@@ -39,6 +46,7 @@
         return judge>0?inspection:null;
     }
 
+    //鏌ヨ鎵�鏈夋楠屽崟鍒楄〃
     @Override
     public Map selectAllInspection(int pageSize, int countSize, Integer state) {
         Map map = new HashMap();
@@ -47,23 +55,30 @@
         return map;
     }
 
+    //浣滃簾鐢宠妫�楠屽崟
     @Override
     public boolean delInspectionByInsId(String inspectionId) {
-        Inspection inspection = new Inspection();
+        //妫�楠屽崟浣滃簾
+        Inspection inspection = inspectionMapper.selectById(inspectionId);
         inspection.setState(0);
-        inspection.setId(inspectionId);
-        int judge = inspectionMapper.updateById(inspection);
-        return judge>0;
-
+        int judge1 = inspectionMapper.updateById(inspection);
+        //妫�楠屾牱鍝佷綔搴�
+        UpdateWrapper<InspectionMaterialList> wrapper = new UpdateWrapper<>();
+        wrapper.eq("inspection_id", inspectionId).set("state", 0);
+        int judge2 = inspectionMaterialListMapper.update(new InspectionMaterialList(),wrapper);
+        return judge1>0&&judge2>0;
     }
 
+    //鎻愪氦鐢宠妫�楠屽崟
     @Override
     public boolean subInspectionByInsId(String inspectionId) {
-        Inspection inspection = new Inspection();
+        Inspection inspection = inspectionMapper.selectById(inspectionId);
+        //鐘舵�佹敼涓哄凡鎻愪氦2
         inspection.setState(2);
-        inspection.setId(inspectionId);
-        inspection.setInspectStartTime(LocalDateTime.now());
         int judge = inspectionMapper.updateById(inspection);
+        //璁″垝琛ㄦ柊澧�
+        Plan plan = Plan.builder().inspectionId(inspectionId).state(1).build();
+        planMapper.insert(plan);
         return judge>0;
     }
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java
index ba9c8cf..e3e23a9 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java
@@ -1,10 +1,18 @@
 package com.yuanchu.limslaboratory.service.impl;
 
+import com.yuanchu.limslaboratory.mapper.InspectionMaterialListMapper;
+import com.yuanchu.limslaboratory.mapper.InspectionProductListMapper;
+import com.yuanchu.limslaboratory.pojo.InspectionMaterialList;
+import com.yuanchu.limslaboratory.pojo.InspectionProductList;
 import com.yuanchu.limslaboratory.pojo.Plan;
 import com.yuanchu.limslaboratory.mapper.PlanMapper;
+import com.yuanchu.limslaboratory.pojo.dto.PlanDto;
 import com.yuanchu.limslaboratory.service.PlanService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +25,34 @@
 @Service
 public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements PlanService {
 
+    @Resource
+    PlanMapper planMapper;
+
+    @Resource
+    InspectionMaterialListMapper inspectionMaterialListMapper;
+
+    @Resource
+    InspectionProductListMapper inspectionProductListMapper;
+
+    //鏌ヨ鎵�鏈夋楠岃鍒�
+    @Override
+    public List<PlanDto> selectAllPlan(int pageSize, int countSize, Integer state) {
+        return planMapper.selectAllPlan((pageSize - 1) * countSize,pageSize * countSize, state);
+    }
+
+    //浣滃簾妫�楠岃鍒�
+    @Override
+    public boolean delPlan(Integer id) {
+        Plan plan = planMapper.selectById(id);
+        //鐘舵�佹敼涓轰綔搴�0
+        plan.setState(0);
+        int judge = planMapper.updateById(plan);
+        return judge>0;
+    }
+
+    //鏌ヨ妫�楠岃鍒掗噷闈㈢殑鍒嗛厤淇℃伅
+    @Override
+    public List<InspectionProductList> selectById(Integer id) {
+       return inspectionProductListMapper.selectByMaterId(id);
+    }
 }
diff --git a/inspection-server/src/main/resources/mapper/InspectionProductListMapper.xml b/inspection-server/src/main/resources/mapper/InspectionProductListMapper.xml
index 78af136..d323a95 100644
--- a/inspection-server/src/main/resources/mapper/InspectionProductListMapper.xml
+++ b/inspection-server/src/main/resources/mapper/InspectionProductListMapper.xml
@@ -2,10 +2,18 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.yuanchu.limslaboratory.mapper.InspectionProductListMapper">
     <insert id="addInspectionProductList">
-        INSERT INTO inspection_product_list (name, method, ask, unit, required, internal, create_time, update_time,inspection_material_list_id, user_id) VALUES
+        INSERT INTO inspection_product_list (name, method, ask, unit, required, internal, create_time,
+        update_time,inspection_material_list_id, user_id) VALUES
         <foreach collection="list" separator="," item="i">
-            (#{i.name}, #{i.method}, #{i.ask}, #{i.unit}, #{i.required}, #{i.internal}, #{i.createTime}, #{i.updateTime}, #{i.inspectionMaterialListId},
+            (#{i.name}, #{i.method}, #{i.ask}, #{i.unit}, #{i.required}, #{i.internal}, #{i.createTime},
+            #{i.updateTime}, #{i.inspectionMaterialListId},
             #{i.userId})
         </foreach>
     </insert>
+
+    <select id="selectByMaterId" resultType="com.yuanchu.limslaboratory.pojo.InspectionProductList">
+        select name,method,ask,unit,required,internal, start_time, end_time, user_id, instrument_id
+        from lims_laboratory.inspection_product_list
+        where inspection_material_list_id = #{id}
+    </select>
 </mapper>
diff --git a/inspection-server/src/main/resources/mapper/PlanMapper.xml b/inspection-server/src/main/resources/mapper/PlanMapper.xml
index 23b2b8b..275cc2f 100644
--- a/inspection-server/src/main/resources/mapper/PlanMapper.xml
+++ b/inspection-server/src/main/resources/mapper/PlanMapper.xml
@@ -1,5 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.yuanchu.limslaboratory.mapper.PlanMapper">
-
+    <select id="selectAllPlan" resultType="com.yuanchu.limslaboratory.pojo.dto.PlanDto">
+        select p.id,results,p.state,p.create_time,p.inspection_id,user_id,results,type,user_name
+        from lims_laboratory.plan p right join lims_laboratory.inspection i
+        on i.id=p.inspection_id
+        <if test="state!=null">
+            where p.state = #{state}
+        </if>
+        order by p.create_time desc
+        limit #{pageSize},#{countSize}
+    </select>
 </mapper>

--
Gitblit v1.9.3