package foundation.calendar;
|
|
import java.time.LocalDate;
|
import java.time.format.DateTimeFormatter;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Locale;
|
|
import foundation.dao.DataPackage;
|
import foundation.dao.DataSource;
|
import foundation.dao.PackageItem;
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.entity.Filter;
|
import foundation.data.entity.OrderBy;
|
import foundation.data.meta.field.FieldsRuntime;
|
import foundation.data.object.DataObject;
|
import foundation.persist.SQLRunner;
|
import foundation.user.OnlineUser;
|
import foundation.util.DateTimeUtil;
|
import foundation.util.ID;
|
import foundation.util.Util;
|
import foundation.workflow.ActionProvider;
|
|
public class CalendarHandler extends ActionProvider{
|
|
@Override
|
protected void publishMethod() {
|
//1. 生成日历
|
addMethod("generateCalendar");
|
|
//2. 新增客户日程计划
|
addMethod("addCustomerSchedule");
|
|
//3. 新增业务日程计划
|
addMethod("addBusinessSchedule");
|
|
//4. 获取日程表
|
addMethod("getCalendar");
|
}
|
|
public void generateCalendar() throws Exception {
|
LocalDate date = LocalDate.now();
|
int year = date.getYear();
|
|
if (dataReader != null) {
|
year = dataReader.getInteger("year", year);
|
}
|
|
date = LocalDate.of(year, 1, 1);
|
LocalDate lastMonth = date.minusMonths(1);
|
|
DataObject dataObject = DataObject.getInstance("md_calendar");
|
int existsCnt = dataObject.getCount(new Filter("year", year));
|
if (existsCnt > 0) {
|
logger.info("已存在年份【" + year + "】日历");
|
return ;
|
}
|
|
logger.info("生成年份【 " + year + "】日历");
|
Entity entity;
|
EntitySet entitySet = dataObject.createBrowseEntitySet();
|
int dayOfWeek;
|
String currentMonth = "", lastMonthly = "", formattedDate, formattedMonth, formattedDay;
|
|
while (date.getYear() == year) {
|
entity = entitySet.newEntity();
|
formattedDate = date.format(DateTimeFormatter.ofPattern("YYYY-MM-dd", Locale.getDefault()));
|
formattedMonth = date.format(DateTimeFormatter.ofPattern("MM", Locale.getDefault()));
|
formattedDay = date.format(DateTimeFormatter.ofPattern("dd", Locale.getDefault()));
|
dayOfWeek = date.getDayOfWeek().getValue();
|
|
if (!formattedMonth.equalsIgnoreCase(currentMonth)) {
|
currentMonth = formattedMonth;
|
lastMonthly = lastMonth.format(DateTimeFormatter.ofPattern("YYYYMM", Locale.getDefault()));
|
lastMonth = lastMonth.plusMonths(1);
|
}
|
|
entity.setId(ID.newValue());
|
entity.set("year", year);
|
entity.set("month", currentMonth);
|
entity.set("month_implant", lastMonthly);
|
entity.set("month_implant_alter", lastMonthly);
|
entity.set("day_of_week", dayOfWeek);
|
entity.set("day", formattedDay);
|
entity.set("doc_date", formattedDate);
|
entity.set("is_implant_open", "T");
|
entity.set("is_order_open", "T");
|
entitySet.append(entity);
|
|
date = date.plusDays(1); // 增加一天
|
}
|
|
int cnt = dataObject.batchInsertEntitySet(entitySet);
|
logger.info("生成【{}】日历,共{}天", year, cnt);
|
}
|
|
public void addCustomerSchedule() throws Exception {
|
OnlineUser user = OnlineUser.getInstance();
|
String userId = user.getId();
|
Date dateFrom = null, dateTo = null;
|
|
DataPackage dataPackage = step.getDataPackage();
|
PackageItem packageItem = dataPackage.getMaster();
|
Entity master = packageItem.getEntity(DataSource.DB);
|
String docId = master.getId();
|
String docName = master.getString("name");
|
String stateCode = master.getString("state_code");
|
String stateName = master.getString("state_name");
|
FieldsRuntime fields = master.getFieldsMeta();
|
String parentDataName = "met_meeting";
|
|
//1. 获取开始时间,结束时间
|
if (fields.contains("date_from")) {
|
dateFrom = master.getDate("date_from");
|
dateTo = master.getDate("date_to");
|
}
|
else if (fields.contains(parentDataName + "__date_from")) {
|
dateFrom = master.getDate(parentDataName + "__date_from");
|
dateTo = master.getDate(parentDataName + "__date_to");
|
docName = master.getString(parentDataName + "__name");
|
}
|
else {
|
dateFrom = master.getDate("doc_date");
|
dateTo = master.getDate("doc_date");
|
}
|
|
//2. 日期分片
|
List<BizScheduleMeta> schedualMetaList = segmentSchedual(dateFrom, dateTo);
|
|
//3. 同步至数据库
|
SQLRunner.beginTrans();
|
try {
|
DataObject customerCalendar = DataObject.getInstance("md_calendar_customer");
|
customerCalendar.deleteEntitySet(new Filter("doc_id", docId).add("user_id", userId));
|
|
EntitySet scheduleSet = customerCalendar.createTableEntitySet();
|
|
for (BizScheduleMeta meta : schedualMetaList) {
|
Entity oneSchedule = scheduleSet.newEntity();
|
oneSchedule = meta.toEntity(oneSchedule);
|
oneSchedule.setId(ID.newValue());
|
oneSchedule.set("user_id", userId);
|
oneSchedule.set("doc_id", docId);
|
oneSchedule.set("doc_name", docName);
|
oneSchedule.set("state_code", stateCode);
|
oneSchedule.set("state_name", stateName);
|
|
scheduleSet.append(oneSchedule);
|
}
|
|
customerCalendar.batchInsertEntitySet(scheduleSet);
|
} catch (Exception e) {
|
e.printStackTrace();
|
SQLRunner.rollback();
|
return ;
|
}
|
|
SQLRunner.commit();
|
}
|
|
public void addBusinessSchedule() throws Exception {
|
DataPackage dataPackage = step.getDataPackage();
|
PackageItem packageItem = dataPackage.getMaster();
|
Entity master = packageItem.getEntity(DataSource.DB);
|
String docId = master.getId();
|
String docName = master.getString("name");
|
String stateCode = master.getString("state_code");
|
String stateName = master.getString("state_name");
|
FieldsRuntime fields = master.getFieldsMeta();
|
|
Date dateFrom = null, dateTo = null;
|
|
//1. 获取开始时间,结束时间
|
if (fields.contains("date_from")) {
|
dateFrom = master.getDate("date_from");
|
dateTo = master.getDate("date_to");
|
}
|
else if (fields.contains(packageItem.getName() + "__date_from")) {
|
dateFrom = master.getDate(packageItem.getName() + "__date_from");
|
dateTo = master.getDate(packageItem.getName() + "__date_to");
|
docName = master.getString(packageItem.getName() + "__name");
|
}
|
else {
|
dateFrom = master.getDate("doc_date");
|
dateTo = master.getDate("doc_date");
|
}
|
|
//2. 日期分片
|
List<BizScheduleMeta> schedualMetaList = segmentSchedual(dateFrom, dateTo);
|
|
//3. 同步至数据库
|
SQLRunner.beginTrans();
|
try {
|
DataObject businessCalendar = DataObject.getInstance("md_calendar_business");
|
businessCalendar.deleteEntitySet(new Filter("doc_id", docId));
|
|
EntitySet scheduleSet = businessCalendar.createTableEntitySet();
|
|
for (BizScheduleMeta meta : schedualMetaList) {
|
Entity oneSchedule = scheduleSet.newEntity();
|
oneSchedule = meta.toEntity(oneSchedule);
|
oneSchedule.setId(ID.newValue());
|
oneSchedule.set("doc_id", docId);
|
oneSchedule.set("doc_name", docName);
|
oneSchedule.set("state_code", stateCode);
|
oneSchedule.set("state_name", stateName);
|
}
|
|
businessCalendar.batchInsertEntitySet(scheduleSet);
|
}
|
catch (Exception e) {
|
SQLRunner.rollback();
|
e.printStackTrace();
|
return ;
|
}
|
|
SQLRunner.commit();
|
}
|
|
public void getCalendar() throws Exception {
|
Filter filter = new Filter(dataReader.getString("filter"));
|
String dataName = dataReader.getString("dataname");
|
DataObject dataObject = DataObject.getInstance(dataName);
|
|
BizScheduleBucket bucket = new BizScheduleBucket();
|
EntitySet entitySet = dataObject.getTableEntitySet(filter, new OrderBy("start_time asc"));
|
|
for(Entity entity : entitySet) {
|
BizScheduleMeta meta = new BizScheduleMeta();
|
meta.load(entity);
|
bucket.loadOne(meta);
|
}
|
|
dataWriter.addValue(bucket);
|
}
|
|
private List<BizScheduleMeta> segmentSchedual(Date dateFrom, Date dateTo) throws Exception {
|
String tempDateFrom = Util.DataTimeToString(dateFrom);
|
String tempDateTo = Util.DataTimeToString(dateTo);
|
|
List<BizScheduleMeta> metaList = new ArrayList<BizScheduleMeta>();
|
BizScheduleMeta meta = new BizScheduleMeta();
|
|
if (dateFrom == dateTo) {
|
meta.setStartTime(tempDateFrom);
|
|
String year = DateTimeUtil.getYear(tempDateFrom);
|
String season = DateTimeUtil.getSeason(tempDateFrom);
|
String month = DateTimeUtil.getMonth(tempDateFrom, true);
|
meta.setYear(year);
|
meta.setSeason(season);
|
meta.setMonthNo(year + month);
|
meta.setDate(tempDateFrom.substring(0, 10));
|
|
metaList.add(meta);
|
return metaList;
|
}
|
|
while (tempDateFrom.compareTo(tempDateTo) <= 0) {
|
meta.setStartTime(tempDateFrom);
|
|
String year = DateTimeUtil.getYear(tempDateFrom);
|
String season = DateTimeUtil.getSeason(tempDateFrom);
|
String month = DateTimeUtil.getMonth(tempDateFrom, true);
|
meta.setYear(year);
|
meta.setSeason(season);
|
meta.setMonthNo(year + month);
|
|
String todayEndTime = tempDateFrom.substring(0,10) + " 23:59:59";
|
if (todayEndTime.compareTo(tempDateTo) > 0) {
|
todayEndTime = tempDateTo;
|
}
|
|
meta.setEndTime(todayEndTime);
|
metaList.add(meta);
|
|
tempDateFrom = DateTimeUtil.addDays(todayEndTime, 1);
|
}
|
|
return metaList;
|
}
|
}
|