batchlook.jsp代碼:<form name="form1" action="uploadtoserver.jsp" method="post" ENCTYPE="multipart/form-data"> //一定要加上 ENCTYPE="multipart/form-data" 上傳excel<input type="file" name="TEST" SIZE="40" id="upfile"> <input type="submit" value="上傳"> </form>
uploadtoserver.jsp代碼<%@ page contentType="text/html;charset=gbk" %> <%@ page import="com.upload.jspsmart.upload.*"%> <jsp:useBean id="mySmartUpload" scope="page" class="com.upload.jspsmart.upload.SmartUpload" /> <%@page import="sms.batch.FilePreviewMsg"%> <%@page import="java.util.ArrayList"%> <%@page import="sms.batch.BatchLook"%> <%@page import="sms.batch.BatchLookDao"%> <%@page import="java.util.Date"%> <%@page import="java.util.List"%> <%@page import="java.text.SimpleDateFormat"%> <%@page import="java.io.PrintWriter"%> <% mySmartUpload.initialize(pageContext); //上傳文件初始化 mySmartUpload.upload();//上傳文件 String path=pageContext.getServletContext().getRealPath(""); path=path.substring(0,path.lastIndexOf("//")); path=path+"//data//sendfiles//";//上傳文件路徑 com.upload.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);//得到上傳的文件 String fileName=myFile.getFileName(); java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat("yyyyMM");//日期轉換,用來命名文件 String strDate = simpleDateFormat.format(new Date());//以日期命名文件 fileName = fileName.substring(fileName.lastIndexOf("."),fileName.length()); fileName=strDate+fileName; java.io.File file = new java.io.File(path);//在服務器上新建目錄 if(!file.isDirectory()){ file.mkdirs(); } path= path + fileName;//文件的完整路徑 if(file .exists()){ myFile.saveAs(path);//將上傳的文件保存到服務器 FilePreviewMsg filePreviewMsg = new FilePreviewMsg();//jxl對象對來解析excel ArrayList list = filePreviewMsg.getPreviewMsgList(path);//解析excel BatchLook batchLook;//每一行即一個看板對象 //刪除之前導入的 batchLook =(BatchLook)list.get(0); batchLookDao.save(batchLook)//數據庫操作,保存到數據庫 } %>
FilePreviewMsg.java代碼:package sms.batch; import java.io.*; import java.net.Authenticator; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Vector; import com.common.GlobalValueManager; import jxl.*; import jxl.format.Alignment; import jxl.format.Colour; import jxl.format.UnderlineStyle; import jxl.format.VerticalAlignment; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; /* * author lzf by 2010-10-21 * jxl讀取上傳excel內容 */ public class FilePreviewMsg { //讀取EXCEL public ArrayList getPreviewMsgList(String fileName) { System.out.println(fileName); ArrayList list = new ArrayList(); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); try { Workbook book = Workbook.getWorkbook(new File(fileName)); Sheet sheet = book.getSheet(0); // 獲得第一個工作表對象 int rows = sheet.getRows(); BatchLook batchLook ; for (int i = 0; i < rows - 1; i++) { Cell[] cell = sheet.getRow(i); batchLook = new BatchLook(); if (cell.length == 0) { continue; } if(sheet.getCell(0, 0).getContents().trim().contains("日期")){ batchLook.setBatch_look_date(sdf1.format(sdf.parse(sheet.getCell(0, i+1).getContents().trim()))); } if(sheet.getCell(1, 0).getContents().trim().contains("預測需求")){ batchLook.setBefor_need(Integer.parseInt(sheet.getCell(1, i+1).getContents().trim())); } if(sheet.getCell(2, 0).getContents().trim().contains("承接需求")){ batchLook.setContinue_need(Integer.parseInt(sheet.getCell(2, i+1).getContents().trim())); } if(sheet.getCell(3, 0).getContents().trim().contains("承接能力")){ batchLook.setContinue_ability(Integer.parseInt(sheet.getCell(3, i+1).getContents().trim())); } if(sheet.getCell(4, 0).getContents().trim().contains("剩餘資源")){ batchLook.setLeave_resource(Integer.parseInt(sheet.getCell(4, i+1).getContents().trim())); } list.add(batchLook); } } catch (BiffException e) { System.out.println("excel 不符合格式"); e.printStackTrace(); } catch (IOException e) { System.out.println("excel 不符合格式"); e.printStackTrace(); }catch(Exception ex){ ex.printStackTrace(); } return list; } public void exportExcel(String fileName,ArrayList content) { // String fileName = "D://myexcel2.xls" ; WritableWorkbook wwb; FileOutputStream fos; try { fos = new FileOutputStream(fileName); wwb = Workbook.createWorkbook(fos); WritableSheet ws = wwb.createSheet("sheet1",100); // 創建一個工作表 // 設置單元格的文字格式 WritableFont wf = new WritableFont(WritableFont.ARIAL,12,WritableFont.NO_BOLD,false, UnderlineStyle.NO_UNDERLINE,Colour.BLUE); WritableCellFormat wcf = new WritableCellFormat(wf); wcf.setVerticalAlignment(VerticalAlignment.CENTRE); wcf.setAlignment(Alignment.CENTRE); ArrayList list; for(int i=0;i<content.size();i++){ list = (ArrayList)content.get(i); if(i == 0) wcf = new WritableCellFormat(); for(int j=0;j<list.size();j++){ ws.addCell(new Label(j,i , list.get(j).toString(), wcf)); } } wwb.write(); wwb.close(); } catch (IOException e){ } catch (RowsExceededException e){ } catch (WriteException e){} } }
BatchLook.javapackage sms.batch; /** 記錄月度資源區 * @author lzf * */ public class BatchLook { private int batch_look_id; //羣發項目編號 private int ent_id;//企業ID private String batch_look_date;//日期 private int befor_need;//預測需求 private int continue_need;//承接需求 private int continue_ability;//承接能力 private int leave_resource ;//剩餘資源 private String resource_vlaue;//資源伐值 public String getResource_vlaue() { return resource_vlaue; } public String getResource_vlaue_color() { if (resource_vlaue == null || resource_vlaue.equals("")){ return "color : #FF9933"; }else if(Float.parseFloat(resource_vlaue) < 0){ return "color:red"; }else if( Float.parseFloat(resource_vlaue) >1000){ return "color:green"; }else if( Float.parseFloat(resource_vlaue) >=0 && Float.parseFloat(resource_vlaue)<100 ){ return "color : #FF9933"; }else{ return ""; } } public void setResource_vlaue(String resourceVlaue) { resource_vlaue = resourceVlaue; } public int getBatch_look_id() { return batch_look_id; } public void setBatch_look_id(int batchLookId) { batch_look_id = batchLookId; } public int getEnt_id() { return ent_id; } public void setEnt_id(int entId) { ent_id = entId; } public String getBatch_look_date() { return batch_look_date; } public void setBatch_look_date(String batchLookDate) { batch_look_date = batchLookDate; } public int getBefor_need() { return befor_need; } public void setBefor_need(int beforNeed) { befor_need = beforNeed; } public int getContinue_need() { return continue_need; } public void setContinue_need(int continueNeed) { continue_need = continueNeed; } public int getContinue_ability() { return continue_ability; } public void setContinue_ability(int continueAbility) { continue_ability = continueAbility; } public int getLeave_resource() { return leave_resource; } public void setLeave_resource(int leaveResource) { leave_resource = leaveResource; } }
docker網絡規劃 docker network create kafka-net --subnet 172.20.0.0/16 docker network ls zookeeper1(172.20.0.11 2184:2181
「Pygors系列」一句話導讀: MinGW-w64只有編譯器,MSYS2帶着更新環境,WSL2實用性比較高 歷史與淵源 Windows平臺 Linux平臺 二進制兼容 WSL2:運行Linux程序 Wine:運行Wi
「Pygors系列」一句話導讀: Python、Go、Rust、C程序跨平臺GUI框架研究。 一、問題 Pygors是什麼? Pygors是我自己創造的一個詞,就是Python、Go、Rust、C四種語言的合體。目的是爲了跨平臺GUI應
lsof: list open files 作用1:可查端口號被哪個進程佔用 比如我們跑自動化,經常會遇到端口號被佔用,無法啓動driver lsof -i :8081 lsof 輸出的結果含義: fd:文件描述符的數字,通常是一個
1. 添加用戶 在macOS中,可以通過命令行使用dscl(Directory Service command line utility)工具來添加用戶。以下是使用dscl添加用戶的步驟: 打開終端:可以通過在Spotlight搜索中輸
Flink的代碼編寫流程爲env->source->transform->sink,基本所有的代碼都是大致按照圖1的流程進行代碼編寫,當然中間也會有一些封裝之類的。 Flink代碼寫好後,它的任務調度執行圖按照生成順序分爲:邏輯流圖(
前言 前不久Redis宣佈從 Redis 7.4 開始,將原先比較寬鬆的 BSD 源碼使用協議修改爲 RSALv2 和 SSPLv1 協議,該協議變化意味着Redis不再開源。今天給大家分享一款完全開源(MIT協議)、免費的Redis替代性
接口 一、簡介 1.1 接口是什麼 接口是 前後端通信的橋樑 簡單理解:一個接口就是 服務中的一個路由規則 ,根據請求響應結果 接口的英文單詞是 API (Application Program Interface),所以有時也稱之爲 AP
記賬本
Java Solon 是什麼框架? Java “新的”應用開發框架。開放原子開源基金會,孵化項目。從零開始構建(非 java-ee 架構),有靈活的接口規範與開放生態。 追求: 更快、更小、更簡單 提倡: 剋制、簡潔、高效、開放、生態
什麼是Puppeteer Puppeteer 是一個由 Google 開發的 Node.js 庫,它提供了一組用於控制 Headless Chrome 的 API。 Headless Chrome 是 Chrome 瀏覽器的無界面版本,可以
neutron port-list |grep ipneutron port-update a7fbxxf6cc2 --allowed_address_pairs type=dict list=true ip_address=vipne
參考:https://apisix.apache.org/docs/apisix/plugins/authz-keycloak/ kc插件源碼梳理及原理說明 如果只是進行keycloak頒發的token進行校驗(簽名校驗和有效期校驗),
1、添加請求對應的數據源標籤 DynamicDataSourceContextHolder.push(ds); 2、添加數據源 3、動態添加數據源 private DynamicRoutingDataSource dataSo
至於任務調度這個基礎功能,重要性不言而喻,大多數業務系統都會用到,世面上有很多成熟的三方庫比如Quartz,Hangfire,Coravel 這裏我們不討論三方的庫如何使用 而是從0開始自己製作一個簡易的任務調度,如果只是到分鐘級別的粒度基