Commit a31f3a2d authored by shigemi miura's avatar shigemi miura

ECAタスク修正

parent 575810d0
...@@ -1230,7 +1230,7 @@ ...@@ -1230,7 +1230,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 0.9.4; MARKETING_VERSION = 0.9.5;
OTHER_SWIFT_FLAGS = "-D CANARY -D COCOAPODS"; OTHER_SWIFT_FLAGS = "-D CANARY -D COCOAPODS";
PRODUCT_BUNDLE_IDENTIFIER = com.jrc.sailassist.canary; PRODUCT_BUNDLE_IDENTIFIER = com.jrc.sailassist.canary;
PRODUCT_NAME = "Sail Assist"; PRODUCT_NAME = "Sail Assist";
...@@ -1273,7 +1273,7 @@ ...@@ -1273,7 +1273,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 0.9.4; MARKETING_VERSION = 0.9.5;
OTHER_SWIFT_FLAGS = "-D COCOAPODS"; OTHER_SWIFT_FLAGS = "-D COCOAPODS";
PRODUCT_BUNDLE_IDENTIFIER = com.jrc.sailassist; PRODUCT_BUNDLE_IDENTIFIER = com.jrc.sailassist;
PRODUCT_NAME = "Sail Assist"; PRODUCT_NAME = "Sail Assist";
...@@ -1459,7 +1459,7 @@ ...@@ -1459,7 +1459,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 0.9.4; MARKETING_VERSION = 0.9.5;
OTHER_SWIFT_FLAGS = "-D QC -D COCOAPODS"; OTHER_SWIFT_FLAGS = "-D QC -D COCOAPODS";
PRODUCT_BUNDLE_IDENTIFIER = com.jrc.sailassist.qc; PRODUCT_BUNDLE_IDENTIFIER = com.jrc.sailassist.qc;
PRODUCT_NAME = "Sail Assist"; PRODUCT_NAME = "Sail Assist";
......
...@@ -46,7 +46,7 @@ class EcaTask { ...@@ -46,7 +46,7 @@ class EcaTask {
SharingData.location.dataTime = res.dataTime //2023-11-02T05:25:49.4362123Z SharingData.location.dataTime = res.dataTime //2023-11-02T05:25:49.4362123Z
SharingData.location.setLocation() SharingData.location.setLocation()
print(debug: "Location:\(res)")
checkEca() checkEca()
} }
case .failure(let errorCode): case .failure(let errorCode):
...@@ -57,36 +57,37 @@ class EcaTask { ...@@ -57,36 +57,37 @@ class EcaTask {
func checkEca() { func checkEca() {
let runningEca = eca.ecaArea.first(where: {(key, value) in value.isRunning == true}) let runningEca = eca.ecaArea.first(where: {(key, value) in value.isRunning == true})
if var eca = runningEca?.value { if let eca = runningEca?.value {
if let location = SharingData.location.location { if let location = SharingData.location.location {
if let distance = LocationCalculation.checkPolyline(objPos: eca.points, shipPos: location) { if let distance = LocationCalculation.checkPolyline(objPos: eca.points, shipPos: location){
//起動時に状態を設定
if SharingData.my.ecaStatus == nil { if SharingData.my.ecaStatus == nil {
eca = runningEcaStatus(eca: eca, distance: distance) SharingData.my.ecaStatus = EcaState.running
} }
if eca.swNotice >= Float(distance) && eca.status == EcaState.running { if 0.0 >= Float(distance) && SharingData.my.ecaStatus != EcaState.incomplete{
notificationEca(point: SwitchingEca.Notice) SharingData.my.ecaStatus = EcaState.incomplete
SharingData.eca.isShowEcaAlert = true var newData = eca
SharingData.my.ecaStatus = EcaState.noticePass newData.isRunning = false
newData.status = EcaState.incomplete
SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Incomplete)
} }
if eca.swStart >= Float(distance) && eca.status == EcaState.noticePass { if eca.swFinish >= Float(distance) && 0.0 < Float(distance) && SharingData.my.ecaStatus != EcaState.finishPass{
notificationEca(point: SwitchingEca.Start) notificationEca(point: SwitchingEca.Finish)
SharingData.eca.isShowEcaAlert = true SharingData.eca.isShowEcaAlert = true
SharingData.my.ecaStatus = EcaState.startPass SharingData.my.ecaStatus = EcaState.finishPass
} }
if eca.swFinish >= Float(distance) && 0.0 < Float(distance) && eca.status == EcaState.startPass { if eca.swStart >= Float(distance) && eca.swFinish < Float(distance) && SharingData.my.ecaStatus != EcaState.startPass{
notificationEca(point: SwitchingEca.Finish) notificationEca(point: SwitchingEca.Start)
SharingData.eca.isShowEcaAlert = true SharingData.eca.isShowEcaAlert = true
SharingData.my.ecaStatus = EcaState.finishPass SharingData.my.ecaStatus = EcaState.startPass
} }
if 0.0 >= Float(distance) && eca.status == EcaState.finishPass { if eca.swNotice >= Float(distance) && eca.swStart < Float(distance) && SharingData.my.ecaStatus != EcaState.noticePass{
notificationEca(point: SwitchingEca.Notice)
SharingData.eca.isShowEcaAlert = true SharingData.eca.isShowEcaAlert = true
SharingData.my.ecaStatus = EcaState.incomplete SharingData.my.ecaStatus = EcaState.noticePass
} }
} }
} }
...@@ -97,54 +98,119 @@ class EcaTask { ...@@ -97,54 +98,119 @@ class EcaTask {
} }
} }
func runningEcaStatus(eca: RegisteredEca, distance: Double) -> RegisteredEca {
var result = false
var newData = eca
if 0.0 >= Float(distance){
newData.status = EcaState.finishPass
result = true
}
if eca.swFinish >= Float(distance) && result == false{
newData.status = EcaState.startPass
result = true
}
if eca.swStart >= Float(distance) && result == false{
newData.status = EcaState.noticePass
result = true
}
if eca.swNotice >= Float(distance) && result == false{
newData.status = EcaState.running
}
return newData
}
func chengeEcaStatus(eca: RegisteredEca) { func chengeEcaStatus(eca: RegisteredEca) {
if eca.status == EcaState.running { if let status = SharingData.my.ecaStatus{
var newData = eca var newData = eca
newData.status = EcaState.noticePass newData.status = status
if status == EcaState.noticePass{ //ECA通知円到達
SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Notice) SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Notice)
} }
if status == EcaState.startPass{ //ECA開始円到達
if eca.status == EcaState.noticePass {
var newData = eca
newData.status = EcaState.startPass
SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Start) SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Start)
} }
if status == EcaState.finishPass{ //ECAタスク終了円到達
if eca.status == EcaState.startPass {
var newData = eca
newData.status = EcaState.finishPass
SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Finish) SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Finish)
} }
if status == EcaState.end{ //ECAタスク完了(燃料切替実施済み)
if eca.status == EcaState.finishPass { SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.End)
var newData = eca }
newData.status = EcaState.incomplete
SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Incomplete)
} }
} }
// func checkEca() {
// let runningEca = eca.ecaArea.first(where: {(key, value) in value.isRunning == true})
// if var eca = runningEca?.value {
// if let location = SharingData.location.location {
// if let distance = LocationCalculation.checkPolyline(objPos: eca.points, shipPos: location) {
//
// //ECA実行時に状態を取得
// if SharingData.my.ecaStatus == nil {
// eca = runningEcaStatus(eca: eca, distance: distance)
// }
//
// if eca.swNotice >= Float(distance) && eca.status == EcaState.running {
// notificationEca(point: SwitchingEca.Notice)
// SharingData.eca.isShowEcaAlert = true
// SharingData.my.ecaStatus = EcaState.noticePass
// }
//
// if eca.swStart >= Float(distance) && eca.status == EcaState.noticePass {
// notificationEca(point: SwitchingEca.Start)
// SharingData.eca.isShowEcaAlert = true
// SharingData.my.ecaStatus = EcaState.startPass
// }
//
// if eca.swFinish >= Float(distance) && 0.0 < Float(distance) && eca.status == EcaState.startPass {
// notificationEca(point: SwitchingEca.Finish)
// SharingData.eca.isShowEcaAlert = true
// SharingData.my.ecaStatus = EcaState.finishPass
// }
//
// if 0.0 >= Float(distance) && eca.status == EcaState.incomplete {
// SharingData.eca.isShowEcaAlert = true
// SharingData.my.ecaStatus = EcaState.incomplete
// }
// }
// }
// } else {
// if SharingData.my.ecaStatus != nil {
// SharingData.my.ecaStatus = nil
// }
// }
// }
// func runningEcaStatus(eca: RegisteredEca, distance: Double) -> RegisteredEca {
// var result = false
// var newData = eca
//
// newData.status = EcaState.running
//
// if 0.0 >= Float(distance){
// newData.status = EcaState.incomplete
// result = true
// }
//
// if eca.swFinish >= Float(distance) && result == false{
// newData.status = EcaState.startPass
// result = true
// }
//
// if eca.swStart >= Float(distance) && result == false{
// newData.status = EcaState.noticePass
// result = true
// }
//
// if eca.swNotice >= Float(distance) && result == false{
// newData.status = EcaState.running
// }
//
// return newData
// }
// func chengeEcaStatus(eca: RegisteredEca) {
// if eca.status == EcaState.running {
// var newData = eca
// newData.status = EcaState.noticePass
// SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Notice)
// }
//
// if eca.status == EcaState.noticePass {
// var newData = eca
// newData.status = EcaState.startPass
// SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Start)
// }
//
// if eca.status == EcaState.startPass {
// var newData = eca
// newData.status = EcaState.finishPass
// SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Finish)
// }
//
// if eca.status == EcaState.finishPass {
// var newData = eca
// newData.status = EcaState.incomplete
// SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Incomplete)
// }
// }
} }
...@@ -256,6 +256,9 @@ struct LoginView: View { ...@@ -256,6 +256,9 @@ struct LoginView: View {
// let ecaArea = EcaArea() // let ecaArea = EcaArea()
// ecaArea.start() // ecaArea.start()
let eca = EcaTask()
eca.start()
timer = Timer.scheduledTimer(withTimeInterval: TimerInterval, repeats: true) { _ in timer = Timer.scheduledTimer(withTimeInterval: TimerInterval, repeats: true) { _ in
print(debug: "called timer") print(debug: "called timer")
let eca = EcaTask() let eca = EcaTask()
......
...@@ -32,8 +32,8 @@ struct MapRepresentable: UIViewControllerRepresentable{ ...@@ -32,8 +32,8 @@ struct MapRepresentable: UIViewControllerRepresentable{
if let focusEcaName = ecaData.focusEca, let focusEca = ecaData.ecaArea[focusEcaName]{ if let focusEcaName = ecaData.focusEca, let focusEca = ecaData.ecaArea[focusEcaName]{
mapVC.updateCamera(location: focusEca.centerPosition, zoomlevel: focusEca.zoomLevel) mapVC.updateCamera(location: focusEca.centerPosition, zoomlevel: focusEca.zoomLevel)
mapVC.updateOneTimeEca(eca: focusEca.points) mapVC.updateOneTimeEca(eca: focusEca.points)
//5秒後削除 //10秒後削除
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) { DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
do{ do{
mapVC.updateOneTimeEca(eca: nil) mapVC.updateOneTimeEca(eca: nil)
}catch{ }catch{
......
...@@ -88,33 +88,17 @@ struct MapTaskView: View { ...@@ -88,33 +88,17 @@ struct MapTaskView: View {
Spacer() Spacer()
.frame(height: 55) .frame(height: 55)
} }
.onAppear{ .onAppear{
EcaCoordinatesTable().setEcaData() EcaCoordinatesTable().setEcaData()
} }
.alert("", isPresented: $eca.isShowEcaAlert) { .alert("", isPresented: $eca.isShowEcaAlert) {
if let ecaArea = eca.ecaArea.map({ $0.1 }).filter({ $0.isRunning }).first{ if let ecaArea = eca.ecaArea.map({ $0.1 }).filter({ $0.isRunning }).first{
if SharingData.my.ecaStatus == .finishPass{
Button("Yes"){
var newData = ecaArea
newData.isRunning = false
newData.status = EcaState.end
SharingData.eca.editEcaArea(key: ecaArea.name, value: newData, type: EcaOperation.Finish)
}
Button("No"){
var newData = ecaArea
newData.isRunning = false
newData.status = EcaState.incomplete
SharingData.eca.editEcaArea(key: ecaArea.name, value: newData, type: EcaOperation.Incomplete)
}
}else{
Button("OK"){ Button("OK"){
let ecaTask = EcaTask() let ecaTask = EcaTask()
ecaTask.chengeEcaStatus(eca: ecaArea) ecaTask.chengeEcaStatus(eca: ecaArea)
} }
} }
}
} message: { } message: {
if let ecaArea = eca.ecaArea.map({ $0.1 }).filter({ $0.isRunning }).first{ if let ecaArea = eca.ecaArea.map({ $0.1 }).filter({ $0.isRunning }).first{
if let status = SharingData.my.ecaStatus { if let status = SharingData.my.ecaStatus {
...@@ -124,7 +108,7 @@ struct MapTaskView: View { ...@@ -124,7 +108,7 @@ struct MapTaskView: View {
case .startPass: case .startPass:
Text("Arrived at switching start point.") Text("Arrived at switching start point.")
case .finishPass: case .finishPass:
Text("Have you finished \(ecaArea.name) fuel switching?") Text("Have you finished \(ecaArea.name) fuel switching?\nIf you finish, you disable it.")
case .incomplete: case .incomplete:
Text("Have you finished \(ecaArea.name) fuel switching?\nIf you finish, you disable it.") Text("Have you finished \(ecaArea.name) fuel switching?\nIf you finish, you disable it.")
default: default:
......
...@@ -7,16 +7,18 @@ ...@@ -7,16 +7,18 @@
import SwiftUI import SwiftUI
enum EcaAlertType: String { //enum EcaAlertType: String {
case ecaDelete // case ecaDelete
case ecaRunningStop // case ecaRunningStop
} //}
struct TaskSwitchingMenuView: View { struct TaskSwitchingMenuView: View {
@ObservedObject var taskViewModel: TaskViewModel @ObservedObject var taskViewModel: TaskViewModel
@ObservedObject var ecaData = SharingData.eca @ObservedObject var ecaData = SharingData.eca
@State var isEcaAlert : Bool = false // @State var isEcaAlert : Bool = false
@State var ecaAlertType: EcaAlertType = .ecaDelete // @State var ecaAlertType: EcaAlertType = .ecaDelete
@State var isDeleteAlert: Bool = false
@State var isRunningStopAlert: Bool = false
let deleteEcaArea = DeleteEcaArea() let deleteEcaArea = DeleteEcaArea()
var body: some View { var body: some View {
...@@ -29,10 +31,9 @@ struct TaskSwitchingMenuView: View { ...@@ -29,10 +31,9 @@ struct TaskSwitchingMenuView: View {
for runningEca in ecaData.ecaArea.map({ $0.1 }).filter({ $0.isRunning }){ for runningEca in ecaData.ecaArea.map({ $0.1 }).filter({ $0.isRunning }){
taskViewModel.edittingEcaArea = runningEca taskViewModel.edittingEcaArea = runningEca
taskViewModel.ecaName = runningEca.name taskViewModel.ecaName = runningEca.name
isEcaAlert = true isRunningStopAlert = true
ecaAlertType = .ecaRunningStop
} }
if isEcaAlert == false { if isRunningStopAlert == false {
var newData = eca var newData = eca
newData.isRunning = true newData.isRunning = true
newData.status = EcaState.running newData.status = EcaState.running
...@@ -71,8 +72,7 @@ struct TaskSwitchingMenuView: View { ...@@ -71,8 +72,7 @@ struct TaskSwitchingMenuView: View {
Button{ Button{
taskViewModel.edittingEcaArea = eca taskViewModel.edittingEcaArea = eca
taskViewModel.ecaName = eca.name taskViewModel.ecaName = eca.name
isEcaAlert = true isDeleteAlert = true
ecaAlertType = .ecaDelete
} label: { } label: {
Text("Delete ECA Task") Text("Delete ECA Task")
} }
...@@ -82,13 +82,8 @@ struct TaskSwitchingMenuView: View { ...@@ -82,13 +82,8 @@ struct TaskSwitchingMenuView: View {
.foregroundColor(eca.isRunning ? ColorSet.Splash.color : ColorSet.Slidebar.color) .foregroundColor(eca.isRunning ? ColorSet.Splash.color : ColorSet.Slidebar.color)
} }
.disabled(eca.isRunning) .disabled(eca.isRunning)
.alert(isPresented: $isEcaAlert) { .alert("Delete", isPresented: $isDeleteAlert) {
switch ecaAlertType { Button("Yes") {
case .ecaDelete:
return Alert(title: Text("Delete"),
message: Text("Do you delete " + taskViewModel.ecaName + "?"),
primaryButton: .default(Text("No")),
secondaryButton: .cancel(Text("Yes"), action: {
if let ecaArea = taskViewModel.edittingEcaArea { if let ecaArea = taskViewModel.edittingEcaArea {
var newData = ecaArea var newData = ecaArea
newData.isEnable = false newData.isEnable = false
...@@ -98,21 +93,33 @@ struct TaskSwitchingMenuView: View { ...@@ -98,21 +93,33 @@ struct TaskSwitchingMenuView: View {
deleteEcaArea.start(ecaId: ecaArea.id) deleteEcaArea.start(ecaId: ecaArea.id)
} }
taskViewModel.edittingEcaArea = nil taskViewModel.edittingEcaArea = nil
})) }
case .ecaRunningStop: Button("No"){}
return Alert(title: Text("Stop"), } message: {
message: Text("Do you want to stop " + taskViewModel.ecaName + "?"), Text("Do you delete " + taskViewModel.ecaName + "?")
primaryButton: .default(Text("Cancel")), }
secondaryButton: .cancel(Text("Stop"), action: { .alert("Fuel Switching", isPresented:$isRunningStopAlert) {
Button("Yes") {
if let ecaArea = taskViewModel.edittingEcaArea { if let ecaArea = taskViewModel.edittingEcaArea {
var newData = ecaArea var newData = ecaArea
newData.isRunning = false newData.isRunning = false
newData.status = EcaState.cancel newData.status = EcaState.end
ecaData.editEcaArea(key: ecaArea.name, value: newData, type: EcaOperation.Cancel) ecaData.editEcaArea(key: ecaArea.name, value: newData, type: EcaOperation.End)
} }
taskViewModel.edittingEcaArea = nil taskViewModel.edittingEcaArea = nil
}))
} }
Button("No"){}
// Button("Cancel"){¥
// if let ecaArea = taskViewModel.edittingEcaArea {
// var newData = ecaArea
// newData.isRunning = false
// newData.status = EcaState.cancel
// ecaData.editEcaArea(key: ecaArea.name, value: newData, type: EcaOperation.Cancel)
// }
// taskViewModel.edittingEcaArea = nil
// }
} message: {
Text("Do you delete " + taskViewModel.ecaName + "?")
} }
} }
.frame(height: 60) .frame(height: 60)
......
...@@ -14,6 +14,7 @@ enum EcaOperation { ...@@ -14,6 +14,7 @@ enum EcaOperation {
case Notice case Notice
case Start case Start
case Finish case Finish
case End
case Incomplete case Incomplete
case Change case Change
case Cancel case Cancel
...@@ -186,6 +187,16 @@ class SharingData{ ...@@ -186,6 +187,16 @@ class SharingData{
task.status = setEcaStatus(eca: value) task.status = setEcaStatus(eca: value)
} }
setEcaArea.start(eca: task) setEcaArea.start(eca: task)
case EcaOperation.End:
task.areaId = value.id
task.taskName = value.name
task.noticeRange = value.swNotice
task.startRange = value.swStart
task.finishRange = value.swFinish
if value.isEnable {
task.status = setEcaStatus(eca: value)
}
setEcaArea.start(eca: task)
case EcaOperation.Incomplete: case EcaOperation.Incomplete:
task.areaId = value.id task.areaId = value.id
task.taskName = value.name task.taskName = value.name
......
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