瀏覽代碼

新增三坐标接口

yangniao 2 年之前
父節點
當前提交
798840da7b

+ 14 - 3
IMCS_CCS/Controllers/CcsController.cs

@@ -165,15 +165,26 @@ namespace IMCS.CCS.Controllers
             return await _httpRequestService.StartCleanMachine(data);
         }
 
+        /// <summary>
+        /// 查询三坐标检测空闲位置: POST: api/QueryThreeCoordinatesFreePos
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/QueryThreeCoordinatesFreePos")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> QueryThreeCoordinatesFreePos(RequestToolData data)
+        {
+            return await _httpRequestService.QueryThreeCoordinatesFreePos(data);
+        }
+
         /// <summary>
         /// 启动三坐标: POST: api/StartCoordinateMeasuringMachine
         /// </summary> 
         /// <returns></returns>
-        [Route("api/StartCoordinateMeasuringMachine")]
+        [Route("api/StartThreeCoordinates")]
         [HttpPost]
-        public async Task<ActionResult<ResponseECSData>> StartCoordinateMeasuringMachine(RequestData<WorkData> data)
+        public async Task<ActionResult<ResponseECSData>> StartThreeCoordinates(RequestData<WorkData> data)
         {
-            return await _httpRequestService.StartCoordinateMeasuringMachine(data);
+            return await _httpRequestService.StartThreeCoordinates(data);
         }
 
         /// <summary>

+ 33 - 0
IMCS_CCS/Entitys/CallBackThreeCoordinatesRequestData.cs

@@ -0,0 +1,33 @@
+
+namespace IMCS.CCS.Entitys
+{
+    public class CallBackThreeCoordinatesRequestData
+    {
+        /// <summary>
+        /// 返回code
+        /// </summary>
+        public string code { get; set; } = "1";
+        /// <summary>
+        /// 返回msg
+        /// </summary>
+        public string msg { get; set; } = "操作成功";
+        /// <summary>
+        /// 任务id
+        /// </summary>
+        public long taskId { get; set; }  
+        /// <summary>
+        /// 任务节点id
+        /// </summary>
+        public long taskNodeId { get; set; }
+
+        /// <summary>
+        /// 工件id
+        /// </summary>
+        public string workId { get; set; }
+
+        /// <summary>
+        /// 工位Id
+        /// </summary>
+        public string stationId { get; set; }
+    }
+}

+ 4 - 2
IMCS_CCS/Entitys/CcsAction.cs

@@ -69,8 +69,10 @@ namespace IMCS.CCS.Entitys
         StartCleanMachine,
         [EnumDescription("启动打标机")]
         StartLabelMachine,
-        [EnumDescription("启动三坐标")]
-        StartCoordinateMeasuringMachine,
+        [EnumDescription("查询三坐标检测空闲位置")]
+        QueryThreeCoordinatesFreePos,
+        [EnumDescription("启动三坐标测量")]
+        StartThreeCoordinates,
         [EnumDescription("伺服舵机取物品")]
         GetServoStacker,
         [EnumDescription("伺服舵机放物品")]

+ 5 - 9
IMCS_CCS/Entitys/RequestData.cs

@@ -51,19 +51,15 @@ namespace IMCS.CCS.Models
         public string workId { get; set; }
 
         /// <summary>
-        /// 工件类型
+        /// 工序编号
         /// </summary>
-        public string workType { get; set; }
+        public string procedureNo { get; set; }
 
         /// <summary>
-        /// 索引
+        /// 工件程序名
         /// </summary>
