wzh před 11 měsíci
rodič
revize
b5772ec2a7

+ 2 - 1
src/main/java/com/qlm/controller/core/QrcodeAddController.java

@@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory;
 
 import com.jfinal.aop.Before;
 import com.jfinal.core.Controller;
+import com.jfinal.plugin.activerecord.Db;
 import com.jfinal.plugin.activerecord.Record;
 import com.qlm.annotation.RequestUrl;
 import com.qlm.controller.common.CommonController;
@@ -36,7 +37,7 @@ public class QrcodeAddController extends CommonController{
 		AdminView loginUser = getLoginUser();
 		List<String> urlList = qrcodeAddService.getPropertiesUrl();
 		setAttr("urlList", urlList);
-		List<Record> productList = productService.getProductInfoList(loginUser);
+		List<Record> productList = Db.find("select * from t_jz_item where code_length>0");
 		setAttr("productList", productList);
 		render("/page/qrcode.jsp");
 	}

+ 99 - 18
src/main/java/com/qlm/service/impl/QrcodeAddServiceImpl.java

@@ -3,7 +3,10 @@ package com.qlm.service.impl;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -57,9 +60,6 @@ public class QrcodeAddServiceImpl implements IQrcodeAddService {
 		logger.info("method getZipFilePath addNum=" + addNum);
 		logger.info("method getZipFilePath area=" + area);
 		// 判断传入参数是否正确
-		if (!Common.isEmptyString(url)) {
-			return "网络连接错误";
-		}
 		if (!Common.isEmptyString(code)) {
 			return "网络连接错误";
 		}
@@ -102,9 +102,9 @@ public class QrcodeAddServiceImpl implements IQrcodeAddService {
 			String createTime = DateUtils.getStringFullDate();// 产码时间
 			
 			String sql = "select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='" + dbname + "' and TABLE_NAME= ? ";
-			String qrcodeSql = "create table "+tablename+" (`id` char(20) NOT NULL COMMENT '第一位是分表',`type_` int(11) NOT NULL DEFAULT '0',`config_id` int(11) DEFAULT NULL,`master_code` varchar(20) DEFAULT NULL,`active_time` datetime DEFAULT NULL COMMENT '激活时间',`num_` int(11),`area` varchar(255) DEFAULT NULL DEFAULT NULL,PRIMARY KEY (`id`),KEY `num_` (`num_`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8";
-			String hbSql = "create table "+hbtable+" (`id` char(20) NOT NULL,  `openid` varchar(64) DEFAULT NULL,  `send_time` datetime DEFAULT NULL COMMENT '首次扫码时间',  `amount` int(11) DEFAULT NULL,  `send_state` smallint(6) DEFAULT NULL,  `no_` varchar(50) DEFAULT NULL,`nick_name` varchar(100) DEFAULT NULL,`type_` int(11) DEFAULT NULL, PRIMARY KEY (`id`),UNIQUE KEY `no_` (`no_`) USING BTREE,KEY `send_time` (`send_time`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8";
-			String scanSql = "create table "+scantable+" (`id` char(20) NOT NULL,  `openid` varchar(64) DEFAULT NULL,  `scan_time` datetime DEFAULT NULL COMMENT '首次扫码时间',  `nick_name` varchar(255) DEFAULT NULL COMMENT '首次扫码人昵称',  `scan_count` int(11) DEFAULT NULL COMMENT '被扫次数',  `amount` int(11) DEFAULT NULL,  `type_` int(11) DEFAULT NULL,`head_pic` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8";
+			String qrcodeSql = "create table "+tablename+" (`id` char(50) NOT NULL COMMENT '第一位是分表',`type_` int(11) NOT NULL DEFAULT '0',`config_id` int(11) DEFAULT NULL,`master_code` varchar(20) DEFAULT NULL,`active_time` datetime DEFAULT NULL COMMENT '激活时间',`num_` int(11),`area` varchar(255) DEFAULT NULL DEFAULT NULL,PRIMARY KEY (`id`),KEY `num_` (`num_`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8";
+			String hbSql = "create table "+hbtable+" (`id` char(50) NOT NULL,  `openid` varchar(64) DEFAULT NULL,  `send_time` datetime DEFAULT NULL COMMENT '首次扫码时间',  `amount` int(11) DEFAULT NULL,  `send_state` smallint(6) DEFAULT NULL,  `no_` varchar(50) DEFAULT NULL,`nick_name` varchar(100) DEFAULT NULL,`type_` int(11) DEFAULT NULL, PRIMARY KEY (`id`),UNIQUE KEY `no_` (`no_`) USING BTREE,KEY `send_time` (`send_time`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8";
+			String scanSql = "create table "+scantable+" (`id` char(50) NOT NULL,  `openid` varchar(64) DEFAULT NULL,  `scan_time` datetime DEFAULT NULL COMMENT '首次扫码时间',  `nick_name` varchar(255) DEFAULT NULL COMMENT '首次扫码人昵称',  `scan_count` int(11) DEFAULT NULL COMMENT '被扫次数',  `amount` int(11) DEFAULT NULL,  `type_` int(11) DEFAULT NULL,`head_pic` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8";
 //			String activateSql = "CREATE TABLE "+activatetable+" (  `id` char(16) NOT NULL,`config_id` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
 			if( Db.queryLong(sql,tablename) <= 0){
 				Db.update(qrcodeSql);
@@ -126,8 +126,7 @@ public class QrcodeAddServiceImpl implements IQrcodeAddService {
 			long startNum = maxNum;
 			int insertCount = 0;// 已生成二维码数量
 			put(map, id, insertCount);
-			
-			Record product = productService.getProductInfoByType(type);
+			Integer code_length = Db.queryInt("select code_length from t_jz_item where id = ?",type);
 			//主码
 			String masterCode = getMasterCode();
 			Boolean isUpload = true;
@@ -139,6 +138,7 @@ public class QrcodeAddServiceImpl implements IQrcodeAddService {
 			r.set("prefix", code).set("id_begin", startNum+1).set("id_end", startNum+num).set("uid", uid)
 			.set("number", num).set("create_time", createTime).set("area", area).set("type_", type).save();
 			int recordid = WxUtil.getInt("id", r);
+			Map<String,String> timeMap = new HashMap<String, String>();
 			// 生成数量大于分包数量
 			long countNum = 0;
 			if (num > Define.ADD_QRCODE_SINGLE) {
@@ -149,17 +149,16 @@ public class QrcodeAddServiceImpl implements IQrcodeAddService {
 				sb.append("insert into " + tablename +" (id,type_,num_,area,record_id,random_,uid) values ");
 				for (int k = 0; k < num - 1; k++) {// 拼接sql
 					String randomNumber = getRandomNumber(4);
-					status = getRandomString(code);
+					status = getRandomString(code,code_length,timeMap);
 					sb.append("('").append(status).append("',").append(type).append(",").append(countNum).append(",'").append(area).append("',"+recordid+",'"+randomNumber+"',"+uid+"),");
 					insertCount = k + 1;
 					put(map, id, insertCount);
 					countNum++;
 				}
 				String randomNumber = getRandomNumber(4);
-				status = getRandomString(code);
+				status = getRandomString(code,code_length,timeMap);
 				sb.append("('").append(status).append("',").append(type).append(",").append(countNum).append(",'").append(area).append("',"+recordid+",'"+randomNumber+"',"+uid+")");
 				Db.update(sb.toString());
-				System.out.println(sb);
 				insertCount = num;
 				put(map, id, insertCount);
 				sourceFilePath = getTxtPath(num, filePath, maxNum, tablename,code,
@@ -170,7 +169,7 @@ public class QrcodeAddServiceImpl implements IQrcodeAddService {
 			
 			
 			map.remove(id);
-			String productName = Db.queryStr("select name_ from t_product where type_ = ?",type);
+			String productName = Db.queryStr("select item_name name_ from t_jz_item where id = ?",type);
 			return getFilePath(filePath, sourceFilePath,num,productName);
 		}catch (Exception e) {
 			e.printStackTrace();
@@ -246,6 +245,7 @@ public class QrcodeAddServiceImpl implements IQrcodeAddService {
 			String tablename,String code, Integer addNum, String createTime, String url,Integer type ) {
 		// 查询新插入二维码集合
 		String sql1 = "select id,num_,random_ from " + tablename + " where num_ > " + maxNum+" order by num_ asc";
+		url = "";
 		List<Record> idList = Db.find(sql1);
 		if (idList.size() > 0) {// 集合不为空,生成txt文件
 
@@ -274,13 +274,13 @@ public class QrcodeAddServiceImpl implements IQrcodeAddService {
 					String suffix =  JFinalUtil.getInt("num_", idList.get(j)).toString();
 					String random_ =  JFinalUtil.getStr("random_", idList.get(j)).toString();
 					if (addNum == 0) {// 判断是否生成编号
-						s1 = url + "/" + strId + "\r\n";
+						s1 = url  + strId + "\r\n";
 					} else {
 						int length = 8 - suffix.length();
 						for (int k = 0; k < length; k++) {
 							suffix = "0" + suffix;
 						}
-						s1 = url + "/" + strId + "," + code.toLowerCase()+suffix +","+random_+"\r\n";
+						s1 = url  + strId + "," + code.toLowerCase()+suffix +","+random_+"\r\n";
 					}
 					output.write(s1.toLowerCase());
 				}
@@ -327,15 +327,96 @@ public class QrcodeAddServiceImpl implements IQrcodeAddService {
 		return urlList;
 	}
 
+	
+	public static void main(String[] args) {
+		long decimalNumber = 511082359;
+		
+		 String base36Number = Long.toString(decimalNumber, 36);
+	        System.out.println("十进制数 " + decimalNumber + " 转换为 36 进制是: " + base36Number);
+	}
 	/**
 	 * 随机生成字符串
 	 * @param flg 分表明前缀(a,b,c,d,........z)
 	 * @return
 	 */
-	private static String getRandomString(String flg){
-	     String str = Common.getUUID();
-	     str = str.substring(0, Define.QRCODE_LENGTH);
-	     return  flg+str;
+	private static String getRandomString(String flg,int code_length,Map<String,String> timeMap){
+		String start = "j";
+	     String nowTime = getNowTime();
+	     String integer = timeMap.get(nowTime);
+    	 integer =generateRandomString(integer); 
+    	 if("*".equals(integer)){
+    		 try {
+				Thread.sleep(1);
+				nowTime = getNowTime();
+				integer = timeMap.get(nowTime);
+				 integer =generateRandomString(integer); 
+			} catch (InterruptedException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+    	 }
+	     timeMap.put(nowTime, integer);
+	     int len = nowTime.length()+1+1;
+	     int left = code_length-len;
+	     String random = "";
+	     if(left>0){
+	    	 for (int i = 0; i <left; i++) {
+	    		 random+="0";
+			}
+	     }
+	     return  start+nowTime+random+integer;
 	 }
+	
+	  public static String generateRandomString(String start) {
+		  	String now = "0";
+		  	if(start == null){
+		  		now = "0";
+		  	}else{
+		  		now = incrementString(start+"");
+		  	}
+	        return now;
+	    }
+	
+	  public static String incrementString(String input) {
+	        // 检查输入字符串的长度是否为 1
+	        if (input.length() != 1) {
+	            throw new IllegalArgumentException("输入必须是长度为 1 的字符串。");
+	        }
+	        // 获取输入字符串的第一个字符
+	        char ch = input.charAt(0);
+
+	        // 处理 0 - 9 的情况
+	        if (ch >= '0' && ch < '9') {
+	            // 字符 ASCII 码值加 1 并转换为字符串返回
+	            return String.valueOf((char) (ch + 1));
+	        } 
+	        // 处理 9 到 a 的转换
+	        else if (ch == '9') {
+	            return "a";
+	        } 
+	        // 处理 a - y 的情况
+	        else if (ch >= 'a' && ch < 'y') {
+	            // 字符 ASCII 码值加 1 并转换为字符串返回
+	            return String.valueOf((char) (ch + 1));
+	        } 
+	        // 处理 y 到 z 的转换
+	        else if (ch == 'y') {
+	            return "z";
+	        } 
+	        // 输入字符不在有效范围内,抛出异常
+	        else {
+	            return "*";
+	        }
+	    }
+	private static String getNowTime(){
+		 	Calendar instance = Calendar.getInstance();
+	        int i = instance.get(Calendar.YEAR);
+	        String yearStr = i+"";
+	        String yea = yearStr.charAt(yearStr.length()-1)+"";
+	        SimpleDateFormat sdf = new SimpleDateFormat("MMddHHmmssSSS");
+	        String format = yea+sdf.format(new Date());
+	        String string = Long.toString(Long.valueOf(format), 36);
+	        return string;
+	}
 
 }

+ 2 - 2
src/main/java/com/qlm/service/impl/RecordServiceImpl.java

@@ -39,8 +39,8 @@ public class RecordServiceImpl implements IRecordService {
 				String sSearch = obj.get("sSearch").toString();
 
 				StringBuilder sbSql = new StringBuilder(
-						"select r.*,p.desc_ from t_record r " +
-								"join t_product p on r.type_ = p.type_  where r.uid = "+uid+" ");
+						"select r.*,p.item_name desc_ from t_record r " +
+								"join t_jz_item p on r.type_ = p.id  where r.uid = "+uid+" ");
 				sbSql.append(" order by r.create_time desc");
 				// 分页查询
 				List<Record> areaList = Record.dao.find(sbSql.toString());

+ 6 - 10
src/main/webapp/page/qrcode.jsp

@@ -50,7 +50,7 @@
                                             <select class="form-control" name="type" id="type">	                                                
 												<c:if test="${not empty productList}">
 	                                            	<c:forEach var="productInfo" items="${productList}">
-	                                            		<option value="${productInfo.type_}">${productInfo.desc_}</option>
+	                                            		<option value="${productInfo.id}">${productInfo.item_name}</option>
 	                                            	</c:forEach>
 	                                            </c:if>
                                             </select>
@@ -59,7 +59,7 @@
                                     <div class="form-group">
                                         <label class="col-sm-4 control-label"><span class="text-danger">*</span>生成数量:</label>
                                         <div class="col-sm-5">
-                                            <input class="form-control" type="text" name="number" id="number" maxlength="10" placeholder="生成数量最大为500万">
+                                            <input class="form-control" type="text" name="number" id="number" maxlength="10" placeholder="">
                                         </div>
                                         <span class="help-block m-b-none" id="numberMsg"></span>
                                     </div>
@@ -76,24 +76,20 @@
                                         <div class="col-sm-5">
                                             <div class="radio">
                                                  <label>
-                                                     <input type="radio" value="1" checked="checked" name="addNum" style="position: inherit;">是</label>
+                                                     <input type="radio" value="1"  name="addNum" style="position: inherit;">是</label>
 
                                                  <label>
-                                                     <input type="radio"  value="0"  name="addNum" style="position: inherit;">否</label>
+                                                     <input type="radio"  value="0" checked="checked" name="addNum" style="position: inherit;">否</label>
                                              </div>
                                         </div>
                                     </div>
-                                    <div class="form-group" style="">
+                                    <div class="form-group" style="visibility: hidden;">
                                         <label class="col-sm-4 control-label"><span class="text-danger">*</span>前缀链接:</label>
                                         <div class="col-sm-5">
-                                            <!-- <input class="form-control" type="text" name="url" placeholder="http://www.qlm.im/code=" id="url"> -->
                                             <select class="form-control" name="url" id="url">
-	                                                <c:forEach var="c" items="${urlList }">
-														<option value="${c}">${c}</option>								
-													</c:forEach>
+														<option value="11" checked>11</option>								
                                             </select>
                                         </div>
-                                        <!-- <span class="help-block m-b-none"><i class="fa fa-info-circle"></i> 二维码访问链接由自定义链接+系统生成的唯一编码组成</span> -->
                                     </div>
                                     
                                     <div class="form-group" style="display:none">

+ 2 - 9
src/main/webapp/page/recordList.jsp

@@ -67,7 +67,7 @@
 <!--                                     <th class="text-center">区域</th> -->
 <!--                                     <th class="text-center">配奖方案</th> -->
 <!--                                     <th class="text-center">状态</th> -->
-                                    <th class="text-center">操作</th>
+<!--                                     <th class="text-center">操作</th> -->
                                 </tr>
                             </thead>
                             <tbody>                             
@@ -192,14 +192,7 @@
 												return full.create_time;
 											}
 										}
-									},	{
-										"sClass" : "center",
-										"mRender" : function(
-												data, type,
-												full) {
-											return "<button  onclick='jihuo("+full.id+")' class='btn btn-primary'>手动绑定区域</button>"
-										}
-									} ]
+									}]
 						});
 	});