添加数据校验,分页导出功能

parent 3bc52883
......@@ -208,6 +208,13 @@
<version>1.46</version>
</dependency>
<!-- POI -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>cn.quantgroup</groupId>
<artifactId>quantgroup-config-sdk</artifactId>
......
package cn.quantgroup.xyqb.controller.external.queryLog;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.entity.UserQueryLog;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.PageModel;
import cn.quantgroup.xyqb.model.UserQueryInfo;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.user.IAddressService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserQueryLogService;
import cn.quantgroup.xyqb.service.user.IUserService;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import cn.quantgroup.xyqb.util.IdcardValidator;
import cn.quantgroup.xyqb.util.ValidationUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.lang.reflect.Array;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.*;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import javax.servlet.http.HttpServletResponse;
import static com.sun.xml.internal.ws.api.model.wsdl.WSDLBoundOperation.ANONYMOUS.required;
/**
* Created by zenglibin on 17/06/13.
*/
......@@ -50,35 +62,91 @@ public class UserQueryLogController {
private IHttpService httpService;
@RequestMapping("/queryLog")
public JsonResult queryLog(Date beginDate,Date endDate,Long pageId,Long pageSize) {
public JsonResult queryLog(@RequestParam(required=false) String beginDate,@RequestParam(required=false) String endDate, Integer pageId, Integer pageSize) {
try{
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
Date date1=null,date2=null;
if(beginDate!=null&& StringUtils.hasLength(beginDate)){
date1=sf.parse(beginDate);
}else{
date1=new Date();
}
if(endDate!=null&& StringUtils.hasLength(endDate)){
date2=sf.parse(endDate);
}else{
date2=new Date();
}
List<UserQueryLog> userQueryLogs=userQueryLogService.findByTimestamp(date1,date2,pageId-1,pageSize);
Long total=userQueryLogService.findByTimestampCount(date1,date2);
PageModel<UserQueryLog> uqp=new PageModel<UserQueryLog>();
uqp.setTotal(total);
uqp.setPageSize(pageSize);
uqp.setPageId(pageId);
uqp.setPageList(userQueryLogs);
Double d=Math.ceil(total/pageSize);
uqp.setPages(d.intValue());
return JsonResult.buildSuccessResult("查询成功",uqp);
}catch(Exception e){
return JsonResult.buildErrorStateResult("查询失败",null);
}
List<UserQueryLog> userQueryLogs=userQueryLogService.findByTimestamp(beginDate,endDate,pageId-1,pageSize);
return JsonResult.buildSuccessResult("查询成功",userQueryLogs);
}
@RequestMapping("/queryUserInfo")
public JsonResult queryForResult(String key,String keyValues,String userName, String columns,Long pageId,Long pageSize) {
public JsonResult queryForResult(String key,String keyValues,String userName, String columns,Integer pageId,Integer pageSize) {
//columns=> userId,phoneNo,idNo,bankCard,address
//key=>phoneNo、idNo、userId
//checkKeysType;
//后台参数校验
String[] values=keyValues.split(";");
List<String> queryV= Arrays.asList(values);
List<UserQueryInfo> userQueryInfos=new ArrayList<UserQueryInfo>();
Page<UserQueryInfo> userQueryInfoPage=null;
List<UserDetail> userDetails=new ArrayList<UserDetail>();
Page<UserDetail> userDetailPage=null;
List<Address> addresslist=new ArrayList<Address>();
if(key.equals("userId")){
List<Long> userIds=new ArrayList<Long>();
for(String s:queryV){
long uid=Long.valueOf(s);
userIds.add(uid);
try{
for(String s:queryV){
if(s.length()>8){
return JsonResult.buildErrorStateResult("查询的userId长度超过8位",s);
}
long uid=Long.valueOf(s);
userIds.add(uid);
}
}catch(Exception e){
return JsonResult.buildErrorStateResult("查询的userId有误",null);
}
userDetails=userDetailService.findByUserIdIn(userIds);
userDetailPage=userDetailService.getUserDetailsPage(userIds,null,null,pageId,pageSize,"auto");
}else if(key.equals("phoneNo")){
userDetails=userDetailService.findByPhoneNos(queryV);
for(String pn:queryV){
if(!ValidationUtil.validatePhoneNo(pn)){
return JsonResult.buildErrorStateResult("查询的手机号码格式有误",pn);
}
}
userDetailPage=userDetailService.getUserDetailsPage(null,queryV,null,pageId,pageSize,"auto");
}else if(key.equals("idNo")){
userDetails=userDetailService.findByIdnos(queryV);
IdcardValidator iv = new IdcardValidator();
for(String idno:queryV){
if(!iv.is18Idcard(idno)&&!iv.is15Idcard(idno)){
return JsonResult.buildErrorStateResult("查询的身份证号格式有误",idno);
}
}
userDetailPage=userDetailService.getUserDetailsPage(null,null,queryV,pageId,pageSize,"auto");
}
if(userDetailPage!=null){
userDetails=userDetailPage.getContent();
}
if(columns.contains("bankCard")){
......@@ -133,8 +201,14 @@ public class UserQueryLogController {
}
userQueryLogService.save(log);
PageModel<UserQueryInfo> uqi=new PageModel<UserQueryInfo>();
uqi.setPageId(pageId);
uqi.setPageList(userQueryInfos);
uqi.setPageSize(pageSize);
uqi.setPages(userDetailPage.getTotalPages());
uqi.setTotal(userDetailPage.getTotalElements());
return JsonResult.buildSuccessResult("成功",userQueryInfos);
return JsonResult.buildSuccessResult("成功",uqi);
}
private String getBankCardsByPhoneNos(String phoneNo){
......@@ -162,4 +236,74 @@ public class UserQueryLogController {
// return cardList.toString();
return null;
}
@RequestMapping("/exportUserInfo")
public void exportExcel(final HttpServletResponse response,String key,String keyValues,String userName, String columns){
List<UserQueryInfo> uqls=new ArrayList<UserQueryInfo>();
UserQueryInfo uq=new UserQueryInfo();
uq.setUserId(123l);
uq.setAddress("AAAAAAA");
uq.setPhoneNo("15840001232");
uq.setIdNo("362529199701235671");
uq.setBankCards("6217564445877112");
uqls.add(uq);
HSSFWorkbook wb = new HSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet("用户信息列表");
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow((int) 0);
// 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
HSSFCell cell = row.createCell((short) 0);
cell.setCellValue("userId");
cell.setCellStyle(style);
cell = row.createCell((short) 1);
cell.setCellValue("手机号");
cell.setCellStyle(style);
cell = row.createCell((short) 2);
cell.setCellValue("身份证号");
cell.setCellStyle(style);
cell = row.createCell((short) 3);
cell.setCellValue("银行卡号");
cell.setCellStyle(style);
cell = row.createCell((short) 4);
cell.setCellValue("地址");
cell.setCellStyle(style);
// 第五步,写入实体数据 实际应用中这些数据从数据库得到,
//List list = CreateSimpleExcelToDisk.getStudent();
for (int i = 0; i < uqls.size(); i++)
{
row = sheet.createRow((int) i + 1);
UserQueryInfo user = (UserQueryInfo) uqls.get(i);
// 第四步,创建单元格,并设置值
row.createCell((short) 0).setCellValue( user.getUserId());
row.createCell((short) 1).setCellValue(user.getPhoneNo());
row.createCell((short) 2).setCellValue(user.getIdNo());
row.createCell((short) 3).setCellValue(user.getBankCards());
row.createCell((short) 4).setCellValue(user.getAddress());
}
// 第六步,将文件存到指定位置
try
{
OutputStream output=response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment; filename=users.xls");
response.setContentType("application/msexcel");
wb.write(output);
output.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* Created by zenglibin on 15/12/29.
*/
@Data
public class PageModel<T> implements Serializable {
private static final long serialVersionUID = -1L;
private Integer pageId;
private Integer pageSize;
private List<T> pageList;
private Integer pages;
private Long total;
public PageModel() {
}
}
......@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.repository;
import cn.quantgroup.xyqb.entity.UserDetail;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
......@@ -13,7 +14,7 @@ import java.util.List;
* @author mengfan.feng
* @time 2015-09-11 11:22
*/
public interface IUserDetailRepository extends JpaRepository<UserDetail, Long> {
public interface IUserDetailRepository extends JpaRepository<UserDetail, Long>,JpaSpecificationExecutor<UserDetail> {
UserDetail findByUserId(Long userId);
......
......@@ -19,5 +19,8 @@ public interface IUserQueryLogRepository extends JpaRepository<UserQueryLog, Lon
@Transactional
@Modifying
@Query(nativeQuery=true,value = "select * from user_query_log ul where created_At between ?1 and ?2 limit ?3 ,?4 ")
List<UserQueryLog> findQueryLogCreatedAt(Date beginDate, Date endDate,Long pageId,Long pageSize);
List<UserQueryLog> findQueryLogCreatedAt(Date beginDate, Date endDate,Integer pageId,Integer pageSize);
@Query(nativeQuery=true,value = "select count(1) from user_query_log ul where created_At between ?1 and ?2 ")
Long findQueryLogCountCreatedAt(Date beginDate, Date endDate);
}
......@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.service.user.vo.UserDetailVO;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.domain.Page;
import java.util.List;
......@@ -25,4 +26,7 @@ public interface IUserDetailService {
List<UserDetail> findByPhoneNos(List<String> phoneNos);
List<UserDetail> findByIdnos(List<String> idnos);
Page<UserDetail> getUserDetailsPage(List<Long> userId,List<String> phoneNos,List<String> idNos, int pageNumber, int pageSize,
String sortType);
}
......@@ -8,11 +8,13 @@ import java.util.Date;
import java.util.List;
/**
* Created by Miraculous on 2017/1/3.
* Created by zenglibin on 2017/06/15.
*/
public interface IUserQueryLogService {
List<UserQueryLog> findByTimestamp(Date beginDate, Date endDate,Long pageId,Long pageSize);
List<UserQueryLog> findByTimestamp(Date beginDate, Date endDate,Integer pageId,Integer pageSize);
Long findByTimestampCount(Date beginDate, Date endDate);
UserQueryLog save(UserQueryLog userQueryLog);
......
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.UserQueryInfo;
import cn.quantgroup.xyqb.repository.IUserDetailRepository;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
......@@ -15,9 +16,15 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.transaction.Transactional;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
......@@ -125,4 +132,47 @@ public class UserDetailServiceImpl implements IUserDetailService {
}
return userDetailVO;
}
private Specification<UserDetail> valueInSpecification(List<Long> userId, List<String> phoneNo, List<String> idNo) {
List<Predicate> list = new ArrayList<>();
Specification<UserDetail> specification = new Specification<UserDetail>() {
@Override
public Predicate toPredicate(Root<UserDetail> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
if (userId!=null&&userId.size()>0) {
criteriaQuery.where(root.get("userId").in(userId));
list.add(criteriaQuery.getRestriction());
}
if (phoneNo!=null&&phoneNo.size()>0) {
criteriaQuery.where(root.get("phoneNo").in(phoneNo));
list.add(criteriaQuery.getRestriction());
}
if (idNo!=null&&idNo.size()>0) {
criteriaQuery.where(root.get("idNo").in(idNo));
list.add(criteriaQuery.getRestriction());
}
Predicate[] p = new Predicate[list.size()];
return criteriaBuilder.and(list.toArray(p));
}
};
return specification;
}
private PageRequest buildPageRequest(int pageNumber, int pagzSize, String sortType) {
Sort sort = null;
if ("auto".equals(sortType)) {
sort = new Sort(Sort.Direction.DESC, "userId");
}
return new PageRequest(pageNumber - 1, pagzSize, sort);
}
public Page<UserDetail> getUserDetailsPage(List<Long> userId,List<String> phoneNos,List<String> idNos, int pageNumber, int pageSize,
String sortType) {
PageRequest pageRequest = buildPageRequest(pageNumber, pageSize, sortType);
Specification<UserDetail> spec = valueInSpecification(userId,phoneNos,idNos);
return userDetailRepository.findAll(spec, pageRequest);
}
}
......@@ -20,10 +20,15 @@ public class UserQueryLogServiceImpl implements IUserQueryLogService {
private IUserQueryLogRepository userQueryLogRepository;
@Override
public List<UserQueryLog> findByTimestamp(Date beginDate,Date endDate,Long pageId,Long pageSize) {
public List<UserQueryLog> findByTimestamp(Date beginDate,Date endDate,Integer pageId,Integer pageSize) {
return userQueryLogRepository.findQueryLogCreatedAt(beginDate,endDate,pageId,pageSize);
}
@Override
public Long findByTimestampCount(Date beginDate, Date endDate) {
return userQueryLogRepository.findQueryLogCountCreatedAt(beginDate,endDate);
}
@Override
public UserQueryLog save(UserQueryLog userQueryLog) {
return userQueryLogRepository.save(userQueryLog);
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment