导入excel解析 controller

package cn.com.nike.controller;

import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import cn.com.nike.dao.EntityDao;
import cn.com.nike.entity.ErrorInfo;
import cn.com.nike.service.MasterLineImportService;
import cn.com.nike.service.PdhDataService;
import cn.com.nike.util.SFTPChannel;
import cn.com.nike.util.Util;
import cn.com.nike.util.UtilFile;
import cn.com.nike.util.UtilProperties;
import cn.com.nike.util.Constants.ConstantsData;
import cn.com.nike.util.Constants.ConstantsResult;
import cn.com.nike.util.common.ResultModel;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

@Controller
@RequestMapping("/masterline")
public class MasterLineImportController implements Serializable {

/**
     *
     */
    private static final long serialVersionUID = -4251160483432383385L;

private static final Logger log = LoggerFactory.getLogger(MasterLineImportController.class);

@Resource
    private MasterLineImportService masterLineImportService;

@Resource
    private SFTPChannel sftpchannel;

@Resource
    private EntityDao entityDao;

@Resource
    private PdhDataService pdhDataService;

@RequestMapping(value = "/masterlineimport", method = RequestMethod.POST)
    @ResponseBody
    public ResultModel masterLineImport(@RequestParam MultipartFile[] files, @RequestParam String receiveYear,
            @RequestParam String receiveSeason, HttpServletRequest request) throws Exception {
        ResultModel resultModel = new ResultModel();
        ErrorInfo errorInfo = new ErrorInfo();
        Map<String, Object> allErrorData = new HashMap<>();
        String originalFilename = "";// 上传的文件的文件名
        String path = "";

// 校验上传文件上否为空
        if (null == files || files.length <= 0) {
            resultModel.setResultMsg(ConstantsResult.FILE_NULL_ERROR);
            return resultModel;
        }

for (MultipartFile file : files) {
            if (!file.isEmpty()) {
                // 获得文件后缀名
                String suffix = UtilFile.getSuffix(file);

// 检查文件格式是否正确 .xlsx(2007)
                if (!UtilFile.checkSuffix(suffix)) {
                    resultModel.setResultCode(ConstantsResult.SERVICE_ERROR_CODE);
                    resultModel.setResultMsg(ConstantsResult.CHECK_EXCEL_NOT_EXIST_MSG);
                    return resultModel;
                }
                // 获得文件源名
                originalFilename = UtilFile.getOriginalFilename(file);
                InputStream readStream = file.getInputStream();
                InputStream SFTPStream = file.getInputStream();

try {
                    // 1.读取文件信息
                    long start = System.currentTimeMillis();
                    Map<String, List<JSONObject>> list = masterLineImportService.readExcel(readStream, receiveYear,
                            receiveSeason, errorInfo, allErrorData);
                    long end = System.currentTimeMillis();
                    log.info("解析完毕,用时:" + (end - start) / 1000 + "秒");
                    log.debug("-------------" + list.get("updateToPdh"));
                    if (errorInfo.getDifferSeason() != null) {
                        allErrorData.put("difSeasonInColumn", errorInfo.getDifferSeason());
                    }
                    if (!allErrorData.isEmpty()) {
                        resultModel.setResultCode(ConstantsResult.DATA_ERROR_CODE);
                        resultModel.setResultData(allErrorData);
                        return resultModel;
                    } else {
                        QueryBuilder query = QueryBuilders.wildcardQuery("Style-color number", "*");
                        List pdhlist = new ArrayList<>();
                        if (entityDao.exindex(receiveYear + receiveSeason.toLowerCase() + "_pdh", "pdh")) {
                            pdhlist = entityDao.serarchNoPage(receiveYear + receiveSeason.toLowerCase() + "_pdh", "pdh",
                                    query);
                        }
                        log.debug("pdh数据========" + pdhlist.size());
                        String season = receiveSeason;
                        String totype = "pdh";
                        String indexML = receiveYear + ConstantsData.MASTERLINE_DB_NAME;
                        String typeMLdrop = season + ConstantsData.MASTERLINE_DROP_TABLE_NAME;
                        String typeMLall = season + ConstantsData.MASTERLINE_ALL_TABLE_NAME;
                        String toindex = receiveYear + season.toLowerCase() + "_" + "pdh";
                        String fromname = "Launch Date";
                        String toname = "Product First Offer date";
                        String pdhseasonyear = season + receiveYear;

// drop表的逻辑判断
                        log.debug(season + "====" + toindex + "===" + totype);
                        Map<String, List<JSONObject>> compareResult = masterLineImportService
                                .pdhCompare(list.get("drop"), pdhlist, season, toindex, totype);
                        log.debug("-------" + compareResult.get("judgeChangelog"));

if (compareResult.get("judgeChangelog") == null
                                || compareResult.get("judgeChangelog").isEmpty()) {
                            // 2.保存到数据库masterline all
                            if (!list.get("ALL").isEmpty()) {
                                Map<String, Object> mapN = masterLineImportService.updatedatebyname(list.get("ALL"),
                                        pdhlist, fromname, toindex, totype, toname, season);
                                masterLineImportService.createJson(indexML, typeMLall, list.get("ALL"));
                            }

log.debug("-----" + list.get("updateToPdh"));
                            // all表的lifecycle状态更新
                            List<Map<String, Object>> resultpdhskuall = new ArrayList<>();
                            JSONArray arrayallLif = JSONArray.fromObject(list.get("updateToPdh"));
                            if (!arrayallLif.isEmpty()) {
                                for (int i = 0; i < arrayallLif.size(); i++) {
                                    Map<String, Object> mapallRecieve = new HashMap<String, Object>();
                                    JSONObject jsonallLif = arrayallLif.getJSONObject(i);
                                    Iterator<?> it = jsonallLif.keys();
                                    while (it.hasNext()) {
                                        String key = String.valueOf(it.next());
                                        Object value = jsonallLif.get(key);
                                        mapallRecieve.put(key, value);
                                    }
                                    resultpdhskuall.add(mapallRecieve);
                                }

log.debug("----all 表要更新到pdh的值----" + resultpdhskuall);

pdhDataService.updateProductOfferingLifeCycleBySeasonAndSku(pdhseasonyear,
                                        resultpdhskuall);
                            }

if (!list.get("drop").isEmpty()) {

// 创建drop表到数据库中
                                masterLineImportService.createJson(indexML, typeMLdrop, compareResult.get("droplist"));

// drop表的lifecycle状态更新
                                List<Map<String, Object>> resultpdhskudrop = new ArrayList<>();
                                JSONArray arrayLif = JSONArray.fromObject(compareResult.get("lifecycle"));
                                if (!arrayLif.isEmpty()) {
                                    for (int i = 0; i < arrayLif.size(); i++) {
                                        Map<String, Object> mapRecieve = new HashMap<String, Object>();
                                        JSONObject jsonLif = arrayLif.getJSONObject(i);
                                        Iterator<?> it = jsonLif.keys();
                                        while (it.hasNext()) {
                                            String key = String.valueOf(it.next());
                                            Object value = jsonLif.get(key);
                                            mapRecieve.put(key, value);
                                        }
                                        resultpdhskudrop.add(mapRecieve);
                                    }

log.debug("----drop 表要更新到pdh的值----" + resultpdhskudrop);
                                    pdhDataService.updateProductOfferingLifeCycleBySeasonAndSku(pdhseasonyear,
                                            resultpdhskudrop);
                                }
                            }
                        } else {
                            // drop表中sku旧值在pdh中没有
                            allErrorData.put("oldSkuNoMatch", compareResult.get("judgeChangelog"));
                            resultModel.setResultCode(ConstantsResult.DATA_ERROR_CODE);
                            resultModel.setResultData(allErrorData);
                            return resultModel;
                        }
                        resultModel.setResultCode(ConstantsResult.SERVICE_SUCCESS_CODE);
                        resultModel.setResultMsg(ConstantsResult.SERVICE_SUCCESS_MSG);
                        return resultModel;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    log.error("==mastlinecontroller error==", e);
                    resultModel.setResultCode(ConstantsResult.SERVICE_ERROR_CODE);
                    resultModel.setResultMsg(e.getMessage());
                    return resultModel;
                }
            }
        }
        return resultModel;

}

@RequestMapping(value = "/masterlinetimejudge", method = RequestMethod.POST)
    @ResponseBody
    public ResultModel masterLineTimeJudge(@RequestParam String receiveYear, @RequestParam String receiveSeason,
            HttpServletRequest request) throws Exception {
        ResultModel resultModel = new ResultModel();
        log.debug("ddddddd===" + receiveSeason + receiveYear.substring(2, 4));
        List seasonDeadlinereceive = UtilProperties.getPropertyAsList("aoc-config.properties",
                receiveSeason + receiveYear.substring(2, 4));
        if (!seasonDeadlinereceive.isEmpty()) {
            Object seasonDeadline = seasonDeadlinereceive.get(0);
            Date deadline = Util.sdf.parse((String) seasonDeadline);
            if (new Date().getTime() > deadline.getTime()) {
                resultModel.setResultCode(ConstantsResult.SERVICE_SUCCESS_CODE);
                return resultModel;
            }
        }
        resultModel.setResultCode(ConstantsResult.SERVICE_ERROR_CODE);
        return resultModel;

}
}

时间: 2024-10-17 15:16:55

导入excel解析 controller的相关文章

jeecg3.5中的导入excel文件的使用及完善

jeecg中导入导出excel文件使用了jeecg团队自己开发的一个easypoi库,所以使用起来非常简单,以我项目中导入黑名单列表功能为例: 在实体中增加注解 先增加类的注解: @ExcelTarget("blackListEntity") public class BlackListEntity implements java.io.Serializable { 再增加字段注解: /**手机号码*/ @Excel(name="手机号码") private Lon

poi导入excel

Spring+SpringMVC+Maven+MyBatis+Mysql此环境下的POI导入 此文档讲解Excel导入的功能 1.1 POI导入excel 浏览器效果展示: 前端代码 前端Html代码: <!-- 导入 --> <div class="layui-inline"> <div class="layui-input-block" style="margin-left: 10px;"> <but

点餐小程序,点餐系统,管理后台批量导入excel菜品数据

点餐系统上线这段时间,有好多同学反馈,是否可以添加一个菜品批量导入的功能.由于平时比较忙,一直没有时间把菜品批量导入的功能加进来.今天正好空出来时间了,就来教大家实现下菜品批量导入的功能. 后面会把这节功能录制成视频放到点餐系统的课程里. 传送门:" rel="nofollow">点餐系统,java后台+点餐小程序 老规矩,先看效果图 选择excel菜品导入数据成功 之前有看过我课程的同学肯定知道,我之前是没有批量导入的类目的,不错,这个类目就是我们今天新加的功能. 实

导入Excel用户表,调用存储过程

花了一天半的时间学习了一下导入Excel用户表,调用存储过程,主要是学习存储过程.因为之前没有具体在项目中应用过. 这里我们采用导入Excel到临时表,然后存储过程中读取临时表判断数据类型和数据格式,然后保存到正式表. 导入Excel采用spring 的POI技术. 本文内容较多,请选择性阅读. controller里面的代码: /**  * Excel导入用户表,调用存储过程,先导入临时表,再在存储过程中判断,判断通过后导入正式表,错误的则记录错误日志表中. lijianbo  *   * @

使用jxls技术导入Excel模版数据(转自其他博客)

第一步:先确定好Excel导入的格式以及各表格字段值的含义 第二步:定义好解析的XML--videoConfig.xml <?xml version="1.0" encoding="UTF-8"?> <workbook> <worksheet name="Sheet1"> <section startRow="0" endRow="0"/> <loop

Asp.NET MVC 导入Excel数据教程 手把手教你系列!!!

先上效果图 1.引言 小弟最近接了个大学生的毕业设计,收了100块钱让做一个ASP.NET MVC导入Excel到数据库的功能,由于以前没做过就到处搜索资料,但是发现网上的资料不是直接贴一大堆乱起八遭的源码,就是需要借用NPOI第三方类库太麻烦了,况且预算才100RMB简直不值得,所以小弟尝试自己动手丰衣足食,所以就有了这篇博客. 先上一张小弟的思路图: (说明:没有安装做流程图的软件!凑合着看吧) 2 进入正题 首先跟着小弟先创建一个默认的MVC项目(相信大家都会创建,这里就不演示了) 第一步

.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法)

.Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public class ExcelController : Controller { // // GET: /Excel/ Models.zbwxglEntities myMdl = new Models.zbwxglEntities(); /// <summary> /// 第一种方法,利用文件输出流进行读写操作 /// <

导入excel数据到数据库

1.上传excel到服务器 jsp页面代码 <form action="actionname" method="post" id="form1" enctype="multipart/form-data"> <input type="file" name="excel" id="fileExecl" class="inputFile&quo

Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件. 2.excel定义成模板,里面只填写了所需要的数据,有可能数据有问题. 3.在导入的时候就需要对每个excel单元格的数据进行验证. 4.验证完之后,若所有数据正确,那么批量保存.若有一点点错误,就不执行保存操作,并提示错误原因. 思路: 1.完美使用了Map的功能,先将xml中的数据存入map