Browse Source

excel导入添加验证

huxy 2 years ago
parent
commit
c77d042ddb

+ 104 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/spapl/controller/SyPreAssembledPackingListController.java

@@ -820,9 +820,9 @@ public class SyPreAssembledPackingListController extends JeecgController<SyPreAs
                 }
                 temps.add(preAssembledPackingList);
                 if(preAssembledPackingList.getStatus().equals("0")){
-                    result.setCode(200);
+                    result.setCode(201);
                     result.setMessage("单据"+preAssembledPackingList.getDocumentNo()+"未提交!");
-                    result.setSuccess(true);
+                    result.setSuccess(false);
                     return result;
                 }
             }
@@ -1160,6 +1160,107 @@ public class SyPreAssembledPackingListController extends JeecgController<SyPreAs
             mains.add(main);
             //break;
         }
-        boolean bool= syPreAssembledPackingListService.add(mains);
+        syPreAssembledPackingListService.add(mains);
+    }
+
+
+
+
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel2", method = RequestMethod.POST)
+    public Result<?> importExcel3(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        try{
+            String str="";
+            for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+                MultipartFile file = entity.getValue();// 获取上传文件对象
+                InputStream inputStream=file.getInputStream();
+                ImportParams params = new ImportParams();
+                Workbook workbook=new XSSFWorkbook(inputStream);
+                str+=refreshSheet1(workbook);
+                params.setTitleRows(2);
+                params.setHeadRows(1);
+                params.setNeedSave(true);
+            }
+            return Result.ok(str);
+        }catch (Exception e){
+            e.printStackTrace();
+            return Result.error("文件导入失败"+e.getMessage());
+        }
+    }
+
+
+    private String refreshSheet1(Workbook workbook1) {
+        List <SyPreAssembledPackingList> mains=new ArrayList<>();
+        Iterator sheets=workbook1.sheetIterator();
+        int num=0;
+        while (sheets.hasNext()){
+            num++;
+            SyPreAssembledPackingList main=new SyPreAssembledPackingList();
+            List<SyPreAssembledPackingListItem> items=new ArrayList<SyPreAssembledPackingListItem>();
+            Sheet sheet=(Sheet) sheets.next();
+            List<String> strs3=new ArrayList<String>();//获取尺码名称
+            List<String > list=new ArrayList<>();
+            List<Integer> nums=new ArrayList<>();
+            list.add("item NO./SKU NO./UPC NO./PACKS CODE");
+            list.add("PREACKSKU");
+            list.add("净净重");
+            for (int x=0;x<=sheet.getLastRowNum();x++){
+                Row row=sheet.getRow(x);//列
+                Cell cell2=row.getCell(0);
+                if(cell2==null){//如果这一列为空就退出
+                    continue;
+                }
+                List<String> strs=new ArrayList<String>();//装主要数据
+                List<String> strs2=new ArrayList<String>();//获取尺码的信息
+                for (int i=0;i<row.getLastCellNum();i++){
+                    Cell cell=row.getCell(i);
+                    if(cell==null){
+                        throw new JeecgBootException("第"+num+"页的"+"第"+(x+1)+"行的"+
+                                sheet.getRow(0).getCell(i).getStringCellValue()+"未填值!");
+                    }
+                    cell.setCellType(CellType.STRING);//获取的都转换成String
+                    if(cell.getStringCellValue().length()<1&&x>0&&!nums.contains(i)){
+                        System.out.println("报错了\t第"+(i+1)+"个\t"+sheet.getRow(0).getCell(i).getStringCellValue());
+                        throw new JeecgBootException("第"+num+"页的"+"第"+(x+1)+"行的"+
+                                sheet.getRow(0).getCell(i).getStringCellValue()+"未填值!");
+                    }
+                    if(x==0){
+                        if((i>7&&i<row.getLastCellNum()-13)||i==row.getLastCellNum()-4){
+                            strs3.add(cell.getStringCellValue());
+                        }
+                        if(list.contains(cell.getStringCellValue())){
+                            nums.add(i);
+                            System.out.println("字段\t"+cell.getStringCellValue()+"\t"+i);
+                        }
+                    }else{
+                        if((i>7&&i<row.getLastCellNum()-13)||i==row.getLastCellNum()-4){
+                            strs2.add(cell.getStringCellValue());
+                        }else{
+                            strs.add(cell.getStringCellValue());
+                        }
+                    }
+                }
+                if(x>0){
+                    SyPreAssembledPackingListItem item=
+                            new SyPreAssembledPackingListItem(strs.toArray(new String[strs.size()]),
+                                    strs2.toArray(new String[strs2.size()]),
+                                    strs3.toArray(new String[strs3.size()]));
+                    items.add(item);
+                    main=new SyPreAssembledPackingList(strs.toArray(new String[strs.size()]));
+                }
+            }
+            main.setSyPreAssembledPackingListItemList(items);//获取集合
+            mains.add(main);
+        }
+        return syPreAssembledPackingListService.test(mains);
     }
 }

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/spapl/service/ISyPreAssembledPackingListService.java

