using DataCheck; using Microsoft.VisualStudio.Web.CodeGenerators.Mvc.Dependency; using System.Collections.Generic; using WcsMain.ApiServe.Controllers.Dto; using WcsMain.ApiServe.Controllers.Dto.WcsDto.Stacker; using WcsMain.ApiServe.Factory; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; using WcsMain.EquipOperation.Stacker; using WcsMain.WcsAttribute.AutoFacAttribute; namespace WcsMain.ApiServe.Service.WcsService; [Service] public class StackerService(AppStackerDao stackerDao, StackerOperation stackerOperation, AppBaseErrDao baseErrDao) { /// /// 查询所有的 堆垛机信息 /// /// public WcsApiResponse> GetStacker() { List? stackers = stackerDao.Select(new AppStacker()); if(stackers == default) { return WcsApiResponseFactory.DataBaseErr>(); } return WcsApiResponseFactory.Success(stackers, "查询成功"); } /// /// 查询所有的 堆垛机状态信息 ---- 从设备返回 /// /// public WcsApiResponse> GetStackerStatus() { List? stackers = stackerDao.Select(new AppStacker()); if (stackers == default) { return WcsApiResponseFactory.DataBaseErr>(); } List getStackerStatusResponses = []; foreach(AppStacker stacker in stackers) { GetStackerStatusResponse stackerStatusResponse = new() { StackerId = stacker.StackerId, StackerName = stacker.StackerName, StackerStatus = stacker.StackerStatus, ForkStatus = stacker.ForkStatus, }; /* 获取堆垛机状态 */ var (errMsg, stackerInfo) = stackerOperation.GetStackerInfo((int)stacker.StackerId!); if(string.IsNullOrEmpty(errMsg) && stackerInfo != default) { stackerStatusResponse.Message = "查询成功"; stackerStatusResponse.PlcId = stackerInfo.PlcId.ToString() + " / " + stackerInfo.Spare1.ToString(); stackerStatusResponse.ControlModel = ((int)stackerInfo.ControlModel).ToString(); stackerStatusResponse.StackerStatusEquip = ((int)stackerInfo.StackerStatus).ToString(); stackerStatusResponse.Queue = stackerInfo.Row; stackerStatusResponse.Line = stackerInfo.Line; stackerStatusResponse.Layer = stackerInfo.Layer; stackerStatusResponse.Depth = stackerInfo.Depth; stackerStatusResponse.Code = new Func(() => { string code1 = stackerInfo.Code == 0 ? "-" : $"ASRS{stackerInfo.Code.ToString().PadLeft(6, '0')}"; string code2 = stackerInfo.DeletePlcId == 0 ? "-" : $"ASRS{stackerInfo.DeletePlcId.ToString().PadLeft(6, '0')}"; return $"{code1} / {code2}"; }).Invoke(); stackerStatusResponse.ErrCode = stackerInfo.ErrCode; } else { stackerStatusResponse.Message = errMsg; } getStackerStatusResponses.Add(stackerStatusResponse); } return WcsApiResponseFactory.Success(getStackerStatusResponses, "查询成功"); } /// /// 添加或者编辑堆垛机信息 /// /// /// public WcsApiResponse EditStacker(EditStackerRequest request) { if(!CheckData.CheckDataRules(request)) { return WcsApiResponseFactory.RequestErr(); } /* 查询是否存在这个编号的堆垛机,若存在则更新数据,若不存在则添加 */ List? appStackers = stackerDao.Select(new AppStacker { StackerId = request.StackerId }); if (appStackers == default) { return WcsApiResponseFactory.DataBaseErr(); } if (appStackers.Count == 0) // 没有数据,新增一条新的 { var insertResult = stackerDao.Insert(new AppStacker { StackerId = request.StackerId, StackerName = request.StackerName, StackerStatus = request.StackerStatus, ForkStatus = request.ForkStatus, ActionPlc = request.ActionPlc, InStand = request.InStand, OutStand = request.OutStand, Remark = request.Remark, }); return insertResult > 0 ? WcsApiResponseFactory.Success() : WcsApiResponseFactory.DataBaseErr(); } else // 存在,更新数据 { var updateResult = stackerDao.Update(new AppStacker { StackerId = request.StackerId, StackerName = request.StackerName, StackerStatus = request.StackerStatus, ForkStatus = request.ForkStatus, ActionPlc = request.ActionPlc, InStand = request.InStand, OutStand = request.OutStand, Remark = request.Remark, }); return updateResult > 0 ? WcsApiResponseFactory.Success() : WcsApiResponseFactory.DataBaseErr(); } } /// /// 查询对应的报警信息 /// /// /// public WcsApiResponse QueryErrInfo(QueryErrInfoRequest request) { var queryResult = baseErrDao.Select(new AppBaseErr { Area = request.Area, ErrNo = request.ErrNo }); if (queryResult == default) return WcsApiResponseFactory.DataBaseErr(); if (queryResult.Count() == 0) return WcsApiResponseFactory.Fail(msg:"没有对应的报警资料"); var errInfo = queryResult[0]; return WcsApiResponseFactory.Success(errInfo); } }