Это старая версия документа.


aaa
import java.nio.charset.Charset;
 
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
 
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.Timestamp;
 
public class DbEmail extends ScriptJava {
 
    Ref refLastDate;
    Ref refMsgText;
    Ref refMsgError;
    Ref refMsgSend;
 
    int time;
    String text;
 
    final static String dbname = "db";
    Database db;
 
    boolean connected;
 
 
    @Override
    public boolean load() {
        time = getArg("time", 800);
        refLastDate = createRef("lastdate");
        refMsgText  = createRef("msg", "text");
        refMsgError = createRef("msg", "error");
        refMsgSend  = createRef("msg", "send");
 
        return true;
    }
 
 
    @Override
    public boolean prepare() {
        db = getDatabase(dbname);
        if (db == null) {
            printError("Database module is not found: " + dbname);
            return false;
        }
        connected = false;
        return true;
    }
 
 
    @Override
    public void execute() {
        if (db == null || !isValid())
            return;
 
        if (!connected && db.isConnected()) {
            connected = true;
            init();
        }
 
        if (connected && !db.isConnected()) {
            connected = false;
        }
 
        if (connected)
            update();
    }
 
 
    /// init ///
    private void init() {
    }
 
 
    private final static Charset chUTF = Charset.forName("UTF-8");
    private final static Charset chWindows1251 = Charset.forName("windows-1251");
    private String w(String s) {
        return new String(s.getBytes(chWindows1251), chUTF);
    }
 
 
    /// update ///
    private void update() {
 
        LocalDateTime curldt = LocalDateTime.now();
        long dt1 = 0;
        long dt2 = 0;
 
        try (Statement st = db.getConnection().createStatement()) {
 
            String sql = "select current_timestamp from rdb$database";
            try (ResultSet rs = st.executeQuery(sql)) {
                if (rs.next())
                    curldt = rs.getTimestamp(1).toLocalDateTime();
            }
 
            if( refLastDate.getInt() == 0 ) {
                LocalDateTime lastldt = curldt.minusDays(1);
                refLastDate.setInt(
                        (lastldt.getYear() % 100) * 10000 + lastldt.getMonthValue() * 100 + lastldt.getDayOfMonth() );
            }
 
 
            dt1 = refLastDate.getInt() * 10000  + time;
            dt2 = (curldt.getYear() % 100) * 100000000 + curldt.getMonthValue() * 1000000 + curldt.getDayOfMonth() * 10000 +
                        curldt.getHour() * 100 + curldt.getMinute();
 
            db.getConnection().commit();
        } catch (Exception e) {
            printError(e, "Request error");
        }
 
        if (dt2 - dt1 < 10000) {
            if( refMsgError.getBool() ) {
                refMsgSend.setInt(refMsgSend.getInt() + 1);
            }
            return;
        }
 
        LocalDateTime ldt2 = LocalDateTime.of(
                curldt.toLocalDate(),
                LocalTime.of(time / 100, time % 100));
 
        LocalDateTime ldt1 = ldt2.minusDays(1);
 
        String sql =
                "select t.id, t.dt_begin, r.name rname, t.descr, t.status, t.status, " +
                        "t.dt_create, t.dt_end, t.dt_expire, p.name pname, t.dt_reg, " +
                        "datediff(minute, t.dt_end, t.dt_reg) delay, t.reader_id, t.dt_begin, list(pl.name, ', ') persons " +
                        "from msc_person p " +
                        "right join msc_task t on p.id=t.person_id " +
                        "join msc_reader r on r.id=t.reader_id " +
                        "left join msc_scheduleperson sp on sp.schedule_id=t.schedule_id " +
                        "left join msc_person pl on pl.id=sp.person_id " +
                        "where t.dt_begin>=? and t.dt_begin<? and status=? " +
                        "group by " +
                        "  t.id, t.dt_begin, rname, t.descr, t.status, t.status, t.dt_create, " +
                        "  t.dt_end, t.dt_expire, pname, t.dt_reg, delay, t.reader_id " +
                        "order by t.dt_begin ";
 
        int n = 0;
        text = w("Отчет по невыполненным задачам\n") +
                "==============================\n\n";
 
        try (PreparedStatement st = db.getConnection().prepareStatement(sql)) {
 
            st.setTimestamp(1, Timestamp.valueOf(ldt1));
            st.setTimestamp(2, Timestamp.valueOf(ldt2));
            st.setInt(3, 3);
 
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
 
            try (ResultSet rs = st.executeQuery()) {
                while (rs.next()) {
 
                    String persons = rs.getString("persons");
                    if( rs.wasNull() )
                        persons = "";
 
                    text +=
                            w("Дата начала:  ") + rs.getTimestamp("dt_begin").toLocalDateTime().format(dtf) + "\n" +
                                    w("Закончить до: ") + rs.getTimestamp("dt_end").toLocalDateTime().format(dtf) + "\n" +
                                    w("Считыватель:  ") + rs.getString("rname") + "\n" +
                                    w("Описание:     ") + rs.getString("descr") + "\n" +
                                    w("Назначение:   ") + persons + "\n" +
                                    "---" + "\n";
 
                    ++n;
                }
            }
 
            text += w("Всего задач: ") + n + "\n";
 
            refMsgText.setString(text);
            refMsgSend.setInt(1);
 
            refLastDate.setInt( (curldt.getYear() % 100) * 10000 + curldt.getMonthValue() * 100 + curldt.getDayOfMonth() );
 
 
        } catch (Exception e) {
            printError(e, "Request error");
        }
 
    }
}
doc/jroboplc/modules/tagscript/javaexample2.1543825788.txt.gz · Последние изменения: 2018/12/03 11:29 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0