@@ -108,4 +108,5 @@ public interface ISyPreAssembledPackingListService extends IService<SyPreAssembl
 
 	public boolean add(List<SyPreAssembledPackingList> items);
 
+	public String test(List<SyPreAssembledPackingList> items);
 }

+ 60 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/spapl/service/impl/SyPreAssembledPackingListServiceImpl.java

@@ -37,6 +37,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Collection;
 
@@ -478,7 +479,21 @@ public class SyPreAssembledPackingListServiceImpl extends ServiceImpl<SyPreAssem
 	public boolean add(List<SyPreAssembledPackingList> items1) {
 		boolean bool=false;
 		try{
-			String ids="";
+			/*int num=1;
+			String strs="";
+			for (SyPreAssembledPackingList item : items1){
+				QueryWrapper queryWrapper=new QueryWrapper();
+				queryWrapper.eq("sy_Declaration_Elements_Id",item.getSyDeclarationElementsId());
+				SyPreAssembledPackingList item2=new SyPreAssembledPackingList();
+				if(item2!=null){
+					strs+="第"+num+"页的已被预装箱单参照,请勿重复操作\n";
+				}
+				num++;
+			}
+			if(!strs.equals("")){
+				throw new JeecgBootException(strs);
+			}*/
+			System.out.println("原单据数量,已参照数量,本次数量");
 			for(SyPreAssembledPackingList syPreAssembledPackingList : items1){
 				List<SyPreAssembledPackingListItem> items=syPreAssembledPackingList.getSyPreAssembledPackingListItemList();
 				SimpleDateFormat sf= new SimpleDateFormat("yyyyMMdd");
@@ -497,7 +512,6 @@ public class SyPreAssembledPackingListServiceImpl extends ServiceImpl<SyPreAssem
 				syPreAssembledPackingList.setTotalVolume(new BigDecimal("0"));
 				syPreAssembledPackingList.setTotalPrice(new BigDecimal("0"));
 				syPreAssembledPackingListMapper.insert(syPreAssembledPackingList);//往主表添加数据
-				ids=ids+syPreAssembledPackingList.getId()+"\n";
 				for (SyPreAssembledPackingListItem item : items){
 					syPreAssembledPackingList.setTotal(syPreAssembledPackingList.getTotal().add(item.getTotal()));
 					syPreAssembledPackingList.setTotalBoxes(syPreAssembledPackingList.getTotalBoxes().add(item.getBoxNumber()));
@@ -578,4 +592,48 @@ public class SyPreAssembledPackingListServiceImpl extends ServiceImpl<SyPreAssem
 		}
 		return bool;
 	}
+
+	@Override
+	public String test(List<SyPreAssembledPackingList> mains) {
+		String strs="";
+		int num=1;
+		for(SyPreAssembledPackingList main : mains){
+			BigDecimal total1=new BigDecimal("0");
+			BigDecimal total2=new BigDecimal("0");
+			BigDecimal total3=new BigDecimal("0");
+			for (SyPreAssembledPackingListItem item :main.getSyPreAssembledPackingListItemList()){
+				total3=total3.add(item.getTotal());
+				String ids="";
+				for (SizeTable size : item.getSizeTables()){
+					ids+=size.getItemId()+",";//获取出运明细子表id
+				}
+				if(!ids.equals("")){
+					ids=ids.substring(0,ids.length()-1);
+					QueryWrapper queryWrapper=new QueryWrapper();
+					queryWrapper.in("id", Arrays.asList(ids.split(",")));
+					queryWrapper.select("sum(shipment_Quantity) as shipment_Quantity");
+					SyShippingDetailsItem syshippings=syShippingDetailsItemMapper.selectOne(queryWrapper);
+					System.out.println("syshippings的shipment_Quantity为\t"+syshippings.getShipmentQuantity());
+					if(syshippings!=null){
+						total1=syshippings.getShipmentQuantity();
+					}else{
+						throw new JeecgBootException("该单据在上游未找到");
+					}
+
+					queryWrapper=new QueryWrapper();
+					queryWrapper.in("sy_declaration_elements_item_id", Arrays.asList(ids.split(",")));
+					queryWrapper.select("sum(total) as total");
+					SyPreAssembledPackingListItem sypre=syPreAssembledPackingListItemMapper.selectOne(queryWrapper);
+					if(sypre!=null){
+						System.out.println("sypre的total为\t"+sypre.getTotal());
+						total2=sypre.getTotal();
+					}
+				}
+			}
+			strs+="第"+num+"页原单据数量"+total1+",已参照数量"+total2+",本次数量"+total3+"\n";
+			num++;
+		}
+		System.out.println("strs\n"+strs);
+		return strs;
+	}
 }

+ 85 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/splt/controller/SyPackingListTailoringController.java

@@ -898,6 +898,91 @@ public class SyPackingListTailoringController {
 		 syPackingListTailoringService.excelAdd(mains);//新增
 	 }
 
+
+	 /**
+	  * 通过excel导入数据
+	  *
+	  * @param request
+	  * @param response
+	  * @return
+	  */
+	 @RequestMapping(value = "/importExcel2", method = RequestMethod.POST)
+	 public Result<?> importExcel3(HttpServletRequest request, HttpServletResponse response) throws IOException {
+		 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+		 Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+		 for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+			 MultipartFile file = entity.getValue();// 获取上传文件对象
+			 System.out.println("文件是否为空--isfile\t"+file.isEmpty());
+			 System.out.println("文件全称--fileName\t"+file.getOriginalFilename());
+			 System.out.println("文件类型--fileType\t"+file.getContentType());
+			 System.out.println("文件大小--fileSize\t"+file.getSize()/1024+"KB");
+			 InputStream inputStream=file.getInputStream();
+			 Workbook workbook=new XSSFWorkbook(inputStream);
+			 refreshSheet1(workbook);
+		 }
+		 return Result.OK("文件导入成功!");
+	 }
+
+
+	 private void refreshSheet1(Workbook workbook1) {
+		 List<SyPackingListTailoring> mains=new ArrayList<>();
+		 Iterator sheets=workbook1.sheetIterator();
+		 int num=0;
+		 while (sheets.hasNext()){
+			 num++;
+			 SyPackingListTailoring main=new SyPackingListTailoring();
+			 List<SyPackingListTailoringItem> items=new ArrayList<>();
+			 Sheet sheet=(Sheet) sheets.next();
+			 String str2="";//尺码大小
+			 for (int x=2;x<=sheet.getLastRowNum();x++){
+				 String str="";
+				 String str1="";//尺码比例
+				 String strMain="";
+				 Row row=sheet.getRow(x);//列
+				 if(oConvertUtils.isEmpty(row.getCell(1))){//如果这一列为空就退出
+					 continue;
+				 }
+				 for (int i=0;i<row.getLastCellNum();i++){
+					 Cell cell=row.getCell(i);
+					 /*if(cell==null&&x>=3){
+						 throw new JeecgBootException("第"+num+"页的"+"第"+(x+1)+"行的"+
+								 sheet.getRow(3).getCell(i).getStringCellValue()+"未填值!");
+					 }*/
+					 cell.setCellType(CellType.STRING);//获取的都转换成String
+					 System.out.print(cell.getStringCellValue()+"\t");
+					 if(x==2&&i<12){
+						 strMain+=cell.getStringCellValue()+"!-!";
+						 continue;
+					 }else if(x==1){
+						 continue;
+					 }
+					 if(x==3&&i>6&&i<row.getLastCellNum()-8){
+						 str2+=cell.getStringCellValue()+",";
+					 }
+					 if((i>6&&i<row.getLastCellNum()-8)||i==row.getLastCellNum()-1){
+						 str1+=cell.getStringCellValue()+",";
+					 }else{
+						 str+=cell.getStringCellValue()+",";
+					 }
+				 }
+				 if(x>3){
+					 SyPackingListTailoringItem item=new SyPackingListTailoringItem(
+							 str.substring(0,str.length()-1).split(","),
+							 str1.substring(0,str1.length()-1).split(","),
+							 str2.substring(0,str2.length()-1).split(","));
+					 items.add(item);
+				 }else if(x==2){
+					 System.out.println("\nstrMain1\n"+strMain);
+					 main=new SyPackingListTailoring(strMain.substring(0,strMain.length()-3).split("!-!"));
+					 System.out.println("\nmain\n"+main);
+				 }
+			 }
+			 main.setSyPackingListTailoringItemList(items);
+			 mains.add(main);
+		 }
+		 syPackingListTailoringService.test(mains);//新增
+	 }
+
 	 @AutoLog(value = "装箱单成衣JSON")
 	 @ApiOperation(value="装箱单成衣JSON", notes="装箱单成衣JSON")
 	 @GetMapping(value = "/pushSplt")

+ 2 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/splt/service/ISyPackingListTailoringService.java

@@ -81,4 +81,6 @@ public interface ISyPackingListTailoringService extends IService<SyPackingListTa
 	String cancelSubmitBatch(String [] ids);
 
 	boolean excelAdd(List<SyPackingListTailoring> mains);
+
+    String test(List<SyPackingListTailoring> mains);
 }

+ 43 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/splt/service/impl/SyPackingListTailoringServiceImpl.java

@@ -549,4 +549,47 @@ public class SyPackingListTailoringServiceImpl extends ServiceImpl<SyPackingList
 		}
 		return bool;
 	}
+
+	@Override
+	public String test(List<SyPackingListTailoring> mains) {
+		String strs="";
+		int num=1;
+		for(SyPackingListTailoring main : mains){
+			BigDecimal total1=new BigDecimal("0");
+			BigDecimal total2=new BigDecimal("0");
+			BigDecimal total3=new BigDecimal("0");
+			for (SyPackingListTailoringItem item :main.getSyPackingListTailoringItemList()){
+				total3=total3.add(item.getTotal());
+				String ids="";
+				for (SizeTable size : item.getSizeTables()){
+					ids+=size.getItemId()+",";//获取出运明细子表id
+				}
+				if(!ids.equals("")){
+					ids=ids.substring(0,ids.length()-1);
+					QueryWrapper queryWrapper=new QueryWrapper();
+					queryWrapper.in("id", Arrays.asList(ids.split(",")));
+					queryWrapper.select("sum(total) as total");
+					SyPreAssembledPackingListItem syshippings=syPreAssembledPackingListItemMapper.selectOne(queryWrapper);
+					if(syshippings==null){
+						throw new JeecgBootException("该单据在上游未找到");
+					}else{
+						total1=syshippings.getTotal();
+					}
+					queryWrapper=new QueryWrapper();
+					queryWrapper.in("sy_Pre_Assembled_Packing_List_Item_Id", Arrays.asList(ids.split(",")));
+					queryWrapper.select("sum(total) as total");
+					SyPackingListTailoringItem syPackingItem=syPackingListTailoringItemMapper.selectOne(queryWrapper);
+					if(syPackingItem!=null){
+					//	total2=syPackingItem.getTotal();
+						System.out.println("syPackingItem的total为\t"+syPackingItem.getTotal());
+						throw new JeecgBootException("该单据已被成衣参照!请勿重复操作");
+					}
+				}
+			}
+			strs+="第"+num+"页原单据数量"+total1+",已参照数量"+total2+",本次数量"+total3+"\n";
+			num++;
+		}
+		System.out.println("strs\n"+strs);
+		return strs;
+	}
 }