目录
结构: Spring Data JPA + Pgsql +JS
实现方式: 用JpaSpecificationExecutor 接口
目标: web上能根据多个输入条件查询出正确的数据
结构: Spring Data JPA + Pgsql +JS
实现方式: 用JpaSpecificationExecutor 接口
实现代码:
表
TelVerifySample(主表), Myuser(关联表), SurveyUser(关联表)
HTML Part
<div class="panel-body">
<form class="form-inline" action="/" method="POST" style="margin-bottom: 0px; justify-content:center">
<div class="form-group col-md-2">
<select class="form-control" id="selectProvince" >
<option value="">--请选择省份--</option>
<option th:each="province:${provinceList}" th:value="${province.id}" th:text="${province.name}"> ${province.id} </option>
</select>
</div>
<div class="form-group col-md-2">
<select class="form-control" id="selectQa" >
<option value="">--请选择核查员--</option>
<option th:each="qa:${qaSurveyList}" th:value="${qa.id}" th:text="${qa.name}"> ${qa.id} </option>
</select>
</div>
<div class="form-group col-md-2">
<select class="form-control" id="selectSurveyer" >
<option value="">--请选择调查员--</option>
<option th:each="surveyer:${surveyList}" th:value="${surveyer.id}" th:text="${surveyer.name}"> ${surveyer.id} </option>
</select>
</div>
<div class="form-check col-md-2">
<select class="form-control" id="selectSampleType" >
<option value="">--请选择核查状态--</option>
<option th:each="telVerifyType:${telVerifyTypes}" th:value="${telVerifyType.id}" th:text="${telVerifyType.name}"> ${telVerifyType.id} </option>
</select>
</div>
<div class="form-group col-md-2">
<div class="input-group date form_date col-sm-12" data-date="" data-date-format="yyyy-mm-dd" data-link-field="dtp_input_nexttime" data-link-format="yyyy-mm-dd">
<input type="text" class="form-control" name="nexttime" id="nexttime" placeholder="核查完成时间"/>
<span class="input-group-addon"><span class="glyphicon glyphicon-remove"></span></span>
</div>
<input type="hidden" id="dtp_input_nexttime" value="" /><br/>
</div>
<div class="form-check col-md-1">
<span class="btn btn-sm btn-primary m-r-5" id="searchsubmit">查找</span>
</div>
</form>
</div>
JS Part
function getSelectTelVerifyItem() {
// Get selected condition
qaTime = document.getElementById("nexttime").value;
var selectProvince = document.getElementById("selectProvince");
var index = selectProvince.selectedIndex; // 选中索引
selectProvinceId = selectProvince.options[index].value; // 选中值
var selectSampleType = document.getElementById("selectSampleType");
var sampleTypeIndex = selectSampleType.selectedIndex; // 选中索引
sampleTypeId = selectSampleType.options[sampleTypeIndex].value; // 选中值
var selectQa= document.getElementById("selectQa");
var selectQaIndex = selectQa.selectedIndex; // 选中索引
selectQaId = selectQa.options[selectQaIndex].value; // 选中值
var selectSurveyer= document.getElementById("selectSurveyer");
var selectSurveyerIndex = selectSurveyer.selectedIndex; // 选中索引
selectSurveyerId = selectSurveyer.options[selectSurveyerIndex].value; // 选中值
if(typeof qaTime == "undefined" || qaTime == null || qaTime == "") {
qaTime = "1970/01/01 00:00";
}
if(typeof selectProvinceId == "undefined" || selectProvinceId == null || selectProvinceId == "") {
selectProvinceId = 0;
}
if(typeof selectQaId == "undefined" || selectQaId == null || selectQaId == "") {
selectQaId = 0;
}
if(typeof selectSurveyerId == "undefined" || selectSurveyerId == null || selectSurveyerId == "") {
selectSurveyerId = 0;
}
if(typeof sampleTypeId == "undefined" || sampleTypeId == null || sampleTypeId == "") {
sampleTypeId = 0;
}
condition = selectProvinceId + "," + sampleTypeId + "," + qaTime + "," + selectQaId + "," + selectSurveyerId;
console.log(" Select condition is " + condition);
}
var qaTime;
var selectProvinceId;
var sampleTypeId;
var selectQaId;
var selectSurveyerId;
$("#searchsubmit").bind("click", function (){
getSelectTelVerifyItem();
$.ajax({
Type: 'GET',
url:"/qasurvey/multiConditionTelVerifySampleSearch?qaTime=" + qaTime + "&selectProvinceId=" + selectProvinceId + "&sampleTypeId=" + sampleTypeId + "&surveyuserId=" + selectSurveyerId+ "&qaUserId=" + selectQaId,
dataType:"json",
}).done(function (result) {
console.log(typeof result);
$('#example').dataTable().fnClearTable();
$('#example').DataTable().rows.add(result.data).draw();
});
});
Dao Part
public interface TelVerifySampleRepository extends JpaRepository<TelVerifySample,Long>,JpaSpecificationExecutor<TelVerifySample> {
}
Service Part
public List<TelVerifySample> findSearch(TelVerifySample model) {
Assert.notNull(model);
List<TelVerifySample> result = telVerifySampleRepository.findAll(new Specification<TelVerifySample>() {
@Override
public Predicate toPredicate(Root<TelVerifySample> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<>();
if (StringUtils.isNoneBlank(model.getProvince())) {
list.add((Predicate) cb.like(root.get("province").as(String.class), "%" + model.getProvince() + "%"));
}
if (model.getSurveyUser() != null) {
list.add(cb.equal(root.get("surveyuser").as(SurveyUser.class), model.getSurveyUser().getId()));
}
if (model.getTelVerifyUser() != null) {
list.add(cb.equal(root.get("telVerifyUser").as(Myuser.class), model.getTelVerifyUser().getId()));
}
if (model.getSampletype() != null) {
list.add(cb.equal(root.get("telVerifyType").as(TelVerifyType.class), model.getSampletype().getId()));
}
if (model.getAllocatetime() != null) {
list.add(cb.greaterThanOrEqualTo(root.get("allocatetime").as(Date.class), model.getAllocatetime()));
}
Predicate[] p = new Predicate[list.size()];
return cb.and(list.toArray(p));
}
});
return result;
}
JAVA Part
@RequestMapping(value = "/multiConditionTelVerifySampleSearch", method = RequestMethod.GET)
@ResponseBody
public Object multiConditionTelVerifySampleSearch(HttpServletRequest request, Model model) {
int surveyuserId = Utils.getParameter(request, "surveyuserId", -1);
int qaUserId = Utils.getParameter(request, "qaUserId", -1);
int telSampleTypeId = Utils.getParameter(request, "sampleTypeId", -1);
int selectProvinceId = Utils.getParameter(request, "selectProvinceId", -1);
Timestamp dateQaTime = null;
String strQaTime = request.getParameter("qaTime").replace("/", "-") + " 00:00" ;
if (strQaTime.contains("-")) {
dateQaTime = strToSqlDate(strQaTime, "yyyy-MM-dd HH:mm");
}
String province = "";
SurveyUser surveyUser = null;
Myuser qaUser = null;
TelVerifyType telVerifyType = null;
if (selectProvinceId != 0) {
province = sysdictService.findSysdictById(selectProvinceId).getName();
}
if (surveyuserId != 0){
surveyUser = surveyuserService.findMyuserById(surveyuserId);
}
if (qaUserId != 0){
qaUser = myuserService.findMyuserById(qaUserId);
}
if (telSampleTypeId != 0){
telVerifyType = telVerifyTypeService.findTelVerifyTypeById(telSampleTypeId);
}
System.out.println("============ Condition is dateQaTime " + dateQaTime + ", surveyuserId "+ surveyuserId + ", qaUserId "+ qaUserId);
Map<String, Object> map = new HashMap<String, Object>();
TelVerifySample telVerifySample = new TelVerifySample();
telVerifySample.setProvince(province);
telVerifySample.setSurveyUser(surveyUser);
telVerifySample.setTelVerifyUser(qaUser);
telVerifySample.setSampletype(telVerifyType);
telVerifySample.setAllocatetime(dateQaTime);//Need update time
List<TelVerifySample> telVerifySampleList = telVerifySampleService.findSearch(telVerifySample);
List<ArrayList<Object>> result = new ArrayList<>();
telVerifySampleList.forEach(sample -> result.add(sample.getTelVerifySampleSummary()));
map.put("data", result);
map.put("recordsTotal", telVerifySampleList.size());
map.put("recordsFiltered", telVerifySampleList.size());
map.put("draw", refreshTime++);
return map;
}