From d8475b8670b6b4cbcd1bc9e57d30a6f433d206ab Mon Sep 17 00:00:00 2001
From: DELL <1525436766@qq.com>
Date: 星期一, 23 六月 2025 23:33:54 +0800
Subject: [PATCH] Merge branch 'master' of http://118.89.139.230:10101/r/powerIntelligenceSystem

---
 src/main/java/com/whyc/service/BatttestdataInfService.java     |    1 
 src/main/java/com/whyc/service/SubTablePageInfoService.java    |   54 ++++++++++
 src/main/java/com/whyc/controller/BattCompareController.java   |   48 +++++++++
 src/main/java/com/whyc/pojo/db_param/AlmSummaryParam.java      |    5 +
 src/main/java/com/whyc/constant/AnalysisEnum.java              |   49 +++++++++
 src/main/java/com/whyc/service/PwrdevHistorydataIdService.java |   40 ++++++++
 src/main/resources/mapper/BattInfMapper.xml                    |    6 +
 src/main/java/com/whyc/controller/RealContoller.java           |    8 +
 src/main/java/com/whyc/pojo/db_param/AlmAnalysisParam.java     |   16 +++
 src/main/java/com/whyc/service/AlmAnalysisParamService.java    |   16 ++
 10 files changed, 239 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/whyc/constant/AnalysisEnum.java b/src/main/java/com/whyc/constant/AnalysisEnum.java