-        public string orderIndex { get; set; }
-
-        /// <summary>
-        /// 内容
-        /// </summary>
-        public string content { get; set; }
+        public string workProgramName { get; set; }
+ 
     }
     public class RequestToolData
     {

+ 6 - 1
IMCS_CCS/Service/IHttpRequestService .cs

@@ -91,10 +91,15 @@ namespace IMCS.CCS.Services
         /// </summary> 
         Task<ResponseECSData> StartLabelMachine(RequestData<WorkData> req);
 
+        /// <summary>
+        /// 查询三坐标检测空闲位置
+        /// </summary> 
+        Task<ResponseECSData> QueryThreeCoordinatesFreePos(RequestToolData req);
+
         /// <summary>
         /// 启动三坐标
         /// </summary> 
-        Task<ResponseECSData> StartCoordinateMeasuringMachine(RequestData<WorkData> req);
+        Task<ResponseECSData> StartThreeCoordinates(RequestData<WorkData> req);
 
         /// <summary>
         /// 伺服舵机取物品

+ 114 - 46
IMCS_CCS/Service/Impl/HttpRequestService.cs

@@ -1560,10 +1560,83 @@ namespace IMCS.CCS.Services
             }
         }
 
+        /// <summary>
+        /// 查询三坐标检测空闲位置
+        /// </summary> 
+        public async Task<ResponseECSData> QueryThreeCoordinatesFreePos(RequestToolData req)
+        {
+            ResponseECSData responseData = new ResponseECSData("", "");
+            
+            try
+            {
+                List<Device> devices = _deviceService.GetDeviceList();
+
+                Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
+
+                if (device == null)
+                {
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.QueryThreeCoordinatesFreePos + "设备已离线===>>" + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.QueryThreeCoordinatesFreePos));
+                    responseData.result = "false";
+                    return responseData;
+                }
+
+                CcsAction actionQuery = new CcsAction();
+                actionQuery.OperateType = ActionTypeEnum.QueryThreeCoordinatesFreePos.ToString();
+                actionQuery.Ip = req.url;
+                CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
+
+                SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
+                HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
+                if (!ConnectionResult.IsSuccess)
+                {
+                    s7.ConnectClose();
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.QueryThreeCoordinatesFreePos + "查询三坐标检测空闲位置===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.QueryThreeCoordinatesFreePos));
+                    responseData.result = "false";
+                    return responseData;
+                }
+
+                CcsActionAddress actionAddressQuery = new CcsActionAddress();
+                actionAddressQuery.ActionId = actionInfo.Id;
+                List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
+                //初始化为false,否则返回点位
+                responseData.result = "false";
+                //查询条件
+                List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
+                foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
+                {
+                    if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
+                    {
+                        var operateResult = s7.ReadInt16(actionAddress.Address);
+                        if (operateResult.ToString() == actionAddress.Value)
+                        {
+                            s7.ConnectClose();
+                            Log.Instance.WriteLogAdd(ActionTypeEnum.QueryThreeCoordinatesFreePos + "三坐标检测空闲位置===>>"+ actionAddress.Address + JsonConvert.SerializeObject(req),
+                            EnumHelper.GetDescription(ActionTypeEnum.QueryThreeCoordinatesFreePos));
+                            responseData.result = actionAddress.Address;
+                            return responseData;
+                        }
+                    }
+                }
+ 
+                s7.ConnectClose();
+ 
+                return responseData;
+            }
+            catch (Exception ex)
+            {
+                Log.Instance.WriteLogAdd(ActionTypeEnum.QueryThreeCoordinatesFreePos + "查询三坐标检测空闲位置===>>" + ex.Message + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.QueryThreeCoordinatesFreePos));
+                responseData.result = "false";
+                return responseData;
+            }
+        }
+
         /// <summary>
         /// 启动三坐标
         /// </summary> 
-        public async Task<ResponseECSData> StartCoordinateMeasuringMachine(RequestData<WorkData> req)
+        public async Task<ResponseECSData> StartThreeCoordinates(RequestData<WorkData> req)
         {
             ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
             try
@@ -1574,14 +1647,14 @@ namespace IMCS.CCS.Services
 
                 if (device == null)
                 {
-                    Log.Instance.WriteLogAdd(ActionTypeEnum.StartCoordinateMeasuringMachine + "设备已离线===>>" + JsonConvert.SerializeObject(req),
-                    EnumHelper.GetDescription(ActionTypeEnum.StartCoordinateMeasuringMachine));
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.StartThreeCoordinates + "设备已离线===>>" + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.StartThreeCoordinates));
                     responseData.result = "false";
                     return responseData;
                 }
 
                 CcsAction actionQuery = new CcsAction();
-                actionQuery.OperateType = ActionTypeEnum.StartCoordinateMeasuringMachine.ToString();
+                actionQuery.OperateType = ActionTypeEnum.StartThreeCoordinates.ToString();
                 actionQuery.Ip = req.url;
                 CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault(); 
 
@@ -1590,8 +1663,8 @@ namespace IMCS.CCS.Services
                 if (!ConnectionResult.IsSuccess)
                 {
                     s7.ConnectClose();
-                    Log.Instance.WriteLogAdd(ActionTypeEnum.StartCoordinateMeasuringMachine + "启动三坐标异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
-                    EnumHelper.GetDescription(ActionTypeEnum.StartCoordinateMeasuringMachine));
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.StartThreeCoordinates + "启动三坐标异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.StartThreeCoordinates));
                     responseData.result = "false";
                     return responseData;
                 }
@@ -1600,68 +1673,67 @@ namespace IMCS.CCS.Services
                 actionAddressQuery.ActionId = actionInfo.Id;
                 List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
 
-                //查询条件
+                CcsActionAddress freeActionAdress = new CcsActionAddress();
+                //查询空闲位置
                 List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
                 foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
                 {
                     if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
                     {
                         var operateResult = s7.ReadInt16(actionAddress.Address);
-                        if (actionAddress.CheckType ? operateResult.ToString().Equals(actionAddress.Value) : operateResult.ToString() != actionAddress.Value)
+                        if (operateResult.ToString() == actionAddress.Value)
                         {
-                            s7.ConnectClose();
-                            Log.Instance.WriteLogAdd(ActionTypeEnum.StartCoordinateMeasuringMachine + "启动异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
-                            EnumHelper.GetDescription(ActionTypeEnum.StartCoordinateMeasuringMachine));
-                            responseData.result = "false";
-                            return responseData;
+                            freeActionAdress = actionAddress;
+                            break;
                         }
                     }
                 }
+                //判断是否存在空闲滑台
+                if(freeActionAdress == null)
+                {
+                    s7.ConnectClose();
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.StartThreeCoordinates + "启动三坐标异常===>>" + "当前没有空闲位置" + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.StartThreeCoordinates));
+                    responseData.result = "false";
+                    return responseData;
+                }
 
-                //查询写入地址列表
-                List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
+                //根据sort顺序,查询左中右空闲位置,写入地址列表
+                List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString() && o.Sort == freeActionAdress.Sort).ToList();
                 foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
                 {
                     if (!string.IsNullOrEmpty(actionAddress.Address))
                     {
-                        //string Address = ToolUtils.AddressConvertDBW(actionAddress.Address); 
-                        if (actionAddress.Sort == 1)
+                        if(actionAddress.Value == "workProgramName")
+                        {
+                            s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(req.data.workProgramName, 20));
+                        }else if (actionAddress.Value == "workId")
                         {
                             s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(req.data.workId, 40));
-                            Thread.Sleep(SLEEP_TIME);
-                        } else if (actionAddress.Sort == 2) {
-                            s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(req.data.workType, 20));
-                            Thread.Sleep(SLEEP_TIME);
                         }
-                        else if (actionAddress.Sort == 3)
+                        else if (actionAddress.Value == "procedureNo")
                         {
-                            short n = 1;
-                            s7.Write(actionAddress.Address, n);
-                            Thread.Sleep(SLEEP_TIME);
+                            s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(req.data.procedureNo, 20));
                         }
-                        else if (actionAddress.Sort == 4)
-                        {
-                            short n = 0;
-                            s7.Write(actionAddress.Address, n);
-                            Thread.Sleep(SLEEP_TIME);
-                        } 
+
+                        Thread.Sleep(SLEEP_TIME);  
                     }
                 }  
                 s7.ConnectClose();
 
                 //插入回调
