| 
					
				 | 
			
			
				@@ -1,15 +1,24 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.sysu.admin.api.crop; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.class_item.CropClassItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.sysu.admin.controller.crop.class_item.CropClassItemRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.class_item_period.CropClassItemPeriod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.sysu.admin.controller.crop.class_item_period.CropClassItemPeriodRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.clazz.CropClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.sysu.admin.controller.crop.clazz.CropClassRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.period.CropPeriod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.sysu.admin.controller.crop.period.CropPeriodRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xiesx.fastboot.base.result.BaseResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xiesx.fastboot.base.result.R; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.data.domain.Sort; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.web.bind.annotation.RequestMapping; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.web.bind.annotation.RestController; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Arrays; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @RequestMapping("/api/crop_class") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @RestController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class CropClassController { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -25,10 +34,81 @@ public class CropClassController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @RequestMapping("/list") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public BaseResult list(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        cropClassRepository.findAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        cropClassItemRepository.findAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        cropPeriodRepository.findAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        cropClassItemPeriodRepository.findAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return R.succ(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CropClass> cropClassList = cropClassRepository.findAll(Sort.by(CropClass.FIELDS.id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CropClassItem> cropClassItemList = cropClassItemRepository.findAll(Sort.by(CropClassItem.FIELDS.classId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setItems(cropClassList, cropClassItemList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CropClassItemPeriod> cropClassItemPeriods = cropClassItemPeriodRepository.findAllOrderByCropItemId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CropPeriod[] cropPeriodArray = cropPeriodRepository.findAll(Sort.by(CropPeriod.FIELDS.id)).toArray(new CropPeriod[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cropClassItemList.sort((o1, o2) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return o1.getId().compareTo(o2.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setPeriods(cropClassItemList, cropClassItemPeriods, cropPeriodArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return R.succ(cropClassList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private CropPeriod getPeriod(CropPeriod cropPeriod, CropPeriod[] cropPeriodArray){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return cropPeriodArray[Arrays.binarySearch(cropPeriodArray, cropPeriod, (o1, o2) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return o1.getId().compareTo(o2.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        })]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void setPeriods(List<CropClassItem> cropClassItemList, List<CropClassItemPeriod> cropClassItemPeriods, CropPeriod[] cropPeriodArray){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int i = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(CropClassItem cropClassItem : cropClassItemList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<CropPeriod> periods = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            while (i < cropClassItemPeriods.size()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CropClassItemPeriod cropClassItemPeriod = cropClassItemPeriods.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (cropClassItemPeriod.getPk().cropItemId() > cropClassItem.getId()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (cropClassItemPeriod.getPk().cropItemId().equals(cropClassItem.getId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    periods.add(getPeriod(new CropPeriod().setId(cropClassItemPeriod.getPk().periodId()), cropPeriodArray)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                i++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cropClassItem.setPeriods(periods); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void setItems(List<CropClass> cropClassList, List<CropClassItem> cropClassItemList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int i = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(CropClass cropClass : cropClassList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<CropClassItem> items = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            while (i < cropClassItemList.size()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CropClassItem cropClassItem = cropClassItemList.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(cropClassItem.getClassId() > cropClass.getId()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(cropClassItem.getClassId().equals(cropClass.getId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    items.add(cropClassItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                i++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cropClass.setItems(items); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 |