new file mode 100644
index 0000000..a215fa0
--- /dev/null
+++ b/src/main/java/com/whyc/constant/AnalysisEnum.java
@@ -0,0 +1,49 @@
+package com.whyc.constant;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum AnalysisEnum {
+    ALARM_1(1,"鐩存祦鐢垫簮"),
+    ALARM_2(2,"閫氫俊鐢垫簮"),
+    ALARM_3(3,"閰嶇綉鐢垫簮"),
+    ALARM_4(4,"钃勭數姹犵粍"),
+    ALARM_5(5,"璁惧"),
+    ALARM_6(6,"ups鐢垫簮"),
+    ;
+
+    private Integer stateId;
+    private String stateName;
+
+    AnalysisEnum(Integer stateId, String stateName) {
+        this.stateId = stateId;
+        this.stateName = stateName;
+    }
+
+    public Integer getStateId() {
+        return stateId;
+    }
+
+    public String getStateName() {
+        return stateName;
+    }
+
+    public static String getValue(Integer stateId) {
+        if(stateId==null){
+            return "";
+        }
+        for (AnalysisEnum ele : values()) {
+            if(ele.getStateId().equals(stateId)) {
+                return ele.getStateName();
+            }
+        }
+        return null;
+    }
+    public static Map<Integer,String> getOpInfo() {
+        Map<Integer,String> map=new HashMap<>();
+        for (AnalysisEnum logOpEnum : AnalysisEnum.values()) {
+            map.put(logOpEnum.getStateId(),logOpEnum.getStateName());
+        }
+        return map;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/controller/BattCompareController.java b/src/main/java/com/whyc/controller/BattCompareController.java
new file mode 100644
index 0000000..f8ea218
--- /dev/null
+++ b/src/main/java/com/whyc/controller/BattCompareController.java
@@ -0,0 +1,48 @@
+package com.whyc.controller;
+
+import com.whyc.dto.Response;
+import com.whyc.dto.Statistic.BattCompareStic;
+import com.whyc.pojo.db_user.User;
+import com.whyc.service.BatttestdataInfService;
+import com.whyc.util.ActionUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@Api(tags = "钃勭數姹犲姣斿垎鏋愮鐞�")
+@RequestMapping("compare")
+public class BattCompareController {
+
+    @Autowired
+    private BatttestdataInfService battTinfService;
+
+
+    @ApiOperation(value = "钃勭數姹犵粍瀵规瘮鍒嗘瀽鐣岄潰锛堝悓涓�鍝佺墝鍚屼竴鏃堕棿锛�(1.2.15)")
+    @PostMapping("getBattCompare15Statistic")
+    public Response getBattCompare15Statistic(@RequestBody BattCompareStic stic){
+        User uinf= ActionUtil.getUser();
+        stic.setUid(uinf.getId());
+        return battTinfService.getBattCompare15Statistic(stic);
+    }
+
+    @ApiOperation(value = "钃勭數姹犵粍瀵规瘮鍒嗘瀽鐣岄潰锛堜笉鍚屽搧鐗屽悓涓�鏃堕棿锛�(1.2.16)")
+    @PostMapping("getBattCompare16Statistic")
+    public Response getBattCompare16Statistic(@RequestBody BattCompareStic stic){
+        User uinf= ActionUtil.getUser();
+        stic.setUid(uinf.getId());
+        return battTinfService.getBattCompare16Statistic(stic);
+    }
+
+    @ApiOperation(value = "钃勭數姹犵粍瀵规瘮鍒嗘瀽鐣岄潰锛堝悓涓�鍝佺墝涓嶅悓鏃堕棿锛�(1.2.17)")
+    @PostMapping("getBattCompare17Statistic")
+    public Response getBattCompare17Statistic(@RequestBody BattCompareStic stic){
+        User uinf= ActionUtil.getUser();
+        stic.setUid(uinf.getId());
+        return battTinfService.getBattCompare17Statistic(stic);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/controller/RealContoller.java b/src/main/java/com/whyc/controller/RealContoller.java
index 860c52c..1855bb5 100644
--- a/src/main/java/com/whyc/controller/RealContoller.java
+++ b/src/main/java/com/whyc/controller/RealContoller.java
@@ -62,10 +62,16 @@
         return tdataIdService.getTinfDataWithTestRecordCount(battgroupId,testRecordCount,recordNum,granularity);
     }
 
-    @ApiOperation(value = "鍘嗗彶瀹炴椂鏌ヨ")
+    @ApiOperation(value = "鐢垫睜鍘嗗彶瀹炴椂鏌ヨ")
     @GetMapping("getBattRealDataHis")
     public Response getBattRealDataHis(@RequestParam Integer battgroupId,@RequestParam Integer granularity
             ,@RequestParam String startTime,@RequestParam String  endTime) throws ParseException, InterruptedException {
         return battRealdataIdService.getBattRealDataHis(battgroupId,granularity,startTime,endTime);
     }
+    @ApiOperation(value = "鐢垫簮鍘嗗彶瀹炴椂鏌ヨ")
+    @GetMapping("getPwrRealDataHis")
+    public Response getPwrRealDataHis(@RequestParam Integer powerId,@RequestParam Integer granularity
+            ,@RequestParam String startTime,@RequestParam String  endTime) throws ParseException, InterruptedException {
+        return pwrdevHistorydataIdService.getPwrRealDataHis(powerId,granularity,startTime,endTime);
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/whyc/pojo/db_param/AlmAnalysisParam.java b/src/main/java/com/whyc/pojo/db_param/AlmAnalysisParam.java
index 06a3fd0..d9c42d4 100644
--- a/src/main/java/com/whyc/pojo/db_param/AlmAnalysisParam.java
+++ b/src/main/java/com/whyc/pojo/db_param/AlmAnalysisParam.java
@@ -1,6 +1,7 @@
 package com.whyc.pojo.db_param;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -41,11 +42,17 @@
     @ApiModelProperty(value = "涓诲瓧娈电被鍨媅1:鐩存祦锛�2锛氶�氫俊锛�3閰嶇綉  4:鐢垫睜 5:璁惧]")
     private Integer mainFieldType;
 
+    @TableField(exist = false)
+    private String mainFieldTypeName;
+
     @ApiModelProperty(value = "娆¤瀛楁1鍙傝�冮厤缃�")
     private String minorField1;
 
     @ApiModelProperty(value = "瀛楁1绫诲瀷[1:鐩存祦锛�2锛氶�氫俊锛�3閰嶇綉  4:鐢垫睜 5:璁惧]")
     private Integer minorField1Type;
+
+    @TableField(exist = false)
+    private String minorField1TypeName;
 
     @ApiModelProperty(value = "娆¤瀛楁2鍙傝�冮厤缃�")
     private String minorField2;
@@ -53,17 +60,26 @@
     @ApiModelProperty(value = "瀛楁2绫诲瀷[1:鐩存祦锛�2锛氶�氫俊锛�3閰嶇綉  4:鐢垫睜 5:璁惧]")
     private Integer minorField2Type;
 
+    @TableField(exist = false)
+    private String minorField2TypeName;
+
     @ApiModelProperty(value = "娆¤瀛楁3鍙傝�冮厤缃�")
     private String minorField3;
 
     @ApiModelProperty(value = "瀛楁3绫诲瀷[1:鐩存祦锛�2锛氶�氫俊锛�3閰嶇綉  4:鐢垫睜 5:璁惧]")
     private Integer minorField3Type;
 
+    @TableField(exist = false)
+    private String minorField3TypeName;
+
     @ApiModelProperty(value = "娆¤瀛楁4鍙傝�冮厤缃�")
     private String minorField4;
 
     @ApiModelProperty(value = "瀛楁4绫诲瀷[1:鐩存祦锛�2锛氶�氫俊锛�3閰嶇綉  4:鐢垫睜 5:璁惧]")
     private Integer minorField4Type;
 
+    @TableField(exist = false)
+    private String minorField4TypeName;
+
 
 }
diff --git a/src/main/java/com/whyc/pojo/db_param/AlmSummaryParam.java b/src/main/java/com/whyc/pojo/db_param/AlmSummaryParam.java
index d823cde..cc7064c 100644
--- a/src/main/java/com/whyc/pojo/db_param/AlmSummaryParam.java
+++ b/src/main/java/com/whyc/pojo/db_param/AlmSummaryParam.java
@@ -1,6 +1,7 @@
 package com.whyc.pojo.db_param;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -35,6 +36,10 @@
     @ApiModelProperty(value = "瀛楁绫诲瀷[1:鐩存祦锛�2锛氶�氫俊锛�3閰嶇綉  4:鐢垫睜 5:璁惧]")
     private Integer fieldType;
 
+    @ApiModelProperty(value = "瀛楁绫诲瀷[1:鐩存祦锛�2锛氶�氫俊锛�3閰嶇綉  4:鐢垫睜 5:璁惧]")
+    @TableField(exist = false)
+    private String fieldTypeName;
+
     @ApiModelProperty(value = "瀛楁灞炴��")
     private String fieldName;
 
diff --git a/src/main/java/com/whyc/service/AlmAnalysisParamService.java b/src/main/java/com/whyc/service/AlmAnalysisParamService.java
index eab8387..a4b6175 100644
--- a/src/main/java/com/whyc/service/AlmAnalysisParamService.java
+++ b/src/main/java/com/whyc/service/AlmAnalysisParamService.java
@@ -1,6 +1,7 @@
 package com.whyc.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.whyc.constant.AnalysisEnum;
 import com.whyc.dto.AnalysisAlm.AnalysisChangeRes;
 import com.whyc.dto.AnalysisAlm.ResAnalysis;
 import com.whyc.dto.Real.RealDateDTO;
@@ -47,6 +48,13 @@
         wrapper.eq("alm_id",almId);
         wrapper.last("limit 1");
         AlmAnalysisParam param= mapper.selectOne(wrapper);
+        if(param!=null){
+            param.setMainFieldTypeName(AnalysisEnum.getValue(param.getMainFieldType()));
+            param.setMinorField1TypeName(AnalysisEnum.getValue(param.getMinorField1Type()));
+            param.setMinorField2TypeName(AnalysisEnum.getValue(param.getMinorField2Type()));
+            param.setMinorField3TypeName(AnalysisEnum.getValue(param.getMinorField3Type()));
+            param.setMinorField4TypeName(AnalysisEnum.getValue(param.getMinorField4Type()));
+        }
         return param;
     }
 
@@ -67,6 +75,7 @@
         if(almAnalysisParam==null||almAnalysisParam.getMainFieldType()==null){
             return new Response().set(1,false,"鏃犲搴斿垎鏋愬睘鎬�");
         }else{
+
             //鍒嗙粍鏌ョ湅闇�瑕佹煡璇㈢數婧�/鐢垫睜瀹炴椂琛ㄧ殑鍝簺鏁版嵁
             Map<String,  Map<String,Object>> groupmap=groupPwrAndBatt(almAnalysisParam);
             Map<String,Object> battMap=groupmap.get("batt");
@@ -86,7 +95,7 @@
                     map.put("pwr",pwrHislist);
                 }
             }
-            return new Response().setIII(1,true, map,mainMap,"棰勮鍒嗘瀽绠$悊-鐢垫簮涓诲睘鎬у拰鍒嗘瀽灞炴��");
+            return new Response().setIIII(1,true, map,mainMap,almAnalysisParam,"棰勮鍒嗘瀽绠$悊-鐢垫簮涓诲睘鎬у拰鍒嗘瀽灞炴��");
         }
     }
     //鍒嗙粍鏌ョ湅闇�瑕佹煡璇㈢數婧�/鐢垫睜瀹炴椂琛ㄧ殑鍝簺鏁版嵁
