Commit 658b9ed9 by Kazuyuki Hida

Merge branch 'contract/sato/1.0.300_hida' into 'contract/sato/1.0.300_dev'

ダッシュボードの実装

See merge request !264
parents f381ab70 67bed2d6
[submodule "ABVJE_Launcher_Android/assets/dashboard"]
path = ABVJE_Launcher_Android/assets/dashboard
url = git@gitlab.agentec.jp:haccp_atform/app_dashboard.git
package jp.agentec.abook.abv.bl.acms.client; package jp.agentec.abook.abv.bl.acms.client;
import org.json.adf.JSONObject;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
...@@ -19,6 +21,7 @@ import jp.agentec.abook.abv.bl.acms.client.json.AuthLevelJSON; ...@@ -19,6 +21,7 @@ import jp.agentec.abook.abv.bl.acms.client.json.AuthLevelJSON;
import jp.agentec.abook.abv.bl.acms.client.json.CategoriesJSON; import jp.agentec.abook.abv.bl.acms.client.json.CategoriesJSON;
import jp.agentec.abook.abv.bl.acms.client.json.ContentCheckDeliverableJSON; import jp.agentec.abook.abv.bl.acms.client.json.ContentCheckDeliverableJSON;
import jp.agentec.abook.abv.bl.acms.client.json.ContentVersionsJSON; import jp.agentec.abook.abv.bl.acms.client.json.ContentVersionsJSON;
import jp.agentec.abook.abv.bl.acms.client.json.DashboardStatusJSON;
import jp.agentec.abook.abv.bl.acms.client.json.GroupsJSON; import jp.agentec.abook.abv.bl.acms.client.json.GroupsJSON;
import jp.agentec.abook.abv.bl.acms.client.json.LockReportJSON; import jp.agentec.abook.abv.bl.acms.client.json.LockReportJSON;
import jp.agentec.abook.abv.bl.acms.client.json.LogSendFlagJSON; import jp.agentec.abook.abv.bl.acms.client.json.LogSendFlagJSON;
...@@ -80,6 +83,7 @@ import jp.agentec.abook.abv.bl.dto.GroupDto; ...@@ -80,6 +83,7 @@ import jp.agentec.abook.abv.bl.dto.GroupDto;
import jp.agentec.abook.abv.bl.dto.MemberInfoDto; import jp.agentec.abook.abv.bl.dto.MemberInfoDto;
import jp.agentec.abook.abv.bl.dto.ServiceOptionDto; import jp.agentec.abook.abv.bl.dto.ServiceOptionDto;
import jp.agentec.abook.abv.bl.dto.TaskReportDto; import jp.agentec.abook.abv.bl.dto.TaskReportDto;
import jp.agentec.abook.abv.bl.logic.ReportStatusLogic;
import jp.agentec.adf.net.http.HttpDownloadState; import jp.agentec.adf.net.http.HttpDownloadState;
import jp.agentec.adf.net.http.HttpFileDownloader; import jp.agentec.adf.net.http.HttpFileDownloader;
import jp.agentec.adf.net.http.HttpMultipart; import jp.agentec.adf.net.http.HttpMultipart;
...@@ -89,6 +93,9 @@ import jp.agentec.adf.net.http.HttpResponse; ...@@ -89,6 +93,9 @@ import jp.agentec.adf.net.http.HttpResponse;
import jp.agentec.adf.util.DateTimeUtil; import jp.agentec.adf.util.DateTimeUtil;
import jp.agentec.adf.util.StringUtil; import jp.agentec.adf.util.StringUtil;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStatus;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.Message;
/** /**
* ACMSのAPIにアクセスするにはこのクラスを継承します。 * ACMSのAPIにアクセスするにはこのクラスを継承します。
* @author Taejin Hong * @author Taejin Hong
...@@ -568,6 +575,14 @@ public class AcmsClient implements AcmsClientResponseListener { ...@@ -568,6 +575,14 @@ public class AcmsClient implements AcmsClientResponseListener {
AcmsMessageJSON json = new AcmsMessageJSON(result.httpResponseBody); AcmsMessageJSON json = new AcmsMessageJSON(result.httpResponseBody);
// JSのコールバックに渡すために必要な情報をストックしておく(暫定的な実装 fixme )
if (apiUrl.contains(AcmsApis.ApiSendTaskData)) {
JSONObject res = new JSONObject(result.httpResponseBody);
int reportStatus = res.has(ReportStatus) ? res.getInt(ReportStatus) : null;
String message = res.has(Message) ? res.getString(Message) : null;
ReportStatusLogic.TaskReportExtParam.stock(String.valueOf(reportStatus), message);
}
Logger.d(TAG, "sendTaskData res: %s", json); Logger.d(TAG, "sendTaskData res: %s", json);
if (json.errorMessage != null) { if (json.errorMessage != null) {
...@@ -735,6 +750,12 @@ public class AcmsClient implements AcmsClientResponseListener { ...@@ -735,6 +750,12 @@ public class AcmsClient implements AcmsClientResponseListener {
return new UnlockReportJSON(json); return new UnlockReportJSON(json);
} }
public DashboardStatusJSON getDashboardStatus(AcmsParameters sid) throws NetworkDisconnectedException, AcmsException {
HttpResponse response = send(AcmsApis.ApiGetDashboardStatus, sid);
String json = response.httpResponseBody;
return new DashboardStatusJSON(json);
}
/**********************************************************************************************/ /**********************************************************************************************/
/** 以下、共用メソッド---------------------------------------------------------------------- **/ /** 以下、共用メソッド---------------------------------------------------------------------- **/
/**********************************************************************************************/ /**********************************************************************************************/
...@@ -940,7 +961,8 @@ public class AcmsClient implements AcmsClientResponseListener { ...@@ -940,7 +961,8 @@ public class AcmsClient implements AcmsClientResponseListener {
AcmsApis.ApiGetPushMessages, AcmsApis.ApiGetPushMessages,
AcmsApis.ApiSendPushMessage, AcmsApis.ApiSendPushMessage,
AcmsApis.ApiLockReport, AcmsApis.ApiLockReport,
AcmsApis.ApiUnlockReport AcmsApis.ApiUnlockReport,
AcmsApis.ApiGetDashboardStatus
}; };
public HttpTaskWorker(String methodName, String apiUrl, T param) { public HttpTaskWorker(String methodName, String apiUrl, T param) {
......
...@@ -133,6 +133,30 @@ public abstract class AcmsJSONParser extends CloneableObject { ...@@ -133,6 +133,30 @@ public abstract class AcmsJSONParser extends CloneableObject {
} }
} }
protected long getLongOrZero(JSONObject json, String key) {
if (json.has(key)) {
return json.getLong(key);
} else {
return 0;
}
}
protected Long getLongOrNull(JSONObject json, String key) {
if (json.has(key)) {
return json.getLong(key);
} else {
return null;
}
}
protected int getIntOrZero(JSONObject json, String key) {
if (json.has(key)) {
return json.getInt(key);
} else {
return 0;
}
}
protected int getIntOrDef(JSONObject json, String key, int def) { protected int getIntOrDef(JSONObject json, String key, int def) {
if (json.has(key)) { if (json.has(key)) {
return json.getInt(key); return json.getInt(key);
...@@ -156,4 +180,6 @@ public abstract class AcmsJSONParser extends CloneableObject { ...@@ -156,4 +180,6 @@ public abstract class AcmsJSONParser extends CloneableObject {
return null; return null;
} }
} }
} }
package jp.agentec.abook.abv.bl.acms.client.json;
import org.json.adf.JSONArray;
import org.json.adf.JSONObject;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import jp.agentec.abook.abv.bl.common.exception.AcmsException;
import jp.agentec.abook.abv.bl.common.log.Logger;
import jp.agentec.abook.abv.bl.dto.DashboardStatusDto;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.OperationId;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.OperationList;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportList;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStartDate;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStatus;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.TaskKey;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.TaskReportId;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationListJSON.OperationName;
public class DashboardStatusJSON extends AcmsCommonJSON {
private static final String TAG = "DashboardStatusJSON";
private List<DashboardStatusDto> reportStatuses;
public DashboardStatusJSON(String jsonString) throws AcmsException {
super(jsonString);
}
@Override
protected void parse(JSONObject json) {
// 使わないので無視 → //presentTimeUTC = dateOrNull(json.getString("presentTimeUTC"));
JSONArray oprations = json.getJSONArray(OperationList);
reportStatuses = new ArrayList<DashboardStatusDto>();
for (int i = 0; i < oprations.length(); i++) {
JSONObject opJson = oprations.getJSONObject(i);
try {
long operationId = getLongOrZero(opJson, OperationId);
String operationName = getStringOrNull(opJson, OperationName);
JSONArray reports = opJson.getJSONArray(ReportList);
for (int j = 0; j < reports.length(); j++) {
JSONObject repJson = reports.getJSONObject(j);
String taskKey = getStringOrNull(repJson, TaskKey);
Long taskReportId = getLongOrNull(repJson, TaskReportId);
Date reportStartDate = getDateOrNull(repJson, ReportStartDate);
int reportStatus = getIntOrZero(repJson,ReportStatus);
DashboardStatusDto rep = new DashboardStatusDto(
taskKey,
taskReportId,
reportStartDate,
operationId,
operationName,
reportStatus
);
reportStatuses.add(rep);
}
} catch (Throwable e) {
Logger.e(TAG, e);
}
}
}
public List<DashboardStatusDto> getReportStatuses() {
return reportStatuses;
}
}
...@@ -21,6 +21,10 @@ public class OperationDataJSON extends AcmsCommonJSON { ...@@ -21,6 +21,10 @@ public class OperationDataJSON extends AcmsCommonJSON {
public static final String OperationLastEditDate = "operationLastEditDate"; public static final String OperationLastEditDate = "operationLastEditDate";
public static final String TaskList = "taskList"; public static final String TaskList = "taskList";
public static final String OperationId = "operationId"; public static final String OperationId = "operationId";
public static final String OperationList = "operationList";
public static final String ReportStatusId = "reportStatusId";
public static final String ReportStatusCount = "reportStatusCount";
public static final String ReportStatusCountList = "reportStatusCountList";
public static final String TaskId = "taskId"; public static final String TaskId = "taskId";
public static final String TaskKey = "taskKey"; public static final String TaskKey = "taskKey";
public static final String TaskCode = "taskCode"; public static final String TaskCode = "taskCode";
...@@ -45,7 +49,9 @@ public class OperationDataJSON extends AcmsCommonJSON { ...@@ -45,7 +49,9 @@ public class OperationDataJSON extends AcmsCommonJSON {
public static final String SendBackUserName = "sendBackUserName"; // 差し戻しユーザ名 差し戻された場合のみ public static final String SendBackUserName = "sendBackUserName"; // 差し戻しユーザ名 差し戻された場合のみ
public static final String SendBackComment = "sendBackComment"; // 確認コメント 差し戻された場合のみ public static final String SendBackComment = "sendBackComment"; // 確認コメント 差し戻された場合のみ
public static final String ReportList = "reportList";
public static final String ReportStatus = "reportStatus"; public static final String ReportStatus = "reportStatus";
public static final String Message = "message";
public List<TaskDto> taskDtoList; public List<TaskDto> taskDtoList;
public Date lastEditDate; public Date lastEditDate;
......
...@@ -2,6 +2,9 @@ package jp.agentec.abook.abv.bl.acms.client.parameters; ...@@ -2,6 +2,9 @@ package jp.agentec.abook.abv.bl.acms.client.parameters;
import java.util.Date; import java.util.Date;
import jp.agentec.adf.util.DateTimeFormat;
import jp.agentec.adf.util.DateTimeUtil;
/** /**
* checkapi/lockReport/のリクエストに使うパラメータ * checkapi/lockReport/のリクエストに使うパラメータ
*/ */
...@@ -10,7 +13,7 @@ public class LockReportParameters extends AcmsParameters { ...@@ -10,7 +13,7 @@ public class LockReportParameters extends AcmsParameters {
private String sid; private String sid;
private String taskKey; private String taskKey;
private Long taskReportId; private Long taskReportId;
private Date reportStartDate; private String reportStartDate; // 書式の問題があるので、あえて文字列
private String userId; private String userId;
private String userName; private String userName;
...@@ -23,10 +26,10 @@ public class LockReportParameters extends AcmsParameters { ...@@ -23,10 +26,10 @@ public class LockReportParameters extends AcmsParameters {
String userName String userName
) { ) {
super(sid); super(sid);
this.sid = sid;
this.taskKey = taskKey; this.taskKey = taskKey;
this.taskReportId = taskReportId; this.taskReportId = taskReportId;
this.reportStartDate = reportStartDate; this.reportStartDate = DateTimeUtil.toString(reportStartDate, DateTimeFormat.yyyyMMddHHmmssSSS_hyphen);
this.userId = userId; this.userId = userId;
this.userName = userName; this.userName = userName;
} }
...@@ -39,7 +42,7 @@ public class LockReportParameters extends AcmsParameters { ...@@ -39,7 +42,7 @@ public class LockReportParameters extends AcmsParameters {
return taskReportId; return taskReportId;
} }
public Date getReportStartDate() { public String getReportStartDate() {
return reportStartDate; return reportStartDate;
} }
......
...@@ -2,6 +2,9 @@ package jp.agentec.abook.abv.bl.acms.client.parameters; ...@@ -2,6 +2,9 @@ package jp.agentec.abook.abv.bl.acms.client.parameters;
import java.util.Date; import java.util.Date;
import jp.agentec.adf.util.DateTimeFormat;
import jp.agentec.adf.util.DateTimeUtil;
/** /**
* checkapi/unlockReport/のリクエストに使うパラメータ * checkapi/unlockReport/のリクエストに使うパラメータ
*/ */
...@@ -9,7 +12,7 @@ public class UnlockReportParameters extends AcmsParameters { ...@@ -9,7 +12,7 @@ public class UnlockReportParameters extends AcmsParameters {
private String taskKey; private String taskKey;
private Long taskReportId; private Long taskReportId;
private Date reportStartDate; private String reportStartDate; // 書式の問題があるので、あえて文字列
public UnlockReportParameters( public UnlockReportParameters(
String sid, String sid,
...@@ -21,18 +24,18 @@ public class UnlockReportParameters extends AcmsParameters { ...@@ -21,18 +24,18 @@ public class UnlockReportParameters extends AcmsParameters {
this.taskKey = taskKey; this.taskKey = taskKey;
this.taskReportId = taskReportId; this.taskReportId = taskReportId;
this.reportStartDate = reportStartDate; this.reportStartDate = DateTimeUtil.toString(reportStartDate, DateTimeFormat.yyyyMMddHHmmssSSS_hyphen);
} }
String getTaskKey() { public String getTaskKey() {
return taskKey; return taskKey;
} }
Long getTaskReportId() { public Long getTaskReportId() {
return taskReportId; return taskReportId;
} }
Date getReportStartDate() { public String getReportStartDate() {
return reportStartDate; return reportStartDate;
} }
} }
...@@ -164,6 +164,8 @@ public class AcmsApis { ...@@ -164,6 +164,8 @@ public class AcmsApis {
public static final String ApiLockReport = "lockReport"; public static final String ApiLockReport = "lockReport";
// 報告・点検のロック解除 // 報告・点検のロック解除
public static final String ApiUnlockReport = "unlockReport"; public static final String ApiUnlockReport = "unlockReport";
// ダッシュボード
public static final String ApiGetDashboardStatus = "getDashboardStatus";
// download // download
/** /**
...@@ -211,7 +213,9 @@ public class AcmsApis { ...@@ -211,7 +213,9 @@ public class AcmsApis {
methodName.equals(ApiSendPushMessage) || methodName.equals(ApiGetPushMessages) || methodName.equals(ApiSendRoutineTaskData) || methodName.equals(ApiSendPushMessage) || methodName.equals(ApiGetPushMessages) || methodName.equals(ApiSendRoutineTaskData) ||
methodName.equals(ApiGetMasterData) || methodName.equals(ApiGetMasterData) ||
// カテゴリ選択機能、IO帳票で3つ追加 // カテゴリ選択機能、IO帳票で3つ追加
methodName.equals(ApiOperationGroupMaster) || methodName.equals(ApiQuickReportSearch) || methodName.equals(ApiQuickReportRevision)) { methodName.equals(ApiOperationGroupMaster) || methodName.equals(ApiQuickReportSearch) || methodName.equals(ApiQuickReportRevision) ||
// ダッシュボード、ロック追加
methodName.equals(ApiGetDashboardStatus) || methodName.equals(ApiLockReport) || methodName.equals(ApiUnlockReport)) {
apiValue = Constant.ApiValue.checkapi; apiValue = Constant.ApiValue.checkapi;
} }
......
...@@ -36,6 +36,9 @@ public class ABookKeys { ...@@ -36,6 +36,9 @@ public class ABookKeys {
public static final String CMD_PAGE_NUM = "pageNum"; public static final String CMD_PAGE_NUM = "pageNum";
public static final String CMD_LOCK_REPORT = "lockReport"; public static final String CMD_LOCK_REPORT = "lockReport";
public static final String CMD_UNLOCK_REPORT = "unlockReport"; public static final String CMD_UNLOCK_REPORT = "unlockReport";
public static final String CMD_GET_REPORT_LIST = "getReportList";
public static final String CMD_GET_REPORT_STATUS_COUNT = "getReportStatusCount";
public static final String CMD_GO_REPORT_DETAIL = "goReportDetail";
public static final String GPS_TYPE = "gpsType"; public static final String GPS_TYPE = "gpsType";
public static final String STATUS_CODE = "statusCode"; public static final String STATUS_CODE = "statusCode";
......
...@@ -37,6 +37,7 @@ import jp.agentec.abook.abv.bl.data.tables.TEnquete; ...@@ -37,6 +37,7 @@ import jp.agentec.abook.abv.bl.data.tables.TEnquete;
import jp.agentec.abook.abv.bl.data.tables.TMarkingSetting; import jp.agentec.abook.abv.bl.data.tables.TMarkingSetting;
import jp.agentec.abook.abv.bl.data.tables.TOperation; import jp.agentec.abook.abv.bl.data.tables.TOperation;
import jp.agentec.abook.abv.bl.data.tables.TPushMessage; import jp.agentec.abook.abv.bl.data.tables.TPushMessage;
import jp.agentec.abook.abv.bl.data.tables.TTaskReportStatus;
import jp.agentec.abook.abv.bl.data.tables.TSppDevice; import jp.agentec.abook.abv.bl.data.tables.TSppDevice;
import jp.agentec.abook.abv.bl.data.tables.TTask; import jp.agentec.abook.abv.bl.data.tables.TTask;
import jp.agentec.abook.abv.bl.data.tables.TTaskReport; import jp.agentec.abook.abv.bl.data.tables.TTaskReport;
...@@ -97,6 +98,7 @@ public class ABVDataOpenHelper { ...@@ -97,6 +98,7 @@ public class ABVDataOpenHelper {
iTableScripts.add(new TTaskReportSend()); iTableScripts.add(new TTaskReportSend());
iTableScripts.add(new TTaskReportItems()); iTableScripts.add(new TTaskReportItems());
iTableScripts.add(new TPushMessage()); iTableScripts.add(new TPushMessage());
iTableScripts.add(new TTaskReportStatus());
// SPP通信端末管理テーブルをスクリプトに追加 // SPP通信端末管理テーブルをスクリプトに追加
iTableScripts.add(new TSppDevice()); iTableScripts.add(new TSppDevice());
......
...@@ -19,7 +19,7 @@ import jp.agentec.abook.abv.bl.common.db.SQLiteDatabase; ...@@ -19,7 +19,7 @@ import jp.agentec.abook.abv.bl.common.db.SQLiteDatabase;
public class DBConnector { public class DBConnector {
private static volatile DBConnector dbConnector = null; private static volatile DBConnector dbConnector = null;
public static final String DatabaseName = "ABVJE"; public static final String DatabaseName = "ABVJE";
public static final int DatabaseVersion = DatabaseVersions.Ver1_0_5; public static final int DatabaseVersion = DatabaseVersions.Ver1_0_4;
protected SQLiteDatabase db = null; protected SQLiteDatabase db = null;
......
...@@ -5,7 +5,5 @@ public class DatabaseVersions { ...@@ -5,7 +5,5 @@ public class DatabaseVersions {
public static final int Ver1_0_0 = 1; public static final int Ver1_0_0 = 1;
public static final int Ver1_0_2 = 11; // SATO HACCP 1.0.2 public static final int Ver1_0_2 = 11; // SATO HACCP 1.0.2
public static final int Ver1_0_3 = 21; // @From カテゴリ選択機能追加 public static final int Ver1_0_3 = 21; // @From カテゴリ選択機能追加
public static final int Ver1_0_4 = 31; // @From 作業の進捗状況を追加 public static final int Ver1_0_4 = 31; // @From ロック、ダッシュボード対応
public static final int Ver1_0_5 = 41; // @From 作業のロック、差し戻し対応
public static final int Ver1_0_6 = 51; // @From 作業のロック情報を追加
} }
package jp.agentec.abook.abv.bl.data.dao;
import org.json.adf.JSONArray;
import org.json.adf.JSONObject;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import jp.agentec.abook.abv.bl.common.db.Cursor;
import jp.agentec.abook.abv.bl.data.tables.TTaskReportStatus;
import jp.agentec.abook.abv.bl.dto.DashboardStatusDto;
import jp.agentec.abook.abv.bl.dto.ReportStatusCountDto;
import jp.agentec.abook.abv.bl.dto.ReportStatusDto;
import jp.agentec.adf.util.DateTimeFormat;
import jp.agentec.adf.util.DateTimeUtil;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStatusCount;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStatusCountList;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStatusId;
public class ReportStatusDao extends AbstractDao {
public void insert(DashboardStatusDto dto) {
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO ").append(TTaskReportStatus.tableName).append(" (");
sql.append(" task_key,");
sql.append(" task_report_id,");
sql.append(" report_start_date,");
sql.append(" operation_id,");
sql.append(" operation_name,");
sql.append(" report_status,");
sql.append(" untouched_flg,");
sql.append(" working_flg,");
sql.append(" complete_ok_flg,");
sql.append(" complete_ng_flg,");
sql.append(" incomplete_flg,");
sql.append(" alert_flg,");
sql.append(" send_backed_flg)");
sql.append(" VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");
insert(sql.toString(), dto.getInsertValues());
}
public void deleteAll() {
execSql("DELETE FROM " + TTaskReportStatus.tableName);
}
private StringBuilder reportStatusSql() {
StringBuilder sql = new StringBuilder();
sql.append("SELECT");
sql.append(" t_task_report_status.report_status AS report_status,");
sql.append(" t_task_report_status.operation_id AS operation_id,");
sql.append(" t_task_report_status.operation_name AS operation_name,");
sql.append(" t_task_report.task_key AS task_key,");
sql.append(" t_task.task_code AS task_code,");
sql.append(" t_task_report.json_data AS json_data,");
sql.append(" t_task_report.task_report_id AS task_report_id,");
sql.append(" t_task_report.report_start_date AS report_start_date,");
sql.append(" t_task_report.report_lock_user_id AS report_lock_user_id,");
sql.append(" t_task_report.report_lock_user_name AS report_lock_user_name,");
sql.append(" t_task_report.report_lock_time AS report_lock_time,");
sql.append(" t_task_report.send_back_user_id AS send_back_user_id,");
sql.append(" t_task_report.send_back_user_name AS send_back_user_name,");
sql.append(" t_task_report.send_back_comment AS send_back_comment ");
sql.append(" FROM t_task_report ");
sql.append(" INNER JOIN t_task ");
sql.append(" ON t_task_report.task_key = t_task.task_key ");
sql.append(" INNER JOIN t_task_report_status");
// 定期点検の場合
sql.append(" ON (t_task_report.task_report_id = t_task_report_status.task_report_id");
sql.append(" AND t_task_report.report_start_date = t_task_report_status.report_start_date)");
// 報告の場合
sql.append(" OR (t_task_report.task_key = t_task_report_status.task_key");
sql.append(" AND t_task_report_status.task_report_id is null");
sql.append(" AND t_task_report_status.report_start_date is null)");
return sql;
}
public List<ReportStatusDto> getUntouchedReport() {
StringBuilder sql = reportStatusSql();
sql.append("WHERE t_task_report_status.untouched_flg <> 0");
return rawQueryGetDtoList(sql.toString(), new String[] {}, ReportStatusDto.class);
}
public List<ReportStatusDto> getWorkingReport() {
StringBuilder sql = reportStatusSql();
sql.append("WHERE t_task_report_status.working_flg <> 0");
return rawQueryGetDtoList(sql.toString(), new String[] {}, ReportStatusDto.class);
}
public List<ReportStatusDto> getCompleteOkReport() {
StringBuilder sql = reportStatusSql();
sql.append("WHERE t_task_report_status.complete_ok_flg <> 0");
return rawQueryGetDtoList(sql.toString(), new String[] {}, ReportStatusDto.class);
}
public List<ReportStatusDto> getCompleteNgReport() {
StringBuilder sql = reportStatusSql();
sql.append("WHERE t_task_report_status.complete_ng_flg <> 0");
return rawQueryGetDtoList(sql.toString(), new String[] {}, ReportStatusDto.class);
}
public List<ReportStatusDto> getIncompleteReport() {
StringBuilder sql = reportStatusSql();
sql.append("WHERE t_task_report_status.incomplete_flg <> 0");
return rawQueryGetDtoList(sql.toString(), new String[] {}, ReportStatusDto.class);
}
public List<ReportStatusDto> getAlertReport() {
StringBuilder sql = reportStatusSql();
sql.append("WHERE t_task_report_status.alert_flg <> 0");
return rawQueryGetDtoList(sql.toString(), new String[] {}, ReportStatusDto.class);
}
public List<ReportStatusDto> getSendBackedReport() {
StringBuilder sql = reportStatusSql();
sql.append("WHERE t_task_report_status.send_backed_flg <> 0");
return rawQueryGetDtoList(sql.toString(), new String[] {}, ReportStatusDto.class);
}
public List<ReportStatusDto> getPendingReport() {
StringBuilder sql = new StringBuilder();
sql.append("SELECT");
sql.append(" 0 AS report_status,");
sql.append(" t_operation.operation_id AS operation_id,");
sql.append(" t_operation.operation_name AS operation_name,");
sql.append(" t_task_report.task_key AS task_key,");
sql.append(" t_task.task_code AS task_code,");
sql.append(" t_task_report.json_data AS json_data,");
sql.append(" t_task_report.task_report_id AS task_report_id,");
sql.append(" t_task_report.report_start_date AS report_start_date,");
sql.append(" t_task_report.report_lock_user_id AS report_lock_user_id,");
sql.append(" t_task_report.report_lock_user_name AS report_lock_user_name,");
sql.append(" t_task_report.report_lock_time AS report_lock_time,");
sql.append(" t_task_report.send_back_user_id AS send_back_user_id,");
sql.append(" t_task_report.send_back_user_name AS send_back_user_name,");
sql.append(" t_task_report.send_back_comment AS send_back_comment ");
sql.append(" FROM t_task_report ");
sql.append(" INNER JOIN t_task ");
sql.append(" ON t_task_report.task_key = t_task.task_key ");
sql.append(" INNER JOIN t_operation ");
sql.append(" ON t_task.operation_id = t_operation.operation_id ");
sql.append(" WHERE t_task_report.local_saved_flg <> 0");
return rawQueryGetDtoList(sql.toString(), new String[] {}, ReportStatusDto.class);
}
@Override
protected ReportStatusDto convert(Cursor cursor) {
ReportStatusDto dto = new ReportStatusDto();
dto.reportStatus = intOrZero(cursor, "report_status");
dto.operationId = longOrZero(cursor, "operation_id");
dto.operationName = stringOrEmpty(cursor, "operation_name");
dto.taskKey = stringOrEmpty(cursor, "task_key");
dto.taskCode = stringOrNull(cursor, "task_code");
dto.taskReportInfo = stringOrEmpty(cursor, "json_data");
dto.taskReportId = longOrNull(cursor, "task_report_id");
dto.reportStartDate = dateOrNull(cursor, "report_start_date");
dto.reportLockUserId = stringOrNull(cursor, "report_lock_user_id");
dto.reportLockUserName = stringOrNull(cursor, "report_lock_user_name");
dto.reportLockTime = dateOrNull(cursor, "report_lock_time");
dto.sendBackUserId = stringOrNull(cursor, "send_back_user_id");
dto.sendBackUserName = stringOrNull(cursor, "send_back_user_name");
dto.sendBackComment = stringOrNull(cursor, "send_back_comment");
return dto;
}
private String stringOrNull(Cursor cursor, String name) {
int column = cursor.getColumnIndex(name);
if (column < 0) {
return null;
} else {
return cursor.getString(column);
}
}
private String stringOrEmpty(Cursor cursor, String name) {
int column = cursor.getColumnIndex(name);
if (column < 0) {
return "";
} else {
return cursor.getString(column);
}
}
private Date dateOrNull(Cursor cursor, String name) {
int column = cursor.getColumnIndex(name);
if (column < 0) {
return null;
} else {
String date = cursor.getString(column);
return DateTimeUtil.toDate(date, "UTC", DateTimeFormat.yyyyMMdd_hyphen);
}
}
private int intOrZero(Cursor cursor, String name) {
int column = cursor.getColumnIndex(name);
if (column < 0) {
return 0;
} else {
return cursor.getInt(column);
}
}
private long longOrZero(Cursor cursor, String name) {
int column = cursor.getColumnIndex(name);
if (column < 0) {
return 0;
} else {
return cursor.getLong(column);
}
}
private Long longOrNull(Cursor cursor, String name) {
int column = cursor.getColumnIndex(name);
if (column < 0) {
return null;
} else {
return cursor.getLong(column);
}
}
public List<ReportStatusCountDto> getReportStatusCountList() {
List<ReportStatusCountDto> list = new ArrayList<ReportStatusCountDto>();
/*
0:未実施、1:作業中、
2:作業完了(異常なし)、
3:作業完了(異常あり)、
4:期限切れ、5:アラート、
6:差し戻し、7:一時保存
*/
list.add(makeDto(0, getUntouchedReport().size()));
list.add(makeDto(1, getWorkingReport().size()));
list.add(makeDto(2, getCompleteOkReport().size()));
list.add(makeDto(3, getCompleteNgReport().size()));
list.add(makeDto(4, getIncompleteReport().size()));
list.add(makeDto(5, getAlertReport().size()));
list.add(makeDto(6, getSendBackedReport().size()));
list.add(makeDto(7, getPendingReport().size()));
return list;
}
private ReportStatusCountDto makeDto(int id, int count) {
return new ReportStatusCountDto(String.valueOf(id), String.valueOf(count));
}
public JSONObject getReportStatusCountJson() {
JSONArray list = new JSONArray();
for (ReportStatusCountDto dto: getReportStatusCountList()) {
JSONObject json = new JSONObject();
json.put(ReportStatusId, dto.getReportStatusId());
json.put(ReportStatusCount, dto.getReportStatusCount());
list.put(json);
}
JSONObject result = new JSONObject();
result.put(ReportStatusCountList, list);
return result;
}
}
...@@ -177,7 +177,7 @@ public class TaskReportDao extends AbstractDao { ...@@ -177,7 +177,7 @@ public class TaskReportDao extends AbstractDao {
*/ */
public boolean update(TaskReportDto dto) { public boolean update(TaskReportDto dto) {
Object[] objects; Object[] objects;
StringBuffer sql = new StringBuffer(); StringBuilder sql = new StringBuilder();
sql.append("UPDATE t_task_report SET "); sql.append("UPDATE t_task_report SET ");
sql.append("json_data=?, "); sql.append("json_data=?, ");
sql.append("attached_file_name=?, "); sql.append("attached_file_name=?, ");
...@@ -223,15 +223,17 @@ public class TaskReportDao extends AbstractDao { ...@@ -223,15 +223,17 @@ public class TaskReportDao extends AbstractDao {
* @param reportLockUserId * @param reportLockUserId
* @param reportLockUserName * @param reportLockUserName
* @param reportLockTime * @param reportLockTime
* @param loginId
* @return * @return
*/ */
public boolean updateReportLock( public void updateReportLock(
String taskKey, String taskKey,
Date reportStartDate, Date reportStartDate,
int reportStatus, int reportStatus,
String reportLockUserId, String reportLockUserId,
String reportLockUserName, String reportLockUserName,
Date reportLockTime Date reportLockTime,
String loginId
) { ) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
List<Object> args = new ArrayList<Object>(); List<Object> args = new ArrayList<Object>();
...@@ -241,7 +243,7 @@ public class TaskReportDao extends AbstractDao { ...@@ -241,7 +243,7 @@ public class TaskReportDao extends AbstractDao {
sql.append(" report_lock_user_id=?, "); sql.append(" report_lock_user_id=?, ");
sql.append(" report_lock_user_name=?, "); sql.append(" report_lock_user_name=?, ");
sql.append(" report_lock_time=? "); sql.append(" report_lock_time=? ");
sql.append("WHERE task_key=? "); sql.append(" WHERE task_key=? ");
if (reportStartDate != null) { if (reportStartDate != null) {
sql.append("AND datetime(report_start_date)=datetime(?);"); sql.append("AND datetime(report_start_date)=datetime(?);");
} }
...@@ -254,8 +256,11 @@ public class TaskReportDao extends AbstractDao { ...@@ -254,8 +256,11 @@ public class TaskReportDao extends AbstractDao {
if (reportStartDate != null) { if (reportStartDate != null) {
args.add(reportStartDate); args.add(reportStartDate);
} }
if (loginId != null) {
args.add(loginId);
}
return update(sql.toString(), args.toArray()) > 0; update(sql.toString(), args.toArray());
} }
/** /**
......
...@@ -46,6 +46,8 @@ public class TTaskReport extends SQLiteTableScript { ...@@ -46,6 +46,8 @@ public class TTaskReport extends SQLiteTableScript {
sql.append(" ) "); sql.append(" ) ");
ddl.add(sql.toString()); ddl.add(sql.toString());
ddl.add("CREATE INDEX idx_task_key1 ON t_task_report(task_key, task_report_id, report_start_date)");
return ddl; return ddl;
} }
...@@ -53,7 +55,7 @@ public class TTaskReport extends SQLiteTableScript { ...@@ -53,7 +55,7 @@ public class TTaskReport extends SQLiteTableScript {
@Override @Override
public List<String> getUpgradeScript(int oldVersion, int newVersion) { public List<String> getUpgradeScript(int oldVersion, int newVersion) {
List<String> ddl = new ArrayList<String>(); List<String> ddl = new ArrayList<String>();
if (oldVersion < DatabaseVersions.Ver1_0_5) { if (oldVersion < DatabaseVersions.Ver1_0_4) {
ddl.add(" ALTER TABLE t_task_report ADD COLUMN report_lock_user_id TEXT"); // 報告ロックユーザId ddl.add(" ALTER TABLE t_task_report ADD COLUMN report_lock_user_id TEXT"); // 報告ロックユーザId
ddl.add(" ALTER TABLE t_task_report ADD COLUMN report_lock_user_name TEXT"); //報告ロックユーザ名 ddl.add(" ALTER TABLE t_task_report ADD COLUMN report_lock_user_name TEXT"); //報告ロックユーザ名
ddl.add(" ALTER TABLE t_task_report ADD COLUMN report_lock_time DATETIME"); // 報告ロック日時 ddl.add(" ALTER TABLE t_task_report ADD COLUMN report_lock_time DATETIME"); // 報告ロック日時
...@@ -61,10 +63,11 @@ public class TTaskReport extends SQLiteTableScript { ...@@ -61,10 +63,11 @@ public class TTaskReport extends SQLiteTableScript {
ddl.add(" ALTER TABLE t_task_report ADD COLUMN send_back_user_name TEXT"); // 差し戻しユーザ名 差し戻された場合のみ ddl.add(" ALTER TABLE t_task_report ADD COLUMN send_back_user_name TEXT"); // 差し戻しユーザ名 差し戻された場合のみ
ddl.add(" ALTER TABLE t_task_report ADD COLUMN send_back_comment TEXT"); // 確認コメント 差し戻された場合のみ ddl.add(" ALTER TABLE t_task_report ADD COLUMN send_back_comment TEXT"); // 確認コメント 差し戻された場合のみ
ddl.add(" ALTER TABLE t_task_report ADD COLUMN task_status INTEGER NOT NULL DEFAULT 0"); // 状況 0:未実施、1:作業中、999:作業完了 ddl.add(" ALTER TABLE t_task_report ADD COLUMN task_status INTEGER NOT NULL DEFAULT 0"); // 状況 0:未実施、1:作業中、999:作業完了
}
if (oldVersion < DatabaseVersions.Ver1_0_6) {
ddl.add(" ALTER TABLE t_task_report ADD COLUMN report_status INTEGER NOT NULL DEFAULT 0"); // 0:ロック成功、1:ロック中、2:承認中、999:その他エラー ddl.add(" ALTER TABLE t_task_report ADD COLUMN report_status INTEGER NOT NULL DEFAULT 0"); // 0:ロック成功、1:ロック中、2:承認中、999:その他エラー
ddl.add("CREATE INDEX idx_task_key1 on t_task_report(task_key, task_id, report_start_date)");
ddl.add("CREATE INDEX idx_task_key2 on t_task_report_status(task_key, task_id, report_start_date)");
} }
return ddl; return ddl;
} }
......
package jp.agentec.abook.abv.bl.data.tables;
import java.util.ArrayList;
import java.util.List;
import jp.agentec.abook.abv.bl.common.db.SQLiteDatabase;
import static jp.agentec.abook.abv.bl.data.DatabaseVersions.Ver1_0_4;
public class TTaskReportStatus extends SQLiteTableScript {
public static final String tableName = "t_task_report_status";
@Override
public List<String> getCreateScript(int version) {
List<String> ddl = new ArrayList<String>();
StringBuilder sql = new StringBuilder();
sql.append("CREATE TABLE " + tableName +" ( ");
sql.append(" task_key TEXT NOT NULL DEFAULT '',");
sql.append(" task_code TEXT NOT NULL DEFAULT '',");
sql.append(" task_report_id INTEGER,");
sql.append(" report_start_date DATETIME,");
sql.append(" operation_id BIGINT NOT NULL DEFAULT 0,");
sql.append(" operation_name TEXT NOT NULL DEFAULT '',");
sql.append(" report_status INTEGER NOT NULL DEFAULT 0,");
sql.append(" untouched_flg INTEGER NOT NULL DEFAULT 0,"); // 未実施(0x01)
sql.append(" working_flg INTEGER NOT NULL DEFAULT 0,"); // 作業中(0x02)
sql.append(" complete_ok_flg INTEGER NOT NULL DEFAULT 0,"); // 作業完了 異常なし(0x04)
sql.append(" complete_ng_flg INTEGER NOT NULL DEFAULT 0,"); // 作業完了 異常あり(0x08)
sql.append(" incomplete_flg INTEGER NOT NULL DEFAULT 0,"); // 期限切れ(0x10)
sql.append(" alert_flg INTEGER NOT NULL DEFAULT 0,"); // アラート(0x20)
sql.append(" send_backed_flg INTEGER NOT NULL DEFAULT 0)"); // 差し戻し(0x40)
ddl.add(sql.toString());
ddl.add("CREATE INDEX idx_task_key2 ON t_task_report_status(task_key, task_report_id, report_start_date)");
return ddl;
}
@Override
public List<String> getUpgradeScript(int oldVersion, int newVersion) {
if (oldVersion < Ver1_0_4) {
return getCreateScript(newVersion);
} else {
return null;
}
}
@Override
public List<String> getMigrationScript(SQLiteDatabase databaseConnection, int oldVersion, int newVersion, Object[] params) {
return null;
}
}
package jp.agentec.abook.abv.bl.dto;
import java.util.Date;
import jp.agentec.adf.util.DateTimeFormat;
import jp.agentec.adf.util.DateTimeUtil;
public class DashboardStatusDto extends AbstractDto {
private static final int FLG_UNTOUCHED = 0x01; // 未実施(0x01)
private static final int FLG_WORKING = 0x02; // 作業中(0x02)
private static final int FLG_COMPLETE_OK = 0x04; // 作業完了 異常なし(0x04)
private static final int FLG_COMPLETE_NG = 0x08; // 作業完了 異常あり(0x08)
private static final int FLD_INCOMPLETED = 0x10; // 期限切れ(0x10)
private static final int FLG_ALERT = 0x20; // アラート(0x20)
private static final int FLG_SEND_BACK = 0x40; // 差し戻し(0x40)
public static int UNTOUCHED = 0; // 0:未実施
public static int WORKING = 1; // 1:作業中
public static int COMPLETE_OK = 2; // 2:作業完了(異常なし)
public static int COMPLETE_NG = 3; // 3:作業完了(異常あり)
public static int INCOMPLETED = 4; // 4:期限切れ
public static int ALERT = 5; // 5:アラート
public static int SEND_BACKED = 6; // 6:差し戻し
public static int IN_PROGRESS = 7; // 7:一時保存
// taskReportを一意にさすためのキー
private String taskKey;
private Long taskReportId;
private Date reportStartDate;
// 一覧表示で必要な付加情報
private long operationId;
private String operationName;
// taskの状態を示すビットフィールド
private int reportStatus;
// reportStatusの各ビットに対応するフラグ
private int untouchedFlg;
private int workingFlg;
private int completeOkFlg;
private int completeNgFlg;
private int incompleteFlg;
private int alertFlg;
private int sendBackedFlg;
public DashboardStatusDto(
String taskKey,
Long taskReportId,
Date reportStartDate,
long operationId,
String operatonName,
int reportStatus
) {
this.taskKey = taskKey;
this.taskReportId = taskReportId;
this.reportStartDate = reportStartDate;
this.operationId = operationId;
this.operationName = operatonName;
this.reportStatus = reportStatus;
untouchedFlg = reportStatus & FLG_UNTOUCHED;
workingFlg = reportStatus & FLG_WORKING;
completeOkFlg = reportStatus & FLG_COMPLETE_OK;
completeNgFlg = reportStatus & FLG_COMPLETE_NG;
incompleteFlg = reportStatus & FLD_INCOMPLETED;
alertFlg = reportStatus & FLG_ALERT;
sendBackedFlg = reportStatus & FLG_SEND_BACK;
}
@Override
public String[] getKeyValues() {
return new String[] {
String.valueOf(taskKey),
String.valueOf(taskReportId),
DateTimeUtil.toString(reportStartDate, DateTimeFormat.yyyyMMdd_hyphen)
};
}
@Override
public Object[] getInsertValues() {
return new Object[] {
taskKey,
taskReportId,
reportStartDate,
operationId,
operationName,
reportStatus,
untouchedFlg, // 未実施(0x01)
workingFlg, // 作業中(0x02)
completeOkFlg, // 作業完了 異常なし(0x04)
completeNgFlg, // 作業完了 異常あり(0x08)
incompleteFlg, // 期限切れ(0x10)
alertFlg, // アラート(0x20)
sendBackedFlg // 差し戻し(0x40)
};
}
public String getTaskKey() {
return taskKey;
}
public Long getTaskReportId() {
return taskReportId;
}
public Date getReportStartDate() {
return reportStartDate;
}
public int getReportStatus() {
return reportStatus;
}
public long getOperationId() {
return operationId;
}
public String getOperationName() {
return operationName;
}
}
package jp.agentec.abook.abv.bl.dto;
public class ReportStatusCountDto extends AbstractDto {
@Override
public String[] getKeyValues() {
return new String[0];
}
@Override
public Object[] getInsertValues() {
return new Object[0];
}
public ReportStatusCountDto(String id, String count) {
reportStatusId = id;
reportStatusCount = count;
}
private final String reportStatusId;
private final String reportStatusCount;
public String getReportStatusId() {
return reportStatusId;
}
public String getReportStatusCount() {
return reportStatusCount;
}
}
package jp.agentec.abook.abv.bl.dto;
import java.util.Date;
import jp.agentec.adf.util.DateTimeFormat;
import jp.agentec.adf.util.DateTimeUtil;
public class ReportStatusDto extends AbstractDto {
public int reportStatus;
public long operationId;
public String operationName;
public String taskKey;
public String taskCode;
public String taskReportInfo;
public Long taskReportId;
public Date reportStartDate;
public String reportLockUserId;
public String reportLockUserName;
public Date reportLockTime;
public String sendBackUserId;
public String sendBackUserName;
public String sendBackComment;
@Override
public String[] getKeyValues() {
return new String[0];
}
@Override
public Object[] getInsertValues() {
return new Object[0];
}
public int getReportStatus() {
return reportStatus;
}
public long getOperationId() {
return operationId;
}
public String getOperationName() {
return operationName;
}
public String getTaskKey() {
return taskKey;
}
public String getTaskCode() {
return taskCode;
}
public String getTaskReportInfo() {
return taskReportInfo;
}
public Long getTaskReportId() {
return taskReportId;
}
public Date getReportStartDate() {
return reportStartDate;
}
public String getReportStartDateAsString() {
return DateTimeUtil.toString(reportStartDate, DateTimeFormat.yyyyMMddHHmmss_hyphen);
}
public String getReportLockUserId() {
return reportLockUserId;
}
public String getReportLockUserName() {
return reportLockUserName;
}
public Date getReportLockTime() {
return reportLockTime;
}
public String getReportLockTimeAsString() {
return DateTimeUtil.toString(reportLockTime, DateTimeFormat.yyyyMMddHHmmss_hyphen);
}
public String getSendBackUserId() {
return sendBackUserId;
}
public String getSendBackUserName() {
return sendBackUserName;
}
public String getSendBackComment() {
return sendBackComment;
}
}
package jp.agentec.abook.abv.bl.dto.comparator;
import java.util.Comparator;
import jp.agentec.abook.abv.bl.dto.ReportStatusDto;
public class ReportStatusCompalator implements Comparator<ReportStatusDto> {
@Override
public int compare(ReportStatusDto o1, ReportStatusDto o2) {
if (o1 == null && o2 == null) {
return 0;
} else if (o1 == null) {
return 1;
} else if (o2 == null) {
return -1;
}
return Long.compare(o1.getOperationId(), o2.getOperationId());
}
}
...@@ -3,11 +3,12 @@ package jp.agentec.abook.abv.bl.logic; ...@@ -3,11 +3,12 @@ package jp.agentec.abook.abv.bl.logic;
import org.json.adf.JSONObject; import org.json.adf.JSONObject;
import java.util.Date; import java.util.Date;
import java.util.Map;
import jp.agentec.abook.abv.bl.acms.client.AcmsClient; import jp.agentec.abook.abv.bl.acms.client.AcmsClient;
import jp.agentec.abook.abv.bl.acms.client.json.LockReportJSON; import jp.agentec.abook.abv.bl.acms.client.json.LockReportJSON;
import jp.agentec.abook.abv.bl.acms.client.parameters.LockReportParameters; import jp.agentec.abook.abv.bl.acms.client.parameters.LockReportParameters;
import jp.agentec.abook.abv.bl.data.dao.AbstractDao;
import jp.agentec.abook.abv.bl.data.dao.TaskReportDao;
import jp.agentec.abook.abv.bl.dto.MemberInfoDto; import jp.agentec.abook.abv.bl.dto.MemberInfoDto;
import jp.agentec.adf.util.DateTimeFormat; import jp.agentec.adf.util.DateTimeFormat;
import jp.agentec.adf.util.DateTimeUtil; import jp.agentec.adf.util.DateTimeUtil;
...@@ -27,15 +28,12 @@ public class LockReportLogic extends AbstractLogic { ...@@ -27,15 +28,12 @@ public class LockReportLogic extends AbstractLogic {
return new LockReportLogic(); return new LockReportLogic();
} }
public Result lock(Map<String, String> param) { public Result lock(String taskKey, Long taskReportId, Date reportStartDate) {
Long taskReportId = longOrNull(param.get(TaskReportId)); Result r = sendLockReport(taskKey, taskReportId, reportStartDate);
Date reportStartDate = dateOrNull(param.get(ReportStartDate)); if (r.result == 0) {
updateLocalDB(taskKey, reportStartDate, r.getExtParam().reportStatus);
return sendLockReport( }
param.get(TASK_KEY), return r;
taskReportId,
reportStartDate
);
} }
private Result sendLockReport( private Result sendLockReport(
...@@ -67,20 +65,22 @@ public class LockReportLogic extends AbstractLogic { ...@@ -67,20 +65,22 @@ public class LockReportLogic extends AbstractLogic {
} }
} }
private Long longOrNull(String s) { private void updateLocalDB(
try { String taskKey,
return Long.valueOf(s); Date reportStartDate,
} catch (Exception e) { int reportStatus
return null; ) {
} MemberInfoDto member = cache.getMemberInfo();
} TaskReportDao dao = AbstractDao.getDao(TaskReportDao.class);
dao.updateReportLock(
private Date dateOrNull(String s) { taskKey,
try { reportStartDate,
return DateTimeUtil.toDate(s, "UTC", DateTimeFormat.yyyyMMdd_hyphen); reportStatus,
} catch (Exception e) { member.loginId,
return null; member.memberName,
} new Date(),
null
);
} }
// コールバック用のパラメータ // コールバック用のパラメータ
...@@ -176,23 +176,27 @@ public class LockReportLogic extends AbstractLogic { ...@@ -176,23 +176,27 @@ public class LockReportLogic extends AbstractLogic {
this.reportStartDate = reportStartDate; this.reportStartDate = reportStartDate;
} }
@SuppressWarnings("unused")
public int getReportStatus() { public int getReportStatus() {
return reportStatus; return reportStatus;
} }
@SuppressWarnings("unused")
public String getReportLockUserId() { public String getReportLockUserId() {
return reportLockUserId; return reportLockUserId;
} }
@SuppressWarnings("unused")
public String getReportLockUserName() { public String getReportLockUserName() {
return reportLockUserName; return reportLockUserName;
} }
@SuppressWarnings("unused")
public Date getReportLockTime() { public Date getReportLockTime() {
return reportLockTime; return reportLockTime;
} }
@SuppressWarnings("unused")
public String json() { public String json() {
JSONObject extParam = new JSONObject(); JSONObject extParam = new JSONObject();
extParam.put(ReportStatus, String.valueOf(reportStatus)); extParam.put(ReportStatus, String.valueOf(reportStatus));
......
...@@ -24,8 +24,6 @@ import jp.agentec.abook.abv.bl.acms.client.json.SceneEntryJSON; ...@@ -24,8 +24,6 @@ import jp.agentec.abook.abv.bl.acms.client.json.SceneEntryJSON;
import jp.agentec.abook.abv.bl.acms.client.json.WorkerGroupJSON; import jp.agentec.abook.abv.bl.acms.client.json.WorkerGroupJSON;
import jp.agentec.abook.abv.bl.acms.client.parameters.AcmsParameters; import jp.agentec.abook.abv.bl.acms.client.parameters.AcmsParameters;
import jp.agentec.abook.abv.bl.acms.client.parameters.GetTaskFileParameters; import jp.agentec.abook.abv.bl.acms.client.parameters.GetTaskFileParameters;
import jp.agentec.abook.abv.bl.acms.type.OperationSortingType;
import jp.agentec.abook.abv.bl.acms.type.OperationType;
import jp.agentec.abook.abv.bl.common.ABVEnvironment; import jp.agentec.abook.abv.bl.common.ABVEnvironment;
import jp.agentec.abook.abv.bl.common.Constant; import jp.agentec.abook.abv.bl.common.Constant;
import jp.agentec.abook.abv.bl.common.Callback; import jp.agentec.abook.abv.bl.common.Callback;
...@@ -252,6 +250,12 @@ public class OperationLogic extends AbstractLogic { ...@@ -252,6 +250,12 @@ public class OperationLogic extends AbstractLogic {
String operationTaskDirPath = ABVEnvironment.getInstance().getOperationDirFile(deleteOperationDto.operationId); String operationTaskDirPath = ABVEnvironment.getInstance().getOperationDirFile(deleteOperationDto.operationId);
FileUtil.delete(operationTaskDirPath); FileUtil.delete(operationTaskDirPath);
} }
// 一通りの更新が終わってから、ダッシュボード用の情報を取得する
// todo
Logger.i(TAG, "update tasks on dashboard");
ReportStatusLogic logic = new ReportStatusLogic();
logic.loadReportStatus();
} }
/** /**
......
package jp.agentec.abook.abv.bl.logic;
import java.util.List;
import jp.agentec.abook.abv.bl.acms.client.AcmsClient;
import jp.agentec.abook.abv.bl.acms.client.json.DashboardStatusJSON;
import jp.agentec.abook.abv.bl.acms.client.parameters.AcmsParameters;
import jp.agentec.abook.abv.bl.common.exception.AcmsException;
import jp.agentec.abook.abv.bl.common.exception.NetworkDisconnectedException;
import jp.agentec.abook.abv.bl.common.log.Logger;
import jp.agentec.abook.abv.bl.data.dao.ReportStatusDao;
import jp.agentec.abook.abv.bl.dto.DashboardStatusDto;
public class ReportStatusLogic extends AbstractLogic {
private static final String TAG = "ReportStatusLogic";
private List<DashboardStatusDto> getDashboardStatus() {
if (!networkAdapter.isNetworkConnected()) {
return null;
}
try {
AcmsClient client = AcmsClient.getInstance(networkAdapter);
String sid = cache.getMemberInfo().sid;
AcmsParameters params = new AcmsParameters(sid);
DashboardStatusJSON statuses = client.getDashboardStatus(params);
return statuses.getReportStatuses();
} catch (NetworkDisconnectedException e) {
return null;
} catch (AcmsException e) {
Logger.e(TAG, e.getLocalizedMessage());
return null;
}
}
public void loadReportStatus() {
List<DashboardStatusDto> received = getDashboardStatus();
if (received != null && !received.isEmpty()) {
// DBの更新
ReportStatusDao dao = new ReportStatusDao();
dao.beginTransaction();
try {
dao.deleteAll();
for (DashboardStatusDto dto : received) {
dao.insert(dto);
}
dao.commit();
} catch (Throwable e) {
dao.rollback();
}
}
}
/**
* API checkapi/taskData/で得られた、
*   reportStatus
*   message
* をJavaScriptのコールバックを呼び出すときに使用するため保持しておくところ。
* スレッドセーフにはなっていないし、スコープはpublicだしという行儀の悪い実装方法であるが、
* APIの呼び出しとコールバックの呼び出しが、コードとして遠くに離れているので、
* 適切な方法がないため、やむなくこのような実装になっている。
*/
public static class TaskReportExtParam {
public String reportStatus; // 0:成功、2:承認中、999:その他エラー
public String message; // reportStatus = 0 以外の時のエラーメッセージ reportStatus = 0 の時は無し
private static TaskReportExtParam instance = null;
public static void stock(String reportStatus, String message) {
if (instance == null) {
instance = new TaskReportExtParam();
}
instance.reportStatus = reportStatus;
instance.message = message;
}
public static TaskReportExtParam pick() {
if (instance == null || instance.reportStatus == null) {
return null;
} else {
return instance;
}
}
public static void clear() {
if (instance != null) {
instance.message = null;
instance.reportStatus = null;
}
}
}
}
...@@ -3,13 +3,14 @@ package jp.agentec.abook.abv.bl.logic; ...@@ -3,13 +3,14 @@ package jp.agentec.abook.abv.bl.logic;
import org.json.adf.JSONObject; import org.json.adf.JSONObject;
import java.util.Date; import java.util.Date;
import java.util.Map;
import jp.agentec.abook.abv.bl.acms.client.AcmsClient; import jp.agentec.abook.abv.bl.acms.client.AcmsClient;
import jp.agentec.abook.abv.bl.acms.client.json.UnlockReportJSON; import jp.agentec.abook.abv.bl.acms.client.json.UnlockReportJSON;
import jp.agentec.abook.abv.bl.acms.client.parameters.UnlockReportParameters; import jp.agentec.abook.abv.bl.acms.client.parameters.UnlockReportParameters;
import jp.agentec.abook.abv.bl.common.ABVEnvironment; import jp.agentec.abook.abv.bl.common.ABVEnvironment;
import jp.agentec.abook.abv.bl.common.nw.NetworkAdapter; import jp.agentec.abook.abv.bl.common.nw.NetworkAdapter;
import jp.agentec.abook.abv.bl.data.dao.AbstractDao;
import jp.agentec.abook.abv.bl.data.dao.TaskReportDao;
import jp.agentec.adf.util.DateTimeFormat; import jp.agentec.adf.util.DateTimeFormat;
import jp.agentec.adf.util.DateTimeUtil; import jp.agentec.adf.util.DateTimeUtil;
...@@ -25,15 +26,13 @@ public class UnlockReportLogic extends AbstractLogic { ...@@ -25,15 +26,13 @@ public class UnlockReportLogic extends AbstractLogic {
return new UnlockReportLogic(); return new UnlockReportLogic();
} }
public Result unlock(Map<String, String> param) { public Result unlock(String taskKey, Long taskReportId, Date reportStartDate) {
Long taskReportId = longOrNull(param.get(TaskReportId)); String loginId = cache.getMemberInfo().loginId;
Date reportStartDate = dateOrNull(param.get(ReportStartDate)); Result r = sendUnlockReport(taskKey, taskReportId, reportStartDate);
if (r.result == 0) {
return sendUnlockReport( updateLocalDB(taskKey, reportStartDate, r.extParam.getReportStatus(), loginId);
param.get(TaskKey), }
taskReportId, return r;
reportStartDate
);
} }
private Result sendUnlockReport( private Result sendUnlockReport(
...@@ -63,20 +62,23 @@ public class UnlockReportLogic extends AbstractLogic { ...@@ -63,20 +62,23 @@ public class UnlockReportLogic extends AbstractLogic {
} }
} }
private Long longOrNull(String s) { private void updateLocalDB(
try { String taskKey,
return Long.valueOf(s); Date reportStartDate,
} catch (Exception e) { int reportStatus,
return null; String loginId
} ) {
} // ローカルDBに反映
TaskReportDao dao = AbstractDao.getDao(TaskReportDao.class);
private Date dateOrNull(String s) { dao.updateReportLock(
try { taskKey,
return DateTimeUtil.toDate(s, "UTC", DateTimeFormat.yyyyMMdd_hyphen); reportStartDate,
} catch (Exception e) { reportStatus,
return null; null,
} null,
null,
loginId
);
} }
// コールバック用のパラメータ // コールバック用のパラメータ
......
Subproject commit 7bcb5bfc6820f6ea7f9dc94d32dc982deaced578
package jp.agentec.abook.abv.ui.common.activity; package jp.agentec.abook.abv.ui.common.activity;
import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
...@@ -44,8 +45,6 @@ import jp.agentec.abook.abv.bl.common.Constant; ...@@ -44,8 +45,6 @@ import jp.agentec.abook.abv.bl.common.Constant;
import jp.agentec.abook.abv.bl.common.constant.ABookKeys; import jp.agentec.abook.abv.bl.common.constant.ABookKeys;
import jp.agentec.abook.abv.bl.common.log.Logger; import jp.agentec.abook.abv.bl.common.log.Logger;
import jp.agentec.abook.abv.bl.data.ABVDataCache; import jp.agentec.abook.abv.bl.data.ABVDataCache;
import jp.agentec.abook.abv.bl.data.dao.AbstractDao;
import jp.agentec.abook.abv.bl.data.dao.TaskReportDao;
import jp.agentec.abook.abv.bl.download.ContentFileExtractor; import jp.agentec.abook.abv.bl.download.ContentFileExtractor;
import jp.agentec.abook.abv.bl.dto.ContentDto; import jp.agentec.abook.abv.bl.dto.ContentDto;
import jp.agentec.abook.abv.bl.dto.MydataDto; import jp.agentec.abook.abv.bl.dto.MydataDto;
...@@ -55,6 +54,7 @@ import jp.agentec.abook.abv.bl.logic.AbstractLogic; ...@@ -55,6 +54,7 @@ import jp.agentec.abook.abv.bl.logic.AbstractLogic;
import jp.agentec.abook.abv.bl.logic.ContentReadingLogLogic; import jp.agentec.abook.abv.bl.logic.ContentReadingLogLogic;
import jp.agentec.abook.abv.bl.logic.LockReportLogic; import jp.agentec.abook.abv.bl.logic.LockReportLogic;
import jp.agentec.abook.abv.bl.logic.OperationLogic; import jp.agentec.abook.abv.bl.logic.OperationLogic;
import jp.agentec.abook.abv.bl.logic.ReportStatusLogic;
import jp.agentec.abook.abv.bl.logic.UnlockReportLogic; import jp.agentec.abook.abv.bl.logic.UnlockReportLogic;
import jp.agentec.abook.abv.bl.websocket.MeetingManager; import jp.agentec.abook.abv.bl.websocket.MeetingManager;
import jp.agentec.abook.abv.cl.environment.DeviceInfo; import jp.agentec.abook.abv.cl.environment.DeviceInfo;
...@@ -85,7 +85,10 @@ import jp.agentec.adf.util.DateTimeUtil; ...@@ -85,7 +85,10 @@ import jp.agentec.adf.util.DateTimeUtil;
import jp.agentec.adf.util.FileUtil; import jp.agentec.adf.util.FileUtil;
import jp.agentec.adf.util.StringUtil; import jp.agentec.adf.util.StringUtil;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.Message;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStartDate; import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStartDate;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStatus;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.TaskKey;
public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity { public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
...@@ -147,6 +150,7 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity { ...@@ -147,6 +150,7 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
private boolean mLocationSendResult; // GPS送信フラグ private boolean mLocationSendResult; // GPS送信フラグ
@SuppressLint("SourceLockedOrientationActivity")
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -652,7 +656,8 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity { ...@@ -652,7 +656,8 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
finish(); finish();
} }
protected void createCheckToolbar() { @SuppressLint("SourceLockedOrientationActivity")
protected void createCheckToolbar() {
final RelativeLayout fl; final RelativeLayout fl;
if (operationDto != null && operationDto.operationType == OperationType.PDF && mXWalkOpenType == Constant.XWalkOpenType.TASK_REPORT) { if (operationDto != null && operationDto.operationType == OperationType.PDF && mXWalkOpenType == Constant.XWalkOpenType.TASK_REPORT) {
fl = (RelativeLayout) findViewById(R.id.RelativeLayout2); fl = (RelativeLayout) findViewById(R.id.RelativeLayout2);
...@@ -889,11 +894,11 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity { ...@@ -889,11 +894,11 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
mAddReport = Integer.parseInt(abookCheckParam.get(ABookKeys.ADD_REPORT)) > 0 ? true : false; mAddReport = Integer.parseInt(abookCheckParam.get(ABookKeys.ADD_REPORT)) > 0 ? true : false;
} }
int taskReportId = 0; long taskReportId = 0;
String reportStartDate = ""; String reportStartDate = "";
if (operationDto.reportType == Constant.ReportType.RoutineTask && abookCheckParam.get(ABookKeys.TASK_REPORT_ID) != null && abookCheckParam.get(ABookKeys.REPORT_START_DATE) != null) { if (operationDto.reportType == Constant.ReportType.RoutineTask && abookCheckParam.get(ABookKeys.TASK_REPORT_ID) != null && abookCheckParam.get(ABookKeys.REPORT_START_DATE) != null) {
taskReportId = Integer.parseInt(abookCheckParam.get(ABookKeys.TASK_REPORT_ID)); taskReportId = Long.parseLong(abookCheckParam.get(ABookKeys.TASK_REPORT_ID));
reportStartDate = abookCheckParam.get(ABookKeys.REPORT_START_DATE); reportStartDate = abookCheckParam.get(ABookKeys.REPORT_START_DATE);
} }
...@@ -974,8 +979,15 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity { ...@@ -974,8 +979,15 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
afterABookCheckApi(mCmd, mTaskKey, 0, "", null, isOperationPdf()); afterABookCheckApi(mCmd, mTaskKey, 0, "", null, isOperationPdf());
return null; return null;
} }
if (mCmd.equals(ABookKeys.CMD_INSERT_TASK_REPORT) || mCmd.equals(ABookKeys.CMD_UPDATE_TASK_REPORT)) {
if (mAddReport) { // 作業追加ありの場合 ReportStatusLogic.TaskReportExtParam extParam = ReportStatusLogic.TaskReportExtParam.pick();
JSONObject extJson = new JSONObject();
if (extParam != null) {
extJson.put(ReportStatus, extParam.reportStatus);
extJson.put(Message, extParam.message);
}
afterABookCheckApi(mCmd, mTaskKey, 0, "", extJson.toString(), isOperationPdf());
} else if (mAddReport) { // 作業追加ありの場合
// コールバック処理のみ行う。 // コールバック処理のみ行う。
afterABookCheckApi(mCmd, mTaskKey, 0, "", null, isOperationPdf()); afterABookCheckApi(mCmd, mTaskKey, 0, "", null, isOperationPdf());
} else { } else {
...@@ -1079,45 +1091,19 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity { ...@@ -1079,45 +1091,19 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
// 1:中心温度計 2:置くだけセンサー 3:バーコード // 1:中心温度計 2:置くだけセンサー 3:バーコード
getDeviceInfo(abookCheckParam); getDeviceInfo(abookCheckParam);
} else if (mCmd.equals(ABookKeys.CMD_LOCK_REPORT)) { } else if (mCmd.equals(ABookKeys.CMD_LOCK_REPORT)) {
LockReportLogic.Result r = LockReportLogic.newInstance().lock(abookCheckParam); String taskKey = abookCheckParam.get(TaskKey);
// ローカルDBに反映 Date startDate = DateTimeUtil.toDate(reportStartDate, "UTC", DateTimeFormat.yyyyMMdd_hyphen);
TaskReportDao dao = AbstractDao.getDao(TaskReportDao.class); // ロック
dao.updateReportLock( LockReportLogic.Result r = LockReportLogic.newInstance().lock(taskKey, taskReportId, startDate);
mTaskKey,
dateOrNull(abookCheckParam.get(ReportStartDate)),
r.getExtParam().getReportStatus(),
r.getExtParam().getReportLockUserId(),
r.getExtParam().getReportLockUserName(),
r.getExtParam().getReportLockTime()
);
// JSコールバック // JSコールバック
afterABookCheckApi( afterABookCheckApi(mCmd, mTaskKey, r.getResult(), r.getMessage(), r.getExtParam().json());
mCmd,
mTaskKey,
r.getResult(),
r.getMessage(),
r.getExtParam().json()
);
} else if (mCmd.equals(ABookKeys.CMD_UNLOCK_REPORT)) { } else if (mCmd.equals(ABookKeys.CMD_UNLOCK_REPORT)) {
UnlockReportLogic.Result r = UnlockReportLogic.newInstance().unlock(abookCheckParam); String taskKey = abookCheckParam.get(TaskKey);
// ローカルDBに反映 Date startDate = dateOrNull(abookCheckParam.get("reportStartDate"));
TaskReportDao dao = AbstractDao.getDao(TaskReportDao.class); // アンロック
dao.updateReportLock( UnlockReportLogic.Result r = UnlockReportLogic.newInstance().unlock(taskKey, taskReportId, startDate);
mTaskKey,
dateOrNull(abookCheckParam.get(ReportStartDate)),
r.getExtParam().getReportStatus(),
null,
null,
null
);
// JSコールバック // JSコールバック
afterABookCheckApi( afterABookCheckApi(mCmd, mTaskKey, r.getResult(), r.getMessage(), r.getExtParam().json());
mCmd,
mTaskKey,
r.getResult(),
r.getMessage(),
r.getExtParam().json()
);
} }
} }
......
package jp.agentec.abook.abv.ui.home.activity; package jp.agentec.abook.abv.ui.home.activity;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.webkit.ValueCallback; import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient; import android.webkit.WebChromeClient;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
...@@ -15,14 +16,67 @@ import android.widget.ImageButton; ...@@ -15,14 +16,67 @@ import android.widget.ImageButton;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import org.json.adf.JSONArray;
import org.json.adf.JSONObject;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jp.agentec.abook.abv.bl.acms.type.OperationType;
import jp.agentec.abook.abv.bl.common.ABVEnvironment;
import jp.agentec.abook.abv.bl.common.Constant;
import jp.agentec.abook.abv.bl.common.constant.ABookKeys;
import jp.agentec.abook.abv.bl.common.log.Logger; import jp.agentec.abook.abv.bl.common.log.Logger;
import jp.agentec.abook.abv.bl.data.dao.AbstractDao;
import jp.agentec.abook.abv.bl.data.dao.OperationContentDao;
import jp.agentec.abook.abv.bl.data.dao.OperationDao;
import jp.agentec.abook.abv.bl.data.dao.ReportStatusDao;
import jp.agentec.abook.abv.bl.download.ContentFileExtractor;
import jp.agentec.abook.abv.bl.dto.ContentDto;
import jp.agentec.abook.abv.bl.dto.OperationContentDto;
import jp.agentec.abook.abv.bl.dto.OperationDto;
import jp.agentec.abook.abv.bl.dto.ReportStatusDto;
import jp.agentec.abook.abv.bl.dto.comparator.ReportStatusCompalator;
import jp.agentec.abook.abv.bl.logic.AbstractLogic;
import jp.agentec.abook.abv.bl.logic.LockReportLogic;
import jp.agentec.abook.abv.bl.logic.OperationLogic;
import jp.agentec.abook.abv.bl.logic.UnlockReportLogic;
import jp.agentec.abook.abv.launcher.android.R; import jp.agentec.abook.abv.launcher.android.R;
import jp.agentec.abook.abv.ui.common.constant.ErrorCode;
import jp.agentec.abook.abv.ui.home.helper.ActivityHandlingHelper;
import jp.agentec.abook.abv.ui.viewer.activity.HTMLXWalkWebViewActivity;
import jp.agentec.abook.abv.ui.viewer.view.CheckFormWebview; import jp.agentec.abook.abv.ui.viewer.view.CheckFormWebview;
import jp.agentec.adf.util.DateTimeFormat;
import jp.agentec.adf.util.DateTimeUtil;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.OperationId;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportList;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportLockTime;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportLockUserId;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportLockUserName;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStartDate;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.ReportStatusId;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.SendBackUserId;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.SendBackUserName;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.TaskKey;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.TaskReportId;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON.TaskReportInfo;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationListJSON.OperationList;
import static jp.agentec.abook.abv.bl.acms.client.json.OperationListJSON.OperationName;
import static jp.agentec.abook.abv.bl.common.constant.ABookKeys.CMD_GET_REPORT_LIST;
import static jp.agentec.abook.abv.bl.common.constant.ABookKeys.CMD_GET_REPORT_STATUS_COUNT;
import static jp.agentec.abook.abv.bl.common.constant.ABookKeys.CMD_GO_REPORT_DETAIL;
import static jp.agentec.abook.abv.bl.common.constant.ABookKeys.CMD_LOCK_REPORT;
import static jp.agentec.abook.abv.bl.common.constant.ABookKeys.CMD_UNLOCK_REPORT;
public class DashboardActivity extends OperationActivity { public class DashboardActivity extends OperationActivity {
private static final String TAG = "DashboardActivity"; private static final String TAG = "DashboardActivity";
private static final String DASHBOARD_URL = "file:///android_asset/dashboard/app/index.html";
private WebView webView; private WebView webView;
private String url = "https://abook188-1.abook.bz/acms/asp/login/";
private ProgressBar progress; private ProgressBar progress;
@Override @Override
...@@ -36,7 +90,7 @@ public class DashboardActivity extends OperationActivity { ...@@ -36,7 +90,7 @@ public class DashboardActivity extends OperationActivity {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Logger.d(TAG, "ReloadUrl"); Logger.d(TAG, "ReloadUrl");
webView.loadUrl(url + "&reload=true"); webView.loadUrl(DASHBOARD_URL);
} }
}); });
...@@ -47,7 +101,7 @@ public class DashboardActivity extends OperationActivity { ...@@ -47,7 +101,7 @@ public class DashboardActivity extends OperationActivity {
frameLayout.addView(webView, new LinearLayout.LayoutParams(FP, FP)); frameLayout.addView(webView, new LinearLayout.LayoutParams(FP, FP));
// 読み込み // 読み込み
webView.loadUrl(url); webView.loadUrl(DASHBOARD_URL);
} }
@Override @Override
...@@ -87,10 +141,10 @@ public class DashboardActivity extends OperationActivity { ...@@ -87,10 +141,10 @@ public class DashboardActivity extends OperationActivity {
} }
initSettings(webView.getSettings()); initSettings(webView.getSettings());
webView.setWebChromeClient(new ChromeClient()); webView.setWebChromeClient(new ChromeClient());
webView.setWebViewClient(new WebViewClient()); webView.setWebViewClient(new ViewClient());
// webView.addJavascriptInterface(jsInf, "android"); webView.addJavascriptInterface(new JsInf(), "android");
Logger.d(TAG, "loadUrl: " + url); Logger.d(TAG, "loadUrl: " + DASHBOARD_URL);
} }
@SuppressLint("SetJavaScriptEnabled") @SuppressLint("SetJavaScriptEnabled")
...@@ -124,54 +178,337 @@ public class DashboardActivity extends OperationActivity { ...@@ -124,54 +178,337 @@ public class DashboardActivity extends OperationActivity {
} }
} }
} }
}
private class JsInf {
@JavascriptInterface
public void existSetLocation(String ret) {
Logger.d(TAG, "existSetLocation=%s", ret);
if (ret != null && ret.equals("true")) { // setLocationメソッドが存在する場合、ページ読み込み完了とみなす
//isPageFinished = true;
} else { // 存在しない場合、ページ読み込み未完了とみなし1秒後に再度呼出しを繰り返す
handler.postDelayed(new Runnable() {
@Override
public void run() {
//callExistsSetLocation();
}
}, 1000);
}
}
@JavascriptInterface
public void existSendLog(String ret) {
Logger.d(TAG, "existSendLog=%s", ret);
if (ret != null && ret.equals("true")) {
runOnUiThread(new Runnable() { // sendLogメソッドが存在する場合、呼び出す
@Override
public void run() {
try {
webView.loadUrl("javascript:sendLog()");
} catch (Exception e) {
Logger.e(TAG, "javascript:sendLog error. " + e.toString());
}
}
});
} else {
finish();
}
}
@JavascriptInterface
public void getAttachedDataUrl(String taskKey, String data) {
//commonAttachedDataUrl(taskKey, data);
}
}
private class ViewClient extends WebViewClient {
@SuppressWarnings("deprecation")
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Logger.e(TAG, "onReceivedError errorCode=%s, description=%s, failingUrl=%s", errorCode, description, failingUrl);
}
@Override @Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, public boolean shouldOverrideUrlLoading(WebView view, String url) {
FileChooserParams fileChooserParams) { Logger.v(TAG, "shouldOverrideUrlLoading: %s", url);
Logger.i(TAG, "oepnFile acceptType : %s", fileChooserParams.getAcceptTypes()[0]);
if (url.startsWith("abook")) {
final Uri uri = Uri.parse(url);
// AndroidOSが5以下のPANO_SERVER処理のため、置き換える必要がある。
url = "/" + url;
if (url.contains(ABookKeys.ABOOK_CHECK_API)) {
return checkApiLoding(uri);
}
return true;
}
return false;
}
}
private boolean checkApiLoding(Uri uri) {
Map<String, String> param = new HashMap<>();
for (String key : uri.getQueryParameterNames()) {
param.put(key, uri.getQueryParameter(key));
}
String cmd = param.get(ABookKeys.CMD);
if (cmd == null) {
return false;
}
try {
switch (cmd) {
case CMD_GET_REPORT_STATUS_COUNT: {
return getReportStatusCount();
}
case CMD_GET_REPORT_LIST: {
String reportStatusId = param.get(ReportStatusId);
if (reportStatusId != null) {
return getReportList(Integer.parseInt(reportStatusId));
} else {
return false;
}
}
case CMD_GO_REPORT_DETAIL: {
Long operationId = getLongOrNull(param.get(OperationId));
if (operationId == null) {
return true;
} else {
return goReportDetail(operationId);
}
}
case CMD_LOCK_REPORT: {
String taskKey = param.get(TaskKey);
Long taskReportId = getLongOrNull(param.get(TaskReportId));
Date reportStartDate = getDateOrNull(param.get(ReportStartDate));
return lockReport(taskKey, taskReportId, reportStartDate);
}
case CMD_UNLOCK_REPORT: {
String taskKey = param.get(TaskKey);
Long taskReportId = getLongOrNull(param.get(TaskReportId));
Date reportStartDate = getDateOrNull(param.get(ReportStartDate));
return unlockReport(taskKey, taskReportId, reportStartDate);
}
}
} catch (Throwable e) {
Logger.e(TAG, e.getLocalizedMessage());
return false; return false;
} }
return false;
} }
// private class JsInf { private boolean getReportStatusCount() {
// //todo
// @JavascriptInterface return false;
// public void existSetLocation(String ret) { }
// Logger.d(TAG, "existSetLocation=%s", ret);
// if (ret != null && ret.equals("true")) { // setLocationメソッドが存在する場合、ページ読み込み完了とみなす private boolean getReportList(int reportStatusId) {
// isPageFinished = true; ReportStatusDao dao = AbstractDao.getDao(ReportStatusDao.class);
// } else { // 存在しない場合、ページ読み込み未完了とみなし1秒後に再度呼出しを繰り返す List<ReportStatusDto> reports = null;
// handler.postDelayed(new Runnable() { switch (reportStatusId) {
// @Override case 0: {
// public void run() { reports = dao.getUntouchedReport();
// callExistsSetLocation(); break;
// } }
// }, 1000); case 1: {
// } reports = dao.getWorkingReport();
// } break;
// }
// @JavascriptInterface case 2: {
// public void existSendLog(String ret) { reports = dao.getCompleteOkReport();
// Logger.d(TAG, "existSendLog=%s", ret); break;
// if (ret != null && ret.equals("true")) { }
// runOnUiThread(new Runnable() { // sendLogメソッドが存在する場合、呼び出す case 3: {
// @Override reports = dao.getCompleteNgReport();
// public void run() { break;
// try { }
// webView.loadUrl("javascript:sendLog()"); case 4: {
// } catch (Exception e) { reports = dao.getIncompleteReport();
// Logger.e(TAG, "javascript:sendLog error. " + e.toString()); break;
// } }
// } case 5: {
// }); reports = dao.getAlertReport();
// } else { break;
// finishActivity(); }
// } case 6: {
// } reports = dao.getSendBackedReport();
// break;
// @JavascriptInterface }
// public void getAttachedDataUrl(String taskKey, String data) { case 7: {
// commonAttachedDataUrl(taskKey, data); reports = dao.getPendingReport();
// } }
// } }
if (reports != null) {
JSONObject param = makeReportTree(reportStatusId, reports);
String script = "javascript:CHK_Dashboard.reportListCallback(" + reportStatusId + "," + param.toString() + ")";
webView.loadUrl(script);
return true;
} else {
return false;
}
}
private JSONObject makeReportTree(int reportStatusId, List<ReportStatusDto> reports) {
JSONObject tree = new JSONObject();
tree.put(ReportStatusId, reportStatusId);
JSONArray operationList = new JSONArray();
tree.put(OperationList, operationList);
// operationIDで、ソートしておく
Collections.sort(reports, new ReportStatusCompalator());
JSONObject operation = null;
for (ReportStatusDto report : reports) {
if (operation == null || operation.getLong(OperationId) != report.getOperationId()) {
// 新しい作業の追加
operation = new JSONObject();
operation.put(OperationId, report.getOperationId());
operation.put(OperationName, report.getOperationName());
operation.put(ReportList, new JSONArray());
tree.getJSONArray("operationList").put(operation);
}
JSONObject task = new JSONObject();
task.put(TaskKey, report.getTaskKey());
task.put(TaskReportInfo, report.getTaskReportInfo());
task.put(TaskReportId, report.getTaskReportId());
task.put(ReportStartDate, report.getReportStartDateAsString());
task.put(ReportLockUserId, report.getReportLockUserId());
task.put(ReportLockUserName, report.getReportLockUserName());
task.put(ReportLockTime, report.getReportLockTimeAsString());
task.put(SendBackUserId, report.getSendBackUserId());
task.put(SendBackUserName, report.getSendBackUserName());
operation.getJSONArray(ReportList).put(task);
}
return tree;
}
private boolean goReportDetail(long operationId) {
if (ActivityHandlingHelper.getInstance().isMeetingConnected()) {
return true;
}
// 新着更新を止める
contentRefresher.stopRefresh();
OperationDao operationDao = AbstractDao.getDao(OperationDao.class);
OperationDto operationDto = operationDao.getOperation(operationId);
// t_operationテーブルにcontent_idは含まれていないので、この時点でoperationDto.contentIdはnull
// なので、contentDtoを取り出す
OperationContentDao operationContentDao = AbstractDao.getDao(OperationContentDao.class);
OperationContentDto operationContentDto = operationContentDao.getOperationMainContent(operationId);
ContentDto contentDto = contentDao.getContent(operationContentDto.contentId);
try {
if (contentDto != null && contentDto.downloadedFlg) {
String contentPath = ABVEnvironment.getInstance().getTaskListDirName(ContentFileExtractor.getInstance().getContentCacheDirWithExtract(contentDto.contentId));
// プロジェクトの指示/報告表示時、必要なJSONファイル作成
OperationLogic operationLogic = AbstractLogic.getLogic(OperationLogic.class);
operationLogic.createJsonForOperationContent(operationDto.operationId, contentPath, operationDto.reportType == Constant.ReportType.RoutineTask);
// サーバ作業後、対応必要
StringBuilder path = new StringBuilder();
path.append(contentPath);
// #32926 作業報告画面改善 start
path.append("/index.html?app=android");
path.append("&report_type=").append(operationDto.reportType); // 作業報告タイプ : 0:報告 1:定期点検 2:報告(回答)
path.append("&mobile_flg=").append(isNormalSize() ? "1" : "0"); // ScreenType
Logger.d(TAG, "path : " + path);
Intent intent = new Intent();
intent.putExtra(ABookKeys.CONTENT_ID, operationDto.contentId);
intent.putExtra(ABookKeys.OPERATION_ID, operationDto.operationId);
intent.putExtra(Constant.ABookCheck.XWALK_OPEN_TYPE, Constant.XWalkOpenType.TASK_REPORT);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
if(operationDto.operationType == OperationType.PDF) {
intent.putExtra("LINKURL", "file://" + path);
ActivityHandlingHelper.getInstance().checkContentActivity(operationDto.contentId, 0, intent);
} else {
intent.setClass(this, HTMLXWalkWebViewActivity.class);
ActivityHandlingHelper.getInstance().startHTMLXWalkWebActivity(this, intent, "file://" + path, contentDto.contentId, -1, -1, -1, -1, -1);
}
return true;
} else {
Logger.w(TAG, "content is not download");
}
} catch (Exception e) {
Logger.e(TAG, e);
handleErrorMessageToast(ErrorCode.E107);
}
return false;
}
private boolean lockReport(String taskKey, Long taskReportId, Date reportStartDate) {
try {
LockReportLogic.Result r = LockReportLogic.newInstance().lock(taskKey, taskReportId, reportStartDate);
// JSコールバック
afterABookCheckApi(
CMD_LOCK_REPORT,
taskKey,
r.getResult(),
r.getMessage(),
r.getExtParam().json()
);
return true;
} catch (Throwable e) {
e.printStackTrace();
return false;
}
}
private boolean unlockReport(String taskKey, Long taskReportId, Date reportStartDate) {
try {
UnlockReportLogic.Result r = UnlockReportLogic.newInstance().unlock(taskKey, taskReportId, reportStartDate);
// JSコールバック
afterABookCheckApi(
CMD_UNLOCK_REPORT,
taskKey,
r.getResult(),
r.getMessage(),
r.getExtParam().json()
);
return true;
} catch (Throwable e) {
e.printStackTrace();
return false;
}
}
public void afterABookCheckApi(final String cmd, final String taskKey, final int result, final String message, final String extParam) {
Logger.v(TAG, "run javaScript for ABookCheck : cmd=%s, taskKey=%s, result=%s, message=%s", cmd, taskKey, result, message);
runOnUiThread(new Runnable() {
@Override
public void run() {
String callback = String.format("javascript:CHK.afterABookCheckApi('%s', '%s', '%s', '%s', %s)", cmd, taskKey, result, message, extParam);
Logger.i(TAG, callback);
webView.loadUrl(callback);
}
});
}
private Long getLongOrNull(String s) {
try {
return Long.parseLong(s);
} catch (Exception e) {
Logger.e(TAG, e.getLocalizedMessage());
return null;
}
}
private Date getDateOrNull(String s) {
try {
return DateTimeUtil.toDate(s, "UTC", DateTimeFormat.yyyyMMdd_hyphen);
} catch (Exception e) {
Logger.e(TAG, e.getLocalizedMessage());
return null;
}
}
} }
...@@ -633,6 +633,7 @@ public class EnqueteWebViewActivity extends ABVContentViewActivity { ...@@ -633,6 +633,7 @@ public class EnqueteWebViewActivity extends ABVContentViewActivity {
return false; return false;
} }
@Override
public void finishActivity() { public void finishActivity() {
setResult(RESULT_OK, new Intent()); setResult(RESULT_OK, new Intent());
finish(); finish();
......
...@@ -189,6 +189,7 @@ public class NoPdfViewActivity extends ABVContentViewActivity { ...@@ -189,6 +189,7 @@ public class NoPdfViewActivity extends ABVContentViewActivity {
historyListBtn.setVisibility(View.INVISIBLE); historyListBtn.setVisibility(View.INVISIBLE);
} }
@Override
protected void finishActivity() { protected void finishActivity() {
Logger.d(TAG, "finishActivity"); Logger.d(TAG, "finishActivity");
finish(); finish();
......
...@@ -39,6 +39,8 @@ app_versioncode=1 ...@@ -39,6 +39,8 @@ app_versioncode=1
#cms server #cms server
acms_address=https://check.abookcloud.com/acms acms_address=https://check.abookcloud.com/acms
download_server_address=https://check.abookcloud.com/acms download_server_address=https://check.abookcloud.com/acms
#acms_address=https://abook188-1.abook.bz/acms
#download_server_address=https://abook188-1.abook.bz/acms
#syncview server #syncview server
websocket_server_http_url=https://abook188-1.abook.bz/v1 websocket_server_http_url=https://abook188-1.abook.bz/v1
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment