Browse Source

Merge branch 'dev2.8.5' of http://192.168.3.207:10080/qmx/jy into dev2.8.5

zhangxinlei1996 5 years ago
parent
commit
8f517669d9
25 changed files with 226 additions and 127 deletions
  1. 9 1
      src/jfw/modules/app/src/web/templates/vipsubscribe/choose_area_upgrade.html
  2. 9 2
      src/jfw/modules/app/src/web/templates/vipsubscribe/choose_industry_upgrade.html
  3. 12 8
      src/jfw/modules/app/src/web/templates/vipsubscribe/renew_notice.html
  4. 35 16
      src/jfw/modules/app/src/web/templates/vipsubscribe/renew_pay.html
  5. 7 5
      src/jfw/modules/app/src/web/templates/vipsubscribe/vip_upgrade.html
  6. 4 4
      src/jfw/modules/pushsubscribe/src/match/job/matchjob.go
  7. 2 2
      src/jfw/modules/pushsubscribe/src/match/matcher/vipmatch.go
  8. 1 1
      src/jfw/modules/pushsubscribe/src/public/entity.go
  9. 1 1
      src/jfw/modules/pushsubscribe/src/push/job/movejob.go
  10. 12 11
      src/jfw/modules/pushsubscribe/src/push/job/projectjob.go
  11. 3 0
      src/jfw/modules/pushsubscribe/src/push/pusher/specialpush.go
  12. 15 6
      src/jfw/modules/subscribepay/src/entity/subscribeVip.go
  13. 8 2
      src/jfw/modules/subscribepay/src/service/afterPay.go
  14. 1 1
      src/jfw/modules/subscribepay/src/service/vipSubscribePay.go
  15. 7 7
      src/jfw/modules/weixin/src/wx/wx.go
  16. 1 1
      src/web/staticres/vipsubscribe/css/vip_update.css
  17. 17 6
      src/web/staticres/vipsubscribe/js/additionWord.js
  18. 19 5
      src/web/staticres/vipsubscribe/js/exclusiveWord.js
  19. 32 30
      src/web/templates/weixin/historypush.html
  20. 1 1
      src/web/templates/weixin/vipsubscribe/keyWord.html
  21. 3 7
      src/web/templates/weixin/vipsubscribe/renew_notice.html
  22. 1 1
      src/web/templates/weixin/vipsubscribe/renew_pay.html
  23. 10 2
      src/web/templates/weixin/vipsubscribe/vip_index.html
  24. 11 7
      src/web/templates/weixin/vipsubscribe/vip_upgrade.html
  25. 5 0
      src/web/templates/weixin/wxkeyset/index.html

+ 9 - 1
src/jfw/modules/app/src/web/templates/vipsubscribe/choose_area_upgrade.html

@@ -13,7 +13,8 @@
     <link rel="stylesheet" type="text/css" href="/jyapp/vipsubscribe/iconfont/iconfont.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" href="/jyapp/vipsubscribe/css/public.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="/jyapp/vipsubscribe/css/choose_area.css?v={{Msg "seo" "version"}}4">
-	{{include "/common/weixin.html"}}
+	<link rel="stylesheet" type="text/css" href="/jyapp/css/layout.css?v={{Msg "seo" "version"}}"/>
+	<link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}"/>
 </head>
 <style type="text/css">
 	body,html {
@@ -21,6 +22,11 @@
 	}
 </style>
 <body>
+	<div class="app-layout-header">
+        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
+        区域选择
+    </div>
+    <div class="app-layout-content-b">
     <div id="choose_area" >
         <div class="result">
             <!-- 首次购买 显示"已选择" -----  升级订阅显示"已新增" -->
@@ -387,10 +393,12 @@
             <a href="javascript:;">Z</a>
         </div>
     </div>
+    </div>
     <script src="/jyapp/vipsubscribe/js/jquery-2.1.4.js?v={{Msg "seo" "version"}}"></script>
     <!--<script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>-->
     <script src="/jyapp/vipsubscribe/js/mapJSON.js?v={{Msg "seo" "version"}}"></script>
     <script src="/jyapp/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
+    <script src="/jyapp/js/common.js?v={{Msg "seo" "version"}}"></script>
     <script>
     	//已购买
     	var buystr = "";

+ 9 - 2
src/jfw/modules/app/src/web/templates/vipsubscribe/choose_industry_upgrade.html

@@ -11,8 +11,8 @@
         <link rel="stylesheet" type="text/css" href="/jyapp/vipsubscribe/css/base.css?v={{Msg "seo" "version"}}" />
         <link rel="stylesheet" type="text/css" href="/jyapp/vipsubscribe/iconfont/iconfont.css?v={{Msg "seo" "version"}}" />
         <link rel="stylesheet" href="/jyapp/vipsubscribe/css/choose_industry.css?v={{Msg "seo" "version"}}3">
-        {{include "/common/weixin.html"}}
-        
+		<link rel="stylesheet" type="text/css" href="/jyapp/css/layout.css?v={{Msg "seo" "version"}}"/>
+	    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}"/>
     </head>
     <style type="text/css">
     	body,html {
@@ -20,6 +20,11 @@
 		}
     </style>
     <body>
+    	<div class="app-layout-header">
+	        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
+	        行业选择
+	    </div>
+	    <div class="app-layout-content-b">
         <main class="choose_industry main">
             <div class="result">
                 <span class="label">已新增:</span>
@@ -247,10 +252,12 @@
                 </div>
             </div>
         </main>
+        </div>
         <script src="/jyapp/vipsubscribe/js/jquery-2.1.4.js?v={{Msg "seo" "version"}}"></script>
         <!--<script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>-->
         <script src="/jyapp/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
         <script src="/jyapp/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
+        <script src="/jyapp/js/common.js?v={{Msg "seo" "version"}}"></script>
         <script>
            //
            // 点击导航跳转

+ 12 - 8
src/jfw/modules/app/src/web/templates/vipsubscribe/renew_notice.html