@@ -243,7 +252,7 @@
                 map.put("pwr",pwrHislist);
             }
         }
-        return new Response().setIII(1,true, map,mainMap,"棰勮鍒嗘瀽绠$悊-鍒囨崲鏃堕棿闂撮殧鍜屽壇灞炴��");
+        return new Response().setIIII(1,true, map,mainMap,almAnalysisParam,"棰勮鍒嗘瀽绠$悊-鍒囨崲鏃堕棿闂撮殧鍜屽壇灞炴��");
     }
     //灏嗗睘鎬ф嫹璐濊嚦almAnalysisParam涓�
     private void copyProperties(AlmAnalysisParam almAnalysisParam, AnalysisChangeRes res) {
@@ -262,6 +271,9 @@
     public Response getAlmSummaryParam() {
         //鎬荤殑灞炴�ч厤缃�
         List<AlmSummaryParam> summaryList=summaryParamService.getInfo();
+        summaryList.forEach(item->{
+            item.setFieldTypeName(AnalysisEnum.getValue(item.getFieldType()));
+        });
         return new Response().setII(1,true,summaryList,"棰勮鍒嗘瀽绠$悊-鏌ヨ鎵�鏈夌殑灞炴�у搴斿叧绯�");
     }
 }
\ No newline at end of file
diff --git a/src/main/java/com/whyc/service/BatttestdataInfService.java b/src/main/java/com/whyc/service/BatttestdataInfService.java
index f763f91..b462679 100644
--- a/src/main/java/com/whyc/service/BatttestdataInfService.java
+++ b/src/main/java/com/whyc/service/BatttestdataInfService.java
@@ -278,7 +278,6 @@
                 if(param.getParamNamePsx().equals("batt_mon_damage_val")){
                     damageValue=param.getParamValue();
                 }
