2 Commits 9626d50f4e ... a91d081574

Author SHA1 Message Date
  longping a91d081574 Merge remote-tracking branch 'origin/master' 3 months ago
  longping 1edabfe653 短信功能 3 months ago

+ 1 - 1
projects-service/src/main/java/com/rtrh/projects/modules/msglog/service/IPhoneMsgLogService.java

@@ -14,5 +14,5 @@ public interface IPhoneMsgLogService {
 
 	Page pageQueryBySubIdAndKind(Page page, String subId,String kind);
 
-	void sendDusMsg(String subId) throws IOException, ClientException;
+	void sendDusMsg(String subId, String id, String item, String kind) throws IOException, ClientException;
 }

+ 29 - 19
projects-service/src/main/java/com/rtrh/projects/modules/msglog/service/impl/PhoneMsgLogServiceImpl.java

@@ -58,28 +58,38 @@ public class PhoneMsgLogServiceImpl implements IPhoneMsgLogService {
 	}
 
 	@Override
-	public void sendDusMsg(String subId) throws IOException, ClientException {
+	public void sendDusMsg(String phone, String subId, String tip, String kind) throws IOException, ClientException {
 		SubInfo subInfo = subInfoDao.findById(subId);
-		if(!TEL_PATTERN.matcher(subInfo.getTel()).matches()) {
-			throw new RuntimeException("请填写正确得手机号码");
+		if(subInfo == null){
+			throw  new RuntimeException("项目未找到");
 		}
-		long dueDay = DateUtil.betweenDay(subInfo.getEndDate(), new Date(), true);
-		String content = MessageFormat.format("哈密市发改委提醒:您监管/负责的{0}项目,已经逾期{1}天,请及时关注并处理!!!", msgParamLengthSplit(subInfo.getSubName()), dueDay);
+		if(StringUtil.isEmpty(phone)){
+			throw  new RuntimeException("电话不能为空");
+		}
+		//long dueDay = DateUtil.betweenDay(subInfo.getEndDate(), new Date(), true);
+		String content = MessageFormat.format("{0}提醒:您监管/负责的{1}项目,{2}已经逾期,请及时关注并处理!","哈密市工信局", msgParamLengthSplit(subInfo.getSubName()), tip);
 		Map<String, String> context = new HashMap<String, String>();
-		context.put("name", "哈密市发改委");
-		context.put("projName", msgParamLengthSplit("("+ subInfo.getSubName()+")"));
-		context.put("days", String.valueOf(dueDay));
-		SendResponse sendResponse = AliSendTelPhoneUtil.sendMessage(subInfo.getTel(), context, "SMS_465155436");
-		PhoneMsgLog log = new PhoneMsgLog();
-		log.setId(Identities.uuid());
-		log.setCreateTime(new Date());
-		log.setSubId(subId);
-		log.setTel(subInfo.getTel());
-		log.setUserName(subInfo.getNameZrr());
-		log.setSuccess(sendResponse.getSuccess());
-		log.setErrorMsg(sendResponse.getMessage());
-		log.setContent(content);
-		phoneMsgLogDao.save(log);
+		context.put("name", "哈密市工信局");
+		context.put("projName", msgParamLengthSplit("【" + subInfo.getSubName() + "】"));
+		context.put("item", tip);
+		/*        context.put("days", String.valueOf(dueDay));*/
+		SendResponse sendResponse = AliSendTelPhoneUtil.sendMessage(phone, context, "SMS_476760041");
+
+		if(!sendResponse.getSuccess()){
+			PhoneMsgLog log = new PhoneMsgLog();
+			log.setId(Identities.uuid());
+			log.setCreateTime(new Date());
+			log.setSubId(subId);
+			log.setTel(subInfo.getTel());
+			log.setKind(kind);
+			log.setUserName(subInfo.getNameZrr());
+			log.setSuccess(sendResponse.getSuccess());
+			log.setErrorMsg(sendResponse.getMessage());
+			log.setContent(content);
+			phoneMsgLogDao.save(log);
+		}else{
+			throw  new RuntimeException("短信发送失败"+sendResponse.getMessage());
+		}
 	}
 
 	@Override

+ 1 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/SubPreNewMapper.xml

@@ -4,6 +4,7 @@
 
     <select id="pageQueryCbToXjData" resultType="map" parameterType="map">
         SELECT
+        a.id as id,
         a.sub_name as subName,
         a.begin_date as beginDate,
         a.end_date as endDate,

+ 5 - 1
projects-service/src/main/java/com/rtrh/projects/modules/system/service/SecUserService.java

@@ -3,6 +3,8 @@ package com.rtrh.projects.modules.system.service;
 import com.rtrh.core.repository.Page;
 import com.rtrh.projects.modules.system.po.SecUser;
 
+import java.util.List;
+
 public interface SecUserService {
 
     SecUser getSecUserByJunitId(String id);
@@ -15,7 +17,7 @@ public interface SecUserService {
      *  忘记密码保存
      */
     void saveForgotPassword(String id,String password,String passwordCheck);
-    
+
     /**
      * 查询项目单位用户
      * @param page
@@ -24,4 +26,6 @@ public interface SecUserService {
      * @return
      */
     Page pageQueryZfdwUser(Page page, String unitName, String userName);
+
+    List getAllUser();
 }

+ 16 - 0
projects-service/src/main/java/com/rtrh/projects/modules/system/service/impl/SecUserServiceImpl.java

@@ -11,9 +11,15 @@ import com.rtrh.projects.modules.system.dao.SecUserDao;
 import com.rtrh.projects.modules.system.enums.UserKindUnitEnum;
 import com.rtrh.projects.modules.system.po.SecUser;
 import com.rtrh.projects.modules.system.service.SecUserService;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.DetachedCriteria;
+import org.hibernate.criterion.Restrictions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
+import java.util.List;
+
 @Service
 public class SecUserServiceImpl implements SecUserService {
     @Autowired
@@ -73,4 +79,14 @@ public class SecUserServiceImpl implements SecUserService {
 		sql.append(" ORDER BY b.`code`, b.title, c.title ");
 		return secUserDao.queryForListBySql(sql.toString(), page);
 	}
+
+    @Override
+    public List getAllUser() {
+        DetachedCriteria detachedCriteria = DetachedCriteria.forClass(SecUser.class);
+        Criterion criterion = Restrictions.eq("logicDeleteFlag", false);
+        detachedCriteria.add(criterion);
+        List<SecUser> list = secUserDao.find(detachedCriteria);
+        return list;
+    }
+
 }

+ 6 - 2
projects-service/src/main/java/com/rtrh/projects/vo/SubIdVO.java

@@ -7,13 +7,17 @@ import lombok.Setter;
 @Getter
 public class SubIdVO {
 
+
 	private String subId;
 	private String flowId;
 	private String isMajor;
 	private String year;
-	private  int cat;
+	private String phone;
+	private int cat;
+	private String kind;
+	private String item;
 	private String state;
-	private String  zjlyId;
+	private String zjlyId;
 
 	private String isFix;
 	private String stateFix;

+ 18 - 2
projects/src/main/java/com/rtrh/projects/web/controller/msglog/MsgLogController.java

@@ -1,5 +1,6 @@
 package com.rtrh.projects.web.controller.msglog;
 
+import com.rtrh.projects.modules.system.service.SecUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
@@ -12,6 +13,8 @@ import com.rtrh.projects.modules.projects.service.SubInfoService;
 import com.rtrh.projects.modules.projects.vo.SubInfoVO;
 import com.rtrh.projects.web.controller.BaseController;
 
+import java.util.List;
+
 @Controller
 @RequestMapping("/msgLog")
 public class MsgLogController extends BaseController {
@@ -19,12 +22,16 @@ public class MsgLogController extends BaseController {
 	@Autowired
 	private SubInfoService subInfoService;
 
+	@Autowired
+	private SecUserService secUserService;
+
 	@GetMapping("/index")
 	public ModelAndView index() {
-
 		return new ModelAndView("/vmodules/msgLog/index.jsp");
 	}
 
+
+
 	@GetMapping("subDetail")
 	public ModelAndView subDetail(ModelMap model, String subId, Boolean layer, String queryYear, String lastUrl) {
 		model.put("subId", subId);
@@ -38,6 +45,16 @@ public class MsgLogController extends BaseController {
 		return new ModelAndView("/vmodules/msgLog/subDetail.jsp");
 	}
 
+	@GetMapping("sendMsg")
+	public ModelAndView sendMsg(ModelMap model, String subId, String content, String kind, String item) {
+		model.put("subId", subId);
+		model.put("content",content);
+		model.put("kind", kind);
+		model.put("item", item);
+		List userList = secUserService.getAllUser();
+		model.put("Users",userList);
+		return new ModelAndView("/vmodules/msgLog/sendMsg.jsp");
+	}
 
 
 	@GetMapping("kindDetail")
@@ -47,7 +64,6 @@ public class MsgLogController extends BaseController {
 		model.put("queryYear", queryYear);
 		model.put("lastUrl", lastUrl);
 		model.put("kind", kind);
-
 		return new ModelAndView("/vmodules/msgLog/kindDetail.jsp");
 	}
 

+ 1 - 1
projects/src/main/java/com/rtrh/projects/web/controller/msglog/api/MsgLogApiController.java

@@ -52,7 +52,7 @@ public class MsgLogApiController extends BaseController {
 	public Message sendDueMsg(@RequestBody SubIdVO subIdVO) {
 		Message message = new Message();
 		try {
-			phoneMsgLogService.sendDusMsg(subIdVO.getSubId());
+			phoneMsgLogService.sendDusMsg(subIdVO.getPhone(),subIdVO.getSubId(),subIdVO.getItem(),subIdVO.getKind());
 		} catch (Exception e) {
 			logger.error("", e);
 			message.addError(e.getMessage());

+ 0 - 1
projects/src/main/java/com/rtrh/projects/web/util/SheetData.java

@@ -8,7 +8,6 @@ import com.rtrh.common.util.StringUtil;
 import com.rtrh.core.repository.Page;
 import com.rtrh.projects.modules.projects.vo.SubInfoQueryTzVO;
 import com.rtrh.projects.outapi.result.JsonResult;
-import com.sun.tools.internal.xjc.reader.xmlschema.bindinfo.BIConversion;
 import org.apache.poi.ss.usermodel.BorderStyle;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.apache.poi.ss.usermodel.IndexedColors;

+ 17 - 3
projects/src/main/webapp/vmodules/msgLog/sendMsg.jsp

@@ -57,6 +57,16 @@
                                 </c:forEach>
                             </select>
                         </div>
+
+                    </div>
+                </div>
+                <div class="layui-row">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">手机号</label>
+                        <div class="layui-input-block">
+                            <input type="text" readonly="readonly"  v-model="phone" name="login" class="layui-input" value="">
+                        </div>
+
                     </div>
                 </div>
             </div>
@@ -175,9 +185,13 @@
                         item: "${item}",
                         phone: self.phone,
                     }, function (res) {
-                        App.msg.success("发送成功");
-                        var index = top.layer.getFrameIndex(window.name);
-                        top.layer.close(index);
+                        if(res.success) {
+                            App.msg.success("发送成功");
+                            var index = top.layer.getFrameIndex(window.name);
+                            top.layer.close(index);
+                        }else{
+                            App.msg.error("短信发送失败:"+res.message);
+                        }
                     })
                 })
             },

+ 30 - 14
projects/src/main/webapp/vmodules/problem/info/cbToXjWarn.jsp

@@ -69,7 +69,7 @@
     <div class="layui-layout layui-layout-admin">
 
         <div class="right_title">
-			
+
             <div class="layui-collapse">
                 <div class="layui-colla-item">
                 <span class="txt">储备转新建超期</span>
@@ -496,19 +496,35 @@
                 window.showImage = this.showImage;
             },
             sendMsg: function(obj) {
-            	var content = "【市发改委】哈密市发改委提醒:您监管/负责的("+obj.data.subName+")项目,"+
-            	obj.data.preName+"手续办理已逾期,请及时关注并处理!!";
-    			layer.open({
-    				title: "短信内容",
-    				type: 1,
-    				area: ["400px","200px"],
-    				content: content,
-    				btn: ["发送"],
-    				yes: function() {
-    					App.msg.success("发送成功");
-    					layer.closeAll();
-    				}
-    			})
+/*                alert(JSON.stringify(obj.data))*/
+                /*	var content = "【市发改委】哈密市发改委提醒:您监管/负责的("+obj.data.subName+")项目,投资偏离度已超限"+obj.data.offset+"%,请及时关注并处理!!";
+                      layer.open({
+                          title: "短信内容",
+                          type: 1,
+                          area: ["400px","200px"],
+                          content: content,
+                          btn: ["发送"],
+                          yes: function() {
+                              App.msg.success("发送成功");
+                              layer.closeAll();
+                          }
+                      })*/
+                /*                alert(JSON.stringify(obj.data))*/
+
+                var content = "【市工信局】市工信局提醒:您监管/负责的【" + obj.data.subName + "】项目," +
+                    "储备转新建已超期,请及时关注并处理!";
+                top.layer.open({
+                    title: "短信内容",
+                    type: 2,
+                    area: ["600px", "400px"],
+                    content: App.getUrl("/msgLog/sendMsg?layer=true&content=" + content + "&subId=" + obj.data.id + "&kind=储备转新建&item=储备转新建超期"),
+                    /*              btn: ["发送", "取消"],*/
+                    yes: function () {
+                        top.layer.closeAll();
+                    }, close: function (index) {
+                        top.layer.close(index);
+                    }
+                })
             },
             showImage: function(that) {
                 var imageUrl = $(that).find("img").eq(0).attr("realUrl");

+ 37 - 14
projects/src/main/webapp/vmodules/problem/info/endWarn.jsp

@@ -485,20 +485,43 @@
         window.toDetail = this.toDetail;
         window.showImage = this.showImage;
       },
-      sendMsg: function(obj) {
-      	var content = "【市发改委】哈密市发改委提醒:您监管/负责的("+obj.data.subName+")项目,项目竣工已超期,请及时关注并处理!!";
-			layer.open({
-				title: "短信内容",
-				type: 1,
-				area: ["400px","200px"],
-				content: content,
-				btn: ["发送"],
-				yes: function() {
-					App.msg.success("发送成功");
-					layer.closeAll();
-				}
-			})
-      },
+        sendMsg: function (obj) {
+            var content = "【市发改委】哈密市发改委提醒:您监管/负责的(" + obj.data.subName + ")项目,项目竣工已超期,请及时关注并处理!!";
+            /*	layer.open({
+                    title: "短信内容",
+                    type: 1,
+                    area: ["400px","200px"],
+                    content: content,
+                    btn: ["发送"],
+                    yes: function() {
+                        App.msg.success("发送成功");
+                        layer.closeAll();
+                    }
+                })
+
+              var content = "【市发改委】哈密市发改委提醒:您监管/负责的【" + obj.data.subName + "】项目," +
+                  "月报填写已超期,请及时关注并处理!";*/
+            top.layer.open({
+                title: "短信内容",
+                type: 2,
+                area: ["600px", "400px"],
+                content: App.getUrl("/msgLog/sendMsg?layer=true&content=" + content + "&subId=" + obj.data.id + "&kind=竣工逾期&item=项目竣工"),
+                /*              btn: ["发送", "取消"],*/
+                yes: function () {
+                    /*              App.msg.confirm("确认发送逾期短信到该项目负责人?", function () {
+                                      App.postJson("/api/msgLog/sendDueMsg", {
+                                          subId: obj.data.subId,
+                                          kind: "手续超期"
+                                      }, function (res) {
+                                          App.msg.success("发送成功");
+                                      })
+                                  })*/
+                    top.layer.closeAll();
+                }, close: function (index) {
+                    top.layer.close(index);
+                }
+            })
+        },
       showImage: function(that) {
         var imageUrl = $(that).find("img").eq(0).attr("realUrl");
         if(imageUrl) {

+ 35 - 13
projects/src/main/webapp/vmodules/problem/info/monthWarn.jsp

@@ -535,19 +535,41 @@
         window.showImage = this.showImage;
       },
       sendMsg: function(obj) {
-        	var content = "【市发改委】哈密市发改委提醒:您监管/负责的("+obj.data.subName+")项目,"+obj.data.kjMonth+"月报填写已超期,请及时关注并处理!!";
-  			layer.open({
-  				title: "短信内容",
-  				type: 1,
-  				area: ["400px","200px"],
-  				content: content,
-  				btn: ["发送"],
-  				yes: function() {
-  					App.msg.success("发送成功");
-  					layer.closeAll();
-  				}
-  			})
-        },
+        /*        	var content = "【市发改委】哈密市发改委提醒:您监管/负责的("+obj.data.subName+")项目,"+obj.data.kjMonth+"月报填写已超期,请及时关注并处理!!";
+                      layer.open({
+                          title: "短信内容",
+                          type: 1,
+                          area: ["400px","200px"],
+                          content: content,
+                          btn: ["发送"],
+                          yes: function() {
+                              App.msg.success("发送成功");
+                              layer.closeAll();
+                          }
+                      })*/
+        var content = "【市发改委】哈密市发改委提醒:您监管/负责的【" + obj.data.subName.replace("#","") + "】项目," +
+                "月报填写已超期,请及时关注并处理!";
+        top.layer.open({
+          title: "短信内容",
+          type: 2,
+          area: ["600px", "400px"],
+          content: App.getUrl("/msgLog/sendMsg?layer=true&content=" + content + "&subId=" + obj.data.id + "&kind=月报逾期&item=月报填写"),
+          /*              btn: ["发送", "取消"],*/
+          yes: function () {
+            /*              App.msg.confirm("确认发送逾期短信到该项目负责人?", function () {
+                              App.postJson("/api/msgLog/sendDueMsg", {
+                                  subId: obj.data.subId,
+                                  kind: "手续超期"
+                              }, function (res) {
+                                  App.msg.success("发送成功");
+                              })
+                          })*/
+            top.layer.closeAll();
+          }, close: function (index) {
+            top.layer.close(index);
+          }
+        })
+      },
       showImage: function(that) {
         var imageUrl = $(that).find("img").eq(0).attr("realUrl");
         if(imageUrl) {

+ 25 - 14
projects/src/main/webapp/vmodules/problem/info/openWarn.jsp

@@ -533,20 +533,31 @@
         param.propKind = this.propKind.getValue("value").sort().join(",");
         return param;
       },
-      sendMsg: function(obj) {
-      	var content = "【市发改委】哈密市发改委提醒:您监管/负责的("+obj.data.subName+")项目,项目开工已超期,请及时关注并处理!!";
-			layer.open({
-				title: "短信内容",
-				type: 1,
-				area: ["400px","200px"],
-				content: content,
-				btn: ["发送"],
-				yes: function() {
-					App.msg.success("发送成功");
-					layer.closeAll();
-				}
-			})
-      },
+        sendMsg: function(obj) {
+            //alert(JSON.stringify(obj.data));
+            var content = "【市发改委】哈密市发改委提醒:您监管/负责的【" + obj.data.subName + "】项目," +
+                "项目开工已逾期,请及时关注并处理!";
+            top.layer.open({
+                title: "短信内容",
+                type: 2,
+                area: ["600px", "400px"],
+                content: App.getUrl("/msgLog/sendMsg?layer=true&content=" + content + "&subId=" + obj.data.id + "&kind=开工逾期&item=项目开工"),
+                /*              btn: ["发送", "取消"],*/
+                yes: function () {
+                    /*              App.msg.confirm("确认发送逾期短信到该项目负责人?", function () {
+                                      App.postJson("/api/msgLog/sendDueMsg", {
+                                          subId: obj.data.subId,
+                                          kind: "手续超期"
+                                      }, function (res) {
+                                          App.msg.success("发送成功");
+                                      })
+                                  })*/
+                    top.layer.closeAll();
+                }, close: function (index) {
+                    top.layer.close(index);
+                }
+            })
+        },
       getData : function(){
         var self = this;
         var param = this.getSearchParams();

+ 36 - 12
projects/src/main/webapp/vmodules/problem/info/pldWarn.jsp

@@ -473,18 +473,42 @@
                 window.showImage = this.showImage;
             },
             sendMsg: function(obj) {
-            	var content = "【市发改委】哈密市发改委提醒:您监管/负责的("+obj.data.subName+")项目,投资偏离度已超限"+obj.data.offset+"%,请及时关注并处理!!";
-      			layer.open({
-      				title: "短信内容",
-      				type: 1,
-      				area: ["400px","200px"],
-      				content: content,
-      				btn: ["发送"],
-      				yes: function() {
-      					App.msg.success("发送成功");
-      					layer.closeAll();
-      				}
-      			})
+                /*	var content = "【市发改委】哈密市发改委提醒:您监管/负责的("+obj.data.subName+")项目,投资偏离度已超限"+obj.data.offset+"%,请及时关注并处理!!";
+                      layer.open({
+                          title: "短信内容",
+                          type: 1,
+                          area: ["400px","200px"],
+                          content: content,
+                          btn: ["发送"],
+                          yes: function() {
+                              App.msg.success("发送成功");
+                              layer.closeAll();
+                          }
+                      })*/
+                /*                alert(JSON.stringify(obj.data))*/
+
+                var content = "【市发改委】哈密市发改委提醒:您监管/负责的【" + obj.data.subName + "】项目," +
+                    "投资偏离度超限,请及时关注并处理!";
+                top.layer.open({
+                    title: "短信内容",
+                    type: 2,
+                    area: ["600px", "400px"],
+                    content: App.getUrl("/msgLog/sendMsg?layer=true&content=" + content + "&subId=" + obj.data.id + "&kind=偏离度&item=投资偏离度超限"),
+                    /*              btn: ["发送", "取消"],*/
+                    yes: function () {
+                        /*              App.msg.confirm("确认发送逾期短信到该项目负责人?", function () {
+                                          App.postJson("/api/msgLog/sendDueMsg", {
+                                              subId: obj.data.subId,
+                                              kind: "手续超期"
+                                          }, function (res) {
+                                              App.msg.success("发送成功");
+                                          })
+                                      })*/
+                        top.layer.closeAll();
+                    }, close: function (index) {
+                        top.layer.close(index);
+                    }
+                })
             },
             showImage: function(that) {
                 var imageUrl = $(that).find("img").eq(0).attr("realUrl");

+ 24 - 15
projects/src/main/webapp/vmodules/problem/info/preWarn.jsp

@@ -69,7 +69,7 @@
     <div class="layui-layout layui-layout-admin">
 
         <div class="right_title">
-			
+
             <div class="layui-collapse">
                 <div class="layui-colla-item">
                 <span class="txt">前期手续办理超期</span>
@@ -504,20 +504,29 @@
                 window.toDetail = this.toDetail;
                 window.showImage = this.showImage;
             },
-            sendMsg: function(obj) {
-            	var content = "【市发改委】哈密市发改委提醒:您监管/负责的("+obj.data.subName+")项目,"+
-            	obj.data.preName+"手续办理已逾期,请及时关注并处理!!";
-    			layer.open({
-    				title: "短信内容",
-    				type: 1,
-    				area: ["400px","200px"],
-    				content: content,
-    				btn: ["发送"],
-    				yes: function() {
-    					App.msg.success("发送成功");
-    					layer.closeAll();
-    				}
-    			})
+            sendMsg: function (obj) {
+                var content = "【市发改委】哈密市发改委提醒:您监管/负责的【" + obj.data.subName + "】项目," +
+                    obj.data.preName + "手续办理已逾期,请及时关注并处理!";
+                top.layer.open({
+                    title: "短信内容",
+                    type: 2,
+                    area: ["600px", "400px"],
+                    content: App.getUrl("/msgLog/sendMsg?layer=true&content=" + content + "&subId=" + obj.data.subId + "&kind=手续超期&item=" + obj.data.preName),
+                    /*              btn: ["发送", "取消"],*/
+                    yes: function () {
+                        /*              App.msg.confirm("确认发送逾期短信到该项目负责人?", function () {
+                                          App.postJson("/api/msgLog/sendDueMsg", {
+                                              subId: obj.data.subId,
+                                              kind: "手续超期"
+                                          }, function (res) {
+                                              App.msg.success("发送成功");
+                                          })
+                                      })*/
+                        top.layer.closeAll();
+                    }, close: function (index) {
+                        top.layer.close(index);
+                    }
+                })
             },
             showImage: function(that) {
                 var imageUrl = $(that).find("img").eq(0).attr("realUrl");