From c71055635df3d75e5dc838a9b66036c591913a13 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期六, 08 七月 2023 18:37:12 +0800
Subject: [PATCH] 管理台bug和用户端

---
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java |  368 ++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 252 insertions(+), 116 deletions(-)

diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
index b4e2b45..c504bbb 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -7,10 +7,10 @@
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.bean.BeanUtils;
 import com.ruoyi.common.core.utils.uuid.IdUtils;
 import com.ruoyi.common.security.utils.CodeFactoryUtil;
 import com.ruoyi.shop.domain.dto.*;
-import com.ruoyi.shop.domain.pojo.ShopTotal;
 import com.ruoyi.shop.domain.pojo.shop.*;
 import com.ruoyi.shop.domain.pojo.task.ShopFile;
 import com.ruoyi.shop.domain.vo.*;
@@ -25,11 +25,7 @@
 import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.domain.poji.sys.SysUser;
 import com.ruoyi.system.api.domain.vo.*;
-import com.ruoyi.system.api.service.RemoteConfigService;
-import com.ruoyi.system.api.service.RemoteMemberService;
-import com.ruoyi.system.api.service.RemoteOrderService;
-import com.ruoyi.system.api.service.RemoteUserService;
-import org.springframework.beans.BeanUtils;
+import com.ruoyi.system.api.service.*;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -98,6 +94,15 @@
     @Resource
     private MemberTaskService memberTaskService;
 
+    @Resource
+    private ShopTransferRecordService shopTransferRecordService;
+
+    @Resource
+    private RemoteUserService remoteUserService;
+
+    @Resource
+    private RemoteSysStaffService remoteSysStaffService;
+
     /**
      * 获取商户详情
      * @param shopId
@@ -142,6 +147,32 @@
         Shop shop = new Shop();
         Boolean newShop = false;
         BigDecimal zeroBig = BigDecimal.ZERO;
+        //验证关联账号唯一
+        String relUserIds = mgtEditShopDto.getRelUserIds();
+        if(StringUtils.isNotBlank(relUserIds)) {
+            String[] relUserIdArray = relUserIds.split(",");
+            ShopRelUser shopRelUser;
+            Long userId;
+            if(mgtEditShopDto.getShopId()!=null){
+                for (String str : relUserIdArray) {
+                    userId = Long.valueOf(str);
+                    shopRelUser = shopRelUserService.getByUserId(userId);
+                    if(shopRelUser!=null&&!shopRelUser.getShopId().equals(mgtEditShopDto.getShopId())){
+                        throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE);
+                    }
+                }
+            }else {
+                for (String str : relUserIdArray) {
+                    userId = Long.valueOf(str);
+                    shopRelUser = shopRelUserService.getByUserId(userId);
+                    if(shopRelUser!=null){
+                        throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE);
+                    }
+                }
+            }
+
+        }
+        //验证商户名唯一
         Shop shopSame = this.getOne(new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag,0).eq(Shop::getShopName,mgtEditShopDto.getShopName()));
         if(mgtEditShopDto.getShopId()!=null){
             if(shopSame!=null&&!Objects.equals(shopSame.getShopId(),mgtEditShopDto.getShopId())){
@@ -171,12 +202,12 @@
             newShop = true;
         }
         BeanUtils.copyProperties(mgtEditShopDto,shop);
-        this.saveOrUpdate(shop);
         //商户编号
         if(mgtEditShopDto.getShopId()==null){
             String shopNo = CodeFactoryUtil.getShopNo();
             shop.setShopNumber(shopNo);
         }
+        this.saveOrUpdate(shop);
         //商户标签
         String shopTagIds = mgtEditShopDto.getShopTagIds();
         if(StringUtils.isNotBlank(shopTagIds)){
@@ -199,13 +230,13 @@
             this.saveOrUpdate(shop);
         }
         //商户归属员工
-        if(shop.getBelongUserId()!=null){
+        /*if(shop.getBelongUserId()!=null){
             SysUser belongSysUser = sysUserService.getSysUser(shop.getBelongUserId()).getData();
             handleShopStaff(shop.getShopId(),belongSysUser);
-        }
+        }*/
         //商户关联人员
