Phricker писал(а):
Ввысь
В конфе читал что нужно в csv самым простым способом вывести. Я писал такую, имхо, очень удобную штуку
Код:
package ru.rta.bgbilling.otherglobal;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import bitel.billing.server.util.MailMsg;
import java.text.SimpleDateFormat;
import java.sql.*;
import java.io.*;
import java.util.zip.*;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class ReportsForUsersBG
extends GlobalScriptBase
{
@Override
public void execute( Setup setup, ConnectionSet connectionSet )
throws Exception
{
Connection con = connectionSet.getConnection();
//Получаем текущую дату и форматируем её вид для имени файла
long curTime = System.currentTimeMillis();
String curStringDate = new SimpleDateFormat("dd.MM.yy").format(curTime); //Обычная дата стринг
String folder = "/home/reports_for_usersBG/"; //папка для сохранения
String FileName = "Необработанные задачи СКПТ:ППО(" + curStringDate + ").csv"; //имя файла в котором сохранять
String folderAndFileName = folder + FileName;
//String FileNameZipped = "TC" + curStringDateFilename + ".105"; //имя файла в котором зиповать
//String folderAndFileNameZipped = folder + FileNameZipped;
String sql = "SELECT c.title, rtt.title, rt.open_dt, rt.comment FROM contract as c LEFT JOIN register_task as rt ON c.id=rt.cid LEFT JOIN register_task_type as rtt ON rt.type=rtt.id WHERE rt.type = 18 AND rt.lm_dt is null AND rt.status = 0";
PreparedStatement ps = con.prepareStatement( sql );
ResultSet rs = ps.executeQuery();
int count = 0;
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(folderAndFileName), "CP1251")); //классы "вкладываются" друг в друга
String header = "№Договора;Тип задачи;Дата создания;Коментарий";
pw.println(header);
while(rs.next())
{
String stroka = rs.getString( 1 ) + ";" + rs.getString( 2 ) + ";" + rs.getString( 3 ) + ";" + rs.getString( 4 );
pw.println(stroka); // записываем строку задачи в файл
count = count + 1; //считаем общее кол-во задач
}
String itog = "Итого: " + count + "(задач)"; //готовим строку с итогами для записи в файл
pw.println(itog); // записываем строку c итогами в файл
pw.close(); // закрываем
print ("Отчет по необработанным задачам сформирован и сохранен по адресу " + folderAndFileName);
//Отправляем на почту------------------------------------------------------------------------------------
Vector<String> Emails = new Vector<String>();
//Emails.add("mail1@m.com");
//Emails.add("mail2@m.com");
//Emails.add("mail3@m.com");
Emails.add("mail4@m.com");
Emails.add("mail5@m.com");
MailMsg mm = new MailMsg(setup);
String subject = "Необработанные задачи СКПТ:ППО(" + curStringDate + ")";
String MailText = "На " + curStringDate + " существует " + count + " необработанных задач. ... тратата...";
Multipart multipart = new MimeMultipart();
MimeBodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(folderAndFileName); //путь до отправляемого файла
attachmentBodyPart.setDataHandler(new DataHandler(source));
attachmentBodyPart.setFileName(MimeUtility.encodeText(source.getName()));
multipart.addBodyPart(attachmentBodyPart);
mm.sendMessage(Emails, subject, MailText, multipart);
print (FileName + " отправлен на " + Emails);
}
}
Из запроса пишет нужную инфу через разделитель в файл, считает кол-во, сохраняет, отправляет на мыло. Все очень гибко