@@ -9,7 +9,8 @@
 		<link rel="stylesheet" href="/jyapp/vipsubscribe/css/weui.min.css?v={{Msg "seo" "version"}}">
 		<link rel="stylesheet" href="/jyapp/vipsubscribe/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
 		<link rel="stylesheet" href="/jyapp/vipsubscribe/css/vip_service_expire.css?v={{Msg "seo" "version"}}1">
-		{{include "/common/weixin.html"}}
+		<link rel="stylesheet" type="text/css" href="/jyapp/css/layout.css?v={{Msg "seo" "version"}}"/>
+    	<link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}"/>
 	</head>
 	<style type="text/css">
 		body,html {
@@ -17,6 +18,11 @@
 		}
 	</style>
 	<body>
+		<div class="app-layout-header">
+	        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
+	        VIP订阅
+	    </div>
+	    <div class="app-layout-content-b">
 		<div class="vip_service_expire layout_top-bottom">
 			<div class="service_expire_tip layou_top">
                 <div class="tip_title_box">
@@ -50,11 +56,13 @@
                 <button style="display: none;" class="renew_service" onclick="window.location.href='/jyapp/vipsubscribe/renewPayPage'">续费</button>
                 <button style="display: none;" class="free_service" onclick="window.location.href='/jyapp/swordfish/historypush'">使用免费订阅</button>
             </div>
+		</div>
 		</div>
 		<script src="/jyapp/vipsubscribe/js/jquery-2.1.4.js"></script>
     	<!--<script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>-->
     	<script src="/jyapp/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
     	<script src="/jyapp/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
+		<script src="/jyapp/js/common.js?v={{Msg "seo" "version"}}"></script>
 		<script type="text/javascript">
 			//
 			var orderId = {{.T.orderId}};
