package com.zt.life.modules.mainPart.basicInfo.service; 
 | 
  
 | 
import com.alibaba.excel.EasyExcelFactory; 
 | 
import com.alibaba.excel.ExcelWriter; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.zt.common.constant.Constant; 
 | 
import com.zt.common.service.BaseService; 
 | 
import com.zt.common.utils.CacheUtils; 
 | 
import com.zt.common.utils.CommonUtils; 
 | 
import com.zt.common.utils.TreeUtils; 
 | 
import com.zt.common.utils.UUIDUtil; 
 | 
import com.zt.core.shiro.ImportUtil; 
 | 
import com.zt.life.export.service.DownloadService; 
 | 
import com.zt.life.modules.mainPart.basicInfo.dao.XhProductModelDao; 
 | 
import com.zt.life.modules.mainPart.basicInfo.dto.ProductDto; 
 | 
import com.zt.life.modules.mainPart.basicInfo.model.ParamData; 
 | 
import com.zt.life.modules.mainPart.basicInfo.model.ProductImg; 
 | 
import com.zt.life.modules.mainPart.basicInfo.model.XhProductModel; 
 | 
import com.zt.life.modules.mainPart.sysPictureBase.service.SysPictureBaseService; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
 | 
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; 
 | 
import org.apache.poi.ss.usermodel.Cell; 
 | 
import org.apache.poi.ss.usermodel.Row; 
 | 
import org.apache.poi.ss.usermodel.Sheet; 
 | 
import org.apache.poi.ss.usermodel.Workbook; 
 | 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import com.zt.common.db.query.QueryFilter; 
 | 
import org.springframework.web.multipart.MultipartFile; 
 | 
  
 | 
import javax.servlet.http.HttpServletRequest; 
 | 
import javax.servlet.http.HttpServletResponse; 
 | 
import java.io.*; 
 | 
import java.util.*; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
  
 | 
/** 
 | 
 * product_model 
 | 
 * 
 | 
 * @author zt generator 
 | 
 * @since 1.0.0 2024-02-29 
 | 
 */ 
 | 
@Service 
 | 
public class XhProductModelService extends BaseService<XhProductModelDao, XhProductModel> { 
 | 
    @Autowired 
 | 
    ParamDataService paramDataService; 
 | 
    @Autowired 
 | 
    SysPictureBaseService sysPictureBaseService; 
 | 
  