-        String relUserIds = mgtEditShopDto.getRelUserIds();
         if(StringUtils.isNotBlank(relUserIds)){
+            shopStaffService.clearShopStaffRelation(shop.getShopId());
             String[] relUserIdArray = relUserIds.split(",");
             ShopRelUser shopRelUser;
             Long userId;
@@ -245,68 +276,82 @@
             }
         }
         if(newShop){
-            //商户账户信息初始化
-            ShopAccount shopAccount = new ShopAccount();
-            shopAccount.setShopId(shop.getShopId());
-            shopAccount.setDelFlag(0);
-            shopAccount.setTotalIncome(new BigDecimal("0"));
-            shopAccount.setTotalDisburse(new BigDecimal("0"));
-            shopAccount.setTotalRefund(new BigDecimal("0"));
-            shopAccount.setTotalProfitsharing(new BigDecimal("0"));
-            shopAccount.setTotalMoney(new BigDecimal("0"));
-            shopAccountService.save(shopAccount);
-            //商户认证信息初始化
-            String authId = IdUtils.simpleUUID();
-            ShopAuthentication shopAuthentication = new ShopAuthentication();
-            shopAuthentication.setAuthId(authId);
-            shopAuthentication.setDelFlag(0);
-            shopAuthentication.setShopId(shop.getShopId());
-            shopAuthenticationService.save(shopAuthentication);
-            //商户分成信息初始化
-            ShopProportion shopProportion = new ShopProportion();
-            shopProportion.setDelFlag(0);
-            shopProportion.setShopId(shop.getShopId());
-            shopProportion.setShopType(shop.getShopType());
-            shopProportion.setProportionPercent(new BigDecimal("100.00"));
-            shopProportion.setUpdateTime(new Date());
-            shopProportion.setUpdateUserId(mgtEditShopDto.getUserId());
-            shopProportionService.save(shopProportion);
-            //商户统计
-            ShopTotal shopTotal = new ShopTotal();
-            shopTotal.setShopId(shop.getShopId());
-            shopTotal.setDelFlag(0);
-            shopTotal.setLastPayMoney(zeroBig);
-            shopTotal.setTotalActivityCount(0);
-            shopTotal.setTotalOrder(0);
-            shopTotal.setTotalCycleOrder(0);
-            shopTotal.setToltaExperienceOrder(0);
-            shopTotal.setTotalServiceOrder(0);
-            shopTotal.setTotalGoodsOrder(0);
-            shopTotal.setTotalServiceCount(0);
-            shopTotal.setUsedServiceCount(0);
-            shopTotal.setUseableServiceCount(0);
-            shopTotal.setTotalCycleService(0);
-            shopTotal.setUsedCycleService(0);
-            shopTotal.setUseableCycleService(0);
-            shopTotal.setTotalCyclePerson(0);
-            shopTotal.setUseableCyclePerson(0);
-            shopTotal.setTotalServiceService(0);
-            shopTotal.setUsedServiceService(0);
-            shopTotal.setUseableServiceService(0);
-            shopTotal.setTotalServicePerson(0);
-            shopTotal.setUseableServicePerson(0);
-            shopTotal.setTotalExperienceService(0);
-            shopTotal.setUsedExperienceService(0);
-            shopTotal.setUseableExperienceService(0);
-            shopTotal.setTotalExperiencePerson(0);
-            shopTotal.setUseableExperiencePerson(0);
-            shopTotal.setTotalOrderMoney(zeroBig);
-            shopTotal.setTotalCycleMoney(zeroBig);
-            shopTotal.setTotalExperienceMoney(zeroBig);
-            shopTotal.setTotalServiceMoney(zeroBig);
-            shopTotal.setTotalGoodsMoney(zeroBig);
-            shopTotalService.save(shopTotal);
+            //生成商户关联记录
+            initNewShop(shop,mgtEditShopDto.getUserId());
         }
