import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileNotFoundException;
import
java.io.IOException;
import
java.util.ArrayList;
import
java.util.Date;
import
java.util.List;
import
java.util.Scanner;
import
org.springframework.beans.factory.annotation.Autowired;
import
com.noahedu.core.model.PageIterator;
import
com.noahedu.core.plugin.mybatis.PageBounds;
@Component
(
“otaUpgradeService”
)
public
class
OtaUpgradeServiceImp
implements
OtaUpgradeService {
private
final
String OTAPATH = Constant.getProperty(
“application.ota.otapath”
);
@Autowired
private
OtaUpgradeDao otaUpgradeDao;
@Override
public
PageIterator<OtaUpgrade> queryOtaUpgrade(OtaUpgrade otaUpgrade,
int
pageNum,
int
pageSize) {
List<OtaUpgrade> list =
new
ArrayList<OtaUpgrade>();
int
allCount =
0
;
if
(
null
!= otaUpgrade) {
allCount = otaUpgradeDao.selectcount(otaUpgrade);
if
(allCount >
0
) {
list = otaUpgradeDao.queryPageList(otaUpgrade,
new
PageBounds(pageNum, pageSize));
}
}
return
new
PageIterator<OtaUpgrade>(allCount, list.toArray(
new
OtaUpgrade[
0
]), pageSize,
pageNum);
}
@Override
public
int
delete
(Long id) {
return
otaUpgradeDao.
delete
(id);
}
@Override
public
OtaUpgrade get(Long id) {
return
otaUpgradeDao.get(id);
}
@Override
public
int
modify(OtaUpgrade otaUpgrade) {
/*
* if(otaUpgrade.getState()!=0){ otaUpgradeDao.updateState(otaUpgrade); return
* otaUpgradeDao.update(otaUpgrade); }else{ return otaUpgradeDao.update(otaUpgrade); }
/
return
otaUpgradeDao.update(otaUpgrade);
}
@Override
public
String upload(String attrname, AdminUser user) {
String flag =
“”
;
List<String> errors =
new
ArrayList<String>();
String newpath = DateUtil.parseDateToString(
new
Date(),
“yyyy\MM”
);
String oldotapath = OTAPATH +
“/temp”
;
FileOperate fileOperate =
new
FileOperate();
File attrnameFile = fileOperate.getFileByName(oldotapath, attrname);
if
(attrnameFile !=
null
) {
StringBuffer strBuffer =
new
StringBuffer();
try
{
Scanner scan =
new
Scanner(attrnameFile);
while
(scan.hasNextLine()) {
String s = scan.nextLine();
strBuffer.append(s).append(
"\r\n"
);
}
scan.close();
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
String s = strBuffer.toString();
String[] ss = s.split(
"\r\n"
);
OtaUtils otaUtils =
new
OtaUtils();
Dictionary product =
new
Dictionary();
for
(String s1 : ss) {
OtaUpgrade otaUpgrade =
new
OtaUpgrade();
String attr = otaUtils.toStringHex2(s1);
String[] attrs = attr.split(
"\|"
);
if
(attrs.length >=
6
) {
if
(!checkMd5(attrs[
5
]) || otaUpgradeDao.selectOtaByPackname(attrs[
4
]) ==
0
) {
addOtaUpgradevalue(otaUpgrade, product, attrs);
File xpack = fileOperate.getFileByName(oldotapath, otaUpgrade.getPackname());
if
(xpack ==
null
) {
errors.add(
“没有找到对应的文件”
);
flag =
“没有找到对应的文件”
;
return
flag;
}
String newotapath = xpack.getAbsolutePath().replace(
“temp”
, newpath).replace(
"\"
,
“/”
);
String url = newotapath.substring(newotapath.indexOf(
“OTA”
));
otaUpgrade.setUrl(url);
otaUpgrade.setOpreaterid(user.getId());
try
{
FileInputStream fins =
new
FileInputStream(xpack.getAbsolutePath());
try
{
otaUpgrade.setFilesize((
long
) fins.available());
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
try
{
fins.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
if
(fileOperate.copyZip(xpack.getAbsolutePath(), newotapath)) {
otaUpgradeDao.insert(otaUpgrade);
}
}
else
{
errors.add(attrs[
4
] +
“已存在”
);
}
}
}
if
(errors.size() >
0
) {
return
flag = errors.toString();
}
fileOperate.copyFile(attrnameFile.getAbsolutePath(),
attrnameFile.getAbsolutePath().replace(
“temp”
, newpath).replace(
"\"
,
“/”
));
flag =
“上传成功”
;
}
else
{
flag =
“输入的属性文件不存在”
;
}
return
flag;
}
public
void
addOtaUpgradevalue(OtaUpgrade otaUpgrade, Dictionary product, String[] attrs) {
otaUpgrade.setProduct(product);
otaUpgrade.getProduct().setId(otaUpgradeDao.selectProductidByCode(attrs[
1
]));
otaUpgrade.setDversion(attrs[
2
]);
otaUpgrade.setSversion(attrs[
3
]);
otaUpgrade.setPackname(attrs[
4
]);
otaUpgrade.setMd5(attrs[
5
]);
}
public
Boolean checkMd5(String md5) {
if
(otaUpgradeDao.selectMd5(md5) >
0
) {
return
true
;
}
return
false
;
}
@Override
public
boolean
modifyBatchState(OtaBatch otabatch, Integer state, String summary) {
String otaidss = otabatch.getOtaids();
String[] otaids = otaidss.split(
","
);
for
(
int
i =
0
; i < otaids.length; i++) {
Long otaid = Long.valueOf(otaids[i]);
if
(otaUpgradeDao.modifyBatchState(otaid, state, summary) ==
0
) {
return
false
;
}
}
return
true
;
}
}
在以上代码的基础上添加一个MD5码校验并在不匹配的情况下给出提示:
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileNotFoundException;
import
java.io.IOException;
import
java.util.ArrayList;
import
java.util.Date;
import
java.util.List;
import
java.util.Scanner;
import
org.springframework.beans.factory.annotation.Autowired;
import
com.noahedu.core.model.PageIterator;
import
com.noahedu.core.plugin.mybatis.PageBounds;
@Component
(
“otaUpgradeService”
)
public
class
OtaUpgradeServiceImp
implements
OtaUpgradeService {
private
final
String OTAPATH = Constant.getProperty(
“application.ota.otapath”
);
@Autowired
private
OtaUpgradeDao otaUpgradeDao;
@Override
public
PageIterator<OtaUpgrade> queryOtaUpgrade(OtaUpgrade otaUpgrade,
int
pageNum,
int
pageSize) {
List<OtaUpgrade> list =
new
ArrayList<OtaUpgrade>();
int
allCount =
0
;
if
(
null
!= otaUpgrade) {
allCount = otaUpgradeDao.selectcount(otaUpgrade);
if
(allCount >
0
) {
list = otaUpgradeDao.queryPageList(otaUpgrade,
new
PageBounds(pageNum, pageSize));
}
}
return
new
PageIterator<OtaUpgrade>(allCount, list.toArray(
new
OtaUpgrade[
0
]), pageSize,
pageNum);
}
@Override
public
int
delete
(Long id) {
return
otaUpgradeDao.
delete
(id);
}
@Override
public
OtaUpgrade get(Long id) {
return
otaUpgradeDao.get(id);
}
@Override
public
int
modify(OtaUpgrade otaUpgrade) {
/
* if(otaUpgrade.getState()!=0){ otaUpgradeDao.updateState(otaUpgrade); return
* otaUpgradeDao.update(otaUpgrade); }else{ return otaUpgradeDao.update(otaUpgrade); }
/
return
otaUpgradeDao.update(otaUpgrade);
}
@Override
public
String upload(String attrname, AdminUser user) {
String flag =
“”
;
List<String> errors =
new
ArrayList<String>();
String newpath = DateUtil.parseDateToString(
new
Date(),
“yyyy\MM”
);
String oldotapath = OTAPATH +
“/temp”
;
FileOperate fileOperate =
new
FileOperate();
File attrnameFile = fileOperate.getFileByName(oldotapath, attrname);
if
(attrnameFile !=
null
) {
StringBuffer strBuffer =
new
StringBuffer();
try
{
Scanner scan =
new
Scanner(attrnameFile);
while
(scan.hasNextLine()) {
String s = scan.nextLine();
strBuffer.append(s).append(
"\r\n"
);
}
scan.close();
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
String s = strBuffer.toString();
String[] ss = s.split(
"\r\n"
);
OtaUtils otaUtils =
new
OtaUtils();
MD5UtilT md5Utilt =
new
MD5UtilT();
Dictionary product =
new
Dictionary();
for
(String s1 : ss) {
OtaUpgrade otaUpgrade =
new
OtaUpgrade();
String attr = otaUtils.toStringHex2(s1);
String[] attrs = attr.split(
"\|"
);
if
(attrs.length >=
6
) {
if
(!checkMd5(attrs[
5
]) || otaUpgradeDao.selectOtaByPackname(attrs[
4
]) ==
0
) {
addOtaUpgradevalue(otaUpgrade, product, attrs);
File xpack = fileOperate.getFileByName(oldotapath, otaUpgrade.getPackname());
boolean
matchMD5 = md5Utilt.getMD5(xpack).equals(attrs[
5
]);
if
(matchMD5) {
if
(xpack ==
null
) {
errors.add(
“没有找到对应的文件”
+ attrs[
4
]
);
flag =
“没有找到对应的文件”
+ attrs[
4
]
;
return
flag;
}
String newotapath =
xpack.getAbsolutePath().replace(
“temp”
, newpath).replace(
"\"
,
“/”
);
String url = newotapath.substring(newotapath.indexOf(
“OTA”
));
otaUpgrade.setUrl(url);
otaUpgrade.setOpreaterid(user.getId());
try
{
FileInputStream fins =
new
FileInputStream(xpack.getAbsolutePath());
try
{
otaUpgrade.setFilesize((
long
) fins.available());
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
try
{
fins.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
if
(fileOperate.copyZip(xpack.getAbsolutePath(), newotapath)) {
otaUpgradeDao.insert(otaUpgrade);
}
}
else
{
errors.add(attrs[
4
] +
" md5值不匹配:"
+ attrs[
5
]);
}
}
else
{
errors.add(attrs[
4
] +
“已存在”
);
}
}
}
if
(errors.size() >
0
) {
return
flag = errors.toString();
}
fileOperate.copyFile(attrnameFile.getAbsolutePath(),
attrnameFile.getAbsolutePath().replace(
“temp”
, newpath).replace(
"\"
,
“/”
));
flag =
“上传成功”
;
}
else
{
flag =
“输入的属性文件不存在”
;
}
return
flag;
}
public
void
addOtaUpgradevalue(OtaUpgrade otaUpgrade, Dictionary product, String[] attrs) {
otaUpgrade.setProduct(product);
otaUpgrade.getProduct().setId(otaUpgradeDao.selectProductidByCode(attrs[
1
]));
otaUpgrade.setDversion(attrs[
2
]);
otaUpgrade.setSversion(attrs[
3
]);
otaUpgrade.setPackname(attrs[
4
]);
otaUpgrade.setMd5(attrs[
5
]);
}
public
Boolean checkMd5(String md5) {
if
(otaUpgradeDao.selectMd5(md5) >
0
) {
return
true
;
}
return
false
;
}
@Override
public
boolean
modifyBatchState(OtaBatch otabatch, Integer state, String summary) {
String otaidss = otabatch.getOtaids();
String[] otaids = otaidss.split(
","
);
for
(
int
i =
0
; i < otaids.length; i++) {
Long otaid = Long.valueOf(otaids[i]);
if
(otaUpgradeDao.modifyBatchState(otaid, state, summary)
0
) {
return
false
;
}
}
return
true
;
}
}
以上代码中出现了,如下几个问题:
1、MD5UtilT 类中的getMD5方法为静态方法,所以这里不应该使用 new MD5UtileT()对其实例化(效率低)。
2、注意:当
md5Utilt.getMD5(xpack)这个String值被多次用到时,应该用一个String接受,不然多次调用此函数效率极低。
3、
md5Utilt.getMD5(xpack)在于attrs[5],使用equals方法进行比较时,可能出现大小写不一致的情况,因此此处使用equalsIgnoreCase()方法较为合适。
4、在使用xpack变量时不够严谨,如果 xpacknull,会引起一些列意想不到的错误,例如getMD5()方法接受xpack值时……
进行修改后代码如下
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileNotFoundException;
import
java.io.IOException;
import
java.util.ArrayList;
import
java.util.Date;
import
java.util.List;
import
java.util.Scanner;
import
org.springframework.beans.factory.annotation.Autowired;
import
com.noahedu.core.model.PageIterator;
import
com.noahedu.core.plugin.mybatis.PageBounds;
@Component
(
“otaUpgradeService”
)
public
class
OtaUpgradeServiceImp
implements
OtaUpgradeService {
private
final
String OTAPATH = Constant.getProperty(
“application.ota.otapath”
);
@Autowired
private
OtaUpgradeDao otaUpgradeDao;
@Override
public
PageIterator<OtaUpgrade> queryOtaUpgrade(OtaUpgrade otaUpgrade,
int
pageNum,
int
pageSize) {
List<OtaUpgrade> list =
new
ArrayList<OtaUpgrade>();
int
allCount =
0
;
if
(
null
!= otaUpgrade) {
allCount = otaUpgradeDao.selectcount(otaUpgrade);
if
(allCount >
0
) {
list = otaUpgradeDao.queryPageList(otaUpgrade,
new
PageBounds(pageNum, pageSize));
}
}
return
new
PageIterator<OtaUpgrade>(allCount, list.toArray(
new
OtaUpgrade[
0
]), pageSize,
pageNum);
}
@Override
public
int
delete
(Long id) {
return
otaUpgradeDao.
delete
(id);
}
@Override
public
OtaUpgrade get(Long id) {
return
otaUpgradeDao.get(id);
}
@Override
public
int
modify(OtaUpgrade otaUpgrade) {
/
* if(otaUpgrade.getState()!=0){ otaUpgradeDao.updateState(otaUpgrade); return
* otaUpgradeDao.update(otaUpgrade); }else{ return otaUpgradeDao.update(otaUpgrade); }
*/
return
otaUpgradeDao.update(otaUpgrade);
}
@Override
public
String upload(String attrname, AdminUser user) {
String flag =
“”
;
List<String> errors =
new
ArrayList<String>();
String newpath = DateUtil.parseDateToString(
new
Date(),
“yyyy\MM”
);
String oldotapath = OTAPATH +
“/temp”
;
FileOperate fileOperate =
new
FileOperate();
File attrnameFile = fileOperate.getFileByName(oldotapath, attrname);
if
(attrnameFile !=
null
) {
StringBuffer strBuffer =
new
StringBuffer();
try
{
Scanner scan =
new
Scanner(attrnameFile);
while
(scan.hasNextLine()) {
String s = scan.nextLine();
strBuffer.append(s).append(
"\r\n"
);
}
scan.close();
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
String s = strBuffer.toString();
String[] ss = s.split(
"\r\n"
);
OtaUtils otaUtils =
new
OtaUtils();
Dictionary product =
new
Dictionary();
for
(String s1 : ss) {
OtaUpgrade otaUpgrade =
new
OtaUpgrade();
String attr = otaUtils.toStringHex2(s1);
String[] attrs = attr.split(
"\|"
);
if
(attrs.length >=
6
) {
if
(!checkMd5(attrs[
5
]) || otaUpgradeDao.selectOtaByPackname(attrs[
4
]) ==
0
) {
addOtaUpgradevalue(otaUpgrade, product, attrs);
File xpack = fileOperate.getFileByName(oldotapath, otaUpgrade.getPackname());
if
(xpack ==
null
) {
errors.add(
“没有找到对应的文件”
+ attrs[
4
]);
flag =
“没有找到对应的文件”
+ attrs[
4
];
System.out.print(
“所需文件MD5值为”
+ attrs[
5
]);
return
flag;
}
else
{
String md5 = MD5UtilT.getMD5(xpack);
boolean
matchMD5 = md5 !=
null
&& md5.equalsIgnoreCase(attrs[
5
]);
if
(matchMD5) {
String newotapath =
xpack.getAbsolutePath().replace(
“temp”
, newpath).replace(
"\"
,
“/”
);
String url = newotapath.substring(newotapath.indexOf(
“OTA”
));
otaUpgrade.setUrl(url);
otaUpgrade.setOpreaterid(user.getId());
try
{
FileInputStream fins =
new
FileInputStream(xpack.getAbsolutePath());
try
{
otaUpgrade.setFilesize((
long
) fins.available());
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
try
{
fins.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
if
(fileOperate.copyZip(xpack.getAbsolutePath(), newotapath)) {
otaUpgradeDao.insert(otaUpgrade);
}
}
else
{
System.out.print(
“MD5码值不匹配,上传文件MD5值为”
+ md5);
errors.add(attrs[
4
] +
"
的MD5值为
:"
+ attrs[
5
]
+
“,上传文件MD5码值为”
+ md5
);
}
}
}
else
{
errors.add(attrs[
4
] +
“已存在”
);
}
}
}
if
(errors.size() >
0
) {
return
flag = errors.toString();
}
fileOperate.copyFile(attrnameFile.getAbsolutePath(),
attrnameFile.getAbsolutePath().replace(
“temp”
, newpath).replace(
"\"
,
“/”
));
flag =
“上传成功”
;
}
else
{
flag =
“输入的属性文件不存在”
;
}
return
flag;
}
public
void
addOtaUpgradevalue(OtaUpgrade otaUpgrade, Dictionary product, String[] attrs) {
otaUpgrade.setProduct(product);
otaUpgrade.getProduct().setId(otaUpgradeDao.selectProductidByCode(attrs[
1
]));
otaUpgrade.setDversion(attrs[
2
]);
otaUpgrade.setSversion(attrs[
3
]);
otaUpgrade.setPackname(attrs[
4
]);
otaUpgrade.setMd5(attrs[
5
]);
}
public
Boolean checkMd5(String md5) {
if
(otaUpgradeDao.selectMd5(md5) >
0
) {
return
true
;
}
return
false
;
}
@Override
public
boolean
modifyBatchState(OtaBatch otabatch, Integer state, String summary) {
String otaidss = otabatch.getOtaids();
String[] otaids = otaidss.split(
","
);
for
(
int
i =
0
; i < otaids.length; i++) {
Long otaid = Long.valueOf(otaids[i]);
if
(otaUpgradeDao.modifyBatchState(otaid, state, summary) ==
0
) {
return <span style="min-height: 9pt; font-family: “Lucida Console”; color: rgb(0, 0, 128