using DataCheck;
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)
{
///
/// 查询所有的 堆垛机信息
///
///
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();
}
}
}