diff --git a/src/main/java/com/dsic/gj_erp/bean/jcsj/DmBom.java b/src/main/java/com/dsic/gj_erp/bean/jcsj/DmBom.java index a2656d9..e4add63 100644 --- a/src/main/java/com/dsic/gj_erp/bean/jcsj/DmBom.java +++ b/src/main/java/com/dsic/gj_erp/bean/jcsj/DmBom.java @@ -96,10 +96,10 @@ public class DmBom implements Serializable { @ApiModelProperty(value = "曲标识") private String qbs; - @ApiModelProperty(value = "坡口長度") + @ApiModelProperty(value = "坡口标识") private String pkbs; - @ApiModelProperty(value = "坡口标识") + @ApiModelProperty(value = "坡口长度") private BigDecimal pkcd; @ApiModelProperty(value = "打磨标识") diff --git a/src/main/java/com/dsic/gj_erp/bean/jcsj/DmTltpdf.java b/src/main/java/com/dsic/gj_erp/bean/jcsj/DmTltpdf.java index 1b220bc..b811b02 100644 --- a/src/main/java/com/dsic/gj_erp/bean/jcsj/DmTltpdf.java +++ b/src/main/java/com/dsic/gj_erp/bean/jcsj/DmTltpdf.java @@ -28,9 +28,12 @@ public class DmTltpdf implements Serializable { @ApiModelProperty(value = "船号") private String dcCh; - @ApiModelProperty(value = "图号(不是图纸编号)") + @ApiModelProperty(value = "批量") + private String pl; + @ApiModelProperty(value = "图号(总图号,不是图纸编号)") private String th; - + @ApiModelProperty(value = "套料图号(每一页的图纸编号)") + private String tlth; @ApiModelProperty(value = "页码") private String pageNum; diff --git a/src/main/java/com/dsic/gj_erp/controller/jcsj/DmBomController.java b/src/main/java/com/dsic/gj_erp/controller/jcsj/DmBomController.java index 065142a..7f1978c 100644 --- a/src/main/java/com/dsic/gj_erp/controller/jcsj/DmBomController.java +++ b/src/main/java/com/dsic/gj_erp/controller/jcsj/DmBomController.java @@ -2,6 +2,7 @@ package com.dsic.gj_erp.controller.jcsj; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.dsic.gj_erp.annotation.AuthFunction; import com.dsic.gj_erp.bean.ResultBean; import com.dsic.gj_erp.bean.jcsj.DmBom; @@ -18,12 +19,15 @@ import org.apache.commons.lang3.StringUtils; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -53,34 +57,41 @@ public class DmBomController { @PostMapping("/uploadPDF") @Authorization("") + @Transactional @ResponseBody - public ResultBean uploadPDF(@RequestParam("file") MultipartFile file)throws IOException { -// String pdfFilePath = "E:/runpeng/1润芃工作日志/第21个月/第3周/钢加项目资料/小池/B046HC103HN第046批量数控套料图2023-05-11.pdf"; // PDF文件路径 + public ResultBean uploadPDF(@RequestParam("file") MultipartFile[] fileList)throws IOException { + for (MultipartFile file : fileList) { PDDocument document = PDDocument.load(file.getInputStream()); int pageNum = document.getNumberOfPages(); -// PDFTextStripper stripper = new PDFTextStripper(); - stripper .setSortByPosition(true); //设置为true 则按照行进行读取,默认是false -// // 指定页面读取内容 -// stripper.setStartPage(12); // 设置起始页面,这里设置成0,就表示读取第一个页面 -// stripper.setEndPage(12); // 设置结束页面,这里设置成0,就表示读取第一个页面 +// stripper .setSortByPosition(true); //设置为true 则按照行进行读取,默认是false // // 3、获取指定页面的文本内容 - stripper.setStartPage(2); - stripper.setEndPage(2); - String[] text = stripper.getText(document).split("\r\n")[2].split(" "); - String dcCh=text[1]; - String th=text[10]; + stripper.setStartPage(1);// 设置起始页面,这里设置成2,就表示读取第一个页面 + stripper.setEndPage(1); // 设置结束页面,这里设置成2,就表示读取第一个页面 + String[] text = stripper.getText(document).split("\r\n"); + String dcCh=text[46]; + String pl=text[38].substring(1,4); + String th=text[29]; + //删除导入过的同船、批量、图号的数据, + tltpdfService.remove(new QueryWrapper<DmTltpdf>() + .eq("dc_ch",dcCh) + .eq("pl",pl) + .eq("th",th) + ); List<DmTltpdf> list=new ArrayList<>(); for (int i = 1; i <= pageNum; i++) { stripper.setStartPage(i); stripper.setEndPage(i); - String s = stripper.getText(document); - String[] a=s.split("\r\n"); + String s = stripper.getText(document);//本页文字内容 + String[] a=s.split("\r\n");//分行 + String tlth=i>1?s.split("序号零件编号")[1].split(" ")[5]:""; // System.out.println("第 " + i +"/"+pageNum+ " 页 :" ); for (int j=0;j<a.length;j++){ DmTltpdf tltpdf=new DmTltpdf(); tltpdf.setDcCh(dcCh); tltpdf.setTh(th); + tltpdf.setPl(pl); + tltpdf.setTlth(tlth); tltpdf.setPageNum(i +"/"+pageNum); tltpdf.setRows((j+1) +"/"+a.length); tltpdf.setContent(a[j]); @@ -88,11 +99,90 @@ public class DmBomController { // System.out.println("第 " + (j+1) +"/"+a.length+ " 行 :"); // System.out.println(a[j]); } + if (i==1)continue; + //根据当前页数据,修改BOM中零件属性 坡口 打磨 曲 + int ljCount= s.split("\\|")[0].split("\r\n").length;//零件数量 + if (ljCount==11||ljCount==21||ljCount==31){ + //取用下标count-1 至 count*2-2的数组,为属性 + String[] sxArray=getArrayByIndex(a,ljCount-1,ljCount*2-2); + + //取用下标count*2-2 至 count*3-3 的数组,为零件号 + String[] ljArray=getArrayByIndex(a,ljCount*2-2,ljCount*3-3); + + System.out.println(ljCount); + System.out.println(i); + for (int j = 0; j < ljArray.length; j++) { + String ljbh;//零件号 + String sx;//属性 + if (i==0){ + String[] b= ljArray[j].split("0\\|"); + ljbh=b[b.length-1]; + sx=sxArray[j].split("\\|")[4]; + }else { + ljbh=ljArray[j]; + sx=sxArray[j].split("\\|")[4]; + } + updateBom(sx,dcCh,pl,tlth,ljbh); + } + }else if (ljCount==1){ + //"1,11,21,31" + String[] ljxx= a[0].split("\\|"); + String ljbh= ljxx[ljxx.length-1];//零件号 + String sx= ljxx[4];//属性 + updateBom(sx,dcCh,pl,tlth,ljbh); + }else { + //取用下标count 至 count*2-1的数组,为属性 + String[] sxArray=getArrayByIndex(a,ljCount,ljCount*2-1); + //取用下标count*2 至 count*3-1 的数组,为零件号 + String[] ljArray=getArrayByIndex(a,ljCount*2,ljCount*3-1); + for (int j = 0; j < ljArray.length; j++) { + String ljbh=ljArray[j];//零件号 + String sx=sxArray[j].split("\\|")[4];//属性 + updateBom(sx,dcCh,pl,tlth,ljbh); + } + } } tltpdfService.saveBatch(list); document.close(); + } return new ResultBean(); } + + public String[] getArrayByIndex(String[] oldArray,int startIndex,int endIndex){ + int newArraylen=endIndex-startIndex+1; + String[] array=new String[newArraylen]; + for (int i = 0; i < newArraylen; i++) { + array[i]=oldArray[i+startIndex]; + } + return array; + } + public void updateBom(String sx,String dcCh,String pl,String tlth,String ljbh){ + // 坡口:K/Y ;曲工序:D/Q ;打磨:E/F/G/H + if ("K,Y".indexOf(sx)>-1){ + dmBomService.update(new UpdateWrapper<DmBom>().set("pkbs","Y") + .eq("dcch",dcCh) + .eq("pl",pl) + .eq("tzbh",tlth) + .eq("ljbh",ljbh) + ); + } + if ("D,Q".indexOf(sx)>-1){ + dmBomService.update(new UpdateWrapper<DmBom>().set("qbs","Y") + .eq("dcch",dcCh) + .eq("pl",pl) + .eq("tzbh",tlth) + .eq("ljbh",ljbh) + ); + } + if ("E,F,G,H".indexOf(sx)>-1){ + dmBomService.update(new UpdateWrapper<DmBom>().set("dmbs","Y") + .eq("dcch",dcCh) + .eq("pl",pl) + .eq("tzbh",tlth) + .eq("ljbh",ljbh) + ); + } + } @PostMapping("/getListBom") public ResultBean getListBom(HttpServletRequest req, @RequestBody Map map) throws CustomException { List<BomVO> listBom = dmBomService.getListBom(req,map);