-
             }
         }
         //1鏌ヨ绗﹀悎鏉′欢鐨勭數姹犵粍
diff --git a/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java b/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
index 7c00d39..b39b1f5 100644
--- a/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
+++ b/src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
@@ -261,4 +261,44 @@
             return PwrCapperformanceEnum.PWRSTATE_4.getStateId();
         }
     }
+
+    //鐢垫簮鍘嗗彶瀹炴椂鏌ヨ
+    public Response getPwrRealDataHis(Integer powerId, Integer granularity, String startTime, String endTime) throws InterruptedException, ParseException {
+        //鑾峰彇涓や釜鏃堕棿鍒嗗壊澶氬皯寮犺〃
+        List<List<Date>> monthTimeList = DateUtil.getMonthTime(ThreadLocalUtil.parse(startTime,1),ThreadLocalUtil.parse(endTime,1));
+        List<PwrHisRealDcoutInDto> dataList = new LinkedList<>();
+        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
+        CountDownLatch latch = new CountDownLatch(monthTimeList.size());
+        for (int i = 0; i < monthTimeList.size(); i++) {
+            int finalI = i;
+            Integer finalGranularity = granularity;
+            pool.execute(() -> {
+                int finalII = finalI;
+                Date recordDatetime=monthTimeList.get(finalII).get(0);
+                Date recordDatetime1=monthTimeList.get(finalII).get(1);
+                String table = powerId + "_" + ThreadLocalUtil.format(recordDatetime,2);
+                String tableName="db_data_history.tb_pwrdev_historydata_"+table;
+                //鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦�
+                int tableNum = subTablePageInfoService.judgeTable_pwrhis(table);
+                List<PwrHisRealDcoutInDto> list = new ArrayList();
+                if (tableNum > 0) {
+                    //鑾峰彇鎸囧畾鏃堕棿娈靛唴鏈�澶ф渶灏弐ecordNum纭繚鏁版嵁鐨勫畬鏁�
+                    List recordNums= subTablePageInfoService.getPwrMaxAndMinRecordNum(tableName,recordDatetime,recordDatetime1);
+                    Integer maxRecordNum= 0;
+                    Integer minRecordNum= 0;
+                    if(recordNums.size()>0){
+                        maxRecordNum=(Integer)recordNums.get(0);
+                        minRecordNum=(Integer)recordNums.get(1);
+                    }
+                    list=subTablePageInfoService.getPwrRealDataHis(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum);
+                }
+                dataList.addAll(list);
+                latch.countDown();
+            });
+            sleep(200);
+        }
+        latch.await(10, TimeUnit.MINUTES);
+        List dataListSorted = dataList.stream().sorted(Comparator.comparing(PwrHisRealDcoutInDto::getRecordDatetime)).collect(Collectors.toList());
+        return new Response().setII(1,dataList.size()>0,dataListSorted,"鑾峰彇鍗婂皬鏃跺唴鐩存祦杈撳嚭缁熻");
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/whyc/service/SubTablePageInfoService.java b/src/main/java/com/whyc/service/SubTablePageInfoService.java
index 407bf36..ff2d302 100644
--- a/src/main/java/com/whyc/service/SubTablePageInfoService.java
+++ b/src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -680,6 +680,60 @@
         });
         return list;
     }
