Bläddra i källkod

Merge branch 'dev' of http://git.izouma.com/licailing/uwip into dev

panhui 4 år sedan
förälder
incheckning
26f535a989

+ 5 - 3
src/main/java/com/izouma/uwip/domain/DomesticPatent.java

@@ -10,9 +10,7 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 
 
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
+import javax.persistence.*;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDate;
 
 
@@ -84,6 +82,10 @@ public class DomesticPatent extends BaseEntity {
     @ApiModelProperty(value = "账单")
     @ApiModelProperty(value = "账单")
     private String bill;
     private String bill;
 
 
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "patentId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
+    private Patent patent;
+
     public DomesticPatent(DomesticPatentDTO vo) {
     public DomesticPatent(DomesticPatentDTO vo) {
         BeanUtil.copyProperties(vo, this);
         BeanUtil.copyProperties(vo, this);
     }
     }

+ 3 - 0
src/main/java/com/izouma/uwip/domain/Patent.java

@@ -1,5 +1,6 @@
 package com.izouma.uwip.domain;
 package com.izouma.uwip.domain;
 
 
+import com.izouma.uwip.annotations.Searchable;
 import com.izouma.uwip.converter.HandleListConverter;
 import com.izouma.uwip.converter.HandleListConverter;
 import com.izouma.uwip.enums.ApplyStatus;
 import com.izouma.uwip.enums.ApplyStatus;
 import com.izouma.uwip.enums.PatentType;
 import com.izouma.uwip.enums.PatentType;
@@ -24,6 +25,7 @@ import java.util.List;
 public class Patent extends BaseEntity {
 public class Patent extends BaseEntity {
 //    private String workflow;
 //    private String workflow;
 
 
+    @Searchable
     @ApiModelProperty(value = "专利名称")
     @ApiModelProperty(value = "专利名称")
     private String name;
     private String name;
 
 
@@ -37,6 +39,7 @@ public class Patent extends BaseEntity {
     /*
     /*
     客户编码(由客户经理填写)+年份+案件类型+连接符+案件阶段[+国家]+序列号
     客户编码(由客户经理填写)+年份+案件类型+连接符+案件阶段[+国家]+序列号
      */
      */
+    @Searchable
     @ApiModelProperty(value = "寰球案号")
     @ApiModelProperty(value = "寰球案号")
     private String uwNo;
     private String uwNo;
 
 

+ 35 - 0
src/main/java/com/izouma/uwip/service/DomesticPatentService.java

@@ -2,6 +2,7 @@ package com.izouma.uwip.service;
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.izouma.uwip.domain.DomesticPatent;
 import com.izouma.uwip.domain.DomesticPatent;
 import com.izouma.uwip.domain.Handle;
 import com.izouma.uwip.domain.Handle;
 import com.izouma.uwip.domain.Patent;
 import com.izouma.uwip.domain.Patent;
@@ -18,7 +19,13 @@ import org.apache.commons.collections.CollectionUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import javax.persistence.criteria.Join;
+import javax.persistence.criteria.JoinType;
+import javax.persistence.criteria.Predicate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 
 @Service
 @Service
 @AllArgsConstructor
 @AllArgsConstructor
@@ -107,4 +114,32 @@ public class DomesticPatentService {
                 return ApplyStatus.COMPLETED;
                 return ApplyStatus.COMPLETED;
         }
         }
     }
     }
+
+    public Page<DomesticPatent> allDTO(PageQuery pageQuery) {
+       return domesticPatentRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
+            List<Predicate> and = new ArrayList<>();
+            Join<DomesticPatent, Patent> patent = root.join("patent", JoinType.LEFT);
+            if (StrUtil.isNotBlank(pageQuery.getSearch())) {
+                List<Predicate> or = new ArrayList<>();
+                or.add(criteriaBuilder.like(patent.get("name"), "%" + pageQuery.getSearch() + "%"));
+                or.add(criteriaBuilder.like(patent.get("uwNo"), "%" + pageQuery.getSearch() + "%"));
+                and.add(criteriaBuilder.or(or.toArray(new Predicate[0])));
+            }
+            Map<String, Object> query = pageQuery.getQuery();
+            query.keySet().forEach(key -> {
+                if (JpaUtils.isExistField(key, DomesticPatent.class)) {
+                    Predicate predicate = JpaUtils.getPredicate(key, query.get(key), DomesticPatent.class, root, criteriaBuilder,false);
+                    if (ObjectUtil.isNotNull(predicate)){
+                        and.add(predicate);
+                    }
+                } else {
+                    Predicate predicate = JpaUtils.getPredicate(key, query.get(key), Patent.class, root, criteriaBuilder,true);
+                    if (ObjectUtil.isNotNull(predicate)){
+                        and.add(predicate);
+                    }
+                }
+            });
+            return criteriaBuilder.and(and.toArray(new Predicate[0]));
+        }),JpaUtils.toPageRequest(pageQuery));
+    }
 }
 }

