lxw
2022-08-19 209e2fceca9e408bf7863f6de98d2a036caec66d
产品下载
8个文件已修改
149 ■■■■ 已修改文件
src/main/java/com/whyc/controller/ProductBomController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/ProductController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/MaterialMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/ProductBomMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/Product.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/ProductBomService.java 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/MaterialMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ProductBomMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/ProductBomController.java
@@ -32,12 +32,12 @@
    public Response searchCadDrawer(@RequestBody ProductBom productBom, @RequestParam int pageCurr, @RequestParam int pageSize){
        return service.searchCadDrawer(productBom,pageCurr,pageSize);
    }
/*
    @ApiOperation("图纸文件打包下载")
    @PostMapping("downloadCadDrawer")
    public void downloadCadDrawer(HttpServletRequest req, HttpServletResponse resp,@RequestBody List<ProductBom> boms){
        service.downloadCadDrawer(req,resp,boms);
    }
    }*/
    @ApiOperation(value = "根据子件code获取最终的信息")
    @GetMapping("getBomBySubcode")
    public Response getBomBySubcode(@RequestParam String scode){
@@ -67,11 +67,11 @@
        return service.getSubByMaterialProduct(parentModel);
    }*/
    @ApiOperation(tags = "产品管理",value = "产品打包下载")
    /*@ApiOperation(tags = "产品管理",value = "产品打包下载")
    @GetMapping("downloadBom")
    public void downloadBom(HttpServletRequest req, HttpServletResponse resp,@RequestParam String parentModel){
         service.downloadBom(req,resp,parentModel);
    }
    }*/
    @ApiOperation(tags = "散装件管理",value = "查询所有产品中没有与指定散装件关联的子件")
    @GetMapping("getAllSubWithOutMaterial")
    public Response getAllSubWithOutMaterial(@RequestParam int MaterialId){
src/main/java/com/whyc/controller/ProductController.java
@@ -14,6 +14,9 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Api(tags = "产品管理")
@RestController
@RequestMapping("product")
@@ -47,9 +50,14 @@
    public Response getProductVersion( @RequestParam String parentModel, String customCode){
        return historyService.getProductVersion(parentModel,customCode);
    }
    @ApiOperation(value = "根据产品id查询子件及其关联的物料信息",notes = "8.17修改后使用")
    @ApiOperation(value = "根据产品id和版本查询子件及其关联的物料信息",notes = "8.17修改后使用")
    @GetMapping("getBomAndMaterial")
    public Response getBomAndMaterial( @RequestParam int productId){
        return bomService.getBomAndMaterial(productId);
    public Response getBomAndMaterial( @RequestParam int productId, @RequestParam int version){
        return bomService.getBomAndMaterial(productId,version);
    }
    @ApiOperation(value = "产品下载(产品id和版本)",notes = "8.17修改后使用")
    @GetMapping("downloadProduct")
    public void downloadProduct(HttpServletRequest req, HttpServletResponse resp, @RequestParam int productId, @RequestParam int version){
         bomService.downloadProduct(req,resp,productId,version);
    }
}
src/main/java/com/whyc/mapper/MaterialMapper.java
@@ -11,8 +11,8 @@
    List<Material> getMaterialWithoutSub(String parentModel, String subName,int version);
    //查询所有的散装件信息加设置了替换关系的子件信息
    List<Material> getAllMaterial(String category,String subCode,String subName,String subModel);
    //查询出存在替换关系得散装件
    List<ProductBom> getReplaceMaterial(String parentModel);
    /*//查询出存在替换关系得散装件
    List<ProductBom> getReplaceMaterial(String parentModel);*/
    //历史版本下载查询出存在替换关系得散装件
    List<ProductBomHistory> getReplaceHisMaterial(String parentModel,int version);
}
src/main/java/com/whyc/mapper/ProductBomMapper.java
@@ -21,5 +21,5 @@
    List<Material> getOldMaterial(String oldSubName);
    //根据产品id查询子件及其关联的物料信息
    List<ProductBom> getBomAndMaterial(int productId);
    List<ProductBom> getBomAndMaterial(int productId,int version);
}
src/main/java/com/whyc/pojo/Product.java
@@ -5,6 +5,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
@@ -19,8 +20,7 @@
 * @since 2022-08-17
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ToString
@TableName("tb_product")
@ApiModel(value="Product对象", description="产品记录")
public class Product implements Serializable {
src/main/java/com/whyc/service/ProductBomService.java
@@ -11,6 +11,7 @@
import com.whyc.dto.ZipUtils;
import com.whyc.mapper.MaterialMapper;
import com.whyc.mapper.ProductBomMapper;
import com.whyc.mapper.ProductMapper;
import com.whyc.pojo.*;
import com.whyc.util.ActionUtil;
import org.apache.poi.hssf.usermodel.*;
@@ -32,11 +33,16 @@
@Service
public class ProductBomService {
    @Autowired(required = false)
    private ProductBomMapper mapper;
    @Autowired(required = false)
    private MaterialMapper cponentMapper;
    @Autowired(required = false)
    private ProductMapper productMapper;
    @Autowired
    private DocLogService logService;
    //图纸分类检索
@@ -46,7 +52,7 @@
        PageInfo pageInfo=new PageInfo(list);
        return  new Response().setII(1,list.size()>0?true:false,pageInfo,"数据返回");
    }
    //图纸文件下载
   /* //图纸文件下载
    public void downloadCadDrawer(HttpServletRequest req, HttpServletResponse resp, List<ProductBom> boms) {
        HSSFWorkbook wb = new HSSFWorkbook();
        //字体格式-加粗
@@ -63,7 +69,7 @@
        String terminalIp=req.getRemoteAddr();
        logService.recordOperationLog(docUser.getId(),docUser.getName(), UserOperation.TYPE_DOWNLOAD.getType(),new Date(),terminalIp,opreationMsg,operationDetail);
    }
    }*/
    //根据子件code获取最终的信息
    public Response getBomBySubcode(String scode) {
        QueryWrapper wrapper=new QueryWrapper();
@@ -181,43 +187,38 @@
        PageInfo pageInfo=new PageInfo(list);
        return new Response().setII(1,list!=null?true:false,pageInfo,"返回数据");
    }*/
    //产品打包下载
    public  void downloadBom(HttpServletRequest req, HttpServletResponse resp, String parentModel) {
    //产品下载(产品id和版本)
    public  void downloadProduct(HttpServletRequest req, HttpServletResponse resp, int productId , int version) {
        HSSFWorkbook wb = new HSSFWorkbook();
        //字体格式-加粗
        HSSFCellStyle cellStyle = wb.createCellStyle();
        HSSFFont font = wb.createFont();
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        cellStyle.setFont(font);
        //读取产品信息
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("parent_model",parentModel);
        List<ProductBom> list=mapper.selectList(wrapper);
        //查询出存在替换关系得散装件
        List<ProductBom> replaceBoms=cponentMapper.getReplaceMaterial(parentModel);
        //两个集合合并才是最终的BOM
        if(list!=null&&list.size()>0){
            if(replaceBoms!=null&&replaceBoms.size()>0){
                replaceBoms.stream().forEach(replaceBom->{
                    list.add(replaceBom);
                });
            }
        }
        wrapper.eq("id",productId);
        wrapper.last("limit 1");
        Product product=productMapper.selectOne(wrapper);
        //读取产品的子件和关联的物料信息
        List<ProductBom> list=mapper.getBomAndMaterial(productId,version);
        //处理
        //生成excel并将dwg文件放在同一报下压缩
        creatBomExcel(req,resp,list,wb,"bom");
        creatBomExcel(req,resp,product,list,wb,"bom");
        //记录日志
        DocUser docUser= ActionUtil.getUser();
        String operationDetail="具体产品母料型号为:"+parentModel;
        String operationDetail="具体产品信息为:"+product.toString();
        String opreationMsg="执行了最新版产品下载操作";
        String terminalIp=req.getRemoteAddr();
        logService.recordOperationLog(docUser.getId(),docUser.getName(), UserOperation.TYPE_DOWNLOAD.getType(),new Date(),terminalIp,opreationMsg,operationDetail);
    }
    //根据产品信息创建excel表格并存放在指定目录
    public void creatBomExcel(HttpServletRequest req, HttpServletResponse resp,List list, HSSFWorkbook wb,String type){
    public void creatBomExcel(HttpServletRequest req, HttpServletResponse resp,Product product,List list, HSSFWorkbook wb,String type){
        String fileDirName = FileDirPath.getFileDirName();
        String rootFace="";
        String excelName="";
        //创建单个sheet
        HSSFSheet sheet = wb.createSheet("bom信息");
        HSSFSheet sheet = wb.createSheet("产品信息");
        sheet.setColumnWidth(1,5000);
        sheet.setColumnWidth(2,5000);
        sheet.setColumnWidth(3,5000);
@@ -247,49 +248,43 @@
        sheet.getRow(rownum).createCell(14).setCellValue("表面处理/物料详情");
        sheet.getRow(rownum).createCell(15).setCellValue("备注");
        sheet.getRow(rownum).createCell(16).setCellValue("图片");
        //构建excel名称和创建文件夹
        excelName=product.getParentCode()+"_"+product.getParentModel();
        String timeStr= ActionUtil.sdfwithFTP.format(new Date());
        if(type.equals("pic")){
            excelName=timeStr;
        }
        rootFace=fileDirName+File.separator+excelName;
        File destfile = new File(rootFace);
        if(!destfile.exists()) {
            destfile.mkdir();
        }
        //将选中的文件存入指定目录下打包下载
        if(list!=null&&list.size()>0){
            for (int i=0;i<list.size();i++) {
                ProductBom bom= (ProductBom) list.get(i);
                String dwgUrl=bom.getDwgUrl();
                if(i==0){
                    //excelName=bom.getParentCode()+"_"+bom.getParentModel();
                    String timeStr= ActionUtil.sdfwithFTP.format(new Date());
                    if(type.equals("pic")){
                        excelName=timeStr;
                    }
                    rootFace=fileDirName+File.separator+excelName;
                    File destfile = new File(rootFace);
                    if(!destfile.exists()) {
                        destfile.mkdir();
                    }
                }
                if((dwgUrl!=null)&&(!dwgUrl.isEmpty())){
                    File sourceFile=new File(fileDirName+ File.separator+dwgUrl);
                    copyFile(sourceFile,rootFace);
                }
                Row row=sheet.createRow(rownum+i+1);
                //row.setHeight((short)(1500));
                sheet.getRow(rownum+i+1).createCell(1).setCellValue(i+1);
                //sheet.getRow(rownum+i+1).createCell(2).setCellValue(bom.getParentCode());
                //sheet.getRow(rownum+i+1).createCell(3).setCellValue(bom.getParentName());
                //sheet.getRow(rownum+i+1).createCell(4).setCellValue(bom.getParentModel());
                sheet.getRow(rownum+i+1).createCell(5).setCellValue(bom.getCategory());
                sheet.getRow(rownum+i+1).createCell(6).setCellValue(bom.getSubCode());
                if(bom.getOldSubName()!=null&&!bom.getOldSubName().isEmpty()){
                    sheet.getRow(rownum+i+1).createCell(7).setCellValue(bom.getSubName()+"("+bom.getOldSubName()+")");
                }else{
                    sheet.getRow(rownum+i+1).createCell(7).setCellValue(bom.getSubName());
                }
                sheet.getRow(rownum+i+1).createCell(8).setCellValue(bom.getSubModel());
                sheet.getRow(rownum+i+1).createCell(9).setCellValue(bom.getUnit()==null?"":bom.getUnit());
                sheet.getRow(rownum+i+1).createCell(10).setCellValue(bom.getQuantity());
                sheet.getRow(rownum+i+1).createCell(11).setCellValue(bom.getProducer()==null?"":bom.getProducer());
                sheet.getRow(rownum+i+1).createCell(12).setCellValue(bom.getMaterial());
                sheet.getRow(rownum+i+1).createCell(13).setCellValue(bom.getThickness());
                sheet.getRow(rownum+i+1).createCell(14).setCellValue(bom.getSurfaceDetail());
                sheet.getRow(rownum+i+1).createCell(15).setCellValue(bom.getNotes());
                rownum=rownum+i+1;
                Row row=sheet.createRow(rownum);
                sheet.getRow(rownum).createCell(1).setCellValue(i+1);
                sheet.getRow(rownum).createCell(2).setCellValue(product.getParentCode());
                sheet.getRow(rownum).createCell(3).setCellValue(product.getParentName());
                sheet.getRow(rownum).createCell(4).setCellValue(product.getParentModel());
                sheet.getRow(rownum).createCell(5).setCellValue(bom.getCategory());
                sheet.getRow(rownum).createCell(6).setCellValue(bom.getSubCode());
                sheet.getRow(rownum).createCell(7).setCellValue(bom.getSubName());
                sheet.getRow(rownum).createCell(8).setCellValue(bom.getSubModel());
                sheet.getRow(rownum).createCell(9).setCellValue(bom.getUnit()==null?"":bom.getUnit());
                sheet.getRow(rownum).createCell(10).setCellValue(bom.getQuantity());
                sheet.getRow(rownum).createCell(11).setCellValue(bom.getProducer()==null?"":bom.getProducer());
                sheet.getRow(rownum).createCell(12).setCellValue(bom.getMaterial());
                sheet.getRow(rownum).createCell(13).setCellValue(bom.getThickness());
                sheet.getRow(rownum).createCell(14).setCellValue(bom.getSurfaceDetail());
                sheet.getRow(rownum).createCell(15).setCellValue(bom.getNotes());
                if((bom.getPictureUrl()!=null)&&(!bom.getPictureUrl().isEmpty())){
                    ByteArrayOutputStream byteArrayOut = null;
                    try {
@@ -297,7 +292,7 @@
                        BufferedImage bufferImg = ImageIO.read(new FileInputStream(new File(fileDirName+File.separator+bom.getPictureUrl())));
                        ImageIO.write(bufferImg, "png", byteArrayOut);
                        //anchor主要用于设置图片的属性
                        HSSFClientAnchor anchor = new HSSFClientAnchor(50, 20, 1000, 230,(short) 16, rownum+i+1, (short) 16, rownum+i+1);
                        HSSFClientAnchor anchor = new HSSFClientAnchor(50, 20, 1000, 230,(short) 16, rownum, (short) 16, rownum);
                        anchor.setAnchorType(ClientAnchor.MOVE_AND_RESIZE);
                        //插入图片
                        patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
@@ -387,8 +382,8 @@
        return new Response().setII(1,list.size()>0?true:false,list,"返回数据");
    }*/
    //根据产品id查询子件及其关联的物料信息
    public Response getBomAndMaterial(int productId) {
        List<ProductBom> list=mapper.getBomAndMaterial(productId);
    public Response getBomAndMaterial(int productId,int version) {
        List<ProductBom> list=mapper.getBomAndMaterial(productId,version);
        return new Response().setII(1,list.size()>0?true:false,list,"返回物料信息及关联物料");
    }
}
src/main/resources/mapper/MaterialMapper.xml
@@ -32,7 +32,7 @@
        <result property="createDate" column="create_date"></result>
        <result property="updateDate" column="update_date"></result>
        <result property="dwgUrl" column="dwg_url"></result>
        <collection property="cProductHistorys" javaType="java.util.ArrayList" ofType="com.whyc.pojo.MaterialProductHistory" column="{id=id}" select="selectMaterialProductHistory">
        <collection property="mProductHistorys" javaType="java.util.ArrayList" ofType="com.whyc.pojo.MaterialProductHistory" column="{id=id}" select="selectMaterialProductHistory">
        </collection>
    </resultMap>
@@ -88,7 +88,7 @@
        <result property="version" column="version"></result>
        <!--<result property="parentVersion" column="parent_version"></result>-->
    </resultMap>
    <select id="getReplaceMaterial" resultMap="replaceBom">
    <!--<select id="getReplaceMaterial" resultMap="replaceBom">
        select distinct tb_Material.*,tb_Material_product_history.sub_name as old_subName
             ,tb_product_bom.parent_model,tb_product_bom.parent_code,tb_product_bom.parent_name
        ,tb_Material_product_history.e_version as version
@@ -98,7 +98,7 @@
        and tb_product_bom.version=tb_Material_product_history.e_version
        and tb_Material_product_history.parent_model=#{parentModel}
        and tb_Material_product_history.link_type=2
    </select>
    </select>-->
    <resultMap id="replaceHisBom" type="productBomHistory">
        <!--<result property="parentCode" column="parent_code"></result>
        <result property="parentModel" column="parent_model"></result>
src/main/resources/mapper/ProductBomMapper.xml
@@ -141,6 +141,8 @@
        select distinct *,0 as replaceStatus from  db_doc.tb_product_bom
        <where>
            product_id = #{productId}
            and
            version = #{version}
        </where>
        order by id asc
    </select>