这次任务,是用接口将数据获取,在前端,级联带出,就是客户选了客户名称后,自动带出客户代码。
在流程结束的时候,在调用接口,将数据回传,并将附件上传到FTP服务器,并根据当天时间新建一个文件夹,并把失败的做一个标记,并每天定时再推一次。
经过两天的开发,已经完成,数据拿到,展示,回传,上传FTP。还缺的是定时任务和新建文件夹。
JS是一个很好玩的东西,我正在自学,很垃圾,经常被带我的嫌弃。哈哈
这次的代码我直接片段的进行讲解,希望对以后的我和大家有帮助。
$(document).ready(function(){
//select2是一个强大的插件
$("#companyCode").select2();
//这是获取输入框的对象
var companyCode = $('input[name="extendDataFormInfo.value(fd_34037e4e3069dc)"]').val();
if(companyCode){
var nodes = companyCode.split(",");
$("#companyCode").val(nodes).trigger('change');
}
//这里是当选择select2值的时候,触发事件。级联带出可以在这里完成。
$("#companyCode").on("change",function(e){
// e 的话就是一个对象 然后需要什么就 “e.参数” 形式 进行获取 console.log(e);
console.log(e);
});
});
这是自己定义的map数据结构,用来存放带过来的值。
// 键值对存放数据
function Map() {
this.keys = new Array();
this.data = new Object();
// 放入一个键值对
this.put = function(key, value) {
if (this.data[key] == null) {
this.keys.push(key);
}
this.data[key] = value;
};
// 根据key值取value
this.get = function(key) {
return this.data[key];
};
// 遍历Map
this.each = function(fn) {
if (typeof fn != 'function')
return;
var len = this.keys.length;
for (var i = 0; i < len; i++) {
var k = this.keys[i];
fn(k, this.data[k], i);
}
};
// 获取键值对数量
this.size = function() {
return this.keys.length;
};
// 判断Map是否为空
this.isEmpty = function() {
return this.keys.length == 0;
};
}
</script>
就这样,就可以把后端传来的值带出。
后端自己遇到一个坑就是,String.replace的时候,如果是replace(String oldString,String newString),如果old是没有的,则返回一个对此对象的引用,就是原来这个对象的引用。但是都有返回值,都有新的String对象,要String一个新的对象是接收。自己基础太差劲了,这里没意识到,但是发现了就记住了。以后不会犯了。
url = new URL(urlString);
HttpURLConnection urlConnect = (HttpURLConnection) url.openConnection();
StringBuffer buffer = new StringBuffer();
String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnect.getInputStream(), "UTF-8"));
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
这里是读数据的过程BufferedReader,是字符缓冲输入流,缓存是保存在内存中的,从内存中读数据是远快于从硬盘中的,BufferedReader里面的构造函数,也是先新建一个reader,每次读取完成后,再从后续中读取。是继承了reader.
在这里对JAVA的IO进行总结一下。
JAVA分为字节流和字符流,字节流的话是除了文本和XML以外的EXE和二进制的类的可以用字节流读取。
加了buffered的话是缓冲区,字节流和字符流都是有的,Stream的是字节,reader的是字符(write结尾的)。
到了FTP的使用
FTPClient ftpClient = new FTPClient();
/* FileInputStream fis =new FileInputStream(); */
String charset = LOCAL_CHARSET;
try {
ftpClient.connect(server);
ftpClient.login(uname, pwd);
/* fis = new FileInputStream(srcFile); */
// 设置上传目录
ftpClient.changeWorkingDirectory(foldName);
ftpClient.setBufferSize(1024);
ftpClient.enterLocalPassiveMode();
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {
// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
charset = "UTF-8";
}
ftpClient.setControlEncoding(charset);
fileName = new String(fileName.getBytes(charset), SERVER_CHARSET);
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
if (ftpClient.storeFile(fileName, in)) {
System.out.println("成功");
} else {
System.out.println("失败");
}
在HTTP接口使用过程中,
httpURLConnection.setRequestProperty("nretail-central-ability-customer-api-name",
"web.customerBaseInfo.getcustomerBaseInfo");
httpURLConnection.setRequestProperty("Content-type", "application/json");
这里是设置了报文头,这样的话,他那边的地址,一个地址就可以复用了。这个知识点挺好的。
大致的话,就是这些的,后面会进行补充的。
加油!