+    }
+
+    /**
+     * @description  商户关联类初始化
+     * @author  jqs
+     * @date    2023/7/7 11:25
+     * @param shop
+     * @param userId
+     * @return  void
+     */
+    private void initNewShop(Shop shop,Long userId){
+        BigDecimal zeroBig = new BigDecimal("0.00");
+        //商户账户信息初始化
+        ShopAccount shopAccount = new ShopAccount();
+        shopAccount.setShopId(shop.getShopId());
+        shopAccount.setDelFlag(0);
+        shopAccount.setTotalIncome(new BigDecimal("0"));
+        shopAccount.setTotalDisburse(new BigDecimal("0"));
+        shopAccount.setTotalRefund(new BigDecimal("0"));
+        shopAccount.setTotalProfitsharing(new BigDecimal("0"));
+        shopAccount.setTotalMoney(new BigDecimal("0"));
+        shopAccountService.save(shopAccount);
+        //商户认证信息初始化
+        String authId = IdUtils.simpleUUID();
+        ShopAuthentication shopAuthentication = new ShopAuthentication();
+        shopAuthentication.setAuthId(authId);
+        shopAuthentication.setDelFlag(0);
+        shopAuthentication.setShopId(shop.getShopId());
+        shopAuthenticationService.save(shopAuthentication);
+        //商户分成信息初始化
+        ShopProportion shopProportion = new ShopProportion();
+        shopProportion.setDelFlag(0);
+        shopProportion.setShopId(shop.getShopId());
+        shopProportion.setShopType(shop.getShopType());
+        shopProportion.setProportionPercent(new BigDecimal("100.00"));
+        shopProportion.setUpdateTime(new Date());
+        shopProportion.setUpdateUserId(userId);
+        shopProportionService.save(shopProportion);
+        //商户统计
+        ShopTotal shopTotal = new ShopTotal();
+        shopTotal.setShopId(shop.getShopId());
+        shopTotal.setDelFlag(0);
+        shopTotal.setLastPayMoney(zeroBig);
+        shopTotal.setTotalActivityCount(0);
+        shopTotal.setTotalOrder(0);
+        shopTotal.setTotalCycleOrder(0);
+        shopTotal.setTotalExperienceOrder(0);
+        shopTotal.setTotalServiceOrder(0);
+        shopTotal.setTotalGoodsOrder(0);
+        shopTotal.setTotalServiceCount(0);
+        shopTotal.setUsedServiceCount(0);
+        shopTotal.setUseableServiceCount(0);
+        shopTotal.setTotalCycleService(0);
+        shopTotal.setUsedCycleService(0);
+        shopTotal.setUseableCycleService(0);
+        shopTotal.setTotalCyclePerson(0);
+        shopTotal.setUseableCyclePerson(0);
+        shopTotal.setTotalServiceService(0);
+        shopTotal.setUsedServiceService(0);
+        shopTotal.setUseableServiceService(0);
+        shopTotal.setTotalServicePerson(0);
+        shopTotal.setUseableServicePerson(0);
+        shopTotal.setTotalExperienceService(0);
+        shopTotal.setUsedExperienceService(0);
+        shopTotal.setUseableExperienceService(0);
+        shopTotal.setTotalExperiencePerson(0);
+        shopTotal.setUseableExperiencePerson(0);
+        shopTotal.setTotalOrderMoney(zeroBig);
+        shopTotal.setTotalCycleMoney(zeroBig);
+        shopTotal.setTotalExperienceMoney(zeroBig);
+        shopTotal.setTotalServiceMoney(zeroBig);
+        shopTotal.setTotalGoodsMoney(zeroBig);
+        shopTotalService.save(shopTotal);
     }
 
     /**
@@ -524,6 +569,40 @@
         this.saveOrUpdate(shop);
     }
 
+
+    /**
+     * @description  转移客户
+     * @author  jqs
+     * @date    2023/6/28 16:36
+     * @param mgtTransferShopDto
+     * @return  void
+     */
+    @Override
+    public void transferMgtShop(MgtTransferShopDto mgtTransferShopDto){
+        Shop shop = this.getByShopId(mgtTransferShopDto.getShopId());
+        if(shop.getBelongUserId()!=null){
+            ShopTransferRecord shopTransferRecord = new ShopTransferRecord();
+            shopTransferRecord.setDelFlag(0);
+            shopTransferRecord.setShopId(shop.getShopId());
+            shopTransferRecord.setBeforeUserId(shop.getBelongUserId());
+            shopTransferRecord.setAfterUserId(mgtTransferShopDto.getTransferUserId());
+            shopTransferRecord.setTransferRemark(mgtTransferShopDto.getTransferRemark());
+            shopTransferRecordService.save(shopTransferRecord);
+            shopRelUserService.deleteByUserId(shop.getBelongUserId());
+        }
+        shop.setBelongUserId(mgtTransferShopDto.getTransferUserId());
+        this.saveOrUpdate(shop);
+        ShopRelUser shopRelUser = new ShopRelUser();
+        shopRelUser.setDelFlag(0);
+        shopRelUser.setShopId(shop.getShopId());
+        shopRelUser.setUserId(mgtTransferShopDto.getTransferUserId());
+        SysUser sysUser = remoteUserService.getSysUser(mgtTransferShopDto.getTransferUserId()).getData();
+        shopRelUser.setUserMobile(sysUser.getPhonenumber());
+        shopRelUser.setUserDeptId(sysUser.getDeptId());
+        shopRelUser.setUserName(sysUser.getNickName());
+        shopRelUserService.save(shopRelUser);
+    }
+
     /**
      * 获取附近门店
      * @param appNearbyShopDto
@@ -572,6 +651,43 @@
         return shop;
     }
 
+    /**
+     * 获取获取员工端首页统计
+     * @param userId
+     * @return
+     */
+    @Override
+    public MerHomeShopTotalVo getStaffHomeTotal(Long userId){
+        List<Long> userIds = null;
+        List<Long> shopIds = null;
+        //如果是leader 查询leader下面所有的员工下的所有shopId
+        if(remoteSysStaffService.isLeader()){
+            Long deptId = sysUserService.getSysUser(userId).getData().getDeptId();
+            userIds = remoteSysStaffService.getUserIds(deptId).getData();
+            //根据用户所有id查询关联的商户id
+            MgtBasePlatformDto mgtBasePlatformDto = new MgtBasePlatformDto();
+            mgtBasePlatformDto.setUserIdList(userIds);
+            shopIds = shopMapper.listShopIdByTotal(mgtBasePlatformDto);
+        }else {
+            //普通员工查询商户归属的shopId
+            MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto();
+            mgtShopIdByCodeDto.setBelongUserId(userId);
+            shopIds = shopMapper.getShopIdByCode(mgtShopIdByCodeDto);
+        }
+            //分别查询
+            MerHomeShopTotalVo merHomeShopTotalVo = new MerHomeShopTotalVo();
+            merHomeShopTotalVo.setShopIds(shopIds);
+            MerHomeShopTotalVo orderVo = remoteOrderService.getMerHomeTotal(merHomeShopTotalVo).getData();
+            merHomeShopTotalVo.setTodayShop(orderVo.getTodayShop());
+            merHomeShopTotalVo.setUnHandleOrder(orderVo.getUnHandleOrder());
+            merHomeShopTotalVo.setShopTurnover(orderVo.getShopTurnover());
+            ShopTotal shopTotal = shopTotalService.shopsTotalByIds(shopIds);
+            merHomeShopTotalVo.setCycleSurp(shopTotal.getUseableCyclePerson());
+            merHomeShopTotalVo.setExplorationSurp(shopTotal.getUseableExperiencePerson());
+            Integer taskCount = memberTaskService.getMembersIngTotal(shopIds);
+            merHomeShopTotalVo.setTask(taskCount);
+            return merHomeShopTotalVo;
+        }
     /**
      * 获取商户端
      * @param userId
@@ -794,50 +910,25 @@
             plTotalShopTotalVo.setAgeValue(shopTotalMemberVo.getAgeValue());
         }
         //获取商户类型
-        List<MgtMapTotalVo> shopTypeTotal = shopMapper.listShopTypeTotal(mgtBasePlatformDto);
+        List<MgtMapIntTotalVo> shopTypeTotal = shopMapper.listShopTypeTotal(mgtBasePlatformDto);
         if (shopTypeTotal != null && shopTypeTotal.size() > 0) {
-            String[] shopTypeKey = new String[shopTypeTotal.size()];
-            Integer[] shopTypeValue = new Integer[shopTypeTotal.size()];
-            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
-            for (int i = 0; i < shopTypeTotal.size(); i++) {
-                if (shopTypeTotal.get(i).getMapKey().equals("1")) {
-                    shopTypeKey[i] = "经销商";
-                } else if (shopTypeTotal.get(i).getMapKey().equals("2")) {
-                    shopTypeKey[i] = "代理商";
-                }
-                shopTypeValue[i] = shopTypeTotal.get(i).getMapValue();
-            }
-            plTotalShopTotalVo.setShopTypeKey(shopTypeKey);
-            plTotalShopTotalVo.setShopTypeValue(shopTypeValue);
+            shopTypeTotal = listRemoveNull(shopTypeTotal);
+            plTotalShopTotalVo.setShopTypeVos(shopTypeTotal);
         }
         //获取商户状态
-        List<MgtMapTotalVo> shopStatusTotal = shopMapper.listShopStatusTotal(mgtBasePlatformDto);
+        List<MgtMapIntTotalVo> shopStatusTotal = shopMapper.listShopStatusTotal(mgtBasePlatformDto);
         if (shopStatusTotal != null && shopStatusTotal.size() > 0) {
-            String[] shopStatusKey = new String[shopStatusTotal.size()];
-            Integer[] shopStatusValue = new Integer[shopStatusTotal.size()];
-            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
-            for (int i = 0; i < shopStatusTotal.size(); i++) {
-                shopStatusKey[i] = shopStatusTotal.get(i).getMapKey();
-                shopStatusValue[i] = shopStatusTotal.get(i).getMapValue();
-            }
-            plTotalShopTotalVo.setShopStatusKey(shopStatusKey);
-            plTotalShopTotalVo.setShopStatusValue(shopStatusValue);
+            shopStatusTotal = listRemoveNull(shopStatusTotal);
+            plTotalShopTotalVo.setShopStatusVos(shopStatusTotal);
         }
         //获取区域排名
-        List<MgtMapTotalVo> shopAreaRank = shopMapper.listShopAreaRank(mgtBasePlatformDto);
+        List<MgtMapIntTotalVo> shopAreaRank = shopMapper.listShopAreaRank(mgtBasePlatformDto);
         if (shopAreaRank != null && shopAreaRank.size() > 0) {
-            String[] shopRankKey = new String[shopAreaRank.size()];
-            Integer[] shopRankValue = new Integer[shopAreaRank.size()];
-            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
-            for (int i = 0; i < shopAreaRank.size(); i++) {
-                shopRankKey[i] = shopAreaRank.get(i).getMapKey();
-                shopRankValue[i] = shopAreaRank.get(i).getMapValue();
-            }
-            plTotalShopTotalVo.setAreaRankKey(shopRankKey);
-            plTotalShopTotalVo.setAreaRankValue(shopRankValue);
+            shopAreaRank = listRemoveNull(shopAreaRank);
+            plTotalShopTotalVo.setAreaRankVos(shopAreaRank);
         }
         //获取销售排名
-        List<MgtMapTotalVo> shopSalesRank = shopMapper.listShopSalesRank(mgtBasePlatformDto);
+        List<MgtMapIntTotalVo> shopSalesRank = shopMapper.listShopSalesRank(mgtBasePlatformDto);
         if (shopSalesRank != null && shopSalesRank.size() > 0) {
             String[] shopSalesKey = new String[shopSalesRank.size()];
             Integer[] shopSalesValue = new Integer[shopSalesRank.size()];
@@ -850,19 +941,28 @@
             plTotalShopTotalVo.setShopSalesRankValue(shopSalesValue);
         }
         //获取推荐
-        List<MgtMapTotalVo> shopRecommendRank = shopMapper.listShopRecommendRank(mgtBasePlatformDto);
+        List<MgtMapIntTotalVo> shopRecommendRank = shopMapper.listShopRecommendRank(mgtBasePlatformDto);
         if (shopRecommendRank != null && shopRecommendRank.size() > 0) {
-            String[] shopRecommendKey = new String[shopRecommendRank.size()];
-            Integer[] shopRecommendValue = new Integer[shopRecommendRank.size()];
-            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
-            for (int i = 0; i < shopRecommendRank.size(); i++) {
-                shopRecommendKey[i] = shopRecommendRank.get(i).getMapKey();
-                shopRecommendValue[i] = shopRecommendRank.get(i).getMapValue();
-            }
-            plTotalShopTotalVo.setShopRecommendKey(shopRecommendKey);
-            plTotalShopTotalVo.setShopRecommendValue(shopRecommendValue);
+            shopRecommendRank = listRemoveNull(shopRecommendRank);
+            plTotalShopTotalVo.setShopRecommendVos(shopRecommendRank);
         }
         return plTotalShopTotalVo;
+    }
+
+    /**
+     * @description  去除空字符串
+     * @author  jqs
+     * @date    2023/6/27 17:35
+     * @param MgtMapIntTotalVos
+     * @return  List<MgtMapIntTotalVo>
+     */
+    private List<MgtMapIntTotalVo> listRemoveNull(List<MgtMapIntTotalVo> MgtMapIntTotalVos){
+        for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
+            if(StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())){
+                MgtMapIntTotalVos.remove(i);
+            }
+        }
+        return MgtMapIntTotalVos;
     }
 
     /**
@@ -909,4 +1009,40 @@
         mgtShopAuthCodeVo.setLegalValidationUrl(shopAuthentication.getLegalValidationUrl());
         return mgtShopAuthCodeVo;
     }
+
+
+    /**
+     * @description  获取商户下属代理商
+     * @author  jqs
+     * @date    2023/7/3 17:27
+     * @param shopId
+     * @return  List<Long>
+     */
+    @Override
+    public List<Long> listShopIdByShopId(Long shopId){
+        List<Long> shopIds = shopMapper.selectList(
+                new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getBelongShopId, shopId)
+        ).stream().map(Shop::getShopId).collect(Collectors.toList());
+        return shopIds;
+    }
+
+    /**
+     * @description  获取商户下属代理商
+     * @author  jqs
+     * @date    2023/7/3 18:18
+     * @param shopId
+     * @return  List<MgtSimpleShopVo>
+     */
+    @Override
+    public List<MgtSimpleShopVo> listShopByShop(Long shopId){
+        List<MgtSimpleShopVo> simpleShopVoList = shopMapper.selectList(
+                new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getBelongShopId, shopId)).
+                stream().map(shop->{
+                    MgtSimpleShopVo simpleShopVo = new MgtSimpleShopVo();
+                    simpleShopVo.setShopId(shop.getShopId());
+                    simpleShopVo.setShopName(shop.getShopName());
+                    return simpleShopVo;
+                }).collect(Collectors.toList());
+        return simpleShopVoList;
+    }
 }

--
Gitblit v1.7.1