powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Использование статик данных из БД
4 сообщений из 4, страница 1 из 1
Использование статик данных из БД
    #38683631
Zahc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача в следующем: в сетевой папке с определенной частотой выкладываются файлы с данными. Эти файлы парсятся по таймеру и данные сохраняются в базу данных. Каждая строчка в файле представляет информацию о заказе и содержит следующий список полей
Код: plaintext
1.
2.
3.
4.
1. ID - думаю все понятно
2. Number - пользовательский номер в виде yymm-xxx
3. Некоторый список полей, который не особо интересен
4. Type - тип заказа
5. Date delivery - дата доставки

Тип заказа может быть: обычный, срочный и т.д. (может быть расширен в процессе жизни)
Дата доставки вычисляется на основе сроков доставки списка материалов и их сборки, т.е. это макс дата одного из материалов + срок сборки. Но при этом необходимо рассчитать дату сборки по рабочему календарю.
Важное условие, что эти справочные данные изменяются сторонним приложением.

Сразу оговорюсь, я новичок в java. Прошу Вашего совета в следующих проблемах:
1. Для типов заказа хочу использовать класс, в котором будет описана map-а. Не представляю, как синхронизировать доступы получения id типа, обновления списка типов в map-е и т.п. Думаю, для таких целей у многих уже есть наработки, поделитесь пож-ла материалами или статьями по этой теме (в поисковиках не могу найти, не соображу по каким тегам искать).

2. Рабочий день определяется по одному из правил А или В плюс этот же день может быть использован несколько раз при расчетах.
Правила не меняются часто, но могут быть изменены (так же сторонним приложением). Поэтому хочу создать мар-у, которая будет содержать все эти дни и заполнятся она будет по требованию. Для этого хочу создать два класса

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
class Rules {
//Содержит правила на основе которых будут строится рабочие интервалы
   private List<RulesA> rulesA;
   private List<RulesB> rulesB;

   public Timetable getDay(Date dt){
      Timetable timetable=new Timetable();
      //Расчет графика работы по правилам
      ...
      return timetable;
   }
}

class CashTimetable(){
//содержит календарь
   private Map<Date,Timetable> calendar;

   private Rules rulesCalendar=new Rules();

   public Timetable getDay(Date dt){
      if (!calendar.containsKey(dt)){
         calendar.put(dt,rulesCalendar.getDay(dt));
      }

      return calendar.get(dt);
   }
}



и использовать везде CashTimetable для получения рабочего интервала. Но возникают проблемы: необходимо проверять обновились ли правила, если да, то необходимо перестроить календарь, а если уже часть расчета даты доставки рассчитана и происходит перерасчет календаря плюс синхронный доступ к календарю.

Не знаю, в каком направлении искать информацию. Помогите, пожалуйста, советом, идей, ссылками на статьи, которые помогут решить мою проблему

Заранее благодарю за помощь
...
Рейтинг: 0 / 0
Использование статик данных из БД
    #38684401
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZahcСразу оговорюсь, я новичок в java. Прошу Вашего совета в следующих проблемах:
1. Для типов заказа хочу использовать класс, в котором будет описана map-а. Не представляю, как синхронизировать доступы получения id типа, обновления списка типов в map-е и т.п. Думаю, для таких целей у многих уже есть наработки, поделитесь пож-ла материалами или статьями по этой теме (в поисковиках не могу найти, не соображу по каким тегам искать).


Hibernate, JPA - не?!

Zahc 2. Рабочий день определяется по одному из правил А или В плюс этот же день может быть использован несколько раз при расчетах.
Правила не меняются часто, но могут быть изменены (так же сторонним приложением). Поэтому хочу создать мар-у, которая будет содержать все эти дни и заполнятся она будет по требованию. Для этого хочу создать два класса


По рабочем дням.
Если есть возможность, то протолкните идею:
Календарь рабочих и праздничных дней на год.
Т.е. "таблица" приблизительно такого вида:
datetime fromWork
datetiem toWrok
Соответственно ее можно будет редактировать.
Т.к. Могут быть не только праздничные дни, но и сокращенные.
Переносы праздничных дней.
...
Рейтинг: 0 / 0
Использование статик данных из БД
    #38684611
