|  | @@ -10,9 +10,13 @@ import com.lowagie.text.pdf.parser.PdfTextExtractor;
 | 
	
		
			
				|  |  |  import io.swagger.annotations.Api;
 | 
	
		
			
				|  |  |  import io.swagger.annotations.ApiOperation;
 | 
	
		
			
				|  |  |  import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  | +import org.apache.commons.csv.CSVFormat;
 | 
	
		
			
				|  |  | +import org.apache.commons.csv.CSVPrinter;
 | 
	
		
			
				|  |  | +import org.apache.shiro.SecurityUtils;
 | 
	
		
			
				|  |  |  import org.jeecg.common.api.vo.Result;
 | 
	
		
			
				|  |  |  import org.jeecg.common.aspect.annotation.AutoLog;
 | 
	
		
			
				|  |  |  import org.jeecg.common.system.api.ISysBaseAPI;
 | 
	
		
			
				|  |  | +import org.jeecg.common.system.vo.LoginUser;
 | 
	
		
			
				|  |  |  import org.jeecg.common.util.DateUtils;
 | 
	
		
			
				|  |  |  import org.jeecg.common.util.oConvertUtils;
 | 
	
		
			
				|  |  |  import org.jeecg.modules.base.service.BaseCommonService;
 | 
	
	
		
			
				|  | @@ -22,6 +26,7 @@ import org.jeecg.modules.report.service.IFabricOmOrderService;
 | 
	
		
			
				|  |  |  import org.jeecg.modules.report.service.IFabricPoOrderService;
 | 
	
		
			
				|  |  |  import org.jeecg.modules.report.service.ISyFabricLossReportService;
 | 
	
		
			
				|  |  |  import org.jeecg.modules.system.controller.CommonController;
 | 
	
		
			
				|  |  | +import org.jeecg.modules.system.entity.SysUser;
 | 
	
		
			
				|  |  |  import org.jeecg.modules.system.util.DoubleOperation;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.http.MediaType;
 | 
	
	
		
			
				|  | @@ -371,6 +376,7 @@ public class FabricLossController {
 | 
	
		
			
				|  |  |  		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
 | 
	
		
			
				|  |  |  		MultipartFile file = multipartRequest.getFile("file");// 获取上传文件对象
 | 
	
		
			
				|  |  |  		StringBuilder content = new StringBuilder();
 | 
	
		
			
				|  |  | +		String orderResult = "";
 | 
	
		
			
				|  |  |  		try{
 | 
	
		
			
				|  |  |  			PdfReader pdfReader = new PdfReader(file.getBytes());
 | 
	
		
			
				|  |  |  			PdfTextExtractor pdfTextExtractor = new PdfTextExtractor(pdfReader);
 | 
	
	
		
			
				|  | @@ -378,15 +384,20 @@ public class FabricLossController {
 | 
	
		
			
				|  |  |  				content.append(pdfTextExtractor.getTextFromPage(i));
 | 
	
		
			
				|  |  |  				content.append("\n");
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +			List<String[]> parseData = parseOrder(content.toString());
 | 
	
		
			
				|  |  | +			LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 | 
	
		
			
				|  |  | +			String userId = user.getId();
 | 
	
		
			
				|  |  | +			cacheOrder.put(userId, parseData);
 | 
	
		
			
				|  |  | +			result.success("解析成功");
 | 
	
		
			
				|  |  |  		}catch (Exception ex){
 | 
	
		
			
				|  |  |  			result.error500(ex.getMessage());
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		result.success(parseOrder(content.toString()));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return result;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	static HashMap<String,List<String[]>> cacheOrder = new HashMap<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  |  	 * PMK销售订单上传测试
 | 
	
		
			
				|  |  |  	 * SUPPLIER COPY 统计页
 | 
	
	
		
			
				|  | @@ -397,7 +408,7 @@ public class FabricLossController {
 | 
	
		
			
				|  |  |  	 * @param content
 | 
	
		
			
				|  |  |  	 * @return
 | 
	
		
			
				|  |  |  	 */
 | 
	
		
			
				|  |  | -	private String parseOrder(String content){
 | 
	
		
			
				|  |  | +	private List<String[]> parseOrder(String content){
 | 
	
		
			
				|  |  |  		int index2 = content.indexOf("SUPPLIER COPY STYLE");
 | 
	
		
			
				|  |  |  		int index3 = content.indexOf("SUPPLIER COPY PACKS");
 | 
	
		
			
				|  |  |  		int index4 = content.indexOf("SUPPLIER COPY DELIVERIES");
 | 
	
	
		
			
				|  | @@ -423,6 +434,7 @@ public class FabricLossController {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		StringBuilder sb = new StringBuilder();
 | 
	
		
			
				|  |  | +		List<String[]> ret = new ArrayList<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		int startIndex = pContent1.indexOf("Kimball: ")+"Kimball: ".length();
 | 
	
		
			
				|  |  |  		int endIndex = pContent1.indexOf("\n", startIndex);
 | 
	
	
		
			
				|  | @@ -483,6 +495,33 @@ public class FabricLossController {
 | 
	
		
			
				|  |  |  		sb.append("总金额: \t"+totalMoney+"  \t");
 | 
	
		
			
				|  |  |  		sb.append("\n");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		List<String> row = new ArrayList<>();
 | 
	
		
			
				|  |  | +		row.add("订单编号");
 | 
	
		
			
				|  |  | +		row.add(orderNo);
 | 
	
		
			
				|  |  | +		row.add("订单日期");
 | 
	
		
			
				|  |  | +		row.add(orderDate);
 | 
	
		
			
				|  |  | +		ret.add(row.toArray(new String[row.size()]));
 | 
	
		
			
				|  |  | +		row = new ArrayList<>();
 | 
	
		
			
				|  |  | +		row.add("客户订单号");
 | 
	
		
			
				|  |  | +		row.add(purchaseOrder);
 | 
	
		
			
				|  |  | +		row.add("成衣加工厂");
 | 
	
		
			
				|  |  | +		row.add(closeFactory);
 | 
	
		
			
				|  |  | +		ret.add(row.toArray(new String[row.size()]));
 | 
	
		
			
				|  |  | +		row = new ArrayList<>();
 | 
	
		
			
				|  |  | +		row.add("币种");
 | 
	
		
			
				|  |  | +		row.add(currency);
 | 
	
		
			
				|  |  | +		row.add("包装方式");
 | 
	
		
			
				|  |  | +		row.add(packageType);
 | 
	
		
			
				|  |  | +		ret.add(row.toArray(new String[row.size()]));
 | 
	
		
			
				|  |  | +		row = new ArrayList<>();
 | 
	
		
			
				|  |  | +		row.add("总数量");
 | 
	
		
			
				|  |  | +		row.add(totalNumer);
 | 
	
		
			
				|  |  | +		row.add("总金额");
 | 
	
		
			
				|  |  | +		row.add(totalMoney);
 | 
	
		
			
				|  |  | +		ret.add(row.toArray(new String[row.size()]));
 | 
	
		
			
				|  |  | +		ret.add(new String[]{"款号","预发货日期","预完工日期","PackId","小PO","分销点","存货名称","规格型号","数量","含税单价","价税合计","箱数","颜色","是否TC","尺码"});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		sb.append("款号 \t预发货日期 \t预完工日期 \tPackId \t小PO \t分销点 \t存货名称 \t规格型号 \t数量 \t含税单价 \t");
 | 
	
		
			
				|  |  |  		sb.append("价税合计 \t箱数 \t颜色 \t是否TC \t尺码 \t");
 | 
	
		
			
				|  |  |  		sb.append("\n");
 | 
	
	
		
			
				|  | @@ -539,12 +578,44 @@ public class FabricLossController {
 | 
	
		
			
				|  |  |  					String packId = "";// 配比编码
 | 
	
		
			
				|  |  |  					Integer packs = 0;// 箱数
 | 
	
		
			
				|  |  |  					String color = "";//颜色
 | 
	
		
			
				|  |  | +					List<String> lstSize = new ArrayList<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					String packRow = arrPacks[k].trim();
 | 
	
		
			
				|  |  | +					// 去掉 pack type
 | 
	
		
			
				|  |  | +					packRow = packRow.replace("Solid Colour", "").replace("Solid Colour/Solid Size", "");
 | 
	
		
			
				|  |  | +					boolean mutilSize = packRow.indexOf(",")>-1;// 是否有多个尺寸
 | 
	
		
			
				|  |  | +					String[] arrPackCol = packRow.split(" ");
 | 
	
		
			
				|  |  | +					if (arrPackCol.length<5){
 | 
	
		
			
				|  |  | +						continue;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					packId = arrPackCol[0];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					packs = oConvertUtils.getInt(arrPackCol[arrPackCol.length-2]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					if (!mutilSize){
 | 
	
		
			
				|  |  | +						color = arrPackCol[2];
 | 
	
		
			
				|  |  | +						lstSize.add(arrPackCol[1]);
 | 
	
		
			
				|  |  | +					}else{
 | 
	
		
			
				|  |  | +						for (int x=1;x<arrPackCol.length;x++){
 | 
	
		
			
				|  |  | +							String size = arrPackCol[x];
 | 
	
		
			
				|  |  | +							if (size.endsWith(",")){
 | 
	
		
			
				|  |  | +								lstSize.add(size.replace(",", ""));
 | 
	
		
			
				|  |  | +							}else{
 | 
	
		
			
				|  |  | +								lstSize.add(size);
 | 
	
		
			
				|  |  | +								color = arrPackCol[x+1];
 | 
	
		
			
				|  |  | +								break;
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					/*
 | 
	
		
			
				|  |  |  					String[] arrPackCol = packRow.replace(",","").split(" ");
 | 
	
		
			
				|  |  |  					if (arrPackCol.length<6) {
 | 
	
		
			
				|  |  |  						continue;
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  					List<String> lstSize = new ArrayList<>();
 | 
	
		
			
				|  |  |  					int lastSizeIndex = -1;
 | 
	
		
			
				|  |  |  					for (int x=0; x<arrPackCol.length;x++){
 | 
	
	
		
			
				|  | @@ -560,10 +631,8 @@ public class FabricLossController {
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  |  					if (lstSize.size() == 0){
 | 
	
		
			
				|  |  |  						continue;
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -					packId = arrPackCol[0];
 | 
	
		
			
				|  |  | -					color = arrPackCol[lastSizeIndex+1];
 | 
	
		
			
				|  |  | -					packs = oConvertUtils.getInt(arrPackCol[arrPackCol.length-2]);
 | 
	
		
			
				|  |  | +					}*/
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					// 查找配码明细
 | 
	
		
			
				|  |  |  					for (int l=1; l<arrPackDetails.length;l++){
 | 
	
	
		
			
				|  | @@ -582,15 +651,21 @@ public class FabricLossController {
 | 
	
		
			
				|  |  |  								String sumRow = arrRows[startIndex].trim();
 | 
	
		
			
				|  |  |  								String[] arrSum = sumRow.split(" ");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +								int diff = 0;
 | 
	
		
			
				|  |  | +								while (!arrSum[diff].matches("[+-]?\\d+") && diff<arrSum.length){
 | 
	
		
			
				|  |  | +									diff++;
 | 
	
		
			
				|  |  | +								}
 | 
	
		
			
				|  |  |  								for (int m=0;m<lstSize.size();m++) {
 | 
	
		
			
				|  |  |  									String strSize = lstSize.get(m);
 | 
	
		
			
				|  |  | -									Integer sumPerBox = oConvertUtils.getInt(arrSum[m+1]);
 | 
	
		
			
				|  |  | +									Integer sumPerBox = oConvertUtils.getInt(arrSum[m+diff]);
 | 
	
		
			
				|  |  |  									Integer sum = sumPerBox*packs;
 | 
	
		
			
				|  |  |  									Double money = DoubleOperation.mul(price, sum*1.0, 2);
 | 
	
		
			
				|  |  |  									sb.append(styleNo + " \t" + handoverDDate + " \t" + finishDate + " \t"+
 | 
	
		
			
				|  |  |  											packId+" \t"+poNo+" \t"+station+" \t"+invName+" \t"+fibre+" \t"+
 | 
	
		
			
				|  |  |  													sum+" \t"+price+" \t"+money+" \t"+packs+" \t"+color+" \t"+isTc+" \t"+strSize+" \t\n");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +									ret.add(new String[]{styleNo,handoverDDate,finishDate,packId,poNo,station,invName,fibre,sum.toString(),price.toString(),money.toString(),packs.toString(),color,isTc,strSize});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  								};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  							}else{// 独码
 | 
	
	
		
			
				|  | @@ -603,7 +678,7 @@ public class FabricLossController {
 | 
	
		
			
				|  |  |  								sb.append(styleNo + " \t" + handoverDDate + " \t" + finishDate + " \t"+
 | 
	
		
			
				|  |  |  										packId+" \t"+poNo+" \t"+station+" \t"+invName+" \t"+fibre+" \t"+
 | 
	
		
			
				|  |  |  										sum+" \t"+price+" \t"+money+" \t"+packs+" \t"+color+" \t"+isTc+" \t"+strSize+" \t\n");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +								ret.add(new String[]{styleNo,handoverDDate,finishDate,packId,poNo,station,invName,fibre,sum.toString(),price.toString(),money.toString(),packs.toString(),color,isTc,strSize});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  							}
 | 
	
		
			
				|  |  |  							break;
 | 
	
	
		
			
				|  | @@ -612,7 +687,42 @@ public class FabricLossController {
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		return sb.toString();
 | 
	
		
			
				|  |  | +		//return sb.toString();
 | 
	
		
			
				|  |  | +		return ret;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 获取附件内容
 | 
	
		
			
				|  |  | +	 * @return
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	@RequestMapping(value="/downOrder", method = RequestMethod.GET)
 | 
	
		
			
				|  |  | +	public void downOrder(HttpServletRequest request, HttpServletResponse response) throws IOException {
 | 
	
		
			
				|  |  | +		// 设置HTTP头信息
 | 
	
		
			
				|  |  | +		response.setContentType("text/csv");
 | 
	
		
			
				|  |  | +		response.addHeader("Content-Disposition", "attachment; filename=data.csv");
 | 
	
		
			
				|  |  | +		response.setCharacterEncoding("UTF-8");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		try (CSVPrinter printer = new CSVPrinter(response.getWriter(), CSVFormat.DEFAULT)) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 | 
	
		
			
				|  |  | +			String userId = user.getId();
 | 
	
		
			
				|  |  | +			List<String[]> content = cacheOrder.get(userId);
 | 
	
		
			
				|  |  | +			if (content != null){
 | 
	
		
			
				|  |  | +				for (String[] row : content){
 | 
	
		
			
				|  |  | +					printer.printRecord(row);
 | 
	
		
			
				|  |  | +				};
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// 清空输出流
 | 
	
		
			
				|  |  | +			response.flushBuffer();
 | 
	
		
			
				|  |  | +		} catch (Exception e) {
 | 
	
		
			
				|  |  | +			throw new RuntimeException("Failed to generate CSV file.", e);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 |