文件下载

package com.huawei.iop.service.worldCUP.userCluster;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;

import com.huawei.iop.bean.TaskInfo;
import com.huawei.iop.common.AbstractService;
import com.huawei.iop.common.IopConst;
import com.huawei.iop.common.IopException;
import com.huawei.iop.manager.worldCUP.userCluster.UserDefinedGroupManager;
import com.huawei.iop.manager.worldCUP.userCluster.WorldCUPManager;
import com.huawei.iop.util.ConfigPropertiesUtil;
import com.huawei.iop.util.IOHelperUtil;

public class ExpUserClusterFileService extends AbstractService
{
    static char separator = ',';

    private WorldCUPManager worldCUPManager;

    @Autowired
    private UserDefinedGroupManager userDefinedGroupManager;

    public void setWorldCUPManager(WorldCUPManager worldCUPManager)
    {
        this.worldCUPManager = worldCUPManager;
    }

    public void setUserDefinedGroupManager(UserDefinedGroupManager userDefinedGroupManager)
    {
        this.userDefinedGroupManager = userDefinedGroupManager;
    }

    @Override
    public String excute(Map<String, Object> context) throws IopException
    {
        logger.info("enter ExpUserClusterFile ...");
        logger.info("params:" + context);
        // 接收前台数据
        String jsonObject = (String) context.get(IopConst.REQUEST_JSON);
        String execute = IopConst.IOP_RUN_SUCCESS;
        String savePath = request.getSession().getServletContext().getRealPath("tmp");
        String urlPath = request.getServletContext().getContextPath() + "/tmp";
        /*
         * BufferedReader reader = null; BufferedOutputStream bo = null;
         */
        // 封装Json
        JSONObject object = null;
        // String pathString = null;
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try
        {
            object = new JSONObject(jsonObject);
            File saveFile = new File(savePath);
            List<Boolean> flagList = new ArrayList<Boolean>(IopConst.DEFAULTNUM);
            if (!saveFile.exists())
            {
                // 新建
                // saveFile.mkdirs();
                flagList.add(saveFile.mkdirs());
                boolean b = saveFile.mkdirs();
                if (b)
                {
                    logger.info("saveFile.mkdirs():" + b);
                }
            }
            String taskID = object.getString("taskID");
            TaskInfo taskInfo = worldCUPManager.selectTaskById(taskID);
            if (null == taskInfo)
            {
                return execute = IopConst.IOP_BEAN_FAILSE;
            }
            String fileName =taskInfo.getFileName();
            String downloadFileName = "users_group_"+taskID+".csv";
            //users_group_201806051010.csv
            // 獲取當前時間的年月
            /*
             * Date nowDate = new Date(); SimpleDateFormat df = new
             * SimpleDateFormat("yyyyMM"); String dateTime = df.format(nowDate);
             */

            // String resultPathFromConf
            // =ConfigPropertiesUtil.readValue("baseClusterUserPath");
            // String resultPathFromConf =
            // ConfigPropertiesUtil.readValue("baseClusterUserPath") +
            // dateTime;// download/resultgroups
            String resultPathFromConf = taskInfo.getDownloadPath();

            File file = new File(resultPathFromConf, fileName);
            logger.info("file:" + file);
            File destFile = new File(savePath, downloadFileName);
            logger.info("destFile:" + destFile);
            /*
             * if (StringUtils.isEmpty(resultPathFromConf)) { resultPathFromConf
             * = "/home/iop/download/taskresults/" + dateTime; }
             */
            try
            {
                fis = new FileInputStream(file);
                fos = new FileOutputStream(destFile);
                int nRead = 0;
                byte[] buffer = new byte[1024];
                // 用戶ID
                String userId = ConfigPropertiesUtil.readValue("column1");
                if (StringUtils.isEmpty(userId))
                {
                    userId = "UERID";
                }
                // 手机号码
                String telephone = ConfigPropertiesUtil.readValue("column2");
                if (StringUtils.isEmpty(telephone))
                {
                    telephone = "TELEPHONE";
                }
                // 流量值(M)
                String flow = ConfigPropertiesUtil.readValue("column3");
                if (StringUtils.isEmpty(flow))
                {
                    flow = "FLOW(MB)";
                }
                fos.write((userId + "," + telephone + "," + flow + "\r\n").getBytes());
                while ((nRead = fis.read(buffer, 0, 1024)) > 0)
                { // bis为网络输入流
                    fos.write(buffer, 0, nRead);
                }
            }
            catch (Exception e)
            {
                logger.error("fis read failed ...");
                logger.error("fos read failed ...");
            }
            finally
            {
                IOHelperUtil.close(fis, fos);
            }
            /*
             * String separator = System.getProperty("line.separator"); reader =
             * new BufferedReader(new FileReader(file));// 换成你的文件名 String line =
             * null; String[] heads = { "用户ID", "手机号", "流量(M)" }; int i = 0;
             * String[][] rows = new String[3][]; String[] split = null; while
             * ((line = reader.readLine()) != null) { split =
             * line.trim().split(","); rows[i++] = split; } byte[] bom = {
             * (byte) 0xFF, (byte) 0xFE }; bo = new BufferedOutputStream(new
             * FileOutputStream(destFile)); logger.info("write begin  ...");
             * bo.write(bom); bo.write(join(heads, "\t").getBytes("utf-16le"));
             * bo.write(separator.getBytes("utf-16le")); for (String[] row :
             * rows) { bo.write(join(row, "\t").getBytes("utf-16le"));
             * bo.write(separator.getBytes("utf-16le")); // int value =
             * Integer.parseInt(last);//如果是数值,可以转化为 } bo.flush();
             */
            logger.info("write end  ...");
            /*
             * if (file.isFile() || file.exists() || file.canRead()) {
             */
            appendJSON("url", urlPath + "/" + downloadFileName);
            // execute = IopConst.IOP_RUN_SUCCESS;
            // }
            /*
             * else { logger.info("if-else : else"); }
             */

            logger.info("out ExpActivityService ...");
        }
        /*
         * execute = IopConst.IOP_RUN_FAILSE;
         * logger.error("QueryHitContent execute:", e);
         */
        catch (JSONException e)
        {
            execute = IopConst.IOP_RUN_FAILSE;
            logger.error("JSONException: IopConst.IOP_RUN_FAILSE" + e);
        }
        /*
         * catch (UnsupportedEncodingException e) { execute =
         * IopConst.IOP_RUN_FAILSE;
         * logger.error("UnsupportedEncodingException: IopConst.IOP_RUN_FAILSE"
         * + e); } catch (IOException e) { execute = IopConst.IOP_RUN_FAILSE;
         * logger.error("IOException: IopConst.IOP_RUN_FAILSE" + e); }
         */
        catch (Exception e)
        {
            execute = IopConst.IOP_RUN_FAILSE;
            logger.error("Exception: IopConst.IOP_RUN_FAILSE" + e);
        }
        finally
        {
            /*
             * if (reader != null) { try { reader.close(); } catch (IOException
             * e) { e.printStackTrace(); } } if (bo != null) { try { bo.close();
             * } catch (IOException e) { e.printStackTrace(); } }
             */
            logger.info("Executed once ExportDefinedGroupsService ");
            // 错误日志
        }
        contextMap.put(IopConst.STATUES, execute);
        return execute;

    }

    /*
     * private String join(String[] strArr, String delim) { StringBuilder sb =
     * new StringBuilder(); for (String s : strArr) { sb.append(s);
     * sb.append(delim); } String ret; if (strArr.length > 1) { ret =
     * sb.substring(0, sb.length() - 1); } else { ret = sb.toString(); } return
     * ret; }
     */

}

 

posted @ 2018-07-10 16:55  DoubleW  阅读(142)  评论(0编辑  收藏  举报