@@ -189,13 +197,9 @@
 					    	$(".date-span").text(dateHtml);
 					    }
 					    if(exprie === "will"){
-					    	let a = (endstime/1000) - (86400 * 3)
-					    	let b = nowTime/1000
-					    	if(b > a){
-					    		$(".renew_service").show();
-						    	$("#exprie").text("VIP订阅服务即将到期,请及时续费")
-						    	$(".recommend_title").text("以下区域、行业的订阅推送即将停止,为了不影响您的使用,请立即续费!")
-					    	}
+				    		$(".renew_service").show();
+					    	$("#exprie").text("VIP订阅服务即将到期,请及时续费")
+					    	$(".recommend_title").text("以下区域、行业的订阅推送即将停止,为了不影响您的使用,请立即续费!")
 					    }else{
 					    	$(".renew_service").show();
 					    	$(".free_service").show();

+ 35 - 16
src/jfw/modules/app/src/web/templates/vipsubscribe/renew_pay.html

@@ -14,7 +14,8 @@
     <link rel="stylesheet" type="text/css" href="/jyapp/vipsubscribe/css/base.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" type="text/css" href="/jyapp/vipsubscribe/iconfont/iconfont.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" href="/jyapp/vipsubscribe/css/vip_update.css?v={{Msg "seo" "version"}}5">
-	{{include "/common/js.html"}}
+	<link rel="stylesheet" type="text/css" href="/jyapp/css/layout.css?v={{Msg "seo" "version"}}"/>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}"/>
 </head>
 <style type="text/css">
 	body,html {
@@ -35,7 +36,7 @@
         <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         VIP订阅续费
     </div>
-	<div class="app-layout-content-b">
+    <div class="app-layout-content-b">
     <div class="vip_renew">
         <div class="choose_condition">
              <!-- 正常点击vip首页续费进入显示下列提示 -->
@@ -208,10 +209,12 @@
             </div>
         </div>
     </div>
+    </div>
     <script src="/vipsubscribe/js/jquery-2.1.4.js"></script>
     <script src="/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}4"></script>
     <!--<script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>-->
     <script src="https://res.wx.qq.com/open/libs/weuijs/1.1.4/weui.min.js?v={{Msg "seo" "version"}}"></script>
+    <script src="/jyapp/js/common.js?v={{Msg "seo" "version"}}"></script>
     <script>
     	$(function () {    
 			var isPageHide = false;   
@@ -234,6 +237,16 @@
 
         // 选择订阅周期
         $('.select_cycle > a').click(function () {
+        	if((nowUpgrade)>=36){
+            	var overtimeWarning = `最长订阅周期不可超过3年<br />当前订阅周期:${nowUpgrade}个月`
+		        weui.toast(overtimeWarning, {
+		            duration: 3000,
+		            className: 'custom-toast',
+		            callback: function() {
+		            }
+		        })
+		        return
+            }
             $('#time_cycle').show(200);
         })
         // 选择支付方式
@@ -308,6 +321,16 @@
                 currentNum = currentNum <= data.numboxMin ? data.numboxMin : currentNum - data
                     .numboxStep;
             }
+            if((currentNum+nowUpgrade)>36){
+            	var overtimeWarning = `最长订阅周期不可超过3年<br />当前订阅周期:${nowUpgrade}个月`
+		        weui.toast(overtimeWarning, {
+		            duration: 3000,
+		            className: 'custom-toast',
+		            callback: function() {
+		            }
+		        })
+		        return
+            }
             if (currentNum >= 10) {
             	$('.profit_tips').text("已选择"+currentNum+"个月,建议“按年订阅”更划算哦~");
                 $('.profit_tips').show();
@@ -348,8 +371,17 @@
 
        /* -------- 控制年份number_box的事件  点击1年 2年 3年触发的事件------- */
         $('#number_box_year').on('click', 'span', function (e) {
-            console.log(e.target.dataset.id)
             let id = e.target.dataset.id;
+            if((id*12+nowUpgrade)>36){
+            	var overtimeWarning = `最长订阅周期不可超过3年<br />当前订阅周期:${nowUpgrade}个月`
+		        weui.toast(overtimeWarning, {
+		            duration: 3000,
+		            className: 'custom-toast',
+		            callback: function() {
+		            }
+		        })
+		        return
+            }
             $('.profit_tips').hide()
             $('#number_box_month').removeClass('active');
             $(this).addClass('active').siblings().removeClass('active')
@@ -710,7 +742,6 @@
 	    }
 	    //
 	    $(".save_renew").on("click", function(){
-	    	console.log(nowUpgrade)
 //	    	let times = $('.choose_item.select_cycle .info').attr('placeholder');
 	    	let times = $('.choose_item.select_cycle .info').val();
 	        if (times.match("月") !== null){
@@ -718,18 +749,6 @@
 	        }else if (times.match("年") !== null){
 	        	times = 12 * Number(times.replace("年",""));
 	        }
-	    	// 当续费时间 + 当前已经买的时间超过36个月,给出提醒
-	    	if(times > 36-nowUpgrade){
-	    		var overtimeWarning = `最长订阅周期不可超过3年<br />当前订阅周期:${nowUpgrade}个月`
-		        weui.toast(overtimeWarning, {
-		            duration: 3000,
-		            className: 'custom-toast',
-		            callback: function() {
-		   
-		            }
-		        })
-		        return
-	    	}
 	    	//
 	    	let payTypes = sessionStorage.payTypes;
             let payType = "";

+ 7 - 5
src/jfw/modules/app/src/web/templates/vipsubscribe/vip_upgrade.html

@@ -9,13 +9,14 @@
     <title>VIP订阅升级</title>
     <meta name="apple-mobile-web-app-capable" content="yes">
     <meta name="apple-mobile-web-app-status-bar-style" content="black">
-    <!--<script src="/jyapp/vipsubscribe/js/rem.js?v={{Msg "seo" "version"}}"></script>-->
+    <script src="/jyapp/vipsubscribe/js/rem.js?v={{Msg "seo" "version"}}"></script>
     <link rel="stylesheet" type="text/css" href="/jyapp/vipsubscribe/css/weui.min.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" type="text/css" href="/jyapp/vipsubscribe/css/base.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" type="text/css" href="/jyapp/vipsubscribe/iconfont/iconfont.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" href="/jyapp/vipsubscribe/css/public.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="/jyapp/vipsubscribe/css/vip_update.css?v={{Msg "seo" "version"}}4">
-	{{include "/common/js.html"}}
+	<link rel="stylesheet" type="text/css" href="/jyapp/css/layout.css?v={{Msg "seo" "version"}}"/>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}"/>
 </head>
 <style type="text/css">
 	body,html {
@@ -36,13 +37,13 @@
         <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         VIP订阅升级
     </div>
-	<div class="app-layout-content-b">
+    <div class="app-layout-content-b">
     <div class="vip_update">
         <div class="choose_condition">
             <p class="update_tip">提示:订阅升级可在已购买的服务基础上,增加区域、行业、以及延长订阅周期!</p>
             <ul class="chooseList">
                 <li class="choose_item">
-                    <a href="/jyapp/front/vipsubscribe/toChooseAreaUpgrade">
+                    <a href="/jyapp/vipsubscribe/toChooseAreaUpgrade">
                         <span class="label">区域</span>
                         <input type="text" id="area" value="" onfocus="this.blur();" placeholder="选择全国、省份、地市" class="info">
                         <i class="iconfont icon-arrow"></i>
@@ -50,7 +51,7 @@
                     <p class="add_tips area-list" style="display: none;">已新增 1 个省级区域、4 个地市</p>
                 </li>
                 <li class="choose_item">
-                    <a href="/jyapp/front/vipsubscribe/toChooseIndustryUpgrade">
+                    <a href="/jyapp/vipsubscribe/toChooseIndustryUpgrade">
                         <span class="label">行业</span>
                         <input type="text" id="buyerclass" onfocus="this.blur();" value="" placeholder="选择采购单位行业" class="info">
                         <i class="iconfont icon-arrow"></i>
@@ -310,6 +311,7 @@
     <!--<script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>-->
     <script src="/jyapp/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
     <script src="/jyapp/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}3"></script>
+    <script src="/jyapp/js/common.js?v={{Msg "seo" "version"}}"></script>
     <script>
         $(function () {    
 			var isPageHide = false;   

+ 4 - 4
src/jfw/modules/pushsubscribe/src/match/job/matchjob.go

@@ -203,7 +203,7 @@ func (m *MatchJob) ToMatch(batchIndex int, matcher Matcher, datas *[]map[string]
 				"vipstatus":     user.VipStatus,
 			})
 			if len(saveBatch) == BulkSize {
-				mongodb.SaveBulk(Pushspace_project, saveBatch...)
+				mongodb.SaveBulk(Pushspace_temp, saveBatch...)
 				saveBatch = []map[string]interface{}{}
 			}
 		}(u, i)
@@ -277,7 +277,7 @@ func (m *MatchJob) ToRelationProject(projectUser *sync.Map) {
 							"infoid":     _id,
 							"userid":     user.Id,
 							"maxid":      list_last_infoid,
-							"toptypes":   user.O_vipjy.TopTypes,
+							"subtypes":   user.O_vipjy.SubTypes,
 							"createtime": time.Now().Unix(),
 						},
 					},
@@ -322,7 +322,7 @@ func (m *MatchJob) LoadBidding(lastId, newId string, lastTime int64) *[]map[stri
 		c_query["_id"] = idQuery
 	}
 	//c_query = map[string]interface{}{
-	//"_id": bson.ObjectIdHex("5da4c4dfa5cb26b9b7ffdc5d"),
+	//"_id": bson.ObjectIdHex("5da6c3bda5cb26b9b7da1ffe"),
 	//}
 	logger.Info("开始加载", Bidding, "数据", c_query)
 	var res []map[string]interface{}
@@ -571,7 +571,7 @@ func (m *MatchJob) OnceUserBatch(batchIndex int, lastUserId *string) (int, *VipU
 						if s_v == "" {
 							continue
 						}
-						user.O_vipjy.TopTypes = append(user.O_vipjy.TopTypes, s_v)
+						user.O_vipjy.SubTypes = append(user.O_vipjy.SubTypes, s_v)
 						vipUser.Add(s_v, user, &vipUser.InfoTypeUsers)
 					}
 				}

+ 2 - 2
src/jfw/modules/pushsubscribe/src/match/matcher/vipmatch.go

@@ -41,7 +41,7 @@ func (v *VipUser) Match(info *map[string]interface{}) (*map[*UserInfo]*MatchUser
 		area = ""
 	}
 	city, _ := (*info)["city"].(string)
-	toptype, _ := (*info)["toptype"].(string)
+	subtype, _ := (*info)["subtype"].(string)
 	title, _ := (*info)["title"].(string)
 	title = strings.ToUpper(title)
 	//订阅词
@@ -92,7 +92,7 @@ func (v *VipUser) Match(info *map[string]interface{}) (*map[*UserInfo]*MatchUser
 		if k.O_vipjy.ProjectMatch == 1 {
 			projectUsers = append(projectUsers, k)
 		}
-		if !v.InfoTypeUsers[""][k] && !v.InfoTypeUsers[toptype][k] {
+		if !v.InfoTypeUsers[""][k] && !v.InfoTypeUsers[subtype][k] {
 			continue
 		}
 		users[k] = matchUser

+ 1 - 1
src/jfw/modules/pushsubscribe/src/public/entity.go

@@ -40,7 +40,7 @@ type O_jy struct {
 	Infotype map[string]map[string]bool //关键词-信息类型
 }
 type O_vipjy struct {
-	TopTypes     []string
+	SubTypes     []string
 	ProjectMatch int
 }
 

+ 1 - 1
src/jfw/modules/pushsubscribe/src/push/job/movejob.go

@@ -106,7 +106,7 @@ func (m *MoveJob) Execute() {
 		}(data)
 		data = make(map[string]interface{})
 		if index%500 == 0 {
-			logger.Info("迁移数据", index)
+			logger.Info("迁移数据", index)
 		}
 	}
 	m.moveWait.Wait()

+ 12 - 11
src/jfw/modules/pushsubscribe/src/push/job/projectjob.go

@@ -35,6 +35,7 @@ func (p *ProjectPushJob) Execute() {
 	for {
 		batchIndex++
 		batchCount, datas := p.loadPushspace_project(batchIndex, &startId)
+		logger.Info("开始第", batchIndex, "次关联项目匹配。。。")
 		index := 0
 		for k, v := range *datas {
 			p.pushPool <- true
@@ -80,11 +81,11 @@ func (p *ProjectPushJob) Execute() {
 						if !ok {
 							return
 						}
-						topTypes, _ := list[i]["toptypes"].([]interface{})
+						subtypes, _ := list[i]["subtypes"].([]interface{})
 						maxId, _ := list[i]["maxid"].(string)
-						userTopType := map[string]bool{}
-						for _, t := range topTypes {
-							userTopType[util.ObjToString(t)] = true
+						userSubtype := map[string]bool{}
+						for _, t := range subtypes {
+							userSubtype[util.ObjToString(t)] = true
 						}
 						//
 						project, _ := pi.(map[string]interface{})
@@ -100,8 +101,8 @@ func (p *ProjectPushJob) Execute() {
 							if unix-publishtime > Config.ProjectPublishTimeLimit { //发布时间7天之内
 								continue
 							}
-							topType, _ := plm["toptype"].(string)
-							if len(userTopType) > 0 && !userTopType[topType] {
+							subtype, _ := plm["subtype"].(string)
+							if len(userSubtype) > 0 && !userSubtype[subtype] {
 								continue
 							}
 							isExists, err := redis.Exists(Pushcache_2_a, PushInfoKey(userId, infoId))
@@ -140,7 +141,7 @@ func (p *ProjectPushJob) Execute() {
 						}
 					}
 					if len(updateProject) > 0 {
-						mongodb.NewUpdateBulk(Pushspace_project, updateProject...)
+						mongodb.NewUpdateBulk(Pushspace_project, true, true, updateProject...)
 					}
 					if len(updateProject) < BigBulkSize {
 						break
@@ -172,11 +173,11 @@ func (p *ProjectPushJob) Execute() {
 			}(k, v)
 			index++
 			if index%500 == 0 {
-				logger.Info("第", batchIndex, "次关联项目匹配", index)
+				logger.Info("第", batchIndex, "次关联项目匹配", index)
 			}
 		}
 		p.pushWait.Wait()
-		logger.Info("第", batchIndex, "次关联项目匹配", index)
+		logger.Info("第", batchIndex, "次关联项目匹配结束", index)
 		if batchCount < Config.PushBatch {
 			break
 		}
@@ -220,7 +221,7 @@ func (p *ProjectPushJob) loadPushspace_project(batchIndex int, startId *string)
 	it := sess.DB(DbName).C(Pushspace_project).Find(query).Select(map[string]interface{}{
 		"_id":       1,
 		"maxid":     1,
-		"toptypes":  1,
+		"subtypes":  1,
 		"userid":    1,
 		"projectid": 1,
 	}).Sort("-_id", "userid").Iter()
@@ -277,7 +278,7 @@ func (p *ProjectPushJob) loadProject() *sync.Map {
 		m = make(map[string]interface{})
 		index++
 		if index%500 == 0 {
-			logger.Info("加载项目", index)
+			logger.Info("加载项目", index)
 		}
 	}
 	p.loadWait.Wait()

+ 3 - 0
src/jfw/modules/pushsubscribe/src/push/pusher/specialpush.go

@@ -58,6 +58,9 @@ func (s *SpecialPush) GetUserInfo(user map[string]interface{}) (*UserInfo, *puti
 		return nil, nil
 	}
 	userInfo, _ := NewUserInfoByUserColl(u)
+	if userInfo == nil {
+		return nil, nil
+	}
 	if !IsVipUser(userInfo.VipStatus) {
 		logger.Info(userId, "已经不是vip用户了", userInfo.VipStatus)
 		s.deletePushspaceVip(user)

+ 15 - 6
src/jfw/modules/subscribepay/src/entity/subscribeVip.go

@@ -132,9 +132,11 @@ func (this *vipSubscribeStruct) PayCallBack(param *CallBackParam) bool {
 	} else if vmsg.OrderType == 2 { //续费
 		flag = JyVipSubStruct.RenewSubVip(userid, qutil.ObjToString((*orderdata)["vip_endtime"]))
 	} else if vmsg.OrderType == 3 { //立即升级
-		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_endtime"]), true)
-	} else if vmsg.OrderType == 4 || vmsg.OrderType == 5 { //下月升级
-		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_endtime"]), false)
+		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_starttime"]), qutil.ObjToString((*orderdata)["vip_endtime"]), true, "no")
+	} else if vmsg.OrderType == 4 { //下月升级
+		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_starttime"]), qutil.ObjToString((*orderdata)["vip_endtime"]), false, "no")
+	} else if vmsg.OrderType == 5 {
+		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_starttime"]), qutil.ObjToString((*orderdata)["vip_endtime"]), false, "exprie")
 	} else if vmsg.OrderType == 6 { //下月升级未生效再次升级
 		flag = JyVipSubStruct.UpgradeSubVipTwo(userid, vmsg, qutil.ObjToString((*orderdata)["vip_endtime"]), false)
 	}
@@ -182,13 +184,14 @@ func (this *vipSubscribeStruct) RenewSubVip(userId, endtime string) bool {
 }
 
 //升级
-func (this *vipSubscribeStruct) UpgradeSubVip(userId string, vmsg VipSimpleMsg, end string, isNow bool) bool {
+func (this *vipSubscribeStruct) UpgradeSubVip(userId string, vmsg VipSimpleMsg, start string, end string, isNow bool, isExprie string) bool {
 	//	startTime, err := time.ParseInLocation(qutil.Date_Full_Layout, start, time.Local)
 	//	if err != nil {
 	//		log.Println("%s格式化日期出错%s\n", userId, start)
 	//		return false
 	//	}
-	endTime, err := time.ParseInLocation(qutil.Date_Full_Layout, end, time.Local)
+	endTime, _ := time.ParseInLocation(qutil.Date_Full_Layout, end, time.Local)
+	startTime, err := time.ParseInLocation(qutil.Date_Full_Layout, start, time.Local)
 	if err != nil {
 		log.Println("%s格式化日期出错%s\n", userId, endTime)
 		return false
@@ -213,7 +216,13 @@ func (this *vipSubscribeStruct) UpgradeSubVip(userId string, vmsg VipSimpleMsg,
 			log.Printf("%s更新结束%d日期出错\n", userId, endTime.Unix())
 			return false
 		}
-		effectTime := time.Date(time.Now().Year(), time.Now().Month()+1, 1, 0, 0, 0, 0, time.Local)
+		var effectTime time.Time
+		if isExprie != "no" {
+			effectTime = startTime
+		} else {
+			effectTime = time.Date(time.Now().Year(), time.Now().Month()+1, 1, 0, 0, 0, 0, time.Local)
+		}
+
 		return util.MQFW.Save("vip_upgrade",
 			bson.M{
 				"s_userid":     userId,            //试用设置地区

+ 8 - 2
src/jfw/modules/subscribepay/src/service/afterPay.go

@@ -186,17 +186,23 @@ func (a *AfterPay) SetUserInfo() error {
 				_kws := strings.Split(kws_name, " ")
 				if actionType == "SK" { //保存关键词
 					if len(addtion_kws) > 0 {
-						for _, addval := range addtion_kws {
+						for i, addval := range addtion_kws {
 							if len([]rune(addval)) > 20 {
 								addval = qutil.SubString(addval, 0, 20)
 							}
+							if addval == "" {
+								addtion_kws = append(addtion_kws[:i], addtion_kws[i+1:]...)
+							}
 						}
 					}
 					if len(not_kws) > 0 {
-						for _, notval := range not_kws {
+						for i, notval := range not_kws {
 							if len([]rune(notval)) > 20 {
 								notval = qutil.SubString(notval, 0, 20)
 							}
+							if notval == "" {
+								not_kws = append(not_kws[:i], not_kws[i+1:]...)
+							}
 						}
 					}
 					if kwscount != "0" {

+ 1 - 1
src/jfw/modules/subscribepay/src/service/vipSubscribePay.go

@@ -135,7 +135,7 @@ func (this *SubVipPayOrder) CreateOrder() {
 		if orderType == 5 { //插入生效时间和结束时间
 			timeStamp := qutil.Int64All((*userData)["l_vip_endtime"])
 			startTime := time.Unix(timeStamp, 0)
-			endTime := util.GetDATE(filter.Cycleunit, filter.Cycleunit, timeStamp)
+			endTime := util.GetDATE(filter.Cycleunit, filter.Cyclecount, timeStamp)
 			insertMap["vip_starttime"] = qutil.FormatDate(&startTime, qutil.Date_Full_Layout)
 			insertMap["vip_endtime"] = qutil.FormatDate(&endTime, qutil.Date_Full_Layout)
 		}

+ 7 - 7
src/jfw/modules/weixin/src/wx/wx.go

@@ -102,7 +102,7 @@ func MsgTxtHandler(w ResponseWriter, r *Request) {
 	}
 	autoReply_reg, _ := regexp.Compile("剑鱼|招标|中标|订阅|公告|项目|设置|推送")
 	shalong_text, shalong_img := "", ""
-	log.Println(len(autoReply_reg.FindStringIndex(r.Content)))
+	//	log.Println(len(autoReply_reg.FindStringIndex(r.Content)))
 	if strings.Replace(r.Content, " ", "", -1) == "沙龙" {
 		shalong_text, shalong_img = shalongActive.Get()
 	}
@@ -213,8 +213,8 @@ func pcSetUserKeys(user map[string]interface{}, shareid, pccodepre string) (map[
 	result := "fail"
 	subkey := redis.Get("sso", "pc_subscribe_"+shareid)
 	keys := strings.Split(fmt.Sprint(subkey), " ")
-	log.Println(subkey)
-	log.Println(keys)
+	//	log.Println(subkey)
+	//	log.Println(keys)
 	if subkey != nil {
 		if o_jy, ok := user["o_jy"].(map[string]interface{}); ok {
 			if tmp, ok := o_jy["a_key"].([]interface{}); ok {
@@ -242,7 +242,7 @@ func pcSetUserKeys(user map[string]interface{}, shareid, pccodepre string) (map[
 							}
 							if result != "repeat" {
 								keys := strings.Split(fmt.Sprint(subkey), " ")
-								log.Println("==:", keys)
+								//								log.Println("==:", keys)
 								tmp = append(tmp, map[string]interface{}{"key": keys})
 								o_jy["a_key"] = tmp
 								result = "ok"
@@ -329,7 +329,7 @@ func saveUser(u *UserInfo, source, pre, RSource string) (bool, string, string) {
 	isJyopUser := strings.HasPrefix(source, "Jyop")
 	pcresult := "" //pc订阅结果
 	subkey := ""   //pc订阅关键词
-	log.Println("保存用户:", subkey)
+	//	log.Println("保存用户:", subkey)
 	fg := false
 	tusers, ok := tools.MQFW.Find("user", map[string]interface{}{
 		"s_unionid": u.UnionId,
@@ -1396,7 +1396,7 @@ func YjHandle(w http.ResponseWriter, r *http.Request) {
 	} else {
 		tmp := map[string]interface{}{}
 		json.Unmarshal(ret, &tmp)
-		log.Println(tmp)
+		//		log.Println(tmp)
 		url := tmp["url"].(string)
 		w.Write([]byte(url))
 	}
@@ -1559,7 +1559,7 @@ func vipFastSubscribe(user *map[string]interface{}, keyWord, openId string) (ret
 		}
 		if keysCount+len(keysFilter) > 300 {
 			//vip订阅超过300组关键词
-			log.Println("vip订阅超过300组关键词-----")
+			//			log.Println("vip订阅超过300组关键词-----")
 			return -3, strings.Replace(keyWord, "+", " ", -1), hasOldKey
 		}
 	}

+ 1 - 1
src/web/staticres/vipsubscribe/css/vip_update.css

@@ -532,7 +532,7 @@
   float: left;
   width: 5rem;
   height: 100%;
-  color: #686868;
+  color: #000;
   font-size: 0.28rem;
   text-align: right;
   overflow: hidden;

+ 17 - 6
src/web/staticres/vipsubscribe/js/additionWord.js

@@ -39,7 +39,7 @@ $(function(){
     // 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
     $('.addkeyWord input.enterOne').on('input', function() {
         var buttonDOM = $(this).siblings().find('button')[1]
-        if ($(this).val().length >= 1) {
+        if ($.trim($(this).val()).length >= 1) {
             buttonDOM.style.opacity = 1
             buttonDOM.removeAttribute("disabled")
         } else {
@@ -51,8 +51,13 @@ $(function(){
     // 添加 按钮的点击事件
     $('.addkeyWord .btn button:nth-child(2)').on('click', function(){
         var timestamp = new Date().getTime();//动态生成不同的id,因为id唯一不能重复,所以 用时间戳 代替  防止重复
-        var keyWord = $('.addkeyWord input.enterOne').val();
-		if(keyWord==""){
+        var keyWord = $.trim($('.addkeyWord input.enterOne').val());
+		if(keyWord==""&&keyWord.length==0){
+            weui.toast('附加词不能为空', {
+                duration: 2000,
+                className: 'custom-toast',
+                callback: function () { console.log('close') }
+            });
 			return
 		}
 		_addindex = 0;
@@ -114,7 +119,7 @@ $(function(){
     // 编辑 删除
     $('.showKeyWord').on('click', '.deleteKey', function(e) {
         var jQueryDOM = $(this).parents('li');
-        _addkws = $(this).siblings('textarea').val();
+        _addkws = $.trim($(this).siblings('textarea').val());
 		var _index =  $('.showKeyWord li').length - $(this).parent().parent("li").index() -1;
         weui.confirm('确定要删除附加词?', {
             buttons: [{
@@ -134,9 +139,15 @@ $(function(){
     })
     // 编辑 确定
     $('.showKeyWord').on('click', '.ascertainKey', function(e) {
-        var keyWord = $(this).siblings('textarea').val();
+        var keyWord = $.trim($(this).siblings('textarea').val());
 		var _index =  $('.showKeyWord li').length - $(this).parent().parent("li").index() -1;
-        if(keyWord.length > 20){
+		if(keyWord.length==0){
+            weui.toast('附加词不能为空', {
+                duration: 2000,
+                className: 'custom-toast',
+                callback: function () { console.log('close') }
+            });
+		}else if(keyWord.length > 20){
             weui.toast('每组附加词不能超过20字', {
                 duration: 2000,
                 className: 'custom-toast',

+ 19 - 5
src/web/staticres/vipsubscribe/js/exclusiveWord.js

@@ -43,7 +43,7 @@ $(function(){
         }
 
         var buttonDOM = $(this).siblings().find('button')[1]
-        if ($(this).val().length >= 1) {
+        if ($.trim($(this).val()).length >= 1) {
             buttonDOM.style.opacity = 1
             buttonDOM.removeAttribute("disabled")
         } else {
@@ -63,7 +63,15 @@ $(function(){
     // 添加 按钮的点击事件
    
     $('.addkeyWord .btn button:nth-child(2)').on('click', function(){
-        var keyWord = $('.addkeyWord input.enterOne').val()
+        var keyWord = $.trim($('.addkeyWord input.enterOne').val());
+		if (keyWord==""){
+            weui.toast('排除词不能为空', {
+                duration: 2000,
+                className: 'custom-toast',
+                callback: function () { console.log('close') }
+            });
+			return
+		}
 		_notindex = 0;
 		if($(".showKeyWord li").length>0){
         	_notindex = Number($(".showKeyWord li:first").find(".editKeyWord").attr("dataIndex")) + Number(1);
@@ -123,7 +131,7 @@ $(function(){
     // 编辑 删除
     $('.showKeyWord').on('click', '.deleteKey', function(e) {
         var jQueryDOM = $(this).parents('li');
-        _notkws = $(this).siblings('textarea').val();
+        _notkws = $.trim($(this).siblings('textarea').val());
 		var _index =  $('.showKeyWord li').length - $(this).parent().parent("li").index() -1;
         weui.confirm('确定要删除排除词?', {
             buttons: [{
@@ -145,9 +153,15 @@ $(function(){
     // 编辑 确定
     $('.showKeyWord').on('click', '.ascertainKey', function(e) {
         var $this = $(this);
-        var keyWord = $(this).siblings('textarea').val();
+        var keyWord = $.trim($(this).siblings('textarea').val());
 		var _index =  $('.showKeyWord li').length - $(this).parent().parent("li").index() -1;
-        if(keyWord.length > 20){
+		if(keyWord.length ==0){
+            weui.toast('排除词不能为空', {
+                duration: 2000,
+                className: 'custom-toast',
+                callback: function () { console.log('close') }
+            });
+        }else if(keyWord.length > 20){
             weui.toast('每组排除词不能超过20字', {
                 duration: 2000,
                 className: 'custom-toast',

+ 32 - 30
src/web/templates/weixin/historypush.html

@@ -96,9 +96,9 @@
 				hasNextPage = sessionStorage.historypushHasNextPage=="true"?true:false;
 				scrollTop = sessionStorage.historypushScrollTop;
 				dataCache = JSON.parse(sessionStorage.historypushDataCache);
-				isVipSub = sessionStorage.isVipSub=="true"?true:false;;
-				isPassCount = sessionStorage.isPassCount=="true"?true:false;;
-				haskey = sessionStorage.haskey=="true"?true:false;;
+				isVipSub = sessionStorage.isVipSub=="true"?true:false;
+				isPassCount = sessionStorage.isPassCount=="true"?true:false;
+				haskey = sessionStorage.haskey=="true"?true:false;
 				isOnTail = sessionStorage.isOnTail;
 				isExpire = sessionStorage.isExpire;
 				userId = sessionStorage.userId;
@@ -109,10 +109,12 @@
 			    }
 				$("#list>*").remove();
 				count = 0;
+				firstPage = dataCache;
 				if(dataCache.length==0){
 					hasNoData();
+				}else{
+					structureHtml(dataCache,true);
 				}
-				structureHtml(dataCache,true);
 				$(window).scrollTop(scrollTop);
 				sessionStorage.removeItem("historypushDataCache");
 				sessionStorage.removeItem("historypushPageIndexCache");
@@ -152,21 +154,6 @@
 						isExpire = data.isExpire;
 						sessionStorage.isExpire = isExpire;
 						sessionStorage.setItem(userId+"_searchTime",firstTime);
-						if(!firstPage.length>0 && !haskey){
-							if(sessionStorage&&(sessionStorage.keysetindexToHistory=="1"||sessionStorage.keysetindexToHistory=="2"||sessionStorage.keysetindexToHistory=="3")){
-								sessionStorage.removeItem("keysetindexToHistory");
-								if(sessionStorage.keysetindexToHistory=="1"){
-									wx.ready(function () {
-										wx.closeWindow();
-									});
-								}else{
-									setTimeout(function(){
-										wx.closeWindow();
-									},2000);
-								}
-								return
-							}
-						}
 						showPage();
 					},
 					error: function(xhr, type){
@@ -248,22 +235,37 @@
 			//地区渲染
   			mapData();
 			if(!isVipSub){
-				history.pushState({},"","");
-				if(isInTSguide){
-					if(localStorage){
-						localStorage.removeItem("tsGuide_status");
-					}
-					window.location.href='/front/tenderSubscribe/guide';
-				}else{
-					window.location.href='/wxkeyset/keyset/index';
-				}
+				$(".normal_set").show();
+				$(".tab_left .area").hide();
 				$(".vip_banner").show();
 				$(".subscribe").css("margin-top","2rem");
 				if(isPassCount){
 					$(".open_remind").show();
 				}
-				$(".normal_set").show();
-				$(".tab_left .area").hide();
+				if(!firstPage.length>0 && !haskey){
+					if(sessionStorage&&(sessionStorage.keysetindexToHistory=="1"||sessionStorage.keysetindexToHistory=="2"||sessionStorage.keysetindexToHistory=="3")){
+						sessionStorage.removeItem("keysetindexToHistory");
+						if(sessionStorage.keysetindexToHistory=="1"){
+							wx.ready(function () {
+								wx.closeWindow();
+							});
+						}else{
+							setTimeout(function(){
+								wx.closeWindow();
+							},2000);
+						}
+						return
+					}
+					history.pushState({},"","");
+					if(isInTSguide){
+						if(localStorage){
+							localStorage.removeItem("tsGuide_status");
+						}
+						window.location.href='/front/tenderSubscribe/guide';
+					}else{
+						window.location.href='/wxkeyset/keyset/index';
+					}
+				}
 			}else{
 				if(!haskey){
 					$(".set_keyword").show();

+ 1 - 1
src/web/templates/weixin/vipsubscribe/keyWord.html

@@ -417,7 +417,7 @@
                     if(keystr!=""){
                         keystr += "、"
                     }
-                    keystr += a_key[j]["key"].join('');
+                    keystr += a_key[j]["key"].join(' ');
 					kws_arr[a_key[j]["key"].join(' ')]=j+"-"+i
                 } 
                 classifyHtml +='<li class="classify-item">'

+ 3 - 7
src/web/templates/weixin/vipsubscribe/renew_notice.html

@@ -192,13 +192,9 @@
 					    	$(".date-span").text(dateHtml);
 					    }
 					    if(exprie === "will"){
-					    	let a = (endstime/1000) - (86400 * 3)
-					    	let b = nowTime/1000
-					    	if(b > a){
-					    		$(".renew_service").show();
-						    	$("#exprie").text("VIP订阅服务即将到期,请及时续费")
-						    	$(".recommend_title").text("以下区域、行业的订阅推送即将停止,为了不影响您的使用,请立即续费!")
-					    	}
+				    		$(".renew_service").show();
+					    	$("#exprie").text("VIP订阅服务即将到期,请及时续费")
+					    	$(".recommend_title").text("以下区域、行业的订阅推送即将停止,为了不影响您的使用,请立即续费!")
 					    }else{
 					    	$(".renew_service").show();
 					    	$(".free_service").show();

+ 1 - 1
src/web/templates/weixin/vipsubscribe/renew_pay.html

@@ -711,7 +711,7 @@
 		var nowYear = new Date(startTime).getFullYear();
 		var nowDay = new Date(startTime).getDate();
 		//
-		var endMonth = new Date(endTime).getMonth();
+		var endMonth = new Date(endTime).getMonth()+1;
 		var endYear = new Date(endTime).getFullYear();
 		var endDay = new Date(endTime).getDate();
 		var nowUpgrade = 0;

+ 10 - 2
src/web/templates/weixin/vipsubscribe/vip_index.html

@@ -292,10 +292,18 @@
 							//地区
 							var area = _vipData["o_area"];
 							var _area = getAreaClassArr_index(area)
-	                        $("._area").text(_area.join("、"));
+							if (_area.length>0){
+	                        	$("._area").text(_area.join("、"));
+							}else{
+	                        	$("._area").text("全国");
+							}
 							//行业
 							var buyerclass =  SortArr(_vipData["a_buyerclass"]);
-	                        $("._buyerClass").text(buyerclass.join("、"));
+							if (buyerclass.length>0){
+	                        	$("._buyerClass").text(buyerclass.join("、"));
+							}else{
+	                        	$("._buyerClass").text("全部行业");
+							}
 	                        $("._cycleCount").text(_vipData["cycle"]);
 	                        $("._activeDate").text(_userData["l_vip_starttime"]+" - "+_userData["l_vip_endtime"]);
 	                        if(_vipData["a_infotype"]==""){

+ 11 - 7
src/web/templates/weixin/vipsubscribe/vip_upgrade.html

@@ -14,16 +14,20 @@
     <link rel="stylesheet" type="text/css" href="/vipsubscribe/css/base.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" type="text/css" href="/vipsubscribe/iconfont/iconfont.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" href="/vipsubscribe/css/public.css?v={{Msg "seo" "version"}}">
-    <link rel="stylesheet" href="/vipsubscribe/css/vip_update.css?v={{Msg "seo" "version"}}4">
+    <link rel="stylesheet" href="/vipsubscribe/css/vip_update.css?v={{Msg "seo" "version"}}6">
 	{{include "/common/weixin.html"}}
 </head>
 <style type="text/css">
 	body,html {
 		height: 100%;
 	}
-	::-webkit-input-placeholder { /* Chrome/Opera/Safari */
-	  	color: #686868;
+	.vip_update .choose_condition .chooseList .choose_item a .info::placeholder,
+	.vip_update .choose_condition .pay_mode .choose_item a .info::placeholder {
+	    color: #000;
 	}
+	::-webkit-input-placeholder { /* Chrome/Opera/Safari */
+ 	  	color: #000;
+ 	}
 	.weixin_pay{
 		padding-right: 3px;
 	}
@@ -50,7 +54,7 @@
                 <li class="choose_item">
                     <a href="/front/vipsubscribe/toChooseAreaUpgrade">
                         <span class="label">区域</span>
-                        <input type="text" id="area" value="" onfocus="this.blur();" placeholder="选择全国、省份、地市" class="info">
+                        <input type="text" id="area" value="" disabled placeholder="选择全国、省份、地市" class="info">
                         <i class="iconfont icon-arrow"></i>
                     </a>
                     <p class="add_tips area-list" style="display: none;">已新增 1 个省级区域、4 个地市</p>
@@ -58,7 +62,7 @@
                 <li class="choose_item">
                     <a href="/front/vipsubscribe/toChooseIndustryUpgrade">
                         <span class="label">行业</span>
-                        <input type="text" id="buyerclass" onfocus="this.blur();" value="" placeholder="选择采购单位行业" class="info">
+                        <input type="text" id="buyerclass" disabled value="" placeholder="选择采购单位行业" class="info">
                         <i class="iconfont icon-arrow"></i>
                     </a>
                     <p class="add_tips industry-list" style="display: none;">已新增 2 个行业</p>
@@ -932,7 +936,7 @@
 					if(checkObj(area)){
 						areaHtml = "全国";
 					}
-			    	$('#area').val(areaHtml);
+			    	$('#area').attr("placeholder",areaHtml);
 			    }
 			    if(buyerclass !== "" && buyerclass !== undefined){
 			    	for(var i in buyerclass){
@@ -944,7 +948,7 @@
 					if(checkObj(buyerclass)){
 						buyerclassHtml = "全行业";
 					}
-					$('#buyerclass').val(buyerclassHtml);
+					$('#buyerclass').attr("placeholder",buyerclassHtml);
 			    }
 			    //
 			    var nowDate = data.now.replace(/-/g, ".");

+ 5 - 0
src/web/templates/weixin/wxkeyset/index.html

@@ -209,6 +209,11 @@ $(function(){
 		if(myArray.length>=10){
 			$("#ten").css("margin-bottom","1rem");
 		}
+		if (myArray.length>0){
+			sessionStorage.haskey = true;
+		}else{
+			sessionStorage.haskey = false;
+		}
 		isfocusing = false;
 		var thisClass = $(this);
 		$(".keyword").attr("readonly",false);