+ 158 - 4
src/main/java/com/izouma/uwip/utils/JpaUtils.java

@@ -1,5 +1,7 @@
 package com.izouma.uwip.utils;
 package com.izouma.uwip.utils;
 
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.izouma.uwip.annotations.Searchable;
 import com.izouma.uwip.annotations.Searchable;
 import com.izouma.uwip.dto.PageQuery;
 import com.izouma.uwip.dto.PageQuery;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -8,10 +10,7 @@ import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specification;
 
 
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
+import javax.persistence.criteria.*;
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
@@ -162,6 +161,161 @@ public class JpaUtils {
         return and;
         return and;
     }
     }
 
 
+    public static Predicate getPredicate(String property, Object value, Class<?> queryClass, Root<?> root,
+                                         CriteriaBuilder criteriaBuilder, boolean isPatent) {
+        if (value == null) {
+            return null;
+        }
+        if (String.class.equals(value.getClass())) {
+            if (StringUtils.isEmpty((String) value)) {
+                return null;
+            }
+        }
+        Field field = getDeclaredField(queryClass, property);
+        if (field == null) return null;
+
+        Class fieldType = field.getType();
+        if (Enum.class.isAssignableFrom(fieldType)) {
+            if (value instanceof Collection) {
+                if (!((Collection) value).isEmpty()) {
+                    List list = new ArrayList();
+                    for (Object o : ((Collection) value)) {
+                        list.add(Enum.valueOf(fieldType, String.valueOf(o)));
+                    }
+                    if (isPatent) {
+                        return root.join("patent", JoinType.LEFT).get(property).in(list);
+                    }
+                    return root.get(property).in(list);
+                }
+            } else if (value instanceof String && StringUtils.isNotEmpty((String) value)) {
+                if (((String) value).contains(",")) {
+                    String[] arr = ((String) value).split(",");
+                    List list = new ArrayList();
+                    for (String s : arr) {
+                        list.add(Enum.valueOf(fieldType, s));
+                    }
+                    if (isPatent) {
+                        return root.join("patent", JoinType.LEFT).get(property).in(list);
+                    }
+                    return root.get(property).in(list);
+                } else {
+                    if (isPatent) {
+                        return criteriaBuilder.and(criteriaBuilder
+                                .equal(root.join("patent", JoinType.LEFT)
+                                        .get(property), Enum.valueOf(fieldType, String.valueOf(value))));
+                    }
+                    return criteriaBuilder.and(criteriaBuilder
+                            .equal(root.get(property), Enum.valueOf(fieldType, String.valueOf(value))));
+                }
+            }
+        } else if (LocalDateTime.class == fieldType) {
+            if (value instanceof List) {
+                List list = (List) value;
+                if (list.size() == 1) {
+                    LocalDateTime start = DateTimeUtils
+                            .toLocalDateTime((String) list.get(0), "yyyy-MM-dd HH:mm:ss");
+                    if (isPatent) {
+                        return criteriaBuilder.greaterThanOrEqualTo(root.join("patent", JoinType.LEFT)
+                                .get(property), start);
+                    }
+                    return criteriaBuilder.greaterThanOrEqualTo(root.get(property), start);
+                } else if (list.size() == 2) {
+                    LocalDateTime end = DateTimeUtils
+                            .toLocalDateTime((String) list.get(1), "yyyy-MM-dd HH:mm:ss");
+                    if (isPatent) {
+                        return criteriaBuilder.lessThanOrEqualTo(root.join("patent", JoinType.LEFT).get(property), end);
+                    }
+                    return criteriaBuilder.lessThanOrEqualTo(root.get(property), end);
+                }
+            } else if (value instanceof String && Pattern
+                    .matches("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$", (String) value)) {
+                String[] arr = ((String) value).split(",");
+                List<Predicate> and = new ArrayList<>();
+                LocalDateTime start = DateTimeUtils.toLocalDateTime(arr[0], "yyyy-MM-dd HH:mm:ss");
+                if (isPatent) {
+                    and.add(criteriaBuilder.greaterThanOrEqualTo(root.join("patent", JoinType.LEFT)
+                            .get(property), start));
+                }
+                and.add(criteriaBuilder.greaterThanOrEqualTo(root.get(property), start));
+                LocalDateTime end = DateTimeUtils.toLocalDateTime(arr[1], "yyyy-MM-dd HH:mm:ss");
+                if (isPatent) {
+                    and.add(criteriaBuilder.lessThanOrEqualTo(root.join("patent", JoinType.LEFT).get(property), end));
+                }
+                and.add(criteriaBuilder.lessThanOrEqualTo(root.get(property), end));
+                return criteriaBuilder.and(and.toArray(new Predicate[0]));
+            } else {
+                if (isPatent) {
+                    return criteriaBuilder.and(criteriaBuilder.equal(root.join("patent", JoinType.LEFT)
+                            .get(property), DateTimeUtils
+                            .toLocalDateTime((String) value, "yyyy-MM-dd HH:mm:ss")));
+                }
+                return criteriaBuilder.and(criteriaBuilder.equal(root.get(property), DateTimeUtils
+                        .toLocalDateTime((String) value, "yyyy-MM-dd HH:mm:ss")));
+            }
+        } else if (LocalDate.class == fieldType) {
+            if (value instanceof List) {
+                List list = (List) value;
+                if (list.size() == 1) {
+                    LocalDate start = DateTimeUtils
+                            .toLocalDate((String) list.get(0), "yyyy-MM-dd");
+                    if (isPatent) {
+                        return criteriaBuilder.greaterThanOrEqualTo(root.join("patent", JoinType.LEFT)
+                                .get(property), start);
+                    }
+                    return criteriaBuilder.greaterThanOrEqualTo(root.get(property), start);
+                } else if (list.size() == 2) {
+                    LocalDate end = DateTimeUtils
+                            .toLocalDate((String) list.get(1), "yyyy-MM-dd");
+                    if (isPatent) {
+                        return criteriaBuilder.lessThanOrEqualTo(root.join("patent", JoinType.LEFT).get(property), end);
+                    }
+                    return criteriaBuilder.lessThanOrEqualTo(root.get(property), end);
+                }
+            } else if (value instanceof String && Pattern
+                    .matches("^\\d{4}-\\d{2}-\\d{2},\\d{4}-\\d{2}-\\d{2}$", (String) value)) {
+                String[] arr = ((String) value).split(",");
+                List<Predicate> and = new ArrayList<>();
+                LocalDate start = DateTimeUtils.toLocalDate(arr[0], "yyyy-MM-dd");
+                if (isPatent) {
+                    and.add(criteriaBuilder.greaterThanOrEqualTo(root.join("patent", JoinType.LEFT).get(property), start));
+                }
+                and.add(criteriaBuilder.greaterThanOrEqualTo(root.get(property), start));
+                LocalDate end = DateTimeUtils.toLocalDate(arr[1], "yyyy-MM-dd");
+                if (isPatent) {
+                    and.add(criteriaBuilder.lessThanOrEqualTo(root.join("patent", JoinType.LEFT).get(property), end));
+                }
+                and.add(criteriaBuilder.lessThanOrEqualTo(root.get(property), end));
+                return criteriaBuilder.and(and.toArray(new Predicate[0]));
+            } else {
+                if (isPatent) {
+                    return criteriaBuilder.and(criteriaBuilder.equal(root.join("patent", JoinType.LEFT)
+                            .get(property), DateTimeUtils
+                            .toLocalDateTime((String) value, "yyyy-MM-dd")));
+                }
+                return criteriaBuilder.and(criteriaBuilder.equal(root.get(property), DateTimeUtils
+                        .toLocalDateTime((String) value, "yyyy-MM-dd")));
+            }
+        } else {
+            if (isPatent) {
+                return criteriaBuilder.and(criteriaBuilder.equal(root.join("patent", JoinType.LEFT).get(property), value));
+            }
+            return criteriaBuilder.and(criteriaBuilder.equal(root.get(property), value));
+        }
+        return null;
+    }
+
+    public static Boolean isExistField(String field, Object obj) {
+        if (obj == null || StringUtils.isEmpty(field)) {
+            return null;
+        }
+        Object o = JSON.toJSON(obj);
+        JSONObject jsonObj = new JSONObject();
+        if (o instanceof JSONObject) {
+            jsonObj = (JSONObject) o;
+        }
+        return jsonObj.containsKey(field);
+    }
+
     private static Field getDeclaredField(Class<?> clazz, String property) {
     private static Field getDeclaredField(Class<?> clazz, String property) {
         String className = clazz.getName();
         String className = clazz.getName();
         while (clazz != null && clazz != Object.class) {
         while (clazz != null && clazz != Object.class) {

+ 5 - 0
src/main/java/com/izouma/uwip/web/DomesticPatentController.java

@@ -47,6 +47,11 @@ public class DomesticPatentController extends BaseController {
         return domesticPatentService.all(pageQuery);
         return domesticPatentService.all(pageQuery);
     }
     }
 
 
+    @PostMapping("/allDTO")
+    public Page<DomesticPatent> allDTO(@RequestBody PageQuery pageQuery) {
+        return domesticPatentService.allDTO(pageQuery);
+    }
+
     @GetMapping("/get/{id}")
     @GetMapping("/get/{id}")
     public DomesticPatent get(@PathVariable Long id) {
     public DomesticPatent get(@PathVariable Long id) {
         return domesticPatentRepo.findById(id).orElseThrow(new BusinessException("无记录"));
         return domesticPatentRepo.findById(id).orElseThrow(new BusinessException("无记录"));

+ 14 - 0
src/test/java/com/izouma/uwip/service/DomesticPatentServiceTest.java

@@ -2,11 +2,15 @@ package com.izouma.uwip.service;
 
 
 
 
 import com.izouma.uwip.ApplicationTests;
 import com.izouma.uwip.ApplicationTests;
+import com.izouma.uwip.dto.PageQuery;
+import com.izouma.uwip.enums.ApplyStatus;
 import com.izouma.uwip.enums.CaseType;
 import com.izouma.uwip.enums.CaseType;
 import com.izouma.uwip.enums.PatentType;
 import com.izouma.uwip.enums.PatentType;
 import org.junit.Test;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 
 
+import java.util.Map;
+
 public class DomesticPatentServiceTest extends ApplicationTests {
 public class DomesticPatentServiceTest extends ApplicationTests {
     @Autowired
     @Autowired
     private DomesticPatentService domesticPatentService;
     private DomesticPatentService domesticPatentService;
@@ -17,4 +21,14 @@ public class DomesticPatentServiceTest extends ApplicationTests {
         System.out.println(CaseType.valueOf(name));
         System.out.println(CaseType.valueOf(name));
     }
     }
 
 
+    @Test
+    public void test1() {
+        PageQuery pageQuery = new PageQuery();
+//        pageQuery.setSearch("1001");
+        Map<String, Object> query = pageQuery.getQuery();
+        query.put("applyStatus", "APPLY_STAGE");
+        query.put("workflow","ADD_SUPPLIERS");
+        domesticPatentService.allDTO(pageQuery).forEach(System.out::println);
+    }
+
 }
 }