Browse Source

展会设备调试

master
pry 2 years ago
parent
commit
9e1738197b
16 changed files with 214 additions and 123 deletions
  1. +1
    -2
      HBLConsole.Business/AbstractServer/Base.cs
  2. +0
    -1
      HBLConsole.Business/M2MqttHelper.cs
  3. +55
    -20
      HBLConsole.MORKS/Control_MORKS.cs
  4. +5
    -5
      HBLConsole.MainConsole/Main.cs
  5. +17
    -0
      HBLConsole.Model/ViewModel/ParSet.cs
  6. +6
    -3
      HBLConsole.Service/SystemHelper.cs
  7. +6
    -20
      HBLConsole.Service/ThreadManage.cs
  8. +5
    -4
      HBLConsole/App.config
  9. +2
    -2
      HBLConsole/App.xaml.cs
  10. +2
    -4
      HBLConsole/View/DebugView.xaml
  11. +2
    -0
      HBLConsole/View/MainView.xaml
  12. +39
    -0
      HBLConsole/View/ParSetView.xaml
  13. +28
    -0
      HBLConsole/View/ParSetView.xaml.cs
  14. +13
    -60
      HBLConsole/ViewModel/DebugViewModel.cs
  15. +26
    -0
      HBLConsole/ViewModel/ParSetViewModel.cs
  16. +7
    -2
      HBLConsole/ViewModel/ViewModelBase.cs

+ 1
- 2
HBLConsole.Business/AbstractServer/Base.cs View File

@@ -74,12 +74,11 @@ namespace HBLConsole.Business.AbstractServer
{
Json<BatchingInfoPar>.Data.recipeBoms = JsonConvert.DeserializeObject<RecipeBoms>(result);
ActionManage.GetInstance.Send("recipeBom");
//WritePlcData();
MessageLog.GetInstance.Show("接收到辅料信息");
}
else if (PushType == 0)
{
Json<BatchingInfoPar>.Data.orderMaterialDelivery = JsonConvert.DeserializeObject<OrderMaterialDelivery>(result);

}
}
catch (Exception ex)


+ 0
- 1
HBLConsole.Business/M2MqttHelper.cs View File

@@ -68,7 +68,6 @@ namespace HBLConsole.Business
MqttM2.GetInstance.PublishInfo(PublishContent);
//mqttClient.Publish($"/sys/grgp0rFA2uu/{deviceName}/thing/event/property/post", Encoding.UTF8.GetBytes(PublishContent), 0, false);

Thread.Sleep(1000);
}), "阿里云数据上报", new Action(() => { MqttM2.GetInstance.DisConnect(); }));
}



+ 55
- 20
HBLConsole.MORKS/Control_MORKS.cs View File

@@ -27,16 +27,38 @@ namespace HBLConsole.MORKS
ActionManage.GetInstance.Register(new Action(() => { WriteRecipeBoms(); }), "recipeBom");
ActionManage.GetInstance.Register(new Action(() => { DeviceInit(); }), "InitCommand");
}

public void ConnectOk()
{
mORKS.RBTakeNoodleTask.Enqueue(new OrderLocInfo());
mORKS.RBTakeNoodleTask.Enqueue(new OrderLocInfo());
mORKS.RBTakeNoodleTask.Enqueue(new OrderLocInfo());
//WriteRecipeBoms();
ReadData();
Main();
ResetProgram();
ActionManage.GetInstance.Register(new Action(() =>
{
Random rd = new Random();
ThreadManage.GetInstance.StartLong(new Action(() =>
{
int NoodleLoc = rd.Next(1, 6);
int BowlLoc = rd.Next(10, 11);
string guid = new Guid().ToString();

mORKS.RBTakeNoodleTask.Enqueue(new OrderLocInfo() { Loc = (ushort)NoodleLoc, SuborderId = guid });
MessageLog.GetInstance.Show($"添加订单:面条位置【{NoodleLoc}】");

mORKS.TakeBowlTask.Enqueue(new OrderLocInfo() { Loc = (ushort)BowlLoc, SuborderId = guid });
MessageLog.GetInstance.Show($"添加订单:碗位置【{BowlLoc}】");
Thread.Sleep(60000);
}), "ForOrder");
}), "EnableForOrder");

ActionManage.GetInstance.Register(new Action(() =>
{
ThreadManage.GetInstance.StopTask("ForOrder", new Action(() =>
{
mORKS.RBTakeNoodleTask.Clear();
mORKS.TakeBowlTask.Clear();
}));
}), "StopForOrder");

MessageLog.GetInstance.Show("MORKS 设备初始化完成");
}

