You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
5.1 KiB

package com.community.pocket.repository.android;
import com.community.pocket.entity.po.Visitor;
import com.community.pocket.entity.vo.Page;
import com.community.pocket.entity.vo.android.VisitorForm;
import com.community.pocket.entity.vo.web.VisitorQuery;
import com.community.pocket.entity.vo.web.VisitorStatus;
import com.community.pocket.repository.BaseDao;
import com.community.pocket.util.LookupOperationUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
//访客数据接口
@Repository
public class VisitorDao extends BaseDao<Visitor> {
private static final Logger LOG = LoggerFactory.getLogger(VisitorDao.class);
@Value("${visitor.dateformat}")
private String dateformat;
@Value("${visitor.page-size}")
private Integer androidPageSize;
//保存访客信息
public Visitor save(VisitorForm visitorForm) {
Visitor visitor = new Visitor();
visitor.setAppointment(visitorForm.getAppointment());
visitor.setUsername(visitorForm.getUsername());
visitor.setChooseDate(visitorForm.getChooseDate());
visitor.setChooseTime(visitorForm.getChooseTime());
visitor.setNotes(visitorForm.getNotes());
try {
visitor.setTime(new SimpleDateFormat(dateformat).parse(visitor.getChooseDate() + " " + visitor.getChooseTime()).getTime());
visitor.setStatus(VisitorStatus.uncheck);
return save(visitor);
} catch (ParseException e) {
e.printStackTrace();
LOG.error(e.toString());
}
return null;
}
//加载所有访客信息
public Page<Visitor> loadAllVisitor(VisitorQuery visitorQuery) {
Criteria criteria = Criteria.where("appointment").regex(Pattern.compile(".*") + visitorQuery.getAppointment() + ".*");
Query query = new Query(criteria);
long count = mongoTemplate.count(query, entityClass());
Page<Visitor> page = new Page<>(count, visitorQuery.getCurrentPage(), pageSize);
List<Visitor> visitorList = mongoTemplate.find(query.with(PageRequest.of(visitorQuery.getCurrentPage().intValue() - 1, pageSize)), entityClass());
page.setList(visitorList);
return page;
}
//访客预约放行
public boolean updateVisitor(com.community.pocket.entity.vo.web.VisitorForm visitorForm) {
return mongoTemplate.updateFirst(new Query(Criteria.where(LookupOperationUtil.idKey).is(visitorForm.getId())), Update.update("status", visitorForm.getStatus()).set("managerName", visitorForm.getManagerName()), entityClass()).wasAcknowledged();
}
//用户加载访客信息
private Page<Visitor> load(com.community.pocket.entity.vo.android.VisitorQuery visitorQuery, Criteria criteria) {
List<Criteria> criteriaList = new ArrayList<>();
criteriaList.add(criteria);
if (visitorQuery.getStartDate() != null) {
criteriaList.add(Criteria.where("time").gte(visitorQuery.getStartDate().getTime()));
}
if (visitorQuery.getEndDate() != null) {
criteriaList.add(Criteria.where("time").lte(visitorQuery.getEndDate().getTime()));
}
Criteria c;
if (criteriaList.size() > 1) {
c = new Criteria().andOperator(criteriaList.toArray(new Criteria[]{}));
} else {
c = criteria;
}
Query query = new Query(c).with(Sort.by("time").ascending());
long count = mongoTemplate.count(query, entityClass());
List<Visitor> visitorList = mongoTemplate.find(query.with(PageRequest.of(visitorQuery.getCurrentPage().intValue() - 1, androidPageSize)), entityClass());
Page<Visitor> visitorPage = new Page<>(count, visitorQuery.getCurrentPage(), androidPageSize);
visitorPage.setList(visitorList);
return visitorPage;
}
//加载我的访客信息
public Page<Visitor> loadMyVisitor(com.community.pocket.entity.vo.android.VisitorQuery visitorQuery) {
Criteria criteria = Criteria.where("appointment").is(visitorQuery.getUsername());
return load(visitorQuery, criteria);
}
//加载我的预约
public Page<Visitor> loadMyReservation(com.community.pocket.entity.vo.android.VisitorQuery visitorQuery) {
Criteria criteria = Criteria.where("username").is(visitorQuery.getUsername());
return load(visitorQuery, criteria);
}
@Override
public Visitor save(Visitor visitor) {
try {
return mongoTemplate.save(visitor);
} catch (Exception e) {
e.printStackTrace();
LOG.error(e.toString());
}
return null;
}
@Override
public Class<Visitor> entityClass() {
return Visitor.class;
}
}