yonge 4 年之前
父节点
当前提交
0a8c17affb

+ 2 - 2
edu-common/src/main/java/com/keao/edu/common/service/impl/SysMessageServiceImpl.java

@@ -16,7 +16,7 @@ import com.keao.edu.common.service.SysMessageService;
 import com.keao.edu.thirdparty.message.MessageSenderPlugin;
 import com.keao.edu.thirdparty.message.MessageSenderPluginContext;
 import com.keao.edu.thirdparty.message.SendMode;
-import com.keao.edu.thirdparty.message.provider.YimeiSmsPlugin;
+import com.keao.edu.thirdparty.message.provider.AwSmsPlugin;
 import com.keao.edu.util.string.MessageFormatter;
 
 import org.apache.commons.lang3.StringUtils;
@@ -300,7 +300,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		}
 		Map<Integer, String> receivers = new HashMap<>(1);
 		receivers.put(userId, receiver);
-		batchSendMessage(messageType, receivers, null, 1, "",YimeiSmsPlugin.PLUGIN_NAME, code);
+		batchSendMessage(messageType, receivers, null, 1, "",AwSmsPlugin.PLUGIN_NAME, code);
 		redisCache.put(key, code + "", CODE_EXPIRE);
 		redisCache.put(key1, code + "", CODE_INTERVAL_TIME);
 		return true;

+ 137 - 0
edu-thirdparty/src/main/java/com/keao/edu/thirdparty/message/provider/AwSmsPlugin.java

@@ -0,0 +1,137 @@
+package com.keao.edu.thirdparty.message.provider;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.keao.edu.thirdparty.exception.ThirdpartyException;
+import com.keao.edu.thirdparty.message.MessageSenderPlugin;
+import com.keao.edu.thirdparty.message.MessageSenderPluginContext;
+import com.keao.edu.thirdparty.message.SendMode;
+import com.keao.edu.util.http.HttpUtil;
+
+/**
+ * 昂网短信
+ */
+@Service
+public class AwSmsPlugin implements MessageSenderPlugin, InitializingBean {
+	/**
+	 * 请求地址
+	 */
+	private String reqURL = "http://47.104.84.72:8513/sms/Api/ReturnJson/Send.do";
+
+	private String appId = "2045";
+
+	/**
+	 * 账号
+	 */
+	private String account = "jmylyzm";
+
+	/**
+	 * 密码
+	 */
+	private String pswd = "9#O!9hSJ";
+
+	private String signature = "【酷乐秀】";
+	
+	public final static String PLUGIN_NAME = "awsms";
+
+	public String getName() {
+		return PLUGIN_NAME;
+	}
+
+	@Override
+	public SendMode getSendMode() {
+		return SendMode.SMS;
+	}
+
+	@Override
+	public void afterPropertiesSet() throws Exception {
+		// 参数检查
+		if (StringUtils.isBlank(reqURL)) {
+			throw new RuntimeException("Init parameter [reqURL] can not blank");
+		}
+		if (StringUtils.isBlank(account)) {
+			throw new RuntimeException("Init parameter [account] can not blank");
+		}
+		if (StringUtils.isBlank(pswd)) {
+			throw new RuntimeException("Init parameter [pswd] can not blank");
+		}
+		MessageSenderPluginContext.addMessageSender(this);
+	}
+
+	public void setReqURL(String reqURL) {
+		this.reqURL = reqURL;
+	}
+
+	public void setAccount(String account) {
+		this.account = account;
+	}
+
+	public void setPswd(String pswd) {
+		this.pswd = pswd;
+	}
+
+	@Override
+	public boolean send(String subject, String content, String receiver, String url, String jpushType) throws IOException {
+		try {
+			Map<String, Object> reqParams = new HashMap<String, Object>();
+			reqParams.put("SpCode", appId);
+			reqParams.put("LoginName", account);
+			reqParams.put("Password", pswd);
+			reqParams.put("MessageContent", signature + content);
+			reqParams.put("UserNumber", receiver);
+			// reqParams.put("SerialNumber", "");
+			// reqParams.put("ScheduleTime", "");
+			// reqParams.put("subPort", "");
+			String resultParams = HttpUtil.postForHttp(reqURL, reqParams);
+			JSONObject jsonObject = JSONObject.parseObject(resultParams);
+			if (jsonObject.get("result").equals("0")) {
+				return true;
+			} else {
+				throw new ThirdpartyException("短信发送失败:{}", jsonObject.get("description"));
+			}
+		} catch (Exception e) {
+			throw new ThirdpartyException("Failed to invoke awsms service", e);
+		}
+	}
+
+	@Override
+	public boolean batchSend(String subject, String content, String[] receivers, String url, String jpushType) throws IOException {
+		StringBuilder stringBuilder = new StringBuilder("");
+		for (int i = 0; i < receivers.length - 1; i++) {
+			stringBuilder.append(receivers[i]).append(",");
+		}
+		stringBuilder.append(receivers[receivers.length - 1]);
+		try {
+			Map<String, Object> reqParams = new HashMap<String, Object>();
+			reqParams.put("SpCode", appId);
+			reqParams.put("LoginName", account);
+			reqParams.put("Password", pswd);
+			reqParams.put("MessageContent", signature + content);
+			reqParams.put("UserNumber", stringBuilder.toString().trim());
+			// reqParams.put("SerialNumber", "");
+			// reqParams.put("ScheduleTime", "");
+			// reqParams.put("subPort", "");
+			String resultParams = HttpUtil.postForHttp(reqURL, reqParams);
+			JSONObject jsonObject = JSONObject.parseObject(resultParams);
+			if (jsonObject.get("result").equals("0")) {
+				return true;
+			} else {
+				throw new ThirdpartyException("短信发送失败:{}", jsonObject.get("description"));
+			}
+		} catch (Exception e) {
+			throw new ThirdpartyException("Failed to invoke awsms service", e);
+		}
+	}
+
+	public static void main(String[] args) throws IOException {
+		AwSmsPlugin plugin = new AwSmsPlugin();
+		plugin.send("测试", "您的验证码为274160(5分钟内有效),您正在进行商户认证,请不要向他人透露验证码", "13720176797", "", "");
+	}
+}

+ 5 - 5
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java

@@ -10,7 +10,7 @@ import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.SysMessageService;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.common.tenant.TenantContextHolder;
-import com.keao.edu.thirdparty.message.provider.YimeiSmsPlugin;
+import com.keao.edu.thirdparty.message.provider.AwSmsPlugin;
 import com.keao.edu.user.dao.*;
 import com.keao.edu.user.dto.ExamOrganStatisticsDto;
 import com.keao.edu.user.dto.ExamOrganizationRelationExtraDto;
@@ -343,7 +343,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			userPhoneMap.put(organUser.getId(), organUser.getPhone());
 
 			sysMessageService.batchSendMessage(MessageTypeEnum.EXAM_REGISTRATION_URL_SMS,
-					userPhoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+					userPhoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME,
 					tenantInfo.getName(), examinationBasic.getName(), expectRegistTime.toString(), examOrgan.getUrl());
 		}
 
@@ -400,7 +400,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 		}
 
 		sysMessageService.batchSendMessage(messageType,
-				userPhoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+				userPhoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME,
 				tenantInfo.getName(), exam.getName());
 	}
 
@@ -432,7 +432,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 		String enrollEndTimeStr = DateUtil.dateToString(exam.getEnrollEndTime(), "yyyy年MM月dd日 HH时mm分");
 
 		sysMessageService.batchSendMessage(MessageTypeEnum.EXAM_REGIST_TIME_CHANGE_SMS,
-				userPhoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+				userPhoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME,
 				tenantInfo.getName(), exam.getName(), enrollStartTimeStr, enrollEndTimeStr);
 	}
 
@@ -458,7 +458,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 		}
 
 		sysMessageService.batchSendMessage(MessageTypeEnum.EXAM_REGIST_EXPIRE_SMS,
-				userPhoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+				userPhoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME,
 				tenantInfo.getName(), exam.getName());
 	}
 

+ 41 - 15
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationServiceImpl.java

@@ -1,6 +1,22 @@
 package com.keao.edu.user.service.impl;
 
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
 import com.keao.edu.auth.api.client.SysUserFeignService;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.controller.BaseController;
@@ -14,28 +30,38 @@ import com.keao.edu.common.page.QueryInfo;
 import com.keao.edu.common.service.IdGeneratorService;
 import com.keao.edu.common.service.SysMessageService;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
+import com.keao.edu.thirdparty.message.provider.AwSmsPlugin;
 import com.keao.edu.thirdparty.message.provider.JiguangPushPlugin;
