further time calculation optimization

This commit is contained in:
Jörg Henke
2024-01-04 11:58:03 +01:00
parent 14ece3eed2
commit 8f414e1964
4 changed files with 65 additions and 23 deletions

View File

@ -23,7 +23,7 @@ apply plugin: 'maven-publish'
apply plugin: 'eclipse' apply plugin: 'eclipse'
group = 'de.jottyfan' group = 'de.jottyfan'
version = '20240104' version = '20240104b'
def artifactId = 'timetrackjooq' def artifactId = 'timetrackjooq'
def versionNumber = version def versionNumber = version

View File

@ -17,12 +17,12 @@ import java.util.function.Function;
import org.jooq.Field; import org.jooq.Field;
import org.jooq.ForeignKey; import org.jooq.ForeignKey;
import org.jooq.Function4; import org.jooq.Function5;
import org.jooq.Identity; import org.jooq.Identity;
import org.jooq.Name; import org.jooq.Name;
import org.jooq.Record; import org.jooq.Record;
import org.jooq.Records; import org.jooq.Records;
import org.jooq.Row4; import org.jooq.Row5;
import org.jooq.Schema; import org.jooq.Schema;
import org.jooq.SelectField; import org.jooq.SelectField;
import org.jooq.Table; import org.jooq.Table;
@ -75,6 +75,11 @@ public class TRequiredWorktime extends TableImpl<TRequiredWorktimeRecord> {
*/ */
public final TableField<TRequiredWorktimeRecord, Integer> FK_LOGIN = createField(DSL.name("fk_login"), SQLDataType.INTEGER.nullable(false), this, ""); public final TableField<TRequiredWorktimeRecord, Integer> FK_LOGIN = createField(DSL.name("fk_login"), SQLDataType.INTEGER.nullable(false), this, "");
/**
* The column <code>done.t_required_worktime.required_minutes</code>.
*/
public final TableField<TRequiredWorktimeRecord, Integer> REQUIRED_MINUTES = createField(DSL.name("required_minutes"), SQLDataType.INTEGER.nullable(false).defaultValue(DSL.field(DSL.raw("480"), SQLDataType.INTEGER)), this, "");
private TRequiredWorktime(Name alias, Table<TRequiredWorktimeRecord> aliased) { private TRequiredWorktime(Name alias, Table<TRequiredWorktimeRecord> aliased) {
this(alias, aliased, null); this(alias, aliased, null);
} }
@ -185,18 +190,18 @@ public class TRequiredWorktime extends TableImpl<TRequiredWorktimeRecord> {
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// Row4 type methods // Row5 type methods
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
@Override @Override
public Row4<Integer, LocalTime, LocalDate, Integer> fieldsRow() { public Row5<Integer, LocalTime, LocalDate, Integer, Integer> fieldsRow() {
return (Row4) super.fieldsRow(); return (Row5) super.fieldsRow();
} }
/** /**
* Convenience mapping calling {@link SelectField#convertFrom(Function)}. * Convenience mapping calling {@link SelectField#convertFrom(Function)}.
*/ */
public <U> SelectField<U> mapping(Function4<? super Integer, ? super LocalTime, ? super LocalDate, ? super Integer, ? extends U> from) { public <U> SelectField<U> mapping(Function5<? super Integer, ? super LocalTime, ? super LocalDate, ? super Integer, ? super Integer, ? extends U> from) {
return convertFrom(Records.mapping(from)); return convertFrom(Records.mapping(from));
} }
@ -204,7 +209,7 @@ public class TRequiredWorktime extends TableImpl<TRequiredWorktimeRecord> {
* Convenience mapping calling {@link SelectField#convertFrom(Class, * Convenience mapping calling {@link SelectField#convertFrom(Class,
* Function)}. * Function)}.
*/ */
public <U> SelectField<U> mapping(Class<U> toType, Function4<? super Integer, ? super LocalTime, ? super LocalDate, ? super Integer, ? extends U> from) { public <U> SelectField<U> mapping(Class<U> toType, Function5<? super Integer, ? super LocalTime, ? super LocalDate, ? super Integer, ? super Integer, ? extends U> from) {
return convertFrom(toType, Records.mapping(from)); return convertFrom(toType, Records.mapping(from));
} }
} }