-                TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartCoordinateMeasuringMachine.ToString(),
-                    EnumHelper.GetDescription(ActionTypeEnum.StartCoordinateMeasuringMachine), req.taskId, req.taskNodeId); 
-
+                TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartThreeCoordinates.ToString(),
+                    EnumHelper.GetDescription(ActionTypeEnum.StartThreeCoordinates), req.taskId, req.taskNodeId); 
+               
                 await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses , taskCallbackData));
-                Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartCoordinateMeasuringMachine) + "启动三坐标成功===>>" + JsonConvert.SerializeObject(req)
-                   , EnumHelper.GetDescription(ActionTypeEnum.StartCoordinateMeasuringMachine));
+                Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartThreeCoordinates) + "启动三坐标成功===>>" + JsonConvert.SerializeObject(req)
+                   , EnumHelper.GetDescription(ActionTypeEnum.StartThreeCoordinates));
                 return responseData;
             }
             catch (Exception ex)
             {
-                Log.Instance.WriteLogAdd(ActionTypeEnum.StartCoordinateMeasuringMachine + "启动三坐标故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
-                    EnumHelper.GetDescription(ActionTypeEnum.StartCoordinateMeasuringMachine));
+                Log.Instance.WriteLogAdd(ActionTypeEnum.StartThreeCoordinates + "启动三坐标故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.StartThreeCoordinates));
                 responseData.result = "false";
                 return responseData;
             }
@@ -1956,11 +2028,9 @@ namespace IMCS.CCS.Services
 
                 CcsAction actionQuery = new CcsAction();
                 actionQuery.OperateType = ActionTypeEnum.ReadRFID.ToString();
-                actionQuery.Ip = req.url;
-                actionQuery.OrderIndex = req.data.orderIndex;
+                actionQuery.Ip = req.url; 
                 List<CcsAction> actions = _ccsActionService.GetList(actionQuery);
-                CcsAction actionInfo = actions[0];
-                string Content = req.data.content;
+                CcsAction actionInfo = actions[0]; 
 
                 Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
                 if (s7.IsConnected != true)
@@ -2024,10 +2094,8 @@ namespace IMCS.CCS.Services
 
                 CcsAction actionQuery = new CcsAction();
                 actionQuery.OperateType = ActionTypeEnum.WriteRFID.ToString();
-                actionQuery.Ip = req.url;
-                actionQuery.OrderIndex = req.data.orderIndex;
-                CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault(); 
-                string Content = req.data.content;
+                actionQuery.Ip = req.url; 
+                CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();  
 
                 Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
                 if (s7.IsConnected != true)

+ 78 - 5
IMCS_CCS/Service/Impl/TaskJobService.cs

@@ -36,6 +36,8 @@ namespace IMCS.CCS.Service.Impl
 
         private readonly IEquipmentMonitorService _equipmentMonitorService;
 
+        private readonly ICcsActionAddressService _ccsActionAddressService;
+
         private string ecsUrlContext;
 
         private string fanucUrlContext; 
@@ -65,6 +67,7 @@ namespace IMCS.CCS.Service.Impl
                               IApiRequestService apiRequestService,
                               ICcsTagValueService ccsTagValueService,
                               IEquipmentMonitorService equipmentMonitorService,
+                              ICcsActionAddressService ccsActionAddressService,
                               IConfiguration configuration)
         {
             _redisService = redisService;
@@ -73,6 +76,7 @@ namespace IMCS.CCS.Service.Impl
             _apiRequestService = apiRequestService;
             _ccsTagValueService = ccsTagValueService;
             _equipmentMonitorService = equipmentMonitorService;
+            _ccsActionAddressService = ccsActionAddressService;
             Configuration = configuration;
             ecsUrlContext = Configuration.GetConnectionString("ecsUrlContext");
             fanucUrlContext = Configuration.GetConnectionString("fanucUrlContext");
@@ -1032,7 +1036,7 @@ namespace IMCS.CCS.Service.Impl
             //在线设备
             List<Device> deviceList = _deviceService.GetDeviceList();
 
-            taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartCoordinateMeasuringMachine.ToString())).ToList();
+            taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartThreeCoordinates.ToString())).ToList();
             List<TaskCallback> list = new List<TaskCallback>();
             foreach (Device device in deviceList)
             {
@@ -1051,16 +1055,85 @@ namespace IMCS.CCS.Service.Impl
                 {
                     DateTime currentTime = DateTime.Now;
                     CcsTagValue tagValueQuery = new CcsTagValue();
-                    tagValueQuery.Ip = task.IP;
-                    //tagValueQuery.Address = task.Address;
+                    tagValueQuery.Ip = task.IP; 
                     List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery).ToList();
                     CcsTagValue tagValue = tagValues.Where(o=>o.Address == task.Address).FirstOrDefault();
                      
                     if (tagValue != null && (tagValue.TagValue == task.CallbackValue || tagValue.TagValue == task.CallbackValue2))
                     {
-                        CallBackRequestData requestData = new CallBackRequestData();
+                        CallBackThreeCoordinatesRequestData requestData = new CallBackThreeCoordinatesRequestData();
                         requestData.taskId = long.Parse(task.TaskId);
-                        requestData.taskNodeId = long.Parse(task.TaskNodeId);
+                        requestData.taskNodeId = long.Parse(task.TaskNodeId); 
+
+                        //查询三坐标已测量工件id和工位
+                        SiemensS7Net s7 = DevicePlcS7.SiemensS7(task.IP);
+                        HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
+                        if (!ConnectionResult.IsSuccess)
+                        {
+                            s7.ConnectClose();
+                            Log.Instance.WriteLogAdd(ActionTypeEnum.StartThreeCoordinates + "启动三坐标异常===>>" + "PLC连接不上" ,
+                            EnumHelper.GetDescription(ActionTypeEnum.StartThreeCoordinates));
+                        }
+
+
+                        CcsActionAddress actionAddressQuery = new CcsActionAddress();
+                        actionAddressQuery.Type = "CALLBACK_CHECK_COOR";
+                        List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
+
+                        CcsActionAddress freeActionAdress = new CcsActionAddress();
+                        //查询空闲位置
+                        List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
+                        foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
+                        {
+                            if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
+                            {
+                                var operateResult = s7.ReadInt16(actionAddress.Address);
+                                if (operateResult.ToString() == actionAddress.Value)
+                                {
+                                    freeActionAdress = actionAddress;
+                                    break;
+                                }
+                            }
+                        }
+                        //判断是否可取滑台
+                        if (freeActionAdress != null)
+                        {
+                            //根据sort顺序,查询左中右可取位置,写入地址列表
+                            CcsActionAddress actionAddressGet = new CcsActionAddress();
+                            actionAddressQuery.Type = "CALLBACK_GET_COOR";
+                            actionAddressQuery.Sort = freeActionAdress.Sort;
+                            List<CcsActionAddress> GetCcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
+
+                            //赋值工位id
+                            requestData.stationId = freeActionAdress.Address;
+                            foreach (CcsActionAddress actionAddress in GetCcsActionAddresses)
+                            {
+                                if (!string.IsNullOrEmpty(actionAddress.Address))
+                                { 
+                                     if (actionAddress.Value == "workId")
+                                    {
+                                        var operateResult = s7.ReadString(actionAddress.Address);
+                                        requestData.workId = operateResult.ToString();
+                                    }
+                                   /* else if (actionAddress.Value == "procedureNo")
+                                    {
+                                        s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(req.data.procedureNo, 20));
+                                    }
+                                    else if (actionAddress.Value == "workProgramName")
+                                    {
+                                        var operateResult = s7.ReadString(actionAddress.Address);
+
+                                        
+
+                                    }*/
+
+                                }
+                            }
+
+
+                        }
+                        s7.ConnectClose(); 
+
                         var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
                         ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
                         if (result.IsSuccess && responseECSCallback.code == 0)

File diff suppressed because it is too large
+ 0 - 0
IMCS_CCS/wwwroot/db/Tasks.json


Some files were not shown because too many files changed in this diff