java中简单的几分钟让你上手的导入、导出、下载模板

这篇博客介绍了在Java中如何进行模板下载、批量导入和导出的操作。在批量导入时,文章详细说明了验证规则,如字段非空、区县和环节匹配,以及在特定情况下如何处理催单字段的增加。对于派单失败的情况,列举了三种可能的原因。在批量导出部分,提到了两种实现方式,分别依赖前端技术和后台处理,并给出了相关代码示例。
摘要由CSDN通过智能技术生成

效果图如下:
下载模板
这里写图片描述
批量导入
下载导入错误信息模板

代码如下:

下载模板

    //下载模板的Controller
    @ResponseBody
    @RequestMapping("/downloadTableTemps.do")
    public void downloadTableTemps(
            HttpServletRequest request,
            HttpServletResponse response)throws Exception{
        response.setContentType("text/html;charset=utf-8");   
        request.setCharacterEncoding("utf-8");
        File file = new File(SystemConfig.getProperty("UPLOAD_PATH")+"/gd/modles.xlsx");
        response.setContentType("application/x-msdownload;");   
        response.setHeader("Content-disposition", "attachment; filename=" + 
                new String("工单上传模板.xlsx".getBytes("utf-8"),"ISO8859-1"));  
        response.setHeader("Content-Length", String.valueOf(file.length()));   
        FileUtil.downloadFile(SystemConfig.getProperty("UPLOAD_PATH")+"/gd/modles.xlsx", response.getOutputStream()); 

    }

引用到一个帮助类

@Component
public class SystemConfig {

    private static Properties props ;
    private static Properties jdbc_props ;

