Просмотр исходного кода

修复充值密码验证码不过期的问题,其他验证码验证在collect上,在collect上修复

o2sword 5 лет назад
Родитель
Сommit
aa9c8a44a0

+ 49 - 0
o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/code/ActionListPaging.java

@@ -0,0 +1,49 @@
+package com.x.program.center.jaxrs.code;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.entity.JpaObject;
+import com.x.base.core.project.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.program.center.core.entity.Code;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.Predicate;
+import java.util.List;
+
+class ActionListPaging extends BaseAction {
+	ActionResult<List<Wo>> execute(EffectivePerson effectivePerson, Integer page, Integer size) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<List<Wo>> result = new ActionResult<>();
+			EntityManager em = emc.get(Code.class);
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			Predicate p = cb.conjunction();
+			List<Wo> wos = emc.fetchDescPaging(Code.class, Wo.copier, p, page, size, Code.sequence_FIELDNAME);
+			result.setData(wos);
+			result.setCount(emc.count(Code.class, p));
+			return result;
+		}
+	}
+
+	public static class Wo extends Code {
+
+		private static final long serialVersionUID = 9141971868817571577L;
+
+		static WrapCopier<Code, Wo> copier = WrapCopierFactory.wo(Code.class, Wo.class, null,
+				JpaObject.FieldsInvisible);
+
+		private Long rank;
+
+		public Long getRank() {
+			return rank;
+		}
+
+		public void setRank(Long rank) {
+			this.rank = rank;
+		}
+
+	}
+}

+ 27 - 13
o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/code/ActionValidate.java

@@ -15,20 +15,34 @@ import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.jaxrs.WrapBoolean;
 import com.x.program.center.core.entity.Code;
 import com.x.program.center.core.entity.Code_;
+import org.apache.commons.lang3.StringUtils;
 
 class ActionValidate extends BaseAction {
 	ActionResult<Wo> execute(String mobile, String answer) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 			ActionResult<Wo> result = new ActionResult<>();
 			Wo wo = new Wo();
-			Code code = this.get(emc, mobile, answer);
-			if (null == code) {
-				wo.setValue(false);
-			} else {
-				emc.beginTransaction(Code.class);
-				emc.remove(code);
-				emc.commit();
-				wo.setValue(true);
+			wo.setValue(false);
+			if(StringUtils.isNotEmpty(answer) && StringUtils.isNotEmpty(mobile)) {
+				Code code = this.get(emc, mobile);
+				if (null != code) {
+					if (answer.equals(code.getAnswer())) {
+						emc.beginTransaction(Code.class);
+						emc.remove(code);
+						emc.commit();
+						wo.setValue(true);
+					} else {
+						int vn = code.getVerifyNumber() == null ? 0 : code.getVerifyNumber();
+						vn++;
+						emc.beginTransaction(Code.class);
+						if (vn < 6) {
+							code.setVerifyNumber(vn);
+						} else {
+							emc.remove(code);
+						}
+						emc.commit();
+					}
+				}
 			}
 			result.setData(wo);
 			return result;
@@ -38,21 +52,21 @@ class ActionValidate extends BaseAction {
 	public static class Wo extends WrapBoolean {
 	}
 
-	private Code get(EntityManagerContainer emc, String mobile, String answer) throws Exception {
+	private Code get(EntityManagerContainer emc, String mobile) throws Exception {
 		EntityManager em = emc.get(Code.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<Code> cq = cb.createQuery(Code.class);
 		Root<Code> root = cq.from(Code.class);
 		Calendar cal = Calendar.getInstance();
-		cal.add(Calendar.MINUTE, -30);
+		cal.add(Calendar.MINUTE, -5);
 		Predicate p = cb.greaterThan(root.get(Code_.createTime), cal.getTime());
 		p = cb.and(p, cb.equal(root.get(Code_.mobile), mobile));
-		p = cb.and(p, cb.equal(root.get(Code_.answer), answer));
-		List<Code> list = em.createQuery(cq.where(p)).getResultList();
+		//p = cb.and(p, cb.equal(root.get(Code_.answer), answer));
+		List<Code> list = em.createQuery(cq.where(p).orderBy(cb.desc(root.get(Code_.createTime)))).setMaxResults(1).getResultList();
 		if (list.isEmpty()) {
 			return null;
 		} else {
 			return list.get(0);
 		}
 	}
-}
+}

+ 21 - 6
o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/code/CodeAction.java

@@ -3,11 +3,7 @@ package com.x.program.center.jaxrs.code;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
+import javax.ws.rs.*;
 import javax.ws.rs.container.AsyncResponse;
 import javax.ws.rs.container.Suspended;
 import javax.ws.rs.core.Context;
@@ -103,4 +99,23 @@ public class CodeAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-}
+	@JaxrsMethodDescribe(value = "分页列示Code对象.", action = ActionListPaging.class)
+	@POST
+	@Path("list/paging/{page}/size/{size}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listPaging(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+						   @JaxrsParameterDescribe("分页") @PathParam("page") Integer page,
+						   @JaxrsParameterDescribe("每页数量") @PathParam("size") Integer size) {
+		ActionResult<List<ActionListPaging.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionListPaging().execute(effectivePerson, page, size);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
+}

+ 16 - 2
o2server/x_program_center_core_entity/src/main/java/com/x/program/center/core/entity/Code.java

@@ -45,7 +45,9 @@ public class Code extends SliceJpaObject {
 	/* 以上为 JpaObject 默认字段 */
 
 	public void onPersist() throws Exception {
-
+		if(this.getVerifyNumber() == null){
+			this.setVerifyNumber(0);
+		}
 	}
 
 	/* 更新运行方法 */
@@ -68,6 +70,11 @@ public class Code extends SliceJpaObject {
 	@CheckPersist(allowEmpty = true)
 	private String meta;
 
+	public static final String verifyNumber_FIELDNAME = "verifyNumber";
+	@FieldDescribe("验证次数")
+	@Column(name = ColumnNamePrefix + verifyNumber_FIELDNAME)
+	private Integer verifyNumber;
+
 	// public static String[] FLAGS = new String[] { "id" };
 
 	public String getMeta() {
@@ -94,4 +101,11 @@ public class Code extends SliceJpaObject {
 		this.mobile = mobile;
 	}
 
-}
+	public Integer getVerifyNumber() {
+		return verifyNumber;
+	}
+
+	public void setVerifyNumber(Integer verifyNumber) {
+		this.verifyNumber = verifyNumber;
+	}
+}