-import com.keao.edu.thirdparty.message.provider.YimeiSmsPlugin;
-import com.keao.edu.user.dao.*;
-import com.keao.edu.user.dto.*;
-import com.keao.edu.user.entity.*;
+import com.keao.edu.user.dao.ExamMusicTheoryDao;
+import com.keao.edu.user.dao.ExamRegistrationDao;
+import com.keao.edu.user.dao.ExamSubjectSongDao;
+import com.keao.edu.user.dao.ExaminationBasicDao;
+import com.keao.edu.user.dao.OrganizationDao;
+import com.keao.edu.user.dao.SysUserDao;
+import com.keao.edu.user.dto.ExamRegistrationDto;
+import com.keao.edu.user.dto.ExamRegistrationRoomDto;
+import com.keao.edu.user.dto.ExamRegistrationStatisticsDto;
+import com.keao.edu.user.dto.OrganExamRegistStatisticsDto;
+import com.keao.edu.user.dto.StudentBaseExamsDto;
+import com.keao.edu.user.dto.StudentExamListDto;
+import com.keao.edu.user.entity.ExamMusicTheory;
+import com.keao.edu.user.entity.ExamRegistration;
+import com.keao.edu.user.entity.ExamRegistrationPayment;
+import com.keao.edu.user.entity.ExamSubjectSong;
+import com.keao.edu.user.entity.ExaminationBasic;
+import com.keao.edu.user.entity.Organization;
 import com.keao.edu.user.enums.ExamStatusEnum;
 import com.keao.edu.user.enums.StudentRegistrationStatusEnum;
 import com.keao.edu.user.enums.TransStatusEnum;
 import com.keao.edu.user.page.ApplyListQueryInfo;
 import com.keao.edu.user.page.ExamRecordQueryInfo;
 import com.keao.edu.user.page.ExamRegistrationQueryInfo;
-import com.keao.edu.user.service.*;
+import com.keao.edu.user.service.ExamRegistrationPaymentService;
+import com.keao.edu.user.service.ExamRegistrationService;
+import com.keao.edu.user.service.OrganizationService;
+import com.keao.edu.user.service.PayService;
+import com.keao.edu.user.service.SysConfigService;
 import com.keao.edu.util.collection.MapUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 public class ExamRegistrationServiceImpl extends BaseServiceImpl<Long, ExamRegistration> implements ExamRegistrationService {
@@ -335,7 +361,7 @@ public class ExamRegistrationServiceImpl extends BaseServiceImpl<Long, ExamRegis
             Map<Integer, String> phoneMap = new HashMap<>(1);
             phoneMap.put(er.getStudentId(), student.getPhone());
             sysMessageService.batchSendMessage(MessageTypeEnum.REGIST_REJECT_SMS,
-                    phoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME);
+                    phoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME);
         }
         examRegistrationDao.update(er);
     }

+ 6 - 6
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java

@@ -20,7 +20,7 @@ import com.keao.edu.im.api.client.ImFeignService;
 import com.keao.edu.im.api.entity.MemberChangedMessage;
 import com.keao.edu.im.api.entity.PublishMessageDto;
 import com.keao.edu.thirdparty.message.provider.JiguangPushPlugin;
-import com.keao.edu.thirdparty.message.provider.YimeiSmsPlugin;
+import com.keao.edu.thirdparty.message.provider.AwSmsPlugin;
 import com.keao.edu.thirdparty.yqpay.DateUtils;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
@@ -550,7 +550,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 						receiverMap, null, 0, url, JiguangPushPlugin.PLUGIN_NAME,
 						examName, examDayStr, examTimeStr, locationName);
 				sysMessageService.batchSendMessage(smsMessageType,
-						phoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+						phoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME,
 						examName, examDayStr, examTimeStr, locationName, downloadUrl + student.getExamRegistrationId());
 			}
 
@@ -582,7 +582,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 			Map<Integer, String> phoneMap = new HashMap<>();
 			phoneMap.put(teacherRoomEntry.getKey(), teacherPhone);
 			sysMessageService.batchSendMessage(MessageTypeEnum.EXAM_ROOM_CONFIRM_TEACHER_SMS,
-												phoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+												phoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME,
 												exam.getName(), examStartTimeStr, examRoomNum);
 		}
 
@@ -655,7 +655,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 					receiverMap, null, 0, null, JiguangPushPlugin.PLUGIN_NAME,
 					examDayStr, examTimeStr.toString());
 			sysMessageService.batchSendMessage(MessageTypeEnum.BEFORE_EXAM_STUDENT_REMIND_SMS,
-					phoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+					phoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME,
 					examDayStr, examTimeStr.toString());
 		}
 
@@ -671,7 +671,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 			Map<Integer, String> phoneMap = new HashMap<>();
 			phoneMap.put(teacherRoomEntry.getKey(), teacherPhone);
 			sysMessageService.batchSendMessage(MessageTypeEnum.BEFORE_EXAM_TEACHER_REMIND_SMS,
-					phoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+					phoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME,
 					tomorrowDayStr, examStartTimeStr, examEndTimeStr, examRoomNum);
 		}
 	}
