Parcourir la source

Merge remote-tracking branch 'origin/dev' into dev

Mechrevo il y a 1 an
Parent
commit
ff0ec91827

+ 58 - 55
sp-core/sp-base/src/main/java/com/pj/utils/so/SoMap.java

@@ -22,8 +22,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 /**
- * Map< String, Object> 是最常用的一种Map类型,但是它写着麻烦 
- * <p>所以特封装此类,继承Map,进行一些扩展,可以让Map更灵活使用 
+ * Map< String, Object> 是最常用的一种Map类型,但是它写着麻烦
+ * <p>所以特封装此类,继承Map,进行一些扩展,可以让Map更灵活使用
  * <p>最新:2020-12-10 新增部分构造方法
  * @author kong
  */
@@ -33,13 +33,13 @@ public class SoMap extends LinkedHashMap<String, Object> {
 
 	public SoMap() {
 	}
-	
+
 
 	/** 以下元素会在isNull函数中被判定为Null, */
 	public static final Object[] NULL_ELEMENT_ARRAY = {null, ""};
 	public static final List<Object> NULL_ELEMENT_LIST;
 
-	
+
 	static {
 		NULL_ELEMENT_LIST = Arrays.asList(NULL_ELEMENT_ARRAY);
 	}
@@ -63,7 +63,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		}
 		return value;
 	}
-	
+
 	/** 转为String并返回 */
 	public String getString(String key) {
 		Object value = get(key);
@@ -201,20 +201,20 @@ public class SoMap extends LinkedHashMap<String, Object> {
 			throw new RuntimeException(e);
 		}
 	}
-	
+
 	/** 从map中取值,塞到一个对象中 */
 	public <T> T getModelByObject(T obj) {
-		// 获取类型 
+		// 获取类型
 		Class<?> cs = obj.getClass();
-		// 循环复制  
+		// 循环复制
 		for (Field field : cs.getDeclaredFields()) {
 			try {
-				// 获取对象 
-				Object value = this.get(field.getName());	
+				// 获取对象
+				Object value = this.get(field.getName());
 				if(value == null) {
 					continue;
 				}
-				field.setAccessible(true);	
+				field.setAccessible(true);
 				Object valueConvert = getValueByClass(value, field.getType());
 				field.set(obj, valueConvert);
 			} catch (IllegalArgumentException | IllegalAccessException e) {
@@ -224,7 +224,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		return obj;
 	}
 
-	
+
 
 	/**
 	 * 将指定值转化为指定类型并返回
@@ -259,7 +259,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		return (T)obj3;
 	}
 
-	
+
 	// ============================= 写值 =============================
 
 	/**
@@ -273,8 +273,8 @@ public class SoMap extends LinkedHashMap<String, Object> {
 
 	/** set一个值,连缀风格 */
 	public SoMap set(String key, Object value) {
-		// 防止敏感key 
-		if(key.toLowerCase().equals("this")) {		
+		// 防止敏感key
+		if(key.toLowerCase().equals("this")) {
 			return this;
 		}
 		put(key, value);
@@ -322,7 +322,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		}
 	}
 
-	
+
 	// ============================= 删值 =============================
 
 	/** delete一个值,连缀风格 */
@@ -376,9 +376,9 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		clear();
 		return this;
 	}
-	
 
-	// ============================= 快速构建 ============================= 
+
+	// ============================= 快速构建 =============================
 
 	/** 构建一个SoMap并返回 */
 	public static SoMap getSoMap() {
@@ -397,7 +397,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
 	public static SoMap getSoMapByModel(Object model) {
 		return SoMap.getSoMap().setModel(model);
 	}
-	
+
 	/** 将一个对象集合解析成为SoMap集合 */
 	public static List<SoMap> getSoMapByList(List<?> list) {
 		List<SoMap> listMap = new ArrayList<SoMap>();
@@ -406,7 +406,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		}
 		return listMap;
 	}
-	
+
 	/** 克隆指定key,返回一个新的SoMap */
 	public SoMap cloneKeys(String... keys) {
 		SoMap so = new SoMap();
@@ -469,10 +469,10 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		this.clearAll().setMap(so);
 		return this;
 	}
-	
-	
-	
-	
+
+
+
+
 	// ============================= 辅助方法 =============================
 
 
@@ -490,7 +490,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		}
 		return false;
 	}