View File

@ -11,8 +11,8 @@ import java.time.LocalTime;
import org.jooq.Field; import org.jooq.Field;
import org.jooq.Record1; import org.jooq.Record1;
import org.jooq.Record4; import org.jooq.Record5;
import org.jooq.Row4; import org.jooq.Row5;
import org.jooq.impl.UpdatableRecordImpl; import org.jooq.impl.UpdatableRecordImpl;
@ -20,7 +20,7 @@ import org.jooq.impl.UpdatableRecordImpl;
* This class is generated by jOOQ. * This class is generated by jOOQ.
*/ */
@SuppressWarnings({ "all", "unchecked", "rawtypes" }) @SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class TRequiredWorktimeRecord extends UpdatableRecordImpl<TRequiredWorktimeRecord> implements Record4<Integer, LocalTime, LocalDate, Integer> { public class TRequiredWorktimeRecord extends UpdatableRecordImpl<TRequiredWorktimeRecord> implements Record5<Integer, LocalTime, LocalDate, Integer, Integer> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -80,6 +80,20 @@ public class TRequiredWorktimeRecord extends UpdatableRecordImpl<TRequiredWorkti
return (Integer) get(3); return (Integer) get(3);
} }
/**
* Setter for <code>done.t_required_worktime.required_minutes</code>.
*/
public void setRequiredMinutes(Integer value) {
set(4, value);
}
/**
* Getter for <code>done.t_required_worktime.required_minutes</code>.
*/
public Integer getRequiredMinutes() {
return (Integer) get(4);
}
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// Primary key information // Primary key information
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
@ -90,17 +104,17 @@ public class TRequiredWorktimeRecord extends UpdatableRecordImpl<TRequiredWorkti
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// Record4 type implementation // Record5 type implementation
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
@Override @Override
public Row4<Integer, LocalTime, LocalDate, Integer> fieldsRow() { public Row5<Integer, LocalTime, LocalDate, Integer, Integer> fieldsRow() {
return (Row4) super.fieldsRow(); return (Row5) super.fieldsRow();
} }
@Override @Override
public Row4<Integer, LocalTime, LocalDate, Integer> valuesRow() { public Row5<Integer, LocalTime, LocalDate, Integer, Integer> valuesRow() {
return (Row4) super.valuesRow(); return (Row5) super.valuesRow();
} }
@Override @Override
@ -123,6 +137,11 @@ public class TRequiredWorktimeRecord extends UpdatableRecordImpl<TRequiredWorkti
return TRequiredWorktime.T_REQUIRED_WORKTIME.FK_LOGIN; return TRequiredWorktime.T_REQUIRED_WORKTIME.FK_LOGIN;
} }
@Override
public Field<Integer> field5() {
return TRequiredWorktime.T_REQUIRED_WORKTIME.REQUIRED_MINUTES;
}
@Override @Override
public Integer component1() { public Integer component1() {
return getPkRequiredWorktime(); return getPkRequiredWorktime();
@ -143,6 +162,11 @@ public class TRequiredWorktimeRecord extends UpdatableRecordImpl<TRequiredWorkti
return getFkLogin(); return getFkLogin();
} }
@Override
public Integer component5() {
return getRequiredMinutes();
}
@Override @Override
public Integer value1() { public Integer value1() {
return getPkRequiredWorktime(); return getPkRequiredWorktime();
@ -163,6 +187,11 @@ public class TRequiredWorktimeRecord extends UpdatableRecordImpl<TRequiredWorkti
return getFkLogin(); return getFkLogin();
} }
@Override
public Integer value5() {
return getRequiredMinutes();
}
@Override @Override
public TRequiredWorktimeRecord value1(Integer value) { public TRequiredWorktimeRecord value1(Integer value) {
setPkRequiredWorktime(value); setPkRequiredWorktime(value);
@ -188,11 +217,18 @@ public class TRequiredWorktimeRecord extends UpdatableRecordImpl<TRequiredWorkti
} }
@Override @Override
public TRequiredWorktimeRecord values(Integer value1, LocalTime value2, LocalDate value3, Integer value4) { public TRequiredWorktimeRecord value5(Integer value) {
setRequiredMinutes(value);
return this;
}
@Override
public TRequiredWorktimeRecord values(Integer value1, LocalTime value2, LocalDate value3, Integer value4, Integer value5) {
value1(value1); value1(value1);
value2(value2); value2(value2);
value3(value3); value3(value3);
value4(value4); value4(value4);
value5(value5);
return this; return this;
} }
@ -210,13 +246,14 @@ public class TRequiredWorktimeRecord extends UpdatableRecordImpl<TRequiredWorkti
/** /**
* Create a detached, initialised TRequiredWorktimeRecord * Create a detached, initialised TRequiredWorktimeRecord
*/ */
public TRequiredWorktimeRecord(Integer pkRequiredWorktime, LocalTime required, LocalDate day, Integer fkLogin) { public TRequiredWorktimeRecord(Integer pkRequiredWorktime, LocalTime required, LocalDate day, Integer fkLogin, Integer requiredMinutes) {
super(TRequiredWorktime.T_REQUIRED_WORKTIME); super(TRequiredWorktime.T_REQUIRED_WORKTIME);
setPkRequiredWorktime(pkRequiredWorktime); setPkRequiredWorktime(pkRequiredWorktime);
setRequired(required); setRequired(required);
setDay(day); setDay(day);
setFkLogin(fkLogin); setFkLogin(fkLogin);
setRequiredMinutes(requiredMinutes);
resetChangedOnNotNull(); resetChangedOnNotNull();
} }
} }

