zoukankan      html  css  js  c++  java
  • kotlin导入 代码

        /**
         * 导入核算项目编号导入模板
         *
         * @param controller
         * @return
         * @throws Exception
         */
        @Throws(Exception::class)
        fun import(iwebReq: IwebReq,fileUuid:String): Map<String,Any>? {
            // 返回数据
            var resultMap =  HashMap<String, Any>();
            // 记录数据是否写表
            var isInsert = false
    
            StringUtils.notBlank(fileUuid)
            // 解析文件获取数据
            val fileInfo = this.getFileInfoByUuid(fileUuid)
            AssertUtils.notNull(fileInfo,"未获取核算项目表单id${fileInfo}")
            val excelSheetName = "核算项目编号导入模板"
            // 设置文件解析范围
            val itemcompanySheet = ImportFilePageInfo(1, 0, 1)
            val pageInfos = HashMap<String, ImportFilePageInfo>()
            pageInfos[excelSheetName] = itemcompanySheet
    
            // 获取文件数据
            val path = fileInfo.getStorePath()
    
            val tempFile = File(path)
            //判断文件是否存在
            if (!tempFile.exists()) {
                //创建文件父目录
                tempFile.getParentFile().mkdirs()
                //从oss上读取文件
                val AliReader = AliOssReaderImpl()
                Files.createParentDirs(FileUtils.getFile(fileInfo.getStorePath()))
                AliReader.read(fileInfo, NioUtils.DEFAULT_CHARSETS, object : IInputStreamCallback {
                    @Throws(Exception::class)
                    override fun executeInputStream(inputStream: InputStream, saveFileInfo: FileInfo) {
                        // 写入到本地文件
                        NioUtils.write2file(fileInfo.getStorePath(), inputStream, NioUtils.DEFAULT_CHARSETS)
                    }
                })
            }
            // 获取文件数据
            val excelMap = QhyfAbstractService().importFromExcel(fileInfo, pageInfos)
            if(excelMap.isEmpty()){
                throw RuntimeException()
            }
    
            // 获取项目公司数据
            val itemcompanyLsit = excelMap.get(excelSheetName) as List<Map<String, Any>>
            if (itemcompanyLsit.size == 0) {
                val exit: String? = null
                AssertUtils.notNull(exit!!, "不允许导入空表!")
            }
            //        AssertTools.hasItem(itemcompanyLsit);
            // 付款确认书编号
            var payId: String? = null
            // 核算项目编号
            var accountingItemNumber: String? = null
    
            var errorMsg = ""
            var msg = ""
            var errorFlag = false
            //创建表头
            val workbook = XSSFWorkbook()
            var savePath =QhyffsEvnironment.me().generatePath+File.separator
            val save = File(savePath)
            if (!save.exists() && !save.isDirectory()) {
                save.mkdirs()
            }
            val fileName = "核算项目编号导入模板.xls"
            savePath = savePath + File.separator + fileName
            val fout = FileOutputStream(savePath)
            // 创建检测结果sheet
            val sheet = workbook.createSheet(excelSheetName)
            // 设置冻结行列
            sheet.createFreezePane(0, 1, 0, 1)
            // 设置表头,第一行
            val headRow = sheet.createRow(0)
            val headArr = arrayOf("付款确认书编号", "核算项目编号", "错误提示")
    
            // 单元格
            var headCell: XSSFCell? = null
            val style = workbook.createCellStyle()
            // 表头样式设置
            style.borderBottom = XSSFCellStyle.BORDER_THIN
            style.borderLeft = XSSFCellStyle.BORDER_THIN
            style.borderTop = XSSFCellStyle.BORDER_THIN
            style.borderRight = XSSFCellStyle.BORDER_THIN
            // 设置背景色
            style.setFillForegroundColor(XSSFColor(Color(156, 195, 230)))
            style.fillPattern = XSSFCellStyle.SOLID_FOREGROUND
            // 列宽设置
            sheet.setColumnWidth(0, 20 * 256)
            sheet.setColumnWidth(1, 20 * 256)
            sheet.setColumnWidth(2, 30 * 256)
    
            // 写入表头
            for (i in headArr.indices) {
                sheet.autoSizeColumn(i)
                headCell = headRow.createCell(i)
                headCell!!.setCellValue(headArr[i])
                headCell.cellStyle = style
            }
    
    
            //设置单元格样式
            val cellStyle = workbook.createCellStyle()
            //边框
            cellStyle.borderBottom = XSSFCellStyle.BORDER_THIN
            cellStyle.borderLeft = XSSFCellStyle.BORDER_THIN
            cellStyle.borderTop = XSSFCellStyle.BORDER_THIN
            cellStyle.borderRight = XSSFCellStyle.BORDER_THIN
            //内容换行
            cellStyle.wrapText = true
            //垂直居中
            cellStyle.verticalAlignment = XSSFCellStyle.VERTICAL_CENTER
    
            // 设置单元格字体
            val font = workbook.createFont()
            // 字体样式
            font.fontName = "微软雅黑"
            // 字体大小
            font.fontHeightInPoints = 9.toShort()
            cellStyle.setFont(font)
    
            var cellPay: XSSFCell? = null
            var rowPay: XSSFRow? = null
    
            var rowNum = 1
            var num = 0
            for (itemcompanyData in itemcompanyLsit) {
                // 第一二列都为空时,跳过
                if (itemcompanyData["c1"] == null && itemcompanyData["c0"] == null) {
                    //如果付款确认书uuid和核算项目编号都为空则不过任何处理
                    num = num + 1
                    if (num == 199) {
                        val exit: String? = null
                        AssertUtils.notNull(exit!!, "不允许导入空表!")
                    }
                    continue
                } else {
                    // 核算项目编号和付款确认书编号同时不为空
                    if(itemcompanyData["c1"] != null && itemcompanyData["c0"] != null ){
                        // 去掉空格,回车后判断是否为空
                        accountingItemNumber = this.replaceBlank(itemcompanyData["c1"].toString())
                        if (StringUtils.notBlank(accountingItemNumber) && StringUtils.notBlank(this.replaceBlank(itemcompanyData["c0"].toString()))) {
                            // 判断付款确认书编号 是否存在
                            payId = this.isExistPayId(this.replaceBlank(itemcompanyData["c0"].toString()))
                            if(StringUtils.notBlank(payId)){
                                // 获取付款确认书信息表ID
                                val sql = String.format("SELECT id FROM biz_pay_comfirm_info  WHERE pay_id=? AND sys_status = 1 ")
                                val record = Db.findFirst(sql, payId)
                                // 获取payID
                                var id= record?.getStr("id")
                                //如果payID,存在,直接把核算项目编号 设置进去
                                if(id != null){
                                    var sql = """
                                                UPDATE
                                                biz_pay_comfirm_info
                                                 SET
                                                 accounting_item_number = ?
                                                WHERE
                                                id = ?
                                             """
                                    var dbp = DbPro.use(iwebReq.dsName)
                                    dbp.update(sql,accountingItemNumber,id)
                                    // 记录写表成功
                                    isInsert = true
                                }
                            }else {
                                // 付款确认书编号不存在
                                msg = "付款确认书编号不存在;"
                                errorMsg = errorMsg + msg
                            }
                        }else {
                            // 付款确认书编号不能为空字符串或者核算项目编号不能为空字符串
                            msg = "付款确认书编号不能为空字符串或者核算项目编号不能为空字符串"
                            errorMsg = errorMsg + msg
                        }
                    }
                    // 付款确认书编号为空
                    else if(itemcompanyData["c0"] == null){
                        // 付款确认书编号为空
                        msg = "付款确认书编号不能为空;"
                        errorMsg = errorMsg + msg
                    }
                    // 核算项目编号为空
                    else if(itemcompanyData["c1"]  == null){
                        // 核算项目编号为空
                        msg = "核算项目编号不能为空;"
                        errorMsg = errorMsg + msg
                    }
                }
                if (StringUtils.notBlank(errorMsg)) {
                    // 存在错误信息
                    errorFlag = true
                    rowPay = sheet.createRow(rowNum)
                    rowPay!!.setHeightInPoints(25f)
                    for (i in 0..2) {
                        cellPay = rowPay!!.createCell(i)
                        if (i == 2) {
                            cellPay!!.setCellValue(errorMsg)
                        } else {
                            if (itemcompanyData["c$i"] == null) {
                                cellPay!!.setCellValue("")
                            } else {
                                cellPay!!.setCellValue(itemcompanyData["c$i"].toString())
                            }
                        }
                        cellPay!!.setCellStyle(cellStyle)
                    }
                    rowNum++
                    errorMsg = ""
                }
            }
            var errFileUuid = ""
            try {
                if (errorFlag) {
                    workbook.write(fout)
                    fout.close()
                    // 保存文件信息到文件表
                    errFileUuid = StringUtils.randomUuid()
                    val file = File(savePath)
                    val savefileInfo = FileInfo()
                    savefileInfo.file = file
                    savefileInfo.originalFileName = fileName
                    val saveFile = SysFileUtils.fileInfo2SysFile(savefileInfo, "")
                    saveFile.set("uuid", errFileUuid)
                    val isTrue = saveFile.save()
                    if (isTrue) {
                        // 保存成功,文件上传云端
                        val upFileInfo = this.getFileInfoByUuid(errFileUuid)
                        SysFileService().upload2cloud(upFileInfo,true,iwebReq)
                        // 记录写表成功
                        isInsert = true
                    } else {
                        // 记录写表不成功
                        isInsert = false
                    }
                }
            } catch (e: IOException) {
                e.printStackTrace()
            }
            // 保存数据是否写表
            resultMap.put("isFindList", isInsert)
            // 保存生成错误文件ID
            resultMap.put("fileId", errFileUuid)
           return resultMap
        }
    
    
        /**
         * 去掉字符串中的空格、回车、换行符、制表符
         *
         * @param str
         * 字符串
         * @return 去除后的字符串
         * @throws Exception
         */
        @Throws(Exception::class)
        private fun replaceBlank(str: String): String {
            var str = str
            // 替换字符串中的空格、回车、换行符、制表符
            str = str.replace("\s*|	|
    |
    ".toRegex(), "")
            return str
        }
    
    
        /**
         * @return
         * @throws ActiveRecordException
         */
        @Throws(ActiveRecordException::class)
        private fun isExistPayId(payId: String): String? {
            val sql = String.format("SELECT pay_id FROM biz_pay_comfirm_info  WHERE pay_id=? AND sys_status = 1 ")
            val record = Db.findFirst(sql, payId)
            return record?.getStr("payId")
        }
  • 相关阅读:
    建设工程造价数据服务云平台(计价BIM)
    工程造价数据服务云平台(造价BIM)
    工程造价数据服务云平台(造价BIM)
    ie9下对象for..in..的bug
    JavaScript闭包
    JavaScript如何比较两个对象字面量是否一样(key 和 value都对比)
    JavaScript转码和编码
    JavaScript中正则编码
    Sizzle 官方API翻译
    JSONP跨域
  • 原文地址:https://www.cnblogs.com/xiaoniuniu886/p/10244335.html
Copyright © 2011-2022 走看看