做了一个excel到入数据的功能,
导入后最后利用JSONDeserializer封装成json返回
但是放到正式后,过一段时间返回的参数的key都会带了一串序号
导致前端无法识别,关键本地测试都无法重现,
对应配置方法
private final JSONDeserializer<PlanBean> pbDeserializer = new JSONDeserializer<PlanBean>()
.use("tasks", ArrayList.class)
.use("tasks.values", MasterTaskBean.class)
.use("removedTasks", ArrayList.class)
.use("removedTasks.values", String.class)
.use("tasks.values.predecessorLink", ArrayList.class)
.use("tasks.values.predecessorLink.values", DependenceBean.class)
.use("tasks.values.submits", ArrayList.class)
.use("tasks.values.submits.values", SubmitBean.class)
.use("tasks.values.slaveTask", SlaveTaskBean.class)
.use("tasks.values.slaveTask.specAttr", ArrayList.class)
.use("tasks.values.slaveTask.specAttr.values", SpecAttrBean.class)
.use("tasks.values.children", ArrayList.class)
.use("tasks.values.children.values", MasterTaskBean.class)
.use("tasks.values.children.values.predecessorLink",ArrayList.class)
.use("tasks.values.children.values.predecessorLink.values",
DependenceBean.class)
.use("tasks.values.children.values.submits", ArrayList.class)
.use("tasks.values.children.values.submits.values",
SubmitBean.class)
.use("tasks.values.children.values.slaveTask", SlaveTaskBean.class)
.use("tasks.values.children.values.slaveTask.specAttr",
ArrayList.class)
.use("tasks.values.children.values.slaveTask.specAttr.values",
SpecAttrBean.class)
.use("tasks.values.parentTaskUID", new PidFactory())
.use("tasks.values.children.values.parentTaskUID", new PidFactory())
.use(Date.class, new DateTransformer("yyyy-MM-dd'T'HH:mm:ss"));
private final JSONSerializer pbSerializer = new JSONSerializer().exclude(
"*.class").transform(new DateTransformer("yyyy-MM-dd'T'HH:mm:ss"),
Date.class);
private final JSONSerializer dictSerializer = new JSONSerializer()
.exclude("*.class");
返回方法
@RequestMapping(value = "appendTaskByFile")
@ResponseBody
public String appendTaskByFile(@RequestParam CommonsMultipartFile exlFile, PlanBean plan, Model model,HttpServletRequest request,HttpServletResponse response)throws Exception {
Workbook wb=null;
try {
String message ="";
UserBean user = UserUtils.getLSUser();
String sysTab = SystemUtils.getAppProp("prodectVersion");
if (exlFile.isEmpty()) {
message = "不能上传空文件!";
return "{message:\""+message+"\",success:false}";
} else {
String lastTaskId=(String)request.getParameter("lastTaskId");
String planId=(String)request.getParameter("planId");
String fileType = exlFile.getFileItem().getName().toString();
if(!InputXlsUtil.isXlsx(fileType)){
message ="只能上传Excel文档文件!";
return "{message:\""+message+"\",success:false}";
}
if(InputXlsUtil.isExcel2003(fileType)){
wb = new HSSFWorkbook(exlFile.getInputStream());
}else{
wb = new XSSFWorkbook(exlFile.getInputStream());
}
Sheet sheet = wb.getSheetAt(0);
Row firstRow = sheet.getRow(1);
// 分析表头
if (firstRow == null) {
message ="文件格式错误,未找到表头!";
return "{message:\""+message+"\",success:false}";
}
//导入计划的内容
//String nextPlanId = editTraceService.getNextPlanId();
plan = new PlanBean();//packageBean(plan,nextPlanId,isFilter);
boolean weekendWork = true;//表示周末不工作
if("Y".equals(String.valueOf(plan.getWeekend()))){
weekendWork = false;//表示周末工作
}
Date sDate=new Date();
Date endDate=new Date();
//从第三行分数据
Iterator<Row> rit = sheet.rowIterator();
//从第三行开始
rit.next();
rit.next();
int rowNum = 2;
Row row = null;
MasterTaskBean taskBean;
SlaveTaskBean slaveTaskBean;
List<MasterTaskBean> taskBeanList = new ArrayList<MasterTaskBean>();
String curUserNo =UserUtils.getLSUser().getNo();
Map<String,String> guangxianMap = new HashMap<String,String>();
List<Map> guangxianList = mgLineService.findMap(user);
Map<String,ProjectBean> allProjectListMap =
projectService.getaAllProjectMap();//项目
for(Map m:guangxianList){
guangxianMap.put((String)m.get("value"), (String)m.get("label"));
}
Map<String,String> typemap=editTraceService.getTaskTypeMap();
//获取序号与Id对应关系
Map<String, String> mapNoToId = new HashMap<String, String>();
//存储父级任务对应的id
Map<String,String> parentsMap = new HashMap<String,String>();
String seed="";
int i=0;
if(lastTaskId!=null && !lastTaskId.equals("")){
String[] arr=lastTaskId.split("T");
seed=arr[0]+"T";
String c=arr[1];
i=Integer.parseInt(c);
}else{
seed= editTraceService.getNextTaskIdSeed();
}
for (; rit.hasNext(); rowNum++) {
i++;
taskBean = new MasterTaskBean();
slaveTaskBean = new SlaveTaskBean();
List<SubmitBean> submitList = new ArrayList<SubmitBean>();
row = (Row) rit.next();
if (isRowEmpty(row)) {
continue;
}
taskBean.setUID(seed+i);
message = editTraceService.checkExpExpert(row,rowNum,
taskBean,slaveTaskBean,submitList,user,mapNoToId,
weekendWork,typemap,parentsMap,allProjectListMap);
if(StringUtils.isNotBlank(message)){
return "{message:\""+message+"\",success:false}";
}
if(taskBean.getAssigner().equals(taskBean.getPrincipal())){
curUserNo = curUserNo+","+taskBean.getAssigner();
}else{
curUserNo =curUserNo+","+taskBean.getAssigner()+","
+taskBean.getPrincipal();
}
if(i==1){
sDate=taskBean.getStart();
endDate=taskBean.getFinish();
}
if(taskBean.getStart()!=null){
sDate = InputXlsUtil.getMinDate(taskBean.getStart(),sDate);
}
if(taskBean.getFinish()!=null){
endDate = InputXlsUtil.getMaxDate(taskBean.getFinish(),endDate);
}
slaveTaskBean.setPlanId(planId);
slaveTaskBean.setUID(seed+i);
taskBean.setPlanId(planId);
taskBean.setSlaveTask(slaveTaskBean);
taskBeanList.add(taskBean);
if("tmshszj".equals(sysTab)){
TaskProjectObject xmjg = new TaskProjectObject();
List<TaskProjectObject> xmjglist
= new ArrayList<TaskProjectObject>();
String xiangmujiegou = taskBean.getXmjgcodes();
if(xiangmujiegou==null){
xiangmujiegou = "";
}
String xmjgNames = "";
String[] xiangmujiegouArr = xiangmujiegou.split(",");
for (int j = 0; j < xiangmujiegouArr.length; j++) {
List<TreeObj> treeObjs =
projectService.getProjectJgTree(user,
taskBean.getProjectNo(), xiangmujiegouArr[j]);
if(treeObjs.size() == 1){
TreeObj obj = treeObjs.get(0);
String xmjgName = obj.getName();
if(xmjgName != null && xmjgName.length() > 4){
xmjgName = xmjgName.substring(0, xmjgName.indexOf("--"));
}
String level = obj.getLevel();
xmjg.setId(IDutils.genGlobal18digitStr());
xmjg.setObjectCode(obj.getDuixiangbianhao());
xmjg.setObjectName(xmjgName);
xmjgNames += xmjgName + ",";
if(level != null && !"".equals(level))
xmjg.setObjectLevel(new Integer(obj.getLevel()));
xmjglist.add(xmjg);
}
}
taskBean.setXmjg(xmjglist);
if(StringUtils.isNotBlank(xmjgNames)){
taskBean.setXmjgnames(xmjgNames.substring(0,xmjgNames.length() - 1));
}
taskBean.setSubmits(submitList);
}
}
String planTime = SysConfigUtils.getValues("planTime");
if(StringUtils.isBlank(planTime)){//计划时间 为了兼容旧计划导入新任务
planTime = "2018-01-01";
}
plan.setStartDate(DateUtils.parseDate(planTime));
plan.setFinishDate(endDate);
List<MasterTaskBean> beanList = null;
List<String> entryList = new ArrayList<String>();
if(message.equals("")){
beanList = editTraceService.getPacgageDate(taskBeanList, curUserNo,mapNoToId,entryList, user);
}
if(entryList!=null && entryList.size()>0){
message = entryList.get(0);
}
beanList = parentOnchildTaskList(beanList,1);
plan.setTasks(beanList);
if(message.length() > 0){
return "{message:\""+message+"\",success:false}";
}else{
return "{success:true,result:"+pbSerializer.deepSerialize(plan)+"}";
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(wb != null){
wb.close();
}
}
return null;
}
先记录