科技一点通后端页面

后端页面
`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 findByTypeIn(List types, Pageable pageable);
} 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);
}

}`

posted @ 2025-04-07 08:07  ytr123  阅读(7)  评论(0)    收藏  举报