View File

@ -1,6 +1,6 @@
create table done.t_required_worktime ( create table done.t_required_worktime (
pk_required_worktime int primary key generated always as identity, pk_required_worktime int primary key generated always as identity,
required time without time zone not null default '8:0'::time, required_minutes int not null default 480,
day date not null, day date not null,
fk_login int not null references profile.t_login(pk), fk_login int not null references profile.t_login(pk),
unique(day, fk_login) unique(day, fk_login)
@ -54,7 +54,7 @@ with x(dayworktime, day, fk_login) as (
grant select on done.v_daylimit to timetrack; grant select on done.v_daylimit to timetrack;
create or replace view done.v_current_overtime as create or replace view done.v_current_overtime as
select x.overtime_minutes + extract(minute from sum(l.dayworktime - r.required)) as overtime, select x.overtime_minutes + sum(extract(minute from l.dayworktime) - r.required_minutes) as overtime,
to_char(now(), 'DD.MM.YYYY HH24:MI') as impact, to_char(now(), 'DD.MM.YYYY HH24:MI') as impact,
x.fk_login x.fk_login
from done.t_overtime x from done.t_overtime x
@ -65,13 +65,13 @@ group by x.overtime_minutes, x.fk_login;
grant select on done.v_current_overtime to timetrack; grant select on done.v_current_overtime to timetrack;
create view done.v_day as create or replace view done.v_day as
with x(dayworktime, day, fk_login, required, starttime, endtime) as ( with x(dayworktime, day, fk_login, required, starttime, endtime) as (
select sum(d.dayworktime), d.day, d.fk_login, r.required, select sum(d.dayworktime), d.day, d.fk_login, make_interval(mins => r.required_minutes),
min(d.daytime_from), max(d.daytime_until) min(d.daytime_from), max(d.daytime_until)
from done.v_daylimit d from done.v_daylimit d
left join done.t_required_worktime r on r.day = d.day and r.fk_login = d.fk_login left join done.t_required_worktime r on r.day = d.day and r.fk_login = d.fk_login
group by d.day, d.fk_login, r.required group by d.day, d.fk_login, r.required_minutes
) select day, starttime, endtime, dayworktime as worktime, ) select day, starttime, endtime, dayworktime as worktime,
endtime - starttime - dayworktime as breaktime, endtime - starttime - dayworktime as breaktime,
dayworktime - required as day_overtime, fk_login dayworktime - required as day_overtime, fk_login