@@ -113,14 +135,14 @@ namespace HBLConsole.MORKS
}));


//var ResLoc = ModbusTcpHelper.GetInstance.Read(286, ReadType.HoldingRegisters);
//if (ResLoc != null)
//{
// if (ResLoc is ushort loc)
// {
// mORKS.TurntableFeedbackloc = loc;
// }
//}
var ResLoc = ModbusTcpHelper.GetInstance.Read(286, ReadType.HoldingRegisters);
if (ResLoc != null)
{
if (ResLoc is ushort loc)
{
mORKS.TurntableFeedbackloc = loc;
}
}

Thread.Sleep(500);
}), "ReadPLCData");
@@ -221,9 +243,19 @@ namespace HBLConsole.MORKS
batching_W.BatchingLoc = "10";
mORKS.RBTakeNoodleTask.Enqueue(new OrderLocInfo() { Loc = ushort.Parse(batching_M.BatchingLoc), SuborderId = morkOrderPush.SuborderId, BatchingId = batching_M.BatchingId });

int index = Array.FindIndex(Json<BatchingInfoPar>.Data.recipeBoms.RecipeIds.ToArray(), p => p.RecipeId == morkOrderPush.RecipeId);
index++;
mORKS.TakeBowlTask.Enqueue(new OrderLocInfo() { Loc = ushort.Parse(batching_W.BatchingLoc), SuborderId = morkOrderPush.SuborderId, RecipeNumber = (index >= 1 && index <= 10) ? (ushort)index : (ushort)0 });
int index = 0;
if (Json<BatchingInfoPar>.Data.recipeBoms != null)
{
index = Array.FindIndex(Json<BatchingInfoPar>.Data.recipeBoms?.RecipeIds.ToArray(), p => p.RecipeId == morkOrderPush.RecipeId);
index++;
}
mORKS.TakeBowlTask.Enqueue(new OrderLocInfo()
{
Loc = ushort.Parse(batching_W.BatchingLoc),
SuborderId = morkOrderPush.SuborderId,
RecipeNumber = (index >= 1 && index <= 10) ? (ushort)index : (ushort)0
});

}
}

@@ -235,8 +267,8 @@ namespace HBLConsole.MORKS
{
mORKS.AllowRun = mORKS.InitComplete;
//mORKS.AllowRun = mORKS.InitComplete && mORKS.TemperatureReached;
//GeneralConfig.Healthy = true;
GeneralConfig.Healthy = mORKS.AllowRun;
GeneralConfig.Healthy = true;
//GeneralConfig.Healthy = mORKS.AllowRun;

TakeBowlTask();

@@ -305,6 +337,7 @@ namespace HBLConsole.MORKS
if (!mORKS.TurntableLocLists.Contains(loc))
{
TurntableStart(loc);
MessageLog.GetInstance.Show("未检测到物料,启动转台查找");
return;
}
}
@@ -475,6 +508,7 @@ namespace HBLConsole.MORKS
{
mORKS.TakeNoodleInterlock = false;
mORKS.AllowTakeNoodle = false;
mORKS.TurntableInterlock = false;
MessageLog.GetInstance.Show("取面完成");
TakeNoodleCompleteReset();
}
@@ -513,6 +547,7 @@ namespace HBLConsole.MORKS
MessageLog.GetInstance.Show("成功写入配方数据");
}
}
else { MessageLog.GetInstance.Show("配方数据为空"); }
}

