业务实现有如下几点:
1.解析Excel;
2.提示异常行;
3.提示多行重复数据;
代码解析:(仅供参考)
// TODO Auto-generated method stub
JSONObject json = new JSONObject();
response.setCharacterEncoding("utf-8");
SystemUser user = (SystemUser)request.getSession().getAttribute(Constants.SESSION_TRAIN_ADMIN_USER);
int insertNum=0;//记录成功插入多少条记录
int nullNum=0;//记录空行记录
try{
Integer result =0;
//获取年度
String yearId = request.getParameter("yearId");
//机构
String orgId = request.getParameter("orgId");
//省id
String provinceId = request.getParameter("provinceId");
//年度值
String yearName = request.getParameter("yearName");
/**
* 获取级别
*/
String unitLevel = request.getParameter("unitLevel");
StringBuffer bufferExce = new StringBuffer();
MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest) request;
List<List<Object>> objList=new ArrayList<List<Object>>();
MultipartFile file= multipartRequest.getFile("upfile");
if(null!=file&&file.isEmpty()){
json.put("code", "1000");
json.put("msg", "导入失败,文件不存在!");
try {
throw new Exception("导入失败,文件不存在!");
} catch (Exception e) {
e.printStackTrace();
}
}
long size=file.getSize();
if(size>1*1024*1024){
json.put("code", "1000");
json.put("msg", "导入失败,文件大小不超过1M!");
return json.toString();
}
String uploadDir=request.getSession().getServletContext().getRealPath("/") + "/excelupload/";
File fileDir=new File(uploadDir);
if(!fileDir.exists())
fileDir.mkdir();
File newFile = new File(uploadDir + file.getOriginalFilename());
if (!newFile.exists()){
newFile.createNewFile();
}
byte[] b = new byte[2248000];
InputStream is = file.getInputStream();
FileOutputStream fos = new FileOutputStream(newFile);
int read = 0;
while (read != -1) {
read = is.read(b, 0, b.length);
if (read == -1) {
break;
}
fos.write(b, 0, read);
}
fos.flush();
fos.close();
is.close();
//首先对上传的Excel进行解析,进行数据检查
Workbook wb = null;
is = file.getInputStream();
String fileName = file.getOriginalFilename();
try{
if(fileName.contains(".xlsx")){
wb = new XSSFWorkbook(is);
} else {
wb = new HSSFWorkbook(is);
}
}catch(Exception e){
json.put("code", "1000");
json.put("message", "导入失败,请下载正确的导入模板!");
StrutsUtil.renderText(response, json.toString());
return null;
}
HashMap<String,Object> numPhone=new HashMap<String,Object>();//手机号
HashMap<String,String> mapPhone=new HashMap<String,String>();//手机号
HashMap<String,Object> tmapPhone=new HashMap<String,Object>();//手机号
HashMap<String,Object> tmapExcepPhone=new HashMap<String,Object>();//手机号
HashMap<String,Object> tmapRowNull=new HashMap<String,Object>();//记录空行
HashMap<String,Object> tmapLevel=new HashMap<String,Object>();//行政级别
List<Map<String, String>> tmapMaps = new ArrayList<Map<String, String>>();;//重复数据--省市区机构级别
Map<String,Object> tmapCriticalCareMedicine=new HashMap<String,Object>();//培训呼吸与危重症医学
Map<String,Object> tmapCardiovascularMedicine=new HashMap<String,Object>();//培训心血管内科学
Map<String,Object> tmapObstetricsAndGynecology =new HashMap<String,Object>();//培训妇产科学
Map<String,Object> tmapUltrasonicDiagnostics=new HashMap<String,Object>();//训超声诊断学
//省市区+机构名+级别 拼接--省+市+区+机构+级别
HashMap<String,String> tmapAll=new HashMap<String,String>();//区县
HashMap<String,String> mapAll=new HashMap<String,String>();//区县
String allMap = "";
List<ZxBase> baseList = new ArrayList<ZxBase>();//基地集合
List<ZxBaseYear> updateBaseYearList = new ArrayList<ZxBaseYear>();//基地年度集合
List<ZxBase> updateBaseList = new ArrayList<ZxBase>();//基地年度集合
int count=0;
Sheet sheet = wb.getSheetAt(0);
//读取图片
List<XSSFPictureData> pictures = (List<XSSFPictureData>) wb.getAllPictures();
int noPictures = pictures.size();
if (noPictures>0) {
json.put("code", "1000");
json.put("message", "上传文件中不应该包含图片,导入失败!");
throw new RuntimeException(json.toString());
}
int rowNum = getSheetRowLength(sheet);
if(rowNum>0){
int realNum = RealNums.RealNum(wb);//实际行数
if(realNum>1000){
int sumNum = realNum-2;
if(sumNum>1000){
json.put("code", "1000");
json.put("message", "导入失败,总行数不能超过1000行!");
throw new RuntimeException(json.toString());
}
}
}
for (int x = 0; x < 2; x++) {
String countent="";
String submitObj ="";
try {//只校验标题
countent = formatCell(sheet.getRow(x).getCell(0)).toString().trim();
//是否培训1
String oneObjName1 = formatCell(sheet.getRow(x).getCell(6)).toString().trim();
//是否培训2
String twoObjName2 = formatCell(sheet.getRow(x).getCell(7)).toString().trim();
//是否培训3
String threeObjName3 = formatCell(sheet.getRow(x).getCell(8)).toString().trim();
//是否培训4
String fourObjName4 = formatCell(sheet.getRow(x).getCell(9)).toString().trim();
if(!StringUtil.isBlank(oneObjName1)&&!StringUtil.isBlank(twoObjName2)&&!StringUtil.isBlank(threeObjName3)&&
!StringUtil.isBlank(fourObjName4)){
submitObj = oneObjName1+twoObjName2+threeObjName3+threeObjName3+fourObjName4;
}
if(!StringUtil.isBlank(countent)){
int status = zxBaseService.ImportExcelCommonService(Integer.valueOf(yearId),countent,x,submitObj,user.getProjectId());
if(status == 400){
json.put("code", "1000");
json.put("message", "上传文件与模板不匹配,请重新下载模板!");
StrutsUtil.renderText(response, json.toString());
return null;
}
}else{
json.put("code", "1000");
json.put("message", "上传失败!Excel信息为空无法导入!");
StrutsUtil.renderText(response, json.toString());
return null;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
json.put("code", "1000");
json.put("message", "上传失败!Excel信息为空无法导入!");
throw new RuntimeException(json.toString());
}
//获取第二行的第6、7、8、9的列值,是否和数据库中的培训对象一一对应
//是否培训呼吸与危重症医学
String isCriticalCareMedicine = formatCell(sheet.getRow(x).getCell(6)).toString().trim();
if(!StringUtil.isBlank(isCriticalCareMedicine)){
//截取第四位开始
ZxTrainObjectExample exampleC = new ZxTrainObjectExample();
com.ncme.guopei.model.ZxTrainObjectExample.Criteria criteriaC = exampleC.createCriteria();
criteriaC.andNameEqualTo(isCriticalCareMedicine.substring(4, isCriticalCareMedicine.length()));
if(user.getProjectId()!=null){
criteriaC.andProjectIdEqualTo(user.getProjectId());
}
List<ZxTrainObject> list = trainObjectService.selectByExample(exampleC);
if(list!=null && list.size()>0){
Integer id = list.get(0).getId();
tmapCriticalCareMedicine.put("careMedicine", id);
}
}
//是否培训心血管内科学
String isCardiovascularMedicine = formatCell(sheet.getRow(x).getCell(7)).toString().trim();
if(!StringUtil.isBlank(isCardiovascularMedicine)){
//tmapCardiovascularMedicine
ZxTrainObjectExample exampleM = new ZxTrainObjectExample();
com.ncme.guopei.model.ZxTrainObjectExample.Criteria criteriaM = exampleM.createCriteria();
criteriaM.andNameEqualTo(isCardiovascularMedicine.substring(4, isCardiovascularMedicine.length()));
if(user.getProjectId()!=null){
criteriaM.andProjectIdEqualTo(user.getProjectId());
}
List<ZxTrainObject> listCard = trainObjectService.selectByExample(exampleM);
if(listCard!=null && listCard.size()>0){
Integer id = listCard.get(0).getId();
tmapCardiovascularMedicine.put("cardiovascular", id);
}
}
//是否培训妇产科学
String isObstetricsAndGynecology = formatCell(sheet.getRow(x).getCell(8)).toString().trim();
if(!StringUtil.isBlank(isObstetricsAndGynecology)){
//tmapObstetricsAndGynecology
ZxTrainObjectExample exampleO = new ZxTrainObjectExample();
com.ncme.guopei.model.ZxTrainObjectExample.Criteria criteriaO = exampleO.createCriteria();
criteriaO.andNameEqualTo(isObstetricsAndGynecology.substring(4, isObstetricsAndGynecology.length()));
if(user.getProjectId()!=null){
criteriaO.andProjectIdEqualTo(user.getProjectId());
}
List<ZxTrainObject> listObs = trainObjectService.selectByExample(exampleO);
if(listObs!=null && listObs.size()>0){
Integer id = listObs.get(0).getId();
tmapObstetricsAndGynecology.put("obstetrics", id);
}
}
//是否培训超声诊断学
String isUltrasonicDiagnostics = formatCell(sheet.getRow(x).getCell(9)).toString().trim();
if(!StringUtil.isBlank(isUltrasonicDiagnostics)){
//tmapUltrasonicDiagnostics
ZxTrainObjectExample exampleU = new ZxTrainObjectExample();
com.ncme.guopei.model.ZxTrainObjectExample.Criteria criteriaU = exampleU.createCriteria();
criteriaU.andNameEqualTo(isUltrasonicDiagnostics.substring(4, isUltrasonicDiagnostics.length()));
if(user.getProjectId()!=null){
criteriaU.andProjectIdEqualTo(user.getProjectId());
}
List<ZxTrainObject> listUlt = trainObjectService.selectByExample(exampleU);
if(listUlt!=null && listUlt.size()>0){
Integer id = listUlt.get(0).getId();
tmapUltrasonicDiagnostics.put("ultrasonic", id);
}
}
}
String telphone = "";
int j = 2;//记录实际行
for (int i = 2; i < rowNum; i++) {
ZxBase base=new ZxBase();
StringBuffer trainObj = new StringBuffer();
if(sheet.getRow(i)==null){
continue;
}
String provinceName = formatCell(sheet.getRow(i).getCell(0)).toString().trim();
if(!StringUtil.isBlank(provinceName)){
provinceName = provinceName.replaceAll("\\s*", "");
}
//市
String cityName = formatCell(sheet.getRow(i).getCell(1)).toString().trim();
if(!StringUtil.isBlank(cityName)){
cityName = cityName.replaceAll("\\s*", "");
}
//区/县
String countyName = formatCell(sheet.getRow(i).getCell(2)).toString().trim();
if(!StringUtil.isBlank(countyName)){
countyName = countyName.replaceAll("\\s*", "");
}
//机构名称
String orgName = formatCell(sheet.getRow(i).getCell(3)).toString().trim();
if(!StringUtil.isBlank(orgName)){
orgName = orgName.replaceAll("\\s*", "");
}
//上级主管部门
String upUnitName = formatCell(sheet.getRow(i).getCell(4)).toString().trim();
if(!StringUtil.isBlank(upUnitName)){
upUnitName = upUnitName.replaceAll("\\s*", "");
}
//本单位级别
String Level = formatCell(sheet.getRow(i).getCell(5)).toString().trim();
if(!StringUtil.isBlank(Level)){
Level = Level.replaceAll("\\s*", "");
}
//是否培训呼吸与危重症医学
String isCriticalCareMedicine = formatCell(sheet.getRow(i).getCell(6)).toString().trim();
//是否培训心血管内科学
String isCardiovascularMedicine = formatCell(sheet.getRow(i).getCell(7)).toString().trim();
//是否培训妇产科学
String isObstetricsAndGynecology = formatCell(sheet.getRow(i).getCell(8)).toString().trim();
//是否培训超声诊断学
String isUltrasonicDiagnostics = formatCell(sheet.getRow(i).getCell(9)).toString().trim();
/******培训对象 end****************/
//拟培训人数
String trainNumber = formatCell(sheet.getRow(i).getCell(10)).toString().trim();
if(!StringUtil.isBlank(trainNumber)){
trainNumber = trainNumber.replaceAll("\\s*", "");
}
//联系人
String trainUser = formatCell(sheet.getRow(i).getCell(11)).toString().trim();
if(!StringUtil.isBlank(trainUser)){
trainUser = trainUser.replaceAll("\\s*", "");
}
//联系电话
String trainPhone = formatCell(sheet.getRow(i).getCell(12)).toString().trim();
if(!StringUtil.isBlank(trainPhone)){
trainPhone = trainPhone.replaceAll("\\s*", "");
}
//排除物理读行后,整行都为空的行
if("".equals(provinceName) && "".equals(cityName) && "".equals(countyName)
&& "".equals(orgName) && "".equals(upUnitName) && "".equals(Level) && "".equals(isCriticalCareMedicine)
&& "".equals(isCardiovascularMedicine) && "".equals(isObstetricsAndGynecology) && "".equals(isUltrasonicDiagnostics)
&& "".equals(trainNumber) && "".equals(trainUser) && "".equals(trainPhone)){
continue;
}else if("".equals(provinceName) || "".equals(cityName) || "".equals(countyName)
|| "".equals(orgName) || "".equals(upUnitName) || "".equals(Level) || "".equals(isCriticalCareMedicine)
|| "".equals(isCardiovascularMedicine) || "".equals(isObstetricsAndGynecology) || "".equals(isUltrasonicDiagnostics)
|| "".equals(trainNumber) || "".equals(trainUser) || "".equals(trainPhone)){//筛选出信息不全的所在行
//筛选出信息不全的所在行
i++;
bufferExce.append("第"+i+"行有信息为空无法导入!<br>");
continue;
}else{
/**
* -- 此else执行解决. 对读取的列值,进行校验,无异常保存到base实体类,封装到list<Base>中;有异常,记录多处错误,按提示返回到用户
* */
j++;
/**
*Excel解析从0开始,已控制从2(解析Excel的第三行)开始,
*发现在Excel中是从第2行开始,所以,这里的j代替i递增的虚数,j++,从实际行第三行开始
**/
//根据省名字,匹配省id
ExamPropVal propValPro=null;
List<ExamPropVal> prop = null;//市集合
ExamPropVal examCity = null;//市
List<ExamPropVal> propCount = null;//区县集合
ExamPropVal examCount = null;//区县
if(!StringUtil.isBlank(provinceName)){
Map<String, Object> mapProName = new HashMap<>();
mapProName.put("name", provinceName.trim());
mapProName.put("type", 20);
propValPro = examPropValService.getPropByName(mapProName);
if(propValPro==null){//异常
bufferExce.append("第"+j+"行有地区省信息错误,无法导入!<br>");
}else{
base.setProvinceName(propValPro.getName());
base.setProvinceId(propValPro.getId());
}
}
//根据市名字,匹配市id
if(!StringUtil.isBlank(cityName)){
ExamPropVal query = new ExamPropVal();
query.setName(cityName.trim());
if(propValPro!=null){
query.setId(propValPro.getId());
query.setType(21);//市级
prop = examPropValService.getNextLevelProp(query);
if(prop!=null&&prop.size()>0){
base.setCityName(prop.get(0).getName());
base.setCityId(prop.get(0).getId());
}else{
bufferExce.append("第"+j+"行有地区市信息错误,无法导入!<br>");
}
}else{
Map<String, Object> mapCitName = new HashMap<>();
mapCitName.put("name", cityName.trim());
mapCitName.put("type", 21);
examCity = examPropValService.getPropByName(mapCitName);
if(examCity!=null){//二次校验市
base.setCityName(examCity.getName());
base.setCityId(examCity.getId());
}else{//市信息错误
bufferExce.append("第"+j+"行有地区市信息错误,无法导入!<br>");
}
}
}
//根据区县名字,匹配区县的id
if(!StringUtil.isBlank(countyName)){
ExamPropVal queryCount = new ExamPropVal();
queryCount.setName(countyName.trim());//区县级
if(prop!=null&&prop.size()>0){
queryCount.setId(prop.get(0).getId());
queryCount.setType(22);//区县级
propCount = examPropValService.getNextLevelProp(queryCount);
if(propCount!=null&&propCount.size()>0){
base.setCountyName(propCount.get(0).getName());
base.setCountyId(propCount.get(0).getId());
}else{
bufferExce.append("第"+j+"行有地区区县信息错误,无法导入!<br>");
}
}else{
//bufferExce.append("第"+j+"行有地区区县信息错误,无法导入!<br>");
Map<String, Object> mapCountyName = new HashMap<>();
mapCountyName.put("name", countyName.trim());
mapCountyName.put("type", 22);
examCount = examPropValService.getPropByName(mapCountyName);
if(examCount!=null){//二次校验区县
base.setCountyName(examCount.getName());
base.setCountyId(examCount.getId());
}else{//市信息错误
bufferExce.append("第"+j+"行有地区区县信息错误,无法导入!<br>");
}
}
}
if(!StringUtil.isBlank(orgName)){
base.setOrgName(orgName);
}
//上级主管单位
if(!StringUtil.isBlank(upUnitName)){
ZxOrgExample orgExample = new ZxOrgExample();
orgExample.createCriteria().andNameEqualTo(upUnitName).andProjectIdEqualTo(user.getProjectId());
List<ZxOrg> orgList = zxOrgService.selectByExample(orgExample);
if(orgList!=null&&orgList.size()>0){
base.setOrgId(orgList.get(0).getId());//科教司加入上级单位
}else{
bufferExce.append("第"+j+"行有上级主管部门与模板不符,无法导入!<br>");
}
}
if(!StringUtil.isBlank(Level)){
//查询行政级别
ZxLevelExample example = new ZxLevelExample();
example.createCriteria().andNameEqualTo(Level).andProjectIdEqualTo(user.getProjectId());
List<ZxLevel> levels = zxlevelService.searchLevels(example);
if(!levels.isEmpty()){
for (ZxLevel zxLevel : levels) {
if(zxLevel.getName().equals(Level)){//excel模板中的单位级别与数据库级别相等
Level = String.valueOf(zxLevel.getSeq());
}else{
bufferExce.append("第"+j+"行有行政级别与模板不符,无法导入!<br>");//行政级别和数据库中没有一一对应的,记录错误行
}
}
if(isInteger(Level)){
//做一个判断
if (!StringUtil.isBlank(unitLevel)) {
Integer unitL = Integer.valueOf(unitLevel);//上级
Integer newlev = Integer.valueOf(Level);//excel中的级别
if(newlev>=unitL){//eq:下级大于上级时,
base.setUnitLevel(Integer.valueOf(Level));
}else{
bufferExce.append("第"+j+"行“本单位级别”超出您的管辖范围,无法导入!<br>");//行政级别和数据库中没有一一对应的,记录错误行
}
}
}
}else{
bufferExce.append("第"+j+"行有行政级别与模板不符,无法导入!<br>");//行政级别和数据库中没有一一对应的,记录错误行
}
}
/****培训对象begin***************/
if(!StringUtil.isBlank(isCriticalCareMedicine)){
if(isCriticalCareMedicine.contains("是")){//存在此培训对象
if(tmapCriticalCareMedicine!=null&&null!=tmapCriticalCareMedicine.get("careMedicine")){//培训对象得到id
trainObj.append(tmapCriticalCareMedicine.get("careMedicine")+",");
}
}
}
if(!StringUtil.isBlank(isCardiovascularMedicine)){
if(isCardiovascularMedicine.contains("是")){//存在此培训对象
if(tmapCardiovascularMedicine!=null&&null!=tmapCardiovascularMedicine.get("cardiovascular")){//培训对象得到id
trainObj.append(tmapCardiovascularMedicine.get("cardiovascular")+",");
}
}
}
if(!StringUtil.isBlank(isObstetricsAndGynecology)){
if(isObstetricsAndGynecology.contains("是")){
if(tmapObstetricsAndGynecology!=null&&null!=tmapObstetricsAndGynecology.get("obstetrics")){//培训对象得到id
trainObj.append(tmapObstetricsAndGynecology.get("obstetrics")+",");
}
}
}
if(!StringUtil.isBlank(isUltrasonicDiagnostics)){
if(isUltrasonicDiagnostics.contains("是")){
if(tmapUltrasonicDiagnostics!=null&&null!=tmapUltrasonicDiagnostics.get("ultrasonic")){//培训对象得到id
trainObj.append(tmapUltrasonicDiagnostics.get("ultrasonic")+",");
}
}
}
/****培训对象end***************/
if(!StringUtil.isBlank(trainNumber)){//你培训人数
boolean isNum = isInteger(trainNumber);
if(isNum){//判断是否是数字
if(trainNumber.length()>5){
bufferExce.append("第"+j+"行拟培训人数超出5位数字,无法导入!<br>");
}else{
base.setTrainNumber(Integer.valueOf(trainNumber));
}
}else{//可能是数字
bufferExce.append("第"+j+"行有拟培训人数错误,无法导入!<br>");
}
}
if(!StringUtil.isBlank(trainUser)){//联系人
if(trainUser.length()>20){//联系人超过20个字,截取前20
String string = trainUser.substring(0, 20);
base.setTelUser(string);
}else{//不超过20个字
base.setTelUser(trainUser);
}
}
if(!StringUtil.isBlank(trainPhone)){//手机号
boolean isNum = isInteger(trainPhone);//判断手机号是否是数字
if(isNum){//是数字
boolean trueOrFalse = ValidateUtils.validPhoneNum("2", trainPhone);
if(trueOrFalse){//符合
if(trainPhone.length()>11){//联系人超过11个字,截取前11
String string = trainPhone.substring(0, 11);
base.setTelPhone(string);
}else{//不超过11个字
base.setTelPhone(trainPhone);
}
}else{
bufferExce.append("第"+j+"行有手机号错误,无法导入!<br>");
}
}else{//可能是汉字
bufferExce.append("第"+j+"行有手机号错误,无法导入!<br>");
}
}
//地区机构名级别拼接--省市区 机构名完全一致
if(!StringUtil.isBlank(provinceName)&&!StringUtil.isBlank(cityName)&&!StringUtil.isBlank(countyName)
&&!StringUtil.isBlank(orgName)
&&!StringUtil.isBlank(Level)){
String allStr=provinceName.trim()+cityName.trim()+countyName.trim()+orgName.trim()+Level.trim();
int newNum=i+1;
//失败原因:第XX行XX
if(mapAll.containsKey(allStr)){
//记住第一次出现
String lineNum=mapAll.get(allStr);//拿到先前保存的行号
//logger.info("----地区拿到行号----"+lineNum);
if(tmapAll.containsKey(allStr)){
allMap = provinceName.trim()+cityName.trim()+countyName.trim()+orgName.trim()+Level.trim();;//allMap = allStr 方便异常输入
String str = tmapAll.get(allStr);
tmapAll.put(allStr, str+"与第"+newNum+"行信息重复<br>");//更新后,显示效果:——》行重复:在第 2 ,3 , 5
logger.info("地区更新后,显示效果 "+str+","+newNum);
}else{
allMap = base.getProvinceName()+base.getCityName()+base.getCountyName()+base.getOrgName()+base.getUnitLevel();//allMap = allStr 方便异常输入
logger.info("地区最后显示效果 ---->重复:行数位于第 "+lineNum+","+newNum);
tmapAll.put(allStr, "第"+lineNum+"行与第"+newNum+"行信息重复<br>");//最后显示效果:——》行重复:在第 2 ,3
}
}
tmapMaps.add(tmapAll);
mapAll.put(allStr, newNum+"");//把i行的第column列的值与行号保存到map中
}
//保存培训对象
if(null!=trainObj && trainObj.length()>0){
String strObj = trainObj.toString();
if(!StringUtil.isBlank(strObj)){
String trainObject = strObj.substring(0,strObj.length()-1);
base.setTrainingObject(trainObject);
}
}
/**
* 重复的省市区,进行修改
*/
Map<String, Object> map = new HashMap<>();
map.put("provinceName", base.getProvinceName());//省
map.put("cityName", base.getCityName());//市
map.put("countyName", base.getCountyName());//区县
map.put("unitLevel", base.getUnitLevel());//级别
map.put("name", base.getOrgName());//名称
if(base.getOrgId()!=null){
map.put("orgId", base.getOrgId());//科教司模板存在 上级
}
map.put("projectId", user.getProjectId());//加入培训类型
List<ZxBase> zxSelectBaseList = zxBaseService.getZxBaseAll(map);//地区、名称、级别完全一致
if(!zxSelectBaseList.isEmpty()){//有重复的 地区、名称、级别完全一致 修改联系人和手机号
for (ZxBase zxSelectBase : zxSelectBaseList) {
if(zxSelectBase!=null){
ZxBase zxNewBase = new ZxBase();
ZxBaseYear zxNewBaseYear = new ZxBaseYear();
zxNewBase.setId(zxSelectBase.getId());//根据重复的id,修改手机号和用户名yearName
zxNewBaseYear.setBaseId(zxSelectBase.getId());//年度基地id
zxNewBase.setTelUser(base.getTelUser());
zxNewBase.setTelPhone(base.getTelPhone());
zxNewBase.setTrainNumber(base.getTrainNumber());//拟培训人数
zxNewBaseYear.setTrainNumber(base.getTrainNumber());//年度培训人数
//加入年度
zxNewBase.setOnYearId(Integer.valueOf(yearId));//年度id
zxNewBaseYear.setYearId(Integer.valueOf(yearId));//基地年度 年度id
if(!StringUtil.isBlank(yearName)){
zxNewBase.setYearName(Integer.valueOf(yearName));
zxNewBaseYear.setYearValue(Integer.valueOf(yearName));//基地年度值如:2018
}
if(!StringUtil.isBlank(base.getTrainingObject())){//存入培训对象
zxNewBase.setTrainingObject(base.getTrainingObject());
zxNewBaseYear.setTrainObject(base.getTrainingObject());
}
zxNewBase.setProjectId(user.getProjectId());
//基地导入,有重复的修改 importBase = 1 是
zxNewBase.setImportBase(1);
//此处批量修改
int success = zxBaseService.updateZxBase(zxNewBase);//修改基地
if(success>0){//大于0插入成功
insertNum=insertNum+1;
}else{
insertNum=insertNum+1;
}
/*updateBaseYearList.add(zxNewBaseYear);
updateBaseList.add(zxNewBase);*/
}
}
}else{//去掉重复的,添加不重复的基地
ZxOrgExample exampleQx=new ZxOrgExample();
Criteria criteriaQx=exampleQx.createCriteria();
//criteriaQx.andIdEqualTo(Integer.valueOf(orgId));
if(base.getUnitLevel()==1){//卫计委
criteriaQx.andIdEqualTo(base.getOrgId()).andProjectIdEqualTo(user.getProjectId());
}else if(base.getUnitLevel()==2){//省
criteriaQx.andIdEqualTo(base.getOrgId()).andProjectIdEqualTo(user.getProjectId());
}else if(base.getUnitLevel()==3){//市
criteriaQx.andIdEqualTo(base.getOrgId()).andProjectIdEqualTo(user.getProjectId());
}else if(base.getUnitLevel()==4){//区县
criteriaQx.andIdEqualTo(base.getOrgId()).andProjectIdEqualTo(user.getProjectId());
}else{//区县以下级别
criteriaQx.andIdEqualTo(base.getOrgId()).andProjectIdEqualTo(user.getProjectId());
}
List<ZxOrg> list = zxOrgService.selectByExample(exampleQx);
if(list!=null&&list.size()>0){
ZxOrg zxOrg = list.get(0);
String path = zxOrg.getPath();
base.setPath(path);//path上级的路径
}
baseList.add(base);
}
//继续循环
count++;
}
}
if(tmapPhone.size()>0&&tmapPhone!=null){//手机号错误
bufferExce.append(tmapPhone.get("phone"));
}
if(!StringUtil.isBlank(bufferExce.toString())){//把地区错误,空列集合在一起
String strException = bufferExce.toString();
json.put("code", "202");
json.put("msg", "上传失败!失败原因:<br>"+strException);
throw new RuntimeException(json.toString());
}
if(tmapMaps!=null&&tmapMaps.size()>0&&!tmapMaps.isEmpty()){
Set<String> tmapSet = new HashSet<String>();
for (Map<String,String> map:tmapMaps ) {
Set<Map.Entry<String, String>> entryseSet=map.entrySet();
for (Map.Entry<String, String> entry:entryseSet) {
String key = entry.getValue();
tmapSet.add(key);
}
}
json.put("code", "100102");
StringBuffer stringBuffer = new StringBuffer();
if(!tmapSet.isEmpty()){
for (String str : tmapSet) {
stringBuffer.append(str);
}
String string = stringBuffer.toString();
json.put("messageAll","上传失败!失败原因:<br>"+ string);//承接regionMap =regionStr 省市区的拼接字符串
throw new RuntimeException(json.toString());
}
}
if(tmapAll.size()>0&&tmapAll!=null){//省市区机构级别完全一样,提示重复
json.put("code", "100102");
json.put("messageAll","上传失败!失败原因:<br>"+ tmapAll.get(allMap));//承接regionMap =regionStr 省市区的拼接字符串
throw new RuntimeException(json.toString());
}
//批量修改基地部分信息
/*if(updateBaseYearList!=null && updateBaseYearList.size() > 0){
int i = zxBaseYearMapper.updateByBaseYearList(updateBaseYearList);
}
//批量修改基地年度部分信息
if(updateBaseList!=null && updateBaseList.size()>0 ){
int i = zxBaseService.updateByBaseList(updateBaseList);
if(i>0){//大于0插入成功
insertNum=insertNum+1;
}
}*/
if(baseList!=null && baseList.size()>0){
for (ZxBase zxBase : baseList) {
if(!StringUtil.isBlank(zxBase.getTrainingObject())){//存入培训对象
zxBase.setTrainingObject(zxBase.getTrainingObject());
}
if(!StringUtil.isBlank(yearId)){
zxBase.setOnYear(Integer.valueOf(yearId));
}
//插入基地信息
ZxBase insertBase = new ZxBase();
if(user!=null){
insertBase.setProjectId(user.getProjectId());
insertBase.setCreateUserid(user.getId().intValue());
}
if(!StringUtil.isBlank(zxBase.getTrainingObject())){
insertBase.setTrainingObject(zxBase.getTrainingObject());
}
insertBase.setType(5);//基地
if(!StringUtil.isBlank(yearName)){
insertBase.setYearName(Integer.valueOf(yearName));
}
//匹配省id
insertBase.setProvinceId(zxBase.getProvinceId());//加入省id
//匹配市id
insertBase.setCityId(zxBase.getCityId());//加入市id
//匹配区县的id
insertBase.setCountyId(zxBase.getCountyId());//加入区县id
insertBase.setUnitLevel(zxBase.getUnitLevel());//级别
insertBase.setTelUser(zxBase.getTelUser());//用户
insertBase.setTelPhone(zxBase.getTelPhone());//联系方式
insertBase.setTrainNumber(zxBase.getTrainNumber());//拟培训人数
insertBase.setName(zxBase.getOrgName());//机构名称
insertBase.setPath(zxBase.getPath());//加入path
if(null!=zxBase.getOnYear()){//加入年度
insertBase.setOnYearId(zxBase.getOnYear());//年度id
}
if(zxBase.getOrgId()!=null){
insertBase.setOrgId(zxBase.getOrgId());//科教司存在上级主管部门 机构id
}
if(!StringUtil.isBlank(yearId)){
insertBase.setYearId(Integer.valueOf(yearId));//加入年度-------------------需要完善
}
int i = zxBaseService.insertSelective(insertBase);//执行插入
if(i>0){//大于0插入成功
insertNum=insertNum+1;
}
}
}
}catch(RuntimeException e){
e.printStackTrace();
json.put("data", e.getMessage());
StrutsUtil.renderText(response, json.toString());
return null;
}
json.put("code",200);
json.put("msg", "上传成功,共上传"+ Integer.toString(insertNum)+"条信息!");
StrutsUtil.renderText(response, json.toString());
return null;
=====================================================
解析Excel的工具类:
/**
* 计算sheet的行数
* @param sheet
* Excel 工作表
* @return
* @return: int
*/
private int getSheetRowLength(Sheet sheet) {
int cntRow = sheet.getLastRowNum() + 1;
return cntRow;
}
/**
* 获取私有云服务器的文件
*
* Title: CountryStuAction.java
* Description:
*
* @return File
* @param request
* @param filePath
* @param fileName
* @return
* @author luobw
* @date 2018年8月2日
* @version 1.0
*/
public static File getNewFile(HttpServletRequest request, String filePath, String fileName) {
File newFile = null;
//首先check私有云上是否有该文件存在
String string = filePath.replaceAll("****************", "***********");
try{
URL url = new URL(string);
InputStream is=url.openStream();
//定义文件上传后的服务器目录
String uploadDir=request.getSession().getServletContext().getRealPath("/") + "/upload/";
File fileDir=new File(uploadDir);
if(!fileDir.exists())
fileDir.mkdir();
newFile = new File(uploadDir + fileName);
if (!newFile.exists()){
newFile.createNewFile();
}
byte[] b = new byte[2248000];
FileOutputStream fos = new FileOutputStream(newFile);
int read = 0;
while (read != -1) {
read = is.read(b, 0, b.length);
if (read == -1) {
break;
}
fos.write(b, 0, read);
}
fos.flush();
fos.close();
is.close();
}catch(Exception ex){
return null;
}
return newFile;
}
/**
* 处理单元格格式的方法:比较全面
* @param cell
* @return
*/
@SuppressWarnings("deprecation")
public static String formatCell(Cell cell) {
if (cell == null) {
return "";
}
//以下判断数据类型
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: //数字
//日期格式的处理
if (HSSFDateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
}else{
return String.valueOf(NumberToTextConverter.toText(cell.getNumericCellValue()));
}
//return String.valueOf(cell.getNumericCellValue());
//字符串
case HSSFCell.CELL_TYPE_STRING:
return cell.getStringCellValue();
// 公式
case HSSFCell.CELL_TYPE_FORMULA:
return cell.getCellFormula();
// 空白
case HSSFCell.CELL_TYPE_BLANK:
return "";
// 布尔取值
case HSSFCell.CELL_TYPE_BOOLEAN:
return cell.getBooleanCellValue() + "";
//错误类型
case HSSFCell.CELL_TYPE_ERROR:
return cell.getErrorCellValue() + "";
}
return "";
}
/**
* 判断字符串是否是数字
* @param str
* @return
*/
public static boolean isInteger(String str) {
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
return pattern.matcher(str).matches();
}