科技一点通后端页面
后端页面
`package org.example.keji2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@EnableJpaRepositories(basePackages = "org.example.keji2") // 指定 Repository 所在包
@EntityScan(basePackages = "org.example.keji2") // 指定 Entity 所在包
public class Keji2Application {
public static void main(String[] args) {
SpringApplication.run(Keji2Application.class, args);
}
}
package org.example.keji2;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.persistence.*;
import java.util.Date;
@Entity
@Table(name = "policy")
public class Policy {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // 不再自动生成,由 PolicyCategory.typeid 映射而来
private String name;
private String type;
private String category;
private String range;
private String document;
private String form;
private String organ;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date pubdata;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date perdata;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date viadata;
private String field;
private String theme;
private String keyword;
private String superior;
private String precursor;
private String succeed;
private String state;
private String text;
private String pdf;
private String redundancy;
private Integer rank;
private String policykey;
private Integer newrank;
private Integer year;
private String newkey;
private String secondtheme;
private Integer allsum;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getRange() {
return range;
}
public void setRange(String range) {
this.range = range;
}
public String getDocument() {
return document;
}
public void setDocument(String document) {
this.document = document;
}
public String getForm() {
return form;
}
public void setForm(String form) {
this.form = form;
}
public String getOrgan() {
return organ;
}
public void setOrgan(String organ) {
this.organ = organ;
}
public Date getViadata() {
return viadata;
}
public void setViadata(Date viadata) {
this.viadata = viadata;
}
public Date getPubdata() {
return pubdata;
}
public void setPubdata(Date pubdata) {
this.pubdata = pubdata;
}
public Date getPerdata() {
return perdata;
}
public void setPerdata(Date perdata) {
this.perdata = perdata;
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public String getTheme() {
return theme;
}
public void setTheme(String theme) {
this.theme = theme;
}
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
public String getSuperior() {
return superior;
}
public void setSuperior(String superior) {
this.superior = superior;
}
public String getPrecursor() {
return precursor;
}
public void setPrecursor(String precursor) {
this.precursor = precursor;
}
public String getSucceed() {
return succeed;
}
public void setSucceed(String succeed) {
this.succeed = succeed;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getPdf() {
return pdf;
}
public void setPdf(String pdf) {
this.pdf = pdf;
}
public String getRedundancy() {
return redundancy;
}
public void setRedundancy(String redundancy) {
this.redundancy = redundancy;
}
public Integer getRank() {
return rank;
}
public void setRank(Integer rank) {
this.rank = rank;
}
public String getPolicykey() {
return policykey;
}
public void setPolicykey(String policykey) {
this.policykey = policykey;
}
public Integer getNewrank() {
return newrank;
}
public void setNewrank(Integer newrank) {
this.newrank = newrank;
}
public Integer getYear() {
return year;
}
public void setYear(Integer year) {
this.year = year;
}
public String getNewkey() {
return newkey;
}
public void setNewkey(String newkey) {
this.newkey = newkey;
}
public String getSecondtheme() {
return secondtheme;
}
public void setSecondtheme(String secondtheme) {
this.secondtheme = secondtheme;
}
public Integer getAllsum() {
return allsum;
}
public void setAllsum(Integer allsum) {
this.allsum = allsum;
}
}
package org.example.keji2;
import jakarta.persistence.*;
@Entity
@Table(name = "policycategory")
public class PolicyCategory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long typeid; // 改为 Long 类型以匹配 Policy.id
private String type;
// Getters and Setters
public Long getTypeid() {
return typeid;
}
public void setTypeid(Long typeid) {
this.typeid = typeid;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
package org.example.keji2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.data.web.SpringDataWebProperties;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.data.domain.Page;
import java.util.List;
@RestController
@RequestMapping("/api/policy")
public class PolicyController {
@Autowired
private PolicyService policyService;
@GetMapping("/search")
public ResponseEntity<Page<Policy>> searchPolicies(
@RequestParam(required = false) String name,
@RequestParam(required = false) String text,
@RequestParam(required = false) String organ,
@RequestParam(required = false) String type,
@RequestParam(required = false) String document,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
Page<Policy> policies = policyService.searchPolicies(
name, text, organ, type, document, page, size);
return ResponseEntity.ok(policies);
}
// 修改后的list接口,支持分页和过滤
@GetMapping("/list")
public ResponseEntity<Page<Policy>> getPolicyList(
@RequestParam(required = false) List<String> filters,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
Page<Policy> policies = policyService.getPolicies(filters, page, size);
return ResponseEntity.ok(policies);
}
@GetMapping("/detail/{id}")
public ResponseEntity<Policy> getPolicyDetail(@PathVariable Long id) {
Policy policy = policyService.getPolicyById(id);
return policy != null ? ResponseEntity.ok(policy) : ResponseEntity.notFound().build();
}
}
package org.example.keji2;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
public interface PolicyRepository extends JpaRepository<Policy, Long>, JpaSpecificationExecutor
Page
} package org.example.keji2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; // 修改为使用Spring的StringUtils
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
@Service
public class PolicyService {
private final PolicyRepository policyRepository;
@Autowired
public PolicyService(PolicyRepository policyRepository) {
this.policyRepository = policyRepository;
}
public Page<Policy> searchPolicies(
String name, String text, String organ,
String type, String document, int page, int size) {
Pageable pageable = PageRequest.of(page, size);
return policyRepository.findAll((root, query, builder) -> {
List<Predicate> predicates = new ArrayList<>();
// 政策标题模糊查询
if (StringUtils.hasText(name)) {
predicates.add(builder.like(
builder.lower(root.get("name")),
"%" + name.toLowerCase() + "%"));
}
// 政策内容模糊查询
if (StringUtils.hasText(text)) {
predicates.add(builder.like(
builder.lower(root.get("text")),
"%" + text.toLowerCase() + "%"));
}
// 发文机构模糊查询
if (StringUtils.hasText(organ)) {
predicates.add(builder.like(
builder.lower(root.get("organ")),
"%" + organ.toLowerCase() + "%"));
}
// 政策分类精确匹配
if (StringUtils.hasText(type)) {
predicates.add(builder.equal(root.get("type"), type));
}
// 政策文号模糊查询
if (StringUtils.hasText(document)) {
predicates.add(builder.like(
builder.lower(root.get("document")),
"%" + document.toLowerCase() + "%"));
}
return builder.and(predicates.toArray(new Predicate[0]));
}, pageable);
}
public Page<Policy> getPolicies(List<String> filters, int page, int size) {
Pageable pageable = PageRequest.of(page, size);
if (filters != null && !filters.isEmpty()) {
return policyRepository.findByTypeIn(filters, pageable);
}
return policyRepository.findAll(pageable);
}
public List<Policy> getAllPolicies() {
System.out.println("正在查询数据库...");
List<Policy> policies = policyRepository.findAll();
System.out.println("查询结果数量: " + policies.size());
return policies;
}
public Policy getPolicyById(Long id) {
return policyRepository.findById(id).orElse(null);
}
}`

浙公网安备 33010602011771号