/// <summary>
@@ -591,11 +626,11 @@ namespace HBLConsole.MORKS
/// <param name="loc"></param>
private void TakeBowlControl(ushort loc)
{
if (loc == 10)
if (loc == 10)//小碗
{
ModbusTcpHelper.GetInstance.Write(321, WriteType.Coils, true);
}
else if (loc == 11)
else if (loc == 11)//大碗
{
ModbusTcpHelper.GetInstance.Write(322, WriteType.Coils, true);
}


+ 5
- 5
HBLConsole.MainConsole/Main.cs View File

@@ -53,23 +53,23 @@ namespace HBLConsole.MainConsole
{
ThreadManage.GetInstance.Start(new Action(() =>
{
SimpleFactory.GetInstance.DeviceInit();//设备初始化
//SimpleFactory.GetInstance.DeviceInit();//设备初始化

InternetInfo.ConfigInit();//从 consul 获取配置数据
Topics.Clear();
Topics.Add(TOPIC.GetInstance.GetOrderPushTopic(GeneralConfig.DeviceType, InternetInfo.ClientId));
Topics.Add(TOPIC.GetInstance.GetBusinessTopic(GeneralConfig.DeviceType, InternetInfo.ClientId));


//MQTT 连接成功
MqttHelper.GetInstance.ConnectOk = new Action(() =>
{
//SimpleFactory.GetInstance.DeviceInit();//设备初始化
SimpleFactory.GetInstance.DeviceInit();//设备初始化

MqttHelper.GetInstance.MqttSubscriptionAsync(Topics.ToArray());//主题订阅

IotReport.GetInstance.Init();//IOT 上报
//IotReport.GetInstance.Init();//IOT 上报

HeartbeatReport.GetInstance.Init();//心跳上报

@@ -110,7 +110,7 @@ namespace HBLConsole.MainConsole
{
MqttHelper.GetInstance.MqttSubscriptionAsync(Topics.ToArray());//主题订阅

IotReport.GetInstance.Init();//IOT 上报
//IotReport.GetInstance.Init();//IOT 上报

HeartbeatReport.GetInstance.Init();//心跳上报



+ 17
- 0
HBLConsole.Model/ViewModel/ParSet.cs View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Toolkit.Mvvm.ComponentModel;

namespace HBLConsole.Model
{
public class ParSet : ObservableObject
{

public bool IsAutoStart { get { return _mIsAutoStart; } set { _mIsAutoStart = value; OnPropertyChanged(); } }
private bool _mIsAutoStart;

}
}

+ 6
- 3
HBLConsole.Service/SystemHelper.cs View File

@@ -95,9 +95,12 @@ namespace HBLConsole.Service
/// <returns></returns>
public bool IsAutoStart()
{
//RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\");
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\");
return registryKey.GetValueNames().Contains(GetApplicationName);
RegistryKey R_local = Registry.CurrentUser;
RegistryKey R_run = R_local.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
bool res = R_run.GetValueNames().Contains(GetApplicationName);
R_run.Close();
R_local.Close();
return res;
}




+ 6
- 20
HBLConsole.Service/ThreadManage.cs View File

@@ -36,24 +36,6 @@ namespace HBLConsole.Service
ActionManage.GetInstance.Register(ExitCallback, guid + key);
}

//public void StopTask(string[] keys, Action ExitCallback = null)
//{
// lock (_lock)
// if (keys != null)
// {
// for (int i = 0; i < keys.Length; i++)
// {
// this.keys.Add(keys[i]);
// callbackKey.Append(keys[i]);
// if (CancellationTokenSources.ContainsKey(guid + keys[i]))
// CancellationTokenSources[guid + keys[i]]?.Cancel();
// }
// callbackKey.Append(guid);
// ActionManage.GetInstance.Register(ExitCallback, callbackKey.ToString());
// }

//}

/// <summary>
/// 长任务,带 while true 的循环
/// </summary>
@@ -62,17 +44,21 @@ namespace HBLConsole.Service
public void StartLong(Action action, string key, Action RunComplete = null)
{
CancellationTokenSources.TryAdd(guid + key, new CancellationTokenSource());
bool result = Threads.TryAdd(guid + key, Task.Factory.StartNew(new Action(() =>
bool result = Threads.TryAdd(guid + key, Task.Factory.StartNew(new Action(async () =>
{
try
{
while (!CancellationTokenSources[guid + key].IsCancellationRequested)
{
if (action != null) action();
if (action != null)
{
action();
}
}
}
catch (Exception ex)
{
MessageLog.GetInstance.Show(ex.ToString());
MessageLog.GetInstance.Show($"线程 【{key}】运行发生异常,已重启");
CancellationTokenSources.TryRemove(guid + key, out CancellationTokenSource temp);
Threads.TryRemove(guid + key, out Task temp1);


+ 5
- 4
HBLConsole/App.config View File

@@ -4,14 +4,15 @@
<!--通用配置-->

<!--测试服务 Consul 地址-->
<add key="ConsulAddress" value="http://1.14.74.54" />
<add key="ConsulAddress" value="http://1.14.74.54:9005" />

<!--正式服务 Consul 地址-->
<!--<add key="ConsulAddress" value="http://162.14.105.138:9005" />-->

<!--客户端ID-->
<!--MorkD = 2,MorkS 且时且多 = 8,MorkS 珠海 = 9,冰淇淋 = 4,咖啡机 = 13-->
<add key="ClientId" value="5"/>
<!--达州展会 MORKS =9,10-->
<add key="ClientId" value="9"/>
<!--IOT大屏上报-->
<add key="ProductKey" value="grgpECHSL7q"/>
<add key="DeviceName" value="test"/>
@@ -24,8 +25,8 @@
<add key="COM_IceCream" value="COM5"/>
<add key="BAUD_IceCream" value="9600"/>
<add key="IceCream_CXB_Threshold" value="90"/>
<add key="COM_ICChip" value="COM11"/>
<add key="BAUD_IChip" value="9600"/>
<add key="COM_ICChip" value="COM11"/>
<add key="BAUD_IChip" value="9600"/>

</appSettings>
</configuration>

+ 2
- 2
HBLConsole/App.xaml.cs View File

@@ -35,7 +35,7 @@ namespace HBLConsole
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
SystemHelper.GetInstance.AutoStart(false);
//SystemHelper.GetInstance.AutoStart(true);
SystemHelper.GetInstance.CreateDesktopShortcut();
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
MainConsole.Main.GetInstance.DataInit();
@@ -44,7 +44,7 @@ namespace HBLConsole
mainView.Show();
SplitScreenDisplay();
NoCompleteOrderInit();
MainConsole.Main.GetInstance.BusinessSimTest();
MainConsole.Main.GetInstance.BusinessInit();
}

/// <summary>


+ 2
- 4
HBLConsole/View/DebugView.xaml View File

@@ -264,10 +264,8 @@
<Button
x:Name="button_loop"
Margin="0,0,10,0"
Command="{Binding LoopSimOrderCommand}"
CommandParameter="{Binding ElementName=button_loop, Path=Content}"
Content="{Binding LoopButton, Mode=TwoWay, NotifyOnTargetUpdated=True}"
Foreground="{Binding LoopColor, Mode=TwoWay, NotifyOnTargetUpdated=True}"
Command="{Binding LoopSimOrderCommand}"
Content="{Binding LoopOrderButtonContent}"
Style="{StaticResource ButtonStyle}" />
<!--#endregion-->



+ 2
- 0
HBLConsole/View/MainView.xaml View File

@@ -266,6 +266,8 @@

<RadioButton
Margin="-10,0,0,0"
Command="{Binding NavChangedCommand}"
CommandParameter="ParSetView"
Content="参数设置"
Style="{StaticResource ParallelogramRadioButtonStyle}" />



+ 39
- 0
HBLConsole/View/ParSetView.xaml View File

@@ -0,0 +1,39 @@
<UserControl
x:Class="HBLConsole.View.ParSetView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:HBLConsole.View"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:HBLConsole.ViewModel"
d:DesignHeight="450"
d:DesignWidth="1000"
mc:Ignorable="d">

<UserControl.DataContext>
<vm:ParSetViewModel />
</UserControl.DataContext>

<UserControl.Resources>

<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Resources/ResourceDictionarys/BasicStyle.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>

<Grid>
<CheckBox
Grid.Column="2"
Height="20"
Margin="10"
VerticalAlignment="Top"
Background="#FF2AB2E7"
Content="开机启动"
FontSize="14"
Foreground="#00c2f4"
IsChecked="{Binding IsSelected}"
Template="{StaticResource CbTemplate}" />
</Grid>
</UserControl>

+ 28
- 0
HBLConsole/View/ParSetView.xaml.cs View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace HBLConsole.View
{
/// <summary>
/// ParSetView.xaml 的交互逻辑
/// </summary>
public partial class ParSetView : UserControl
{
public ParSetView()
{
InitializeComponent();
}
}
}

+ 13
- 60
HBLConsole/ViewModel/DebugViewModel.cs View File

@@ -46,7 +46,6 @@ namespace HBLConsole.ViewModel
{
locs.Add((ushort)(new Random().Next(1, 5)));
locs.Add(10);

}

ActionManage.GetInstance.Send("SimOrder", locs);
@@ -63,46 +62,17 @@ namespace HBLConsole.ViewModel

LoopSimOrderCommand = new RelayCommand(() =>
{
LoopButton = LoopButton == "循环跑单" ? "停止跑单" : "循环跑单";
if (LoopOrderButtonContent == "循环跑单") ActionManage.GetInstance.Send("EnableForOrder");
if (LoopOrderButtonContent == "停止跑单") ActionManage.GetInstance.Send("StopForOrder");
LoopOrderButtonContent = LoopOrderButtonContent == "循环跑单" ? "停止跑单" : "循环跑单";

});
//ThreadManage.GetInstance.StartLong(new Action(() =>
//{
// //try
// //{
// // System.Windows.Application.Current.Dispatcher.BeginInvoke((Action)async delegate
// // {
// // if (IsLoop && !IsLoopzc)
// // {
// // IsLoopzc = true;
// // if (simOrderVisibleDatas.ElementAt(0).IsSelected)
// // simOrderVisibleDatas.ElementAt(0).Loc = (ushort)(new Random().Next(1,6));

// // ActionManage.GetInstance.Send("SimOrder",new SimOrderData()
// // {
// // NoodleLoc = simOrderVisibleDatas.ElementAt(0).Loc,
// // SoupLoc = simOrderVisibleDatas.ElementAt(1).Loc,
// // BowlLoc = 10,
// // });
// // await Task.Delay(50000);
// // IsLoopzc = false;
// // }
// // });

// //}
// //catch (Exception ex)
// //{

// //}
// Thread.Sleep(1000);
//}), "循环订单");


EditCommand = new RelayCommand<object>((o) =>
{
if (o != null)
{
//if (Json<KeepDataBase>.Data.simOrderConfig.ContainsKey(GVL.GeneralConfig.DeviceType.ToString()))
//{
var res = Json<KeepDataBase>.Data.simOrderConfig.FirstOrDefault(p => p.Text == o.ToString());
if (res != null)
{
@@ -110,7 +80,6 @@ namespace HBLConsole.ViewModel
simOrderConfitView.Show();
ActionManage.GetInstance.Send("SendSimData", res);
}
//}
}

});
@@ -119,11 +88,8 @@ namespace HBLConsole.ViewModel
{
if (o != null)
{
//if (Json<KeepDataBase>.Data.simOrderConfig.ContainsKey(GVL.GeneralConfig.DeviceType.ToString()))
//{
var res = Json<KeepDataBase>.Data.simOrderConfig.FirstOrDefault(p => p.Text == o.ToString());
if (res != null) Json<KeepDataBase>.Data.simOrderConfig.Remove(res);
//}
}
});
}
@@ -132,18 +98,10 @@ namespace HBLConsole.ViewModel
{
get
{
//if (!Json<KeepDataBase>.Data.simOrderConfig.ContainsKey(GVL.GeneralConfig.DeviceType.ToString()))
//{
// Json<KeepDataBase>.Data.simOrderConfig.TryAdd(GVL.GeneralConfig.DeviceType.ToString(), new ObservableCollection<SimOrderVisibleData>());
//}
return Json<KeepDataBase>.Data.simOrderConfig;
}
set
{
//if (!Json<KeepDataBase>.Data.simOrderConfig.ContainsKey(GVL.GeneralConfig.DeviceType.ToString()))
//{
// Json<KeepDataBase>.Data.simOrderConfig.TryAdd(GVL.GeneralConfig.DeviceType.ToString(), new ObservableCollection<SimOrderVisibleData>());
//}
Json<KeepDataBase>.Data.simOrderConfig = value;
}
}
@@ -160,23 +118,18 @@ namespace HBLConsole.ViewModel

public RelayCommand<object> RemoveCommand { get; set; }

public static bool IsLoop = false;
public static bool IsLoopzc = false;

public static string LoopButton
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
public static void OnStaticPropertyChanged([CallerMemberName] string PropName = "")
{
get { return _LoopButton; }
set
{
_LoopButton = value;
if (value != "循环跑单") { IsLoop = true; LoopColor = new SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("Red")); }
else { IsLoop = false; LoopColor = new SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#00c2f4")); }
OnStaticPropertyChanged();
}
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(PropName));
}
private static string _LoopButton = "循环跑单";
public static Brush LoopColor { get { return _LoopColor; } set { _LoopColor = value; OnStaticPropertyChanged(); } }
private static Brush _LoopColor = new SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#00c2f4"));

public static string LoopOrderButtonContent { get { return _mLoopOrderButtonContent; } set { _mLoopOrderButtonContent = value; OnStaticPropertyChanged(); } }
private static string _mLoopOrderButtonContent = "循环跑单";





}


+ 26
- 0
HBLConsole/ViewModel/ParSetViewModel.cs View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HBLConsole.Model;
using HBLConsole.Service;

namespace HBLConsole.ViewModel
{
public class ParSetViewModel : ViewModelBase
{
public ParSetViewModel()
{
WindowName = "参数设置";
}


public bool IsSelected
{
get { return SystemHelper.GetInstance.IsAutoStart(); }
set { SystemHelper.GetInstance.AutoStart(value); OnPropertyChanged(); }
}

}
}

+ 7
- 2
HBLConsole/ViewModel/ViewModelBase.cs View File

@@ -107,7 +107,7 @@ namespace HBLConsole.ViewModel
private void Test()
{
#if test
ThreadOperate.GetInstance.StartLong(new Action(() =>
ThreadManage.GetInstance.StartLong(new Action(() =>
{
while (morkOrderPushes.Count > 0)
{
@@ -188,7 +188,12 @@ namespace HBLConsole.ViewModel
break;
case ORDER_STATUS.COMPLETED_TAKE:
var re = WaitTakeMeal.FirstOrDefault(p => p.OrderPush.SuborderId == orderStatusChange.SuborderId);
if (re != null) WaitTakeMeal.Remove(re);
if (re != null)
{
WaitTakeMeal.Remove(re);
Json<MorkOrderPushPar>.Data.morkOrderPushes.Remove(re);
}

break;
default:
break;


Loading…
Cancel
Save