    public SystemConfig(){

        try {
            Resource resource = new ClassPathResource("/properties/resource.properties");//
            props = PropertiesLoaderUtils.loadProperties(resource);
            Resource jdbc_resource = new ClassPathResource("/jdbc.properties");//
            jdbc_props = PropertiesLoaderUtils.loadProperties(jdbc_resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    public static String getProperty(String key){

        return props == null ? null :  props.getProperty(key);

    }

    public static String getJdbcProperty(String key){

        return jdbc_props == null ? null :  jdbc_props.getProperty(key);

    }

    public static String getProperty(String key,String defaultValue){

         return props == null ? null : props.getProperty(key, defaultValue);

    }


    public static Properties getProperties(){
        return props;
    }
}

批量导入

1、这里面包括验证了模板字段不能为空,区县跟环节要匹配上才能成功,其次这里面若导入的数据在派单时间内接单人未办结此工单时,系统又再次派单,则每多派一次,“催单”字段+1,派单失败的工单应在派单结束时系统给出提示并“本次共导入100条工单,其中**条导入失败,点击下载”。重复派单按照订单编码+环节+区县+角色, 唯一性按照订单编码+环节判断。
派单失败的情况:
1、 同一批导入工单有出现重复时;2、导入的工单,后台无此环节;
3、导入工单时,所属县分不存在后台

//批量导入Controller
    @ResponseBody
    @RequestMapping("/importdatas.do")
    public Map<String,Object> importdatas(
            @RequestParam(value="file",required=true) MultipartFile file,
            HttpServletRequest request,
            HttpServletResponse response)throws Exception{  
        Map<String,Object> map = new HashMap<String, Object>();
        String msg="";

        InputStream is=null; 
        int state=0;
        List<GdOrder> errorSeatList=new ArrayList<>();//创建一个存放导入失败的数据的集合

        try {
            if (file!=null){        
            if(this.checkFile(file)) {
                 is = file.getInputStream();
                 XSSFWorkbook wb = new XSSFWorkbook(is);
                 XSSFSheet sheet = wb.getSheetAt(0);//0表示第一个工作薄
                 int rowNum = sheet.getLastRowNum();// 文件一共多少行
                 // 正文内容应该从第二行开始,第一行为表头的标题
                 XSSFRow row=null;

                 List<GdUrge> gdUrgeList=new ArrayList<>();//创建一个存放催单数据的集合
                 List<GdOrder> GdtList=new ArrayList<>();//创建一个存放工单数据的集合          
                 List<GdOrder> removeGdtList=new ArrayList<>();//创建一个重复
                 List<GdOrder> gdFlagList=new ArrayList<>();//创建一个存放未处理用来判断催单的工单数据的集合
                  gdFlagList=gdOrderService.queryFlag(); 
                  List<GdOrder> overFlagList=new ArrayList<>();//创建一个存放未处理用来判断催单的工单数据的集合 
                  overFlagList=gdOrderService.queryGdFlag();
                 for (int i=1;i<=rowNum;i++){
                     boolean flag=true;
                     boolean flag1=false;
                     boolean flag2=false;
                     String msg1="";
                     String msg2="";
                     String msg3="";
                     String msg4="";
                   //先定义要获得属性
                     String myid ="";//区县
                     String area_id ="";//区县
                     String order_bm ="";//编码
                     String step_id ="";//环节
                     String mobile ="";//号码
                     //String pmin="";//时限
                     String step_role="";//时限              
                     String step_ids="";
                     String area_ids=""; 
                     String overFlagid="";
                     row=sheet.getRow(i);//开始获取第一行数据
                     if (row == null){
  //如果行数据为空格或者null就跳过
                         continue;
                     }

                     XSSFCell cell0 = row.getCell(0);
                     if(cell0!=null){
                         cell0.setCellType(Cell.CELL_TYPE_STRING);
                         area_id=cell0.toString().trim();
                     }


                     XSSFCell cell1 = row.getCell(1);
                     if(cell1!=null){
                         cell1.setCellType(Cell.CELL_TYPE_STRING);
                         order_bm=cell1.toString().trim();
                     }


                     XSSFCell cell2 = row.getCell(2);
                     if(cell2!=null){
                         cell2.setCellType(Cell.CELL_TYPE_STRING);
                         step_id=cell2.toString().trim();
                     }



                     XSSFCell cell3 = row.getCell(3);
                     if(cell3!=null){
                         cell3.setCellType(Cell.CELL_TYPE_STRING);
                         mobile=cell3.toString().trim();
                     }


                     if(area_id==null || area_id.equals("")) {
                         msg4="字段不能为空!";
                         flag=false; 
                     }

                     if(order_bm==null || order_bm.equals("")) {
                         msg4="字段不能为空!";
                         flag=false; 
                     }

                     if(step_id==null || step_id.equals("")) {
                         msg4="字段不能为空!";
                         flag=false; 
                     }

                     if(mobile==null || mobile.equals("")) {
                         msg4="字段不能为空!";
                         flag=false; 
                     }

                     if(!StringUtil.isEmpty(area_id)) {
                         Department departments=departmentService.querypname(area_id);//得到机构表
                         if(departments==null) {
                             msg1="没有找到对应的县区!";
                             flag=false; 
                         }else {
                             area_ids=departments.getId();
                         }  
                     }

                     if(!StringUtil.isEmpty(step_id)) {
                     GdConfig gdConfig=
                             gdOrderExtService.queryConfigByStepName(step_id);//得到环节表
                      if(gdConfig==null) {
                         msg2="没有找到对应的环节!";
                          flag=false;
                      }else {               
                         step_ids=gdConfig.getId();
                         step_role=gdConfig.getRole_id();
                         //pmin=gdConfig.getAstrict_time();
                      } 
                     }
                     for (GdOrder gdOrder : GdtList) {
  //根据环节+订单编码判断同一张单是否有重复数据
                         if (order_bm.equals(gdOrder.getOrder_bm())&&step_ids.equals(gdOrder.getStep_id())){
                             msg3="数据异常,重复数据!";
                             flag=false;
                             removeGdtList.add(gdOrder);                        
                             gdOrder.setArea_id(area_id);
                             gdOrder.setStep_id(step_id);
                             gdOrder.setMsg("数据异常,重复数据!");
                             errorSeatList.add(gdOrder);                                                       
                         }
                    }      

                     if(flag) {
  //数据能匹配上的话
                         //判断是否催单
                         for (GdOrder gdOrder : gdFlagList) {
                             if (order_bm.equals(gdOrder.getOrder_bm())&&step_ids.equals(gdOrder.getStep_id())){
                                 flag1=true; 
                                 myid=gdOrder.getId();
                             }
                      } 

                         //判断是否重复派单
                         for (GdOrder gdOrder : overFlagList) {
                             if (area_ids.equals(gdOrder.getArea_id())&&order_bm.equals(gdOrder.getOrder_bm())
                                     &&step_ids.equals(gdOrder.getStep_id())&&step_role.equals(gdOrder.getStep_role())
                                     ){
                                 overFlagid=gdOrder.getId();
                                 GdOrder gdOrders=null;
                                   if(flag) {
  //如果是重复派单又是催单的话
                                     gdOrders=gdOrderService.queryOneWork(overFlagid);//得到催单的那个相同对象
                                     gdOrders.setIs_repeat(gdOrders.getIs_repeat()+1);;//次数+1
                                     gdOrderService.uporderFlag(gdOrders);//修改这一条数据 
                                   }else
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值