Zahc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mad_nazgul...
Hibernate, JPA - не?!
ORM в моем случае не подходит: требование задачи и у меня в них опыта нет

mad_nazgul...
По рабочем дням.
Если есть возможность, то протолкните идею:
Календарь рабочих и праздничных дней на год.
Т.е. "таблица" приблизительно такого вида:
datetime fromWork
datetiem toWrok
Соответственно ее можно будет редактировать.
Т.к. Могут быть не только праздничные дни, но и сокращенные.
Переносы праздничных дней.
Немного не туда. Я не могу влиять на структуру таблиц, они уже рабочие. Таблицы вида:
Таблица правил №1 (содержит информацию о графике работы для каждого дня недели, кроме сб и вс):
DateFrom – дата, с которой действует данное правило
DateTill – дата, до которой действует данное правило, всегда пустое для последнего правила
TimeStart1 - время начала первой смены
Duration1 - продолжительность работы первой смены
TimeStart2 - время начала работы второй смены
Duration2 - ...

Далее описывать поля не буду, так как логика похожа
Таблица правил №2 (содержит график работы для определенного дня - своего рода исключения):
Date
TimeStart1
Duration1
TimeStart2
Duration2

Таблица перерывов:
DateFrom
DateTill
TimeStart
Duration

В результате день формируется по следующей логике:
1. Запрашиваемый день пытаемся найти в правилах №2, если есть, строим на его основе
2. Нет в таблице с правилами №2 -> проверяем не является ли запрашиваемый день сб или вс, если это сб или вс формируем пустой день
3. Если не выполняется п. 1 или 2, значит формируем день на основе данных таблицы правил №1
4. Далее добавляем в рабочие периоды информацию о перерывах
В общих словах список рабочих дней должен строится по такой схеме. Я хочу сохранять сформированный день в мапу, что бы повторно не переформировывать его, так как этот день снова понадобиться и держать в мапе всегда примерно один месяц вперед, так как он постоянно будет востребован.

Попробую с другой стороны объяснить проблему:
Из выше описанного думаю архитектура должна быть следующей
CachRule - содержит списки правил, по которым будет формировать рабочий день, а также следит сам за синхронизацией данных
Timetable CachRule.getDay(Date dt) - возвращает график рабочих периодов, которые формируются по выше описанной логике. Если день выходной, праздничный или сб/вс возвращает null

ProductionCalendar - класс, через который будет происходить запрос рабочих дней. Класс содержит мапу
ProductionDay ProductionCalendar.getDay(Date dt) - возвращает объект, который описывает рабочий день. Т.е. в нем происходит проверка наличия dt в мапе и если ее нет, выполняется запрос рабочих периодов из CachRule.getDay(Date dt) и создается ProductionDay, который добавляется в мапу и возвращается

1. Логика обслуживания CachRule похожа на мою проблема с типами заказов
2. Если в CachRule происходит обновление правил, то мапа в ProductionCalendar должна быть пересчитана для всех существующих дней. Как это сделать примерно понимаю)
3. Если в процессе расчета, пока выполняется расчет от даты А до В, происходит изменение календаря, который затронул уже рассчитанные дни, как сообщить методу, что календарь перерассчитан и необходимо перезапустить процесс расчета даты доставки? Как в таких случаях поступают, как организовывают работу классов, что бы поддержать такую ситуацию?
...
Рейтинг: 0 / 0
Использование статик данных из БД
    #38684766
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zahcmad_nazgul...
Hibernate, JPA - не?!
ORM в моем случае не подходит: требование задачи и у меня в них опыта нет


Тады ой.

Zahc1. Логика обслуживания CachRule похожа на мою проблема с типами заказов
2. Если в CachRule происходит обновление правил, то мапа в ProductionCalendar должна быть пересчитана для всех существующих дней. Как это сделать примерно понимаю)
3. Если в процессе расчета, пока выполняется расчет от даты А до В, происходит изменение календаря, который затронул уже рассчитанные дни, как сообщить методу, что календарь перерассчитан и необходимо перезапустить процесс расчета даты доставки? Как в таких случаях поступают, как организовывают работу классов, что бы поддержать такую ситуацию?

В общем все плохо.
Ну пожелаю вам удачи.
Т.к. с данными типами что-то сделать довольно трудно, но можно, но долго и с ошибками.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Использование статик данных из БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]