-	
+
 	/** 与isNull()相反 */
 	public boolean isNotNull(String key) {
 		return !isNull(key);
@@ -499,12 +499,12 @@ public class SoMap extends LinkedHashMap<String, Object> {
 	public boolean has(String key) {
 		return !isNull(key);
 	}
-	
+
 	/** 指定value在此SoMap的判断标准中是否为null */
 	public boolean valueIsNull(Object value) {
 		return NULL_ELEMENT_LIST.contains(value);
 	}
-	
+
 	/** 验证指定key不为空,为空则抛出异常 */
 	public SoMap checkNull(String ...keys) {
 		for (String key : keys) {
@@ -522,12 +522,12 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		if(value == null) {
 			return false;
 		}
-	    return patternNumber.matcher(value).matches();   
+	    return patternNumber.matcher(value).matches();
 	}
 
-	
-	
-	
+
+
+
 	/**
 	 * 转为JSON字符串
 	 */
@@ -541,11 +541,11 @@ public class SoMap extends LinkedHashMap<String, Object> {
 	}
 
 	/**
-	 * 转为JSON字符串, 带格式的 
+	 * 转为JSON字符串, 带格式的
 	 */
 	public String toJsonFormatString() {
 		try {
-			return JSON.toJSONString(this, true); 
+			return JSON.toJSONString(this, true);
 		} catch (Exception e) {
 			throw new RuntimeException(e);
 		}
@@ -555,17 +555,17 @@ public class SoMap extends LinkedHashMap<String, Object> {
 
 
 	/**
-	 * 返回当前request请求的的所有参数 
+	 * 返回当前request请求的的所有参数
 	 * @return
 	 */
 	public static SoMap getRequestSoMap() {
-		// 大善人SpringMVC提供的封装 
+		// 大善人SpringMVC提供的封装
 		ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
 		if(servletRequestAttributes == null) {
 			throw new RuntimeException("当前线程非JavaWeb环境");
 		}
 		// 当前request
-		HttpServletRequest request = servletRequestAttributes.getRequest(); 
+		HttpServletRequest request = servletRequestAttributes.getRequest();
 		if (request.getAttribute("currentSoMap") == null || request.getAttribute("currentSoMap") instanceof SoMap == false ) {
 			initRequestSoMap(request);
 		}
@@ -575,10 +575,10 @@ public class SoMap extends LinkedHashMap<String, Object> {
 	/** 初始化当前request的 SoMap */
 	private static void initRequestSoMap(HttpServletRequest request) {
 		SoMap soMap = new SoMap();
-		Map<String, String[]> parameterMap = request.getParameterMap();	// 获取所有参数 
+		Map<String, String[]> parameterMap = request.getParameterMap();	// 获取所有参数
 		for (String key : parameterMap.keySet()) {
 			try {
-				String[] values = parameterMap.get(key); // 获得values 
+				String[] values = parameterMap.get(key); // 获得values
 				if(values.length == 1) {
 					soMap.set(key, values[0]);
 				} else {
@@ -594,19 +594,19 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		}
 		request.setAttribute("currentSoMap", soMap);
 	}
-	
+
 	/**
-	 * 验证返回当前线程是否为JavaWeb环境 
+	 * 验证返回当前线程是否为JavaWeb环境
 	 * @return
 	 */
 	public static boolean isJavaWeb() {
-		ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// 大善人SpringMVC提供的封装 
+		ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// 大善人SpringMVC提供的封装
 		if(servletRequestAttributes == null) {
 			return false;
 		}
 		return true;
 	}
-	
+
 
 
 	// ============================= 常见key (以下key经常用,所以封装以下,方便写代码) =============================
@@ -643,6 +643,9 @@ public class SoMap extends LinkedHashMap<String, Object> {
 	private com.github.pagehelper.Page<?> pagePlug;
 	/** 分页插件 - 开始分页 */
 	public SoMap startPage() {
+		if(get("orderBy")!=null){
+			com.github.pagehelper.PageHelper.orderBy(get("orderBy").toString());
+		}
 		this.pagePlug= com.github.pagehelper.PageHelper.startPage(getKeyPageNo(), getKeyPageSize());
 		return this;
 	}
@@ -659,27 +662,27 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		return getDataCount();
 	}
 
-	
-	
-	
+
+
+
 
 	// ============================= 工具方法 =============================
-	
+
 
 	/**
-	 * 将一个一维集合转换为树形集合 
+	 * 将一个一维集合转换为树形集合
 	 * @param list         集合
 	 * @param idKey        id标识key
 	 * @param parentIdKey  父id标识key
 	 * @param childListKey 子节点标识key
-	 * @return 转换后的tree集合 
+	 * @return 转换后的tree集合
 	 */
 	public static List<SoMap> listToTree(List<SoMap> list, String idKey, String parentIdKey, String childListKey) {
-		// 声明新的集合,存储tree形数据 
+		// 声明新的集合,存储tree形数据
 		List<SoMap> newTreeList = new ArrayList<SoMap>();
-		// 声明hash-Map,方便查找数据 
+		// 声明hash-Map,方便查找数据
 		SoMap hash = new SoMap();
-		// 将数组转为Object的形式,key为数组中的id 
+		// 将数组转为Object的形式,key为数组中的id
 		for (int i = 0; i < list.size(); i++) {
 			SoMap json = (SoMap) list.get(i);
 			hash.put(json.getString(idKey), json);
@@ -692,7 +695,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
 			SoMap hashVp = (SoMap) hash.get(aVal.get(parentIdKey, "").toString());
 			// 如果记录的pid存在,则说明它有父节点,将她添加到孩子节点的集合中
 			if (hashVp != null) {
-				// 检查是否有child属性,有则添加,没有则新建 
+				// 检查是否有child属性,有则添加,没有则新建
 				if (hashVp.get(childListKey) != null) {
 					@SuppressWarnings("unchecked")
 					List<SoMap> ch = (List<SoMap>) hashVp.get(childListKey);
@@ -709,8 +712,8 @@ public class SoMap extends LinkedHashMap<String, Object> {
 		}
 		return newTreeList;
 	}
-	
-	
+
+
 
 	/** 指定字符串的字符串下划线转大写模式 */
 	private static String wordEachBig(String str){
@@ -744,6 +747,6 @@ public class SoMap extends LinkedHashMap<String, Object> {
 	private static String wordHumpToLine(String str) {
 		return str.replaceAll("[A-Z]", "_$0").toLowerCase();
 	}
-	
+
 
 }

+ 1 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/GoodsTransitAppController.java

@@ -55,6 +55,7 @@ public class GoodsTransitAppController {
         SoMap so = SoMap.getRequestSoMap();
         so.put("goodsStatus", 1);
         so.put("isOrders", 0);
+
         List<TbGoodsTransit> list = tbGoodsTransitService.getList(so.startPage());
         return AjaxJson.getPageData(so.getDataCount(), list);
     }

+ 0 - 26
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/TbGoodsTransitMapper.xml

@@ -46,32 +46,6 @@
 			<if test=' this.has("updateName") '> and update_name = #{updateName} </if>
 			<if test=' this.has("deleteStatus") '> and delete_status = #{deleteStatus} </if>
 		</where>
-		order by
-		<choose>
-			<when test='sortType == 1'> id desc </when>
-			<when test='sortType == 2'> merchant_id desc </when>
-			<when test='sortType == 3'> merchant_name desc </when>
-			<when test='sortType == 4'> goods_type desc </when>
-			<when test='sortType == 5'> goods_name desc </when>
-			<when test='sortType == 6'> goods_units desc </when>
-			<when test='sortType == 7'> price #{orderBy} </when>
-			<when test='sortType == 8'> place_origin desc </when>
-			<when test='sortType == 9'> discription desc </when>
-			<when test='sortType == 10'> stock desc </when>
-			<when test='sortType == 11'> goods_status desc </when>
-			<when test='sortType == 12'> audit_status desc </when>
-			<when test='sortType == 13'> audit_time desc </when>
-			<when test='sortType == 14'> remark desc </when>
-			<when test='sortType == 15'> create_time desc </when>
-			<when test='sortType == 150'> create_time asc </when>
-			<when test='sortType == 16'> create_by desc </when>
-			<when test='sortType == 17'> create_name desc </when>
-			<when test='sortType == 18'> update_time desc </when>
-			<when test='sortType == 19'> update_by desc </when>
-			<when test='sortType == 20'> update_name desc </when>
-			<when test='sortType == 21'> delete_status desc </when>
-			<otherwise> id desc </otherwise>
-		</choose>
 	</select>
 
 

+ 8 - 4
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleController.java

@@ -3,6 +3,7 @@ package com.pj.tb_people;
 import java.io.IOException;
 import java.util.List;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.pj.api.dto.PeopleDto;
 import com.pj.tb_people.dto.StartStopDto;
 import com.pj.utils.so.SoMap;
@@ -182,10 +183,13 @@ public class TbPeopleController {
      * @date
      */
     @RequestMapping("passApply")
-    public AjaxJson passApply(@RequestParam("leaderId") Long leaderId, @RequestParam("peopleId") Long peopleId, @RequestParam("approve") int approve) {
-        int line = tbPeopleService.passApply(leaderId, peopleId, approve);
-        return AjaxJson.getByLine(line);
-
+    public AjaxJson passApply(@RequestParam("groupId") Long groupId, @RequestParam("peopleIds") String peopleIds, @RequestParam("approve") int approve) {
+        approve = 1;//同意
+        String[] peopleIdarr = peopleIds.split(",");
+        for (String peopleId: peopleIdarr) {
+            tbPeopleService.passApply(groupId, Long.valueOf(peopleId), approve);
+        }
+        return AjaxJson.getSuccess("边民加入互助组成功");
     }
 
 

+ 1 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleMapper.xml

@@ -32,7 +32,7 @@
 		values
 		(
 		<if test="peopleId">#{peopleId},</if>
-		<if test="groupId"> #{groupId}</if>
+		<if test="groupId"> #{groupId},</if>
 		 0
 		)
 	</insert>

+ 3 - 5
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleService.java

@@ -239,7 +239,7 @@ public class TbPeopleService extends ServiceImpl<TbPeopleMapper, TbPeople> imple
 	 * @author loovi
 	 * @date
 	 */
-	public int passApply(Long leaderId,Long peopleId,int approve){
+	public int passApply(Long groupId,Long peopleId,int approve){
 		// 组长不同意申请
 		if(approve==2){
 			int i = tbPeopleMapper.updateApplyStatus(approve,peopleId);
@@ -260,10 +260,8 @@ public class TbPeopleService extends ServiceImpl<TbPeopleMapper, TbPeople> imple
 		if(tbPeople.getIsLock()== DeleteStatus.DELETE_STATUS_OFF.getCode()){
 			throw new RuntimeException("用户已删除");
 		}
-		//根据互助组组长id查询互助组
-		QueryWrapper<TbGroup> queryWrapper = new QueryWrapper<>();
-		queryWrapper.eq("leader_id", leaderId);
-		TbGroup tbGroup = tbGroupMapper.selectOne(queryWrapper);
+		//根据互助组id查询互助组
+		TbGroup tbGroup = tbGroupMapper.selectById(groupId);
 		// 修改申请表状态为1通过
 		tbPeopleMapper.updateApplyStatus(approve,peopleId);
 		// 把互助组信息写入申请的边民表

+ 0 - 29
sp-service/level-two-server/src/main/java/com/pj/tb_goods_demand/TbGoodsDemandMapper.xml

@@ -37,34 +37,5 @@
 			<if test=' this.has("deleteStatus") '> and delete_status = #{deleteStatus} </if>
 			<if test=' this.has("isConfirm") '> and is_confirm = #{isConfirm} </if>
 		</where>
-		order by
-		<choose>
-			<when test='sortType == 1'> id desc </when>
-			<when test='sortType == 2'> level_one_goods_id desc </when>
-			<when test='sortType == 3'> address_id desc </when>
-			<when test='sortType == 4'> goods_name desc </when>
-			<when test='sortType == 5'> goods_img desc </when>
-			<when test='sortType == 6'> purchaser_id desc </when>
-			<when test='sortType == 7'> purchaser_name desc </when>
-			<when test='sortType == 8'> is_orders desc </when>
-			<when test='sortType == 9'> is_release desc </when>
-			<when test='sortType == 10'> goods_quantity desc </when>
-			<when test='sortType == 11'> remark desc </when>
-			<when test='sortType == 12'> create_time desc </when>
-			<when test='sortType == 13'> delete_status desc </when>
-			<when test='sortType == 14'> trade_area_id desc </when>
-			<when test='sortType == 15'> trade_area_name desc </when>
-			<otherwise> id desc </otherwise>
-		</choose>
 	</select>
-
-
-
-
-
-
-
-
-
-
 </mapper>

+ 31 - 31
sp-service/sp-admin/src/main/java/com/pj/project/app_menu/AppMenu.java

@@ -13,7 +13,7 @@ import lombok.experimental.Accessors;
 
 /**
  * Model: app_menu -- app菜单管理
- * @author qzy 
+ * @author qzy
  */
 @Data
 @Accessors(chain = true)
@@ -23,15 +23,15 @@ public class AppMenu extends Model<AppMenu> implements Serializable {
 
 	// ---------- 模块常量 ----------
 	/**
-	 * 序列化版本id 
+	 * 序列化版本id
 	 */
-	private static final long serialVersionUID = 1L;	
+	private static final long serialVersionUID = 1L;
 	/**
-	 * 此模块对应的表名 
+	 * 此模块对应的表名
 	 */
-	public static final String TABLE_NAME = "app_menu";	
+	public static final String TABLE_NAME = "app_menu";
 	/**
-	 * 此模块对应的权限码 
+	 * 此模块对应的权限码
 	 */
 	public static final String PERMISSION_CODE = "app-menu";
 	public static final String PERMISSION_CODE_ADD = "app-menu-add";
@@ -43,78 +43,78 @@ public class AppMenu extends Model<AppMenu> implements Serializable {
 
 	// ---------- 表中字段 ----------
 	/**
-	 * 主键 
+	 * 主键
 	 */
 	@TableId(type = IdType.AUTO)
-	private Long id;	
+	private Long id;
 
 	/**
-	 * 前端路径 
+	 * 前端路径
 	 */
-	private String path;	
+	private String path;
 
 	/**
-	 * 菜单名称 
+	 * 菜单名称
 	 */
-	private String menuName;	
+	private String menuName;
 
 	/**
-	 * 图标 
+	 * 图标
 	 */
-	private String icon;	
+	private String icon;
 
 	/**
-	 * 排序 
+	 * 排序
 	 */
-	private Integer sort;	
+	private Integer sort;
 
 	/**
-	 * 状态(0=禁用,1=启用) 
+	 * 状态(0=禁用,1=启用)
 	 */
-	private String enable;	
+	private Integer enable=1;
 
 	/**
-	 * 是否认证后访问(0=否,1=是) 
+	 * 是否认证后访问(0=否,1=是)
 	 */
-	private String auth;	
+	private String auth;
 
 	/**
-	 * 创建时间 
+	 * 创建时间
 	 */
 	@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date createTime;
 
 	/**
-	 * 创建人编号 
+	 * 创建人编号
 	 */
-	private String createBy;	
+	private String createBy;
 
 	/**
-	 * 创建人名称 
+	 * 创建人名称
 	 */
-	private String createName;	
+	private String createName;
 
 	/**
-	 * 更新时间 
+	 * 更新时间
 	 */
 	@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date updateTime;
 
 	/**
-	 * 更新人编号 
+	 * 更新人编号
 	 */
-	private String updateBy;	
+	private String updateBy;
 
 	/**
-	 * 更新人名称 
+	 * 更新人名称
 	 */
-	private String updateName;	
+	private String updateName;
+
 
 
 
 
 
-	
 
 
 }

+ 15 - 12
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuService.java

@@ -18,7 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 /**
  * Service: re_role_menu -- app用户菜单中间表
- * @author qzy 
+ * @author qzy
  */
 @Service
 @Transactional(rollbackFor = Exception.class)
@@ -52,10 +52,10 @@ public class ReRoleMenuService extends ServiceImpl<ReRoleMenuMapper, ReRoleMenu>
 		return super.getById(id);
 	}
 
-	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */
 	List<ReRoleMenu> getList(SoMap so,Integer appRoleId) {
 		so.set("app_role_id",appRoleId);
-		return reRoleMenuMapper.getList(so);	
+		return reRoleMenuMapper.getList(so);
 	}
 
 
@@ -66,19 +66,22 @@ public class ReRoleMenuService extends ServiceImpl<ReRoleMenuMapper, ReRoleMenu>
 		//app_menu的主键进行去重
 		List<Long> permissionsDtoList = assignPermissionsDto.getList().stream().distinct().collect(Collectors.toList());
 		//情况1:传进来的集合为空,默认删除该职务下属的所有权限
-		if(permissionsDtoList.size() == 0){
+		//if(permissionsDtoList.size() == 0){
 			//删除所有权限
-			List<Long> perList = methodRoleMenuService.getPerList(roleId);
+			//List<Long> perList = methodRoleMenuService.getPerList(roleId);
 			//清除
-			int i = reRoleMenuMapper.deleteBatchIds(perList);
-			return i == perList.size();
-		}
+			//int i = reRoleMenuMapper.deleteBatchIds(perList);
+			//return i == perList.size();
+			//int i = reRoleMenuMapper.delete(new LambdaQueryWrapper<ReRoleMenu>().eq(ReRoleMenu::getAppRoleId, roleId));
+			//return true;
+		//}
 		//情况2: 传进来的集合不为空
 		//2.1 先清除该职务的权限
-		List<Long> perList = methodRoleMenuService.getPerList(roleId);
+		//List<Long> perList = methodRoleMenuService.getPerList(roleId);
 		//执行清除
-		int i = reRoleMenuMapper.deleteBatchIds(perList);
-		if(i != perList.size())throw new RuntimeException("权限分配失败Ⅰ!");
+		//int i = reRoleMenuMapper.deleteBatchIds(perList);
+		//if(i != perList.size())throw new RuntimeException("权限分配失败Ⅰ!");
+		int i = reRoleMenuMapper.delete(new LambdaQueryWrapper<ReRoleMenu>().eq(ReRoleMenu::getAppRoleId, roleId));
 		//2.2 再添加新的权限给到该职务
 		//定义计数器
 		int count = 0;
@@ -90,6 +93,6 @@ public class ReRoleMenuService extends ServiceImpl<ReRoleMenuMapper, ReRoleMenu>
 
 		return count == permissionsDtoList.size();
 	}
-	
+
 
 }