+    //鐢垫簮鍘嗗彶瀹炴椂
+    public List<PwrHisRealDcoutInDto> getPwrRealDataHis(String tableName,Integer granularity,Date recordDatetime,Date recordDatetime1,Integer maxRecordNum,Integer minRecordNum) {
+        String sql="select  distinct * " +
+                " from "+tableName+" where record_datetime>='"+ActionUtil.sdf.format(recordDatetime)+"'" +
+                "                    and record_datetime<='"+ActionUtil.sdf.format(recordDatetime1)+
+                "' and (record_num-"+minRecordNum+")%"+granularity+"=0 or record_num="+minRecordNum+" or record_num="+maxRecordNum;
+        sql+=" order by record_datetime asc";
+        List<PwrHisRealDcoutInDto> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
+            @Override
+            public List getResults(ResultSet rs) throws SQLException {
+                List<PwrHisRealDcoutInDto> list=new ArrayList<>();
+                while (rs.next()){
+                    PwrHisRealDcoutInDto data=new PwrHisRealDcoutInDto();
+                    data.setRecordDatetime(rs.getTimestamp("record_datetime"));
+                    data.setMOutputvol(rs.getFloat("m_outputvol"));
+                    data.setM1Outcurr(rs.getFloat("m1_outcurr"));
+                    data.setM2Outcurr(rs.getFloat("m2_outcurr"));
+                    data.setM3Outcurr(rs.getFloat("m3_outcurr"));
+                    data.setM4Outcurr(rs.getFloat("m4_outcurr"));
+                    data.setM5Outcurr(rs.getFloat("m5_outcurr"));
+                    data.setM6Outcurr(rs.getFloat("m6_outcurr"));
+                    data.setM7Outcurr(rs.getFloat("m7_outcurr"));
+                    data.setM8Outcurr(rs.getFloat("m8_outcurr"));
+                    data.setM9Outcurr(rs.getFloat("m9_outcurr"));
+                    data.setM10Outcurr(rs.getFloat("m10_outcurr"));
+                    data.setM11Outcurr(rs.getFloat("m11_outcurr"));
+                    data.setM12Outcurr(rs.getFloat("m12_outcurr"));
+                    data.setM13Outcurr(rs.getFloat("m13_outcurr"));
+                    data.setM14Outcurr(rs.getFloat("m14_outcurr"));
+                    data.setM15Outcurr(rs.getFloat("m15_outcurr"));
+                    data.setM16Outcurr(rs.getFloat("m16_outcurr"));
+                    data.setM1OutVol(rs.getFloat("m1_out_vol"));
+                    data.setM2OutVol(rs.getFloat("m2_out_vol"));
+                    data.setM3OutVol(rs.getFloat("m3_out_vol"));
+                    data.setM4OutVol(rs.getFloat("m4_out_vol"));
+                    data.setM5OutVol(rs.getFloat("m5_out_vol"));
+                    data.setM6OutVol(rs.getFloat("m6_out_vol"));
+                    data.setM7OutVol(rs.getFloat("m7_out_vol"));
+                    data.setM8OutVol(rs.getFloat("m8_out_vol"));
+                    data.setM9OutVol(rs.getFloat("m9_out_vol"));
+                    data.setM10OutVol(rs.getFloat("m10_out_vol"));
+                    data.setM11OutVol(rs.getFloat("m11_out_vol"));
+                    data.setM12OutVol(rs.getFloat("m12_out_vol"));
+                    data.setM13OutVol(rs.getFloat("m13_out_vol"));
+                    data.setM14OutVol(rs.getFloat("m14_out_vol"));
+                    data.setM15OutVol(rs.getFloat("m15_out_vol"));
+                    data.setM16OutVol(rs.getFloat("m16_out_vol"));
+                    list.add(data);
+                }
+                return list;
+            }
+        });
+        return list;
+    }
     //鍘嗗彶娴嬭瘯璁板綍鍏蜂綋鏌愪竴娆℃斁鐢垫暟鎹鎯�
     public List<BatttestdataId> getTinfDataWithTestRecordCount(String tableName, Integer testRecordCount, Integer recordNum, Integer granularity) {
         String sql="select distinct * from "+tableName+" "+
diff --git a/src/main/resources/mapper/BattInfMapper.xml b/src/main/resources/mapper/BattInfMapper.xml
index 3ddd7c3..71b8776 100644
--- a/src/main/resources/mapper/BattInfMapper.xml
+++ b/src/main/resources/mapper/BattInfMapper.xml
@@ -231,6 +231,12 @@
             <if test="stic.product!=null">
                 and tb_batt_inf.product=#{stic.product}
             </if>
+            <if test="stic.inuseStartTime!=null">
+                and tb_batt_inf.inuse_time>=#{stic.inuseStartTime}
+            </if>
+            <if test="stic.inuseEndTime!=null">
+                and tb_batt_inf.inuse_time&lt;=#{stic.inuseEndTimee}
+            </if>
             <if test="stic.uid>100">
                 and tb_batt_inf.station_id in(
                 select distinct station_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr

--
Gitblit v1.9.1