@@ -851,7 +851,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 				Map<Integer, String> map = getMap("sys_user", "id_", "phone_", strings, Integer.class, String.class);
 				//给助教老师发送短信提醒
 				sysMessageService.batchSendMessage(MessageTypeEnum.EXAM_ROOM_OPEN_SMS,
-						map,null,null,null,YimeiSmsPlugin.PLUGIN_NAME,examinationBasic.getName());
+						map,null,null,null,AwSmsPlugin.PLUGIN_NAME,examinationBasic.getName());
 			}
 		}else {
 			//没有未考试的学员

+ 2 - 2
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java

@@ -16,7 +16,7 @@ import com.keao.edu.im.api.entity.MemberChangedMessage;
 import com.keao.edu.im.api.entity.PublishMessageDto;
 import com.keao.edu.im.api.entity.ReqUserData;
 import com.keao.edu.thirdparty.message.provider.JiguangPushPlugin;
-import com.keao.edu.thirdparty.message.provider.YimeiSmsPlugin;
+import com.keao.edu.thirdparty.message.provider.AwSmsPlugin;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
 import com.keao.edu.user.api.enums.ExamModeEnum;
@@ -246,7 +246,7 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 						receiverMap, null, 0, url, JiguangPushPlugin.PLUGIN_NAME,
 						examName, examDayStr, examTimeStr, locationName);
 				sysMessageService.batchSendMessage(smsMessageType,
-						phoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+						phoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME,
 						examName, examDayStr, examTimeStr, locationName, shortUrlService.createShortUrl(downloadUrl + examRoomStudentRelation.getExamRegistrationId()));
 			}
 		}

+ 49 - 17
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java

@@ -1,5 +1,27 @@
 package com.keao.edu.user.service.impl;
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.common.enums.MessageTypeEnum;
@@ -9,30 +31,40 @@ import com.keao.edu.common.service.SysMessageService;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.common.tenant.OrganContextHolder;
 import com.keao.edu.common.tenant.TenantContextHolder;
-import com.keao.edu.thirdparty.message.provider.YimeiSmsPlugin;
+import com.keao.edu.thirdparty.message.provider.AwSmsPlugin;
 import com.keao.edu.user.api.enums.ExamModeEnum;
-import com.keao.edu.user.dao.*;
+import com.keao.edu.user.dao.ExamLifecycleLogDao;
+import com.keao.edu.user.dao.ExamLocationDao;
+import com.keao.edu.user.dao.ExamManualLedgerDao;
+import com.keao.edu.user.dao.ExamMusicTheoryDao;
+import com.keao.edu.user.dao.ExamOrganizationRelationDao;
+import com.keao.edu.user.dao.ExamRegistrationDao;
+import com.keao.edu.user.dao.ExamRegistrationPaymentDao;
+import com.keao.edu.user.dao.ExamRoomDao;
+import com.keao.edu.user.dao.ExaminationBasicDao;
+import com.keao.edu.user.dao.MusicTheoryDao;
+import com.keao.edu.user.dao.StudentExamResultDao;
+import com.keao.edu.user.dao.SysUserDao;
+import com.keao.edu.user.dao.TenantInfoDao;
 import com.keao.edu.user.dto.ExamRoomExamTimeDto;
 import com.keao.edu.user.dto.ExamStatisticsDto;
 import com.keao.edu.user.dto.ExaminationBasicDto;
-import com.keao.edu.user.entity.*;
+import com.keao.edu.user.entity.ExamLifecycleLog;
+import com.keao.edu.user.entity.ExamLocation;
+import com.keao.edu.user.entity.ExamMusicTheory;
+import com.keao.edu.user.entity.ExamOrganizationRelation;
+import com.keao.edu.user.entity.ExaminationBasic;
+import com.keao.edu.user.entity.MusicTheory;
+import com.keao.edu.user.entity.TenantInfo;
 import com.keao.edu.user.enums.ExamStatusEnum;
 import com.keao.edu.user.enums.StudentRegistrationStatusEnum;
 import com.keao.edu.user.page.ExaminationQueryInfo;
-import com.keao.edu.user.service.*;
+import com.keao.edu.user.service.ExamOrganizationRelationService;
+import com.keao.edu.user.service.ExamTeacherSalaryService;
+import com.keao.edu.user.service.ExaminationBasicService;
+import com.keao.edu.user.service.OrganizationService;
+import com.keao.edu.user.service.StudentExamResultService;
 import com.keao.edu.util.collection.MapUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.time.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, ExaminationBasic> implements ExaminationBasicService {
@@ -204,7 +236,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
             userPhoneMap.put(sysUser.getId(), sysUser.getPhone());
 
             sysMessageService.batchSendMessage(MessageTypeEnum.EXAM_END_REMIND,
-                    userPhoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+                    userPhoneMap, null, 0, null, AwSmsPlugin.PLUGIN_NAME,
                     tenantInfo.getName(), endExam.getName());
         }
     }