 | 
    /** 
 | 
     * 分页查询 
 | 
     * 
 | 
     * @param queryFilter 
 | 
     * @return 
 | 
     */ 
 | 
    public List<XhProductModel> page(QueryFilter queryFilter) { 
 | 
        List<XhProductModel> list = baseDao.getList(queryFilter.getQueryParams()); 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除 
 | 
     * 
 | 
     * @param ids 
 | 
     */ 
 | 
    public void delete(Long[] ids) { 
 | 
        super.deleteLogic(ids); 
 | 
    } 
 | 
  
 | 
    public List<XhProductModel> getAllTree(Boolean showXdy, Integer ztShow, Long productId) { 
 | 
        List<XhProductModel> productList = new ArrayList<>(); 
 | 
        if (showXdy) { 
 | 
            if (productId != null) { 
 | 
                productList = baseDao.selectList(new QueryWrapper<XhProductModel>().eq(Constant.TableColumn.IS_DELETE, 
 | 
                        Constant.Bool.NO).ne("product_type", 5).and(wrapper -> wrapper.eq("ship_id", productId).or().eq("id", productId)).orderByAsc(Constant.TableColumn.SORT)); 
 | 
            } else { 
 | 
                productList = baseDao.selectList(new QueryWrapper<XhProductModel>().eq(Constant.TableColumn.IS_DELETE, 
 | 
                        Constant.Bool.NO).ne("product_type", 5).orderByAsc(Constant.TableColumn.SORT)); 
 | 
            } 
 | 
        } else { 
 | 
            if (productId == null) { 
 | 
                if (ztShow == 1) { 
 | 
                    productList = baseDao.selectList(new QueryWrapper<XhProductModel>().eq(Constant.TableColumn.IS_DELETE, 
 | 
                            Constant.Bool.NO).lt("product_type", 5).ne("product_type", 10).orderByAsc(Constant.TableColumn.SORT)); 
 | 
                } else if (ztShow == 2) { 
 | 
                    productList = baseDao.selectList(new QueryWrapper<XhProductModel>().eq(Constant.TableColumn.IS_DELETE, 
 | 
                            Constant.Bool.NO).lt("product_type", 4).ne("product_type", 10).orderByAsc(Constant.TableColumn.SORT)); 
 | 
                } else if (ztShow == 3) { 
 | 
                    productList = baseDao.selectList(new QueryWrapper<XhProductModel>().eq(Constant.TableColumn.IS_DELETE, 
 | 
                            Constant.Bool.NO).lt("product_type", 3).ne("product_type", 10).orderByAsc(Constant.TableColumn.SORT)); 
 | 
                } else if (ztShow == 4) { 
 | 
                    productList = baseDao.selectList(new QueryWrapper<XhProductModel>().eq(Constant.TableColumn.IS_DELETE, 
 | 
                            Constant.Bool.NO).lt("product_type", 5).ne("product_type", 1).orderByAsc(Constant.TableColumn.SORT)); 
 | 
                } else if (ztShow == 5) { 
 | 
                    productList = baseDao.selectList(new QueryWrapper<XhProductModel>().eq(Constant.TableColumn.IS_DELETE, 
 | 
                            Constant.Bool.NO).gt("product_type", 1).orderByAsc(Constant.TableColumn.SORT)); 
 | 
                } 
 | 
            } else { 
 | 
                if (ztShow == 4) { 
 | 
                    productList = baseDao.selectList(new QueryWrapper<XhProductModel>().eq(Constant.TableColumn.IS_DELETE, 
 | 
                            Constant.Bool.NO).lt("product_type", 5).ne("product_type", 1).and(wrapper -> wrapper.eq("ship_id", productId).or().eq("id", productId)).orderByAsc(Constant.TableColumn.SORT)); 
 | 
                } else if (ztShow == 5) { 
 | 
                    List<XhProductModel> dbList = baseDao.getProductListByShip(productId, 2, 5); 
 | 
                    for (XhProductModel row : dbList) { 
 | 
                        int sameNum = row.getSameSbNum() == null ? 1 : row.getSameSbNum(); 
 | 
                        for (int i = 1; i <= sameNum; i++) { 
 | 
                            try { 
 | 
                                XhProductModel newRow = null; 
 | 
                                if (sameNum > 1) { 
 | 
                                    newRow = row.clone(); 
 | 
                                } 
 | 
                                else 
 | 
                                    newRow = row; 
 | 
                                if ("5".equals(newRow.getProductType())){ 
 | 
                                    newRow.setDeviceNo(i); 
 | 
                                    newRow.setDataId(row.getId().toString() + "-" + i); 
 | 
                                    if (i>1){ 
 | 
                                        newRow.setName(row.getName() + "-" + i); 
 | 
                                    } 
 | 
                                } 
 | 
                                else{ 
 | 
                                    newRow.setDeviceNo(0); 
 | 
                                    newRow.setDataId(row.getId().toString()); 
 | 
                                } 
 | 
                                productList.add(newRow); 
 | 
                            } catch (CloneNotSupportedException e) { 
 | 
                                e.printStackTrace(); 
 | 
                            } 
 | 
                        } 
 | 
                    } 
 | 
                    productList.sort(Comparator.comparing(XhProductModel::getSort, Comparator.naturalOrder()) 
 | 
                            .thenComparing(XhProductModel::getDeviceNo, Comparator.naturalOrder())); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return TreeUtils.build(productList); 
 | 
    } 
 | 
  
 | 
    public Integer getNo(Long pid, String productType) { 
 | 
        if (baseDao.getNo(pid, productType) == null) { 
 | 
            return 0; 
 | 
        } 
 | 
        return baseDao.getNo(pid, productType); 
 | 
    } 
 | 
  
 | 
    public List<XhProductModel> getProductList(Long shipId, Integer type) { 
 | 
        List<XhProductModel> ProductList = baseDao.getProductList(shipId, type); 
 | 
        return TreeUtils.build(ProductList); 
 | 
    } 
 | 
  
 | 
    public List<ProductImg> getProduct(Long productId) { 
 | 
        XhProductModel model = this.get(productId); 
 | 
        Long parentId = model.getPid(); 
 | 
        return baseDao.getProduct(productId, parentId); 
 | 
    } 
 | 
  
 | 
    public List<XhProductModel> getTaskProductList() { 
 | 
        return baseDao.getTaskProductList(); 
 | 
    } 
 | 
  
 | 
    public List<Map<String, Object>> importProductExcel(MultipartFile mutFile, String progressId, Long shipId) { 
 | 
        Map<Long, XhProductModel> imgMap = new HashMap<>(); 
 | 
        Date beginDate = new Date(); 
 | 
        List<Map<String, Object>> list = new ArrayList<>();//存储所有的导入状态 
 | 
        Map<String, Object> map;//存储每一行的状态 
 | 
        Integer sum = 0; // 总共的条数 
 | 
        Integer suc = 0; // 成功的条数 
 | 
        Integer err = 0; // 失败的条数 
 | 
        int row1 = 0; 
 | 
        Map<String, Object> errMap = new HashMap<>(); 
 | 
        Map<String, Integer> reliabType = new HashMap<>(); 
 | 
        reliabType.put("指数分布", 1); 
 | 
        reliabType.put("威布尔分布", 2); 
 | 
        reliabType.put("二项分布", 3); 
 | 
        Map<String, Integer> repairType = new HashMap<>(); 
 | 
        repairType.put("指数分布", 1); 
 | 
        repairType.put("威布尔分布", 2); 
 | 
        Map<String, Integer> isOrNot = new HashMap<>(); 
 | 
        isOrNot.put("是", 1); 
 | 
        isOrNot.put("否", 0); 
 | 
  
 | 
        try { 
 | 
            // 获取导入文件的后缀名 
 | 
            String fileName = mutFile.getOriginalFilename(); 
 | 
            Workbook workbook = null; 
 | 
            //解决excel版本问题 
 | 
            if (fileName != null && fileName.endsWith(".xls")) { 
 | 
                workbook = new HSSFWorkbook(mutFile.getInputStream()); 
 | 
            } else if (fileName != null && fileName.endsWith(".xlsx")) { 
 | 
                workbook = new XSSFWorkbook(mutFile.getInputStream()); 
 | 
            } 
 | 
            assert workbook != null; //断言如果[boolean表达式]为true,则程序继续执行。 如果为false,则程序抛出AssertionError,并终止执行。 
 | 
            int sheets = workbook.getNumberOfSheets(); 
 | 
  
 | 
            Long curXtId = null; 
 | 
            Long curFxtId = null; 
 | 
            Long curSbId; 
 | 
            String curXtName = ""; 
 | 
            String curFxtName = ""; 
 | 
  
 | 
            Map<String, XhProductModel> modelMap = new HashMap<>(); 
 | 
            List<XhProductModel> prductList = baseDao.getProductPath(shipId); 
 | 
  
 | 
            for (XhProductModel product : prductList) { 
 | 
                if (StringUtils.isNotBlank(product.getNamePath())) { 
 | 
                    modelMap.put(product.getNamePath(), product); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            boolean insertXt; 
 | 
            boolean insertFxt; 
 | 
            Boolean insertSb; 
 | 
            for (int i = 0; i < sheets; i++) { 
 | 
                Sheet sheet = workbook.getSheetAt(i); 
 | 
                int num = sheet.getLastRowNum(); // 一共有多少行 
 | 
                String sheetName = sheet.getSheetName(); //获取当前sheet名称 
 | 
                for (int j = 1; j <= num; j++) { 
 | 
                    insertXt = false; 
 | 
                    insertFxt = false; 
 | 
                    insertSb = false; 
 | 
                    CacheUtils.put(progressId, "speed", CommonUtils.getPercent(j, num)); 
 | 
                    CacheUtils.put(progressId, "msg", "共" + num + "行,已完成第" + j + "行"); 
 | 
  
 | 
                    row1 = j + 1; 
 | 
                    String pattern = "yyyy-MM-dd"; 
 | 
                    Row row = sheet.getRow(row1); 
 | 
                    String sort = com.zt.core.shiro.ImportUtil.getCellValue(row, 0, pattern); //序号 
 | 
  
 | 
                    String xt = com.zt.core.shiro.ImportUtil.getCellValue(row, 1, pattern); //系统 
 | 
                    String fxt = com.zt.core.shiro.ImportUtil.getCellValue(row, 2, pattern); 
 | 
                    String sb = com.zt.core.shiro.ImportUtil.getCellValue(row, 3, pattern); //设备 
 | 
                    String sameSbNumStr = com.zt.core.shiro.ImportUtil.getCellValue(row, 4, pattern); //同类设备数量 
 | 
                    String equipType = com.zt.core.shiro.ImportUtil.getCellValue(row, 5, pattern); //设备类型 
 | 
                    String reliabDistribType = com.zt.core.shiro.ImportUtil.getCellValue(row, 6, pattern); //可靠性分布类型 
 | 
                    String basicJoinCompute = com.zt.core.shiro.ImportUtil.getCellValue(row, 7, pattern); //参加计算 
 | 
                    String basicMtbfRegulateStr = com.zt.core.shiro.ImportUtil.getCellValue(row, 8, pattern); //mtbf 
 | 
                    String basicMtbfRegulSuccRateStr = com.zt.core.shiro.ImportUtil.getCellValue(row, 9, pattern); //成功率 
 | 
                    String basicMtbfOperatingRatioStr = com.zt.core.shiro.ImportUtil.getCellValue(row, 10, pattern); //运行比 
 | 
                    String taskMtbcfRegulateStr = com.zt.core.shiro.ImportUtil.getCellValue(row, 11, pattern); //mtbcf 
 | 
                    String taskMtbcfOtherParams2Str = com.zt.core.shiro.ImportUtil.getCellValue(row, 12, pattern); //mtbcf其他参数2 
 | 
                    String taskMtbcfOtherParams3Str = com.zt.core.shiro.ImportUtil.getCellValue(row, 13, pattern); //mtbcf其他参数3 
 | 
                    String taskMtbcfRegulSuccRateStr = com.zt.core.shiro.ImportUtil.getCellValue(row, 14, pattern); //mtbcf成功率 
 | 
                    String taskMtbcfOperatingRatioStr = com.zt.core.shiro.ImportUtil.getCellValue(row, 15, pattern); //mtbcf运行比 
 | 
                    String repairable = com.zt.core.shiro.ImportUtil.getCellValue(row, 16, pattern); //是否可维修 
 | 
                    String repairDistribType = com.zt.core.shiro.ImportUtil.getCellValue(row, 17, pattern); //维修发布类型 
 | 
                    String repairMttcrStr = com.zt.core.shiro.ImportUtil.getCellValue(row, 18, pattern); //mttcr 
 | 
                    String repairMttcrOtherParams2Str = com.zt.core.shiro.ImportUtil.getCellValue(row, 19, pattern); //mttcr其他参数2 
 | 
                    String repairMttcrOtherParams3Str = com.zt.core.shiro.ImportUtil.getCellValue(row, 20, pattern); //mttcr其他参数3 
 | 
  
 | 
                    Integer sameSbNum = StringUtils.isNotBlank(sameSbNumStr) ? Integer.parseInt(sameSbNumStr) : 1; 
 | 
                    Double basicMtbfRegulate = StringUtils.isNotBlank(basicMtbfRegulateStr) ? Double.valueOf(basicMtbfRegulateStr) : null; 
 | 
                    Double basicMtbfRegulSuccRate = StringUtils.isNotBlank(basicMtbfRegulSuccRateStr) ? Double.valueOf(basicMtbfRegulSuccRateStr) : null; 
 | 
                    Double basicMtbfOperatingRatio = StringUtils.isNotBlank(basicMtbfOperatingRatioStr) ? Double.parseDouble(basicMtbfOperatingRatioStr) : 1.0; 
 | 
                    Double taskMtbcfRegulate = StringUtils.isNotBlank(taskMtbcfRegulateStr) ? Double.parseDouble(taskMtbcfRegulateStr) : null; 
 | 
                    Double taskMtbcfOtherParams2 = StringUtils.isNotBlank(taskMtbcfOtherParams2Str) ? Double.parseDouble(taskMtbcfOtherParams2Str) : null; 
 | 
                    Double taskMtbcfOtherParams3 = StringUtils.isNotBlank(taskMtbcfOtherParams3Str) ? Double.parseDouble(taskMtbcfOtherParams3Str) : null; 
 | 
                    Double taskMtbcfRegulSuccRate = StringUtils.isNotBlank(taskMtbcfRegulSuccRateStr) ? Double.parseDouble(taskMtbcfRegulSuccRateStr) : null; 
 | 
                    Double taskMtbcfOperatingRatio = StringUtils.isNotBlank(taskMtbcfOperatingRatioStr) ? Double.parseDouble(taskMtbcfOperatingRatioStr) : 1.0; 
 | 
                    Double repairMttcr = StringUtils.isNotBlank(repairMttcrStr) ? Double.parseDouble(repairMttcrStr) : null; 
 | 
                    Double repairMttcrOtherParams2 = StringUtils.isNotBlank(repairMttcrOtherParams2Str) ? Double.parseDouble(repairMttcrOtherParams2Str) : null; 
 | 
                    Double repairMttcrOtherParams3 = StringUtils.isNotBlank(repairMttcrOtherParams3Str) ? Double.parseDouble(repairMttcrOtherParams3Str) : null; 
 | 
  
 | 
  
 | 
                    if (StringUtils.isBlank(sb)) 
 | 
                        continue; 
 | 
  
 | 
                    if (StringUtils.isBlank(xt)) { 
 | 
                        if (StringUtils.isBlank(curXtName)) 
 | 
                            continue; 
 | 
                        else 
 | 
                            xt = curXtName; 
 | 
                    } else { 
 | 
                        if (StringUtils.isBlank(curXtName) || !xt.equals(curXtName)) { 
 | 
                            curXtName = xt; 
 | 
                            if (modelMap.get(curXtName) == null) { 
 | 
                                curXtId = UUIDUtil.generateId(); 
 | 
                                insertXt = true; 
 | 
                            } else { 
 | 
                                curXtId = modelMap.get(curXtName).getId(); 
 | 
                            } 
 | 
                            curFxtId = null; 
 | 
                            curFxtName = ""; 
 | 
                        } 
 | 
                    } 
 | 
                    String fxtPath = ""; 
 | 
                    if (StringUtils.isNotBlank(fxt) && !fxt.equals(curFxtName)) { 
 | 
                        curFxtName = fxt; 
 | 
                        fxtPath = curXtName + "," + curFxtName; 
 | 
                        if (modelMap.get(fxtPath) == null) { 
 | 
                            curFxtId = UUIDUtil.generateId(); 
 | 
                            insertFxt = true; 
 | 
                        } else { 
 | 
                            curFxtId = modelMap.get(fxtPath).getId(); 
 | 
                        } 
 | 
                    } 
 | 
  
 | 
                    Long paramId = null; 
 | 
                    String sbPath = curXtName + "," + (StringUtils.isBlank(curFxtName) ? "" : curFxtName + ",") + sb; 
 | 
                    if (modelMap.get(sbPath) == null) { 
 | 
                        curSbId = UUIDUtil.generateId(); 
 | 
                        insertSb = true; 
 | 
                    } else { 
 | 
                        curSbId = modelMap.get(sbPath).getId(); 
 | 
                        paramId = modelMap.get(sbPath).getParamId(); 
 | 
                    } 
 | 
  
 | 
                    if (StringUtils.isEmpty(sb)) { 
 | 
                        com.zt.life.util.ImportUtil.updateErrMap(errMap, "没有填写设备名称", sheetName, row1); 
 | 
                        continue; 
 | 
                    } 
 | 
  
 | 
                    //导入型号产品结果库 
 | 
                    XhProductModel xhProductModel = new XhProductModel(); 
 | 
  
 | 
                    Long defultImg = null; 
 | 
                    xhProductModel.setShipId(shipId); 
 | 
  
 | 
                    //添加系统 
 | 
                    if (insertXt) { 
 | 
                        xhProductModel.setPid(shipId); 
 | 
                        xhProductModel.setId(curXtId); 
 | 
                        xhProductModel.setName(xt); 
 | 
                        xhProductModel.setProductType("3"); 
 | 
                        xhProductModel.setSort(Integer.valueOf(sort)); 
 | 
                        defultImg = sysPictureBaseService.getDefaultImg(3).getId(); 
 | 
                        xhProductModel.setOperatImg(defultImg); 
 | 
                        xhProductModel.setNamePath(curXtName); 
 | 
                        this.insert(xhProductModel); 
 | 
                        imgMap = (Map<Long, XhProductModel>) CacheUtils.get("sysImgCache", "sysImgCache"); 
 | 
                        imgMap.put(xhProductModel.getId(), xhProductModel); 
 | 
  
 | 
                        //导入预计参数 
 | 
                        ParamData itemEntity = new ParamData(); 
 | 
                        itemEntity.setShipId(shipId); 
 | 
                        itemEntity.setProductId(curXtId); 
 | 
                        itemEntity.setBasicUnitNum(1); 
 | 
                        paramDataService.insert(itemEntity); 
 | 
                    } 
 | 
  
 | 
  
 | 
                    if (insertFxt) { 
 | 
                        xhProductModel.setPid(curXtId); 
 | 
                        xhProductModel.setId(curFxtId); 
 | 
                        xhProductModel.setName(fxt); 
 | 
                        xhProductModel.setProductType("4"); 
 | 
                        xhProductModel.setSort(Integer.valueOf(sort)); 
 | 
                        defultImg = sysPictureBaseService.getDefaultImg(4).getId(); 
 | 
                        xhProductModel.setOperatImg(defultImg); 
 | 
                        xhProductModel.setNamePath(fxtPath); 
 | 
                        this.insert(xhProductModel); 
 | 
                        imgMap = (Map<Long, XhProductModel>) CacheUtils.get("sysImgCache", "sysImgCache"); 
 | 
                        imgMap.put(xhProductModel.getId(), xhProductModel); 
 | 
  
 | 
                        //导入预计参数 
 | 
                        ParamData itemEntity = new ParamData(); 
 | 
                        itemEntity.setShipId(shipId); 
 | 
                        itemEntity.setProductId(curFxtId); 
 | 
                        itemEntity.setBasicUnitNum(1); 
 | 
                        paramDataService.insert(itemEntity); 
 | 
                    } 
 | 
  
 | 
                    xhProductModel.setPid(curFxtId == null ? curXtId : curFxtId); 
 | 
                    xhProductModel.setId(curSbId); 
 | 
                    xhProductModel.setName(sb); 
 | 
                    xhProductModel.setSameSbNum(sameSbNum); 
 | 
                    xhProductModel.setEquipType(equipType); 
 | 
                    xhProductModel.setProductType("5"); 
 | 
                    xhProductModel.setSort(Integer.valueOf(sort)); 
 | 
                    defultImg = sysPictureBaseService.getDefaultImg(5).getId(); 
 | 
                    xhProductModel.setOperatImg(defultImg); 
 | 
                    xhProductModel.setNamePath(sbPath); 
 | 
                    if (insertSb) { 
 | 
                        this.insert(xhProductModel); 
 | 
                        imgMap = (Map<Long, XhProductModel>) CacheUtils.get("sysImgCache", "sysImgCache"); 
 | 
                        imgMap.put(xhProductModel.getId(), xhProductModel); 
 | 
                    } else { 
 | 
                        this.update(xhProductModel); 
 | 
                        imgMap = (Map<Long, XhProductModel>) CacheUtils.get("sysImgCache", "sysImgCache"); 
 | 
                        imgMap.put(xhProductModel.getId(), xhProductModel); 
 | 
                    } 
 | 
  
 | 
                    //导入预计参数 
 | 
                    ParamData itemEntity = new ParamData(); 
 | 
                    //绑定设备ID 
 | 
                    itemEntity.setShipId(shipId); 
 | 
                    itemEntity.setProductId(curSbId); 
 | 
                    itemEntity.setBasicUnitNum(sameSbNum); 
 | 
                    itemEntity.setReliabDistribType(reliabType.get(reliabDistribType)); 
 | 
                    itemEntity.setBasicJoinCompute(isOrNot.get(basicJoinCompute)); 
 | 
                    itemEntity.setBasicMtbfRegulate(basicMtbfRegulate); 
 | 
                    itemEntity.setBasicMtbfRegulSuccRate(basicMtbfRegulSuccRate); 
 | 
                    itemEntity.setBasicMtbfOperatingRatio(basicMtbfOperatingRatio); 
 | 
                    itemEntity.setTaskMtbcfRegulate(taskMtbcfRegulate); 
 | 
                    itemEntity.setTaskMtbcfOtherParams2(taskMtbcfOtherParams2); 
 | 
                    itemEntity.setTaskMtbcfOtherParams3(taskMtbcfOtherParams3); 
 | 
                    itemEntity.setTaskMtbcfRegulSuccRate(taskMtbcfRegulSuccRate); 
 | 
                    itemEntity.setTaskMtbcfOperatingRatio(taskMtbcfOperatingRatio); 
 | 
                    itemEntity.setRepairable(isOrNot.get(repairable)); 
 | 
                    itemEntity.setRepairDistribType(repairType.get(repairDistribType)); 
 | 
                    itemEntity.setRepairMttcr(repairMttcr); 
 | 
                    itemEntity.setRepairMttcrOtherParams2(repairMttcrOtherParams2); 
 | 
                    itemEntity.setRepairMttcrOtherParams3(repairMttcrOtherParams3); 
 | 
  
 | 
                    if (modelMap.get(sbPath) == null) { 
 | 
                        paramDataService.insert(itemEntity); 
 | 
                    } else { 
 | 
                        itemEntity.setId(paramId); 
 | 
                        paramDataService.update(itemEntity); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
            ImportUtil.updateErrMap(errMap, "导入异常" + e.getMessage(), "", row1); 
 | 
            //err++; 
 | 
        } 
 | 
  
 | 
        Date nowDate = new Date(); 
 | 
        String msg = "产品模型导入时间:" + CommonUtils.getDatePoor(nowDate, beginDate) + "\r\n"; 
 | 
        System.out.println(msg); 
 | 
        suc = sum - err; 
 | 
        map = new HashMap<>(); 
 | 
        map.put("sum", sum + ""); // 所有导入的条数 
 | 
        map.put("suc", suc + ""); // 成功的条数 
 | 
        map.put("err", err + ""); // 失败的条数 
 | 
        list.add(map); 
 | 
        list.add(errMap); 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
    public void deleteByShipId(Long shipId) { 
 | 
        baseDao.deleteByShipId(shipId); 
 | 
    } 
 | 
  
 | 
    private List<XhProductModel> getByShipId(Long shipId) { 
 | 
        return baseDao.getByShipId(shipId); 
 | 
    } 
 | 
  
 | 
    public void deleteByPid(Long id) { 
 | 
        baseDao.deleteByPid(id); 
 | 
    } 
 | 
  
 | 
    public Long[] getByPid(Long id) { 
 | 
        return baseDao.getByPid(id); 
 | 
    } 
 | 
  
 | 
    public void exportDataExcel(HttpServletRequest request, HttpServletResponse response, Long shipId, String name) { 
 | 
        Map<Integer, String> reliabType = new HashMap<>(); 
 | 
        reliabType.put(1, "指数分布"); 
 | 
        reliabType.put(3, "二项分布"); 
 | 
        reliabType.put(2, "威布尔分布"); 
 | 
        Map<Integer, String> repairType = new HashMap<>(); 
 | 
        repairType.put(1, "指数分布"); 
 | 
        repairType.put(2, "威布尔分布"); 
 | 
        Map<Integer, String> isOrNot = new HashMap<>(); 
 | 
        isOrNot.put(1, "是"); 
 | 
        isOrNot.put(0, "否"); 
 | 
  
 | 
        List<ProductDto> data = baseDao.getProductByShip(shipId); 
 | 
        data = TreeUtils.build(data); 
 | 
        List<ProductDto> List = new ArrayList<>(); 
 | 
        this.writeList(data, List); 
 | 
        // 读取模板文件 
 | 
        try (InputStream inputStream = getClass().getResourceAsStream("/产品结构树导出模板.xlsx")) { 
 | 
            Workbook workbook = new XSSFWorkbook(inputStream); 
 | 
            // 获取第一个工作表 
 | 
            Sheet sheet = workbook.getSheetAt(0); 
 | 
            List.sort((o1, o2) -> { 
 | 
                String[] parentList1 = o1.getNamePath().split(","); 
 | 
                String[] parentList2 = o2.getNamePath().split(","); 
 | 
                String xt1 = parentList1.length > 0 ? parentList1[0] : ""; 
 | 
                String xt2 = parentList2.length > 0 ? parentList2[0] : ""; 
 | 
  
 | 
                // 首先比较xt值 
 | 
                int xtCompare = xt1.compareTo(xt2); 
 | 
                if (xtCompare != 0) { 
 | 
                    return xtCompare; 
 | 
                } 
 | 
  
 | 
                // 如果xt相同,比较parentList的长度,确保parentList.length = 2的数据排在前面 
 | 
                return Integer.compare(parentList1.length, parentList2.length); 
 | 
            }); 
 | 
            int num = 0; 
 | 
            String xt = ""; 
 | 
            String fxt = ""; 
 | 
            String sb = ""; 
 | 
            for (int i = 0; i < List.size(); i++) { 
 | 
                num = num + 1; 
 | 
                String[] parentList = List.get(i).getNamePath().split(","); 
 | 
                Row row = sheet.createRow(sheet.getLastRowNum() + 1); // 创建新行 
 | 
                Cell cell = row.createCell(0); 
 | 
                cell.setCellValue(num); 
 | 
                if (!xt.equals(parentList[0])) { 
 | 
                    xt = parentList[0]; 
 | 
                    cell = row.createCell(1); 
 | 
                    cell.setCellValue(xt); 
 | 
                } 
 | 
                if (parentList.length > 2) { 
 | 
                    if (!fxt.equals(parentList[1])) { 
 | 
                        fxt = parentList[1]; 
 | 
                        cell = row.createCell(2); 
 | 
                        cell.setCellValue(fxt); 
 | 
                    } 
 | 
                    if (!sb.equals(parentList[2])) { 
 | 
                        sb = parentList[2]; 
 | 
                        cell = row.createCell(3); 
 | 
                        cell.setCellValue(sb); 
 | 
                    } 
 | 
                } else { 
 | 
                    if (!sb.equals(parentList[1])) { 
 | 
                        sb = parentList[1]; 
 | 
                        cell = row.createCell(3); 
 | 
                        cell.setCellValue(sb); 
 | 
                    } 
 | 
                } 
 | 
                cell = row.createCell(4); 
 | 
                cell.setCellValue(List.get(i).getSameSbNum()); 
 | 
  
 | 
                cell = row.createCell(5); 
 | 
                if (StringUtils.isNotBlank(List.get(i).getEquipType())) { 
 | 
                    cell.setCellValue(List.get(i).getEquipType()); 
 | 
                } 
 | 
                cell = row.createCell(6); 
 | 
                String type = reliabType.get(List.get(i).getReliabDistribType()); 
 | 
                cell.setCellValue(type); 
 | 
                cell = row.createCell(7); 
 | 
                String isNot = isOrNot.get(List.get(i).getBasicJoinCompute()); 
 | 
                cell.setCellValue(isNot); 
 | 
                cell = row.createCell(8); 
 | 
                if (List.get(i).getBasicMtbfRegulate() != null) { 
 | 
                    cell.setCellValue(List.get(i).getBasicMtbfRegulate()); 
 | 
                } 
 | 
                cell = row.createCell(9); 
 | 
                if (List.get(i).getBasicMtbfRegulSuccRate() != null) { 
 | 
                    cell.setCellValue(List.get(i).getBasicMtbfRegulSuccRate()); 
 | 
                } 
 | 
                cell = row.createCell(10); 
 | 
                if (List.get(i).getBasicMtbfOperatingRatio() != null) { 
 | 
                    cell.setCellValue(List.get(i).getBasicMtbfOperatingRatio()); 
 | 
                } else { 
 | 
                    cell.setCellValue(1.0); 
 | 
                } 
 | 
                cell = row.createCell(11); 
 | 
                if (List.get(i).getTaskMtbcfRegulate() != null) { 
 | 
                    cell.setCellValue(List.get(i).getTaskMtbcfRegulate()); 
 | 
                } 
 | 
                cell = row.createCell(12); 
 | 
                if (List.get(i).getTaskMtbcfOtherParams2() != null) { 
 | 
                    cell.setCellValue(List.get(i).getTaskMtbcfOtherParams2()); 
 | 
                } 
 | 
                cell = row.createCell(13); 
 | 
                if (List.get(i).getTaskMtbcfOtherParams3() != null) { 
 | 
                    cell.setCellValue(List.get(i).getTaskMtbcfOtherParams3()); 
 | 
                } 
 | 
                cell = row.createCell(14); 
 | 
                if (List.get(i).getTaskMtbcfRegulSuccRate() != null) { 
 | 
                    cell.setCellValue(List.get(i).getTaskMtbcfRegulSuccRate()); 
 | 
                } 
 | 
                cell = row.createCell(15); 
 | 
                if (List.get(i).getTaskMtbcfOperatingRatio() != null) { 
 | 
                    cell.setCellValue(List.get(i).getTaskMtbcfOperatingRatio()); 
 | 
                } else { 
 | 
                    cell.setCellValue(1.0); 
 | 
                } 
 | 
                cell = row.createCell(16); 
 | 
                if (List.get(i).getRepairable() != null) { 
 | 
                    isNot = isOrNot.get(List.get(i).getRepairable()); 
 | 
                    cell.setCellValue(isNot); 
 | 
                } 
 | 
                cell = row.createCell(17); 
 | 
                if (List.get(i).getRepairDistribType() != null) { 
 | 
                    type = repairType.get(List.get(i).getRepairDistribType()); 
 | 
                    cell.setCellValue(type); 
 | 
                } 
 | 
                cell = row.createCell(18); 
 | 
                if (List.get(i).getRepairMttcr() != null) { 
 | 
                    cell.setCellValue(List.get(i).getRepairMttcr()); 
 | 
                } 
 | 
                cell = row.createCell(19); 
 | 
                if (List.get(i).getRepairMttcrOtherParams2() != null) { 
 | 
                    cell.setCellValue(List.get(i).getRepairMttcrOtherParams2()); 
 | 
                } 
 | 
                cell = row.createCell(20); 
 | 
                if (List.get(i).getRepairMttcrOtherParams3() != null) { 
 | 
                    cell.setCellValue(List.get(i).getRepairMttcrOtherParams3()); 
 | 
                } 
 | 
            } 
 | 
            response.setContentType("application/octet-stream;charset=UTF-8"); 
 | 
            String encodedFilename = DownloadService.getNameEncoder(request, name + "_产品结构树.xlsx"); 
 | 
            response.addHeader("Content-Disposition", "attachment;filename=" + encodedFilename); 
 | 
            workbook.write(response.getOutputStream()); 
 | 
  
 | 
        } catch ( 
 | 
                IOException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    private void writeList(List<ProductDto> data, List<ProductDto> List) { 
 | 
        for (ProductDto dto : data) { 
 | 
            List.add(dto); 
 | 
            writeList(dto.getChildren(), List); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void refreshCache() { 
 | 
        List<XhProductModel> productList = baseDao.getProductListAll(); 
 | 
        Map<Long, XhProductModel> imgMap = new HashMap<>(); 
 | 
        for (XhProductModel product : productList) { 
 | 
            imgMap.put(product.getId(), product); 
 | 
        } 
 | 
        CacheUtils.put("sysImgCache", "sysImgCache", imgMap); 
 | 
    } 
 | 
  
 | 
    public void getImg(HttpServletResponse response, Long id) { 
 | 
        Map<Long, XhProductModel> imgMap = new HashMap<>(); 
 | 
        imgMap = (Map<Long, XhProductModel>) CacheUtils.get("sysImgCache", "sysImgCache"); 
 | 
        XhProductModel product = imgMap.get(id); 
 | 
        sysPictureBaseService.getSvgImage(response, product.getOperatImg()); 
 | 
    } 
 | 
  
 | 
    public void insertProduct(XhProductModel xhProductModel) { 
 | 
        Integer no = this.getNo(xhProductModel.getPid(), xhProductModel.getProductType()); 
 | 
        if (xhProductModel.getSort() == null || xhProductModel.getSort() < no) { 
 | 
            xhProductModel.setSort(no + 1); 
 | 
        } 
 | 
        if (xhProductModel.getProductType().equals("2")) { 
 | 
            Long id = UUIDUtil.generateId(); 
 | 
            xhProductModel.setId(id); 
 | 
            xhProductModel.setShipId(id); 
 | 
            this.insert(xhProductModel); 
 | 
  
 | 
            ParamData data = new ParamData(); 
 | 
            data.setShipId(id); 
 | 
            data.setProductId(id); 
 | 
  
 | 
            paramDataService.insert(data); 
 | 
        } else { 
 | 
            xhProductModel.setNamePath(xhProductModel.getNamePath() + "," + xhProductModel.getName()); 
 | 
            this.insert(xhProductModel); 
 | 
            ParamData data = new ParamData(); 
 | 
            data.setShipId(xhProductModel.getShipId()); 
 | 
            data.setProductId(xhProductModel.getId()); 
 | 
            paramDataService.insert(data); 
 | 
        } 
 | 
        Map<Long, XhProductModel> imgMap = new HashMap<>(); 
 | 
        imgMap = (Map<Long, XhProductModel>) CacheUtils.get("sysImgCache", "sysImgCache"); 
 | 
        imgMap.put(xhProductModel.getId(), xhProductModel); 
 | 
    } 
 | 
  
 | 
    public void updateProduct(XhProductModel xhProductModel) { 
 | 
        XhProductModel oldXh = this.get(xhProductModel.getId()); 
 | 
        if (oldXh != null) { 
 | 
            if (!oldXh.getPid().equals(xhProductModel.getPid())) { 
 | 
                XhProductModel parentXh = this.get(xhProductModel.getPid()); 
 | 
                if (parentXh.getProductType().equals("3")) { 
 | 
                    xhProductModel.setNamePath(parentXh.getName() + "," + xhProductModel.getName()); 
 | 
                } else if (parentXh.getProductType().equals("4")) { 
 | 
                    xhProductModel.setNamePath(parentXh.getNamePath() + "," + xhProductModel.getName()); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        this.update(xhProductModel); 
 | 
        Map<Long, XhProductModel> imgMap = new HashMap<>(); 
 | 
        imgMap = (Map<Long, XhProductModel>) CacheUtils.get("sysImgCache", "sysImgCache"); 
 | 
        imgMap.put(xhProductModel.getId(), xhProductModel); 
 | 
    } 
 | 
} 
 |